
DROP procedure IF EXISTS `vn`.`buy_afterUpsert`;

DELIMITER $$
CREATE DEFINER=`root`@`%` PROCEDURE `vn`.`buy_afterUpsert`(vSelf INT)
BEGIN
/**
 * Triggered actions when a buy is updated or inserted.
 *
 * @param vSelf The buy reference
 */
	DECLARE vEntryFk INT;
	DECLARE vItemFk INT;
	DECLARE vStickers INT;
	DECLARE vPacking INT;
	DECLARE vWarehouse INT;
	DECLARE vWarehouseOut INT;
	DECLARE vIsMerchandise BOOL;
	DECLARE vIsFeedStock BOOL;

	SELECT entryFk, itemFk, stickers, packing
		INTO vEntryFk, vItemFk, vStickers, vPacking
		FROM buy
		WHERE id = vSelf;

	SELECT t.warehouseInFk, t.warehouseOutFk
		INTO vWarehouse, vWarehouseOut
		FROM entry e
			JOIN travel t ON t.id = e.travelFk
		WHERE e.id = vEntryFk;

	SELECT k.merchandise INTO vIsMerchandise
		FROM itemCategory k
			JOIN itemType it ON it.categoryFk = k.id
			JOIN item i ON i.typeFk = it.id
		WHERE i.id = vItemFk;
		
	IF vIsMerchandise THEN
		REPLACE bi.rotacion	SET
			Id_Article = vItemFk,
			warehouse_id = vWarehouse,
			cm3 = buy_getUnitVolume(vSelf);
	END IF;

	SELECT isFeedStock INTO vIsFeedStock
		FROM warehouse WHERE id = vWarehouseOut AND id <> 13;

	IF vIsFeedStock AND buy_hasNotifyPassport(vSelf, vItemFk) THEN
		CALL buy_notifyPassport(vSelf, vItemFk, vStickers, vPacking);
		INSERT IGNORE INTO producer(`name`)
			SELECT es.company_name
				FROM buy b
					JOIN edi.ekt be ON be.id = b.ektFk
					JOIN edi.supplier es ON es.supplier_id = be.pro
				WHERE b.id = vSelf;
	END IF;
END$$

DELIMITER ;

