DELIMITER $$ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`item_setVisibleDiscard`( vItemFk INT, vWarehouseFk INT, vQuantity INT, vAddressFk INT) BEGIN /** * Procedimiento para dar dar de baja/alta un item, si vAddressFk es NULL se entiende que se da de alta y se toma el addressFk de la configuración * * @param vItemFk Identificador del ítem * @param vWarehouseFk id del warehouse * @param vQuantity a dar de alta/baja * @param vAddressFk id address */ DECLARE vTicketFk INT; DECLARE vClientFk INT; DECLARE vDefaultCompanyFk INT; DECLARE vCalc INT; DECLARE vAddressShortage INT; SELECT barcodeToItem(vItemFk) INTO vItemFk; SELECT DEFAULT(companyFk) INTO vDefaultCompanyFk FROM vn.ticket LIMIT 1; IF vAddressFk IS NULL THEN SELECT pc.shortageAddressFk INTO vAddressShortage FROM productionConfig pc ; ELSE SET vAddressShortage = vAddressFk; END IF; SELECT a.clientFk INTO vClientFk FROM address a WHERE a.id = vAddressShortage; SELECT t.id INTO vTicketFk FROM ticket t JOIN address a ON a.id = t.addressFk JOIN ticketState ts ON ts.ticketFk = t.id WHERE t.warehouseFk = vWarehouseFk AND a.id = vAddressShortage AND DATE(t.shipped) = util.VN_CURDATE() AND ts.code = 'DELIVERED' LIMIT 1; CALL cache.visible_refresh(vCalc, TRUE, vWarehouseFk); IF vTicketFk IS NULL THEN CALL ticket_add( vClientFk, util.VN_CURDATE(), vWarehouseFk, vDefaultCompanyFk, vAddressFk, NULL, NULL, util.VN_CURDATE(), account.myUser_getId(), FALSE, vTicketFk); END IF; INSERT INTO sale(ticketFk, itemFk, concept, quantity) SELECT vTicketFk, vItemFk, name, vQuantity FROM item WHERE id = vItemFk; UPDATE cache.visible SET visible = visible - vQuantity WHERE calc_id = vCalc AND item_id = vItemFk; END$$ DELIMITER ;