| 1 | == Додавање трансакција |
| 2 | |
| 3 | ==== Актери: Најавен корисник |
| 4 | 1. Корисникот притиска на копчето за додавање на трансакции |
| 5 | 2. Се отвора форма каде корисникот ги внесува следните детали за трансакцијата: |
| 6 | - Дали трансакцијата додава или одзема од сметка (задолжително поле) |
| 7 | - Име на трансакција (задолжително поле) |
| 8 | - Износ на цела трансакција (задолжително поле) |
| 9 | - Датум на трансакцијата (опционално, доколку не се внесе се зема моменталното време) |
| 10 | - Таг за категоризација (опционално, но препорачливо) |
| 11 | - Сметка на која трансакцијата се поврзува (се бира од достапните) |
| 12 | 3. Корисникот може да додаде дополнителни детали преку динамично додавање на полиња со клик на копче за додавање кои ќе бидат зачувани како {{{earned_amount}}} и {{{spent_amount}}} во табелата {{{transaction_breakdown}}} |
| 13 | 4. Апликацијата ги валидира внесените податоци (на пример, проверува дали сите задолжителни полиња се пополнети и дали износот е валиден број) |
| 14 | 5. Апликацијата внесува нов запис во табелата {{{transaction}}}: |
| 15 | {{{#!sql |
| 16 | INSERT INTO transaction (transaction_name, amount, net_amount, date, tag_id) |
| 17 | VALUES ('Пазарување', 3500.00, 0, '2024-11-23 13:51:35+02:00', 3); |
| 18 | RETURNING transaction_id; |
| 19 | }}} |
| 20 | 6. Трансакцијата тригерира креирање запис во {{{transaction_breakdown}}} кој исто така ја ажурира сметката и пресметува {{{net_amount}}} преку тригер: |
| 21 | - Во зависност од тоа дали трансакцијата додава или одзема се прави додавање во соодветното поле на {{{transaction_breakdown}}}: |
| 22 | - За додавање на сметка: |
| 23 | {{{#!sql |
| 24 | INSERT INTO transaction_breakdown (transaction_id, transaction_account_id, earned_amount, spent_amount) |
| 25 | VALUES (1, 2, 3500, 0); |
| 26 | }}} |
| 27 | - За одземање од сметка: |
| 28 | {{{#!sql |
| 29 | INSERT INTO transaction_breakdown (transaction_id, transaction_account_id, earned_amount, spent_amount) |
| 30 | VALUES (1, 2, 0, 3500); |
| 31 | }}} |
| 32 | - На крај се ажурира балансот во {{{transaction_account}}} |
| 33 | {{{#!sql |
| 34 | UPDATE transaction_account: |
| 35 | SET balance = balance - 3500 |
| 36 | WHERE transaction_account_id = 2; |
| 37 | }}} |
| 38 | 7. Ако корисникот додал дополнителни детали преку динамично додавање на полиња(на пример, {{{earned_amount}}} и {{{spent_amount}}}), апликацијата внесува соодветни записи во табелата {{{transaction_breakdown}}}: |
| 39 | {{{#!sql |
| 40 | INSERT INTO transaction_breakdown (transaction_id, transaction_account_id, earned_amount, spent_amount) |
| 41 | VALUES (1, 2, 0, 1500), |
| 42 | (1, 3, 200, 0); |
| 43 | }}} |
| 44 | 8. Тригер во базата: |
| 45 | - Автоматски ја пресметува и ажурира вредноста на {{{net_amount}}} во табелата {{{transaction}}} според деталите внесени во табелата {{{transaction_breakdown}}} |
| 46 | 9. По успешното додавање, тригерот: |
| 47 | - Го ажурира балансот на поврзаната трансакциска сметка во табелата {{{transaction_account}}}: |
| 48 | {{{#!sql |
| 49 | UPDATE transaction_account |
| 50 | SET balance = balance - 1500 + 200 |
| 51 | WHERE transaction_account_id IN (2, 3); |
| 52 | }}} |
| 53 | - Го известува корисникот за успешното додавање на трансакцијата. |