Delimiter //
/**
 * Author:  armen
 * Created: 6 nov. 2019
 * Calcul les accréditations des correspondants
 * Principe : 2 étapes principles
 *  1 : Recherche de la règle des correspondants (table ENTITIES_ACCNTS_ATTCHD_MBRS_PRFLES) à appliquer
 *  en fonction des codes codes accréditations et du profile.
 *  - Si aucun  ID_ENTITIES_ACCNTS_ATTCHD_MBRS_PRFLES n'est trouvé, la ligne ne sera pas traité
 *      on utilisera la valeur 0 (à la place de valeur null) en raison des indexes
 *  - Si plusieurs  ID_ENTITIES_ACCNTS_ATTCHD_MBRS_PRFLES sont trouvée, on applique celle ayant le profile avec la
 *    priorité la plus forte (valeur entière la plus petites)
 *  2 : recherche des comptes
 *  - si l'id de compte ou la réf de compte est fourni: application direct
 *  - si l'id de compte n'est n'est pas fourni, recherche des compte par la règles des codes d'accréditations
 */
Drop Procedure if Exists BUSINESS_ATTACHED_MEMBERS_COMPUTE_PREPARED//
Create Procedure BUSINESS_ATTACHED_MEMBERS_COMPUTE_PREPARED(
    in accAcredRefTpe Int unsigned
)
Begin
    bamcp_main: Begin
        bamcp_init: Begin
            if accAcredRefTpe Is Null Then
                Set @bamcp_accAcredRefTpe = (
                            Select ert.ID_ENTITIES_REF_TYPES From
                                ENTITIES_REF_TYPES ert
                            Where ert.ENTITIES_REF_TYPES_CODE = 'ACCRED_ACCOUNTS'
                        )
                    ;
            Else  
                Set @bamcp_accAcredRefTpe = accAcredRefTpe;
            End if;

            --  creation et remplissage de la table TMP_ENTITIES_ACCNTS_ATTCHD_MBRS_PRFLES
            call BUSINESS_ATTACHED_MEMBERS_PREP_REF_DATAS(@bamcp_accAcredRefTpe);
        End;
        
        bamcp_compute: Begin
            -- recherche de la règle à appliquer en fonction des référence d'accréditations, du profile et du
            -- paramétrage des correspondant dans l'entité
            Update
                TMP_ACCOUNTS_has_MEMBERS srcamb
            Set
                -- on remplace les valeurs null par des index pour une utilisation plus efficace des indexes
                srcamb.ENT_AC_ATTC_MBRS_PRFLS_ID_ENT_AC_ATTC_MBRS_PRFLS = Coalesce(
                        (
                            Select tmpeaamp.ID_ENTITIES_ACCNTS_ATTCHD_MBRS_PRFLES
                            From TMP_ENTITIES_ACCNTS_ATTCHD_MBRS_PRFLES tmpeaamp
                            Where srcamb.ENTITIES_ID_ENTITIES = tmpeaamp.ENTITIES_ID_ENTITIES
                                And Coalesce(srcamb.ENT_REF_DATA_ID_ENT_REF_DATAS_1, tmpeaamp.ENTITIES_REF_DATAS_ID_ENTITIES_REF_DATAS_1,0) = Coalesce(tmpeaamp.ENTITIES_REF_DATAS_ID_ENTITIES_REF_DATAS_1, srcamb.ENT_REF_DATA_ID_ENT_REF_DATAS_1, 0)
                                And Coalesce(srcamb.ENT_REF_DATA_ID_ENT_REF_DATAS_2, tmpeaamp.ENTITIES_REF_DATAS_ID_ENTITIES_REF_DATAS_2,0) = Coalesce(tmpeaamp.ENTITIES_REF_DATAS_ID_ENTITIES_REF_DATAS_2, srcamb.ENT_REF_DATA_ID_ENT_REF_DATAS_2, 0)
                                And Coalesce(srcamb.ENT_REF_DATA_ID_ENT_REF_DATAS_3, tmpeaamp.ENTITIES_REF_DATAS_ID_ENTITIES_REF_DATAS_3,0) = Coalesce(tmpeaamp.ENTITIES_REF_DATAS_ID_ENTITIES_REF_DATAS_3, srcamb.ENT_REF_DATA_ID_ENT_REF_DATAS_3, 0)
                                And Coalesce(srcamb.ENT_REF_DATA_ID_ENT_REF_DATAS_4, tmpeaamp.ENTITIES_REF_DATAS_ID_ENTITIES_REF_DATAS_4,0) = Coalesce(tmpeaamp.ENTITIES_REF_DATAS_ID_ENTITIES_REF_DATAS_4, srcamb.ENT_REF_DATA_ID_ENT_REF_DATAS_4, 0)
                                And Coalesce(srcamb.ENT_REF_DATA_ID_ENT_REF_DATAS_5, tmpeaamp.ENTITIES_REF_DATAS_ID_ENTITIES_REF_DATAS_5,0) = Coalesce(tmpeaamp.ENTITIES_REF_DATAS_ID_ENTITIES_REF_DATAS_5, srcamb.ENT_REF_DATA_ID_ENT_REF_DATAS_5, 0)
                                And Coalesce(srcamb.DF_ACCESS_PROFILES_ID_DF_ACCESS_PROFILES, tmpeaamp.DF_ACCESS_PROFILES_ID_DF_ACCESS_PROFILES,0) = Coalesce(tmpeaamp.DF_ACCESS_PROFILES_ID_DF_ACCESS_PROFILES, srcamb.DF_ACCESS_PROFILES_ID_DF_ACCESS_PROFILES, 0)
                            Order By tmpeaamp.ENTITIES_ACCNTS_ATTCHD_MBRS_PRFLES_SEQUENCE
                            Limit 1
                        )
                        , 0
                    )
                , srcamb.ACCOUNTS_ID_ACCOUNTS = Coalesce(srcamb.ACCOUNTS_ID_ACCOUNTS, 0)
                , srcamb.ENTITIES_ID_ENTITIES = Coalesce(srcamb.ENTITIES_ID_ENTITIES, 0)
            ;

            -- à l'issu de la requête précédente ENT_AC_ATTC_MBRS_PRFLS_ID_ENT_AC_ATTC_MBRS_PRFLS et rempli pour toutes
            -- les lignes. la valeur 0 ayant remplacé les null

            -- ci dessous, requetes de debugage
            -- select * from TMP_ENTITIES_ACCNTS_ATTCHD_MBRS_PRFLES tmpeaamp
