USE `vn`;
DROP function IF EXISTS `clientGetMana`;

DELIMITER $$
USE `vn`$$
CREATE DEFINER=`root`@`%` FUNCTION `clientGetMana`(vClient INT) RETURNS decimal(10,2)
BEGIN
/**
 * Devuelve el maná del cliente.
 *
 * @param vClient Id del cliente
 * @return Maná del cliente
 */
 

DECLARE vMana DECIMAL(10,2);
DECLARE vFromDated DATE;

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

SELECT sum(mana) INTO vMana
    FROM 
		(
		SELECT mana
			FROM vn.clientManaCache
			WHERE clientFk = vClient
            AND dated = vFromDated
            
		UNION ALL
        
        SELECT s.quantity * Valor
             FROM vn.ticket t
				JOIN vn.address a ON a.id = t.addressFk
                JOIN vn.sale s on s.ticketFk = t.id
                JOIN vn2008.Movimientos_componentes mc on mc.Id_Movimiento = s.id
					WHERE Id_Componente IN (37, 39)
						AND t.shipped > vFromDated 
                        AND t.shipped < TIMESTAMPADD(DAY,1,CURDATE())
                        AND a.clientFk = vClient

		UNION ALL

		SELECT - Entregado
			FROM vn2008.Recibos r
				JOIN vn2008.Clientes c using(Id_Cliente)
			WHERE r.Id_Banco = 66
				AND r.Fechacobro > vFromDated
                AND r.Fechacobro <= CURDATE()
				AND c.Id_Cliente = vClient
			
        UNION ALL
        
        SELECT  g.Importe
			FROM vn2008.Greuges g
				JOIN vn2008.Clientes c using(Id_Cliente)
			WHERE g.Greuges_type_id = 3 -- Maná
				AND g.Fecha > vFromDated
                AND g.Fecha <= CURDATE()
				AND c.Id_Cliente = vClient
	
		) sub;

RETURN IFNULL(vMana,0);

END$$

DELIMITER ;
