| | 170 | |
| | 171 | |
| | 172 | |
| | 173 | == Управување со кошничка |
| | 174 | |
| | 175 | Оваа функционалност овозможува додавање, бришење и ажурирање на продукти во кошничката. |
| | 176 | |
| | 177 | = Функција fn_validate_product_stock |
| | 178 | |
| | 179 | Проверува дали постои доволна количина од избраниот продукт за извршување на бараната операција. |
| | 180 | |
| | 181 | {{{ |
| | 182 | CREATE OR REPLACE FUNCTION fn_validate_product_stock( |
| | 183 | p_product_id INT, |
| | 184 | p_quantity INT |
| | 185 | ) |
| | 186 | RETURNS VOID LANGUAGE plpgsql AS $$ |
| | 187 | DECLARE all_stock INT; |
| | 188 | BEGIN |
| | 189 | SELECT quantity INTO all_stock |
| | 190 | FROM product |
| | 191 | WHERE product_id = p_product_id AND is_active = TRUE; |
| | 192 | |
| | 193 | IF NOT FOUND THEN |
| | 194 | RAISE EXCEPTION 'Produktot ne postoi ili ne e aktiven'; |
| | 195 | END IF; |
| | 196 | |
| | 197 | IF p_quantity > all_stock THEN |
| | 198 | RAISE EXCEPTION 'Nema dovolno zaliha. Barate: %, dostapno: %', p_quantity, all_stock; |
| | 199 | END IF; |
| | 200 | END; |
| | 201 | $$; |
| | 202 | }}} |
| | 203 | |
| | 204 | |
| | 205 | = Функција fn_calc_cart_total |
| | 206 | |
| | 207 | Ја пресметува вкупната вредност на кошничката. |
| | 208 | |
| | 209 | {{{ |
| | 210 | CREATE OR REPLACE FUNCTION fn_calc_cart_total(p_cart_id INT) |
| | 211 | RETURNS INT LANGUAGE plpgsql AS $$ |
| | 212 | DECLARE v_total INT; |
| | 213 | BEGIN |
| | 214 | SELECT COALESCE(SUM(quantity * price_at_time), 0) |
| | 215 | INTO v_total |
| | 216 | FROM cartitems |
| | 217 | WHERE cart_id = p_cart_id; |
| | 218 | |
| | 219 | RETURN v_total; |
| | 220 | END; |
| | 221 | $$; |
| | 222 | }}} |
| | 223 | |
| | 224 | |
| | 225 | |