118 lines
3.7 KiB
SQL
118 lines
3.7 KiB
SQL
DELIMITER $$
|
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`sale_getFromTicketOrCollection`(vParam INT)
|
|
BEGIN
|
|
/**
|
|
* Visualizar lineas de la tabla sale a través del parámetro vParam que puede
|
|
* ser ticket o collection.
|
|
*
|
|
* @param vParam Identificador de ticket o collection
|
|
*/
|
|
DECLARE vIsCollection BOOL;
|
|
|
|
SELECT COUNT(*) INTO vIsCollection
|
|
FROM collection c
|
|
WHERE c.id = vParam;
|
|
|
|
DROP TEMPORARY TABLE IF EXISTS tmp.ticket;
|
|
DROP TEMPORARY TABLE IF EXISTS tmp.ticket2;
|
|
|
|
IF vIsCollection THEN
|
|
CREATE TEMPORARY TABLE tmp.ticket
|
|
(INDEX (id))
|
|
ENGINE = MEMORY
|
|
SELECT tc.ticketFk id
|
|
FROM ticketCollection tc
|
|
JOIN ticket t ON t.id = tc.ticketFk
|
|
WHERE tc.collectionFk = vParam;
|
|
|
|
CREATE TEMPORARY TABLE tmp.ticket2
|
|
(INDEX (id))
|
|
ENGINE = MEMORY
|
|
SELECT tc.ticketFk id
|
|
FROM ticketCollection tc
|
|
JOIN ticket t ON t.id = tc.ticketFk
|
|
WHERE tc.collectionFk = vParam;
|
|
ELSE
|
|
CREATE TEMPORARY TABLE tmp.ticket
|
|
(INDEX (id))
|
|
ENGINE = MEMORY
|
|
SELECT vParam id;
|
|
|
|
CREATE TEMPORARY TABLE tmp.ticket2
|
|
(INDEX (id))
|
|
ENGINE = MEMORY
|
|
SELECT vParam id;
|
|
END IF;
|
|
|
|
SELECT s.ticketFk,
|
|
sgd.saleGroupFk,
|
|
s.id saleFk,
|
|
s.itemFk,
|
|
s.quantity,
|
|
i.longName,
|
|
i.size,
|
|
s.reserved,
|
|
MAX(IF(st.semaphore <=> 1, TRUE, FALSE)) isPreviousPrepared,
|
|
MAX(IF(st.semaphore <=> 2, TRUE, FALSE)) isPrepared,
|
|
MAX(IF(st.semaphore <=> 3, TRUE, FALSE)) isControlled,
|
|
MAX(IF(st.semaphore <=> 4, TRUE, FALSE)) isPreControlled,
|
|
ic.color,
|
|
ip.productor,
|
|
s.discount,
|
|
s.price,
|
|
i.stems,
|
|
i.category,
|
|
o.code origin,
|
|
tt.clientFk,
|
|
s.originalQuantity,
|
|
TRIM(CONCAT(LPAD(s.concept,30,' '), ' ',
|
|
RPAD(IFNULL(i.size,''),5,' '))) line1,
|
|
'' cel1,
|
|
TRIM(CONCAT(LPAD(IFNULL(ip.productor,''),30,' '), ' ',LPAD(IFNULL(o.code,''),4,' '))) line2,
|
|
IF(s.quantity MOD IFNULL(b.packing,s.quantity + 1),
|
|
CONCAT(CAST(s.quantity/IFNULL(b.`grouping`,1) AS DECIMAL(10,0)),' x ',IFNULL(b.`grouping`,1)),
|
|
CONCAT(CAST(s.quantity / IFNULL(b.packing,1) AS DECIMAL(10,0)),' pack de ',IFNULL(b.packing,1))) cel2,
|
|
TRIM(CONCAT(ic.color)) line3,
|
|
p.code cel3,
|
|
s.isAdded,
|
|
IF(c.workerFk IS NULL, getUser(), c.workerFk) workerFk,
|
|
IF(SUM(iss.quantity) IS NULL, 0, SUM(iss.quantity)) pickedQuantity,
|
|
MIN(iss.created) picked,
|
|
IF(sm.id, TRUE, FALSE) hasMistake,
|
|
sg.sectorFk,
|
|
b.packing,
|
|
b.grouping,
|
|
o.code
|
|
FROM tmp.ticket t
|
|
JOIN sale s ON s.ticketFk = t.id
|
|
JOIN ticket tt ON tt.id = t.id
|
|
LEFT JOIN cache.last_buy lb ON lb.item_id = s.itemFk AND lb.warehouse_id = tt.warehouseFk
|
|
LEFT JOIN buy b ON b.id = lb.buy_id
|
|
JOIN item i ON i.id = s.itemFk
|
|
LEFT JOIN ticketCollection tc ON tc.ticketFk = t.id
|
|
LEFT JOIN collection c ON c.id = tc.collectionFk
|
|
LEFT JOIN (SELECT sub.saleFk, sub.isChecked, sub.stateFk, sub.originalQuantity
|
|
FROM (SELECT DISTINCT st.id, st.saleFk, st.isChecked, st.stateFk, st.originalQuantity
|
|
FROM tmp.ticket2 t
|
|
JOIN sale s ON s.ticketFk = t.id
|
|
JOIN saleTracking st ON st.saleFk = s.id
|
|
ORDER BY st.id DESC
|
|
LIMIT 10000000000000000000) sub
|
|
GROUP BY sub.saleFk, sub.stateFK) sub2 ON sub2.saleFk = s.id AND sub2.isChecked = 1
|
|
LEFT JOIN itemShelvingSale iss ON iss.saleFk = s.id
|
|
LEFT JOIN state st ON st.id = sub2.stateFk
|
|
LEFT JOIN itemColor ic ON ic.itemFk = s.itemFk
|
|
LEFT JOIN itemProductor ip ON ip.itemFk = s.itemFk
|
|
LEFT JOIN origin o ON o.id = i.originFk
|
|
LEFT JOIN saleGroupDetail sgd ON sgd.saleFk = s.id
|
|
LEFT JOIN saleGroup sg ON sg.id = sgd.saleGroupFk
|
|
LEFT JOIN parking p ON p.id = sg.parkingFk
|
|
LEFT JOIN saleMistake sm ON sm.saleFk = s.id
|
|
GROUP BY s.id;
|
|
|
|
DROP TEMPORARY TABLE
|
|
tmp.ticket,
|
|
tmp.ticket2;
|
|
END$$
|
|
DELIMITER ;
|