EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
OPEN "","ACTIVITES" TO F.ACTIVITES ELSE STOP
OPEN "","ACTIVITESAIDE" TO F.ACTIVITESAIDE ELSE STOP
OPEN "","CONTRAT" TO F.CONTRAT ELSE STOP
OPEN "","DETAILMANDAT" TO F.DETAILMANDAT ELSE STOP
OPEN "","DETAILPREST" TO F.DETAILPREST ELSE STOP
OPEN "","PERIODESPAIE" TO F.PERIODESPAIE ELSE STOP
OPEN "","RUBSAISIE" TO F.RUBSAISIE ELSE STOP
OPEN "","RUBSAISIETELEGESTION" TO F.RUBSAISIETELEGESTION ELSE STOP
OPEN "", "FUSION" TO F.FUSION ELSE STOP
OPEN "", "DETAILCALCUL" TO F.DETAILCALCUL ELSE STOP
OPEN "", "TEMPO" TO F.TEMPO ELSE STOP 
OPEN "", "CIVILAIDANT" TO F.CIVILAIDANT ELSE STOP
OPEN "", "CIVILAIDE" TO F.CIVILAIDE ELSE STOP

******************************************************************************************************************
*  100 : Traitement d'une ligne d'un fichier : signalisation / dtection des erreurs type pas de contrat
*       ou bulletin dj calcul
*  200 : Traitement du cumuldeslignes en mandataire ou en prestataire au mois le mois
* 
*   10 : ecriture dans fichier DETAILPREST
*   20 : criture dans fichier DETAILMANDAT
*  
* 1000 : Vrification cohrence desactivits de l'aid
*
* 1100 : Pralable au traitement global : tablissement de la liste des activits de type prestataire 
*        afin de vrifier au cours du traitement que l'aid a bien au moins une de ces activits.
*
*   30 : Ecriture du rapport d'erreur
*
*
* Notes : il a t signal  Lens que le fichier devait tre intgr plusieurs fois
* jusqu'a ce que l'intgration ne donne plus lieu a aucun message d'erreur
* Sinon il y a risque que des interventions "valide" sur un couple ne soient pas passes en saisie
* a cause de l'erreur rencontre sur une autre ligne du couple
*
******************************************************************************************************************

ENR_Verif = ""
LOOP
	PRINT "Nom du fichier  intgrer ?"
	INPUT W_NomFicTel
	READ ENR_IAF FROM F.FUSION,W_NomFicTel ELSE ENR_IAF = ""
	IF W_NomFicTel = "" THEN 
		PRINT "Traitement abandonn."
		STOP 
	END

WHILE ENR_IAF = ""
	PRINT "Ce fichier n'est pas dans le rpertoire FUSION de la base."
REPEAT

PRINT "Code Association ?"
INPUT W_CodAssoc
IF W_CodAssoc = "" THEN 
	PRINT "Traitement abandonn."
	STOP 
END

READ ENR_PERIODESPAIE FROM F.PERIODESPAIE,"1" ELSE STOP

LOOP
	PRINT "Priode (AAAAMM) ?"
	INPUT W_Periode
	IF W_Periode = "" THEN 
		PRINT "Traitement abandonn."
		STOP 
	END
WHILE W_Periode # ENR_PERIODESPAIE<1> AND W_Periode # ENR_PERIODESPAIE<2>
	PRINT "La priode saisie doit tre gale  la priode de traitement en cours (":ENR_PERIODESPAIE<1>:") ou  la priode suivante..."
REPEAT

W_DateDebMois = ICONV("01/":W_Periode[5,2]:"/":W_Periode[1,4],"D4/")
W_DateFinMois= W_Periode[5,2] + 1
IF W_DateFinMois = "13" THEN
	W_DateFinMois = ICONV("31/12/":W_Periode[1,4],"D4/")
END ELSE
	W_DateFinMois = ICONV("01/":W_DateFinMois:"/":W_Periode[1,4],"D4/")-1
END

LOOP
	PRINT "Type d'activit (P / M) ?"
	INPUT W_TypeAct
	W_TypeAct = ICONV(W_TypeAct,"MCU")
	IF W_TypeAct = "" THEN 
		PRINT "Traitement abandonn."
		STOP 
	END
WHILE W_TypeAct # "P" AND W_TypeAct # "M"
REPEAT



