salix/db/routines/vn2008/procedures/quadre_clientes.sql

68 lines
1.7 KiB
SQL

DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`quadre_clientes`(IN datFEC DATETIME)
BEGIN
DECLARE datSTART DATE;
SET datFEC = TIMESTAMP(datFEC,'23:59:59');
SELECT util.firstDayOfYear(datFEC) INTO datSTART;
SELECT P2.Alias, C.Id_Cliente, C.Cuenta, Gestion, Contaplus, Gestion - Contaplus as Diferencia, empresa_id, Cliente
FROM Clientes C
JOIN pay_met pm ON pm.id = C.pay_met_id
JOIN
(
SELECT empresa_id, Id_Cliente, round(sum(Gestion),2) as Gestion, round(sum(Contaplus),2) as Contaplus
FROM
(
SELECT empresa_id, Id_Cliente, Gestion, 0 as Contaplus
FROM
(
SELECT empresa_id, Id_Cliente, -1 * Importe as Gestion
FROM Facturas
WHERE Fecha BETWEEN datSTART AND datFEC
UNION ALL
SELECT empresa_id, Id_Cliente, Entregado
FROM Recibos
WHERE Fechacobro BETWEEN datSTART AND datFEC
) G
WHERE empresa_id <> 965
UNION ALL
SELECT empresa_id, Id_Cliente, 0, round(nz(Eurohaber) - nz(Eurodebe),2) as Contaplus
FROM bi.XDiario_ALL XD
JOIN Clientes C ON C.Cuenta = XD.SUBCTA
WHERE Fecha BETWEEN datSTART AND datFEC
) sub1
GROUP BY empresa_id, Id_Cliente
) sub2 USING(Id_Cliente)
JOIN Proveedores P2 ON P2.Id_Proveedor = sub2.empresa_id
WHERE pm.deudaviva -- Cliente de perdidas no vale la pena revisarlo
HAVING ABS(Diferencia) > 0.05
ORDER BY Cliente;
END$$
DELIMITER ;