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

58 lines
2.0 KiB
SQL

DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`comercial_caducado`()
BEGIN
-- Este procedimiento le pasa los clientes al jefe de ventas cuando llevan dos meses inactivos
IF day(util.VN_CURDATE()) = 5 then -- solo se ejecuta los dias 5 de cada mes
Update Clientes
join
(
Select c.Id_Cliente
from Clientes c
join jerarquia j on j.worker_id = c.Id_Trabajador -- este filtro es para que solo toque los de los comerciales
join
(
select Id_Cliente, sum(Importe) as Saldo
from
(
select Id_Cliente, Importe from Facturas
union all
select Id_Cliente, - Entregado from Recibos
) sub
group by Id_Cliente
) sindeuda on sindeuda.Id_Cliente = c.Id_Cliente
left join
(
select distinct Id_Cliente
from Facturas
where Fecha BETWEEN util.VN_CURDATE() - INTERVAL 12 MONTH AND util.VN_CURDATE()
) f on f.Id_Cliente = c.Id_Cliente
left join
(
select distinct Id_Cliente
from Tickets
where Fecha between util.VN_CURDATE() - INTERVAL 2 DAY AND util.VN_CURDATE() + INTERVAL 200 DAY
) tic_vivos on tic_vivos.Id_Cliente = c.Id_Cliente
where c.Created < util.VN_CURDATE() - INTERVAL 2 MONTH -- este filtro respeta a los recien nacidos....
and j.boss_id = 87 -- sólo afecta a los comerciales de Alfredo
and f.Id_Cliente is null -- comprueba que no tenga facturas en los dos ultimos meses
and sindeuda.Saldo < 10 -- sólo cambia a los clientes con deuda escasa o nula
and tic_vivos.Id_Cliente is null -- si tiene tickets vivos, lo respeta
) sub using(Id_Cliente)
set Id_Trabajador = 87 ;-- Alfredo Giner;
end if;
END$$
DELIMITER ;