Это последняя в серии статья (для облегчения многих). Здесь я расскажу работу модуля управления документами и выложу исходный код проекта. Этот модуль оказался сложнее в плане манипуляций с базой, потому пришлось помучиться с управлением данных.

Функция добавления документа:
function document.add()

	base = require "database"

	print("\n Текущий список клиентов: \n")

	data = base.select_from_where( "number, name", "customer", nil )
	while data do
		print("| № " .. tostring(data.number) .. " | " .. tostring(data.name) .. " | " )
		data = thread:fetch(data, "a")
	end

	print("\n Введите номер нужного Вам клиента: \n")
	customer = io.stdin:read()

	data = base.select_from_where( "number, nominal, price", "position", nil )
	while data do
		print("| № " .. data.number .. " | " .. data.nominal .. " | " .. data.price .. " руб. |" )
		data = thread:fetch(data, "a")
	end

	print("\n Выберите номер услуги из списка.")
	position = io.stdin:read()
	print("\n Укажите внесённую клиентом сумму.")
	price = io.stdin:read()

	base.insert_into_values( "document", "customer, position, income", tostring(customer) .. ', ' .. tostring(position) .. ', ' .. tostring(price) )
	data = base.select_from_where( "document.number, customer.name, position.nominal, document.income, position.price", "document, customer, position", "document.customer = customer.number AND document.position = position.number" )
	while data do
		print("\n | № " .. data.number .. " | " .. data.name .. " | " .. data.nominal .. " | " .. data.income .. " руб. | " .. data.price .. " руб. |" )
		data = thread:fetch(data, "a")
	end

	print("\n Запись добавлена. \n")

end

Здесь происходит выборка из списка клиентов и позиций. Дальше забираются данные выплат и запись фиксируется в индексной таблице.

Функция редактирования выплаты в документе:
function document.change()

	print("\n Список текущих документов: \n")

	base = require "database"

	data = base.select_from_where("document.number, customer.name, position.nominal, document.income, position.price", "document, customer, position", "document.customer = customer.number AND document.position = position.number")
	while data do
		print("\n | № " .. data.number .. " | " .. data.name .. " | " .. data.nominal .. " | " .. data.income .. " руб. | " .. data.price .. " руб. |" )
		data = thread:fetch(data, "a")
	end	

	print("\n Укажите номер редактируемой записи \n")
	doc = io.stdin:read()
	print("\n Укажите значение выплаты \n")
	income = io.stdin:read()

	base.update_set_where("document", "income = " .. tostring(income), "number = " .. tostring(doc))
	
	print("\n Выплата зафиксирована. \n")

end

Выбирается документ из списка и по индексу редактируется стоимость выплаты. В программе каждая из позиций представляет собой один документ. Сделано это для удобства и уменьшения управляемых сущностей.

Функция удаления документа:
function document.drop()

	print("\n Список текущих документов: \n")

	base = require "database"

	data = base.select_from_where( "document.number, customer.name, position.nominal, document.income, position.price", "document, customer, position", "document.customer = customer.number AND document.position = position.number" )
	while data do
		print("\n | № " .. data.number .. " | " .. data.name .. " | " .. data.nominal .. " | " .. data.income .. " руб. | " .. data.price .. " руб. |" )
		data = thread:fetch(data, "a")
	end	

	print("\n Укажите номер удаляемой записи \n")
	doc = io.stdin:read()

	base.delete_from_where("document", "number = " .. tostring(doc))
	
	print("\n Запись удалена. \n")
	
end

Обычное удаление записи. Документ уходит безвозвратно.

Пожалуй, на этом можно завершить описание проекта. Такие вещи, как работу и описание модуля вычисления баланса, бинарной компилляции скриптов и прочие радости я оставлю на факультативное изучение.

Проект выложен на GitHub по адресу: https://github.com/hantenellotf/CVS. Программа имеют лицензию GNU GPL 3.0, что отражено в репозитарии. Приятного изучения всем!

P.S. Маленькая просьба — если хотите передать замечание по этому циклу статей, прошу предварительно прочитать статью «Разработка микро-учётной системы на lua, часть вторая. Постановка задачи», в которой я указываю условия разработки программы и функции, которые на неё возлагаются. Учитывайте это.

P.S.S. Пасхалок не будет!
Поделиться с друзьями
-->

Комментарии (0)