| 225 | | |
| | 225 | = Процедура add_to_cart |
| | 226 | |
| | 227 | Додава продукт во кошничката. |
| | 228 | |
| | 229 | {{{ |
| | 230 | CREATE OR REPLACE PROCEDURE add_to_cart( |
| | 231 | p_cart_id INT, |
| | 232 | p_product_id INT, |
| | 233 | p_quantity INT |
| | 234 | ) |
| | 235 | LANGUAGE plpgsql |
| | 236 | AS $$ |
| | 237 | DECLARE |
| | 238 | v_price NUMERIC; |
| | 239 | BEGIN |
| | 240 | IF p_quantity <= 0 THEN |
| | 241 | RAISE EXCEPTION 'Kolicinata mora da e pogolema od 0'; |
| | 242 | END IF; |
| | 243 | |
| | 244 | SELECT price INTO v_price |
| | 245 | FROM product |
| | 246 | WHERE product_id = p_product_id AND is_active = 1; |
| | 247 | |
| | 248 | IF NOT FOUND THEN |
| | 249 | RAISE EXCEPTION 'Produktot ne postoi ili ne e aktiven'; |
| | 250 | END IF; |
| | 251 | |
| | 252 | PERFORM fn_validate_product_stock(p_product_id, p_quantity); |
| | 253 | |
| | 254 | INSERT INTO cartitems (cart_id, product_id, quantity, price_at_time) |
| | 255 | VALUES (p_cart_id, p_product_id, p_quantity, v_price); |
| | 256 | |
| | 257 | --azhurirame total price |
| | 258 | UPDATE cart |
| | 259 | SET total_price = fn_calc_cart_total(p_cart_id) |
| | 260 | WHERE cart_id = p_cart_id; |
| | 261 | END; |
| | 262 | $$; |
| | 263 | }}} |
| | 264 | |
| | 265 | = Процедура remove_from_cart |
| | 266 | |
| | 267 | Отстранува продукт од кошничката. |
| | 268 | |
| | 269 | {{{ |
| | 270 | CREATE OR REPLACE PROCEDURE remove_from_cart( |
| | 271 | p_cart_id INT, |
| | 272 | p_product_id INT |
| | 273 | ) |
| | 274 | LANGUAGE plpgsql |
| | 275 | AS $$ |
| | 276 | BEGIN |
| | 277 | DELETE FROM cartitems |
| | 278 | WHERE cart_id = p_cart_id |
| | 279 | AND product_id = p_product_id; |
| | 280 | |
| | 281 | IF NOT FOUND THEN |
| | 282 | RAISE EXCEPTION 'Produktot ne postoi vo kosnickata'; |
| | 283 | END IF; |
| | 284 | |
| | 285 | --azhurirame total price |
| | 286 | UPDATE cart |
| | 287 | SET total_price = fn_calc_cart_total(p_cart_id) |
| | 288 | WHERE cart_id = p_cart_id; |
| | 289 | END; |
| | 290 | $$; |
| | 291 | }}} |
| | 292 | |
| | 293 | = Процедура update_cart_quantity |
| | 294 | |
| | 295 | Ја менува количината на постоечки продукт во кошничката. |
| | 296 | |
| | 297 | {{{ |
| | 298 | CREATE OR REPLACE PROCEDURE update_cart_quantity( |
| | 299 | p_cart_id INT, |
| | 300 | p_product_id INT, |
| | 301 | p_quantity INT |
| | 302 | ) |
| | 303 | LANGUAGE plpgsql |
| | 304 | AS $$ |
| | 305 | DECLARE |
| | 306 | v_stock INT; |
| | 307 | BEGIN |
| | 308 | IF p_quantity <= 0 THEN |
| | 309 | RAISE EXCEPTION 'Kolicinata mora da e pogolema od 0'; |
| | 310 | END IF; |
| | 311 | |
| | 312 | PERFORM fn_validate_product_stock(p_product_id, p_quantity); |
| | 313 | |
| | 314 | UPDATE cartitems |
| | 315 | SET quantity = p_quantity |
| | 316 | WHERE cart_id = p_cart_id |
| | 317 | AND product_id = p_product_id; |
| | 318 | |
| | 319 | --azhurirame total price |
| | 320 | UPDATE cart |
| | 321 | SET total_price = fn_calc_cart_total(p_cart_id) |
| | 322 | WHERE cart_id = p_cart_id; |
| | 323 | END; |
| | 324 | $$; |
| | 325 | }}} |
| | 326 | |
| | 327 | |
| | 328 | |