204 lines
6.3 KiB
SQL
204 lines
6.3 KiB
SQL
DELIMITER $$
|
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`entry_getTransfer`(
|
|
vSelf INT
|
|
)
|
|
BEGIN
|
|
/**
|
|
* Gestiona el traslado de productos a partir de una entrada específica.
|
|
*
|
|
* @param vSelf Id de entrada
|
|
*/
|
|
DECLARE vDateShipped DATE;
|
|
DECLARE vDateLanded DATE;
|
|
DECLARE vWarehouseIn INT;
|
|
DECLARE vWarehouseOut INT;
|
|
DECLARE vCalcVisible INT;
|
|
DECLARE vInventoryDate DATE DEFAULT vn.getInventoryDate();
|
|
|
|
SELECT shipped, landed, warehouseInFk, warehouseOutFk
|
|
INTO vDateShipped, vDateLanded, vWarehouseIn, vWarehouseOut
|
|
FROM vn.travel t
|
|
JOIN vn.entry e ON e.travelFk = t.id
|
|
WHERE e.id = vSelf;
|
|
|
|
CALL vn.rate_getPrices(vDateShipped, vWarehouseIn);
|
|
|
|
-- Traslado en almacen origen
|
|
CREATE OR REPLACE TEMPORARY TABLE tBuy
|
|
(PRIMARY KEY (itemFk), INDEX(buyFk))
|
|
ENGINE = MEMORY
|
|
SELECT *
|
|
FROM (
|
|
SELECT b.itemFk, b.id buyFk
|
|
FROM buy b
|
|
JOIN entry e ON e.id = b.entryFk
|
|
JOIN travel t ON t.id = e.travelFk
|
|
WHERE t.landed BETWEEN vInventoryDate AND vDateShipped
|
|
AND NOT b.isIgnored
|
|
AND b.price2 >= 0
|
|
ORDER BY (vWarehouseOut = t.warehouseInFk) DESC, t.landed DESC
|
|
LIMIT 10000000000000000000
|
|
) sub
|
|
GROUP BY itemFk;
|
|
|
|
IF vDateShipped >= util.VN_CURDATE() THEN
|
|
CALL `cache`.visible_refresh(vCalcVisible, TRUE, vWarehouseOut);
|
|
|
|
CREATE OR REPLACE TEMPORARY TABLE tItem (
|
|
`itemFk` int(10) unsigned NOT NULL,
|
|
`visible` int(11) NOT NULL DEFAULT 0,
|
|
`available` int(11) NOT NULL DEFAULT 0,
|
|
`visibleLanding` int(11) NOT NULL DEFAULT 0,
|
|
`availableLanding` int(11) NOT NULL DEFAULT 0,
|
|
UNIQUE INDEX i USING HASH (itemFk)
|
|
) ENGINE = MEMORY;
|
|
|
|
INSERT INTO tItem(itemFk, visible)
|
|
SELECT item_id itemFk, visible
|
|
FROM `cache`.visible
|
|
WHERE calc_id = vCalcVisible
|
|
AND visible;
|
|
|
|
CALL `cache`.visible_refresh(vCalcVisible, TRUE, vWarehouseIn);
|
|
|
|
INSERT INTO tItem(itemFk, visibleLanding)
|
|
SELECT item_id, `visible`
|
|
FROM `cache`.`visible` v
|
|
WHERE v.calc_id = vCalcVisible
|
|
AND v.`visible`
|
|
ON DUPLICATE KEY UPDATE visibleLanding = v.`visible`;
|
|
|
|
CALL vn2008.availableTraslate(vWarehouseOut, vDateShipped, NULL);
|
|
|
|
INSERT INTO tItem(itemFk, available)
|
|
SELECT a.item_id, a.available
|
|
FROM vn2008.availableTraslate a
|
|
WHERE a.available
|
|
ON DUPLICATE KEY UPDATE available = a.available;
|
|
|
|
CALL vn2008.availableTraslate(vWarehouseIn, vDateLanded, vWarehouseOut);
|
|
|
|
INSERT INTO tItem(itemFk, availableLanding)
|
|
SELECT a.item_id, a.available
|
|
FROM vn2008.availableTraslate a
|
|
WHERE a.available
|
|
ON DUPLICATE KEY UPDATE availableLanding = a.available;
|
|
ELSE
|
|
CALL vn.item_getStock(vWarehouseOut, vDateShipped, NULL);
|
|
|
|
CREATE OR REPLACE TEMPORARY TABLE tItem
|
|
(UNIQUE INDEX i USING HASH (itemFk))
|
|
ENGINE = MEMORY
|
|
SELECT itemFk,
|
|
`visible`,
|
|
available,
|
|
0 visibleLanding,
|
|
0 availableLanding
|
|
FROM tmp.itemList;
|
|
END IF;
|
|
|
|
CALL vn.buyUltimateFromInterval(vWarehouseIn,vInventoryDate, vDateLanded);
|
|
|
|
CREATE OR REPLACE TEMPORARY TABLE tTransfer
|
|
ENGINE = MEMORY
|
|
SELECT it.categoryFk,
|
|
i.typeFk,
|
|
i.id itemFk,
|
|
i.name item,
|
|
i.`size`,
|
|
i.category,
|
|
i.inkFk,
|
|
o.code originCode,
|
|
b2.quantity,
|
|
i.stems,
|
|
CAST(ti.visible AS DECIMAL(10,0)) vis1,
|
|
CAST(ti.available AS DECIMAL(10,0)) ava1,
|
|
CAST(ti.visibleLanding AS DECIMAL(10,0)) vis2,
|
|
CAST(ti.availableLanding AS DECIMAL(10,0)) ava2,
|
|
COALESCE(b2.`grouping`, b.`grouping`) `grouping`,
|
|
COALESCE(b2.packing, b.packing) packing,
|
|
COALESCE(b3.groupingMode, b2.groupingMode, b.groupingMode) package,
|
|
IFNULL(p.name, s.nickname) productor,
|
|
b.packagingFk,
|
|
b2.id buyFk,
|
|
b2.stickers,
|
|
b.ektFk,
|
|
it.workerFk,
|
|
pa.volume,
|
|
IFNULL(pa.width, 0) width,
|
|
IFNULL(pa.`depth`, 0) `depth`,
|
|
IFNULL(pa.height, 0) height,
|
|
IFNULL(b.buyingValue, 0) buyingValue,
|
|
IFNULL(b.comissionValue, 0) comissionValue,
|
|
IFNULL(b.freightValue, 0) freightValue,
|
|
am.m3,
|
|
e.commission,
|
|
pa.isPackageReturnable,
|
|
IFNULL(pa2.value, pa.value) `value`,
|
|
r.rate3,
|
|
r.rate2,
|
|
it.promo,
|
|
b.`grouping` groupingOrigin,
|
|
b.packing packingOrigin,
|
|
b.id buyFkOrigin,
|
|
pa.returnCost,
|
|
b.weight
|
|
FROM vn.item i
|
|
JOIN tItem ti ON ti.itemFk = i.id
|
|
LEFT JOIN vn.producer p ON p.id = i.producerFk
|
|
LEFT JOIN vn.itemType it ON it.id = i.typeFk
|
|
JOIN vn.itemCategory ic ON ic.id = it.categoryFk
|
|
LEFT JOIN vn.origin o ON o.id = i.originFk
|
|
LEFT JOIN tBuy lb ON lb.itemFk = i.id
|
|
LEFT JOIN vn.buy b ON b.id = lb.buyFk
|
|
LEFT JOIN vn.packaging pa ON pa.id = b.packagingFk
|
|
LEFT JOIN vn.entry e2 ON e2.id = b.entryFk
|
|
LEFT JOIN vn.supplier s ON s.id = e2.supplierFk
|
|
LEFT JOIN vn.entry e ON e.id = vSelf
|
|
LEFT JOIN vn.travel tr ON tr.id = e.travelFk
|
|
LEFT JOIN vn.agencyMode am ON am.id = tr.agencyModeFk
|
|
LEFT JOIN vn.buy b2 ON b2.itemFk = i.id
|
|
AND b2.entryFk = vSelf
|
|
LEFT JOIN vn.packaging pa2 ON pa2.id = b.packagingFk
|
|
LEFT JOIN tmp.rate r ON TRUE
|
|
LEFT JOIN tmp.buyUltimateFromInterval bufi ON bufi.itemFk = i.id
|
|
LEFT JOIN vn.buy b3 ON b3.id = bufi.buyFk
|
|
WHERE ic.display
|
|
AND NOT e.isRaid
|
|
AND (ti.visible != 0 OR ti.available != 0)
|
|
ORDER BY i.typeFk, i.name, i.id, i.size, i.category, o.name;
|
|
|
|
CREATE INDEX tIndex USING HASH ON tTransfer (itemFk);
|
|
|
|
SET @carriage := 0;
|
|
SET @comission := 0;
|
|
SET @packaging := 0;
|
|
SET @rate3 := 0;
|
|
SET @cost := 0;
|
|
SELECT *,
|
|
quantity - MOD(quantity , `grouping`) subQuantity,
|
|
MOD(quantity, `grouping`) soll,
|
|
ROUND((IF(volume > 0,volume, width * `depth` * IF(height = 0, `size` + 10, height))) / packing, 0) cm3,
|
|
buyingValue + comissionValue + freightValue cost,
|
|
@carriage := ROUND((IF(volume > 0, volume, width * `depth` * IF(height = 0, `size` + 10, height))) * m3 / 1000000 / Packing, 3) carriage,
|
|
@comission := ROUND((buyingValue + comissionValue + freightValue) * commission / 100, 3) commission,
|
|
ROUND(@packaging := (returnCost + IF(isPackageReturnable != 0, 0, value)) / packing, 3) packaging,
|
|
@cost := IFNULL((buyingValue + comissionValue + freightValue), 0) +
|
|
IFNULL(@packaging, 0) +
|
|
IFNULL(@carriage, 0) +
|
|
IFNULL(@comission, 0) expense,
|
|
@rate3 := ROUND(@cost / ( (100 - rate3 - promo) / 100), 2) rate3,
|
|
ROUND(@rate3 * (1 + ((rate2 - rate3)/100)), 2) rate2,
|
|
FALSE selected
|
|
FROM tTransfer;
|
|
|
|
DROP TEMPORARY TABLE IF EXISTS
|
|
tTransfer,
|
|
tItem,
|
|
tBuy,
|
|
tmp.buyUltimateFromInterval,
|
|
tmp.rate,
|
|
tmp.itemList;
|
|
END$$
|
|
DELIMITER ;
|