== Додавање трансакција ==== Актери: **Најавен корисник** 1. Корисникот притиска на копчето за додавање на трансакции 2. Се отвора форма каде корисникот ги внесува следните детали за трансакцијата: - Дали трансакцијата додава или одзема од сметка (задолжително поле) - Име на трансакција (задолжително поле) - Износ на цела трансакција (задолжително поле) - Датум на трансакцијата (опционално, доколку не се внесе се зема моменталното време) - Таг за категоризација (опционално, но препорачливо) - Сметка на која трансакцијата се поврзува (се бира од достапните) 3. Корисникот може да додаде дополнителни детали преку динамично додавање на полиња со клик на копче за додавање кои ќе бидат зачувани како {{{earned_amount}}} и {{{spent_amount}}} во табелата {{{transaction_breakdown}}} 4. Апликацијата ги валидира внесените податоци (на пример, проверува дали сите задолжителни полиња се пополнети и дали износот е валиден број) 5. Апликацијата внесува нов запис во табелите {{{transaction}}} и {{{tag_assigned_to_transaction}}}: {{{#!sql INSERT INTO transaction (transaction_name, amount, net_amount, date) VALUES ('Пазарување', 3500.00, 0, '2024-11-23 13:51:35+02:00'); RETURNING transaction_id; }}} {{{#!sql INSERT INTO tag_assigned_to_transaction (transaction_id, tag_id) VALUES (1, 3); RETURNING tag_assigned_to_transaction_id; }}} 6. Трансакцијата тригерира креирање запис во {{{transaction_breakdown}}} кој исто така ја ажурира сметката и пресметува {{{net_amount}}} преку тригер: - Во зависност од тоа дали трансакцијата додава или одзема се прави додавање во соодветното поле на {{{transaction_breakdown}}}: - За додавање на сметка: {{{#!sql INSERT INTO transaction_breakdown (transaction_id, transaction_account_id, earned_amount, spent_amount) VALUES (1, 2, 3500, 0); }}} - За одземање од сметка: {{{#!sql INSERT INTO transaction_breakdown (transaction_id, transaction_account_id, earned_amount, spent_amount) VALUES (1, 2, 0, 3500); }}} - На крај се ажурира балансот во {{{transaction_account}}} {{{#!sql UPDATE transaction_account: SET balance = balance - 3500 WHERE transaction_account_id = 2; }}} 7. Ако корисникот додал дополнителни детали преку динамично додавање на полиња(на пример, {{{earned_amount}}} и {{{spent_amount}}}), апликацијата внесува соодветни записи во табелата {{{transaction_breakdown}}}: {{{#!sql INSERT INTO transaction_breakdown (transaction_id, transaction_account_id, earned_amount, spent_amount) VALUES (1, 2, 0, 1500), (1, 3, 200, 0); }}} 8. Тригер во базата: - Автоматски ја пресметува и ажурира вредноста на {{{net_amount}}} во табелата {{{transaction}}} според деталите внесени во табелата {{{transaction_breakdown}}} 9. По успешното додавање, тригерот: - Го ажурира балансот на поврзаната трансакциска сметка во табелата {{{transaction_account}}}: {{{#!sql UPDATE transaction_account SET balance = balance - 1500 + 200 WHERE transaction_account_id IN (2, 3); }}} - Го известува корисникот за успешното додавање на трансакцијата.