DELIMITER $$ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemShelving_add`(IN vShelvingFk VARCHAR(8), IN vBarcode VARCHAR(22), IN vQuantity INT, IN vPackagingFk VARCHAR(10), IN vGrouping INT, IN vPacking INT, IN vWarehouseFk INT) BEGIN /** * Añade registro o lo actualiza si ya existe. * * @param vShelvingFk matrícula del carro * @param vBarcode el id del registro * @param vQuantity indica la cantidad del producto * @param vPackagingFk el packaging del producto en itemShelving, NULL para coger el de la ultima compra * @param vGrouping el grouping del producto en itemShelving, NULL para coger el de la ultima compra * @param vPacking el packing del producto, NULL para coger el de la ultima compra * @param vWarehouseFk indica el sector * **/ DECLARE vItemFk INT; DECLARE vBuyFk INT; SELECT id INTO vBuyFk FROM buy WHERE id = vBarcode; SELECT barcodeToItem(vBarcode) INTO vItemFk; IF vBuyFk IS NULL THEN CALL cache.last_buy_refresh(FALSE); SELECT buy_id INTO vBuyFk FROM cache.last_buy WHERE item_id = vItemFk AND warehouse_id = vWarehouseFk; END IF; IF vPacking IS NULL THEN SET vPacking = itemPacking(vBarcode, vWarehouseFk); SET vQuantity = vQuantity * vPacking; END IF; IF (SELECT COUNT(*) FROM itemShelving WHERE shelvingFk COLLATE utf8_unicode_ci = vShelvingFk AND itemFk = vItemFk AND packing = vPacking AND buyFk = vBuyFk) THEN UPDATE itemShelving SET visible = visible + vQuantity WHERE shelvingFk COLLATE utf8_unicode_ci = vShelvingFk AND itemFk = vItemFk AND packing = vPacking; ELSE INSERT INTO itemShelving( itemFk, shelvingFk, visible, grouping, packing, packagingFk, buyFk) SELECT vItemFk, vShelvingFk, vQuantity, IFNULL(vGrouping, b.grouping), IFNULL(vPacking, b.packing), IFNULL(vPackagingFk, b.packagingFk), id FROM buy b WHERE id = vBuyFk; END IF; END$$ DELIMITER ;