
PRINT "Anne  traiter (AAAA):":
INPUT W_PeriodeTrait

W_PeriodeTrait=ICONV("31/12/":W_PeriodeTrait,"D4/")
DateFin=W_PeriodeTrait

LISTCONTRAT=""
LISTABSAIDANT=""
W_JourAnciennte=0
W_DroitIndem="FAUX"
W_DateFinCalcul=""
W_Temp=""
W_TotalPaie=0
W_Paie=0
W_Paie3Mois=0
W_Paie12Mois=0
W_NbMois=0
W_NOTIF="FAUX"

W_AnneeFin=""
W_AnneeFaite=""
W_MoisFin=""
W_MoisFait=""
W_JourFin=""
W_JourFait=""
W_DateDeFin=""
W_Fini="FAUX"
W_CountMoisActif=0
TotalMontIndemnite=0

EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
OPEN "","DETAILCALCUL" TO F.DETAILCALCUL ELSE STOP
OPEN "","CONTRAT" TO F.CONTRAT ELSE STOP
OPEN "","ABSENCESAIDANT" TO F.ABSENCESAIDANT ELSE STOP
OPEN "","CIVILAIDANT" TO F.CIVILAIDANT ELSE STOP
OPEN "","CONSTANTESPAIE" TO F.CONSTANTESPAIE ELSE STOP

READ ENR_CONSTANTESPAIE FROM F.CONSTANTESPAIE,"1" ELSE STOP

LicencRetraite="R"
RapportEuro=ENR_CONSTANTESPAIE<7> / 100000
DateEuro=OCONV(ENR_CONSTANTESPAIE<9>,"D4/")
DateEuroAAAAMM=DateEuro[7,4]:DateEuro[4,2]

EXECUTE 'SELECT CONTRAT AVEC 65 # "O" AND AVEC 1 # "02" AND AVEC 7 <= "':W_PeriodeTrait:'" AND AVEC 8 >= "':W_PeriodeTrait:'" OR = "" PAR NomPrenomAidantContrat PAR @ID'
EXECUTE 'SAUVE-LISTE LISTCONTRAT'
EXECUTE 'LISTE LISTCONTRAT' RETURNING W_MSGBOX
SELECT F.CONTRAT TO LISTCONTRAT

EXECUTE 'SETPTR 0,,,,,1, "MODE=RAW",DEST \\SERVEURINF\MATRICEPSON,NOHEAD,NOFMT,EJECT,COPIES 1,BRIEF'
PRINTER ON

W_FiniContrat="FAUX"
LOOP
   READNEXT CodeContrat FROM LISTCONTRAT ELSE W_FiniContrat="VRAI"
WHILE W_FiniContrat = "FAUX"
   MontIndemnite=0
   W_TotalPaie=0
   GOSUB 10
REPEAT
  PRINT ""
  PRINT "Total     : ":TotalMontIndemnite/100

STOP

*************************************************************************
* Corps du prog
10
READ ENR_CONTRAT FROM F.CONTRAT,CodeContrat ELSE PRINT "Contrat"
READ ENR_CIVILAIDANT FROM F.CIVILAIDANT,CodeContrat[1,5] ELSE PRINT "Civilaidant"
CodeConvCol=ENR_CONTRAT<1>
DateDeb=ENR_CONTRAT<7>
NbJourSusp=ENR_CONTRAT<70>

 * Retraite

   IF NbJourSusp # "" THEN
      W_DateDeFin=DateFin-NbJourSusp
   END ELSE
      W_DateDeFin=DateFin
   END

   W_Date=W_DateDeFin

   * Calcul les annes ralises
   GOSUB 400

   W_DateFinCalcul=OCONV(DateFin,"D4/")
   W_Mois=W_DateFinCalcul[4,2]-1
   W_Mois=W_Mois "R%2"
   W_Annee=W_DateFinCalcul[7,4]
   IF W_Mois="00" THEN
      W_Annee=W_Annee-1
      W_Mois=12
   END


   * Calcul la periode d'absence
   GOSUB 500

      FOR i=1 TO 12
         IF i=4 THEN
            W_Paie3Mois=W_TotalPaie
         END
         IF W_Mois=0 THEN
            W_Annee=W_Annee-1
            W_Mois=12
         END
         READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,CodeContrat:W_Annee:W_Mois THEN
            IF DateEuroAAAAMM > W_Annee:W_Mois THEN
               ENR_DETAILCALCUL<7>=INT(ENR_DETAILCALCUL<7> / RapportEuro + 1/2)
            END
            W_TotalPaie=W_TotalPaie+ENR_DETAILCALCUL<7>
            W_DeduitCompl=0
            j=1
            LOOP
            WHILE ENR_DETAILCALCUL<2,j> # "" DO
               IF ENR_DETAILCALCUL<2,j> = "807" OR ENR_DETAILCALCUL<2,j> = "808" THEN
                  IF DateEuroAAAAMM > W_Annee:W_Mois THEN
                     ENR_DETAILCALCUL<5,j>=INT(ENR_DETAILCALCUL<5,j> / RapportEuro + 1/2)
                  END
                  W_DeduitCompl=W_DeduitCompl + ENR_DETAILCALCUL<5,j>
               END
               j=j+1
            REPEAT
            W_TotalPaie=W_TotalPaie-W_DeduitCompl
            W_CountMoisActif=W_CountMoisActif+1
         END
         W_Mois=W_Mois-1
         W_Mois=W_Mois "R%2"
      NEXT i

      IF W_JourAbs3=0 THEN  
         W_Paie3Mois=INT(W_Paie3Mois/3+1/2)
      END ELSE
          W_Paie3Mois=W_Paie3Mois/(90-W_JourAbs3)
          W_Paie3Mois=INT(W_Paie3Mois*30+1/2)
      END
      IF W_JourAbs12=0 THEN
         W_Paie12Mois=INT(W_TotalPaie/12+1/2)
      END ELSE
         W_Paie12Mois=W_Paie12Mois/(360-W_JourAbs12)
         W_Paie12Mois=INT(W_Paie12Mois*30+1/2)
      END

      IF W_Paie12Mois>W_Paie3Mois THEN
         W_Paie=W_Paie12Mois
      END ELSE
         W_Paie=W_Paie3Mois
      END

      IF W_Paie=0 THEN
         W_Paie=W_PaieAbs
      END

   * Dispatche dans les diffrentes conventions
   GOSUB 310
   IF MontIndemnite # 0 THEN

      MontIndemnite=INT(MontIndemnite+1/2)
      TotalMontIndemnite=TotalMontIndemnite + MontIndemnite

      MontIndemnite=MontIndemnite/100
      W_LenIndemnite=LEN(MontIndemnite)

      W_NomPrenom=ENR_CIVILAIDANT<2>:" ":ENR_CIVILAIDANT<3>
      W_NomPrenom=W_NomPrenom[1,35]
      W_NomPrenom=W_NomPrenom "L#35"

      PRINT W_NomPrenom:SPACE(10-W_LenIndemnite):MontIndemnite
   END

