*PARAMETRES*
*Compte administratif*
*Entite(ex : 001)|3N|TXT|O*
*Annee (EX : 2013)|4N|TXT|O*
*FIN PARAMETRES*

***************************************************
* PRX - REMPLACE LE PRMOUL NBPOINTS
* Auteur : Mikael
* Date : 08/04/2014
***************************************************

SUBROUTINE XNBPOINTS(RETURNVAL,PARAMETRES,W_Sortie)


EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
OPEN "", "CONTRAT" TO F.CONTRAT ELSE STOP
OPEN "", "DETAILCALCUL" TO F.DETAILCALCUL ELSE STOP
OPEN "", "RUBSAISIE" TO F.RUBSAISIE ELSE STOP
OPEN "", "CONVENTIONCOL" TO F.CONVENTIONCOL ELSE STOP
OPEN "", "_HOLD_" TO F.HOLD ELSE STOP
OPEN "", "CIVILAIDANT" TO F.CIVILAIDANT ELSE STOP
OPEN "", "GRILLESCC" TO F.GRILLESCC ELSE STOP

*****************************************************

I=0
J=0
K=0

W_IndiceListeAidants=0
W_IndiceHold=0

ENR_CONTRAT=""
ENR_DETAILCALCUL=""
ENR_RUBSAISIE=""
ENR_CONVENTIONCOL=""
ENR_HOLD=""
ENR_CIVILAIDANT=""

W_ReqContratPoints=""
W_ReqDetCalcPoints=""

W_AncienCodeAidant=""
W_CodeAidant=""

W_ListeAidantsTraitesExercPrec=""

W_DateDeb=""
W_DateFin=""

W_AncienCodeContrat=""
ENR_CONTRATANCIEN=""

*W_CumulTest1=0
W_TotalBrutGen=0

W_IndPremAvenant=0
W_IndDernAvenant=0

W_PremAvenant="OUI"

******************************************************
* Le tableau suivant va stocker les                  *
* informations des avenants par mois                 *
*                                                    *
* Son architecture est la suivante :                 *
*    Autant de lignes que de mois                    *
*      W_TableauMois<1>                              *
*      W_TableauMois<2>                              *
*      W_TableauMois<...>                            *
*      W_TableauMois<12>                             *
*                                                    *
*    8 colonnes par ligne                            *
*      W_TableauMois<1,0>=Indice de l'avenant        *
*      W_TableauMois<1,1>=Numro de l'avenant        *
*      W_TableauMois<1,2>=Date d'effet de l'avenant  *
*      W_TableauMois<1,3>=Fonction lie  l'avenant  *
*      W_TableauMois<1,4>=Total brut                 *
*      W_TableauMois<1,5>=Total primes et indemnits *
*      W_TableauMois<1,6>=Cumul nb points mois/mois  *
*      W_TableauMois<1,7>=grille                     *
*      W_TableauMois<1,8>=catgorie
******************************************************
W_TableauMois=""

W_TableauMoisExercPrec=""

W_TabTemp=""

*********************************************************
* modif vanessa 29/05/09								*
* demander l'anne et l'entit en paramtre				*
* ATTENTION !!!											*
* SI ON TROUVE UN CONTRAT SUR LA PERIODE MAIS QUE LE 	*
* 1ER AVENANT COMMENCE APRES LA DATE DE FIN DE PERIODE	*
* ALORS BS DU CONTRAT PAS COMPTABILISES					*
*********************************************************

W_Entite=PARAMETRES<1>
W_Annee=PARAMETRES<2>

GOSUB 10
IF W_Annee="FIN" THEN STOP

W_IndiceHold=W_IndiceHold+1
ENR_HOLD<W_IndiceHold>="Code aidant;Code contrat;Code avenant;Nom aidant;Prnom aidant;Poste;Fonction;Date de dbut de contrat;Date de fin de contrat;Date d'effet de l'avenant;Brut indiciaire;Points indiciaires;Primes et indemnits;Primes et indemnits en points;Total points mensuels;Nombre de mois;Total points annuels;Total brut;Total brut anne n-1;Total indiciaire n-1;Total primes et indemnits anne n-1;Total points anne n-1"

EXECUTE 'SSELECT CONTRAT AVEC 2 = "':W_Entite:'" AND AVEC 65 # "O" AND AVEC 7 <= "':W_DateFin:'" AND AVEC 8 = "" OR >= "':W_DateDeb:'" AND AVEC 1 # "02" PAR @ID'
EXECUTE 'SAUVE-LISTE W_ReqContratPoints'
EXECUTE "LISTE W_ReqContratPoints" RETURNING MSGCODE

M=0

