Delimiter //
/**
 * vérifier le solde de l'application par rapport à celui fourni
 * 
 * 
 * Rechercher les comptes de l'entité dont somme(ENT_DEBIT - ENT_CREDIT) <> 0 et absents du fichier de contrôle de solde
 * Les lister comme erreur "Compte ref : "+[ref compte dans l'application] + " non trouvé dans le fichier de contrôle des soldes. Montant : "+ somme(ENT_DEBIT - ENT_CREDIT)
 *
 * 
 * @author Jean-François
 * @ticket #3762
 */
Drop Procedure If Exists LOADER_BALANCECONTROL_NORMALIZE_CHECK_APPLICATION_BALANCE//
Create Procedure LOADER_BALANCECONTROL_NORMALIZE_CHECK_APPLICATION_BALANCE(
	In boundMode Int
)
Begin

    set @entitie = GET_LOADER_INFO('ID_ENTITIES', 1);
	if boundMode = 0 Then
		-- sans comptes liée
		Insert Into
			LOADER_BALANCECONTROL_ACCOUNTS_STATUS (
				LOADER_BALANCECONTROL_ACCOUNTS_STATUS_ERRCOUNT
				, LOADER_BALANCECONTROL_ACCOUNTS_STATUS_ERRMSGS
				, ACCOUNTS_ID_ACCOUNTS
			)
			Select
				1 ERRCOUNT
				, Concat(
						'Compte ref ',ACC.ACCOUNTS_REF, ' non trouvé dans le fichier de contrôle des soldes. Montant : ', FA.FI_ANA_UNBOUND_OUTSTANDING
				)  -- message
				, FA.ACCOUNTS_ID_ACCOUNTS 
			From
				ACCOUNTS ACC
				Inner Join  FI_ANA FA
					ON ACC.ID_ACCOUNTS = FA.ACCOUNTS_ID_ACCOUNTS
				Left Join
					LOADER_BALANCECONTROL BC
					On FA.ACCOUNTS_ID_ACCOUNTS = BC.ID_ACCOUNTS
			Where
				ACC.ENTITIES_ID_ENTITIES = @entitie
				And BC.ID_LOADER_BALANCECONTROL Is Null
				And FA.FI_ANA_UNBOUND_OUTSTANDING <> 0
		;
		-- balance de l'application
		Set @appBalance = Coalesce(
							(
								Select sum(FA.FI_ANA_UNBOUND_OUTSTANDING)
								From
									ACCOUNTS ACC
									Inner Join  FI_ANA FA
									 ON ACC.ID_ACCOUNTS = FA.ACCOUNTS_ID_ACCOUNTS
								Where
									ACC.ENTITIES_ID_ENTITIES = @entitie
							)
							, 0
						) 
					;
	Else
		-- avec les comptes liés
		Insert Into
			LOADER_BALANCECONTROL_ACCOUNTS_STATUS (
				LOADER_BALANCECONTROL_ACCOUNTS_STATUS_ERRCOUNT
				, LOADER_BALANCECONTROL_ACCOUNTS_STATUS_ERRMSGS
				, ACCOUNTS_ID_ACCOUNTS
			)
			Select
				1 ERRCOUNT
				, Concat(
						'Compte ref ',ACC.ACCOUNTS_REF, ' non trouvé dans le fichier de contrôle des soldes. Montant : ', FA.FI_ANA_OUTSTANDING
				)  -- message
				, FA.ACCOUNTS_ID_ACCOUNTS 
			From
				ACCOUNTS ACC
				Inner Join  FI_ANA FA
					ON ACC.ID_ACCOUNTS = FA.ACCOUNTS_ID_ACCOUNTS
				Left Join
					LOADER_BALANCECONTROL BC
					On FA.ACCOUNTS_ID_ACCOUNTS = BC.ID_ACCOUNTS
			Where
				ACC.ENTITIES_ID_ENTITIES = @entitie
				And BC.ID_LOADER_BALANCECONTROL Is Null
				And FA.FI_ANA_OUTSTANDING <> 0
		;
		-- balance de l'application
		Set @appBalance = Coalesce(
							(
								Select sum(FA.FI_ANA_OUTSTANDING)
								From
									ACCOUNTS ACC
									Inner Join  FI_ANA FA
									 ON ACC.ID_ACCOUNTS = FA.ACCOUNTS_ID_ACCOUNTS
								Where
									ACC.ENTITIES_ID_ENTITIES = @entitie
							)
							, 0
						) 
					;
    end if;

    -- balance du fichier
    Set @fileBalance = Coalesce((
            Select sum(BALANCE)
            From
                LOADER_BALANCECONTROL
        ), 0) ;
    if @appBalance <> @fileBalance Then
        Insert Into
        LOADER_BALANCECONTROL_ACCOUNTS_STATUS (
            LOADER_BALANCECONTROL_ACCOUNTS_STATUS_ERRCOUNT
            , LOADER_BALANCECONTROL_ACCOUNTS_STATUS_ERRMSGS
        )
        Select
            1 ERRCOUNT
            , Concat(
                    'Montant encours comptable pour l''entité "', @entitie ,' " : ', @appBalance
                    , '. Montant des écritures fournies (comptables et non comptables) : ', @fileBalance
            )  -- message
        ;
    End if;

End//
Delimiter ;