DELIMITER $$
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`entryWithItem`(vShipmentWarehouse INT, vLandingWarehouse INT,vSale INT, vVolume INT, netCost DECIMAL(10,2), vInOutDate DATE)
BEGIN

    DECLARE vTravel INT;
    DECLARE vEntry INT;
    DECLARE vBucket VARCHAR(10);
    DECLARE vSupplierFk INT;
    
    SET vSupplierFk = IF (vLandingWarehouse = 1, 850, 963);
	-- seleccionamos travel
	SELECT t.id, e.id INTO vTravel, vEntry
		FROM travel t LEFT JOIN entry e ON t.id = e.travelFk
        WHERE t.landed = vInOutDate AND t.shipped = vInOutDate AND t.warehouseOutFk = vShipmentWarehouse 
			AND t.warehouseInFk = vLandingWarehouse AND t.agencyModeFk IS NULL AND e.supplierFk = vSupplierFk
	LIMIT 1; 
	
    -- creamos el travel si es necesario
    IF IFNULL(vTravel, FALSE) = FALSE THEN
		INSERT INTO travel (shipped, landed, warehouseInFk, warehouseOutFk)
			VALUES (vInOutDate, vInOutDate, vLandingWarehouse, vShipmentWarehouse);
		SELECT LAST_INSERT_ID() INTO vTravel;
    END IF;
    
    -- creamos la Entrada si es necesario
	IF IFNULL(vEntry, FALSE) = FALSE THEN
		INSERT INTO entry (supplierFk, travelFk)
				VALUES (vSupplierFk, vTravel); -- proveedor 'CONFECCION ARTIFICIAL'
		SELECT LAST_INSERT_ID() INTO vEntry;
	END IF;
            
	 -- creamos el cubo si es necesario
	SELECT id INTO vBucket FROM packaging WHERE volume = vVolume LIMIT 1;
	IF vBucket IS NULL THEN
		INSERT INTO packaging (id, volume)
				VALUES (CONCAT('dm',vVolume/1000), vVolume);
		-- SELECT LAST_INSERT_ID() INTO vBucket;
        SELECT id INTO vBucket FROM packaging WHERE volume = vVolume LIMIT 1;
	END IF;

	INSERT INTO buy(itemFk,quantity, entryFk, packagingFk, packing, stickers, buyingValue, price2, price3) 
		SELECT itemFk,
			quantity,
			vEntry,
			vBucket,
			1 packing,
            quantity,
			netCost,
			s.price,
			s.price
		FROM sale s
		WHERE s.id = vSale;
END$$
DELIMITER ;
