**************************************************************
* PR INDICSADAIDANT											 *
* AUTEUR : Matthieu											 *
* DATE : AVRIL 2008											 *
*                                                            *
* Grgory - 18/04/08                                         *
**************************************************************
* Indicateurs des aidants                       			 *
* Indicateur 5 = Indicateur qualification professionnelle    *
* Indicateur 6 = Indicateur vieillesse technicite            *
**************************************************************

EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
OPEN "", "CIVILAIDANT" TO F.CIVILAIDANT ELSE STOP
OPEN "", "CONTRAT" TO F.CONTRAT ELSE STOP
OPEN "", "DETAILCALCUL" TO F.DETAILCALCUL ELSE STOP
OPEN "", "FORMEXPAIDANT" TO F.FORMEXPAIDANT ELSE STOP
OPEN "", "TABLES" TO F.TABLES ELSE STOP
OPEN "", "SECTEUR" TO F.SECTEUR ELSE STOP
OPEN "", "CONSTANTESPAIE" TO F.CONSTANTESPAIE ELSE STOP
OPEN "", "TEMPO" TO F.TEMPO ELSE STOP
OPEN "", "GRILLESCC" TO F.GRILLESCC ELSE STOP

*******************************************************
************* Rcupration des paramtres *************
*******************************************************

PROCREAD ARGUMENTS ELSE PRINT "RECUP ARGUMENTS"
W_CodeAsso = FIELD(ARGUMENTS,"|",2)
W_TypeSel = FIELD(ARGUMENTS,"|",3)
W_Selection = FIELD(ARGUMENTS,"|",4)
W_TypeAct = FIELD(ARGUMENTS,"|",5)
W_Perso = FIELD(ARGUMENTS,"|",6)
W_Indic = FIELD(ARGUMENTS,"|",7)
W_Rendu = FIELD(ARGUMENTS,"|",8)
W_DateArret = FIELD(ARGUMENTS,"|",9)
W_User = FIELD(ARGUMENTS,"|",10)

*******************************************************
************** Dclaration des variables **************
*******************************************************
W_Requete = ""
W_ListeReqContrat = ""
ENR_TEMPO = ""
W_Fini = ""
W_CleTempo = ""
W_TablResult = ""
W_NbDiplomes = 0
W_LTrouve = ""
W_NumLigne = 0
W_Periode = ""


READ ENR_CONSTANTESPAIE FROM F.CONSTANTESPAIE, 1 ELSE STOP
READ ENR_TABLES FROM F.TABLES, "DIPLOMES" ELSE STOP
	
