| | 99 | END; |
| | 100 | $$ LANGUAGE plpgsql; |
| | 101 | |
| | 102 | }}} |
| | 103 | |
| | 104 | === `cancel_ticket` |
| | 105 | |
| | 106 | Оваа процедура го менаџира процесот на откажување на купен билет и иницирање рефундација на средствата. Таа автоматски ја пресметува сумата за поврат (со вклучени пенали), го евидентира откажувањето во базата и го ослободува седиштето за нов купувач. |
| | 107 | |
| | 108 | {{{ |
| | 109 | |
| | 110 | CREATE OR REPLACE PROCEDURE cancel_ticket( |
| | 111 | p_purchase_id BIGINT, |
| | 112 | p_reason TEXT |
| | 113 | ) |
| | 114 | AS $$ |
| | 115 | DECLARE |
| | 116 | v_refund_amount FLOAT4; |
| | 117 | v_ticket_id BIGINT; |
| | 118 | BEGIN |
| | 119 | v_refund_amount := calculate_refund_amount(p_purchase_id); |
| | 120 | |
| | 121 | SELECT ticket_id INTO v_ticket_id |
| | 122 | FROM "Ticket_Purchase" |
| | 123 | WHERE purchase_id = p_purchase_id; |
| | 124 | |
| | 125 | INSERT INTO "Ticket_Refund" (purchase_id, refund_amount, reason) |
| | 126 | VALUES (p_purchase_id, v_refund_amount, p_reason); |
| | 127 | |
| | 128 | UPDATE "Ticket" SET is_available = TRUE WHERE ticket_id = v_ticket_id; |
| | 129 | |
| | 130 | RAISE NOTICE 'Ticket cancelled. Refund amount: %', v_refund_amount; |