Delimiter //
/**
 * Main contact is provided
 * - Si main = 0 dans le fichier : initialiser le contact à intégrer avec contact main = 0
 * - si main = 1 ET qu'il n'y a pas de main contact dans le compte : initialiser le contact à intégrer avec main = 1.
 * S'il y a déjà un main contact dans le compte avec une autre ref externe de contact :
 * - warning : "Le contact principal ne peut pas être modifié [ref compte] - [nom du contact fichier d'importation]"
 * - Initialiser le contact à intégrer avec main = 0
 *
 * Contexte import CONTACT uniquement
 * 
 * @author Jean-François
 * @ticket #2113
 */
Drop Procedure If Exists LOADER_CONTACTS_NORMALIZE_MAP_MAIN_FROMCONTACT_PROVIDED//
Create Procedure LOADER_CONTACTS_NORMALIZE_MAP_MAIN_FROMCONTACT_PROVIDED(
    In batchnum Int
)
Begin

    Insert Into LOADER_CONTACTS_ACCOUNTS (
            LOADER_STATUS_ID_LOADER_STATUS
            , ACCOUNTS_ID_ACCOUNTS
            , ACCOUNTS_ID_ACCOUNTS_NEW
        )
        Select
            LC.LOADER_STATUS_ID_LOADER_STATUS
            , A.ID_ACCOUNTS
            , Null                                                              -- pas de création de compte dans l'import contact
        From
            LOADER_CONTACTS LC
            Inner Join LOADER_STATUS LS
                On LS.ID_LOADER_STATUS = LC.LOADER_STATUS_ID_LOADER_STATUS
            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
            Left Join LOADER_CONTACTS_ACCOUNTS LCA
                On LCA.ACCOUNTS_ID_ACCOUNTS = A.ID_ACCOUNTS
        Where
           LC.IS_MAIN_CONTACT = 1                                               -- le contact est fourni comme contact principal
           And LCA.ID_LOADER_CONTACTS_ACCOUNTS Is Null                          -- le contact principal n'a pas déjà été défini dans l'import en cours
           And LS.LOADER_STATUS_BATCH_NUM = batchnum
        Order By
            LC.ID_LOADER_CONTACTS
    ;

    -- il faut mettre un warning pour les autres main contacts fournis
    Update
        LOADER_STATUS LS
        Inner Join LOADER_CONTACTS LC
            On LC.LOADER_STATUS_ID_LOADER_STATUS = LS.ID_LOADER_STATUS
        Inner Join ACCOUNTS A                                                   -- compte existant
            On A.ID_ACCOUNTS = LC.ACCOUNTS_ID_ACCOUNTS
--             And A.CONTACTS_ID_CONTACTS Is Not Null                              -- le compte existant a un contact principal
        Inner Join CONTACTS C
            On A.CONTACTS_ID_CONTACTS =  C.ID_CONTACTS                          -- implique ci dessus
--             And C.CONTACTS_REF != LC.CONTACTS_REF                                -- ce contact principal ne porte pas la même ref
    Set
        LS.LOADER_STATUS_WARNCOUNT = LS.LOADER_STATUS_WARNCOUNT + 1
        , LS.LOADER_STATUS_WARNMSGS = LOADER_CONCAT_ERR(LS.LOADER_STATUS_WARNMSGS, 'Le contact principal ne peut pas être modifié') 
    Where 
        LC.IS_MAIN_CONTACT = 1                                                  -- le contact est fourni comme contact principal;
        And C.CONTACTS_REF != LC.CONTACTS_REF                                -- ce contact principal ne porte pas la même ref
        And LS.LOADER_STATUS_BATCH_NUM = batchnum
    ;

End//
Delimiter ;