**********************************************************
*  gnration MOI globale en planning
*  Vanessa
*  octobre - novembre 2004
**********************************************************
* Ouvertures des fichiers

EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
OPEN "","CIVILAIDANT" TO F.CIVILAIDANT ELSE PRINT "OUVERTURE CIVILAIDANT" ;* en lecture
OPEN "","CIVILAIDE" TO F.CIVILAIDE ELSE PRINT "OUVERTURE CIVILAIDE" ;* en lecture
OPEN "","CONTRAT" TO F.CONTRAT ELSE PRINT "OUVERTURE CONTRAT" ;* en lecture
OPEN "","RUBSAISIE" TO F.RUBSAISIE ELSE PRINT "OUVERTURE RUBSAISIE" ;* en lecture
OPEN "","TEMPO" TO F.TEMPO ELSE PRINT "OUVERTURE TEMPO" ;* en lecture criture
OPEN "","TPSMOI" TO F.TPSMOI ELSE PRINT "OUVERTURE TPSMOI" ;* en lecture criture
OPEN "","TPSPARAM" TO F.TPSPARAM ELSE PRINT "OUVERTURE TPSPARAM" ;* en lecture
OPEN "", "TPSTEMPO" TO F.TPSTEMPO ELSE STOP

*********************************************************
* initialisation des variables
W_JourMOI=""
W_Jour=""
W_CountJour=1
ENR_TEMPO=""
W_Ligne=1
ENR_TPSMOI=""
ENR_TEMPOCLE=""
W_NbCle=1
W_RequeteContrat=""
*********************************************************
* Recuperation des arguments

PROCREAD ARGUMENTS ELSE STOP
W_User=FIELD(ARGUMENTS,"|",2)
W_Entite=FIELD(ARGUMENTS,"|",3)
W_CodeAct=FIELD(ARGUMENTS,"|",4)
W_RubSaisie=FIELD(ARGUMENTS,"|",5)
W_Opt=FIELD(ARGUMENTS,"|",6)
W_Select1=FIELD(ARGUMENTS,"|",7)
W_Select2=FIELD(ARGUMENTS,"|",8)
W_Select3=FIELD(ARGUMENTS,"|",9)
W_LigneDetail=FIELD(ARGUMENTS,"|",10)

