DELIMITER $$ CREATE OR REPLACE DEFINER=`vn`@`localhost` FUNCTION `vn`.`ekt_getEntry`(vEktFk INT) RETURNS int(11) NOT DETERMINISTIC READS SQL DATA BEGIN /** * Devuelve el numero de entrada para el ekt * * @param vEktFk Identificador de edi.ekt */ DECLARE vTravelFk INT; DECLARE vEntryFk INT DEFAULT 0; DECLARE vEntryAssignFk INT; SELECT ea.id INTO vEntryAssignFk FROM edi.ekt e JOIN vn.ektEntryAssign ea ON IFNULL(ea.sub, e.sub) <=> e.sub AND IFNULL(ea.kop, e.kop) <=> e.kop AND IFNULL(ea.pro, e.pro) <=> e.pro AND IFNULL(ea.auction, e.auction) <=> e.auction WHERE e.id = vEktFk ORDER BY IF(ea.sub,1,0) * 1000 + IF(ea.kop,1,0) * 100 + IF(ea.pro,1,0) * 10 + IF(ea.auction,1,0) DESC LIMIT 1; SET vTravelFk = vn.ekt_getTravel(vEntryAssignFk, vEktFk); IF vTravelFk THEN SELECT MAX(e.id) INTO vEntryFk FROM vn.entry e JOIN vn.ektEntryAssign ea ON ea.id = vEntryAssignFk WHERE e.travelFk = vTravelFk AND e.sub <=> ea.sub AND e.kop <=> ea.kop AND e.pro <=> ea.pro AND e.auction <=> ea.auction AND e.companyFk <=> ea.companyFk; IF vEntryFk IS NULL THEN INSERT INTO vn.entry(travelFk, supplierFk, companyFk, currencyFk, kop, sub, reference, pro, auction) SELECT vTravelFk, ea.supplierFk, ea.companyFk, cu.id, ea.kop, ea.sub, ea.ref, ea.pro, ea.auction FROM vn.ektEntryAssign ea JOIN vn.currency cu ON cu.code = 'EUR' WHERE ea.id = vEntryAssignFk; SET vEntryFk = LAST_INSERT_ID(); END IF; UPDATE vn.ektEntryAssign SET entryFk = vEntryFk WHERE id = vEntryAssignFk; ELSE SELECT ec.defaultEntry INTO vEntryFk FROM vn.entryConfig ec; INSERT IGNORE INTO vn.entry(id) VALUES(vEntryFk); END IF; RETURN vEntryFk; END$$ DELIMITER ;