8032-devToTest_2440 #3009

Merged
alexm merged 262 commits from 8032-devToTest_2440 into test 2024-09-24 09:34:49 +00:00
3 changed files with 98 additions and 223 deletions
Showing only changes of commit 31b04cba75 - Show all commits

View File

@ -1,128 +0,0 @@
CREATE TABLE IF NOT EXISTS `vn`.`ticketCanAdvanceConfig` (
`id` INT auto_increment NULL,
`destinationOrder` INT NULL,
CONSTRAINT `ticketCanAdvanceConfig_PK` PRIMARY KEY (id)
)
ENGINE=InnoDB
DEFAULT CHARSET=utf8mb3
COLLATE=utf8mb3_unicode_ci;
INSERT INTO `vn`.`ticketCanAdvanceConfig`
SET `destinationOrder` = 5;
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_canAdvance`(vDateFuture DATE, vDateToAdvance DATE, vWarehouseFk INT)
BEGIN
/**
* Devuelve los tickets y la cantidad de lineas de venta que se pueden adelantar.
*
* @param vDateFuture Fecha de los tickets que se quieren adelantar.
* @param vDateToAdvance Fecha a cuando se quiere adelantar.
* @param vWarehouseFk Almacén
*/
DECLARE vDateInventory DATE;
SELECT inventoried INTO vDateInventory FROM config;
CREATE OR REPLACE TEMPORARY TABLE tStock
(itemFk INT PRIMARY KEY, amount INT)
ENGINE = MEMORY;
INSERT INTO tStock(itemFk, amount)
SELECT itemFk, SUM(quantity) amount FROM
(
SELECT itemFk, quantity
FROM itemTicketOut
WHERE shipped >= vDateInventory
AND shipped < vDateFuture
AND warehouseFk = vWarehouseFk
UNION ALL
SELECT itemFk, quantity
FROM itemEntryIn
WHERE landed >= vDateInventory
AND landed < vDateFuture
AND isVirtualStock = FALSE
AND warehouseInFk = vWarehouseFk
UNION ALL
SELECT itemFk, quantity
FROM itemEntryOut
WHERE shipped >= vDateInventory
AND shipped < vDateFuture
AND warehouseOutFk = vWarehouseFk
) t
GROUP BY itemFk HAVING amount != 0;
CREATE OR REPLACE TEMPORARY TABLE tmp.filter
(INDEX (id))
SELECT dest.*,
origin.*
FROM (
SELECT s.ticketFk futureId,
t.workerFk,
t.shipped futureShipped,
t.totalWithVat futureTotalWithVat,
st.name futureState,
t.addressFk futureAddressFk,
am.name futureAgency,
count(s.id) futureLines,
GROUP_CONCAT(DISTINCT ipt.code ORDER BY ipt.code) futureIpt,
CAST(SUM(litros) AS DECIMAL(10,0)) futureLiters,
SUM((s.quantity <= IFNULL(tst.amount,0))) hasStock,
st.classColor futureClassColor,
(
count(s.id) -
SUM((s.quantity <= IFNULL(tst.amount,0)))
) notMovableLines,
(
count(s.id) =
SUM((s.quantity <= IFNULL(tst.amount,0)))
) isFullMovable
FROM ticket t
JOIN sale s ON s.ticketFk = t.id
JOIN saleVolume sv ON sv.saleFk = s.id
JOIN item i ON i.id = s.itemFk
JOIN ticketState ts ON ts.ticketFk = t.id
JOIN `state` st ON st.id = ts.stateFk
JOIN agencyMode am ON t.agencyModeFk = am.id
LEFT JOIN itemPackingType ipt ON ipt.code = i.itemPackingTypeFk
LEFT JOIN tStock tst ON tst.itemFk = i.id
WHERE t.shipped BETWEEN vDateFuture AND util.dayend(vDateFuture)
AND t.warehouseFk = vWarehouseFk
GROUP BY t.id
) origin
JOIN (
SELECT t.id,
t.addressFk,
st.name state,
GROUP_CONCAT(DISTINCT ipt.code ORDER BY ipt.code) ipt,
t.shipped,
t.totalWithVat,
am.name agency,
CAST(SUM(litros) AS DECIMAL(10,0)) liters,
CAST(COUNT(*) AS DECIMAL(10,0)) `lines`,
st.classColor,
IF(HOUR(t.shipped),
HOUR(t.shipped),
COALESCE(HOUR(zc.hour),HOUR(z.hour))
) preparation
FROM ticket t
JOIN sale s ON s.ticketFk = t.id
JOIN saleVolume sv ON sv.saleFk = s.id
JOIN item i ON i.id = s.itemFk
JOIN ticketState ts ON ts.ticketFk = t.id
JOIN `state` st ON st.id = ts.stateFk
JOIN agencyMode am ON t.agencyModeFk = am.id
JOIN ticketCanAdvanceConfig
LEFT JOIN itemPackingType ipt ON ipt.code = i.itemPackingTypeFk
LEFT JOIN `zone` z ON z.id = t.zoneFk
LEFT JOIN zoneClosure zc ON zc.zoneFk = t.zoneFk
WHERE t.shipped BETWEEN vDateToAdvance AND util.dayend(vDateToAdvance)
AND t.warehouseFk = vWarehouseFk
AND st.order <= destinationOrder
GROUP BY t.id
) dest ON dest.addressFk = origin.futureAddressFk
WHERE origin.hasStock != 0;
DROP TEMPORARY TABLE tStock;
END$$
DELIMITER ;

View File

@ -1,5 +1,7 @@
DELIMITER $$ DELIMITER $$
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`ticket_canAdvance`(vDateFuture DATE, vDateToAdvance DATE, vWarehouseFk INT) CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_canAdvance`(vDateFuture DATE, vDateToAdvance DATE, vWarehouseFk INT)
BEGIN BEGIN
/** /**
* Devuelve los tickets y la cantidad de lineas de venta que se pueden adelantar. * Devuelve los tickets y la cantidad de lineas de venta que se pueden adelantar.
@ -8,91 +10,79 @@ BEGIN
* @param vDateToAdvance Fecha a cuando se quiere adelantar. * @param vDateToAdvance Fecha a cuando se quiere adelantar.
* @param vWarehouseFk Almacén * @param vWarehouseFk Almacén
*/ */
DECLARE vDateInventory DATE;
CALL item_getStock(vWarehouseFk, vDateToAdvance, NULL); SELECT inventoried INTO vDateInventory FROM config;
CALL item_getMinacum(
vWarehouseFk, CREATE OR REPLACE TEMPORARY TABLE tStock
vDateToAdvance, (itemFk INT PRIMARY KEY, amount INT)
DATEDIFF(DATE_SUB(vDateFuture, INTERVAL 1 DAY), vDateToAdvance), ENGINE = MEMORY;
NULL
); INSERT INTO tStock(itemFk, amount)
SELECT itemFk, SUM(quantity) amount FROM
(
SELECT itemFk, quantity
FROM itemTicketOut
WHERE shipped >= vDateInventory
AND shipped < vDateFuture
AND warehouseFk = vWarehouseFk
UNION ALL
SELECT itemFk, quantity
FROM itemEntryIn
WHERE landed >= vDateInventory
AND landed < vDateFuture
AND isVirtualStock = FALSE
AND warehouseInFk = vWarehouseFk
UNION ALL
SELECT itemFk, quantity
FROM itemEntryOut
WHERE shipped >= vDateInventory
AND shipped < vDateFuture
AND warehouseOutFk = vWarehouseFk
) t
GROUP BY itemFk HAVING amount != 0;
CREATE OR REPLACE TEMPORARY TABLE tmp.filter CREATE OR REPLACE TEMPORARY TABLE tmp.filter
(INDEX (id)) (INDEX (id))
SELECT SELECT dest.*,
origin.ticketFk futureId, origin.*
dest.ticketFk id,
dest.state,
origin.futureState,
origin.futureIpt,
dest.ipt,
origin.workerFk,
origin.futureLiters,
origin.futureLines,
dest.shipped,
origin.shipped futureShipped,
dest.totalWithVat,
origin.totalWithVat futureTotalWithVat,
dest.agency,
dest.agencyModeFk,
origin.futureAgency,
origin.agencyModeFk futureAgencyModeFk,
dest.lines,
dest.liters,
origin.futureLines - origin.hasStock AS notMovableLines,
(origin.futureLines = origin.hasStock) AS isFullMovable,
dest.zoneFk,
origin.futureZoneFk,
origin.futureZoneName,
origin.classColor futureClassColor,
dest.classColor,
origin.clientFk futureClientFk,
origin.addressFk futureAddressFk,
origin.warehouseFk futureWarehouseFk,
origin.companyFk futureCompanyFk,
IFNULL(dest.nickname, origin.nickname) nickname,
dest.landed
FROM ( FROM (
SELECT SELECT s.ticketFk futureId,
s.ticketFk, t.workerFk,
c.salesPersonFk workerFk, t.shipped futureShipped,
t.shipped, t.totalWithVat futureTotalWithVat,
t.totalWithVat, st.name futureState,
st.name futureState, t.addressFk futureAddressFk,
am.name futureAgency, am.name futureAgency,
count(s.id) futureLines, count(s.id) futureLines,
GROUP_CONCAT(DISTINCT ipt.code ORDER BY ipt.code) futureIpt, GROUP_CONCAT(DISTINCT ipt.code ORDER BY ipt.code) futureIpt,
CAST(SUM(litros) AS DECIMAL(10,0)) futureLiters, CAST(SUM(litros) AS DECIMAL(10,0)) futureLiters,
SUM(s.quantity <= (IFNULL(il.stock,0) + IFNULL(im.amount, 0))) hasStock, SUM((s.quantity <= IFNULL(tst.amount,0))) hasStock,
z.id futureZoneFk, st.classColor futureClassColor,
z.name futureZoneName, (
st.classColor, count(s.id) -
t.clientFk, SUM((s.quantity <= IFNULL(tst.amount,0)))
t.nickname, ) notMovableLines,
(
count(s.id) =
SUM((s.quantity <= IFNULL(tst.amount,0)))
) isFullMovable
FROM ticket t
JOIN sale s ON s.ticketFk = t.id
JOIN saleVolume sv ON sv.saleFk = s.id
JOIN item i ON i.id = s.itemFk
JOIN ticketState ts ON ts.ticketFk = t.id
JOIN `state` st ON st.id = ts.stateFk
JOIN agencyMode am ON t.agencyModeFk = am.id
LEFT JOIN itemPackingType ipt ON ipt.code = i.itemPackingTypeFk
LEFT JOIN tStock tst ON tst.itemFk = i.id
WHERE t.shipped BETWEEN vDateFuture AND util.dayend(vDateFuture)
AND t.warehouseFk = vWarehouseFk
GROUP BY t.id
) origin
JOIN (
SELECT t.id,
t.addressFk, t.addressFk,
t.warehouseFk,
t.companyFk,
t.agencyModeFk
FROM ticket t
JOIN client c ON c.id = t.clientFk
JOIN sale s ON s.ticketFk = t.id
JOIN saleVolume sv ON sv.saleFk = s.id
JOIN item i ON i.id = s.itemFk
JOIN ticketState ts ON ts.ticketFk = t.id
JOIN state st ON st.id = ts.stateFk
JOIN agencyMode am ON t.agencyModeFk = am.id
JOIN zone z ON t.zoneFk = z.id
LEFT JOIN itemPackingType ipt ON ipt.code = i.itemPackingTypeFk
LEFT JOIN tmp.itemMinacum im ON im.itemFk = i.id
AND im.warehouseFk = vWarehouseFk
LEFT JOIN tmp.itemList il ON il.itemFk = i.id
WHERE t.shipped BETWEEN vDateFuture AND util.dayend(vDateFuture)
AND t.warehouseFk = vWarehouseFk
GROUP BY t.id
) origin
LEFT JOIN (
SELECT
t.id ticketFk,
st.name state, st.name state,
GROUP_CONCAT(DISTINCT ipt.code ORDER BY ipt.code) ipt, GROUP_CONCAT(DISTINCT ipt.code ORDER BY ipt.code) ipt,
t.shipped, t.shipped,
@ -101,31 +91,32 @@ BEGIN
CAST(SUM(litros) AS DECIMAL(10,0)) liters, CAST(SUM(litros) AS DECIMAL(10,0)) liters,
CAST(COUNT(*) AS DECIMAL(10,0)) `lines`, CAST(COUNT(*) AS DECIMAL(10,0)) `lines`,
st.classColor, st.classColor,
t.clientFk, CONCAT_WS(':',
t.nickname, IF(HOUR(t.shipped),
t.addressFk, HOUR(t.shipped),
t.zoneFk, COALESCE(HOUR(zc.hour),HOUR(z.hour))),
t.warehouseFk, IF(MINUTE(t.shipped),
t.companyFk, MINUTE(t.shipped),
t.landed, COALESCE(MINUTE(zc.hour),MINUTE(z.hour)))
t.agencyModeFk ) preparation
FROM ticket t FROM ticket t
JOIN sale s ON s.ticketFk = t.id JOIN sale s ON s.ticketFk = t.id
JOIN saleVolume sv ON sv.saleFk = s.id JOIN saleVolume sv ON sv.saleFk = s.id
JOIN item i ON i.id = s.itemFk JOIN item i ON i.id = s.itemFk
JOIN ticketState ts ON ts.ticketFk = t.id JOIN ticketState ts ON ts.ticketFk = t.id
JOIN state st ON st.id = ts.stateFk JOIN `state` st ON st.id = ts.stateFk
JOIN agencyMode am ON t.agencyModeFk = am.id JOIN agencyMode am ON t.agencyModeFk = am.id
JOIN ticketCanAdvanceConfig
LEFT JOIN itemPackingType ipt ON ipt.code = i.itemPackingTypeFk LEFT JOIN itemPackingType ipt ON ipt.code = i.itemPackingTypeFk
LEFT JOIN `zone` z ON z.id = t.zoneFk
LEFT JOIN zoneClosure zc ON zc.zoneFk = t.zoneFk
WHERE t.shipped BETWEEN vDateToAdvance AND util.dayend(vDateToAdvance) WHERE t.shipped BETWEEN vDateToAdvance AND util.dayend(vDateToAdvance)
AND t.warehouseFk = vWarehouseFk AND t.warehouseFk = vWarehouseFk
AND st.order <= 5 AND st.order <= destinationOrder
GROUP BY t.id GROUP BY t.id
) dest ON dest.addressFk = origin.addressFk ) dest ON dest.addressFk = origin.futureAddressFk
WHERE origin.hasStock; WHERE origin.hasStock != 0;
DROP TEMPORARY TABLE IF EXISTS DROP TEMPORARY TABLE tStock;
tmp.itemList,
tmp.itemMinacum;
END$$ END$$
DELIMITER ; DELIMITER ;

View File

@ -0,0 +1,12 @@
-- Place your SQL code here
CREATE TABLE IF NOT EXISTS `vn`.`ticketCanAdvanceConfig` (
`id` INT auto_increment NULL,
`destinationOrder` INT NULL,
CONSTRAINT `ticketCanAdvanceConfig_PK` PRIMARY KEY (id)
)
ENGINE=InnoDB
DEFAULT CHARSET=utf8mb3
COLLATE=utf8mb3_unicode_ci;
INSERT INTO `vn`.`ticketCanAdvanceConfig`
SET `destinationOrder` = 5;