DELIMITER $$ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_DelayTruckSplit`( vTicketFk INT ) BEGIN /** * Splita las lineas de ticket que no estan ubicadas * * @param vTicketFk Id ticket */ DECLARE vNewTicketFk INT; DECLARE vTotalLines INT; DECLARE vLinesToSplit INT; DROP TEMPORARY TABLE IF EXISTS tmp.SalesToSplit; SELECT COUNT(*) INTO vTotalLines FROM sale WHERE ticketFk = vTicketFk; CREATE TEMPORARY TABLE tmp.SalesToSplit SELECT s.id saleFk FROM ticket t JOIN sale s ON t.id = s.ticketFk LEFT JOIN ( SELECT ish.itemFk itemFk, SUM(ish.visible) visible, s.warehouseFk warehouseFk FROM itemShelving ish JOIN shelving sh ON sh.code = ish.shelvingFk JOIN parking p ON p.id = sh.parkingFk JOIN sector s ON s.id = p.sectorFk GROUP BY ish.itemFk, s.warehouseFk ) issw ON issw.itemFk = s.itemFk AND issw.warehouseFk = t.warehouseFk WHERE s.quantity > IFNULL(issw.visible, 0) AND s.quantity > 0 AND NOT s.isPicked AND NOT s.reserved AND t.id = vTicketFk; SELECT COUNT(*) INTO vLinesToSplit FROM tmp.SalesToSplit; IF vLinesToSplit = vTotalLines AND vLinesToSplit > 0 THEN SET vNewTicketFk = vTicketFk; ELSE CALL ticket_Clone(vTicketFk, vNewTicketFk); UPDATE sale s JOIN tmp.SalesToSplit sts ON sts.saleFk = s.id SET s.ticketFk = vNewTicketFk; END IF; CALL ticket_setState(vNewTicketFk, 'FIXING'); DROP TEMPORARY TABLE tmp.SalesToSplit; END$$ DELIMITER ;