DELIMITER $$ CREATE OR REPLACE DEFINER=`vn`@`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 ;