*********************************************************
* PROGRAMME PRINCIPAL

	W_Act=""
        W_Count = LEN(W_CodeAct)
       	W_Act<1> = W_CodeAct[1,6]
        i=8
	j=2
        LOOP
        UNTIL i >= W_Count DO
        	W_Act<j> = W_CodeAct[i,6]
		j = j + 1 
		i = i + 7
        REPEAT

	W_Detail=""
        W_Count = LEN(W_LigneDetail)
       	W_Detail<1> = W_LigneDetail[1,46]
        i=48
	j=2
        LOOP
        UNTIL i >= W_Count DO
        	W_Detail<j> = W_LigneDetail[i,46]
		j = j + 1 
		i = i + 47
        REPEAT

	READ ENR_TEMPOCLE FROM F.TEMPO,"CREATIONMOI":W_User THEN
		DELETE F.TEMPO,"CREATIONMOI":W_User
	END

	READ ENR_TPSPARAM FROM F.TPSPARAM,"1" ELSE ENR_TPSPARAM=""

	******************************
	* dfinition des jours de MOI
	******************************

	W_Count=DCOUNT(W_Detail,CHAR(254))

	FOR i=1 TO W_Count

		W_DateDeb=W_Detail<i>[25,10]
		W_DateDeb=ICONV(W_DateDeb,"D4/")
		W_DateFin=W_Detail<i>[37,10]
		W_DateFin=ICONV(W_DateFin,"D4/")

		FOR j=W_DateDeb TO W_DateFin

      			W_Day = OCONV(j,"DWA")
			GOSUB 10

			IF W_Jour=W_Detail<i>[1,1] THEN
				W_JourMOI<W_CountJour>=j:";":W_Detail<i>[4,5]:";":W_Detail<i>[11,5]:";":W_Detail<i>[18,5]:";":W_User
				W_CountJour=W_CountJour+1
			END
		NEXT j

	NEXT i

	*********************************************************
	* parcourt les contrats pour chaque jour saisi en dtail
	*********************************************************

	W_CountJour=DCOUNT(W_JourMOI,CHAR(254))

	FOR k=1 TO W_CountJour

		*******************
		* formate lments
		*******************

		ENR_TEMPO=""
		W_Ligne=1
		W_Date=FIELD(W_JourMOI<k>,";",1)

		W_HreDeb=FIELD(W_JourMOI<k>,";",2)
		W_HreDeb=W_HreDeb[1,2]:W_HreDeb[4,2]

		IF ENR_TPSPARAM<20>="2" THEN
			W_Hre=W_HreDeb[1,2]
			W_Min=W_HreDeb[3,2]
			W_MinCentieme=INT((W_Min*10/6)+(1/2)) "R%2"
			W_HreDeb=W_Hre:W_MinCentieme
		END

		W_HreFin=FIELD(W_JourMOI<k>,";",3)
		W_HreFin=W_HreFin[1,2]:W_HreFin[4,2]

		IF ENR_TPSPARAM<20>="2" THEN
			W_Hre=W_HreFin[1,2]
			W_Min=W_HreFin[3,2]
			W_MinCentieme=INT((W_Min*10/6)+(1/2)) "R%2"
			W_HreFin=W_Hre:W_MinCentieme
		END

		W_Valeur=FIELD(W_JourMOI<k>,";",4)
		W_Valeur=W_Valeur[1,2]:W_Valeur[4,2]

		IF ENR_TPSPARAM<20>="2" THEN
			W_Hre=W_Valeur[1,2]
			W_Min=W_Valeur[3,2]
			W_MinCentieme=INT((W_Min*10/6)+(1/2)) "R%2"
			W_Valeur=W_Hre:W_MinCentieme
		END

		******************
		* requete contrat 
		******************

		W_Temp = 'SSELECT CONTRAT AVEC 65 = "" AND AVEC 6 = "P"'

		IF W_Entite # "" THEN
			W_Temp = W_Temp:' AND AVEC 2 = "':W_Entite:'"'
		END

		W_Temp = W_Temp:' AND AVEC 36 = "':W_Act<1>:'"'

		W_Count=DCOUNT(W_Act,CHAR(254))
		FOR i=2 TO W_Count
			W_Temp = W_Temp:' OR = "':W_Act<i>:'"'
		NEXT i

		BEGIN CASE
			CASE W_Opt = "S"
				W_Temp = W_Temp:' AND AVEC CodSecteurContrat = "':W_Select1:'"'
				IF W_Select2 # "" THEN
					W_Temp = W_Temp:' AND AVEC CodSsSecteurContrat = "':W_Select1:W_Select2:'"'
				END
				IF W_Select3 # "" THEN
					W_Temp = W_Temp:' AND AVEC CodQuartierContrat = "':W_Select1:W_Select2:W_Select3:'"'
				END
			CASE W_Opt = "C"
				W_Temp = W_Temp:' AND AVEC CommunePostAidant = "':W_Select1:'"' 
			CASE W_Opt = "I"
				W_Temp = W_Temp:' AND AVEC 0 = "':FIELD(W_Select1,";",1):']"'
				W_Count=DCOUNT(W_Select1,";")
				FOR i=2 TO W_Count
					W_Temp = W_Temp:' OR = "':FIELD(W_Select1,";",i):']"'
				NEXT i
		END CASE 

		W_Temp = W_Temp:' AND AVEC 7 <= "':W_Date:'" AND AVEC 51 >= "':W_Date:'" OR = ""'

		W_Temp = W_Temp:' PAR NomPrenomAidantContrat'

		EXECUTE W_Temp
		EXECUTE 'SAUVE-LISTE W_RequeteContrat'
		EXECUTE "LISTE W_RequeteContrat" RETURNING MSGCODE

		IF MSGCODE<1> = 209 THEN
			STOP
		END ELSE
			SELECT F.CONTRAT TO W_RequeteContrat

			W_Fini = "FAUX"
			LOOP
				READNEXT W_CleContrat FROM W_RequeteContrat ELSE W_Fini = "VRAI"
			WHILE W_Fini = "FAUX" DO

				READ ENR_CONTRAT FROM F.CONTRAT,W_CleContrat ELSE ENR_CONTRAT=""
				GOSUB 20

			REPEAT

		END

		WRITE ENR_TEMPO ON F.TEMPO,W_JourMOI<k>
		ENR_TEMPOCLE<W_NbCle>=W_JourMOI<k>
		W_NbCle=W_NbCle+1

	NEXT k

	WRITE ENR_TEMPOCLE ON F.TEMPO,"CREATIONMOI":W_User