IF W_TypeAct = "P" THEN
	LOOP
		PRINT "S'agit-il d'une saisie au mois le mois (M) ou d'une saisie dtaille au jour le jour (J) ?"
		INPUT W_TypeSaisie
		IF W_TypeSaisie = "" THEN 
			PRINT "Traitement abandonn."
			STOP 
		END
		W_TypeSaisie = ICONV(W_TypeSaisie,"MCU")
	WHILE W_TypeSaisie # "M" AND W_TypeSaisie # "J"
	REPEAT
	
	OPEN "", "TELEGESTIONPREST" TO F.TELEGESTION ELSE 
		EXECUTE 'CREER-FICHIER TELEGESTIONPREST 7,1'
		OPEN "", "TELEGESTIONPREST" TO F.TELEGESTION ELSE
			PRINT "Le fichier spcifique de transformation des donnes de tlgestion n'a pas pu tre cr."
			PRINT "Traitement abandonn."
			STOP
		END
		OPEN "DICT", "TELEGESTIONPREST" TO F.DICT THEN
			ENR_DICT = ""
			ENR_DICT<1> = 'V'
			ENR_DICT<2> = 'OCONV(@ID,"T11,6")' 
			ENR_DICT<3> = ''
			ENR_DICT<4> = 'Periode'
			ENR_DICT<5> = '6R'
			ENR_DICT<6> = 'S'
			WRITE ENR_DICT ON F.DICT, 'PeriodeInterv' 
		END ELSE
			PRINT "Le fichier spcifique de transformation des donnes de tlgestion n'a pas pu tre cr."
			PRINT "Traitement abandonn."
			STOP
		END

	END
	GOSUB 1100
	EXECUTE 'VIDER-FICHIER TELEGESTIONPREST'
	W_Str = 'SELECT TELEGESTIONPREST'
END ELSE
	OPEN "", "TELEGESTIONMAND" TO F.TELEGESTION ELSE 
		EXECUTE 'CREER-FICHIER TELEGESTIONMAND 7,1'
		OPEN "", "TELEGESTIONMAND" TO F.TELEGESTION ELSE
			PRINT "Le fichier spcifique de transformation des donnes de tlgestion n'a pas pu tre cr."
			PRINT "Traitement abandonn."
			STOP
		END
		OPEN "DICT", "TELEGESTIONMAND" TO F.DICT THEN
			ENR_DICT = ""
			ENR_DICT<1> = 'V'
			ENR_DICT<2> = 'OCONV(@ID,"T11,6")' 
			ENR_DICT<3> = ''
			ENR_DICT<4> = 'Periode'
			ENR_DICT<5> = '6R'
			ENR_DICT<6> = 'S'
			WRITE ENR_DICT ON F.DICT, 'PeriodeInterv' 
		END ELSE
			PRINT "Le fichier spcifique de transformation des donnes de tlgestion n'a pas pu tre cr."
			PRINT "Traitement abandonn."
			STOP
		END
	END
	EXECUTE 'VIDER-FICHIER TELEGESTIONMAND'
	W_Str = 'SELECT TELEGESTIONMAND'
END

W_RequeteContrat=""

W_An=W_Periode[1,4]

W_Mois=W_Periode[5,2]

W_Erreur = ""

W_TamponAidant = ""
W_TamponAide = ""
W_TamponJour = ""
W_TabAct = ""

W_Count=DCOUNT(ENR_IAF,CHAR(254))
FOR i = 2 TO W_Count
	ENR_TELEGESTION = ""
	
	IF FIELD(ENR_IAF<i>,";",1) # "" AND FIELD(ENR_IAF<i>,";",2) # "" THEN
	   IF FIELD(ENR_IAF<i>,";",6) = W_TypeAct THEN
		W_CleTeleGestion = FIELD(ENR_IAF<i>,";",1):FIELD(ENR_IAF<i>,";",2):FIELD(ENR_IAF<i>,";",3)[7,4]:FIELD(ENR_IAF<i>,";",3)[4,2]:FIELD(ENR_IAF<i>,";",3)[1,2]:FIELD(ENR_IAF<i>,";",3)[12,2]:FIELD(ENR_IAF<i>,";",3)[15,2]
		ENR_TELEGESTION<1> = ENR_IAF<i>
		WRITE ENR_TELEGESTION ON F.TELEGESTION, W_CleTeleGestion
	   END ELSE
		* on ignore la ligne ...
		IF FIELD(ENR_IAF<i>,";",6) = "" THEN
			W_Motif = "Activit indfinie."
		END ELSE
			IF W_TypeAct = "M" THEN
				W_Motif = "Activite prestataire"
			END ELSE
				W_Motif = "Activite mandataire"
			END
		END
		W_CleAidant = FIELD(ENR_IAF<i>,";",1)
		W_CleAide = FIELD(ENR_IAF<i>,";",2)
		W_Ligne = ENR_IAF<i>
		W_DateIntervention=FIELD(W_Ligne,";",3)[1,10]
		W_DateIntervention=ICONV(W_DateIntervention,"D4/")
		GOSUB 30
	   END
	END ELSE
		W_CleAidant = FIELD(ENR_IAF<i>,";",1)
		W_CleAide = FIELD(ENR_IAF<i>,";",2)
		W_Ligne = ENR_IAF<i>
		W_DateIntervention=FIELD(W_Ligne,";",3)[1,10]
		W_DateIntervention=ICONV(W_DateIntervention,"D4/")
		IF W_CleAidant = "" THEN
			W_Motif = "Aidant inconnu."
			GOSUB 30
		END ELSE
			IF W_CleAide = "" THEN
				W_Motif = "Aide inconnu."
				GOSUB 30
			END
		END

	END	
	
