salix/db/routines/vn/procedures/invoiceExpenseMake.sql

36 lines
1.2 KiB
SQL

DELIMITER $$
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`invoiceExpenseMake`(IN vInvoice INT)
BEGIN
/* Inserta las partidas de gasto correspondientes a la factura
* REQUIERE tabla tmp.ticketToInvoice
* @param vInvoice Numero de factura
*/
DELETE FROM invoiceOutExpense
WHERE invoiceOutFk = vInvoice;
INSERT INTO invoiceOutExpense(invoiceOutFk, expenseFk, amount, foreignAmount)
SELECT vInvoice,
expenseFk,
SUM(ROUND(quantity * price * (100 - discount) / 100, 2)) amount,
currency_getRate(t.currencyFk, NULL) *
SUM(ROUND(quantity * price * (100 - discount) / 100, 2)) foreignAmount
FROM tmp.ticketToInvoice tti
JOIN ticket t ON t.id = tti.id
JOIN sale s ON s.ticketFk = t.id
JOIN item i ON i.id = s.itemFk
GROUP BY i.expenseFk
HAVING amount <> 0
UNION ALL
SELECT vInvoice,
tst.expenseFk,
SUM(ROUND(ts.quantity * ts.price ,2)) amount,
currency_getRate(t.currencyFk, NULL),
SUM(ROUND(ts.quantity * ts.price, 2)) foreignAmount
FROM tmp.ticketToInvoice tti
JOIN ticket t ON t.id = tti.id
JOIN ticketService ts ON ts.ticketFk = t.id
JOIN ticketServiceType tst ON tst.id = ts.ticketServiceTypeFk
HAVING amount <> 0;
END$$
DELIMITER ;