/** * Adds a new lot, generates its barcode * inserts/updates de record on table #vn2008.buy_edi **/ USE edi; DROP PROCEDURE IF EXISTS batch_new; DELIMITER $$ CREATE PROCEDURE batch_new ( v_message INT ,v_type MEDIUMINT ,v_delivery_number BIGINT ,v_fec DATE ,v_hor TIME ,v_ref INT ,v_agj INT ,v_cat VARCHAR(2) ,v_pac INT ,v_sub MEDIUMINT ,v_kop INT ,v_ptd VARCHAR(6) ,v_pro MEDIUMINT ,v_ori VARCHAR(3) ,v_ptj MEDIUMINT ,v_qty INT ,v_pri DOUBLE ,v_klo SMALLINT ,v_s1 VARCHAR(3) ,v_s2 VARCHAR(3) ,v_s3 VARCHAR(3) ,v_s4 VARCHAR(4) ,v_s5 VARCHAR(3) ,v_s6 VARCHAR(3) ,v_k1 SMALLINT ,v_k2 SMALLINT ,v_p1 TINYINT ,v_p2 TINYINT ,v_auction SMALLINT ,v_package INT ) BEGIN DECLARE v_edi INT; DECLARE v_barcode CHAR(15) DEFAULT NULL; DECLARE v_is_duplicated BOOLEAN DEFAULT FALSE; DECLARE v_update_existent BOOLEAN DEFAULT FALSE; DECLARE CONTINUE HANDLER FOR 1062 -- ER_DUP_KEY SET v_is_duplicated = TRUE; -- Genera el código de barras IF v_agj != 0 AND v_agj IS NOT NULL THEN SET v_barcode = CONCAT( LPAD(v_auction, 2, 0), LPAD(IFNULL(v_klo, 99), 2, 0), LPAD(DAYOFYEAR(v_fec), 3, 0), IF(v_klo IS NULL OR v_klo = 99, LPAD(v_agj, 7, 0), CONCAT(LPAD(v_agj, 5, 0), '01') ), '0' ); END IF; IF v_kop IS NULL THEN SELECT default_kop INTO v_kop FROM config; END IF; -- Inserta el nuevo EKT INSERT INTO vn2008.buy_edi SET barcode = IFNULL(v_barcode, barcode) ,delivery_number = v_delivery_number ,entry_year = YEAR(v_fec) ,fec = v_fec ,hor = v_hor ,ref = v_ref ,agj = v_agj ,cat = v_cat ,pac = v_pac ,sub = v_sub ,kop = v_kop ,ptd = v_ptd ,pro = v_pro ,ori = v_ori ,ptj = v_ptj ,qty = v_qty ,pri = v_pri ,klo = v_klo ,s1 = v_s1 ,s2 = v_s2 ,s3 = v_s3 ,s4 = v_s4 ,s5 = v_s5 ,s6 = v_s6 ,k01 = v_k1 ,k02 = v_k2 ,k03 = v_p1 ,k04 = v_p2 ,auction = v_auction ,package = v_package; -- Si el EKT está duplicado y el que habia en la tabla era uno -- provisional, lo actualiza con los nuevos valores. IF NOT v_is_duplicated THEN SET v_edi = LAST_INSERT_ID(); CALL edi_load (v_edi); ELSEIF v_delivery_number != 0 AND v_delivery_number IS NOT NULL THEN SELECT id INTO v_edi FROM vn2008.buy_edi WHERE delivery_number = v_delivery_number; SELECT COUNT(*) = 0 INTO v_update_existent FROM vn2008.buy_edi e JOIN batch b ON b.buy_edi_id = e.id JOIN config c WHERE e.delivery_number = v_delivery_number AND b.type_id != c.presale_id; END IF; IF v_update_existent THEN UPDATE vn2008.buy_edi SET barcode = IFNULL(v_barcode, barcode) ,fec = v_fec ,hor = v_hor ,ref = v_ref ,agj = v_agj ,cat = v_cat ,pac = v_pac ,sub = v_sub ,kop = v_kop ,ptd = v_ptd ,pro = v_pro ,ori = v_ori ,ptj = v_ptj ,qty = v_qty ,pri = v_pri ,klo = v_klo ,s1 = v_s1 ,s2 = v_s2 ,s3 = v_s3 ,s4 = v_s4 ,s5 = v_s5 ,s6 = v_s6 ,k01 = v_k1 ,k02 = v_k2 ,k03 = v_p1 ,k04 = v_p2 ,auction = v_auction ,package = v_package WHERE id = v_edi; END IF; -- Registra el lote INSERT INTO batch SET message_id = v_message ,type_id = v_type ,buy_edi_id = v_edi; END$$ DELIMITER ;