NEXT i

W_TamponAidant = ""
W_TamponAide = ""


*************************************************
* TRAITEMENT PRINCIPAL
* Slection des articles tris
W_RequeteInterv = ""
W_Str = W_Str:' AVEC PeriodeInterv = "':W_Periode:'" PAR @ID'
EXECUTE W_Str
EXECUTE 'SAUVE-LISTE W_RequeteInterv'
EXECUTE 'LISTE W_RequeteInterv' RETURNING MSGCODE
IF MSGCODE<1> = "209" THEN
	IF W_Erreur = "" THEN
		PRINT 'Le fichier spcifi ne contient aucun enregistrement sur les critres slectionns.'
		PRINT "Veuillez vrifier la priode et le type d'activit concernant ce fichier."
		STOP
	END
END
SELECT F.TELEGESTION TO W_RequeteInterv
W_FinRequeteInterv = "F"
LOOP
	READNEXT W_CleInterv FROM W_RequeteInterv ELSE W_FinRequeteInterv = "V"

WHILE W_FinRequeteInterv = "F"
 READ ENR_IAF FROM F.TELEGESTION, W_CleInterv THEN

   W_Ligne=ENR_IAF<1>
   
   W_CleRubSaisieTeleGestion=FIELD(W_Ligne,";",7):"_":FIELD(W_Ligne,";",5)
    
   READ ENR_RUBSAISIETELEGESTION FROM F.RUBSAISIETELEGESTION,W_CleRubSaisieTeleGestion THEN
	* traitement spcifique des gardes de nuits : le nombre d'heure indiqu dans lefichier n'est pas celui a appliquer,
	* il faut le lire dans RUBSAISIETELEGESTION
     IF  W_CleRubSaisieTeleGestion[1,2] = "GN" THEN
		W_HreDeb = TRIM(FIELD(W_Ligne,";",3)[11,7])
		W_MinDeb = FIELD(W_HreDeb,":",2)
		W_HreDeb = FIELD(W_HreDeb,":",1)
		
		IF W_HreDeb > 20 OR (W_HreDeb = 20 AND W_MinDeb >= 50) THEN
			* = petite Garde de Nuit
			W_BaseGN = ENR_RUBSAISIETELEGESTION<3>
		END ELSE
			* = grande Garde de Nuit
			W_BaseGN = ENR_RUBSAISIETELEGESTION<4>
		END
		W_BaseGN = W_BaseGN * 60 / 100
		W_Ligne = W_Ligne[1,INDEX(W_Ligne,";",7)]:W_BaseGN:W_Ligne[INDEX(W_Ligne,";",8), LEN(W_Ligne) - INDEX(W_Ligne,";",8) + 1]
     END
     W_CleRubSaisie=ENR_RUBSAISIETELEGESTION<1>
     W_Act=ENR_RUBSAISIETELEGESTION<2>

     W_CleAide=FIELD(W_Ligne,";",2)
     W_CleAidant=FIELD(W_Ligne,";",1)

     IF W_CleAidant # W_TamponAidant OR (W_TypeAct = "M" AND W_CleAide # W_TamponAide) THEN
	
	  IF W_TamponAidant # "" THEN
	  	  GOSUB 200
	  END

	  W_TamponAidant = W_CleAidant
	  W_TamponAide = W_CleAide
	  W_TamponJour = ""
	  W_Err = "F"
	  W_ErrDetail = "F"
	  IF W_CleAidant = "" THEN
		W_Motif = "Aidant inconnu."
		GOSUB 30
		W_ErrDetail = "V"
	  END ELSE
	      IF W_CleAide = "" AND W_TypeAct = "M" THEN
		   W_Motif = "Aide inconnu."
		   GOSUB 30
		   W_ErrDetail = "V"
	      END
	  END
	  IF W_ErrDetail = "F" THEN
   	     IF W_TypeAct="M" THEN
      	 EXECUTE 'SELECT CONTRAT AVEC 2 = "':W_CodAssoc:'" AND AVEC 3 = "':W_CleAide:'" AND AVEC @ID = "':W_CleAidant:']" AND AVEC 1 = "02" AND AVEC 7 <= "':W_DateFinMois:'" AND AVEC 8 >= "':W_DateDebMois:'" OR = "" AND AVEC 65 # "O" PAR 7'
   	     END ELSE
      	 EXECUTE 'SELECT CONTRAT AVEC 2 = "':W_CodAssoc:'" AND AVEC @ID = "':W_CleAidant:']" AND AVEC 1 # "02" AND AVEC 7 <= "':W_DateFinMois:'" AND AVEC 8 >= "':W_DateDebMois:'" OR = "" AND AVEC 65 # "O" PAR 7'
   	     END
	     EXECUTE 'SAUVE-LISTE W_RequeteContrat'
   	     EXECUTE "LISTE W_RequeteContrat" RETURNING MSGCODE
           IF MSGCODE<1>#209 THEN
		
     		  SELECT F.CONTRAT TO W_RequeteContrat
     		  READNEXT W_CleContrat FROM W_RequeteContrat ELSE PRINT "RIEN"
     		  READ ENR_CONTRAT FROM F.CONTRAT,W_CleContrat ELSE PRINT "Contrat :":W_CleContrat
		  READ ENR_DETAILCALCUL FROM F.DETAILCALCUL, W_CleContrat:W_An:W_Mois THEN
			* Erreur : bulletin dj calcul 
			READNEXT W_CleContrat FROM W_RequeteContrat THEN
				READ ENR_CONTRAT FROM F.CONTRAT, W_CleContrat ELSE ENR_CONTRAT = ""
				READ ENR_DETAILCALCUL FROM F.DETAILCALCUL, W_CleContrat:W_An:W_Mois THEN
					*W_Motif = "Bulletin dj calcul."
					*GOSUB 30
					W_ErrDetail = "V"
				END
			END ELSE
				* Pas de contrat : sera signal en procdure 100
				ENR_CONTRAT<8> = 0
				W_ErrDetail = "V"
			END
		  END
     		  IF W_TypeAct="M" THEN
			READ ENR_DETAILMANDAT FROM F.DETAILMANDAT,W_CleContrat:W_An:W_Mois ELSE ENR_DETAILMANDAT=""
			
     		  END ELSE
        		READ ENR_DETAILPREST FROM F.DETAILPREST,W_CleContrat:W_An:W_Mois ELSE ENR_DETAILPREST=""
     		  END
           END ELSE
		  * Pas de contrat : sera signal en procdure 100
		  ENR_CONTRAT<8> = 0
	     END
       END

     END

     IF W_CleAide = "" AND W_TypeAct = "P" THEN
	  W_Motif = "Aide inconnu."

	  GOSUB 30
	  W_ErrDetail = "V"
     END

     GOSUB 100
  	
   END ELSE
      W_CleAide=FIELD(W_Ligne,";",2)
      W_CleAidant=FIELD(W_Ligne,";",1)
 	W_DateIntervention=FIELD(W_Ligne,";",3)[1,10]
	W_DateIntervention=ICONV(W_DateIntervention,"D4/")

	* Erreur : lecture RUBSAISIETELEGESTION
	W_Motif = "Rub. Inconnue : ":W_CleRubSaisieTeleGestion
    	GOSUB 30
   END
 END