RETURN


************
* Retraite *
************

******************************************************************************
* Code du travail a domicile pour les dparts en retraite, Employe de maison *
******************************************************************************
200
   BEGIN CASE
      CASE W_AnneeFaite>10 AND W_AnneeFaite<15
         MontIndemnite=W_Paie*1/2
      CASE W_AnneeFaite>14 AND W_AnneeFaite<20
         MontIndemnite=W_Paie
      CASE W_AnneeFaite>19 AND W_AnneeFaite<30
         MontIndemnite=W_Paie*W_Paie/2
      CASE W_AnneeFaite>29
         MontIndemnite=W_Paie*2
   END CASE
RETURN

*****************************************************************************
* Convention ADMR pour les dparts en retraite                              *
*****************************************************************************
210
   IF W_AnneeFaite > 9 THEN
      W_Temp=W_AnneeFaite/10
      MontIndemnite=W_Paie*W_Temp+W_MoisFait/120*W_Paie 
      MontIndemnite=INT(MontIndemnite + 1/2)
   END
RETURN

*****************************************************************************
* Convention Famille Rurale pour les dparts en retraite                    *
*****************************************************************************
220
   MontIndemnite=W_Paie/10*W_AnneeFaite
RETURN

*****************************************************************************
* Convention Aide a domicile pour les dparts en retraite                   *
*****************************************************************************
230
   BEGIN CASE
      CASE W_AnneeFaite>4 AND W_AnneeFaite<10
         MontIndemnite=W_Paie*1/4
      CASE W_AnneeFaite>9 AND W_AnneeFaite<15
         MontIndemnite=W_Paie*1/2
      CASE W_AnneeFaite>14 AND W_AnneeFaite<20
         MontIndemnite=W_Paie
      CASE W_AnneeFaite>19 AND W_AnneeFaite<30
         MontIndemnite=W_Paie*2
      CASE W_AnneeFaite>29
         MontIndemnite=W_Paie*3
   END CASE
RETURN

*****************************************************************************
* Convention Ets priv pour les dparts en retraite (FEHAPS)                *
*****************************************************************************
240
   BEGIN CASE
      CASE W_AnneeFaite>10 AND W_AnneeFaite<15
         MontIndemnite=W_Paie
      CASE W_AnneeFaite>14 AND W_AnneeFaite<19
         MontIndemnite=W_Paie*3
      CASE W_AnneeFaite>18 AND W_AnneeFaite<22
         MontIndemnite=W_Paie*4
      CASE W_AnneeFaite>21 AND W_AnneeFaite<25
         MontIndemnite=W_Paie*5
      CASE W_AnneeFaite>24
         MontIndemnite=W_Paie*6
   END CASE
RETURN

***********************************************************************
* Convention Travailleuses Familliales pour les dparts en retraite   *
***********************************************************************
250
   IF W_AnneeFaite>29 THEN
      MontIndemnite=W_Paie*3
   END ELSE
      IF W_AnneeFaite>9 THEN
         MontIndemnite=W_Paie/10*W_AnneeFaite         
      END
   END