IF MSGCODE<1> # 209 THEN
        SELECT F.CONTRAT TO W_ReqContratPoints

	W_Fini="FAUX"
	LOOP
		READNEXT W_CleContrat FROM W_ReqContratPoints ELSE W_Fini="VRAI"
	WHILE W_Fini="FAUX" DO
		READ ENR_CONTRAT FROM F.CONTRAT,W_CleContrat THEN
		     M=M+1
                     IF W_AncienCodeContrat="" THEN W_AncienCodeContrat=W_CleContrat
                     IF ENR_CONTRATANCIEN="" THEN ENR_CONTRATANCIEN=ENR_CONTRAT
		     IF ENR_CONTRAT<8>#"" THEN
		        W_MoisDateSortie=OCONV(ENR_CONTRAT<8>,"D4/")
		        IF OCONV(ENR_CONTRAT<8>,"D4/")[7,4]>W_Annee THEN
		           W_MoisDateSortie=""
                        END ELSE
		            W_MoisDateSortie=W_MoisDateSortie[4,2]
		            IF W_MoisDateSortie[1,1]="0" THEN
                            W_MoisDateSortie = W_MoisDateSortie[2,1]
                            END
                        END
		     END ELSE
		        W_MoisDateSortie=""
		     END

                     W_CodeAidant=W_CleContrat[1,5]
		     IF W_AncienCodeAidant="" THEN
		        W_AncienCodeAidant=W_CleContrat[1,5]
		     END
		     IF W_CodeAidant#W_AncienCodeAidant THEN
                        GOSUB 50
		        *GOSUB 1000
		        *IF W_CumulTest1#W_CumulTest2 THEN
		        *   W_IndiceHold=W_IndiceHold+1
		        *   PRINT W_CumulTest1:";":W_CumulTest2
		        *   ENR_HOLD<W_IndiceHold>=W_CumulTest1:";":W_CumulTest2
                        *   WRITE ENR_HOLD ON F.HOLD, "STATISTIQUES.csv"
                           *DEBUG
		        *END
		        *W_CumulTest1=0
		        W_AncienCodeAidant=W_CodeAidant
		        W_PremAvenant="OUI"
		     END

		     W_TotalContBrut=0
		     W_TotalContPrimesIndemn=0
                     GOSUB 20
                     GOSUB 30
                     GOSUB 45

                     W_AncienCodeContrat=W_CleContrat
                     ENR_CONTRATANCIEN=ENR_CONTRAT
		END
	REPEAT
END
EXECUTE "EFFACER-LISTE W_ReqContratPoints"
GOSUB 50
*GOSUB 55
GOSUB 60

WRITE ENR_HOLD ON F.HOLD, "STATISTIQUES.csv"
W_Sortie= 'Le fichier "STATISTIQUES.csv" a t gnr dans le rpertoire HOLD.'
RETURN
***********************************
* Demande l'anne de l'exercice   *
***********************************
10

*	W_Annee="2008"
*  LOOP

* WHILE W_Annee=""
*        PRINT "Annee de l'exercice (sous la forme AAAA ; taper 'FIN' pour quitter le programme)"
*        INPUT W_Annee
*        IF W_Annee#"FIN" THEN
*           IF LEN(W_Annee)#4 THEN
*              PRINT "Annee incorrecte"
*              W_Annee=""
*           END ELSE
                 W_DateDeb=ICONV("01/01/":W_Annee, "D4/")
                 IF W_DateDeb="" THEN
                    PRINT "Annee incorrecte"
                    W_Annee=""
                 END ELSE
                     W_DateFin=ICONV("31/12/":W_Annee, "D4/")
                 END
*           END
*        END
*  REPEAT