REPEAT

GOSUB 200

WRITE W_Erreur ON F.TEMPO, "Domiphone"

PRINTER ON
W_Ind = DCOUNT(W_Erreur,CHAR(254))
FOR i = 1 TO W_Ind
PRINT W_Erreur<i>
IF MOD(i,62) = 0 AND i # W_Ind THEN
	GOSUB 40
END
NEXT i
IF W_Erreur # "" THEN
PRINT "**************************************************************************************************************************"
END
STOP

****************************************************************************
* Rempli le fichier detailprest
10
IF W_TypeSaisie = "M" THEN
      IF ENR_DETAILPREST<1>="" THEN
         ENR_DETAILPREST<1,1>=W_Aide
         ENR_DETAILPREST<2,1>=W_Rub
         ENR_DETAILPREST<3,1>=W_Base
         ENR_DETAILPREST<4,1>=W_ActTrouve
      END ELSE
         
         iInsert=0
	   iPrest = 0
	   W_Trouve = "F"
	   LOOP
         	iPrest=iPrest+1
         WHILE ENR_DETAILPREST<1,iPrest>#"" AND W_Trouve = "F"
		IF ENR_DETAILPREST<1,iPrest> = W_Aide AND ENR_DETAILPREST<4,iPrest> = W_ActTrouve AND ENR_DETAILPREST<2,iPrest> = W_Rub THEN
               iInsert=iPrest
		   W_Trouve = "V"
            END ELSE
			IF ENR_DETAILPREST<1,iPrest> = W_Aide AND (ENR_DETAILPREST<4,iPrest> = "" OR ENR_DETAILPREST<2,iPrest> = "") THEN
				* Il y a eu saisie dtaille avant intgration => on l'crase
				ENR_DETAILPREST = DELETE(ENR_DETAILPREST, 1,iPrest)
				ENR_DETAILPREST = DELETE(ENR_DETAILPREST, 2,iPrest)
				ENR_DETAILPREST = DELETE(ENR_DETAILPREST, 3,iPrest)
				ENR_DETAILPREST = DELETE(ENR_DETAILPREST, 4,iPrest)
				ENR_DETAILPREST = DELETE(ENR_DETAILPREST, 10,iPrest)
				ENR_DETAILPREST = DELETE(ENR_DETAILPREST, 11,iPrest)
				ENR_DETAILPREST = DELETE(ENR_DETAILPREST, 12,iPrest)
				ENR_DETAILPREST = DELETE(ENR_DETAILPREST, 13,iPrest)
			END
		END
         REPEAT
         IF iInsert=0 THEN
            iInsert=DCOUNT(ENR_DETAILPREST<1>,CHAR(253))+1
         END

	   ENR_DETAILPREST<10,1> = ""
	   ENR_DETAILPREST<11,1> = ""
	   ENR_DETAILPREST<12,1> = ""
	   ENR_DETAILPREST<13,1> = ""

         ENR_DETAILPREST<1,iInsert>=W_Aide
         ENR_DETAILPREST<2,iInsert>=W_Rub
         ENR_DETAILPREST<3,iInsert>=W_Base
         ENR_DETAILPREST<4,iInsert>=W_ActTrouve

      END
