DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`entry_beforeUpdate`
	BEFORE UPDATE ON `entry`
	FOR EACH ROW
BEGIN
	DECLARE vIsVirtual BOOL;
	DECLARE vPrintedCount INT;
	DECLARE vHasDistinctWarehouses BOOL;

	SET NEW.editorFk = account.myUser_getId();

	IF !(NEW.travelFk <=> OLD.travelFk) THEN
		SELECT COUNT(*) > 0 INTO vIsVirtual
			FROM entryVirtual WHERE entryFk = NEW.id;

		SELECT !(o.warehouseInFk <=> n.warehouseInFk)
			OR !(o.warehouseOutFk <=> n.warehouseOutFk)
			INTO vHasDistinctWarehouses
			FROM travel o, travel n
			WHERE o.id = OLD.travelFk
				AND n.id = NEW.travelFk;

		IF vIsVirtual AND vHasDistinctWarehouses THEN
			SIGNAL SQLSTATE '45000'
				SET MESSAGE_TEXT = 'A cloned entry cannot be moved to a travel with different warehouses';
		END IF;

		IF NEW.travelFk IS NULL THEN
			SELECT COUNT(*) INTO vPrintedCount
				FROM buy
				WHERE entryFk = OLD.id
					AND printedStickers > 0;

			IF vPrintedCount > 0 THEN
				SIGNAL SQLSTATE '45000'
					SET MESSAGE_TEXT = 'An entry that contains lines with printed labels cannot be deleted';
			END IF;
		END IF;
	END IF;

	IF NOT (NEW.supplierFk <=> OLD.supplierFk) THEN
		CALL supplier_checkIsActive(NEW.supplierFk);
		SET NEW.currencyFk = entry_getCurrency(NEW.currencyFk, NEW.supplierFk);
	END IF;

	IF NOT (NEW.travelFk <=> OLD.travelFk)		
	OR NOT (NEW.currencyFk <=> OLD.currencyFk) THEN 		
		SET NEW.commission = entry_getCommission(NEW.travelFk, NEW.currencyFk,NEW.supplierFk);		
	END IF;
END$$
DELIMITER ;