**** Programme Principal ****

	* -Periode
	W_Periode = W_DateArret[7,4]:W_DateArret[4,2]

	* -Execution de la requete
	GOSUB 10
	
	* -Cle d'enregistrement dans TEMPO
	W_CleTempo = "SADAidant":W_User

	IF MSGCODE<1>#209 THEN
		* -Traitement du rsultat
		SELECT F.CONTRAT TO W_ListeReqContrat
		IF W_Indic="5" THEN
			IF W_Rendu<>"G" THEN
				IF W_Rupt="" THEN
					ENR_TEMPO<-1>="Niveau":CHAR(253):"Catgorie":CHAR(253):"Nb personnes":CHAR(253):"ETP":CHAR(253):"%"
				END ELSE
					IF W_TypeSel="S" THEN ENR_TEMPO<-1>="Secteur":CHAR(253):"Niveau":CHAR(253):"Catgorie":CHAR(253):"Nb personnes":CHAR(253):"ETP":CHAR(253):"%"
					IF W_TypeSel="C" THEN ENR_TEMPO<-1>="Commune":CHAR(253):"Niveau":CHAR(253):"Catgorie":CHAR(253):"Nb personnes":CHAR(253):"ETP":CHAR(253):"%"
					IF W_TypeSel="D" THEN ENR_TEMPO<-1>="Dpartement":CHAR(253):"Niveau":CHAR(253):"Catgorie":CHAR(253):"Nb personnes":CHAR(253):"ETP":CHAR(253):"%"
				END
			END ELSE
				IF W_Rupt="" THEN
					ENR_TEMPO<-1>="Niveau;Catgorie;Nb personnes;ETP"
				END ELSE
					IF W_TypeSel="S" THEN ENR_TEMPO<-1>="Secteur;Niveau;Catgorie;Nb personnes;ETP"
					IF W_TypeSel="C" THEN ENR_TEMPO<-1>="Commune;Niveau;Catgorie;Nb personnes;ETP"
					IF W_TypeSel="D" THEN ENR_TEMPO<-1>="Dpartement;Niveau;Catgorie;Nb personnes;ETP"
				END
			END
		END ELSE
			IF W_Rendu<>"G" THEN
				IF W_Rupt="" THEN
					ENR_TEMPO<-1>="Grille":CHAR(253):"Nb personnes":CHAR(253):"Ratio"
				END ELSE
					IF W_TypeSel="S" THEN ENR_TEMPO<-1>="Secteur":CHAR(253):"Grille":CHAR(253):"Nb personnes":CHAR(253):"Ratio"
					IF W_TypeSel="C" THEN ENR_TEMPO<-1>="Commune":CHAR(253):"Grille":CHAR(253):"Nb personnes":CHAR(253):"Ratio"
					IF W_TypeSel="D" THEN ENR_TEMPO<-1>="Dpartement":CHAR(253):"Grille":CHAR(253):"Nb personnes":CHAR(253):"Ratio"
				END
			END ELSE
				IF W_Rupt="" THEN
					ENR_TEMPO<-1>="Grille;Nb personnes;Ratio"
				END ELSE
					IF W_TypeSel="S" THEN ENR_TEMPO<-1>="Secteur;Grille;Nb personnes;Ratio"
					IF W_TypeSel="C" THEN ENR_TEMPO<-1>="Commune;Grille;Nb personnes;Ratio"
					IF W_TypeSel="D" THEN ENR_TEMPO<-1>="Dpartement;Grille;Nb personnes;Ratio"
				END
			END
		END
		GOSUB 60
		IF W_Indic="5" THEN
			GOSUB 90
			GOSUB 100
			GOSUB 110
		END ELSE
			GOSUB 130
			GOSUB 140
			GOSUB 150
		END
	END ELSE
		* -Requete vide : arret du programme
		ENR_TEMPO<1>="VIDE"
		WRITE ENR_TEMPO ON F.TEMPO, W_CleTempo
		STOP
	END
	
	WRITE ENR_TEMPO ON F.TEMPO, W_CleTempo
	
	GOSUB 50

STOP
	


***************************************
*********** Requete CONTRAT ***********
***************************************
10
   W_Requete = 'SSELECT CONTRAT AVEC 65 = "" AND AVEC 2 = "':W_CodeAsso:'"'   
   BEGIN CASE
      CASE W_TypeAct="M"
         W_Requete = W_Requete:' AND AVEC 1 = "02"'
      CASE W_TypeAct="I"
         W_Requete = W_Requete:' AND AVEC 1 # "02"'
      CASE W_TypeAct="P"
         W_Requete = W_Requete:' AND AVEC 1 # "02" AND AVEC TypeActivite1 # "S"'
      CASE W_TypeAct="S"
         W_Requete = W_Requete:' AND AVEC 1 # "02" AND AVEC TypeActivite1 = "S"'
   END CASE

   BEGIN CASE
      CASE W_Perso="P"
         W_Requete = W_Requete:' AND AVEC 6 = "P"'
      CASE W_Perso="A"
         W_Requete = W_Requete:' AND AVEC 6 = "A"'
   END CASE
   
   W_Rupt=""
   IF W_Selection="" AND W_TypeSel="S" THEN W_Rupt="S"
   IF W_Selection="" AND W_TypeSel="C" THEN W_Rupt="C"
   IF W_Selection="" AND W_TypeSel="D" THEN W_Rupt="D"

	IF W_Selection # "" THEN        
      BEGIN CASE
         CASE W_TypeSel="S"
            W_Requete = W_Requete:' AND AVEC CodSecteurContrat = "':W_Selection:'"'
         CASE W_TypeSel="C"
            W_Requete = W_Requete:' AND AVEC CommunePostAidant = "':W_Selection:'"'
		CASE W_TypeSel="D"
			W_Requete = W_Requete:' AND AVEC Dept = "':W_Selection:'"'
      END CASE  
   END

   W_Requete = W_Requete:' AND AVEC 7 <= "':ICONV(W_DateArret,"D4/"):'" AND AVEC 7 # "" AND AVEC 8 => "':ICONV(W_DateArret,"D4/"):'" OR = ""'

	
   BEGIN CASE
    CASE W_TypeSel="S"
        W_Requete = W_Requete:' PAR LibSecteurContrat PAR CodeAidant PAR 7'
    CASE W_TypeSel="C"
        W_Requete = W_Requete:' PAR CommunePostAidant PAR CodeAidant PAR 7'
	CASE W_TypeSel="D"
		W_Requete = W_Requete:' PAR Dept PAR CodeAidant PAR 7'
   END CASE
   
	EXECUTE W_Requete
	EXECUTE 'SAUVE-LISTE W_ListeReqContrat'
	EXECUTE "LISTE W_ListeReqContrat" RETURNING MSGCODE	
	
