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 ;