STOP

*****************************************************************************************************
* recherche le n du jour

10

	BEGIN CASE
		CASE W_Day="Monday"
			W_Jour="0"
		CASE W_Day="Tuesday"
			W_Jour="1"
		CASE W_Day="Wednesday"
			W_Jour="2"
		CASE W_Day="Thursday"
			W_Jour="3"
		CASE W_Day="Friday"
			W_Jour="4"
		CASE W_Day="Saturday"
			W_Jour="5"
		CASE W_Day="Sunday"
			W_Jour="6"
	END CASE

RETURN

*****************************************************************************************************
* Appel prog AFFICHEPLANNING

20
	W_CleRetour = W_User:TIME()
	W_ParamAffichePlanning = "AFFICHEPLANNING |":W_CleRetour:"|":W_Entite:"|P|":W_Date:"|":W_Date+1:"|||":W_CleContrat[1,5]:"|E||||"
	EXECUTE W_ParamAffichePlanning
	READ TabInterv FROM F.TPSTEMPO, "AFFICHEPLANNING":W_CleRetour ELSE TabInterv = ""
*	CALL AFFICHEPLANNING(RETURNVAL,W_ParamAffichePlanning,TabInterv)

	W_CountInterv=DCOUNT(TabInterv<2,1>,CHAR(252))

	W_NePasCreerTPSMOI="FAUX"

	W_MOI="FAUX"
	W_Interv="FAUX"
	W_Abs="FAUX"
	W_Indispo="FAUX"
	W_OK="FAUX"

	FOR i=1 TO W_CountInterv

		IF W_HreDeb < TabInterv<2,3,i> AND W_HreFin > TabInterv<2,2,i> THEN
			* chevauchement
			BEGIN CASE
				CASE TabInterv<2,1,i>="MOI"
					W_NePasCreerTPSMOI="VRAI"
					W_MOI="VRAI"
					GOSUB 30
				CASE INDEX(TabInterv<2,1,i>,"Interv",1) # 0
					W_Interv="VRAI"
					GOSUB 30
				CASE TabInterv<2,1,i>="INDISPO"
					W_Indispo="VRAI"
					GOSUB 30
				CASE TabInterv<2,1,i>="ARRET"
					W_NePasCreerTPSMOI="VRAI"
					W_Abs="VRAI"
					GOSUB 30
				CASE TabInterv<2,1,i>="CONGES"
					W_NePasCreerTPSMOI="VRAI"
					W_Abs="VRAI"
					GOSUB 30
				CASE TabInterv<2,1,i>="VM"
					W_NePasCreerTPSMOI="VRAI"
					W_Abs="VRAI"
					GOSUB 30

			END CASE
		END

	NEXT i


	IF W_NePasCreerTPSMOI="FAUX" THEN
		IF W_MOI="FAUX" AND W_Interv="FAUX" AND W_Abs="FAUX" AND W_Indispo="FAUX" THEN
			W_OK="VRAI"
			GOSUB 30
		END

		GOSUB 40
	END
	DELETE F.TPSTEMPO, "AFFICHEPLANNING":W_CleRetour
RETURN

*****************************************************************************************************
* criture compte-rendu