END ELSE
	
	IF ENR_DETAILPREST<1>="" THEN
         ENR_DETAILPREST<1,1>=W_Aide
	   ENR_DETAILPREST<3,1> = W_Base
	   ENR_DETAILPREST<10,1> = W_TamponJour[1,2]
	   ENR_DETAILPREST<11,1> = W_Rub
	   ENR_DETAILPREST<12,1> = W_Base
	   ENR_DETAILPREST<13,1> = W_ActTrouve
      END ELSE
         W_CountDetailPrest=DCOUNT(ENR_DETAILPREST<1>,CHAR(253))
         iInsert=0
         FOR iPrest=1 TO W_CountDetailPrest
            IF ENR_DETAILPREST<1,iPrest>=W_Aide THEN
               iInsert=iPrest
		   iPrest=99
            END
         NEXT iPrest
         IF iInsert=0 THEN
            iInsert=W_CountDetailPrest + 1
         END
	   
         ENR_DETAILPREST<1,iInsert>=W_Aide
	   ENR_DETAILPREST<2,iInsert>=""
         ENR_DETAILPREST<3,iInsert>=""
         ENR_DETAILPREST<4,iInsert>=""
	   
	   yInsert=0
         iPrest=0
	   LOOP
		iPrest = iPrest + 1
	   WHILE ENR_DETAILPREST<10,iInsert,iPrest> <= W_TamponJour[1,2] AND ENR_DETAILPREST<10,iInsert,iPrest> # ""
            IF ENR_DETAILPREST<10,iInsert,iPrest> = W_TamponJour[1,2] AND ENR_DETAILPREST<11,iInsert,iPrest> = W_Rub AND ENR_DETAILPREST<13,iInsert,iPrest> = W_ActTrouve THEN
               yInsert=iPrest
		   iPrest=99
            END
         REPEAT
         IF yInsert=0 THEN
            yInsert=iPrest
		
		ENR_DETAILPREST<10,iInsert,yInsert>=W_TamponJour[1,2]
		ENR_DETAILPREST<11,iInsert,yInsert>=W_Rub
         	ENR_DETAILPREST<12,iInsert,yInsert>=W_Base
         	ENR_DETAILPREST<13,iInsert,yInsert>=W_ActTrouve
         END ELSE
		
         	ENR_DETAILPREST<12,iInsert,yInsert>=W_Base
	   END
	   
	   * Ecriture du cumul des heures en saisie dtaille en att 3 : On l'effectue  chaque fois
	   * car on vide les att 2  4 au cas o il y aurait eu une saisie globale prlable, et donc 
	   * on ne peut simplement cumuler  chaque ajout de ligne de saisie dtaille... 
	   yInsert = 0
	   W_CumulDetHres	= 0
	   LOOP
		yInsert = yInsert + 1
	   WHILE ENR_DETAILPREST<10,iInsert,yInsert> # ""
		W_CumulDetHres = W_CumulDetHres + ENR_DETAILPREST<12,iInsert,yInsert>
	   REPEAT
	   ENR_DETAILPREST<3,iInsert> = W_CumulDetHres

	   * S'il y a eu saisie globale pralable, on a autant de MV concernant l'aid 
	   * que de couple Rubrique / Activit (ex : 1 MV hres norm, 1 MV hres dim & JF sur mme activit)
	   * => on n'en garde qu'une...
	   yInsert = 0
	   LOOP
		yInsert = yInsert + 1
	   WHILE ENR_DETAILPREST<1,yInsert> # ""
		IF ENR_DETAILPREST<1,yInsert> = W_Aide AND yInsert # iInsert THEN
			ENR_DETAILPREST = DELETE(ENR_DETAILPREST, 1,yInsert)
			ENR_DETAILPREST = DELETE(ENR_DETAILPREST, 2,yInsert)
			ENR_DETAILPREST = DELETE(ENR_DETAILPREST, 3,yInsert)
			ENR_DETAILPREST = DELETE(ENR_DETAILPREST, 4,yInsert)
			ENR_DETAILPREST = DELETE(ENR_DETAILPREST, 10,yInsert)
			ENR_DETAILPREST = DELETE(ENR_DETAILPREST, 11,yInsert)
			ENR_DETAILPREST = DELETE(ENR_DETAILPREST, 12,yInsert)
			ENR_DETAILPREST = DELETE(ENR_DETAILPREST, 13,yInsert)
		END
	   REPEAT
	 
       END  

