| 214 | 3. Комплетна резервација за пакет во трансакција |
| 215 | {{{ |
| 216 | CREATE OR REPLACE PROCEDURE create_package_reservation( |
| 217 | p_user INT, |
| 218 | p_package INT, |
| 219 | p_discount_amount NUMERIC DEFAULT 0 |
| 220 | ) |
| 221 | LANGUAGE plpgsql |
| 222 | AS $$ |
| 223 | DECLARE |
| 224 | package_price NUMERIC(12,2); |
| 225 | new_reservation INT; |
| 226 | BEGIN |
| 227 | SELECT price INTO package_price FROM package WHERE id_package = p_package; |
| 228 | |
| 229 | IF package_price IS NULL THEN |
| 230 | RAISE EXCEPTION 'Package % not found', p_package; |
| 231 | END IF; |
| 232 | |
| 233 | INSERT INTO reservation(id_user, time_point, premium_discount_applied, discount_amount, total_price) |
| 234 | VALUES (p_user, now(), CASE WHEN p_discount_amount > 0 THEN TRUE ELSE FALSE END, p_discount_amount, GREATEST(package_price - p_discount_amount, 0)) |
| 235 | RETURNING id_reservation INTO new_reservation; |
| 236 | |
| 237 | INSERT INTO package_reservation(id_package, id_reservation) |
| 238 | VALUES (p_package, new_reservation); |
| 239 | END; |
| 240 | $$; |
| 241 | }}} |
| 242 | |