salix/db/routines/vn/procedures/itemShelving_getItemDetails...

90 lines
2.1 KiB
SQL

DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemShelving_getItemDetails`(vBarcodeItem INT, vShelvingFK VARCHAR(10) )
BEGIN
/**
* Obtiene el precio y visible de un item
*
* @param vBarcodeItem barcode de artículo
* @param vShelvingFK Ubicación actual del artículo
*/
DECLARE vIsItem BOOL;
DECLARE vItemFk INT;
DECLARE vItemCost DECIMAL(10,4);
DECLARE vCacheVisibleFk INT;
DECLARE vWarehouseFk INT;
DECLARE vVisible INT;
SELECT COUNT(*)>0 INTO vIsItem
FROM vn.item
WHERE id = vBarcodeItem;
IF NOT vIsItem THEN
SELECT IFNULL(b.buyingValue, 0) +
IFNULL(b.freightValue, 0) +
IFNULL(b.comissionValue, 0) +
IFNULL(b.packageValue, 0),
SUM(is2.visible) ,
b.itemFk
INTO vItemCost, vVisible, vItemFk
FROM itemShelving is2
JOIN buy b ON b.itemFk = is2.itemFk AND b.id = vBarcodeItem
WHERE is2.shelvingFk = vShelvingFK COLLATE utf8mb3_general_ci
GROUP BY shelvingFK;
SELECT vItemFk itemFk,
vShelvingFK shelvingFk,
vItemCost itemCost,
vVisible quantity;
END IF;
IF vItemCost IS NULL THEN
SELECT warehouseFk INTO vWarehouseFk
FROM operator
WHERE workerFk = account.myUser_getId();
SELECT barcodeToItem(vBarcodeItem) INTO vItemFk;
IF vItemFk IS NULL THEN
CALL util.throw ('Item not valid');
ELSE
CALL buyUltimate(vWarehouseFk, util.VN_CURDATE());
SELECT IFNULL(b.buyingValue, 0) +
IFNULL(b.freightValue, 0) +
IFNULL(b.comissionValue, 0) +
IFNULL(b.packageValue, 0) itemCost,
SUM(is2.visible) visible,
is2.itemFk
INTO vItemCost, vVisible, vItemFk
FROM itemShelving is2
JOIN tmp.buyUltimate bu ON bu.itemFk = is2.itemFk
JOIN buy b ON b.id = bu.buyFk
WHERE is2.itemFk = vBarcodeItem AND
is2.shelvingFk = vShelvingFK COLLATE utf8mb3_general_ci;
IF vItemFk IS NULL THEN
CALL util.throw ('Item not valid');
ELSE
SELECT vItemFk itemFk,
vShelvingFK shelvingFk,
vItemCost itemCost,
vVisible quantity;
END IF;
DELETE FROM tmp.buyUltimate;
END IF;
END IF;
IF vItemCost IS NULL THEN
CALL util.throw ('Item not valid');
END IF;
END$$
DELIMITER ;