Delimiter //
/**
 * - Tout montant négatif est reporté dans l’autre colonne en positif
 * - Le type Facture est automatiquement transformé en avoir lorsque le montant est au crédit
 * - Le type Avoir est automatiquement transformé en facture lorsque le montant est au débit
 * - Le type règlement est automatiquement transformé en Règlement annulé/impayé lorsque le montant au débit
 * - Le type Règlement annulé/Impayé est automatiquement transformé en Règlement lorsque le montant au crédit
 * 
 * DOIT être placé après LOADER_ENTRIES_MAP_TYPE_PROVIDED()
 * 
 * @author Jean-François
 * @ticket 3756
 */
Drop Procedure If Exists LOADER_ENTRIES_MAP_NEGATIVE_AMOUNTS//
Create Procedure LOADER_ENTRIES_MAP_NEGATIVE_AMOUNTS(
    In batchnum Int
)
Begin


    -- Normalement on n'a pas besoin de tester ET Débit, ET ent_debit, ET admin_debit car ils sont sensés êtres cohérents. 
    -- pour plus de sûreté ici on check tout
    -- remise à 0 des des colonnes reportées
    -- CF #4204

    Update
        LOADER_ENTRIES E
        Inner Join
            LOADER_STATUS S
            On S.ID_LOADER_STATUS = E.LOADER_STATUS_ID_LOADER_STATUS
    Set
        -- Amounts
        ENTRIES_DEBIT = If(Coalesce(CREDIT,0) < 0, Abs(CREDIT), if(Coalesce(DEBIT,0) < 0 , 0, DEBIT))
        , ENTRIES_CREDIT = If(Coalesce(DEBIT,0) < 0, Abs(DEBIT), if(Coalesce(CREDIT,0) < 0, 0, CREDIT))

        , ENTRIES_ENT_DEBIT = If(Coalesce(ENT_CREDIT,0) < 0, Abs(ENT_CREDIT), if(Coalesce(ENT_DEBIT,0) < 0, 0 , ENT_DEBIT))
        , ENTRIES_ENT_CREDIT = If(Coalesce(ENT_DEBIT,0) < 0, Abs(ENT_DEBIT), if(Coalesce(ENT_CREDIT,0) < 0, 0, ENT_CREDIT))

        , ENTRIES_ADMIN_DEBIT = If(Coalesce(ADMIN_CREDIT,0) < 0, Abs(ADMIN_CREDIT), if(Coalesce(ADMIN_DEBIT,0) < 0, 0, ADMIN_DEBIT))
        , ENTRIES_ADMIN_CREDIT = If(Coalesce(ADMIN_DEBIT,0) < 0, Abs(ADMIN_DEBIT), if(Coalesce(ADMIN_CREDIT,0) < 0, 0, ADMIN_CREDIT))
    Where 1 = 1
        And S.LOADER_STATUS_BATCH_NUM = batchnum
        And 
            (   Coalesce(ENT_DEBIT, 0) < 0
                Or Coalesce(ENT_CREDIT, 0) < 0
                Or Coalesce(DEBIT, 0) < 0
                Or Coalesce(CREDIT, 0) < 0
                Or Coalesce(ADMIN_DEBIT, 0) < 0
                Or Coalesce(ADMIN_CREDIT, 0) < 0
            )
    ;





End//
Delimiter ;