RETURN

*****************************************************************
********* Fonction de recherche de l'avenant en cours ***********
*****************************************************************
20
	W_Ind = DCOUNT(ENR_CONTRAT<14>,CHAR(253))
	LOOP
	WHILE ENR_CONTRAT<15,W_Ind> > W_DateArret AND W_Ind # 0 DO
			W_Ind=W_Ind-1
	REPEAT

RETURN

******************************************************
********** Fonction de calcul des Heures *************
******************************************************
30
	
	W_NbHre=0
	IF ENR_CONTRAT<5>="M" THEN
		BEGIN CASE
					CASE ENR_CONTRAT<25,W_Ind>="1"
						W_NbHre = INT((ENR_CONTRAT<24,W_Ind>*52/12) + (1/2))
					CASE ENR_CONTRAT<25,W_Ind>="2"
						W_NbHre = INT((ENR_CONTRAT<24,W_Ind>*26/12) + (1/2))
					CASE ENR_CONTRAT<25,W_Ind>="3"
						W_NbHre = INT((ENR_CONTRAT<24,W_Ind>) + (1/2))
					CASE ENR_CONTRAT<25,W_Ind>="4"
						W_NbHre = INT((ENR_CONTRAT<24,W_Ind>/12) + (1/2))
		END CASE
	END ELSE
		READ ENR_DETAILCALCUL FROM F.DETAILCALCUL, W_CleReq:W_Periode ELSE PRINT "CODE CONTRAT INEXISTANT"
		W_NbHre = ENR_DETAILCALCUL<6>
	END
		
RETURN

