Delimiter //
/**
 * Author:  armen
 * Created: 6 nov. 2019
 */
Drop Procedure if exists LOADER_TMP_ACCOUNTS_has_MEMBERS_INSERT//
Create Procedure LOADER_TMP_ACCOUNTS_has_MEMBERS_INSERT (
    In batchnum int
)
Begin
    Set @ltahmi_batchnum = batchnum;
    -- debug
--     Set @ltahmi_batchnum = 1;

    set @ltahmi_entitie = GET_LOADER_INFO('ID_ENTITIES', @ltahmi_batchnum);

    Set @ltahmi_ref = CASH_LOADER_ACCOUNTS_has_MEMBERS_GET_REF(@ltahmi_batchnum);

    Insert Into TMP_ACCOUNTS_has_MEMBERS (
        ACCOUNTS_ID_ACCOUNTS, MEMBERS_ID_MEMBERS, ENTITIES_ID_ENTITIES
        , ENT_REF_DATA_ID_ENT_REF_DATAS_1, ENT_REF_DATA_ID_ENT_REF_DATAS_2
        , ENT_REF_DATA_ID_ENT_REF_DATAS_3, ENT_REF_DATA_ID_ENT_REF_DATAS_4
        , ENT_REF_DATA_ID_ENT_REF_DATAS_5
        , DF_ACCESS_PROFILES_ID_DF_ACCESS_PROFILES
        , TMP_ACCOUNTS_has_MEMBERS_REF
    )
    -- explain
    Select
        -- optimisation on remplace les null par des 0 pour utiliser l'index dans les requêtes
--         la.ACCOUNTS_ID_ACCOUNTS, la.ID_MEMBERS, @ltahmi_entitie
        Coalesce(la.ACCOUNTS_ID_ACCOUNTS, 0), la.ID_MEMBERS, @ltahmi_entitie
        , la.ID_ENTITIES_REF_DATAS_1, la.ID_ENTITIES_REF_DATAS_2
        , la.ID_ENTITIES_REF_DATAS_3, la.ID_ENTITIES_REF_DATAS_4
        , la.ID_ENTITIES_REF_DATAS_5
        -- optimisation on remplace les null par des 0 pour utiliser l'index dans les requêtes
--         , la.DF_ACCESS_PROFILES_ID_DF_ACCESS_PROFILES
        , Coalesce(la.DF_ACCESS_PROFILES_ID_DF_ACCESS_PROFILES, 0)
--         , @ltahmi_ref
        , Trim(Coalesce(NullIf(la.ACCOUNTS_has_MEMBERS_REF, ''), @ltahmi_ref))
--         , Coalesce(la.DF_ACCESS_PROFILES_ID_DF_ACCESS_PROFILES, 0)
    -- select * 
    From
        LOADER_ATTACHEDMEMBERS la
        Inner Join LOADER_STATUS ls
            On la.LOADER_STATUS_ID_LOADER_STATUS = ls.ID_LOADER_STATUS
    Where
        ls.LOADER_STATUS_ERRCOUNT = 0
        And ls.LOADER_STATUS_BATCH_NUM = @ltahmi_batchnum
    ;

    -- insertion des données dans la table TMP_ACCOUNTS_has_MEMBERS_PRCSS
    -- pour permettre la persistence
    -- les données de la table TMP_ACCOUNTS_has_MEMBERS_PRCSS seront copiées vers la table TMP_ACCOUNTS_has_MEMBERS_SAVE
    -- dans le dernier lot

    Insert Into TMP_ACCOUNTS_has_MEMBERS_PRCSS (
        ACCOUNTS_ID_ACCOUNTS, MEMBERS_ID_MEMBERS, ENTITIES_ID_ENTITIES
        , ENT_REF_DATA_ID_ENT_REF_DATAS_1, ENT_REF_DATA_ID_ENT_REF_DATAS_2
        , ENT_REF_DATA_ID_ENT_REF_DATAS_3, ENT_REF_DATA_ID_ENT_REF_DATAS_4
        , ENT_REF_DATA_ID_ENT_REF_DATAS_5
        , DF_ACCESS_PROFILES_ID_DF_ACCESS_PROFILES
        , TMP_ACCOUNTS_has_MEMBERS_REF
    )
    Select
        ACCOUNTS_ID_ACCOUNTS, MEMBERS_ID_MEMBERS, ENTITIES_ID_ENTITIES
        , ENT_REF_DATA_ID_ENT_REF_DATAS_1, ENT_REF_DATA_ID_ENT_REF_DATAS_2
        , ENT_REF_DATA_ID_ENT_REF_DATAS_3, ENT_REF_DATA_ID_ENT_REF_DATAS_4
        , ENT_REF_DATA_ID_ENT_REF_DATAS_5
        , DF_ACCESS_PROFILES_ID_DF_ACCESS_PROFILES
        , TMP_ACCOUNTS_has_MEMBERS_REF
    From
        TMP_ACCOUNTS_has_MEMBERS
    ;

End //

Delimiter ;