END
RETURN

****************************************************************************
* Rempli le fichier detailmandat
20
  
   iMand = 0
   W_Trouve = "F" 
   LOOP
	iMand = iMand + 1
   WHILE ENR_DETAILMANDAT<1,iMand> # "" AND W_Trouve = "F"	
	
	IF ENR_DETAILMANDAT<1,iMand> = W_Rub AND ENR_DETAILMANDAT<5,iMand> = W_ActTrouve THEN
		W_Trouve = "V"
		iMand = iMand -1
	END
   REPEAT
  
   ENR_DETAILMANDAT<1,iMand>=W_Rub
   ENR_DETAILMANDAT<2,iMand>=W_Base
   ENR_DETAILMANDAT<3,iMand>="0"
   ENR_DETAILMANDAT<4,iMand>="0"
   ENR_DETAILMANDAT<5,iMand>=W_ActTrouve
  
RETURN

************************************************************************************************
* Bas + en-tte page impression
40
PRINT "**************************************************************************************************************************"
PAGE
PRINT W_Erreur<1>
PRINT W_Erreur<2>
RETURN

****************************************************************************
* Traitement d'une ligne du fichier
100

W_DateIntervention=FIELD(W_Ligne,";",3)[1,10]
W_DateIntervention=ICONV(W_DateIntervention,"D4/")

W_Err = "F"

* Verif des activit de l'aid en prestataire...
IF W_TypeAct ="P" THEN
	GOSUB 1000