**************************************************
********* Fonction de calcul ETP (final **********
**************************************************
40
	FOR I = 1 TO DCOUNT(W_TablResult,CHAR(254))
		W_HoraireLegal = INT((ENR_CONSTANTESPAIE<10>*52/12) + (1/2))
		W_Etp = INT((W_TablResult<I,4>/W_HoraireLegal * 100) + (1/2))
		W_Etp = W_Etp / 100
		W_TablResult<I,5> = W_Etp
	NEXT

RETURN

******************************************
*********** Effacer les listes ***********
******************************************
50

	EXECUTE 'EFFACER-LISTE W_ListeReqContrat'
	
RETURN

****************************************************************************
*********** Fonctions de traitement du rsultat de la requete **************
****************************************************************************
60

	W_AncValRupt=""
	W_ValRupt=""

	W_Fini="FAUX"
	LOOP
		READNEXT W_CleReq FROM W_ListeReqContrat ELSE W_Fini="VRAI"
	WHILE W_Fini="FAUX" DO
		READ ENR_CONTRAT FROM F.CONTRAT, W_CleReq ELSE ENR_CONTRAT=""
		READ ENR_CIVILAIDANT FROM F.CIVILAIDANT, W_CleReq[1,5] ELSE ENR_CIVILAIDANT=""
		READ ENR_FORMEXPAIDANT FROM F.FORMEXPAIDANT, W_CleReq[1,5] ELSE ENR_FORMEXPAIDANT=""
		
		IF W_Rupt<>"" THEN
			IF W_Rupt="S" THEN W_ValRupt=ENR_CIVILAIDANT<31>
			IF W_Rupt="C" THEN W_ValRupt=ENR_CIVILAIDANT<11>
			IF W_Rupt="D" THEN W_ValRupt=ENR_CIVILAIDANT<10>[1,2]
		
			IF W_AncValRupt="" THEN W_AncValRupt=W_ValRupt
			IF W_AncValRupt<>W_ValRupt THEN
				IF W_Indic="5" THEN
					GOSUB 80
					GOSUB 90
					GOSUB 100
					GOSUB 110
				END ELSE
					GOSUB 130
					GOSUB 140
					GOSUB 150
				END
				
				W_TablResult=""
				W_AncValRupt=W_ValRupt
			END
		END
		
		IF W_Indic="5" THEN
			GOSUB 20
			GOSUB 30
			IF ENR_FORMEXPAIDANT<2>="" THEN
				W_Niveau=0
			END ELSE
				W_Niveau=0
				FOR I = 1 TO DCOUNT(ENR_TABLES<2>,CHAR(253))
					IF ENR_FORMEXPAIDANT<2>=ENR_TABLES<2,I> THEN
						W_Niveau=ENR_TABLES<4,I>
						EXIT
					END
				NEXT I
			END
			
			W_Cat="Z"
			READ ENR_GRILLESCC FROM F.GRILLESCC, ENR_CONTRAT<20,W_Ind> THEN
				W_Cat=ENR_GRILLESCC<7>
			END
			IF W_Cat="Z" THEN
				IF ENR_CONTRAT<108,W_Ind><>"" THEN W_Cat=ENR_CONTRAT<108,W_Ind>
			END
			
			GOSUB 70
		END ELSE
			GOSUB 20
			
			W_CodeGrille=ENR_CONTRAT<20,W_Ind>
			W_QualifPro=ENR_CONTRAT<16,W_Ind>
			BEGIN CASE
				CASE ENR_CONTRAT<25,W_Ind>="1"
					W_HrsContrat=INT((ENR_CONTRAT<24,W_Ind>*52)/12)
				CASE ENR_CONTRAT<25,W_Ind>="2"
					W_HrsContrat=INT((ENR_CONTRAT<24,W_Ind>*26)/12)
				CASE ENR_CONTRAT<25,W_Ind>="3"
					W_HrsContrat=ENR_CONTRAT<24,W_Ind>
				CASE ENR_CONTRAT<25,W_Ind>="4"
					W_HrsContrat=INT(ENR_CONTRAT<24,W_Ind>/12)
			END CASE
			W_Avenant=W_Ind
			
			IF W_CodeGrille<>"" THEN
				W_Params=""
				W_Params<1>=W_CleReq
				W_Params<2>=W_Avenant
				W_Params<3>=W_Periode
				CALL CALCCOEFFTXHOR("",W_Params,W_Sortie)
				W_CoefReel=W_Sortie<1>

				W_CoefBase=0
				W_Libelle=""
				READ ENR_GRILLESCC FROM F.GRILLESCC, ENR_CONTRAT<20,W_Ind> THEN
					W_CoefBase=ENR_GRILLESCC<4,1>
					W_Libelle=ENR_GRILLESCC<1>
				END
			END ELSE
				W_CodeGrille="99999"
				W_CoefBase=1000
				W_CoefReel=1000
				W_Libelle="Sans grille"
			END
			
			GOSUB 120
		END
	REPEAT
	IF W_Indic="5" THEN GOSUB 80
RETURN
	
************************************************************************
******* Fonction d'ajout d' entre dans le tableau des rsultats *******
************************************************************************
70

	W_Trouve="FAUX"
	I=0
	LOOP
		I=I+1
	WHILE W_TablResult<I,1><>"" DO
		IF W_TablResult<I,1>=W_Niveau AND W_TablResult<I,2>=W_Cat THEN
			W_Trouve="VRAI"
			W_TablResult<I,3>=W_TablResult<I,3>+1
			W_TablResult<I,4>=W_TablResult<I,4>+W_NbHre
		END
	REPEAT
	IF W_Trouve="FAUX" THEN
		* Le tableau de sortie doit tre tri par ordre de niveau dcroissant puis pour chaque
		* niveau par ordre croissant des catgories. Pour faire un seul tri, on utilise une colonne
		* dans laquelle sont concatnes les niveaux et les catgories.
		* Hors le tri n'est pas dans le mme sens pour les niveaux et les catgories. Pour remdier
		*  cela, on "inverse" les catgories dans la colonne utilise pour le tri. De cette manire,
		* un seul tri sera ncessaire, plutt qu'un tri par niveau et pour chaque niveau un tri par
		* catgorie.
		W_CatInv=CHAR(((77-SEQ(W_Cat))+78))
		W_TablResult<I,1>=W_Niveau
		W_TablResult<I,2>=W_Cat
		W_TablResult<I,3>=1
		W_TablResult<I,4>=W_NbHre
		W_TablResult<I,5>=0
		W_TablResult<I,6>=0
		W_TablResult<I,7>=W_Niveau:W_CatInv
	END
	
RETURN

************************************************************
********* Calcul finaux de l'ETP et du pourcentage *********
************************************************************
80

	* -Calcul de l'ETP Gnral
	GOSUB 40
	
	* -Calcul du Pourcentage
	W_TotalPersonnel = 0
	FOR I = 1 TO DCOUNT(W_TablResult,CHAR(254))
		W_TotalPersonnel = W_TotalPersonnel + W_TablResult<I,3>
	NEXT
	FOR I = 1 TO DCOUNT(W_TablResult,CHAR(254))
		W_TablResult<I,6> = (INT((((W_TablResult<I,3> * 100) / W_TotalPersonnel) * 100) + (1/2)) / 100)
	NEXT

RETURN
************************************************************
* Tri du tableau de sortie                                 *
************************************************************
90

	W_Max=DCOUNT(W_TablResult,CHAR(254))
	FOR I = 1 TO W_Max
		J=I
		FOR K=J+1 TO W_Max
			IF W_TablResult<K,7>>W_TablResult<J,7> THEN
				J=K
			END
		NEXT K
		IF J<>I THEN
			FOR K = 1 TO 7
				W_Temp=W_TablResult<J,K>
				W_TablResult<J,K>=W_TablResult<I,K>
				W_TablResult<I,K>=W_Temp
			NEXT K
		END
	NEXT I
	
RETURN
************************************************************
* "Mise  vide" du Niveau 0 et de la catgorie "Z"         *
* Arrondis pour total 100%                                 *
************************************************************
100
	
	W_Total=0
	W_IndPlusFort=0
	W_PlusFort=0
	
	FOR I = 1 TO DCOUNT(W_TablResult,CHAR(254))
		IF W_TablResult<I,1>="0" THEN
			W_TablResult<I,1>="Non renseign"
			W_TablResult<I,7>="-":W_TablResult<I,7>[2,1]
		END
		IF W_TablResult<I,2>="Z" THEN
			W_TablResult<I,2>="Non renseigne"
			W_TablResult<I,7>=W_TablResult<I,7>[1,1]:"-"
		END
		IF W_TablResult<I,6>>W_PlusFort THEN
			W_PlusFort=W_TablResult<I,6>
			W_IndPlusFort=I
		END
		W_Total=W_Total+W_TablResult<I,6>
		IF W_Rupt="S" THEN
			READ ENR_SECTEUR FROM F.SECTEUR, W_AncValRupt ELSE ENR_SECTEUR=""
			W_TablResult<I,8>=ENR_SECTEUR<1>
		END
		IF W_Rupt="C" OR W_Rupt="D" THEN W_TablResult<I,8>=W_AncValRupt
	NEXT I
	
	W_Diff=100-W_Total
	W_TablResult<W_IndPlusFort,6>=W_TablResult<W_IndPlusFort,6>+W_Diff
	
RETURN
************************************************************
* Renseignement de ENR_TEMPO                               *
************************************************************
110
	
	FOR I = 1 TO DCOUNT(W_TablResult,CHAR(254))
		IF W_Rupt="" THEN
			IF W_Rendu<>"G" THEN
				ENR_TEMPO<-1> = W_TablResult<I,1>:CHAR(253):W_TablResult<I,2>:CHAR(253):W_TablResult<I,3>:CHAR(253):W_TablResult<I,5>:CHAR(253):W_TablResult<I,6>
			END ELSE
				ENR_TEMPO<-1> = W_TablResult<I,1>:";":W_TablResult<I,2>:";":W_TablResult<I,3>:";":W_TablResult<I,5>
			END
		END ELSE
			IF W_Rendu<>"G" THEN
				ENR_TEMPO<-1> = W_TablResult<I,8>:CHAR(253):W_TablResult<I,1>:CHAR(253):W_TablResult<I,2>:CHAR(253):W_TablResult<I,3>:CHAR(253):W_TablResult<I,5>:CHAR(253):W_TablResult<I,6>
			END ELSE
				ENR_TEMPO<-1> = W_TablResult<I,8>:';':W_TablResult<I,1>:";":W_TablResult<I,2>:";":W_TablResult<I,3>:";":W_TablResult<I,5>
			END
		END
	NEXT
	
RETURN
************************************************************
* Indicateur vieillesse technicit                         *
* Ajout dans W_TablResult                                  *
************************************************************
120

	W_Trouve="FAUX"
	FOR I = 1 TO DCOUNT(W_TablResult,CHAR(254))
		IF W_CodeGrille=W_TablResult<I,1> THEN
			W_TablResult<I,2>=W_TablResult<I,2>+1
			W_TablResult<I,3>=W_TablResult<I,3>+W_CoefBase
			W_TablResult<I,4>=W_TablResult<I,4>+W_CoefReel
			IF W_TablResult<I,6>="" THEN W_TablResult<I,6>=W_Libelle
			W_Trouve="VRAI"
			EXIT
		END
	NEXT I
	IF W_Trouve="FAUX" THEN
		W_TablResult<I,1>=W_CodeGrille
		W_TablResult<I,2>="1"
		W_TablResult<I,3>=W_CoefBase
		W_TablResult<I,4>=W_CoefReel
		W_TablResult<I,6>=W_Libelle
	END
	
RETURN
************************************************************
* Indicateur vieillesse technicit                         *
* Tri du tableau                                           *
************************************************************
130

	W_Max=DCOUNT(W_TablResult,CHAR(254))
	FOR I = 1 TO W_Max
		J=I
		FOR K=J+1 TO W_Max
			IF W_TablResult<K,6><W_TablResult<J,6> THEN
				J=K
			END
		NEXT K
		IF J<>I THEN
			FOR K = 1 TO 6
				W_Temp=W_TablResult<J,K>
				W_TablResult<J,K>=W_TablResult<I,K>
				W_TablResult<I,K>=W_Temp
			NEXT K
		END
	NEXT I

RETURN
************************************************************
* Indicateur vieillesse technicit                         *
* Calcul des ratios                                        *
************************************************************
140

	FOR I = 1 TO DCOUNT(W_TablResult,CHAR(254))
		W_TablResult<I,5>=W_TablResult<I,4>/W_TablResult<I,3>
		W_TablResult<I,5>=(W_TablResult<I,5>*100) "MR2"
		
		IF W_Rupt="S" THEN
			READ ENR_SECTEUR FROM F.SECTEUR, W_AncValRupt ELSE ENR_SECTEUR=""
			W_TablResult<I,7>=ENR_SECTEUR<1>
		END
		IF W_Rupt="C" OR W_Rupt="D" THEN W_TablResult<I,7>=W_AncValRupt
	NEXT I

RETURN
************************************************************
* Ecriture dans ENR_TEMPO                                  *
************************************************************
150

	FOR I = 1 TO DCOUNT(W_TablResult,CHAR(254))
		IF W_Rupt="" THEN
			IF W_Rendu<>"G" THEN
				ENR_TEMPO<-1>=W_TablResult<I,6>:CHAR(253):W_TablResult<I,2>:CHAR(253):W_TablResult<I,5>
			END ELSE
				ENR_TEMPO<-1>=W_TablResult<I,6>:';':W_TablResult<I,2>:';':W_TablResult<I,5>
			END
		END ELSE
			IF W_Rendu<>"G" THEN
				ENR_TEMPO<-1>=W_TablResult<I,7>:CHAR(253):W_TablResult<I,6>:CHAR(253):W_TablResult<I,2>:CHAR(253):W_TablResult<I,5>
			END ELSE
				ENR_TEMPO<-1>=W_TablResult<I,7>:';':W_TablResult<I,6>:';':W_TablResult<I,2>:';':W_TablResult<I,5>
			END
		END
	NEXT I

RETURN