Delimiter //
/**
    In batchnum Int : num du lot, si 0 ou null traitement de l'ensembles des lignes
	ticket #6291 statut de lettrage forcé
*/
-- ci dessous suppression de l'ancien procedure, car la ps à été renommée
Drop Procedure if exists LOADER_ENTRIES_INSERT_FORCED_MATCH_STATUES//

Drop Procedure if exists LOADER_ENTRIES_INSERT_FORCED_MATCH_STATUS//
Create Procedure LOADER_ENTRIES_INSERT_FORCED_MATCH_STATUS (
    In batchnum int, 
    In lastId Int
)
Begin

    -- règles implémentées
    -- =================================================================================================================
    -- |   statut      |                                      STATUTS EXISTANTS                                        |
    -- |   en cours    |-----------------------------------------------------------------------------------------------|
    -- |   d'import    | AUTO OUVERT   | AUTO PARTIEL  | AUTO FERMÉ    | FORCÉ OUVERT  | FORCÉ PARTIEL | FORCÉ FERMÉ   |
    -- |===============================================================================================================|
    -- | NON FORCÉ     | auto          | auto          | auto          | non modifié   | non modifié   | non modifié   |
    -- |---------------|---------------|---------------|---------------|---------------|---------------|---------------|
    -- | FORCÉ FERMÉ   | ajout fermé   | ajout fermé   | ajout fermé   | suppr + ajout | suppr + ajout | non modifié   |
    -- |---------------|---------------|---------------|---------------|---------------|---------------|---------------|
    -- | FORCÉ PARTIEL | ajout partiel | ajout partiel | ajout partiel | suppr + ajout | non modifié   | suppr + ajout |
    -- |---------------|---------------|---------------|---------------|---------------|---------------|---------------|
    -- | FORCÉ OUVERT  | ajout ouvert  | ajout ouvert  | ajout ouvert  | non modifié   | suppr + ajout | suppr + ajout |
    -- =================================================================================================================
    -- LEXIQUE
    -- - auto : statut de lettrage calculé par la balance des écritures lettrés
    -- - ajout fermé : ajout du statut de lettrage forcé "totalement lettré" (clos/fermé)
    -- - ajout partiel : ajout du statut de lettrage forcé "partiellement lettré"
    -- - suppr + ajout : suppression du statut de lettrage forcé existant, ajout du nouveau statut demandé.
    -- - non modifié : pas de modification du statut de lettrage existant

        -- afin de pouvoir exclure ces ecritures de la mise à jour du status de lettrage, on utilise la table ENTRIES_COMPUTED_DATA


		Set @leifms_batchnum = batchnum;
		Set @leifms_lastId = lastId;

		-- purges des donnée des information de status de lettrage voir tableau des cas en
		-- -> le status doit avoir été forcé (fichier/constante mappage)
		-- -> le status forcé doit être une des valeurs admise (issu du fichier, sans erreur sur le status)
		-- -> le status forcé fournis, doit être différent du statut forcé enregistré

		Delete
			ECD
		From
            LOADER_STATUS LS
            Inner Join LOADER_ENTRIES_FORCED_MATCH_STATE LEFMS
                On LS.ID_LOADER_STATUS = LEFMS.LOADER_STATUS_ID_LOADER_STATUS
			Inner join LOADER_ENTRIES LE
                On LEFMS.LOADER_ENTRIES_ID_LOADER_ENTRIES = LE.ID_LOADER_ENTRIES
			Inner Join ENTRIES_COMPUTED_DATA ECD
				On LE.ID_ENTRIES = ECD.ENTRIES_ID_ENTRIES
				And ECD.ENTRIES_COMPUTED_DATA_KEY = 'FORCEDMATCHSTS'
		Where
			LS.LOADER_STATUS_BATCH_NUM = @leifms_batchnum
			And LS.LOADER_STATUS_ERRCOUNT = 0
		;

		-- les anciens status de lettrage forcés <> du status en court d'import sont purgé
		-- les status non modifiés sont préservé afin de conserver la date de status de lettrage forcé

        set @leifms_curDate = curdate();
		-- insertion des ecritures avec un status de lettrage forcé
		-- => non null ET <> ouvert
		Insert Into ENTRIES_COMPUTED_DATA (
			ENTRIES_ID_ENTRIES
			, ENTRIES_COMPUTED_DATA_KEY
			, ENTRIES_COMPUTED_DATA_EXTID, ENTRIES_COMPUTED_DATA_DATE
		)
		-- explain
		Select 
			Coalesce(LE.ID_ENTRIES, LE.ID_ENTRIES_NEW + @leifms_lastId )
			, 'FORCEDMATCHSTS'
			, LE.DF_MATCH_STAT_ID_DF_MATCH_STAT, @leifms_curDate
		From
            LOADER_STATUS LS
            Inner Join LOADER_ENTRIES_FORCED_MATCH_STATE LEFMS
                On LS.ID_LOADER_STATUS = LEFMS.LOADER_STATUS_ID_LOADER_STATUS
            Inner join LOADER_ENTRIES LE
                On LEFMS.LOADER_ENTRIES_ID_LOADER_ENTRIES = LE.ID_LOADER_ENTRIES
            -- ci dessous, en principe inutile, ajouter par précaution
            -- pour être sure d'écarter un risque de non respect de contrainte d'intégrité
		    Left Join ENTRIES_COMPUTED_DATA ecd_chk
		        On LE.ID_ENTRIES = ecd_chk.ENTRIES_ID_ENTRIES
		        And ecd_chk.ENTRIES_COMPUTED_DATA_KEY = 'FORCEDMATCHSTS'
		Where
            LS.LOADER_STATUS_ERRCOUNT = 0
			And LS.LOADER_STATUS_BATCH_NUM = @leifms_batchnum
#           -- ci dessous, implicite en raison de la jointure sur  LOADER_ENTRIES_FORCED_MATCH_STATE
#             And LE.MATCHINGCODE_STATE_FORCED = 1
		  -- ci dessous précaution pour limiter erreur contrainte d'intégrité
            And ecd_chk.ENTRIES_ID_ENTRIES Is Null
		;

End //

Delimiter ;



