DELIMITER $$ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`supplierPackaging_ReportSource`( vFromDated DATE, vSupplierFk INT ) BEGIN /** * Selecciona los embalajes de un proveedor a partir de una fecha * * @param vFromDated Fecha de la que partir * @param vSupplierFk Id del proveedor */ SET @vBalance = 0; SET @vItemFk = NULL; CREATE OR REPLACE TEMPORARY TABLE tSupplierPackaging SELECT supplierFk, itemFk, longName, supplier, entryFk, landed, `in`, `out`, warehouse, buyingValue, IF ( NOT (@vItemFk <=> sub.itemFk), @vBalance := (`in` - `out`), @vBalance := (`in` - `out` + @vBalance) ) balance, @vItemFk := sub.itemFk previousItemFk FROM ( SELECT supplierFk, itemFk, longName, supplier, entryFk, landed, `in`, `out`, warehouse, buyingValue FROM supplierPackaging WHERE supplierFk = vSupplierFk AND landed >= vFromDated UNION ALL SELECT vSupplierFk, itemFk, longName, supplier, 'previous', vFromDated, SUM(`in`), SUM(`out`), NULL, buyingValue FROM supplierPackaging WHERE supplierFk = vSupplierFk AND landed < vFromDated GROUP BY itemFk ORDER BY itemFk, landed, entryFk ) sub WHERE `out` OR `in`; SELECT supplierFk, itemFk, longName, supplier, entryFk, landed, `in`, `out`, warehouse, buyingValue, balance FROM tSupplierPackaging WHERE NOT (NOT balance AND landed < CURDATE() - INTERVAL 1 YEAR); DROP TEMPORARY TABLE tSupplierPackaging; END$$ DELIMITER ;