--             Select
--                 (        
--                     Select tmpeaamp.ID_ENTITIES_ACCNTS_ATTCHD_MBRS_PRFLES
--                     From TMP_ENTITIES_ACCNTS_ATTCHD_MBRS_PRFLES tmpeaamp
--                     Where srcamb.ENTITIES_ID_ENTITIES = tmpeaamp.ENTITIES_ID_ENTITIES
--                         And Coalesce(srcamb.ENT_REF_DATA_ID_ENT_REF_DATAS_1, tmpeaamp.ENTITIES_REF_DATAS_ID_ENTITIES_REF_DATAS_1,0) = Coalesce(tmpeaamp.ENTITIES_REF_DATAS_ID_ENTITIES_REF_DATAS_1, srcamb.ENT_REF_DATA_ID_ENT_REF_DATAS_1, 0)
--                         And Coalesce(srcamb.ENT_REF_DATA_ID_ENT_REF_DATAS_2, tmpeaamp.ENTITIES_REF_DATAS_ID_ENTITIES_REF_DATAS_2,0) = Coalesce(tmpeaamp.ENTITIES_REF_DATAS_ID_ENTITIES_REF_DATAS_2, srcamb.ENT_REF_DATA_ID_ENT_REF_DATAS_2, 0)
--                         And Coalesce(srcamb.ENT_REF_DATA_ID_ENT_REF_DATAS_3, tmpeaamp.ENTITIES_REF_DATAS_ID_ENTITIES_REF_DATAS_3,0) = Coalesce(tmpeaamp.ENTITIES_REF_DATAS_ID_ENTITIES_REF_DATAS_3, srcamb.ENT_REF_DATA_ID_ENT_REF_DATAS_3, 0)
--                         And Coalesce(srcamb.ENT_REF_DATA_ID_ENT_REF_DATAS_4, tmpeaamp.ENTITIES_REF_DATAS_ID_ENTITIES_REF_DATAS_4,0) = Coalesce(tmpeaamp.ENTITIES_REF_DATAS_ID_ENTITIES_REF_DATAS_4, srcamb.ENT_REF_DATA_ID_ENT_REF_DATAS_4, 0)
--                         And Coalesce(srcamb.ENT_REF_DATA_ID_ENT_REF_DATAS_5, tmpeaamp.ENTITIES_REF_DATAS_ID_ENTITIES_REF_DATAS_5,0) = Coalesce(tmpeaamp.ENTITIES_REF_DATAS_ID_ENTITIES_REF_DATAS_5, srcamb.ENT_REF_DATA_ID_ENT_REF_DATAS_5, 0)
--                         And Coalesce(srcamb.DF_ACCESS_PROFILES_ID_DF_ACCESS_PROFILES, tmpeaamp.DF_ACCESS_PROFILES_ID_DF_ACCESS_PROFILES,0) = Coalesce(tmpeaamp.DF_ACCESS_PROFILES_ID_DF_ACCESS_PROFILES, srcamb.DF_ACCESS_PROFILES_ID_DF_ACCESS_PROFILES, 0)
--                     Order By tmpeaamp.ENTITIES_ACCNTS_ATTCHD_MBRS_PRFLES_SEQUENCE
--                     Limit 1
-- 
--                 ) AS SELECTED_PROF
--                 , srcamb.*
--                 
--             From
--                 TMP_ACCOUNTS_has_MEMBERS AS srcamb
--             ;
            

        End;
    End;
End //
Delimiter ;

