**********************************************************
*  gnration du fichier ABSENCESAIDANT  partir 
*  du fichier des absences du logiciel GARDE
*  Vanessa
*  Aot 1999
**********************************************************
* DIFFERENTES PROCEDURES

*   50  -> Charge la table des contrats
*  100  -> Remplit le fichier ABSENCESAIDANT  partir d'ABSENCE
*  150  -> Remplit les att 13 16 17 du fichier ABSENCESAIDANT
*  200  -> Remplit l'att 18 d'ABSENCESAIDANT
*  300  -> Remplit les att 14 15 de ABSENCESAIDANT
*  500  -> Correspondance des motifs d'absence
*  600  -> Cration du Voc
*  700  -> Suppression du Voc
*  800  -> Rcupration parametres
**********************************************************

EXECUTE 'DATE.FORMAT'

* Rcupration des paramtres
GOSUB 800

* Cration du voc
GOSUB 600

* Ouvertures des fichiers

OPEN "","ABSENCE" TO F.ABSENCE ELSE STOP ;* en lecture
OPEN "","ABSENCESAIDANT" TO F.ABSENCESAIDANT ELSE STOP ;* en lecture criture
OPEN "","GAD" TO F.GAD ELSE STOP ;* en lecture
OPEN "","CONTRAT" TO F.CONTRAT ELSE STOP ;* en lecture
OPEN "","CONVENTIONCOL" TO F.CONVENTIONCOL ELSE STOP ;* en lecture
OPEN "","CONTRATSPREV" TO F.CONTRATSPREV ELSE STOP ;* en lecture
OPEN "","CUMULS" TO F.CUMULS ELSE STOP ;* en lecture
OPEN "","TEMPAIDE" TO F.TEMPAIDE ELSE STOP ;* en lecture
OPEN "","CIVILAIDE" TO F.CIVILAIDE ELSE STOP ;* en lecture
***********************************************************
* initialisation des variables

ENR_ABSENCESAIDANT = ""
ENR_CONTRAT = ""
W_AncCodeAide = ""
*********************************************************
* PROGRAMME PRINCIPAL

   EXECUTE 'SSELECT ABSENCE'
   EXECUTE 'SAUVE-LISTE W_RequeteAbsGarde'
   EXECUTE "LISTE W_RequeteAbsGarde" RETURNING MSGCODE

   IF MSGCODE<1> = 209 THEN
      STOP
   END ELSE
      SELECT F.ABSENCE TO W_RequeteAbsGarde
      W_Fini = "FAUX"
      LOOP
         READNEXT W_CleAbs FROM W_RequeteAbsGarde ELSE W_Fini = "VRAI"
      WHILE W_Fini = "FAUX" DO
         READ ENR_ABSENCE FROM F.ABSENCE,W_CleAbs ELSE ENR_ABSENCE=""

         GOSUB 100

      REPEAT
   END

   * Suppression du voc
   GOSUB 700

STOP

*********************************************************
*  Remplit le fichier ABSENCESAIDANT  partir d'ABSENCE

100

   W_Count = DCOUNT(ENR_ABSENCE<4>,CHAR(253))

   READ ENR_GAD FROM F.GAD,W_CleAbs THEN
      W_CodeCivilAidant = ENR_GAD<60>
   END ELSE
      RETURN
   END

   FOR i = 1 TO W_Count

      W_AncCodeAbs = ENR_ABSENCE<6,i>

      GOSUB 500
      W_CleAbsencesAidant = W_CodeCivilAidant:W_NouvCodeAbs:ENR_ABSENCE<4,i>

      * charge la table des contrats
      GOSUB 50

      * lecture de l'article dans ABSENCESAIDANT
      READ ENR_ABSENCESAIDANT FROM F.ABSENCESAIDANT,W_CleAbsencesAidant THEN
         W_Existe = "VRAI"
         GOSUB 150
              
      END ELSE

         ENR_ABSENCESAIDANT = ""
         IF W_AncCodeAbs = "6" OR W_AncCodeAbs = "7" OR W_AncCodeAbs = "9" OR  W_AncCodeAbs = "10" THEN
            ENR_ABSENCESAIDANT = REPLACE(ENR_ABSENCESAIDANT,1;"1")
            ENR_ABSENCESAIDANT = REPLACE(ENR_ABSENCESAIDANT,3;"2")
         END
         ENR_ABSENCESAIDANT = REPLACE(ENR_ABSENCESAIDANT,2;ENR_ABSENCE<5,i>)
         IF W_AncCodeAbs = "1" OR W_AncCodeAbs = "2" OR W_AncCodeAbs = "3" OR W_AncCodeAbs = "4" OR W_AncCodeAbs = "5" OR W_AncCodeAbs = "8" THEN
            ENR_ABSENCESAIDANT = REPLACE(ENR_ABSENCESAIDANT,9;ENR_ABSENCE<4,i>-1)
            ENR_ABSENCESAIDANT = REPLACE(ENR_ABSENCESAIDANT,10;ENR_ABSENCE<5,i>+1)
         END
         ENR_ABSENCESAIDANT = REPLACE(ENR_ABSENCESAIDANT,11;"1")
         ENR_ABSENCESAIDANT = REPLACE(ENR_ABSENCESAIDANT,12;"1")
         W_Existe = "FAUX"
         GOSUB 150
      END
      WRITE ENR_ABSENCESAIDANT ON F.ABSENCESAIDANT,W_CleAbsencesAidant

   NEXT i