RETURN

**************************************************************************
* Appel les sub des differentes conventions pour les dparts en retraite *
**************************************************************************
310
   BEGIN CASE
      CASE CodeConvCol="01"
         GOSUB 230
      CASE CodeConvCol="02" OR CodeConvCol="07" OR CodeConvCol="08" OR CodeConvCol="09"
         GOSUB 200
      CASE CodeConvCol="03"
         GOSUB 210
      CASE CodeConvCol="04"
         GOSUB 220
      CASE CodeConvCol="05"
         GOSUB 240
      CASE CodeConvCol="06"
         GOSUB 250
   END CASE
RETURN

********************************************************
* Calcul les annes ralises                          *
********************************************************
400
   W_AnneeFin=OCONV(W_Date,"D4/")
   W_AnneeDebut=OCONV(DateDeb,"D4/")
   W_AnneeFaite=W_AnneeFin[7,4]-W_AnneeDebut[7,4]
   W_MoisFait=W_AnneeFin[4,2]-W_AnneeDebut[4,2]
   W_JourFait=W_AnneeFin[1,2]-W_AnneeDebut[1,2]
   IF W_JourFait<0 THEN
      W_MoisFait=W_MoisFait-1
   END
   IF W_MoisFait<0 THEN
      W_AnneeFaite=W_AnneeFaite-1
      W_MoisFait=12+W_MoisFait
   END

RETURN


********************************************************
* Calcul la periode d'absence                          *
********************************************************
500
   LISTABSAIDANT=""
   W_PaieAbs=0
   W_PasLireCalcul="FAUX"
   W_Temp=""
   W_DateInterne=W_Date
   W_Date=OCONV(W_Date,"D4/")
   W_Temp=W_Date[4,2]-4
   IF W_Temp < 0 THEN
      W_Date3="01/":13-W_Temp:"/":W_Date[7,4]-1
   END ELSE
      W_Date3="01/":W_Temp:"/":W_Date[7,4]
   END
   W_Date12=W_Date[1,3]:W_Date[4,2]:"/":W_Date[7,4]-1      

   W_JourAbs12=0
   W_JourAbs3=0
   W_Fini="FAUX"

   W_Date12=ICONV(W_Date12,"D4/")
   W_Date3=ICONV(W_Date3,"D4/")

   EXECUTE 'SSELECT ABSENCESAIDANT AVEC @ID = "':CodeContrat[1,5]:']" AND AVEC DebAbsAidant <= "':W_DateInterne:'" AND AVEC 2 => "':W_Date12:'" AND AVEC NumMotifAidant => "01" AND AVEC NumMotifAidant <= "06" OR = "12" OR = "13"'
   EXECUTE 'SAUVE-LISTE LISTABSAIDANT'
   EXECUTE 'LISTE LISTABSAIDANT' RETURNING W_MSG
   IF W_MSG<1>="209" THEN
    RETURN
   END

   LOOP
      READNEXT W_CleAbs FROM LISTABSAIDANT ELSE W_Fini="VRAI"
   WHILE W_Fini = "FAUX"
      READ ENR_ABSENCESAIDANT FROM F.ABSENCESAIDANT,W_CleAbs ELSE PRINT "AbsencesAidant"
      IF W_CleAbs[6,2] <= 6 THEN
         IF W_CleAbs[8,5] <= W_Date12 THEN
            W_Employeur=ENR_CONTRAT<3>
            i=1
            LOOP
            WHILE ENR_ABSENCESAIDANT<13,i> # W_Employeur AND ENR_ABSENCESAIDANT<13,i> # "" DO
               i=i+1
            REPEAT
            IF ENR_ABSENCESAIDANT<13,i> # "" THEN
               W_DateAbsAAAAMM=OCONV(W_CleAbs[8,5],"D4/")
               W_DateAbsAAAAMM=W_DateAbsAAAAMM[7,4]:W_DateAbsAAAAMM[4,2]
               IF DateEuroAAAAMM > W_DateAbsAAAAMM THEN
                  ENR_ABSENCESAIDANT<14,i>=INT(ENR_ABSENCESAIDANT<14,i> / RapportEuro + 1/2)
               END
               W_PaieAbs=ENR_ABSENCESAIDANT<14,i>
            END
            W_Fini="VRAI"
         END
      END ELSE
         IF W_CleAbs[6,2] = 12 OR W_CleAbs[6,2] = 13 THEN
            W_JourAbs12=ENR_ABSENCESAIDANT<2>-W_CleAbs[8,5]+1+W_JourAbs12
            IF W_CleAbs[8,5] <= W_Date3 AND W_DateInterne <= ENR_ABSENCESAIDANT<2> THEN
                IF W_CleAbs[8,5] <= W_Date3 THEN
                    W_DatDebPer=W_Date3
                END
                W_JourAbs3=ENR_ABSENCESAIDANT<2>-W_DatDebPer+1+W_JourAbs3
            END
         END
      END
   REPEAT
   EXECUTE 'EFFACER-LISTE LISTABSAIDANT'

RETURN
