CREATE TABLE `vn`.`packingSiteAdvanced` ( `ticketFk` int(11), `workerFk` int(10) unsigned, PRIMARY KEY (`ticketFk`), KEY `packingSiteAdvanced_FK_1` (`workerFk`), CONSTRAINT `packingSiteAdvanced_FK` FOREIGN KEY (`ticketFk`) REFERENCES `ticket` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `packingSiteAdvanced_FK_1` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('PackingSiteAdvanced', '*', '*', 'ALLOW', 'ROLE', 'production'); DROP PROCEDURE IF EXISTS `vn`.`packingSite_startCollection`; DELIMITER $$ $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `vn`.`packingSite_startCollection`(vSelf INT, vTicketFk INT) proc: BEGIN /** * @param vSelf packingSite id * @param vTicketFk A ticket id from the collection to start */ DECLARE vExists BOOL; DECLARE vIsAdvanced BOOL; DECLARE vNewCollectionFk INT; DECLARE vOldCollectionFk INT; DECLARE vIsPackingByOther BOOL; SELECT id, collectionFk INTO vExists, vOldCollectionFk FROM packingSite WHERE id = vSelf; IF NOT vExists THEN CALL util.throw('packingSiteNotExists'); END IF; SELECT COUNT(*) > 0 INTO vIsAdvanced FROM packingSiteAdvanced WHERE ticketFk = vTicketFk; IF vIsAdvanced THEN LEAVE proc; END IF; SELECT collectionFk INTO vNewCollectionFk FROM ticketCollection WHERE ticketFk = vTicketFk; IF vOldCollectionFk IS NOT NULL AND vOldCollectionFk <> vNewCollectionFk THEN SELECT COUNT(*) > 0 INTO vIsPackingByOther FROM packingSite WHERE id <> vSelf AND collectionFk = vOldCollectionFk; IF NOT vIsPackingByOther AND NOT collection_isPacked(vOldCollectionFk) THEN CALL util.throw('cannotChangeCollection'); END IF; END IF; UPDATE packingSite SET collectionFk = vNewCollectionFk WHERE id = vSelf; END$$ DELIMITER ;