RETURN

*********************************************************
*  Charge la table des contrats

50

   * Lecture des contrats de travail
   W_End = "FAUX"
   j=1
   W_Rang = 1
   W_RequeteContrat = ""

   LOOP
      j=j "R%3"
      W_CleContrat = W_CodeCivilAidant:j

      READ ENR_CONTRAT FROM F.CONTRAT,W_CleContrat ELSE W_End = "VRAI"
   WHILE W_End = "FAUX" DO
      IF ENR_CONTRAT<1> = "02" AND ENR_CONTRAT<7> <= ENR_ABSENCE<4,i> THEN
       IF ENR_CONTRAT<8> # "" AND ENR_CONTRAT<8> >= ENR_ABSENCE<4,i> THEN
         W_RequeteContrat = REPLACE(W_RequeteContrat,W_Rang,1;W_CleContrat)
         W_RequeteContrat = REPLACE(W_RequeteContrat,W_Rang,2;ENR_CONTRAT<7>)
         W_RequeteContrat = REPLACE(W_RequeteContrat,W_Rang,3;ENR_CONTRAT<3>)
         W_Rang = W_Rang + 1
       END ELSE
        IF ENR_CONTRAT<8> = "" THEN
         W_RequeteContrat = REPLACE(W_RequeteContrat,W_Rang,1;W_CleContrat)
         W_RequeteContrat = REPLACE(W_RequeteContrat,W_Rang,2;ENR_CONTRAT<7>)
         W_RequeteContrat = REPLACE(W_RequeteContrat,W_Rang,3;ENR_CONTRAT<3>)
         W_Rang = W_Rang + 1
        END
       END
      END
      j=j+1
   REPEAT

RETURN

*********************************************************
*  Remplit les att 13 16 17 18 du fichier ABSENCESAIDANT

150

   IF W_Existe = "FAUX" THEN
      W_Indice = 1
   END ELSE
      * cherche le nombre de MV dj existante en att 13
      W_Indice = DCOUNT(ENR_ABSENCESAIDANT<13>,CHAR(253)) + 1
   END

   * Recherche la priode de debut d'absence
   W_Mois = OCONV(ENR_ABSENCE<4,i>,"D4/")
   W_Mois = W_Mois[4,2]
   W_An = OCONV(ENR_ABSENCE<4,i>,"D4/")
   W_An = W_An[9,2]
   W_PeriodeAbs = W_An:W_Mois

   W_CodeAidant = W_CleAbs

   * Compte le nombre de contrat dans la table
   W_CountContrat = DCOUNT(W_RequeteContrat,CHAR(254))

   FOR j = 1 TO W_CountContrat

      ENR_ABSENCESAIDANT = REPLACE(ENR_ABSENCESAIDANT,13,W_Indice;W_RequeteContrat<j,3>)
      ENR_ABSENCESAIDANT = REPLACE(ENR_ABSENCESAIDANT,14,W_Indice;"0")
      ENR_ABSENCESAIDANT = REPLACE(ENR_ABSENCESAIDANT,15,W_Indice;"0")
      ENR_ABSENCESAIDANT = REPLACE(ENR_ABSENCESAIDANT,16,W_Indice;"NON")
      ENR_ABSENCESAIDANT = REPLACE(ENR_ABSENCESAIDANT,17,W_Indice;W_RequeteContrat<j,1>)
      IF W_AncCodeAbs = "1" OR W_AncCodeAbs = "2" OR W_AncCodeAbs = "3" OR W_AncCodeAbs = "4" OR W_AncCodeAbs = "8" THEN
         GOSUB 300
      END
      W_Indice = W_Indice + 1

   NEXT j
   
   READ ENR_CONVENTIONCOL FROM F.CONVENTIONCOL,"02" ELSE STOP
   IF ENR_CONVENTIONCOL<15> = "1" THEN
      GOSUB 200
   END

RETURN

*********************************************************
*  Remplit l'att 18 de ABSENCESAIDANT