END
LOOP WHILE NOT( W_DateIntervention >= ENR_CONTRAT<7> AND (ENR_CONTRAT<8> = "" OR ENR_CONTRAT<8> >= W_DateIntervention)) AND W_Err = "F"
	
	IF ENR_CONTRAT<8> # "" AND ENR_CONTRAT<8> < W_DateIntervention AND W_TabAct # "" THEN
		* Traitement saisie prcdente.... Les interventions sont prises dans l'ordre des dates,
		* donc il y a des lignes d'interventions antrieures qui ont pu tre valides
		GOSUB 200
	END
	READNEXT W_CleContrat FROM W_RequeteContrat THEN
		
		W_ErrDetail = "F"
		READ ENR_CONTRAT FROM F.CONTRAT, W_CleContrat THEN
			READ ENR_DETAILCALCUL FROM F.DETAILCALCUL, W_CleContrat:W_Mois:W_An THEN
				W_ErrDetail = "V" 
			END ELSE
				IF W_TypeAct="M" THEN
					READ ENR_DETAILMANDAT FROM F.DETAILMANDAT,W_CleContrat:W_An:W_Mois ELSE ENR_DETAILMANDAT=""
					
  				END ELSE
        				READ ENR_DETAILPREST FROM F.DETAILPREST,W_CleContrat:W_An:W_Mois ELSE ENR_DETAILPREST=""
     				END
			END
		END

	END ELSE
	   
	   IF W_ErrDetail = "F" THEN
		W_Motif = "Pas de contrat actif."
		GOSUB 30
	   END
	   W_Err = "V"

	END
REPEAT

IF W_ErrDetail = "V" THEN
	W_Motif = "Bulletin dj calcul."
	GOSUB 30
END
IF W_Err # "V" AND W_ErrDetail # "V" THEN
  
  IF W_TypeAct ="P" THEN
	IF W_TypeSaisie = "J" THEN
		W_Jour = OCONV(W_DateIntervention,"D4/")
		IF W_Jour # W_TamponJour THEN
			IF W_TamponJour # "" THEN
				GOSUB 200
			END
			W_TamponJour = W_Jour
		END
	END
      i = 0
  	W_Trouve = "F"
  	LOOP
	   	i = i + 1
  	WHILE W_TabAct<1,i> # "" AND W_Trouve = "F"
		IF W_TabAct<1,i> = W_CleAide AND W_TabAct<4,i> = W_Act AND W_TabAct<2,i> = W_CleRubSaisie THEN
			i = i -1
			W_Trouve = "V"
		END			
  	REPEAT

  END ELSE

	i = 0
  	W_Trouve = "F"
  	LOOP
	   	i = i + 1
  	WHILE W_TabAct<2,i> # "" AND W_Trouve = "F"
		
		IF W_TabAct<2,i> = W_CleRubSaisie AND W_TabAct<4,i> = W_Act  THEN
			i = i -1
			W_Trouve = "V"
		END			
  	REPEAT

  END

	
  W_TabAct<1,i> = W_CleAide
  W_TabAct<2,i> = W_CleRubSaisie
  IF W_TabAct<3,i> = "" THEN W_TabAct<3,i> = 0
  IF W_TypeAct = "M" THEN
	* Mandataire : on arrondi chaque ligne d'intervention
  	W_DureeInterv =  INT(FIELD(W_Ligne,";",8)/60) * 100
	IF MOD(FIELD(W_Ligne,";",8),60) / 15 - INT(MOD(FIELD(W_Ligne,";",8),60) / 15) > 0.67 THEN
		* On arrondit au quart d'heure suprieur...
		* Nb : si dpasse le dernier quart d'eure de 10 mn, on a MOD(FIELD(W_Ligne,";",8),60) / 15 - INT(MOD(FIELD(W_Ligne,";",8),60) / 15) = 0.66
		W_DureeInterv = W_DureeInterv + (INT(MOD(FIELD(W_Ligne,";",8),60) / 15) + 1) * 25
	END ELSE
		* On arrondit a l'infrieur
		W_DureeInterv = W_DureeInterv + INT(MOD(FIELD(W_Ligne,";",8),60) / 15) * 25

	END

  END ELSE
	W_DureeInterv = INT(FIELD(W_Ligne,";",8))
  END
  
  W_TabAct<3,i> = W_TabAct<3,i> + W_DureeInterv
  W_TabAct<4,i> = W_Act

END
RETURN

**************************************************************************
* Prparation de l'criture
200

