SUBROUTINE CalcIndLicRet (CodeContrat,LicencRetraite,MontIndemnite)

W_JourAnciennte=0
W_DroitIndem="FAUX"
W_DateFinCalcul=""
W_Temp=""
W_TotalPaie=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
MontIndemnite=0

EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
OPEN "","DETAILCALCUL" TO F.DETAILCALCUL ELSE RETURN
OPEN "","CONTRAT" TO F.CONTRAT ELSE RETURN
OPEN "","ABSENCESAIDANT" TO F.ABSENCESAIDANT ELSE RETURN
READ ENR_CONTRAT FROM F.CONTRAT,CodeContrat ELSE RETURN

CodeConvCol=ENR_CONTRAT<1>
DateDeb=ENR_CONTRAT<7>
DateFin=ENR_CONTRAT<8>
DateNotif=ENR_CONTRAT<50>
NbJourSusp=ENR_CONTRAT<70>

PRINT "DateDeb : ":DateDeb
IF LicencRetraite = "L" THEN

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

IF DateNotif="" THEN
   W_Date12=OCONV(DateFin,"D4/")
   W_Date=DateFin
END ELSE
   W_Date12=OCONV(DateNotif,"D4/")
   W_Date=DateNotif
END

PRINT "W_DateDeFin : ":W_DateDeFin

   * Calcul les annes ralises
   GOSUB 400

   IF W_AnneeFaite => 2 THEN    ;* Deux ans d'anciennete
      W_DateFinCalcul=OCONV(DateFin,"D4/")
      W_Mois=W_DateFinCalcul[4,2]-1
      W_Mois=W_Mois "R%2"
      W_Annee=W_DateFinCalcul[7,4]

      * Calcul la periode d'absence
	GOSUB 500

      IF W_PasLireCalcul="FAUX" THEN
      
         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
               W_TotalPaie=W_TotalPaie+ENR_DETAILCALCUL<7>
               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
      END

      * Dispatche dans les diffrentes conventions
      GOSUB 300

   END
END ELSE

 * Retraite

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

   * 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]

   W_Date=W_DateDeFin

   * Calcul la periode d'absence
   GOSUB 500

   IF W_PasLireCalcul="FAUX" THEN
      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
            W_TotalPaie=W_TotalPaie+ENR_DETAILCALCUL<7>
            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
   END

   * Dispatche dans les diffrentes conventions
   GOSUB 310

END

MontIndemnite=INT(MontIndemnite+1/2)

RETURN

****************
* Licenciement *
****************

******************************************************************************
* Code du travail pour les licenciements ,Employe de maison ,Aide a domicile *
******************************************************************************
100
   W_Temp=W_MoisFait+W_AnneeFaite*12
   IF W_Temp > 120 THEN
      W_AnneeFaite=W_AnneeFaite-10
      MontIndemnite=W_Paie+W_Paie/6*W_AnneeFaite+W_Paie*W_MoisFait/120+W_Paie*W_MoisFait/180    
   END ELSE
      MontIndemnite=W_Paie*W_AnneeFaite*1/10+W_Paie*W_MoisFait/120
   END

RETURN

***********************************************************************
* Convention ADMR pour les licenciements                              *
***********************************************************************
110
   IF ENR_CONTRAT<6>="A" THEN
      IF DateDeb <= 3784 THEN ;* 11 mai 1978
         MontIndemnite=W_Paie*6
      END ELSE
         IF W_AnneeFaite < 5 THEN
             MontIndemnite=W_Paie*1/5*W_AnneeFaite+W_MoisFait/12*1/5*W_Paie
         END ELSE
            IF W_AnneeFaite > 5 THEN
               MontIndemnite=W_Paie*3
            END ELSE
               MontIndemnite=W_Paie*1/2*W_AnneeFaite+W_MoisFait/12*1/2*W_Paie
            END
         END
      END
   END ELSE
      GOSUB 100
   END

RETURN

*************************************************************************
* Convention Famille Rurale pour les licenciements , Ets priv (FEHAPS) *
*************************************************************************
120
   IF W_AnneeFaite > 11 THEN
      MontIndemnite=W_Paie*6
   END ELSE
      MontIndemnite=W_Paie*1/2*W_AnneeFaite+W_MoisFait/12*1/2*W_Paie
   END
RETURN

***********************************************************************
* Convention Travailleuses Familliales pour les licenciements         *
***********************************************************************
130
   MontIndemnite=W_Paie/5*W_AnneeFaite+W_MoisFait/12*W_Paie/5
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=INT(W_AnneeFaite/10)
      MontIndemnite=W_Paie*W_Temp
   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>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*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 licenciements *
********************************************************************
300
   BEGIN CASE
      CASE CodeConvCol="01" OR CodeConvCol="02" OR CodeConvCol="07" OR CodeConvCol="08" OR CodeConvCol="09"
         GOSUB 100
      CASE CodeConvCol="03"
         GOSUB 110
      CASE CodeConvCol="04" OR CodeConvCol="05"
         GOSUB 120
      CASE CodeConvCol="06"
         GOSUB 130
   END CASE
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_DateDeFin,"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
PRINT "W_AnneeFaite : ":W_AnneeFaite
PRINT "W_MoisFait : ":W_MoisFait
PRINT "W_JourFait : ":W_JourFait

RETURN


********************************************************
* Calcul la periode d'absence                          *
********************************************************
500
   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
    EXECUTE 'EFFACER-LISTE LISTABSAIDANT'
    RETURN
   END

PRINT '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"'
   LOOP
      READNEXT W_CleAbs FROM LISTABSAIDANT ELSE W_Fini="VRAI"
   WHILE W_Fini = "FAUX"
      READ ENR_ABSENCESAIDANT FROM F.ABSENCESAIDANT,W_CleAbs ELSE RETURN
      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_Paie=ENR_ABSENCESAIDANT<14,i>
            END ELSE
               W_Paie=0
            END
            W_Fini="VRAI"
            W_PasLireCalcul="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'
PRINT "W_JourAbs3 : ": W_JourAbs3
PRINT "W_JourAbs12 : ": W_JourAbs12

RETURN
