DELIMITER $$ CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`ticket_doCmr`(vSelf INT) BEGIN /** * Crea u actualiza la información del CMR asociado con * un ticket específico en caso de que sea necesario. * * @param vSelf El id del ticket */ DECLARE vCmrFk INT; SELECT cmrFk INTO vCmrFk FROM ticket WHERE id = vSelf; CREATE OR REPLACE TEMPORARY TABLE tTicket SELECT wo.firstName, v.numberPlate, com.id companyFk, a.id addressFk, c2.defaultAddressFk, IFNULL(sat.supplierFk, su.id) supplierFk, t.landed FROM ticket t JOIN ticketState ts ON ts.ticketFk = t.id JOIN `state` s ON s.id = ts.stateFk JOIN alertLevel al ON al.id = s.alertLevel JOIN client c ON c.id = t.clientFk JOIN `address` a ON a.id = t.addressFk JOIN province p ON p.id = a.provinceFk JOIN country co ON co.id = p.countryFk JOIN warehouse w ON w.id = t.warehouseFk JOIN company com ON com.id = t.companyFk JOIN client c2 ON c2.id = com.clientFk JOIN supplierAccount sa ON sa.id = com.supplierAccountFk JOIN supplier su ON su.id = sa.supplierFk LEFT JOIN route r ON r.id = t.routeFk LEFT JOIN worker wo ON wo.id = r.workerFk LEFT JOIN vehicle v ON v.id = r.vehicleFk LEFT JOIN agencyMode am ON am.id = r.agencyModeFk LEFT JOIN agency ag ON ag.id = am.agencyFk LEFT JOIN supplierAgencyTerm sat ON sat.agencyFk = ag.id AND wo.isFreelance WHERE al.code IN ('PACKED', 'DELIVERED') AND co.code <> 'ES' AND am.name <> 'ABONO' AND w.code = 'ALG' AND t.id = vSelf GROUP BY t.id; IF vCmrFk THEN UPDATE cmr c JOIN tTicket t SET c.senderInstruccions = t.firstName, c.truckPlate = t.numberPlate, c.companyFk = t.companyFk, c.addressToFk = t.addressFk, c.addressFromFk = t.defaultAddressFk, c.supplierFk = t.supplierFk, c.ead = t.landed WHERE id = vCmrFk; ELSE INSERT INTO cmr ( senderInstruccions, truckPlate, companyFk, addressToFk, addressFromFk, supplierFk, ead ) SELECT * FROM tTicket; IF (SELECT EXISTS(SELECT * FROM tTicket)) THEN UPDATE ticket SET cmrFk = LAST_INSERT_ID() WHERE id = vSelf; END IF; END IF; DROP TEMPORARY TABLE tTicket; END$$ DELIMITER ;