200

   * Lecture des contrats de travail
   W_Fin = "FAUX"
   k=1
   W_Ind = 1

   LOOP
      W_CleContratTerm = W_CodeCivilAidant:k "R%3"

      READ ENR_CONTRAT FROM F.CONTRAT,W_CleContratTerm ELSE W_Fin = "VRAI"
   WHILE W_Fin = "FAUX" DO
      READ ENR_CONTRATSPREV FROM F.CONTRATSPREV,ENR_CONTRAT<29> THEN
         W_NbreMois = ENR_CONTRATSPREV<20>
      END ELSE
         W_NbreMois = 3
      END
      IF ENR_CONTRAT<1> = "02" AND ENR_CONTRAT<8> <= ENR_ABSENCE<4,i>-1 AND ENR_CONTRAT<8> # "" THEN

         * Recherche la date de dbut et de fin de la priode des x mois prcdant le mois de date de dbut d'absence
         W_MoisDebAbs = OCONV(ENR_ABSENCE<4,i>,"D4/")
         W_AnDebAbs = W_MoisDebAbs
         W_MoisDebAbs = W_MoisDebAbs[4,2]
         W_AnDebAbs =W_AnDebAbs[7,4]

         W_DatFinPeriode = ICONV("01/":W_MoisDebAbs:"/":W_AnDebAbs,"D4/")-1
         W_MoisDebPeriode = W_MoisDebAbs - W_NbreMois
         W_AnDebPeriode = W_AnDebAbs

         IF W_MoisDebPeriode <= 0 THEN
            W_MoisDebPeriode = W_MoisDebPeriode + 12
            W_AnDebPeriode = W_AnDebPeriode - 1
         END
         W_MoisDebPeriode=W_MoisDebPeriode "R%2"
         W_DatDebPeriode = ICONV("01/":W_MoisDebPeriode:"/":W_AnDebPeriode,"D4/")

         IF (ENR_CONTRAT<7> <= W_DatFinPeriode AND ENR_CONTRAT<8> >= W_DatDebPeriode AND ENR_CONTRAT<8> # "") OR (ENR_CONTRAT<7> <= W_DatFinPeriode AND ENR_CONTRAT<8> = "") THEN
            ENR_ABSENCESAIDANT = REPLACE(ENR_ABSENCESAIDANT,18,W_Ind;W_CleContratTerm)
            W_Ind = W_Ind + 1
         END

      END
      k=k+1
   REPEAT

RETURN

*********************************************************
*  Remplit les att 14 15 du fichier ABSENCESAIDANT

300

   W_MoyMont = 0
   W_HeureBrute = 0
   W_Passe = 0

   * Recherche la priode de debut de contrat
   W_Mois = OCONV(W_RequeteContrat<j,2>,"D4/")
   W_Mois =W_Mois[4,2]
   W_An = OCONV(W_RequeteContrat<j,2>,"D4/")
   W_An =W_An[9,2]
   W_PeriodeCont = W_An:W_Mois

   W_PeriodeCumul = W_PeriodeAbs

   * recherche le ou les anciens codes aid
   READ ENR_CIVILAIDE FROM F.CIVILAIDE,W_RequeteContrat<j,3> ELSE ENR_CIVILAIDE=""
   W_NomAide = ENR_CIVILAIDE<2>


   W_Ecrit=0
   READ ENR_TEMPAIDE FROM F.TEMPAIDE,W_NomAide ELSE ENR_TEMPAIDE=""
   W_CountTempAide = DCOUNT(ENR_TEMPAIDE<1>,CHAR(253))
   FOR l = 1 TO W_CountTempAide
      IF ENR_TEMPAIDE<1,l> = W_RequeteContrat<j,3> THEN
         m=1
         LOOP
            W_Tampon=ENR_TEMPAIDE<6,l,m>
         UNTIL W_Tampon = "" DO
           IF W_Tampon[1,1] = "G" THEN
     		  W_Ecrit=W_Ecrit+1
              W_Temp=ENR_TEMPAIDE<6,l,m>
              W_AncCodeAide = REPLACE(W_AncCodeAide,W_Ecrit,1;W_Temp[2,4])
           END
           m=m+1
         REPEAT
      END
   NEXT l

   W_CountAncCode = DCOUNT(W_AncCodeAide,CHAR(254))

   FOR l = 1 TO 3

      W_PeriodeCumul = W_PeriodeCumul - 1
      W_PeriodeCumul = W_PeriodeCumul "R%4"
      IF W_PeriodeCumul[3,2] = "00" THEN
         IF W_PeriodeCumul[1,2] = "00" THEN
            W_PeriodeCumul = "9912"
         END ELSE
            W_PeriodeCumul = W_PeriodeCumul[1,2]-1:"12"
            W_PeriodeCumul = W_PeriodeCumul "R%4"
         END
      END

      IF W_PeriodeCumul<1000 THEN
	 W_PeriodeCumul2="20":W_PeriodeCumul
      END ELSE
         W_PeriodeCumul2="19":W_PeriodeCumul
      END
      IF W_PeriodeCont<1000 THEN
	 W_PeriodeCont2="20":W_PeriodeCont
      END ELSE
	 W_PeriodeCont2="19":W_PeriodeCont
      END

      IF W_PeriodeCumul2 < W_PeriodeCont2 THEN
         NULL
      END ELSE
       FOR m = 1 TO W_CountAncCode
         W_CleCumul = W_CodeAidant:W_AncCodeAide<m>:W_PeriodeCumul
         READ ENR_CUMULS FROM F.CUMULS,W_CleCumul THEN
            W_MoyMont = W_MoyMont + ENR_CUMULS<10>
            W_HeureBrute = W_HeureBrute + ENR_CUMULS<9>
            W_Passe = W_Passe + 1
         END ELSE
            ENR_CUMULS=""
         END 
       NEXT m
      END

   NEXT l

   IF W_Passe > 0 THEN
      IF W_Passe > 3 THEN
         W_Passe = 3
      END

      ENR_ABSENCESAIDANT =REPLACE(ENR_ABSENCESAIDANT,14,W_Indice;INT((W_MoyMont/W_Passe)+(1/2)))
      ENR_ABSENCESAIDANT =REPLACE(ENR_ABSENCESAIDANT,15,W_Indice;INT((W_HeureBrute/W_Passe)+(1/2)))
   END ELSE
      ENR_ABSENCESAIDANT =REPLACE(ENR_ABSENCESAIDANT,14,W_Indice;"0")
      ENR_ABSENCESAIDANT =REPLACE(ENR_ABSENCESAIDANT,15,W_Indice;"0")
   END

RETURN

*********************************************************
*  Correspondance des motifs d'absence

500

   BEGIN CASE 
      CASE W_AncCodeAbs = "1"
         W_NouvCodeAbs = "01"
      CASE W_AncCodeAbs = "2"
         W_NouvCodeAbs = "04"
      CASE W_AncCodeAbs = "3"
         W_NouvCodeAbs = "05"
      CASE W_AncCodeAbs = "4"
         W_NouvCodeAbs = "06"
      CASE W_AncCodeAbs = "5"
         W_NouvCodeAbs = "02"
      CASE W_AncCodeAbs = "6"
         W_NouvCodeAbs = "12"
      CASE W_AncCodeAbs = "7"
         W_NouvCodeAbs = "07"
      CASE W_AncCodeAbs = "8"
         W_NouvCodeAbs = "03"
      CASE W_AncCodeAbs = "9"
         W_NouvCodeAbs = "17"
      CASE W_AncCodeAbs = "10"
         W_NouvCodeAbs = "13"
   END CASE

RETURN

*************************************************************
* Cration du voc                                              

600

	OPEN "","VOC" TO F.VOC ELSE STOP

	ENR_VOC=""
	ENR_VOC=REPLACE(ENR_VOC,1;"F")
	ENR_VOC=REPLACE(ENR_VOC,2;"D:\TRANSFERT\":W_MODULE:"\ABSENCE")
	ENR_VOC=REPLACE(ENR_VOC,3;"D:\TRANSFERT\":W_MODULE:"\D_ABSENCE")
	WRITE ENR_VOC ON F.VOC,"ABSENCE"

	ENR_VOC=""
	ENR_VOC=REPLACE(ENR_VOC,1;"F")
	ENR_VOC=REPLACE(ENR_VOC,2;"D:\TRANSFERT\":W_MODULE:"\GAD")
	ENR_VOC=REPLACE(ENR_VOC,3;"D:\TRANSFERT\":W_MODULE:"\D_GAD")
	WRITE ENR_VOC ON F.VOC,"GAD"

	ENR_VOC=""
	ENR_VOC=REPLACE(ENR_VOC,1;"F")
	ENR_VOC=REPLACE(ENR_VOC,2;"D:\TRANSFERT\":W_MODULE:"\CUMULS")
	ENR_VOC=REPLACE(ENR_VOC,3;"D:\TRANSFERT\":W_MODULE:"\D_CUMULS")
	WRITE ENR_VOC ON F.VOC,"CUMULS"

RETURN

*************************************************************
* Suppression du voc                                           

700 

	DELETE F.VOC,"ABSENCE"
	DELETE F.VOC,"GAD"
	DELETE F.VOC,"CUMULS"

RETURN

*********************************************************
* Rcupration des paramtres				

800 

	PROCREAD MODULE ELSE STOP
	W_MODULE=FIELD(MODULE," ",2)

RETURN