Ситуация такая, некоторые пользователи могут провести неверную операцию с деньгами. Например пришло на кассу 500 Руб. а оператор нечаянно вбил 5000. В итоге касса не сходится. Нужно вручную лезть в базу данных и по id операции искать ее, менять сумму на правильную, а затем еще и переформировывать документы.
К сожалению таких операций последнее время очень много и я хотел бы написать скрипт, который автоматически будет вносить изменения.
Как я это делаю вручную. Подключаюсь к базе и имею 3 типа входных данных - id операции, сумма правильная, может дата когда была операция.
Имею
id = 13662014
Сумма = 2000
- Ищу операцию
SELECT id, date_created, office_id, date_issued, summ, docnumber, contragent_name, contragent_document_number
FROM public.main_operation
where id = 13662014;
- Получаю операцию
id | date_created | office_id | date_issued | summ | docnumber | contragent_name | contragent_document_number
----------+-------------------------------+-----------+-------------------------------+------------+-----------+------------------------+----------------------------
13662014 | 2017-11-07 08:54:09.098759+00 | 320 | 2017-11-07 08:54:09.099048+00 | 3000.00000 | | Бобкова ОкÑана Юрьевна |
(1 row)
- Меняю сумму с 3000 на 2000
UPDATE public.main_operation SET summ=2000.0 WHERE id=13662014;
- Затем нужно изменить сумму в операции в кассу
SELECT id, "number", cashday_id, operation_id, ground, office_name, created, changed, amount, cashier
FROM public.cash_bookentry
where operation_id = 13662014;
id | number | cashday_id | operation_id | ground | office_name | created | changed | amount | cashier
----------+--------+------------+--------------+----------------+-------------+-------------------------------+-------------------------------+---------+------------------------
13840384 | 8216 | 324479 | 13662014 | Размен-Возврат | ТП ТомÑк 2 | 2017-11-07 08:54:09.209394+00 | 2017-11-07 08:54:09.377073+00 | 3000.00 | Кригер Елена Сергеевна
(1 row)
UPDATE public.cash_bookentry SET amount=2000.0 WHERE id=13840384;
- Теперь нужно изменить состояние кассы. У кассы есть 2 состояние - на момент открытия кассового дня и на момент закрытия. Ищу операцию по времени и номеру кассы
SELECT id, book_date, office_id, is_closed, beginning_balance, ending_balance, exact_time, user_id, editor_id, count_pages
FROM public.cash_cashday
WHERE (book_date between '2017-11-07' and '2017-11-08') and office_id = 320;
- Получаю 2 записи. На момент открытия и на момент закрытия
id | book_date | office_id | is_closed | beginning_balance | ending_balance | exact_time | user_id | editor_id | count_pages
--------+------------+-----------+-----------+-------------------+----------------+------------------+---------+-----------+-------------
324479 | 2017-11-07 | 320 | t | 106876.63 | 121036.13 | 1510020734.35554 | 6083 | 6535 | 2
324716 | 2017-11-08 | 320 | t | 121036.13 | 121227.63 | 1510103344.58973 | 4853 | 6083 | 2
- По логике мне нужно удалить штуку (1000). Делаю запросы
UPDATE public.cash_cashday SET beginning_balance=106876.63, ending_balance=120036.13 WHERE id = 324479;
UPDATE public.cash_cashday SET beginning_balance=120036.13, ending_balance=120227.63 WHERE id = 324716;
- Далее есть еще одна сущность, в которой так же нужно внести изменения
SELECT * FROM cashflow_balance WHERE office_id = 320 and (day between '2017-11-07' and '2017-11-08') ;
id | day | cashflow_type | office_id | balance_start
--------+------------+---------------+-----------+---------------
562646 | 2017-11-07 | 0 | 320 | 106876.63
562896 | 2017-11-08 | 0 | 320 | 121036.13
(2 rows)
UPDATE public.cashflow_balance SET balance_start = 120036.13 WHERE id = 562896;
Хочу заавтоматизировать это все дело. Помогите с чего начать? Куда двигаться. Хотелось бы чтобы скрипт работал так
- скрипту на вход дают id и верную сумму.
- Далее он выполняет SELECT по поиску самой операции.
- Мы видим, что это та самая.
- нажимаем Enter
- Он мне делает UPDATE
- Смотрю результат
- Нажимаю Enter
- Следующий SLECT
- Результат
- UPDATE
- результат
И т.д. может у вас будет лучше какой-то алгоритм. Помогите плиз.
ИМЕЮ БАЗОВЫЕ ЗНАНИЯ ПО PYTHON. ЕСТЬ СЕРТИФИКАТ PYTHON STARTER. Поэтому не пишите плиз - учи питон или найми программиста. Дайте направление куда двигаться.