********************************************************************************
** Fait le dcompte des jours de cong sur la priode donnes en fonction 
** des dimanches et jours fris
** ENR_ABSENCESAIDANT<10> contient le numro de contrat
** ENR_ABSENCESAIDANT<12> contient 0 si priode N, 1 si priode N+1
** Renvoi: Nombre de jours de congs  dfalquer par type
**
*    DIFFERENTES PROCEDURES
*
*  5	-> Calcul du nombre de jours de congs
*
********************************************************************************
      SUBROUTINE CALCNBJOURABSENCE(RETURNVAL, ENR_ABSENCESAIDANT, SORTIE)
      EXECUTE "SET-THOUS ."
      EXECUTE "SET-DEC ,"
      EXECUTE "DATE.FORMAT"

      OPEN "","CONTRAT" TO F.CONTRAT ELSE PRINT "OUVERTURE CONTRAT" ;* en lecture 
      OPEN "","CONVENTIONCOL" TO F.CONVENTIONCOL ELSE PRINT "OUVERTURE CONVENTIONCOL" ;* en lecture

*********************************************************  
      W_Cle = ENR_ABSENCESAIDANT<1>

      ENR_ABSENCESAIDANT=DELETE(ENR_ABSENCESAIDANT,1)
      W_NumContrat = ENR_ABSENCESAIDANT<10>
      W_dateDebut = W_Cle[8,5]
      W_dateFin = ENR_ABSENCESAIDANT<2>
      W_HeureDeb = ENR_ABSENCESAIDANT<1>
      W_HeureFin = ENR_ABSENCESAIDANT<3>
      W_CodeAbs = W_Cle[6,2]
	  
*********************************************************
*  Algo de dtermination du nombre de jours d'absences
      W_Jour = "" 

      READ ENR_CONTRAT FROM F.CONTRAT,W_NumContrat ELSE ENR_CONTRAT=""
      READ ENR_CONVENTIONCOL FROM F.CONVENTIONCOL, ENR_CONTRAT<1> ELSE ENR_CONVENTIONCOL=""

*********************************************************************************
* Calcul nombre jour de congs rel

      IF W_CodeAbs = "14" THEN
         IF ENR_CONVENTIONCOL<2> = "1" THEN
            W_Jour = "OUVRE"
         END ELSE
            W_Jour = "OUVRABLE"
         END
      END ELSE
			IF ENR_CONVENTIONCOL<12> = "1" THEN
				W_Jour = "OUVRE"
			END ELSE
				W_Jour = "OUVRABLE"
			END
	  END

* INIT TABLEAU
    SORTIE = 0

* Si le contrat demand (W_NumContrat) a une exception (autre que non absent), recalculer le nombre de jour pour cet exception	  
	IF ENR_ABSENCESAIDANT<26> # "" THEN
		FOR I = 1 TO DCOUNT(ENR_ABSENCESAIDANT<26>,CHAR(253)) 
			IF ENR_ABSENCESAIDANT<26,I> = W_NumContrat THEN
				IF ENR_ABSENCESAIDANT<21,I> = "O" THEN
					W_dateDebut = ENR_ABSENCESAIDANT<22,I>
					W_dateFin = ENR_ABSENCESAIDANT<24,I>
					
					IF ENR_ABSENCESAIDANT<23,I> = "M" THEN
						W_HeureDeb = "1"
					END ELSE
						W_HeureDeb = "2"
					END
					
					IF ENR_ABSENCESAIDANT<25,I> = "M" THEN
						W_HeureFin = "1"
					END ELSE
						W_HeureFin = "2"
					END					
				END
			EXIT
			END
		NEXT I
	END

* Calcul le nombre de jours de congs total de l'absence	
	GOSUB 5
	SORTIE = W_JourAbs
	
    RETURN

*********************************************************
*  5   -> Calcul du nombre de jours de congs
5
    W_Diff = (W_dateFin - W_dateDebut) + 1
	W_JourAbs = 0
    FOR i = 0 TO W_Diff-1
        CALL DIMJF(RETURNVAL,OCONV(W_dateDebut + i,"D4/"):"|",W_Sortie)     
        IF W_Sortie[1,5] = "SEMAI" THEN 
            IF (W_Jour = "OUVRE" AND W_Sortie[6,3] # "SAM") OR W_Jour = "OUVRABLE" THEN
               W_JourAbs = W_JourAbs + 100
            END
        END
    NEXT i

* Gestion demi-journe
* Matin Midi
    IF (W_HeureDeb = "1" AND W_HeureFin = "1") THEN 
		W_JourAbs = W_JourAbs - 50
    END 
* A-Midi Soir
    IF (W_HeureDeb = "2" AND W_HeureFin = "2") THEN
        W_JourAbs = W_JourAbs - 50
    END
* A-Midi Midi
    IF (W_HeureDeb = "2" AND W_HeureFin = "1") THEN
		W_JourAbs = W_JourAbs - 100
    END	  
	RETURN
