| | 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 | |