RETURN
***********************************
* Recherche des avenants          *
***********************************
20

  W_TabTemp=""

   * On utilise un tableau pour savoir sur quel mois il y a un avenant
   * et pour viter de traiter plusieurs fois un mois si il y a plusieurs avenants.
   * Si il y a plusieurs avenants sur un mois, on prend en compte le dernier.
   J=0
   LOOP
       J=J+1
   WHILE J<=12
         W_TableauMois<J>=""
   REPEAT

   W_PremierMois="VRAI"

   * On boucle sur les avenants
   I=0
   LOOP
       I=I+1
   WHILE ENR_CONTRAT<14,I> # "" AND ENR_CONTRAT<15,I> <= W_DateFin
         * On ne prend en compte que les avenants actifs sur l'exercice
         * ou les avenants existants avant l'exercice et encore valide durant celui-ci
         *IF (ENR_CONTRAT<15,I> >= W_DateDeb AND ENR_CONTRAT<15,I> <= W_DateFin) OR (ENR_CONTRAT<15,I> < W_DateDeb AND ENR_CONTRAT<15,I+1> >= W_DateDeb) OR (ENR_CONTRAT<15,I> < W_DateDeb AND ENR_CONTRAT<15,I+1> = "") THEN
            IF (ENR_CONTRAT<15,I> <= W_DateFin AND ENR_CONTRAT<15,I+1> >= W_DateDeb) OR (ENR_CONTRAT<15,I> <= W_DateFin AND ENR_CONTRAT<15,I+1> = "" ) OR W_TabTemp<1> THEN
            IF (ENR_CONTRAT<15,I> < W_DateDeb AND ENR_CONTRAT<15,I+1> >= W_DateDeb) OR (ENR_CONTRAT<15,I> < W_DateDeb AND ENR_CONTRAT<15,I+1> = "") THEN
               W_TabTemp<1>=ENR_CONTRAT<14,I>
               W_TabTemp<2>=ENR_CONTRAT<15,I>
               W_TabTemp<3>=ENR_CONTRAT<16,I>
               W_TabTemp<4>=ENR_CONTRAT<20,I>
               W_TabTemp<5>=ENR_CONTRAT<108,I>
            END
            IF (ENR_CONTRAT<15,I> >= W_DateDeb AND ENR_CONTRAT<15,I> <= W_DateFin) OR (ENR_CONTRAT<15,I> < W_DateDeb AND ENR_CONTRAT<15,I+1> = "") THEN
            IF W_TabTemp<1>#""  THEN

               J=0
               LOOP
                   J=J+1
               WHILE J<=12
                   IF J<=W_MoisDateSortie OR W_MoisDateSortie=0 OR W_MoisDateSortie="" THEN
                      W_TableauMois<J,1>=W_TabTemp<1>
                      W_TableauMois<J,2>=W_TabTemp<2>
                      W_TableauMois<J,3>=W_TabTemp<3>
                      W_TableauMois<J,7>=W_TabTemp<4>
                      W_TableauMois<J,8>=W_TabTemp<5>
                   END
               REPEAT
               W_TabTemp<1>=""
               W_TabTemp<2>=""
               W_TabTemp<3>=""
               W_TabTemp<4>=""
               W_TabTemp<5>=""
            END
            * On rcupre le mois de l'avenant
            W_Mois=OCONV(ENR_CONTRAT<15,I>,"D4/")[4,2]

            * On renseigne la tableau des mois.
            * En fait on on garde le numro de l'avenant correspondant au mois.
            * Si il y a ensuite un autre avenant sur ce mois, on crase.
            * Cela permet de ne garder que le dernier avenant d'un mois.
            * De plus, un avenant  une date de dbut (date d'effet) mais de date de fin :
            * un avenant se finit gnralement quand un autre commence.
            * Donc on fait une boucle pour aller du mois de l'avenant en cours
            * de traitement jusqu' dcembre. De ce fait cela permet de renseigner
            * tous les mois, Si un autre avenant commencer aprs, il crasera les donnes
            *  partir de son mois jusqu' dcembre.
            *
            * Par exemple, si un avenant commend en janvier, on renseigne le tableau de
            * janvier  dcembre puisque pour l'instant, on ne sait pas si il y a d'autres avenants
            * donc on considre que celui en cours de traitement est valabe pour toute l'anne.
            * Ensuite, si on trouve un avenant qui commen en mai, on va boucler  partir de mai
            * jusqu' dcembre. Donc, de janvier  avril inclut, on aura le premier avenant
            * ce qui est normal, et  partir de mai, on aura le deuxime avenant, ce qui est normal.
            J=W_Mois-1
            LOOP
                J=J+1
            WHILE J<=12
                  IF J<=W_MoisDateSortie OR W_MoisDateSortie=0 OR W_MoisDateSortie="" THEN
                     W_TableauMois<J,1>=ENR_CONTRAT<14,I>
                     W_TableauMois<J,2>=ENR_CONTRAT<15,I>
                     W_TableauMois<J,3>=ENR_CONTRAT<16,I>
                     W_TableauMois<J,7>=ENR_CONTRAT<20,I>
                     W_TableauMois<J,8>=ENR_CONTRAT<108,I>
                  END
            REPEAT
            END

         END
   REPEAT

   IF ENR_CONTRAT<15,I> > W_DateFin AND W_TabTemp<1>#"" THEN
               J=0
               LOOP
                   J=J+1
               WHILE J<=12
                   IF J<=W_MoisDateSortie OR W_MoisDateSortie=0 OR W_MoisDateSortie="" THEN
                      W_TableauMois<J,1>=W_TabTemp<1>
                      W_TableauMois<J,2>=W_TabTemp<2>
                      W_TableauMois<J,3>=W_TabTemp<3>
                      W_TableauMois<J,7>=W_TabTemp<4>
                      W_TableauMois<J,8>=W_TabTemp<5>
                   END
               REPEAT
               W_TabTemp<1>=""
               W_TabTemp<2>=""
               W_TabTemp<3>=""
               W_TabTemp<4>=""
               W_TabTemp<5>=""
   END

RETURN
***********************************
* Traitement DETAILCALCUL         *
***********************************
30

   * Arriv ici, on a la liste des avenants de l'exercice
   * On va donc maintenant boucler sur le tableau des mois
   * et lire DETAILCALCUL pour les mois ayant un avenant.
   I=0
   LOOP
        I=I+1
   WHILE I<=12
        IF W_TableauMois<I,1>#"" THEN
           IF I<10 THEN
              W_Periode=W_Annee:"0":I
           END ELSE
              W_Periode=W_Annee:I
           END
           READ ENR_DETAILCALCUL FROM F.DETAILCALCUL, W_CleContrat:W_Periode THEN
                 * Total du brut
                 W_TableauMois<I,4>=ENR_DETAILCALCUL<7>

                 * Total primes et indemnits diverses
                 W_TableauMois<I,5>=0
                 J=0
                 LOOP
                     J=J+1
                 WHILE ENR_DETAILCALCUL<2,J>#""
                       READ ENR_RUBSAISIE FROM F.RUBSAISIE, ENR_DETAILCALCUL<2,J> THEN
                            IF ENR_RUBSAISIE<2>="6" THEN
                               W_TableauMois<I,5>=W_TableauMois<I,5>+ENR_DETAILCALCUL<5,J>
                            END
                       END
                 REPEAT

                 * Total mois par mois du nombre de points
                 IF I<10 THEN
                    W_Mois="0":I
                 END ELSE
                    W_Mois=I
                 END
                 *W_ValeurPoint=500
                 W_ANNEEPOINT=W_Annee
                 GOSUB 40
                 IF W_ValeurPoint#0 THEN
                    W_TableauMois<I,6>=(ENR_DETAILCALCUL<7>/W_ValeurPoint)
                 END ELSE
                    W_TableauMois<I,6>=0
                 END
           END
        END
   REPEAT

RETURN
***********************************
* Rcupration de la valeur du    *
* point  un mois donn           *
***********************************
40

   READ ENR_CONVENTIONCOL FROM F.CONVENTIONCOL, ENR_CONTRAT<1> THEN
        * Recherche de la date correspondant au mois voulu
        * Les multivaleurs vont de la date la plus
        * rcente  la plus ancienne
        * Il faut donc chercher la premire date
        * de valeur de point antrieure au mois voulu.
        K=0
        W_DateTrouvee="NON"
        LOOP
             K=K+1
        WHILE ENR_CONVENTIONCOL<9,K>#"" AND W_DateTrouvee="NON"
              W_DateValeurPoint=OCONV(ENR_CONVENTIONCOL<9,K>,"D4/")
*PRINT K			  
*PRINT W_DateValeurPoint
*PRINT W_Annee
*PRINT W_Mois
			  
              * Si l'anne est plus ancienne, il faut prendre la valeur correspondante
              IF W_DateValeurPoint[7,4]<W_ANNEEPOINT THEN
                 W_ValeurPoint=ENR_CONVENTIONCOL<8,K>
                 W_DateTrouvee="OUI"
              END ELSE
                  * Si l'anne est la mme il faut tester les mois
                  IF W_DateValeurPoint[7,4]=W_ANNEEPOINT THEN
                     * Si le mois est plus ancien ou le meme, il faut prendre la valeur correspondante
                     IF W_DateValeurPoint[4,2]<=W_Mois THEN
                        W_ValeurPoint=ENR_CONVENTIONCOL<8,K>
                        W_DateTrouvee="OUI"
                     END
                  END
              END
        REPEAT
   END
*PRINT W_ValeurPoint
*DEBUG
RETURN
***********************************
* On renseigne ENR_HOLD pour      *
* l'exportation future en CSV     *
***********************************
45

   W_BrutIndiciaire=0
   W_TotalBrut=0
   W_TotalPrimesIndemn=0
   W_NbMois=0
   W_PointsIndiciaires=0
   W_NbPoints=0
   W_PrimesIndemn=0
   W_PrimesPoints=0
   W_TotalPointsMensuel=0
   W_TotalAnPoints=0
   W_TotalBrutExer=0

   W_AncienAvenant=""
   W_Avenant=""

   W_DernMoisRens=0
   I=0
   LOOP
       I=I+1
   WHILE I<=13
         IF W_TableauMois<I,1>#"" THEN
            W_Avenant=W_TableauMois<I,1>
            IF W_AncienAvenant="" THEN
               W_AncienAvenant=W_Avenant
            END
            IF W_AncienAvenant#W_Avenant OR I=13 THEN
               GOSUB 46
               W_AncienAvenant=W_Avenant
            END
            W_DernMoisRens=I
            IF I#13 THEN
               W_Grille=W_TableauMois<I,7>
               W_Categ=W_TableauMois<I,8>
               W_TotalBrut=W_TotalBrut+W_TableauMois<I,4>
               W_TotalPrimesIndemn=W_TotalPrimesIndemn+W_TableauMois<I,5>
               W_NbPoints=W_NbPoints+W_TableauMois<I,6>
               W_NbMois=W_NbMois+1
            END
         END
   REPEAT

   IF W_DernMoisRens#0 THEN
      W_AncienAvenant=W_Avenant
      GOSUB 46
   END

RETURN
***********************************
46

               * Rcupration nom et prnom de l'aidant
               READ ENR_CIVILAIDANT FROM F.CIVILAIDANT, W_CleContrat[1,5] THEN
                    W_Nom = ENR_CIVILAIDANT<2>
                    W_Prenom = ENR_CIVILAIDANT<3>
               END ELSE
                   W_Nom=""
                   W_Prenom=""
               END

               * Rcupration de la catgorie
               READ ENR_GRILLESCC FROM F.GRILLESCC, W_Grille THEN
                  W_Categorie=ENR_GRILLESCC<7>
               END ELSE
                  W_Categorie=""
               END
               IF W_Categorie="" THEN W_Categorie=W_Categ

               *W_CumulTest1=W_CumulTest1+W_TotalBrut
               W_TotalBrutGen=W_TotalBrutGen+W_TotalBrut

               W_TotalBrut=W_TotalBrut "MR2"
               W_TotalPrimesIndemn=W_TotalPrimesIndemn "MR2"
               W_NbPoints=W_NbPoints*100 "MR2"


               IF W_NbMois#0 THEN
                  W_BrutIndiciaire=(W_TotalBrut-W_TotalPrimesIndemn)/W_NbMois
               END ELSE
                  W_BrutIndiciaire=0
               END

               W_BrutIndiciaire=W_BrutIndiciaire*100 "MR2"
               IF (W_TotalBrut*W_NbMois) # 0 THEN
                  W_PointsIndiciaires=(W_BrutIndiciaire*W_NbPoints)/(W_TotalBrut)
               END ELSE
                  W_PointsIndiciaires=0
               END
               W_PointsIndiciaires=W_PointsIndiciaires*100 "MR2"
               W_PrimesIndemn=W_TotalPrimesIndemn/W_NbMois
               W_PrimesIndemn=W_PrimesIndemn*100 "MR2"
               IF (W_TotalBrut*W_NbMois) # 0 THEN
                  W_PrimesPoints=(W_PrimesIndemn*W_NbPoints)/(W_TotalBrut)
               END ELSE
                  W_PrimesPoints=0
               END
               W_PrimesPoints=W_PrimesPoints*100 "MR2"
               W_TotalPointsMensuel=W_PointsIndiciaires+W_PrimesPoints
               W_TotalAnPoints=W_TotalPointsMensuel*W_NbMois
               W_TotalBrutExer=W_TotalBrut

               W_IndiceHold=W_IndiceHold+1

               IF W_PremAvenant="OUI" THEN
                  W_IndPremAvenant=W_IndiceHold
                  W_PremAvenant="NON"
               END

               W_IndDernAvenant=W_IndiceHold

               ENR_HOLD<W_IndiceHold>=W_CleContrat[1,5]:";":W_CleContrat:";":W_TableauMois<W_DernMoisRens,1>:";":W_Nom:";":W_Prenom:";":W_Categorie
               ENR_HOLD<W_IndiceHold>=ENR_HOLD<W_IndiceHold>:";":W_TableauMois<W_DernMoisRens,3>:";":OCONV(ENR_CONTRAT<7>,"D4/"):";"
               IF ENR_CONTRAT<8>#"" THEN
                   ENR_HOLD<W_IndiceHold>=ENR_HOLD<W_IndiceHold>:OCONV(ENR_CONTRAT<8>,"D4/")
               END
               ENR_HOLD<W_IndiceHold>=ENR_HOLD<W_IndiceHold>:";":OCONV(W_TableauMois<W_DernMoisRens,2>,"D4/"):";":W_BrutIndiciaire

               ENR_HOLD<W_IndiceHold>=ENR_HOLD<W_IndiceHold>:";":W_PointsIndiciaires:";":W_PrimesIndemn
               ENR_HOLD<W_IndiceHold>=ENR_HOLD<W_IndiceHold>:";":W_PrimesPoints:";":W_TotalPointsMensuel
               ENR_HOLD<W_IndiceHold>=ENR_HOLD<W_IndiceHold>:";":W_NbMois:";":W_TotalAnPoints:";":W_TotalBrutExer
               ENR_HOLD<W_IndiceHold>=ENR_HOLD<W_IndiceHold>:";;;"

               W_BrutIndiciaire=0
               W_TotalBrut=0
               W_TotalPrimesIndemn=0
               W_NbMois=0
               W_PointsIndiciaires=0
               W_NbPoints=0
               W_PrimesIndemn=0
               W_PrimesPoints=0
               W_TotalPointsMensuel=0
               W_TotalAnPoints=0
               W_AncienAvenant=W_Avenant

RETURN
***********************************
* A la rupture d'un aidant, on    *
* traite l'exercice prcdant     *
***********************************
50

      W_IndiceListeAidants=W_IndiceListeAidants+1
      W_ListeAidantsTraitesExercPrec<W_IndiceListeAidants>=W_AncienCodeAidant

      EXECUTE 'SSELECT DETAILCALCUL AVEC CodAssoContratDetailCalcul = "':W_Entite:'" AND AVEC CodeAidantDetailCalcul = "':W_AncienCodeAidant:'" AND AVEC PeriodeDetailCalcul = "':W_Annee-1:']" AND AVEC ConvColContratDetailCalcul # "02" PAR @ID'
      EXECUTE 'SAUVE-LISTE W_ReqDetCalcPoints'
      EXECUTE "LISTE W_ReqDetCalcPoints" RETURNING MSGCODE

      IF MSGCODE<1> # 209 THEN
        SELECT F.DETAILCALCUL TO W_ReqDetCalcPoints
        W_TotalBrutExercPrec=0
        W_TableauMoisExercPrec=""
        W_TotalPrimesIndemnExercPrec=0
        ****************************************
        * Le tableau suivant permet de stocker *
        * le cumul des points mois par mois    *
        ****************************************
        I=0
        LOOP
            I=I+1
        WHILE I<=12
              W_TableauMoisExercPrec<I>=0
        REPEAT

      	W_FinDetailCalcul="FAUX"
      	LOOP
      		READNEXT W_CleDetCalc FROM W_ReqDetCalcPoints ELSE W_FinDetailCalcul="VRAI"
      	WHILE W_FinDetailCalcul="FAUX" DO
      		READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CleDetCalc THEN
      		     W_Mois=W_CleDetCalc[13,2]
      		     IF W_Mois[1,1]=0 THEN W_Mois=W_Mois[2,1]
                     * Total brut de l'exercice prcdent
                     W_TotalBrutExercPrec=W_TotalBrutExercPrec+ENR_DETAILCALCUL<7>
                     * Total primes et indemnits
                     W_TotalPrimesIndemnExercPrec=W_TotalPrimesIndemnExercPrec
                     J=0
                     LOOP
                         J=J+1
                     WHILE ENR_DETAILCALCUL<2,J>#""
                         READ ENR_RUBSAISIE FROM F.RUBSAISIE, ENR_DETAILCALCUL<2,J> THEN
                            IF ENR_RUBSAISIE<2>="6" THEN
                               W_TotalPrimesIndemnExercPrec=W_TotalPrimesIndemnExercPrec+ENR_DETAILCALCUL<5,J>
                            END
                         END
                     REPEAT
                     * Total des points mois par mois
* En dur pour anne 2006 -  remettre en commentaire pour 2007
*                     W_ValeurPoint=511.5
                     W_ANNEEPOINT=W_Annee-1
* En commentaire pour 2006 -  enlever pour 2007
                     GOSUB 40
                     IF W_ValeurPoint#0 THEN
                        W_TableauMoisExercPrec<W_Mois>=W_TableauMoisExercPrec<W_Mois>+(ENR_DETAILCALCUL<7>/W_ValeurPoint)
                     END
      		END
      	REPEAT

               * Rcupration nom et prnom de l'aidant
               *READ ENR_CIVILAIDANT FROM F.CIVILAIDANT, W_AncienCodeAidant THEN
               *     W_Nom = ENR_CIVILAIDANT<2>
               *     W_Prenom = ENR_CIVILAIDANT<3>
               *END ELSE
               *    W_Nom=""
               *    W_Prenom=""
               *END

               * Rcupration de la catgorie
               *READ ENR_GRILLESCC FROM F.GRILLESCC, ENR_CONTRATANCIEN<20,DCOUNT(ENR_CONTRATANCIEN<20>, CHAR(253))> THEN
               *   W_Categorie=ENR_GRILLESCC<7>
               *END ELSE
               *   W_Categorie=""
               *END

               *W_Fonction=ENR_CONTRATANCIEN<6>

               *W_DateEntree=OCONV(ENR_CONTRATANCIEN<7>,"D4/")
               *W_DateSortie=OCONV(ENR_CONTRATANCIEN<8>,"D4/")

      	W_TotalPointsExercPoints=0

      	I=0
      	LOOP
      	    I=I+1
        WHILE I<=12
              W_TotalPointsExercPoints=W_TotalPointsExercPoints+W_TableauMoisExercPrec<I>
        REPEAT

        *W_CumulTest1=W_CumulTest1+W_TotalBrutExercPrec

        W_TotalBrutExercPrec=W_TotalBrutExercPrec "MR2"
        W_TotalPrimesIndemnExercPrec=W_TotalPrimesIndemnExercPrec "MR2"
        W_TotalPointsExercPoints=W_TotalPointsExercPoints*100 "MR2"

        W_TotalBrutSansPrimes=W_TotalBrutExercPrec-W_TotalPrimesIndemnExercPrec

        W_IndiceHold=W_IndPremAvenant
        ENR_HOLD<W_IndiceHold>=ENR_HOLD<W_IndiceHold>[1,LEN(ENR_HOLD<W_IndiceHold>)-3]
        ENR_HOLD<W_IndiceHold>=ENR_HOLD<W_IndiceHold>:";":W_TotalBrutExercPrec:";":W_TotalBrutSansPrimes:";":W_TotalPrimesIndemnExercPrec:";":W_TotalPointsExercPoints
        W_IndiceHold=W_IndDernAvenant
      END
EXECUTE "EFFACER-LISTE W_ReqDetCalcPoints"
RETURN
***********************************
55

    W_CumulTest2=0

      EXECUTE 'SSELECT DETAILCALCUL AVEC CodAssoContratDetailCalcul = "':W_Entite:'" AND AVEC CodeAidantDetailCalcul = "':W_AncienCodeAidant:'" AND AVEC PeriodeDetailCalcul = "':W_Annee-1:']"  AND AVEC ConvColContratDetailCalcul # "02" PAR @ID'
      EXECUTE 'SAUVE-LISTE W_ReqDetCalcPoints'
      EXECUTE "LISTE W_ReqDetCalcPoints" RETURNING MSGCODE

      IF MSGCODE<1> # 209 THEN
        SELECT F.DETAILCALCUL TO W_ReqDetCalcPoints

      	W_FinDetailCalcul="FAUX"
      	LOOP
      		READNEXT W_CleDetCalc FROM W_ReqDetCalcPoints ELSE W_FinDetailCalcul="VRAI"
      	WHILE W_FinDetailCalcul="FAUX" DO
              READ ENR_DETAILCALCUL FROM F.DETAILCALCUL, W_CleDetCalc THEN
                   W_CumulTest2=W_CumulTest2+ENR_DETAILCALCUL<7>
              END
      	REPEAT
      	*W_CumulTest2=W_CumulTest2 "MR2"
      END
	EXECUTE "EFFACER-LISTE W_ReqDetCalcPoints" 
RETURN
***********************************
* Traitement de l'exercice prc.  *
* En fait, le programme dmarre   *
* avec une slection des contrats *
* sur l'exercice. Pour chaque     *
* contrat, on traite l'execercie. *
* Ensuite, aprs avoir trait les *
* contrats d'un aidant sur l'exer-*
* cice, on traite les contrats de *
* cet aidant sur l'exercice-1     *
*                                 *
* Le problme, c'est que l'aidant *
* doit avoir des contrats sur     *
* l'exercice, or un aidant peut   *
* avoir des contrats sur l'exer-  *
* cice-1 mais pas sur l'exercice  *
*                                 *
* On doit donc traiter ces cas    *
* afin de traiter tous les aidants*
* correctement sur l'exercice-1   *
*                                 *
* Il faut cependant viter de     *
* traiter les aidants 2 fois. Donc*
* lors de la premire partie du   *
* prog, un tableau a t renseign*
* avec les codes des aidants      *
* traits. Il faudra donc, pour   *
* chaque aidant, vrifier qu'il   *
* n'a pas dj t trait.        *
***********************************
60

      W_CodeAidant=""
      W_AncienCodeAidant=""
      W_AncienCleDetCalc=""
      ENR_DETAILCALCULANCIEN=""

      EXECUTE 'SSELECT DETAILCALCUL AVEC CodAssoContratDetailCalcul = "':W_Entite:'" AND AVEC PeriodeDetailCalcul = "':W_Annee-1:']" AND AVEC ConvColContratDetailCalcul # "02" PAR @ID'
      EXECUTE 'SAUVE-LISTE W_ReqDetCalcPoints'
      EXECUTE "LISTE W_ReqDetCalcPoints" RETURNING MSGCODE

      IF MSGCODE<1> # 209 THEN
        SELECT F.DETAILCALCUL TO W_ReqDetCalcPoints
        W_TotalBrutExercPrec=0
        W_TotalPrimesIndemnExercPrec=0
        ****************************************
        * Le tableau suivant permet de stocker *
        * le cumul des points mois par mois    *
        ****************************************
        I=0
        LOOP
            I=I+1
        WHILE I<=12
              W_TableauMoisExercPrec<I>=0
        REPEAT

      	W_FinDetailCalcul="FAUX"
      	LOOP
      		READNEXT W_CleDetCalc FROM W_ReqDetCalcPoints ELSE W_FinDetailCalcul="VRAI"
      	WHILE W_FinDetailCalcul="FAUX" DO
      		READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CleDetCalc THEN
          	     W_AidantDejaTraite="NON"
          	     J=0
          	     LOOP
          	         J=J+1
                     WHILE J<W_IndiceListeAidants
                       IF W_ListeAidantsTraitesExercPrec<J> = W_CleDetCalc[1,5] THEN
                         W_AidantDejaTraite="OUI"
                         J=W_IndiceListeAidants
                       END
                     REPEAT
                     IF W_AidantDejaTraite="NON" THEN
                        IF W_AncienCleDetCalc="" THEN W_AncienCleDetCalc=W_CleDetCalc
                        IF ENR_DETAILCALCULANCIEN="" THEN ENR_DETAILCALCULANCIEN=ENR_DETAILCALCUL
      		        W_CodeAidant=W_CleDetCalc[1,5]
      		        IF W_AncienCodeAidant = "" THEN
              	           W_AncienCodeAidant=W_CodeAidant
              	        END
              	        IF W_AncienCodeAidant#W_CodeAidant THEN
                           GOSUB 65
                           W_TableauMoisExercPrec=""
                           W_TotalBrutExercPrec=0
                           W_TotalPrimesIndemnExercPrec=0
                           W_AncienCodeAidant=W_CodeAidant
                        END
                        W_Mois=W_CleDetCalc[13,2]
                        IF W_Mois[1,1]=0 THEN W_Mois=W_Mois[2,1]
                        * Total brut de l'exercice prcdent
                        W_TotalBrutExercPrec=W_TotalBrutExercPrec+ENR_DETAILCALCUL<7>
                        * Total primes et indemnits
                        W_TotalPrimesIndemnExercPrec=W_TotalPrimesIndemnExercPrec
                        J=0
                        LOOP
                            J=J+1
                        WHILE ENR_DETAILCALCUL<2,J>#""
                              READ ENR_RUBSAISIE FROM F.RUBSAISIE, ENR_DETAILCALCUL<2,J> THEN
                                   IF ENR_RUBSAISIE<2>="6" THEN
                                      W_TotalPrimesIndemnExercPrec=W_TotalPrimesIndemnExercPrec+ENR_DETAILCALCUL<5,J>
                                   END
                              END
                        REPEAT
                        * Total des points mois par mois
* En dur pour anne 2006 -  remettre en commentaire pour 2007
*                        W_ValeurPoint=511.5
                        W_ANNEEPOINT=W_Annee-1
* En commentaire pour 2006 -  enlever pour 2007
                       GOSUB 40
                        IF W_ValeurPoint#0 THEN
                           W_TableauMoisExercPrec<W_Mois>=W_TableauMoisExercPrec<W_Mois>+(ENR_DETAILCALCUL<7>/W_ValeurPoint)
                        END ELSE
                           W_TableauMoisExercPrec<W_Mois>=0
                        END
                        W_AncienCleDetCalc=W_CleDetCalc
                        ENR_DETAILCALCULANCIEN=ENR_DETAILCALCUL
                     END
      		END
      	REPEAT
        W_AncienCodeAidant=W_CodeAidant
        W_AidantDejaTraite="NON"
  	J=0
  	LOOP
  	    J=J+1
        WHILE J<W_IndiceListeAidants
            IF W_ListeAidantsTraitesExercPrec<J> = W_CodeAidant THEN
               W_AidantDejaTraite="OUI"
               J=W_IndiceListeAidants
            END
        REPEAT
        IF W_AidantDejaTraite="NON" THEN 
           GOSUB 65
        END
      END
 EXECUTE "EFFACER-LISTE W_ReqDetCalcPoints"
RETURN
*************************************
65

       	W_TotalPointsExercPoints=0

      	I=0
      	LOOP
      	    I=I+1
        WHILE I<=12
              W_TotalPointsExercPoints=W_TotalPointsExercPoints+W_TableauMoisExercPrec<I>
        REPEAT

        READ ENR_CONTRAT FROM F.CONTRAT, W_AncienCleDetCalc[1,8] THEN
               * Rcupration nom et prnom de l'aidant
               READ ENR_CIVILAIDANT FROM F.CIVILAIDANT, W_AncienCleDetCalc[1,5] THEN
                    W_Nom = ENR_CIVILAIDANT<2>
                    W_Prenom = ENR_CIVILAIDANT<3>
               END ELSE
                   W_Nom=""
                   W_Prenom=""
               END

               W_DateEntree=OCONV(ENR_CONTRAT<7>,"D4/")
               W_DateSortie=OCONV(ENR_CONTRAT<8>,"D4/")

               * Rcupration de la fonction
               W_Fonction=""
               IF W_AncienCleDetCalc[13,2] = "12" THEN
                   W_AnneeCompare=W_AncienCleDetCalc[9,4]+1
                   W_DateCompare=ICONV("01/01/":W_AnneeCompare,"D4/")
                   W_DateCompare=W_DateCompare-1
               END ELSE
                   W_MoisCompare=W_AncienCleDetCalc[13,2]+1
                   IF LEN(W_MoisCompare)=1 THEN W_MoisCompare="0":W_MoisCompare
                   W_DateCompare=ICONV("01/":W_MoisCompare:"/":W_AncienCleDetCalc[9,4],"D4/")
                   W_DateCompare=W_DateCompare-1
               END
               I=DCOUNT(ENR_CONTRAT<15>, CHAR(253))+1
               LOOP
                   I=I-1
               WHILE I>=1
                   IF ENR_CONTRAT<15,I><=W_DateCompare THEN
                      W_Fonction=ENR_CONTRAT<16,I>
						READ ENR_GRILLESCC FROM F.GRILLESCC, ENR_CONTRAT<20,I> THEN
							W_Categorie=ENR_GRILLESCC<7>
						END ELSE
							W_Categorie=""
						END
                      I=1
                   END
               REPEAT

			  *Modification mikael suite ticket 5750 le 17/04/2014
			  *mise en commentaire pour integrer dans la loop ci dessus
               * Rcupration de la catgorie
               *READ ENR_GRILLESCC FROM F.GRILLESCC, ENR_CONTRAT<20,DCOUNT(ENR_CONTRAT<20>, CHAR(253))> THEN
               *   W_Categorie=ENR_GRILLESCC<7>
               *END ELSE
               *   W_Categorie=""
               *END
				*Fin modificaiton mikael le 17/04/2014
               IF W_Categorie="" THEN W_Categorie=ENR_CONTRAT<108,DCOUNT(ENR_CONTRAT<108>, CHAR(253))>
*                  IF ENR_CONTRAT<20,DCOUNT(ENR_CONTRAT<20>, CHAR(253))> = "01001" THEN
*                     W_Categorie="A"
*                  END ELSE
*                      IF ENR_CONTRAT<20,DCOUNT(ENR_CONTRAT<20>, CHAR(253))> = "01002" THEN
*                          W_Categorie="C"
*                      END ELSE
*                          W_Categorie="E"
*                      END
*                  END
*               END

        END ELSE
           W_Nom=""
           W_Prenom=""
           W_Categorie=""
           W_Categ=""
           W_Grille=""
           W_Fonction=""
           W_DateEntree=""
           W_DateSortie=""
        END

        W_TotalBrutExercPrec=W_TotalBrutExercPrec "MR2"
        W_TotalPrimesIndemnExercPrec=W_TotalPrimesIndemnExercPrec "MR2"
        W_TotalPointsExercPoints=W_TotalPointsExercPoints*100 "MR2"

        W_TotalBrutSansPrimes=W_TotalBrutExercPrec-W_TotalPrimesIndemnExercPrec

        W_IndiceHold=W_IndiceHold+1
        ENR_HOLD<W_IndiceHold>=W_AncienCleDetCalc[1,5]:";":W_AncienCleDetCalc[1,8]:";;":W_Nom:";":W_Prenom:";":W_Categorie:";":W_Fonction
        ENR_HOLD<W_IndiceHold>=ENR_HOLD<W_IndiceHold>:";":OCONV(W_DateEntree,"D4/"):";":OCONV(W_DateSortie,"D4/")
        ENR_HOLD<W_IndiceHold>=ENR_HOLD<W_IndiceHold>:";;;;;;;;;;":W_TotalBrutExercPrec:";":W_TotalBrutSansPrimes:";":W_TotalPrimesIndemnExercPrec:";":W_TotalPointsExercPoints

RETURN
************************
****************************
****************************
1000

    W_CumulTest2=0

      EXECUTE 'SSELECT DETAILCALCUL AVEC CodAssoContratDetailCalcul = "':W_Entite:'" AND AVEC CodeAidantDetailCalcul = "':W_AncienCodeAidant:'" AND AVEC PeriodeDetailCalcul = "2003]" OR = "2004]" AND AVEC ConvColContratDetailCalcul # "02" PAR @ID'
      EXECUTE 'SAUVE-LISTE W_ReqDetCalcPoints'
      EXECUTE "LISTE W_ReqDetCalcPoints" RETURNING MSGCODE

      IF MSGCODE<1> # 209 THEN
        SELECT F.DETAILCALCUL TO W_ReqDetCalcPoints

      	W_FinDetailCalcul="FAUX"
      	LOOP
      		READNEXT W_CleDetCalc FROM W_ReqDetCalcPoints ELSE W_FinDetailCalcul="VRAI"
      	WHILE W_FinDetailCalcul="FAUX" DO
              READ ENR_DETAILCALCUL FROM F.DETAILCALCUL, W_CleDetCalc THEN
                   W_CumulTest2=W_CumulTest2+ENR_DETAILCALCUL<7>
              END
      	REPEAT
      	*W_CumulTest2=W_CumulTest2 "MR2"
      END
	  EXECUTE "EFFACER-LISTE W_ReqDetCalcPoints"
RETURN
