DROP PROCEDURE IF EXISTS vn.item_getLack; DELIMITER $$ $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `vn`.`item_getLack`( IN vForce BOOLEAN DEFAULT TRUE, IN vDays INT DEFAULT 2, IN vCustomWhere TEXT, ) BEGIN /** * Calcula una tabla con el máximo negativo visible para cada producto y almacen * * @param vForce Fuerza el recalculo del stock * @param vDays Numero de dias a considerar * @param vSearch Filtro items **/ CALL `cache`.stock_refresh(vForce); CALL item_getMinacum(NULL, util.VN_CURDATE(), vDays, NULL); CALL item_getMinETD(); CALL item_zoneClosure(); SET @sqlQuery = CONCAT(`SELECT i.id itemFk, i.longName, w.id warehouseFk, p.`name` producer, i.`size`, i.category, w.name warehouse, SUM(IFNULL(sub.amount,0)) lack, i.inkFk, IFNULL(im.timed, util.midnight()) timed, IFNULL(izc.timed, util.midnight()) minTimed FROM (SELECT item_id, warehouse_id, amount FROM cache.stock WHERE amount > 0 UNION ALL SELECT itemFk, warehouseFk, amount FROM tmp.itemMinacum ) sub JOIN warehouse w ON w.id = sub.warehouse_id JOIN item i ON i.id = sub.item_id LEFT JOIN producer p ON p.id = i.producerFk JOIN itemType it ON it.id = i.typeFk JOIN itemCategory ic ON ic.id = it.categoryFk LEFT JOIN tmp.itemMinETD im ON im.itemFk = i.id LEFT JOIN tmp.itemZoneClosure izc ON izc.itemFk = i.id WHERE w.isForTicket AND ic.display AND it.code != 'GEN' AND `,vCustomWhere,` GROUP BY i.id, w.id HAVING lack < 0;`); CALL `exec`(@sqlQuery); DROP TEMPORARY TABLE tmp.itemMinacum; DROP TEMPORARY TABLE tmp.itemMinETD; DROP TEMPORARY TABLE tmp.itemZoneClosure; END $$ DELIMITER ;