Это последняя в серии статья (для облегчения многих). Здесь я расскажу работу модуля управления документами и выложу исходный код проекта. Этот модуль оказался сложнее в плане манипуляций с базой, потому пришлось помучиться с управлением данных.
Функция добавления документа:
Здесь происходит выборка из списка клиентов и позиций. Дальше забираются данные выплат и запись фиксируется в индексной таблице.
Функция редактирования выплаты в документе:
Выбирается документ из списка и по индексу редактируется стоимость выплаты. В программе каждая из позиций представляет собой один документ. Сделано это для удобства и уменьшения управляемых сущностей.
Функция удаления документа:
Обычное удаление записи. Документ уходит безвозвратно.
Пожалуй, на этом можно завершить описание проекта. Такие вещи, как работу и описание модуля вычисления баланса, бинарной компилляции скриптов и прочие радости я оставлю на факультативное изучение.
Проект выложен на GitHub по адресу: https://github.com/hantenellotf/CVS. Программа имеют лицензию GNU GPL 3.0, что отражено в репозитарии. Приятного изучения всем!
P.S. Маленькая просьба — если хотите передать замечание по этому циклу статей, прошу предварительно прочитать статью «Разработка микро-учётной системы на lua, часть вторая. Постановка задачи», в которой я указываю условия разработки программы и функции, которые на неё возлагаются. Учитывайте это.
P.S.S. Пасхалок не будет!
Функция добавления документа:
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. Пасхалок не будет!
Поделиться с друзьями