DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`manaCustomerUpdate`()
BEGIN
	DECLARE vToDated DATE;
	DECLARE vFromDated DATE;
	DECLARE vForDeleteDated DATE;
	DECLARE vManaId INT;
    DECLARE vManaAutoId INT;
    DECLARE vClaimManaId INT;
    DECLARE vManaBankId INT;
    DECLARE vManaGreugeTypeId INT;
    DECLARE vManaFromDays INT;
    DECLARE vManaToDays INT;

	SELECT id INTO vManaId 
			FROM vn.component WHERE code = 'mana';
		
	SELECT id INTO vManaAutoId 
		FROM vn.component WHERE code = 'autoMana';
	
	SELECT id INTO vClaimManaId
		FROM vn.component WHERE code = 'manaClaim';
	
	SELECT id INTO vManaBankId 
		FROM vn.bank WHERE code = 'mana';
	
	SELECT id INTO vManaGreugeTypeId 
		FROM vn.greugeType WHERE code = 'mana';

    SELECT manaFromDays, manaToDays
        INTO vManaFromDays, vManaToDays
        FROM vn.salespersonConfig;

	SELECT MAX(dated)
        INTO vFromDated 
        FROM vn.clientManaCache;

	 DELETE
        FROM vn.clientManaCache
        WHERE dated = vFromDated;
    
    SELECT MAX(dated)
        INTO vFromDated 
        FROM vn.clientManaCache;
            
    IF ISNULL(vFromDated) THEN
        SELECT manaDateFrom
            INTO vFromDated
            FROM vn.salespersonConfig;
    END IF;

    WHILE vFromDated + INTERVAL vManaToDays DAY < util.VN_CURDATE() DO
        SELECT
                vFromDated + INTERVAL vManaToDays DAY,
                vFromDated - INTERVAL vManaFromDays DAY 
            INTO 
                vToDated,
                vForDeleteDated;
            
        DELETE FROM vn.clientManaCache
            WHERE dated <= vForDeleteDated;

        INSERT INTO vn.clientManaCache(clientFk, mana, dated)
            SELECT 
                    Id_Cliente,
                    SUM(mana),
                    vToDated 
                FROM 
                (
                    SELECT cs.Id_Cliente, Cantidad * Valor as mana
                        FROM vn2008.Tickets t
                            JOIN vn2008.Consignatarios cs using(Id_Consigna)
                            JOIN vn2008.Movimientos m on m.Id_Ticket = t.Id_Ticket
                            JOIN vn2008.Movimientos_componentes mc on mc.Id_Movimiento = m.Id_Movimiento
                        WHERE Id_Componente IN (vManaAutoId, vManaId, vClaimManaId)
                            AND t.Fecha > vFromDated 
                            AND date(t.Fecha) <= vToDated
                    UNION ALL
                    SELECT r.Id_Cliente, - Entregado
                        FROM vn2008.Recibos r
                        WHERE Id_Banco = vManaBankId
                            AND Fechacobro > vFromDated 
                            AND Fechacobro <= vToDated
                    UNION ALL
                    SELECT g.Id_Cliente, g.Importe
                        FROM vn2008.Greuges g
                        WHERE Greuges_type_id = vManaGreugeTypeId
                            AND Fecha > vFromDated 
                            AND Fecha <= vToDated
                    UNION ALL
                    SELECT clientFk, mana
                        FROM vn.clientManaCache
                        WHERE dated = vFromDated
                ) sub
                GROUP BY Id_Cliente
                HAVING Id_Cliente;

        SET vFromDated = vToDated;  
    END WHILE;
END$$
DELIMITER ;
