Delimiter //
/**
 * Main contact is not provided
 * - S'il n'y a pas déjà un contact "main contact" dans le compte : initialiser le contact à intégrer avec "main contact=1"
 * - S'il y a déjà un "main contact" dans le compte et que sa référence externe de contact est différente : initialiser le contact à intégrer avec main contact = 0
 *
 * A executer une fois à la fin des cycles de normalisation
 * Contexte import CONTACT uniquement
 * 
 * @author Jean-François
 * @ticket #2113
 */
Drop Procedure If Exists LOADER_CONTACTS_NORMALIZE_MAP_MAIN_FROMCONTACT_NOTPROVIDED//
Create Procedure LOADER_CONTACTS_NORMALIZE_MAP_MAIN_FROMCONTACT_NOTPROVIDED()
Begin

        Drop Temporary table if exists TMP_LOADER_CONTACTS_ACCOUNTS;

        Create Temporary Table TMP_LOADER_CONTACTS_ACCOUNTS
        AS 

--     Insert Into LOADER_CONTACTS_ACCOUNTS (
--             LOADER_STATUS_ID_LOADER_STATUS
--             , ACCOUNTS_ID_ACCOUNTS
--         )
        Select
            LC.LOADER_STATUS_ID_LOADER_STATUS
            , A.ID_ACCOUNTS
        From
            LOADER_CONTACTS LC
            Inner Join ACCOUNTS A                                               -- compte existant
                On A.ID_ACCOUNTS = LC.ACCOUNTS_ID_ACCOUNTS     
--                 And A.CONTACTS_ID_CONTACTS Is Null                              -- le compte existant n'a pas de contact principal
        Where
            LC.IS_MAIN_CONTACT = 0                                              -- le contact n'est pas fourni comme contact principal
            And A.CONTACTS_ID_CONTACTS Is Null                              -- le compte existant n'a pas de contact principal
            And A.ID_ACCOUNTS Not In (                                          -- aucun contact principal n'a été fourni pour le compte dans l'import en cours
                Select LCX.ACCOUNTS_ID_ACCOUNTS
                From LOADER_CONTACTS LCX
                Where
                    LCX.IS_MAIN_CONTACT = 1
                    And LCX.ACCOUNTS_ID_ACCOUNTS = A.ID_ACCOUNTS                -- optim
            )
            And A.ID_ACCOUNTS Not In (                                          -- le contact principal du compte n'a pas déjà été défini dans l'import en cours
                Select LCAX.ACCOUNTS_ID_ACCOUNTS
                From LOADER_CONTACTS_ACCOUNTS LCAX
                Where 
                    LCAX.ACCOUNTS_ID_ACCOUNTS = A.ID_ACCOUNTS
                    And LCAX.ACCOUNTS_ID_ACCOUNTS_NEW Is Null
            )
--         Group By A.ID_ACCOUNTS
        Order By LC.LOADER_STATUS_ID_LOADER_STATUS
    ;

    -- on ne doit selection qu'un seul maincontact
    -- on utilise le group by

    Insert Into LOADER_CONTACTS_ACCOUNTS (
            LOADER_STATUS_ID_LOADER_STATUS
            , ACCOUNTS_ID_ACCOUNTS
        )
    Select Min(LOADER_STATUS_ID_LOADER_STATUS) LOADER_STATUS_ID_LOADER_STATUS
           ,ID_ACCOUNTS
    From TMP_LOADER_CONTACTS_ACCOUNTS
    Group By ID_ACCOUNTS
    ;
    
    Drop Temporary table if exists TMP_LOADER_CONTACTS_ACCOUNTS;

End//
Delimiter ;