SUBROUTINE CALCPERIODEREFATTEST(RETURNVAL, W_ParamsPeriodeRef, W_Sortie)
*******************************************************************
*		PR de gnration des donnes de paie 			*
*		a destination des attestations de salaires.		*
*******************************************************************

*******************************************************************
* Description du format de sortie :						*
* autant de lignes que de mois dans la priode de rfrence,	*
* dans l'ordre ant chronologique.						*
*											*
* Att 1  : Date du jour de dbut de mois (en clair)			*
* Att 2  : Date du jour de fin de mois (en clair)			*
* Att 3  : Dure de la plus longue absence du mois			*
* Att 4  : Motif de la plus longue absence du mois			*
* Att 5  : Nb jours d'absence total sur la priode			*
* Att 6  : Salaire de rfrence du mois (brut)				*
* Att 7  : Nb heures brut							*
* Att 8  : Net  payer du mois						*
* Att 9  : Base soumise  cotisation (brut)				*
* Att 10 : Mois AAAAMM								*
* Att 11 : Cumul heures travailles						*
* Att 12 : "E" si sommes en euros						*
* Att 13 : Salaire rf. net							*
* Att 14 : Nb heures travail complet                      *
* Att 15 et 16 : Date de dbut contrat CONTRAT<7>           *
* Att 17 :  Montant brut acquis DETAILCALCUL<7> DA11005-01  *
*******************************************************************
 
EXECUTE "SET-THOUS ."
EXECUTE 'DATE.FORMAT'
EXECUTE 'SET-DEC ,'

OPEN "", "CONTRAT" TO F.CONTRAT ELSE RETURN
OPEN "", "DETAILCALCUL" TO F.DETAILCALCUL ELSE RETURN
OPEN "", "ABSENCESAIDANT" TO F.ABSENCESAIDANT ELSE RETURN
OPEN "", "CONVENTIONCOL" TO F.CONVENTIONCOL ELSE RETURN
OPEN "", "TEMPO" TO F.TEMPO ELSE RETURN
OPEN "", "CONSTANTESPAIE" TO F.CONSTANTESPAIE ELSE RETURN
OPEN "", "RUBCHARGE" TO F.RUBCHARGE ELSE RETURN
OPEN "", "TRANCHE" TO F.TRANCHE ELSE RETURN
* Modif Guillaume DA10119 26/05/2010
OPEN "", "CONTRATSPREV" TO F.CONTRATSPREV ELSE RETURN
OPEN "","TAMPON" TO F.TAMPON ELSE RETURN

ListeAbs = ""
ListeHistor = ""

NbMois = W_ParamsPeriodeRef<2>
MoisPrecedent = W_ParamsPeriodeRef<1> 
ListeAbs = W_ParamsPeriodeRef<3> 
ListeHistor = W_ParamsPeriodeRef<4>
CodeContrat = W_ParamsPeriodeRef<5> 

CONVERT CHAR(253) TO CHAR(254) IN ListeHistor
CONVERT CHAR(253) TO CHAR(254) IN ListeAbs


READ ENR_CONTRAT FROM F.CONTRAT, CodeContrat ELSE
	ENR_RAPPORT = "Lecture contrat initial : X":CodeContrat:"X"
	WRITE ENR_RAPPORT ON F.TEMPO, "AttestSal"
	RETURN
END

W_Empl = ENR_CONTRAT<3>
W_ListeContratEmpl = ""
READ ENR_CONSTANTESPAIE FROM F.CONSTANTESPAIE, "1" THEN
	W_DatePassageEuro = ENR_CONSTANTESPAIE<9>
END ELSE
	W_DatePassageEuro = "12420"
END

Sort = "F"
W_CumulSalaire = ""    
W_ContratEnCours = CodeContrat
W_ContratPlusAncien = CodeContrat

iHistor = 0

FOR q = 1 TO NbMois

