Delimiter //
/**
* vérifi si les référence de compte sont fournis
* - pour le monde création 
*	=> LOADER_LINKEDACCOUNTS_REMOVE = 0
*	=> ACCOUNTS_REF non vide
*	=> ACCOUNTS_REF_LINKED non vide
* - pour le monde supression 
*	=> LOADER_LINKEDACCOUNTS_REMOVE <> 0
*	=> ACCOUNTS_REF non vide ou ACCOUNTS_REF_LINKED non vide
**/
Drop Procedure if exists LOADER_LINKEDACCOUNTS_NORMALIZE_ACCOUNT_REF_NOT_NULL //
Create Procedure LOADER_LINKEDACCOUNTS_NORMALIZE_ACCOUNT_REF_NOT_NULL (
    In batchnum int
)
Begin
	
	-- test si valide pour le mode creation

	Update
        LOADER_STATUS S
        Inner Join
            LOADER_LINKEDACCOUNTS LNKAC
            On LNKAC.LOADER_STATUS_ID_LOADER_STATUS = S.ID_LOADER_STATUS
    Set
        S.LOADER_STATUS_ERRCOUNT = S.LOADER_STATUS_ERRCOUNT + 1
        , S.LOADER_STATUS_ERRMSGS = LOADER_CONCAT_ERR(S.LOADER_STATUS_ERRMSGS
													, Case When Coalesce(LNKAC.ACCOUNTS_REF, '') = '' Then
															'Référence du compte de consolidation non fournis '
														Else
															'Référence du compte rattaché non fournis '
														End
												)
    Where 
		S.LOADER_STATUS_BATCH_NUM = batchnum
		And LNKAC.LOADER_LINKEDACCOUNTS_REMOVE = 0 -- n'est pas une suppression forcé
		And '' In ( Coalesce(LNKAC.ACCOUNTS_REF, '')
				, Coalesce(LNKAC.ACCOUNTS_REF_LINKED, '') 
			) -- l'une des référances de compte n'est pas fournis
        
    ;

	-- test si valide pour le mode supression
	-- => le flag LOADER_LINKEDACCOUNTS_REMOVE doit etre != 0
	-- au moins l'une des référence de compte (consolidation ou lié) doit être fournis
	Update
        LOADER_STATUS S
        Inner Join
            LOADER_LINKEDACCOUNTS LNKAC
            On LNKAC.LOADER_STATUS_ID_LOADER_STATUS = S.ID_LOADER_STATUS
    Set
        S.LOADER_STATUS_ERRCOUNT = S.LOADER_STATUS_ERRCOUNT + 1
        , S.LOADER_STATUS_ERRMSGS = LOADER_CONCAT_ERR(S.LOADER_STATUS_ERRMSGS, Concat('Aucune référence de comptes fournis en supression de comptes ratachés') )
    Where 
		S.LOADER_STATUS_BATCH_NUM = batchnum
		And LNKAC.LOADER_LINKEDACCOUNTS_REMOVE <>0 -- est une suppression forcé
		And Coalesce(
				NullIf(LNKAC.ACCOUNTS_REF, '')
				, NullIf(LNKAC.ACCOUNTS_REF_LINKED, '')
				, ''
			) = '' -- aucune des référances de compte n'est pas fournis
        
    ;


End //
Delimiter ;