Delimiter //
/**
*/

Drop Procedure if exists LOADER_LINKEDACCOUNTS_COPY//

Create Procedure LOADER_LINKEDACCOUNTS_COPY (
    In batchnum int
)
Begin
	call LOADER_LINKEDACCOUNTS_DELETE(batchnum);
	call LOADER_LINKEDACCOUNTS_INSERT(batchnum);

    Set @max_batch = GET_LOADER_INFO('MAX_BATCH', batchnum);
    Set @llc_maxit=5;

    if batchnum = @max_batch Then
        -- ci dessous, ne suprimera qui ce qui est nécéssaire,
        call LOADER_LINKEDACCOUNTS_CLEAR_NOT_IMPORTED();

-- 		call BUSINESS_ULINK_ACCOUNTS_ENTRIES(null);
-- 		call BUSINESS_COPY_LINKED_ACCOUNTS_ENTRIES(null, null);
        Call BUSINESS_LINKED_ACCOUNTS_BUILD_PREFIX_TREE(null, @llc_maxit);
        call BUSINESS_LINKED_ACCOUNTS_CHECK_CIRCULARE_REF(
                    null
                    , @llc_maxit 
                    , @llc_circularRefTable 
                    , @llc_ciculareRefCount 
                )
            ;
        -- select @llc_circularRefTable
        -- select * from TMP_CIRCULAR_ACCOUNTS
        if @llc_ciculareRefCount > 0 Then
            Call BUSINESS_LINKED_ACCOUNTS_CIRCULARE_REF_CLEAR(null, @llc_maxit, @llc_circularRefTable);
            -- log des erreurs de réferences circulaire pour comptes liés importés
            Update TMP_CIRCULAR_ACCOUNTS tcra
                Inner Join LOADER_LINKEDACCOUNTS src
                    On src.ACCOUNTS_ID_ACCOUNTS = tcra.ACCOUNTS_ID_ACCOUNTS
                    And src.ACCOUNTS_ID_ACCOUNTS_LINKED = tcra.ACCOUNTS_ID_ACCOUNTS_LINK
                Inner Join LOADER_STATUS lst
                    On src.LOADER_STATUS_ID_LOADER_STATUS = lst.ID_LOADER_STATUS
            Set lst.LOADER_STATUS_ERRCOUNT = Coalesce(lst.LOADER_STATUS_ERRCOUNT, 0) +1 
                ,lst.LOADER_STATUS_ERRMSGS = LOADER_CONCAT_ERR(lst.LOADER_STATUS_ERRMSGS, 'Circular reference detected')
            ;
-- 
--             -- log des erreurs de référeec circulaire pour les compte lié non présant dans e fichier
--             Delete tcra
--             From
--                 TMP_CIRCULAR_ACCOUNTS tcra
--                 Inner Join LOADER_LINKEDACCOUNTS src
--                     On src.ACCOUNTS_ID_ACCOUNTS = tcra.ACCOUNTS_ID_ACCOUNTS
--                     And src.ACCOUNTS_ID_ACCOUNTS_LINKED = tcra.ACCOUNTS_ID_ACCOUNTS_LINK
--             ;
--             -- il ne reste ici dans la table TMP_CIRCULAR_ACCOUNTS que les références circulaires
--             -- non présant dans le fichier importé mais suppriém
--             -- on log
--             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, ' référence circulaire trouvée dans les comptes liés '
-- 				)  -- message
-- 				, ACC.ID_ACCOUNTS
-- 			From
-- 				ACCOUNTS ACC
-- 			Where
-- 				ACC.ENTITIES_ID_ENTITIES = @entitie
-- 				And Exists(
--                     Select tcra.ACCOUNTS_ID_ACCOUNTS
--                     From TMP_CIRCULAR_ACCOUNTS tcra
--                     Where ACC.ID_ACCOUNTS = tcra.ACCOUNTS_ID_ACCOUNTS
--                 )
--             ;
        End if;

		call BUSINESS_LINKED_ACCOUNTS_CLEAR_UNLINKED_ENTRIES(null,  @llc_maxit);
		call BUSINESS_LINKED_ACCOUNTS_COPY_MISSING_ENTRIES(null, null, @llc_maxit);

        -- ici la table TMP_ACC_HAS_ACC est populé
        -- elle contient maxit+1 colonne
        -- on peut donc déduire si des liaisons ont une profondeur maximal

    End if;


End //

Delimiter ;