30

	READ ENR_CIVILAIDANT FROM F.CIVILAIDANT,W_CleContrat[1,5] ELSE ENR_CIVILAIDANT=""

	IF W_MOI="VRAI" THEN
		READ ENR_TPSMOI FROM F.TPSMOI,TabInterv<2,4,i>[1,14] ELSE ENR_TPSMOI=""
		READ ENR_RUBSAISIE FROM F.RUBSAISIE,ENR_TPSMOI<3> ELSE ENR_RUBSAISIE=""

		W_HreDebMOI=TabInterv<2,4,i>[11,4]
		W_Min=W_HreDebMOI[3,2]
		W_Min=INT((W_Min*6/10)+(1/2)) "R%2"
		W_HreDebMOI=W_HreDebMOI[1,2]:"h":W_Min

		W_HreFinMOI=ENR_TPSMOI<1>
		W_Min=W_HreFinMOI[3,2]
		W_Min=INT((W_Min*6/10)+(1/2)) "R%2"
		W_HreFinMOI=W_HreFinMOI[1,2]:"h":W_Min

		W_Libelle=ENR_RUBSAISIE<1>:" de ":W_HreDebMOI:"  ":W_HreFinMOI
		IF LEN(W_Libelle) > 40 THEN
			W_Libelle=W_Libelle[1,40]
		END ELSE
			W_Libelle=W_Libelle:SPACE(40-LEN(W_Libelle))
		END
		W_Creer="NON"
	END ELSE
		
		IF W_Interv="VRAI" THEN
			READ ENR_CIVILAIDE FROM F.CIVILAIDE,TabInterv<2,4,i>[6,5] ELSE ENR_CIVILAIDE=""
			W_Nom=ENR_CIVILAIDE<2>:" ":ENR_CIVILAIDE<3>
			IF LEN(W_Nom) > 22 THEN
				W_Nom=W_Nom[1,22]
			END ELSE
				W_Nom=W_Nom:SPACE(22-LEN(W_Nom))
			END
			W_Libelle="Intervention chez ":W_Nom
			W_Creer="OUI"
		END ELSE
			IF W_Indispo="VRAI" THEN
				W_Libelle="Indisponible":SPACE(28)
				W_Creer="OUI"
			END ELSE
				IF W_Abs="VRAI" THEN
					W_Libelle=TabInterv<2,1,i>:SPACE(40-LEN(TabInterv<2,1,i>))
					W_Creer="NON"
				END ELSE
					IF W_OK="VRAI" THEN
						W_Libelle=SPACE(40)
						W_Creer="OUI"	
					END
				END
			END
		END
	END

	W_Nom=ENR_CIVILAIDANT<2>:" ":ENR_CIVILAIDANT<3>
	IF LEN(W_Nom) > 30 THEN
		W_Nom=W_Nom[1,30]
	END ELSE
		W_Nom=W_Nom:SPACE(30-LEN(W_Nom))
	END

	ENR_TEMPO<W_Ligne>=W_CleContrat[1,5]:" ":W_Nom:" ":W_Libelle:" ":W_Creer
	W_Ligne=W_Ligne+1

	IF W_Interv="VRAI" THEN

		W_HreDebInterv=TabInterv<2,2,i>
		W_Min=W_HreDebInterv[3,2]
		W_Min=INT((W_Min*6/10)+(1/2)) "R%2"
		W_HreDebInterv=W_HreDebInterv[1,2]:"h":W_Min

		W_HreFinInterv=TabInterv<2,3,i>
		W_Min=W_HreFinInterv[3,2]
		W_Min=INT((W_Min*6/10)+(1/2)) "R%2"
		W_HreFinInterv=W_HreFinInterv[1,2]:"h":W_Min

		ENR_TEMPO<W_Ligne>=SPACE(37):"de ":W_HreDebInterv:" au ":W_HreFinInterv
		W_Ligne=W_Ligne+1
	END

RETURN

*****************************************************************************************************
* criture TPSMOI

40

	ENR_TPSMOI<1>=W_HreFin
	ENR_TPSMOI<2>=W_Valeur
	ENR_TPSMOI<3>=W_RubSaisie
	ENR_TPSMOI<4>=W_CleContrat

	W_CleTPSMOI=W_CleContrat[1,5]:W_Date:W_HreDeb
	WRITE ENR_TPSMOI ON F.TPSMOI,W_CleTPSMOI

RETURN