IF W_TabAct # "" THEN
	i = 0
	LOOP
		i = i + 1
	WHILE W_TabAct<1,i> # ""
		
		W_Aide = W_TabAct<1,i>
		W_Rub = W_TabAct<2,i>
		IF W_TypeAct = "P" THEN
			* nb : prestataire, on arrondit au 1/4 d'hre le plus proche, a la diffrence du mandataire.
			W_Base = INT(MOD(W_TabAct<3,i>,60) / 15 + 1/2) * 25 + INT(W_TabAct<3,i>/60) * 100
		END ELSE
			W_Base = W_TabAct<3,i>
		END
		
		W_ActTrouve = W_TabAct<4,i>
		IF W_TypeAct = "P" THEN
			GOSUB 10
		END ELSE
			GOSUB 20
		END

	REPEAT
	IF W_TypeAct="M" THEN
		WRITE ENR_DETAILMANDAT ON F.DETAILMANDAT,W_CleContrat:W_An:W_Mois
  	END ELSE
        	WRITE ENR_DETAILPREST ON F.DETAILPREST,W_CleContrat:W_An:W_Mois
     	END
	IF W_Periode = ENR_PERIODESPAIE<1> THEN
		ENR_CONTRAT<81> = W_Periode
		WRITE	ENR_CONTRAT ON F.CONTRAT, W_CleContrat
	END
END
W_TabAct = ""
W_Err = "F"
RETURN

***********************************************************************************
30
IF W_Erreur = "" THEN
	W_Erreur<1> = "* Date inter * Aidant  ":SPACE(30 - 9):"* Aide":SPACE(30-5):"* Hre Deb * Hre fin * Motif d'erreur          *" 
	W_Erreur<2> = "**************************************************************************************************************************"
END
W_NomPreAidant = ""
W_NomPreAide = ""
READ ENR_CIVILAIDANT FROM F.CIVILAIDANT,W_CleAidant THEN
	W_NomPreAidant = ENR_CIVILAIDANT<2>:" ":ENR_CIVILAIDANT<3>
END
W_NomPreAidant = W_NomPreAidant[1,28]"L 28"

READ ENR_CIVILAIDE FROM F.CIVILAIDE,W_CleAide THEN
	W_NomPreAide = ENR_CIVILAIDE<2>:" ":ENR_CIVILAIDE<3>
END
W_NomPreAide = W_NomPreAide[1,28]"L 28"

W_Erreur<-1> = "* ":OCONV(W_DateIntervention,"D4/"):" * ":W_CleAidant"L 28":" * ":W_CleAide"L 28":" *  ":FIELD(W_Ligne,";",3)[12,5]:"  *  ":FIELD(W_Ligne,";",4)[12,5]:"  * ":W_Motif"L 24":"*"
W_Erreur<-1> = "*":SPACE(12):"* ":W_NomPreAidant:" * ":W_NomPreAide:" *":SPACE(9):"*":SPACE(9):"*":SPACE(25):"*"

RETURN

**********************************************************************************
1000
* Activit prestataire : parcours des activits de l'aid pour  signaler le cas o un salari 
* qui travaille sur les deux entits n'aurait pas saisi son code prestataire chez un bnficiaire mandataire
*
READ ENR_ACTIVITESAIDE FROM F.ACTIVITESAIDE,W_CleAide THEN
	i = 0
	W_TrouveActPrest = "F"
	LOOP
	i = i + 1
	WHILE ENR_ACTIVITESAIDE<1,i> # "" AND W_TrouveActPrest = "F"
		IF ENR_ACTIVITESAIDE<2,i> <= W_DateIntervention AND (ENR_ACTIVITESAIDE<3,i> >= W_DateIntervention OR TRIM(ENR_ACTIVITESAIDE<3,i>) = "" ) AND INDEX(W_ListeActPrest,ENR_ACTIVITESAIDE<1,i>,1) # 0 THEN
			W_TrouveActPrest = "V"
		END
	REPEAT
	IF W_TrouveActPrest = "F" THEN
		W_Motif = "Aid non prestataire."
		GOSUB 30
		W_Err = "V"
	END
END ELSE
	* Pas d'activit ?
	W_Motif = "Aid non prestataire."
	GOSUB 30
	W_Err = "V"
END
RETURN

*********************************************************************************
1100
* Traitement prestataire : Remplissage de la liste des activits prestataire
EXECUTE 'SELECT ACTIVITES = "':W_CodAssoc:']" AVEC 12 = "P"'
W_Fin ="F"
W_ListeActPrest = ""
LOOP
	READNEXT W_Cle ELSE W_Fin = "V"
WHILE W_Fin = "F"
	W_ListeActPrest = W_ListeActPrest:W_Cle:"|"
REPEAT
RETURN