* Changement de mois
    W_DateAbs = MoisPrecedent - q + 1
    IF W_DateAbs[5,2] = "00" OR W_DateAbs[5,2] >= "80" THEN
        W_DateAbs = W_DateAbs - 88
    END
    W_CumulSalaire<q, 4> = W_DateAbs

    W_DateBulletin = "01/":W_DateAbs[5,2]:"/":W_DateAbs[1,4]
    W_DateFinBulletin = ICONV("01":OCONV(ICONV(W_DateBulletin,"D4/") +32,"D4/")[3,8],"D4/") - 1
    IF ICONV(W_DateBulletin,"D4/") < W_DatePassageEuro THEN
        W_CumulSalaire<q,6> = ""
    END ELSE
        W_CumulSalaire<q,6> = "E"
    END
        
     
    IF ENR_CONTRAT<7> > W_DateFinBulletin OR (ENR_CONTRAT<8> # "" AND ENR_CONTRAT<8> < ICONV(W_DateBulletin,"D4/")) THEN
* on ignore ce contrat
    END ELSE
		
        IF W_ListeContratEmpl<q> = "" THEN
            W_ListeContratEmpl<q> = W_ContratEnCours
  	    END ELSE
            W_ListeContratEmpl<q,-1> = W_ContratEnCours
  	    END
        READ ENR_DETAILCALCUL FROM F.DETAILCALCUL, W_ContratEnCours:W_DateAbs THEN
		    *base brut
	        W_CumulSalaire<q, 1> = W_CumulSalaire<q, 1> + (ENR_DETAILCALCUL<6> )
	        *net a payer
			* Modif Greg - 30/08/2013 - DA13075
	        W_CumulSalaire<q, 2> = W_CumulSalaire<q, 2> + (ENR_DETAILCALCUL<16> )
			
			*Anthony DA11005-01 24/11/11 Montant brut
			W_CumulSalaire<q, 7> = W_CumulSalaire<q, 7> + (ENR_DETAILCALCUL<7> )
        
* MAJ du 21/02/01 : Ajout du poste 5 de W_Cumulsalaire => heures travailles detailcalcul n25, MV
	        l = 1
	        LOOP WHILE ENR_DETAILCALCUL<25,l> # ""
	            W_CumulSalaire<q, 5> = W_CumulSalaire<q, 5> + (ENR_DETAILCALCUL<25, l> )
	            l = l + 1
	        REPEAT
              
*            * Test pour ne renseigner qu'une seule fois un numro de mois
*            IF W_CumulSalaire<q, 4> = 0 OR W_CumulSalaire<q, 4> = "" THEN
*                 W_CumulSalaire<q, 4> = W_DateAbs
*            END
            
	        l = 1
	        W_Fin = "F"
	       	W_CumulTampon = 0

* limitation d'utilisation de la boucle (pour les cas inutiles)
* IF NOT (ENR_ABSENCESAIDANT(0)[6, 2] = "02" And W_CumulTotCot > 200 And l > 3 Or Mid(ENR_ABSENCESAIDANT(0), 6, 2) = "02" And W_CumulTotCot <= 200 And l > 6)  Then
* Boucle pour remplir cumul salaire
 
* Modif DA11094-01 - Didier 07/11/2011 : prendre fichier TDSCASPARTICULIERSDADSU  la place du fichier TDSURSSAFTOTALITE
          W_RUBURSSAFID = 0
          W_EXISTE = 1
          OPEN "", "TDSCASPARTICULIERSDADSU" TO F.TDSCASPARTICULIERSDADSU ELSE W_EXISTE = 0
          IF W_EXISTE=1 THEN
            READ ENR_TDSCASPARTICULIERSDADSU FROM F.TDSCASPARTICULIERSDADSU,"1" ELSE ENR_TDSCASPARTICULIERSDADSU=""
            IF ENR_TDSCASPARTICULIERSDADSU<10>="" THEN W_EXISTE=0
          END
          IF W_EXISTE = 1 THEN
* Didier 19/09/2012 : gestion mandataire comme autres cas 
*             IF ENR_CONTRAT<1> # "02" THEN
                W_RUBURSSAFID = 1
*             END
          END
          IF W_RUBURSSAFID = 1 THEN
              LOOP WHILE (ENR_DETAILCALCUL<8,l> # "") AND (W_Fin = "F")
                IF INDEX(ENR_TDSCASPARTICULIERSDADSU<10>,ENR_DETAILCALCUL<8,l>,1) # 0 THEN
                  READ ENR_RUBCHARGE FROM F.RUBCHARGE,ENR_DETAILCALCUL<8,l> THEN  
                    READ ENR_TRANCHE FROM F.TRANCHE,ENR_RUBCHARGE<2> THEN
                      IF ENR_TRANCHE<10> = "01" AND ENR_RUBCHARGE<28> = "1" AND ENR_RUBCHARGE<16> = "01" THEN
                          W_CumulTampon = W_CumulTampon + ENR_DETAILCALCUL<9, l>
                      END ELSE
                        IF ENR_TRANCHE<10> = "01" AND ENR_RUBCHARGE<28> = "0" AND ENR_RUBCHARGE<16> = "01" THEN
                            IF ENR_DETAILCALCUL<9, l> # "" AND ENR_DETAILCALCUL<9, l> # "0" THEN
                               W_CumulTampon = W_CumulTampon + ENR_DETAILCALCUL<9, l>
                            END ELSE
                                W_CumulTampon = W_CumulTampon + ENR_DETAILCALCUL<12, l>
                            END
                        END
                      END                
                    END
                  END
                END                            
                l = l + 1
              REPEAT
          END
* Modif DA7025-01
          IF W_RUBURSSAFID = 0 THEN
            W_EXISTE = 1
            OPEN "", "TDSURSSAFTOTALITE" TO F.TDSURSSAFTOTALITE ELSE W_EXISTE = 0
            IF W_EXISTE = 1 THEN
               IF ENR_CONTRAT<1> # "02" THEN
                  W_RUBURSSAFID = 1
               END
            END
            IF W_RUBURSSAFID = 1 THEN
                LOOP WHILE (ENR_DETAILCALCUL<8,l> # "") AND (W_Fin = "F")
                  READ ENR_TDSURSSAFTOTALITE FROM F.TDSURSSAFTOTALITE,ENR_DETAILCALCUL<8,l> THEN
                    READ ENR_RUBCHARGE FROM F.RUBCHARGE,ENR_DETAILCALCUL<8,l> THEN  
                      READ ENR_TRANCHE FROM F.TRANCHE,ENR_RUBCHARGE<2> THEN
                        IF ENR_TRANCHE<10> = "01" AND ENR_RUBCHARGE<28> = "1" AND ENR_RUBCHARGE<16> = "01" THEN
                            W_CumulTampon = W_CumulTampon + ENR_DETAILCALCUL<9, l>
                        END ELSE
                          IF ENR_TRANCHE<10> = "01" AND ENR_RUBCHARGE<28> = "0" AND ENR_RUBCHARGE<16> = "01" THEN
* Didier 10/01/2011 - DA11004 : prendre les base de toutes les rubriques rencontres dans TDSURSSAFTOTALITE et prsentes dans DETAILCALCUL
* Donc cumuler sur variable W_CumulTampon et ne pas positionner W_Fin  V 
                              IF ENR_DETAILCALCUL<9, l> # "" AND ENR_DETAILCALCUL<9, l> # "0" THEN
                                 W_CumulTampon = W_CumulTampon + ENR_DETAILCALCUL<9, l>
                              END ELSE
                                  W_CumulTampon = W_CumulTampon + ENR_DETAILCALCUL<12, l>
                              END
*                                  W_Fin = "V"
                          END
                        END                
                      END
                    END
                  END                            
                  l = l + 1
                REPEAT
            END
          END
          IF W_CumulTampon = 0 THEN
            l = 1
            W_Fin = "F"
            LOOP WHILE (ENR_DETAILCALCUL<8,l> # "") AND (W_Fin = "F")
* Didier 07/03/2012 : DA12024 - Prendre rubrique de type URSSAF totalit si base salariale renseigne
              IF ENR_DETAILCALCUL<9,l> # "" THEN
                READ ENR_RUBCHARGE FROM F.RUBCHARGE,ENR_DETAILCALCUL<8,l> THEN
                  READ ENR_TRANCHE FROM F.TRANCHE,ENR_RUBCHARGE<2> THEN
* Didier 10/01/2011 - DA11004 : si passage ici, correspond  CCN 02 - donc prendre 1re rubrique rencontre (de type aide  domicile ou non)
*                      IF ENR_TRANCHE<10> = "01" AND ENR_RUBCHARGE<28> = "1" AND ENR_RUBCHARGE<16> = "01" THEN
*                          W_CumulTampon = W_CumulTampon + ENR_DETAILCALCUL<9, l>
*                      END ELSE
*                          IF ENR_TRANCHE<10> = "01" AND ENR_RUBCHARGE<28> = "0" AND ENR_RUBCHARGE<16> = "01" THEN
                          IF ENR_TRANCHE<10> = "01" AND ENR_RUBCHARGE<16> = "01" THEN
* Didier 07/03/2012 : DA12024
*                              IF ENR_DETAILCALCUL<9, l> # "" AND ENR_DETAILCALCUL<9, l> # "0" THEN
                                 W_CumulTampon = ENR_DETAILCALCUL<9, l>
*                              END ELSE
*                                  W_CumulTampon = ENR_DETAILCALCUL<12, l>
*                              END 
                               W_Fin = "V"
                          END
*                      END                
                  END
                END
              END
              l = l + 1
            REPEAT
          END

        * Modif Guillaume DA10119 26/05/2010
          * Initialisation des rubriques de complments
          GOSUB 999        

            * GD : On prend le brut acquis...
            * Didier 13/11/2013 : gestion plusieurs bulletins sur 1 mme mois
            * W_CumulBrutSansCompl<q> = ENR_DETAILCALCUL<7>
            W_CumulBrutSansCompl<q> = W_CumulBrutSansCompl<q> + ENR_DETAILCALCUL<7>
            
            * Puis on dduit les complments maladie
            l = 1
            LOOP WHILE (ENR_DETAILCALCUL<2,l> # "")
                PRINT ENR_DETAILCALCUL<2,l>
                IF INDEX(W_RubComplement, ENR_DETAILCALCUL<2,l>, 1) <> 0 THEN
                    W_CumulBrutSansCompl<q> = W_CumulBrutSansCompl<q> - ENR_DETAILCALCUL<5,l>
                END
                l = l + 1
            REPEAT




************************************                                 
* Rajout ancienne valeur
*            IF W_CumulTampon > ENR_DETAILCALCUL<7> OR W_CumulTampon = 0 OR W_CumulTampon = "" THEN
*                W_CumulSalaire<q, 3> = W_CumulSalaire<q, 3> + ENR_DETAILCALCUL<7> 
*            END ELSE
                W_CumulSalaire<q, 3> = W_CumulSalaire<q, 3> + W_CumulTampon
*            END
        * Fin modif Guillaume DA10119 26/05/2010


*End If
            
        END ELSE
        
* Test pour ne renseigner qu'une seule fois un numro de mois (cas ou erreur de lecture)
            IF W_CumulSalaire<q, 4> = 0 OR W_CumulSalaire<q, 4> = "" THEN
                W_CumulSalaire<q, 4> = W_DateAbs
            END
			* MODIF VANESSA 08/03/10
			W_CumulSalaire<q, 3> =0
			ENR_DETAILCALCUL = ""
        END
    END

* reinit cumul tampon
    W_CumulTampon = 0
      
    IF ENR_CONTRAT<7> >= ICONV(W_DateBulletin,"D4/") THEN
		
		LOOP
	
		    iHistor = iHistor + 1
		    IF ListeHistor<iHistor> # "" THEN
		        READ ENR_CONTRAT FROM F.CONTRAT, ListeHistor<iHistor> ELSE
				    ENR_RAPPORT = "Lecture contrat histor : X":ListeHistor<iHistor>:"X":iHistor
				    ENR_CONTRAT<3> = ""
				    WRITE ENR_RAPPORT ON F.TEMPO, "AttestSal"
				    RETURN
		        END
		    END ELSE
				ENR_CONTRAT<3> = ""
* on a parcouru tous les contrats del'historique : il y a embauche sur la priode
			
		    END
		WHILE ListeHistor<iHistor> # "" AND (ENR_CONTRAT<3> # W_Empl OR ListeHistor<iHistor> = W_ContratEnCours) 
		REPEAT
		IF ENR_CONTRAT<3> # W_Empl THEN
		    READ ENR_CONTRAT FROM F.CONTRAT, CodeContrat ELSE
				ENR_RAPPORT = "Lecture contrat initial2: X":CodeContrat:"X"
				WRITE ENR_RAPPORT ON F.TEMPO, "AttestSal"
				RETURN
		    END
		   
		END ELSE
			W_ContratEnCours = ListeHistor<iHistor>
			
			W_ContratPlusAncien = ListeHistor<iHistor>
			IF ENR_CONTRAT<8> >= ICONV(W_DateBulletin,"D4/") THEN
* On peut avoir un bulletin sur le mois que l'on vient de traiter => on revient sur ce mois...
				q = q - 1
				
			END
		END
    END
  
NEXT q

READ ENR_CONTRAT FROM F.CONTRAT, CodeContrat ELSE
	ENR_RAPPORT = "Lecture contrat initial3: X":CodeContrat:"X"
	WRITE ENR_RAPPORT ON F.TEMPO, "AttestSal"
	RETURN
END

W_Sortie = ""
FOR t = 1 TO NbMois
	W_Mois = MoisPrecedent - t + 1
	IF W_Mois[5,2] = "00" OR W_Mois[5,2] >= "80" THEN
		W_Mois = W_Mois - 88
	END
	W_Sortie<t,1> = ICONV("01/":W_Mois[5,2]:"/":W_Mois[1,4],"D4/")
	W_Sortie<t,2> = ICONV("01/":OCONV(W_Sortie<t,1>+32,"D4/")[4,7],"D4/") - 1
	
NEXT t
W_TabAbsAnc = ""
i = 0
LOOP
	i = i + 1
WHILE ListeAbs<i> # ""
	
	READ ENR_ABSENCESAIDANT FROM F.ABSENCESAIDANT, ListeAbs<i> THEN
		W_DebAbs = ListeAbs<i>[8,5]
		W_MotifAbs = ListeAbs<i>[6,2]
		W_LibMotifAbs = ""
		GOSUB 100
		t = 0
		LOOP 
			t = t + 1
			IF ENR_ABSENCESAIDANT<2> >= W_Sortie<t,1> AND W_DebAbs <= W_Sortie<t,2> THEN
			    IF ENR_ABSENCESAIDANT<26> # "" THEN
					k = 0
					LOOP
						k = k + 1
					WHILE ENR_ABSENCESAIDANT<26,k> # "" AND INDEX(W_ListeContratEmpl<t>,ENR_ABSENCESAIDANT<26,k>,1) = 0
					REPEAT
					IF INDEX(W_ListeContratEmpl<t>,ENR_ABSENCESAIDANT<26,k>,1) # 0 AND ENR_ABSENCESAIDANT<26,k> # "" THEN
					    IF ENR_ABSENCESAIDANT<21,k> = "N" THEN
							W_BorneSup = 0
							W_BorneInf = 1
					
					    END ELSE
							IF ENR_ABSENCESAIDANT<22,k> < W_Sortie<t,1> THEN
								W_BorneInf = W_Sortie<t,1>
						   	END ELSE
								W_BorneInf = ENR_ABSENCESAIDANT<22,k>
						   	END
					   		IF ENR_ABSENCESAIDANT<24,k> > W_Sortie<t,2> THEN
								W_BorneSup = W_Sortie<t,2>
						   	END ELSE
								W_BorneSup = ENR_ABSENCESAIDANT<24,k>
						   	END

					    END 
					END ELSE
* Contrat pas trouv dans les exceptions = on utilise les valeurs par dfaut.
						IF W_DebAbs < W_Sortie<t,1> THEN
							W_BorneInf = W_Sortie<t,1>
					   	END ELSE
							W_BorneInf = W_DebAbs
					   	END
				   		IF ENR_ABSENCESAIDANT<2> > W_Sortie<t,2> THEN
							W_BorneSup = W_Sortie<t,2>
					   	END ELSE
							W_BorneSup = ENR_ABSENCESAIDANT<2>
					   	END
					END
			    END ELSE
				   	IF W_DebAbs < W_Sortie<t,1> THEN
						W_BorneInf = W_Sortie<t,1>
				   	END ELSE
						W_BorneInf = W_DebAbs
				   	END
				   	IF ENR_ABSENCESAIDANT<2> > W_Sortie<t,2> THEN
						W_BorneSup = W_Sortie<t,2>
				   	END ELSE
						W_BorneSup = ENR_ABSENCESAIDANT<2>
				   	END
			    END
			    W_DureeAbs = W_BorneSup - W_BorneInf + 1
			    IF W_MotifAbs = "03" THEN
					W_DureeAbs = W_DureeAbs / 2
					* modif vanessa 15/10/15 - DA 15072
					W_Sortie<t,19> = W_DureeAbs
			    END
			    IF W_DureeAbs > W_Sortie<t,3> AND W_DureeAbs # 0 THEN
* Nb : ligne ci dessus ncessaire car pour PICK on a 
* (zro) 0 > "" (vide)
					W_Sortie<t,3> = W_DureeAbs
					W_Sortie<t,4> = W_LibMotifAbs
					IF W_LibMotifAbs # "" AND W_LibMotifAbs # "ABA" THEN
						GOSUB 200
						W_Sortie<t,6> = W_SalaireRef
						W_Sortie<t,14> = W_HeuresRef
					END ELSE
						IF W_TabAbsAnc<t,2> = "" OR W_TabAbsAnc<t,2> > W_DebAbs THEN
							W_TabAbsAnc<t,1> = ListeAbs<i>
							W_TabAbsAnc<t,2> = W_DebAbs
						END
					END
			    END
			    W_Sortie<t,5> = W_Sortie<t,5> + W_DureeAbs
				
			END
		WHILE W_Sortie<t,1> >= W_DebAbs AND t < NbMois
		
		REPEAT
	END
	
REPEAT
WRITE W_Sortie ON F.TAMPON,"DG1"
FOR t = 1 TO NbMois
	W_Sortie<t,1> = OCONV(W_Sortie<t,1>,"D4/")
	W_Sortie<t,2> = OCONV(W_Sortie<t,2>,"D4/")
	W_Sortie<t,7> = W_CumulSalaire<t,1>
	* Modif Greg - 30/08/2013 - Dsormais le salaire "net" est en fait le salaire "brut" moins 21%, en dur.
	* Didier 05/03/2014 : 21 %  ne pas faire ici mais dans l'ocx d'dition. Donc remis ancienne instruction
	*W_Sortie<t,8> = W_CumulSalaire<t,2>
	*W_Sortie<t,8> = W_CumulSalaire<t,3>-INT(((W_CumulSalaire<t,3>/100)*21)+(1/2))
	W_Sortie<t,8> = W_CumulSalaire<t,2>
	
	W_Sortie<t,9> = W_CumulSalaire<t,3>
	W_Sortie<t,10> = W_CumulSalaire<t,4>
	W_Sortie<t,11> = W_CumulSalaire<t,5>
	W_Sortie<t,12> = W_CumulSalaire<t,6>
	*Anthony DA11005-01 24/11/11
	W_Sortie<t,17> = W_CumulSalaire<t,7>

* Attention : on peut avoir besoin d'un salaire de rfrence brut ou net, de mme pour sommes percues.
* indiqu en att. 13.

	* MODIF VANESSA 23/02/10 - DA 10035-01

	*	IF W_Sortie<t,6> < W_Sortie<t,9> AND W_Sortie<t,5> # 0 AND W_Sortie<t,5> # "" THEN
	*		IF W_Sortie<t,5> >= W_Sortie<t,2>[1,2] THEN
	*			W_Sortie<t,6> = W_Sortie<t,9>
	*			W_Sortie<t,14> = W_Sortie<t,7>
	*		END ELSE
	*			W_Sortie<t,6> = W_Sortie<t,9> * W_Sortie<t,2>[1,2] / (W_Sortie<t,2>[1,2]-W_Sortie<t,5>)
	*			W_Sortie<t,14> = W_Sortie<t,7> * W_Sortie<t,2>[1,2] / (W_Sortie<t,2>[1,2]-W_Sortie<t,5>)
	*		END	
	*		IF W_CumulSalaire<t,3> # "" AND W_CumulSalaire<t,3> # "0" THEN
	*			W_Sortie<t,13> = INT(W_Sortie<t,6> * W_CumulSalaire<t,2> / W_CumulSalaire<t,3>)
	*		END ELSE
	*			W_Sortie<t,13> = ""
	*		END
	*	END ELSE
	*	    IF W_Sortie<t,5> # 0 AND W_Sortie<t,5> # "" THEN
	*			IF W_CumulSalaire<t,3> # "" AND W_CumulSalaire<t,3> # "0" THEN
	*				W_Sortie<t,13> = INT(W_Sortie<t,6> * W_CumulSalaire<t,2> / W_CumulSalaire<t,3>)
	*			END ELSE
	*				W_Sortie<t,13> = ""
	*			END
	*	    END
	*	END

	IF W_Sortie<t,6> < W_Sortie<t,9> AND W_Sortie<t,5> # 0 AND W_Sortie<t,5> # "" THEN
		W_Sortie<t,6> = ""
		W_Sortie<t,14> = ""
		W_Sortie<t,4> = ""
	END ELSE
		IF W_Sortie<t,5> > 30 THEN W_Sortie<t,5>=30
		* Modif Guillaume DA10119 26/05/2010
*		W_Sortie<t,6> = W_Sortie<t,9> + (W_Sortie<t,6>/30*W_Sortie<t,5>)
		* modif vanessa 15/10/15 - DA 15072
		IF W_Sortie<t,19> # "" THEN
			W_Sortie<t,18> =  W_Sortie<t,6>/30*W_Sortie<t,19>
		END
		W_Sortie<t,6> = W_CumulBrutSansCompl<t> + (W_Sortie<t,6>/30*W_Sortie<t,5>)
		W_Sortie<t,14> = W_Sortie<t,7> + (W_Sortie<t,14>/30*W_Sortie<t,5>)
	END
	IF W_CumulSalaire<t,3> # "" AND W_CumulSalaire<t,3> # "0" THEN
* Didier 13/11/2013 : prendre W_Sortie<t,8>  la place de W_CumulSalaire<t,2> car net est dsormais brut - 21 %
* Didier 05/03/2014 : annulation de cette modif pour remettre ancienne instruction et agir sur l'ocx
*		W_Sortie<t,13> = INT(W_Sortie<t,6> * W_CumulSalaire<t,2> / W_CumulSalaire<t,3>)
*		W_Sortie<t,13> = INT(W_Sortie<t,6> * W_Sortie<t,8> / W_CumulSalaire<t,3>)
		W_Sortie<t,13> = INT(W_Sortie<t,6> * W_CumulSalaire<t,2> / W_CumulSalaire<t,3>)
	END ELSE
		W_Sortie<t,13> = ""
	END
NEXT t
WRITE W_Sortie ON F.TAMPON,"DG2"
* Traitement spcifique a un cas prcis : salaire soumis = 0,
* et absence sans notion de salaire de rfrence (congs sans solde, parental,...) sur tout ou partie du mois :
FOR t = NbMois TO 1 STEP - 1
   
    IF W_Sortie<t,9> = 0 OR W_Sortie<t,9> = "" THEN
		IF W_Sortie<t,5> = 0 OR W_Sortie<t,5> = "" THEN
		    IF W_TabAbsAnc<t> # "" THEN
				IF W_TabAbsAnc<t,2> < W_Sortie<NbMois,1> THEN
					W_CleContratAbs = W_ContratPlusAncien
				END ELSE
					k = t - 1
					LOOP
						k = k + 1
					WHILE W_ListeContratEmpl<k> = "" AND k <= NbMois
					REPEAT
					IF W_ListeContratEmpl<k> # "" THEN
						W_CleContratAbs = W_ListeContratEmpl<k,DCOUNT(W_ListeContratEmpl<k>,CHAR(253))>
					END ELSE
						W_CleContratAbs = CodeContrat
					END
				END

				W_MoisCours = OCONV(W_TabAbsAnc<t,2>,"D4/")
				W_MoisCours = W_MoisCours[7,4]:W_MoisCours[4,2]
		
				W_SalMoy = 0
				W_NetMoy = 0
				W_HreMoy = 0
				W_NbMoy = 3	  
				READ ENR_CONTRATANC FROM F.CONTRAT, W_CleContratAbs THEN

				    FOR m = 1 TO 3

						W_MoisCours = W_MoisCours - 1
			   			IF W_MoisCours[5,2] = "00" OR W_MoisCours[5,2] >= "80" THEN
							W_MoisCours = W_MoisCours - 88 
			   			END
		
						W_DateDebMoisCours = ICONV("01/":W_MoisCours[5,2]:"/":W_MoisCours[1,4],"D4/")
						W_DateFinMoisCours = ICONV("01":OCONV(W_DateDebMoisCours + 32,"D4/")[3,8],"D4/")
						IF ENR_CONTRAT<7> > W_DateFinMoisCours THEN
* Le contrat n'est pas encore commenc 
							W_NbMoy = W_NbMoy - 1
						END ELSE
							READ ENR_DETAILCALCUL FROM F.DETAILCALCUL, W_ContratPlusAncien:W_MoisCours THEN
							    IF W_DatePassageEuro < W_DateDebMoisCours THEN
									W_SalMoy = W_SalMoy + ENR_DETAILCALCUL<7>
									W_NetMoy = W_NetMoy + ENR_DETAILCALCUL<16>
							    END ELSE
									W_SalMoy = W_SalMoy + INT(ENR_DETAILCALCUL<7>/6.55957 + 1/2)
									W_NetMoy = W_NetMoy + INT(ENR_DETAILCALCUL<16>/6.55957 + 1/2)
							    END
							    W_HreMoy = W_HreMoy + ENR_DETAILCALCUL<6>
							END ELSE
								W_NbMoy = W_NbMoy - 1
							END
						END

				    NEXT m
				END
				IF W_SalMoy # 0 AND W_NbMoy # 0 THEN
					W_Sortie<t,6> = INT(W_SalMoy / W_NbMoy + 1/2)
					W_Sortie<t,13> = INT(W_NetMoy / W_NbMoy + 1/2)
					W_Sortie<t,14> = INT(W_HreMoy / W_NbMoy + 1/2)

				END
		
	 	    END ELSE
				GOSUB 300
		    END
		END ELSE
		    GOSUB 300	
		END
    END
NEXT t
WRITE W_Sortie ON F.TAMPON,"DG3"
FOR t = 1 TO NbMois

	IF W_ListeContratEmpl<t> = "" AND t > 1 AND W_ListeContratEmpl<t-1> # "" THEN
* pas de contrat ce mois ci => le mois suivant, il y a eu embauche.
* Rappel : on traite les mois en ordre dcroissant...
		IF W_Sortie<t-1,4> = "" THEN
		
			W_CleCont = W_ListeContratEmpl<t-1,1>
			
			READ ENR_CONTRAT FROM F.CONTRAT, W_CleCont THEN
			
				W_JrsAbs = ENR_CONTRAT<7> - ICONV(W_Sortie<t-1,1>,"D4/")
				
				IF ENR_CONTRAT<8> # "" THEN
					IF ICONV(W_Sortie<t-1,2>,"D4/") - ENR_CONTRAT<8> > 0 THEN
						W_JrsAbs = W_JrsAbs + ICONV(W_Sortie<t-1,2>,"D4/") - ENR_CONTRAT<8>
					END
				END
				
				* MODIF VANESSA 24/02/10 - DA 10035-01
			    * recherche de l'avenant actif 
			    k = DCOUNT(ENR_CONTRAT<14>,CHAR(253))
				
			    LOOP 
			    WHILE ENR_CONTRAT<15,k> > ICONV(W_Sortie<t-1,2>,"D4/")  DO
					k=k-1
			    REPEAT
				
				* heures du contrat mensuelles
		   	    BEGIN CASE
		      	    CASE ENR_CONTRAT<25,k> = "1"
						W_HreContratMens = INT((ENR_CONTRAT<24,k>*52/12) + (1/2))
		      	    CASE ENR_CONTRAT<25,k> = "2"
						W_HreContratMens = INT((ENR_CONTRAT<24,k>*26/12) + (1/2))
		    	    CASE ENR_CONTRAT<25,k> = "3"
						W_HreContratMens = INT((ENR_CONTRAT<24,k>) + (1/2))
		       	    CASE ENR_CONTRAT<25,k> = "4"
						W_HreContratMens = INT((ENR_CONTRAT<24,k>/12) + (1/2))
		   	    END CASE
				W_PARAMS=""
				W_SORTIETX=""
				W_PARAMS<1>=W_CleCont
				W_PARAMS<2>=k
				W_PARAMS<3>=W_Sortie<t-1,2>[7,4]:W_Sortie<t-1,2>[4,2]
				
				CALL CALCCOEFFTXHOR("",W_PARAMS,W_SORTIETX)
				
				W_TAUXHOR=W_SORTIETX<2>
                                * Didier 18/12/2012 : gestion SMIC pour salaire rtabli
                                W_VALSMICHOR=0
                                W_FINRECHSMIC="NON"
                                D=1
                                LOOP
                                   DatSmicHor=EXTRACT(ENR_CONSTANTESPAIE,4,D)
                                   IF DatSmicHor="" THEN W_FINRECHSMIC="OUI"
                                UNTIL W_FINRECHSMIC="OUI" DO
                                   W_DATSMICHOR=OCONV(DatSmicHor,"D4/")
                                   W_DATSMICHOR=W_DATSMICHOR[7,4]:W_DATSMICHOR[4,2]
                                   IF W_DATSMICHOR<=W_Sortie<t-1,2>[7,4]:W_Sortie<t-1,2>[4,2] THEN
                                      ValSmicHor=EXTRACT(ENR_CONSTANTESPAIE,3,D)
                                      W_VALSMICHOR=ValSmicHor * 10
                                      W_FINRECHSMIC="OUI"
                                   END ELSE
                                      D=D+1
                                   END
                                REPEAT
                                IF W_VALSMICHOR>W_TAUXHOR THEN W_TAUXHOR=W_VALSMICHOR
			END
			
			W_JoursMois = W_Sortie<t-1,2>[1,2]
			
			IF W_JrsAbs < W_JoursMois THEN
* Attention : si prise en compte de l'historique, on a en position 1 le code du dernier contrat de l'aidant,
* alors qu'il n'est pas actif
				W_Sortie<t-1,4> = "EMB"
				IF W_Sortie<t-1,6> > INT(((W_HreContratMens*W_TAUXHOR)/1000)+(1/2)) THEN
					W_Sortie<t-1,6>=""
					W_Sortie<t-1,14>=""
				END ELSE
					W_Sortie<t-1,6> = INT(((W_HreContratMens*W_TAUXHOR)/1000)+(1/2))
					W_Sortie<t-1,14> = W_HreContratMens
					*W_Sortie<t-1,6> = W_Sortie<t-1,9> / (W_JoursMois - W_JrsAbs) * W_JoursMois
					*W_Sortie<t-1,14> = W_Sortie<t-1,7> / (W_JoursMois - W_JrsAbs) * W_JoursMois
				END
				
				W_Sortie<t-1,13> = W_Sortie<t-1,8> / (W_JoursMois - W_JrsAbs) * W_JoursMois
				W_Sortie<t-1,5> = W_JrsAbs
				
			END

			* Didier 13/11/2013 : si salaire rtabli en position 6 est <  salaire soumis en position 9, alors lments rtablis remis  vide
			IF W_Sortie<t-1,6> < W_Sortie<t-1,9> THEN
				W_Sortie<t-1,6>=""
				W_Sortie<t-1,14>=""
			END

		END
	END
NEXT t
WRITE W_Sortie ON F.TAMPON,"DG4"
FOR t = 1 TO NbMois
    i = 0
    LOOP
		i = i + 1
    WHILE W_ListeContratEmpl<t,i> # ""
	    READ ENR_CONTRATDates FROM F.CONTRAT, W_ListeContratEmpl<t,i> THEN
		    IF ENR_CONTRATDates<7> >= ICONV(W_Sortie<6,1>,"D4/") THEN
				W_Sortie<1,16> = ENR_CONTRATDates<7>
				IF ENR_CONTRATDates<7> >= ICONV(W_Sortie<3,1>,"D4/") THEN
					W_Sortie<1,15> = ENR_CONTRATDates<7>
				END
		    END ELSE
				IF t > 3 THEN
				    IF t <= 6 THEN
						W_Sortie<1,16> = ""
				    END
				END ELSE
					W_Sortie<1,15> = ""
					W_Sortie<1,16> = ""
				END
		    END
	    END
    REPEAT
NEXT t
WRITE W_Sortie ON F.TAMPON,"DG5"
RETURN

100
BEGIN CASE
    CASE W_MotifAbs = "01"
		W_LibMotifAbs = "MAL"
    CASE W_MotifAbs = "02"
		W_LibMotifAbs = "MAT"
    CASE W_MotifAbs = "03"
		W_LibMotifAbs = "MAL"
    CASE W_MotifAbs = "04"
		W_LibMotifAbs = "AT"
    CASE W_MotifAbs = "05"
		W_LibMotifAbs = "AT"
    CASE W_MotifAbs = "06"
		W_LibMotifAbs = "MAL"
    CASE W_MotifAbs = "12"
		W_LibMotifAbs = "ABA"
    CASE W_MotifAbs = "13"
		W_LibMotifAbs = "ABA"
    CASE W_MotifAbs = "22"
		W_LibMotifAbs = "ABA"
    CASE W_MotifAbs = "23"
		W_LibMotifAbs = "ABA"
	* modif vanessa 19/03/14 - DA 14003
    CASE W_MotifAbs = "26"
		W_LibMotifAbs = "ABA"		
    CASE 1
		W_LibMotifAbs = ""
END CASE
RETURN

200
W_SalaireRef = ""
k = 0
LOOP
	k = k + 1
WHILE ENR_ABSENCESAIDANT<13,k> # "" AND W_SalaireRef = ""
	IF ENR_ABSENCESAIDANT<13,k> = W_Empl OR (ENR_ABSENCESAIDANT<13,k> = W_Empl[1,3] AND LEN(W_Empl) = 6) THEN
		W_SalaireRef = ENR_ABSENCESAIDANT<14,k>	
		W_HeuresRef = ENR_ABSENCESAIDANT<15,k>	
	END 
REPEAT

RETURN

300
k = t
* Pas de salaire soumis, pas d'absences = On cre une absence ?
*k = t - 1
*LOOP
*	k = k + 1
*WHILE W_ListeContratEmpl<k> = "" AND k <= NbMois
*REPEAT
IF W_ListeContratEmpl<k> # "" THEN
	W_CleContratAbs = W_ListeContratEmpl<k,DCOUNT(W_ListeContratEmpl<k>,CHAR(253))>
END ELSE
* Pas de contrat en cours => pas de salaire rtabli.
	RETURN
	W_CleContratAbs = CodeContrat
END
READ ENR_CONTRATAbs FROM F.CONTRAT, W_CleContratAbs ELSE
    RETURN
END
IF ENR_CONTRATAbs<58> < W_Sortie<k,1>[7,4]:W_Sortie<k,1>[4,2] THEN
* Contrat termin sur le mois considr (possible en traitement des contrats de l'historique)
	RETURN
END
W_MoisCours = W_Sortie<t,1>
W_MoisCours = W_MoisCours[7,4]:W_MoisCours[4,2]
LOOP
    W_MoisCours = W_MoisCours - 1
    IF W_MoisCours[5,2] = "00" OR W_MoisCours[5,2] >= "80" THEN
		W_MoisCours = W_MoisCours - 88 
    END
    W_DateDebMoisCours = ICONV("01/":W_MoisCours[5,2]:"/":W_MoisCours[1,4],"D4/")
    W_DateFinMoisCours = ICONV("01":OCONV(W_DateDebMoisCours + 32,"D4/")[3,8],"D4/")
WHILE W_DateFinMoisCours > ENR_CONTRAT<7> AND (W_Sortie<t,6> = 0 OR W_Sortie<t,6> = "")
    READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CleContratAbs:W_MoisCours THEN
	
		IF ENR_DETAILCALCUL<7> # "" AND ENR_DETAILCALCUL<7> # 0 THEN
		    IF W_DatePassageEuro > W_DateFinMoisCours THEN
				W_Sortie<t,6> = INT(ENR_DETAILCALCUL<7> / 6.55957 + 1/2)
				W_Sortie<t,13> = INT(ENR_DETAILCALCUL<16>	/6.55957 + 1/2)
		    END ELSE
				W_Sortie<t,6> = ENR_DETAILCALCUL<7>	
				W_Sortie<t,13> = ENR_DETAILCALCUL<16>
		    END
		    W_Sortie<t,14> = ENR_DETAILCALCUL<6>
		    W_Sortie<t,4> = "ABA"
	   
		END
    END ELSE
* Rien !
    END 
REPEAT
RETURN

999
*******************************************************
*	Initialisation des rub. complments			*
*******************************************************
W_RubComplement = "807;808;812"

    EXECUTE 'SELECT CONTRATSPREV'
    W_FinRub = ""
    LOOP
	READNEXT W_CleContPrev ELSE W_FinRub ="O"
    WHILE W_FinRub = ""
	READ ENR_CONTRATSPREV FROM F.CONTRATSPREV, W_CleContPrev THEN
	   IF ENR_CONTRATSPREV<41> # "" AND INDEX(W_RubComplement,ENR_CONTRATSPREV<41>,1) = 0 THEN
		W_RubComplement = W_RubComplement:";":ENR_CONTRATSPREV<41>
	   END
	   IF ENR_CONTRATSPREV<42> # "" AND INDEX(W_RubComplement,ENR_CONTRATSPREV<42>,1) = 0 THEN
		W_RubComplement = W_RubComplement:";":ENR_CONTRATSPREV<42>
	   END
	END
    REPEAT

RETURN

