W_Deb = TIME()
ENR_TEMPO = ""
EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
OPEN "", "TEMPO" TO F.TEMPO ELSE STOP

 

	OPEN "", "ABSENCESAIDANT" TO F.ABSENCESAIDANT ELSE STOP
	OPEN "", "ASSOCIATION" TO F.ASSOCIATION ELSE STOP
	OPEN "", "GRILLESCC" TO F.GRILLECC ELSE STOP
	OPEN "", "CIVILAIDANT" TO F.CIVILAIDANT ELSE STOP
	OPEN "", "CONTRAT" TO F.CONTRAT ELSE STOP
	OPEN "", "CONSTANTESPAIE" TO F.CONSTANTESPAIE ELSE STOP
	OPEN "", "CONVENTIONCOL" TO F.CONVENTIONCOL ELSE STOP
	OPEN "", "ETABLISSEMENT" TO F.ETABLISSEMENT ELSE STOP
	OPEN "", "FORMEXPAIDANT" TO F.FORMEXPAIDANT ELSE STOP
	OPEN "", "SECTEUR" TO F.SECTEUR ELSE STOP
	OPEN "", "TABLES" TO F.TABLES ELSE STOP
	OPEN "", "TEMPO" TO F.TEMPO ELSE STOP 
	OPEN "", "FUSION" TO F.FUSION ELSE 
		EXECUTE 'CREER-FICHIER DIR FUSION'
		OPEN "", "FUSION" TO F.FUSION ELSE
			PRINT "Le rpertoire Fusion dans lequel doit tre cr le fichier n'a pas pu tre cr dans la base."
			STOP
		END
	END



   READ ENR_DIPLOMES FROM F.TABLES,"DIPLOMESCCU" ELSE
	PRINT 'Vous devez attribuer les catgories de la CCU aux diplomes via le programme "Paramtres CCU" avant de lancer ce traitement.'
	STOP
   END

   READ ENR_FORMPRO FROM F.TABLES,"FORMPROCCU" ELSE
	PRINT 'Vous devez attribuer les catgories de la CCU aux formations professionnelles via le programme "Paramtres CCU" avant de lancer ce traitement.'
	STOP
   END

   LOOP
   PRINT "Code Association (3 chiffres) ?"
   INPUT W_CodAssoc
   IF W_CodAssoc = "" THEN 
	PRINT "Traitement abandonn."
	STOP 
   END

   READ ENR_ASSOCIATION FROM F.ASSOCIATION, W_CodAssoc ELSE ENR_ASSOCIATION = ""
   WHILE ENR_ASSOCIATION = ""
	PRINT "Cette association n'existe pas !"
   REPEAT

   LOOP
   PRINT "Code convention collective (2 chiffres) ?"
   INPUT W_CCN
   IF W_CCN = "" THEN 
	PRINT "Traitement abandonn."
	STOP 
   END

   READ ENR_CONVENTIONCOL FROM F.CONVENTIONCOL, W_CCN ELSE ENR_CONVENTIONCOL = ""
   WHILE ENR_CONVENTIONCOL = ""
	PRINT "Cette convention collective n'existe pas !"
   REPEAT
   GOSUB 10


READ ENR_CONSTANTESPAIE FROM F.CONSTANTESPAIE,"1" ELSE ENR_CONSTANTESPAIE=""


EXECUTE 'SELECT ETABLISSEMENT AVEC @ID = "':W_CodAssoc:']"'
W_Fin = "F"
W_SMICEtab = ""
W_HoraireEtab = ""
LOOP
	READNEXT W_Cle ELSE W_Fin = "V"
WHILE W_Fin = "F"
	READ ENR_ETAB FROM F.ETABLISSEMENT, W_Cle THEN
		IF ENR_ETAB<31> = "" THEN ENR_ETAB<31> = 0
		IF ENR_ETAB<31> < ENR_CONSTANTESPAIE<3, 1> THEN
			W_SMICEtab<W_Cle[4,3]> = ENR_CONSTANTESPAIE<3, 1>
		END ELSE
			W_SMICEtab<W_Cle[4,3]> = ENR_ETAB<31>
		END
		IF ENR_ETAB<16> # "" AND ENR_ETAB<16> # 0 THEN
			W_HoraireEtab<W_Cle[4,3]> = INT(ENR_ETAB<16> * 52 / 12 + 1/2)/100
		END ELSE
			W_HoraireEtab<W_Cle[4,3]> = 169
		END
	END
REPEAT

W_ReqContratCCU = ""
EXECUTE 'SELECT CONTRAT AVEC 1 = "':W_CCN:'" AND AVEC 65 # "O" AND AVEC 2 = "':W_CodAssoc:'" AND AVEC 6 = "P" AND AVEC 8 >= "':DATE():'" OR = "" PAR NomPrenomAidantContrat'
EXECUTE 'SAUVE-LISTE W_ReqContratCCU'
EXECUTE 'LISTE W_ReqContratCCU' RETURNING MSGCODE
IF MSGCODE<1> = "209" THEN
*	IF W_NomUtilisateur # "" THEN
*		ENR_TEMPO<1> = "Aucun contrat ne rpond aux critres de slection."
*		WRITE ENR_TEMPO ON F.TEMPO, "EXCELCCU":W_NomUtilisateur
*	END ELSE
		PRINT "Aucun contrat ne rpond aux critres de slection."
*	END
*
	STOP
END


W_Fin = "F"
W_Resultat = ""
W_Resultat<1> = "Matricule aidant;Nom;Prnom;1ere ligne de l'adresse;2eme ligne de l'adresse;Code postal;Ville;Secteur;Date de naissance;Diplme;Date d'entre;Dure mensuelle du travail;Categorie;Coefficient;Nationalit;Sexe;Contrat modul"
W_IndResultat = 2
i = 0
W_ReqAbsCCU = ""
W_TabAbsArret = ""
SELECT F.CONTRAT TO W_ReqContratCCU
LOOP
	READNEXT W_Cle FROM W_ReqContratCCU ELSE W_Fin = "V"
WHILE W_Fin = "F"
	READ ENR_CONTRAT FROM F.CONTRAT, W_Cle THEN
	  READ ENR_CIVILAIDANT FROM F.CIVILAIDANT, W_Cle[1,5] THEN		
		IF W_MaladieAssimilee = "" AND W_PerRef = "" THEN
			GOSUB 10
		END

		*Donnes aidant 
		GOSUB 100
		W_Resultat<W_IndResultat,1> = W_Cle[1,5]
		W_Resultat<W_IndResultat,2> = W_Nom
		W_Resultat<W_IndResultat,3> = W_Prenom
		W_Resultat<W_IndResultat,4> = W_Adr1
		W_Resultat<W_IndResultat,5> = W_Adr2
		W_Resultat<W_IndResultat,6> = W_CP
		W_Resultat<W_IndResultat,7> = W_Ville
		W_Resultat<W_IndResultat,8> = W_LibSecteur
		W_Resultat<W_IndResultat,9> = W_DateNais
		* W_Resultat<W_IndResultat,10> = W_57Ans


		* Calcul jrs suspension
		* GOSUB 200
		* W_Resultat<W_IndResultat,11> = W_JrsSuspAbs


		* Diplomes
		GOSUB 300
		W_Resultat<W_IndResultat,10> = W_Diplome
		* W_Resultat<W_IndResultat,13> = W_DateDiplome


		* Donnes contrat	
		GOSUB 400	
		W_Resultat<W_IndResultat,11> = W_DateEntree
		W_Resultat<W_IndResultat,12> = W_DureeMens

		* W_Resultat<W_IndResultat,15> = W_TauxHor
		* W_Resultat<W_IndResultat,17> = W_HoraireEtabContrat
		* W_Resultat<W_IndResultat,18> = W_DateDepGrille
		* W_Resultat<W_IndResultat,19> = W_JrsSuspContrat
		* W_Resultat<W_IndResultat,20> = W_DateAnc

		W_Resultat<W_IndResultat,13> = W_Categorie
		W_Resultat<W_IndResultat,14> = W_Coeff

		W_Resultat<W_IndResultat,15> = W_Nationalite
		W_Resultat<W_IndResultat,16> = W_Sexe
		W_Resultat<W_IndResultat,17> = W_Module

		
		*W_Resultat<W_IndResultat,21> = 
		*W_Resultat<W_IndResultat,22> = 
		*W_Resultat<W_IndResultat,23> = 
		*W_Resultat<W_IndResultat,24> = 
		*W_Resultat<W_IndResultat,25> = 
		*W_Resultat<W_IndResultat,26> = 

		
		W_IndResultat = W_IndResultat + 1


	  END
	END
REPEAT
CONVERT CHAR(253) TO ';' IN W_Resultat
WRITE W_Resultat ON F.FUSION, "ExportAidantExcel.csv"

W_Deb = (TIME() - W_Deb)
W_Deb = INT(W_Deb/3600):" hre ":INT(MOD(W_Deb,3600)/60):" mn ":MOD(MOD(W_Deb,3600),60):" secondes" 
PRINT W_Deb


STOP


10
*************************************************
* Initialisation des variables CCN ncessaires	*
*  l'valuation des jours de suspension par 	*
* rapport  l' absentisme			*
*************************************************
W_MaladieAssimilee=""
W_PerRef=""
W_PrixPoint = ""
				
	W_MaladieAssimilee = INT(ENR_CONVENTIONCOL<17>)
	W_PrixPoint = ENR_CONVENTIONCOL<8,1>/100
			
	* Retraite oblige : on dfinit les priodes sur la 40aine d'annes de cotisation possible
	IF ENR_CONVENTIONCOL<28> = 0 THEN
		* de juin a mai
		FOR i = 1 TO 40
			W_PerRef<i,1> = ICONV("01/06/":2004-i,"D4/") 
			W_PerRef<i,2> = ICONV("31/05/":2005-i,"D4/") 
		NEXT i
	END ELSE
		* Anne civile
		FOR i = 1 TO 40
			W_PerRef<i,1> = ICONV("01/01/":2004-i,"D4/") 
			W_PerRef<i,2> = ICONV("31/05/":2004-i,"D4/") 
		NEXT i
	END
RETURN

100
*************************************************
* 		Donnes aidant			*
*************************************************
W_Nom = ""
W_Prenom = ""
W_Adr1 = ""
W_Adr2 = ""
W_CP = ""
W_Ville = ""
W_LibSecteur = ""
W_DateNais = ""
W_57Ans = ""
W_Nationalite = ""
W_Sexe=""

W_Nom = ENR_CIVILAIDANT<2>
W_Prenom = ENR_CIVILAIDANT<3>
W_Adr1 = TRIM(ENR_CIVILAIDANT<5>:" ":ENR_CIVILAIDANT<6>:" ":ENR_CIVILAIDANT<7>:" ":ENR_CIVILAIDANT<8>)
W_Adr2 = TRIM(ENR_CIVILAIDANT<9>)
IF W_Adr1 = "" THEN
	W_Adr1 = W_Adr2
	W_Adr2 = ""
END
CONVERT ";" TO ' ' IN W_Adr1
CONVERT ";" TO ' ' IN W_Adr2

W_CP = ENR_CIVILAIDANT<10>
W_Ville = ENR_CIVILAIDANT<11>

READ ENR_SECTEUR FROM F.SECTEUR, ENR_CIVILAIDANT<31> ELSE ENR_SECTEUR = ""
W_LibSecteur = ENR_SECTEUR<1>

W_DateNais = OCONV(ENR_CIVILAIDANT<26>,"D2/")

IF ENR_CIVILAIDANT<26> <= -7489 THEN
W_57Ans = "X"
END ELSE
W_57Ans = ""
END

W_Nationalite=ENR_CIVILAIDANT<19>
W_Sexe=ENR_CIVILAIDANT<16>
RETURN

200
*****************************************************************
*   Calcul des jours de suspensions  partir de l'absentisme	*
*****************************************************************
W_JrsSuspAbs = 0
FOR i = 1 TO 40
	W_TabAbsArret<i> = 0
NEXT
* Nb : W_TabAbsArret<1> = nb jrs Maladies sur 2003 si CCN en anne civile, du 01/06/03 au 31/05/4 sinon

* W_DateDerniereCloture es trutilise dans la procdure 400 : recherche du taux horaire...
IF ENR_CONTRAT<63> # "" THEN
   W_DateDerniereCloture = ENR_CONTRAT<63>[5,2] + 1
   IF W_DateDerniereCloture = 13 THEN
	* ne devrait jamais arriver car contrats actifs a la date systme, ie avant 07/03
	W_DateDerniereCloture = ICONV("31/12/":ENR_CONTRAT<63>[1,4],"D4/")
   END ELSE
	W_DateDerniereCloture = ICONV("01/":W_DateDerniereCloture:"/":ENR_CONTRAT<63>[1,4],"D4/")-1
   END
END ELSE
   W_DateDerniereCloture = DATE()
END
EXECUTE 'SELECT ABSENCESAIDANT = "':W_Cle[1,5]:']" AVEC NumMotifAidant = "01" OR = "13" OR = "12" AND AVEC DebAbsAidant <= "':W_DateDerniereCloture:'" PAR-DECR DebAbsAidant'
EXECUTE 'SAUVE-LISTE W_ReqAbsCCU'
EXECUTE 'LISTE W_ReqAbsCCU' RETURNING MSGCODE
IF MSGCODE<1> # "209" THEN
	SELECT F.ABSENCESAIDANT TO W_ReqAbsCCU
	W_FinAbs = "F"
	LOOP
	   READNEXT W_CleAbs FROM W_ReqAbsCCU ELSE W_FinAbs = "V"
	WHILE W_FinAbs = "F"
	   READ ENR_ABSENCESAIDANT FROM F.ABSENCESAIDANT, W_CleAbs THEN			
		IF ENR_ABSENCESAIDANT<2> > W_DateDerniereCloture THEN
			ENR_ABSENCESAIDANT<2> = W_DateDerniereCloture		
		END

		BEGIN CASE
			CASE W_CleAbs[6,2] = "12"
			* Congs sans solde
				W_JrsSuspAbs = W_JrsSuspAbs + ENR_ABSENCESAIDANT<2> - W_CleAbs[8,LEN(W_CleAbs)-7] + 1

			CASE W_CleAbs[6,2] = "13"
			* cong parental
				W_JrsSuspAbs = W_JrsSuspAbs + (ENR_ABSENCESAIDANT<2> - W_CleAbs[8,LEN(W_CleAbs) - 7] + 1)/2

			CASE W_CleAbs[6,2] = "01"
				W_Trouve = "F"
				i = 0
				LOOP
				   i = i + 1
				WHILE W_PerRef<i,2> >= W_CleAbs[8,LEN(W_CleAbs) - 7]
					IF W_PerRef<i,1> <= ENR_ABSENCESAIDANT<2> THEN
						IF W_CleAbs[8,LEN(W_CleAbs) - 7] < W_PerRef<i,1> THEN
							W_TabAbsArret<i> = W_TabAbsArret<i> + ENR_ABSENCESAIDANT<2> - W_PerRef<i,1> + 1
							ENR_ABSENCESAIDANT<2>= W_PerRef<i,1> - 1
						END ELSE
							W_TabAbsArret<i> = W_TabAbsArret<i> + ENR_ABSENCESAIDANT<2> - W_CleAbs[8,LEN(W_CleAbs) - 7] + 1
						END
					END 		
				REPEAT
		END CASE
	   END
	REPEAT
	FOR i = 1 TO 40
	   IF W_TabAbsArret<i> > W_MaladieAssimilee THEN
		W_JrsSuspAbs = W_JrsSuspAbs + W_TabAbsArret<i> - W_MaladieAssimilee
	   END
	NEXT i
END
RETURN


300
*********************************
* 	     Diplme		*
*********************************
W_Diplome = ""
W_DateDiplome = ""
W_ValeurDiplome = 0
* NB : SEQ("") = 0 (vrifi)
READ ENR_FORMEXPAIDANT FROM F.FORMEXPAIDANT, W_Cle[1,5] THEN
   IF INDEX(ENR_DIPLOMES<2>,ENR_FORMEXPAIDANT<2>,1) # 0 AND ENR_FORMEXPAIDANT<2> # "" THEN
	W_ValeurDiplome = SEQ(ENR_DIPLOMES<4,INT(INDEX(ENR_DIPLOMES<2>,ENR_FORMEXPAIDANT<2>,1)/3) + 1>)
	W_DateDiplome = ICONV("01/01/":ENR_FORMEXPAIDANT<3>,"D4/")
	W_Diplome = ENR_DIPLOMES<3,INT(INDEX(ENR_DIPLOMES<2>,ENR_FORMEXPAIDANT<2>,1)/3) + 1>
   END
   i = 0
   LOOP
	i = i + 1
   WHILE ENR_FORMEXPAIDANT<6,i> # ""
	IF INDEX(ENR_FORMPRO<2>,ENR_FORMEXPAIDANT<6,i>,1) # 0 AND ENR_FORMEXPAIDANT<6,i> # "" THEN
	   IF SEQ(ENR_FORMPRO<4,INT(INDEX(ENR_FORMPRO<2>,ENR_FORMEXPAIDANT<6,i>,1)/4) + 1>) > W_ValeurDiplome THEN
		W_ValeurDiplome = SEQ(ENR_FORMPRO<4,INT(INDEX(ENR_FORMPRO<2>,ENR_FORMEXPAIDANT<6,i>,1)/4) + 1>)
		W_DateDiplome = ENR_FORMEXPAIDANT<5,i>
		W_Diplome = ENR_FORMPRO<3,INT(INDEX(ENR_FORMPRO<2>,ENR_FORMEXPAIDANT<6,i>,1)/4) + 1>
	   END ELSE
		IF SEQ(ENR_FORMPRO<4,INT(INDEX(ENR_FORMPRO<2>,ENR_FORMEXPAIDANT<6,i>,1)/4) + 1>) = W_ValeurDiplome THEN
		   IF ENR_FORMEXPAIDANT<5,i> < W_DateDiplome THEN
			W_ValeurDiplome = SEQ(ENR_FORMPRO<4,INT(INDEX(ENR_FORMPRO<2>,ENR_FORMEXPAIDANT<6,i>,1)/4) + 1>)
			W_DateDiplome = ENR_FORMEXPAIDANT<5,i>
			W_Diplome = ENR_FORMPRO<3,INT(INDEX(ENR_FORMPRO<2>,ENR_FORMEXPAIDANT<6,i>,1)/4) + 1>
		   END
		END
	   END
	END
   REPEAT
   W_DateDiplome = OCONV(W_DateDiplome,"D2/")
END
* Nb : W_ValeurDiplome sert aussi en procdure 400 (dfinition de la catgorie)
RETURN

400
*********************************
*      Donnes du contrat	*
*********************************
W_DateEntree = ""
W_TauxHor = ""
W_DureeMens = ""
W_DateDepGrille = ""
W_JrsSuspContrat = ""
W_DateAnc = ""
W_Categorie = ""
W_HoraireEtabContrat = ""
W_Coeff = ""
W_Module=""

W_DateEntree = OCONV(ENR_CONTRAT<7>,"D2/")
IF ENR_CONTRAT<23> # "" THEN
	W_TauxHor = ENR_CONTRAT<23,DCOUNT(ENR_CONTRAT<14>,CHAR(253))>/1000
END ELSE

  READ ENR_GRILLECC FROM F.GRILLECC,ENR_CONTRAT<20,DCOUNT(ENR_CONTRAT<14>,CHAR(253))> THEN


    W_MoisSuspension = INT((ENR_CONTRAT<70> / 100) / 30)
    W_Date = OCONV(ENR_CONTRAT<21, DCOUNT(ENR_CONTRAT<14>,CHAR(253))>,"D4/")
    W_MoisSuspension = W_MoisSuspension + W_Date[4,2]
    IF W_MoisSuspension >= 13 THEN
        W_Date = W_Date[7,4] + INT(W_MoisSuspension / 12)
        W_MoisSuspension = MOD(W_MoisSuspension,12)
    END ELSE
        W_Date = W_Date[7,4]
    END
    IF LEN(W_MoisSuspension) < 2 THEN
        W_MoisSuspension = "0":W_MoisSuspension
    END
    W_Debut = OCONV(W_DateDerniereCloture,"D4/")
    W_Debut = W_Debut[7,4]:W_Debut[4,2]
    W_Date = W_Date:W_MoisSuspension
    W_NbAnnee = W_Debut - W_Date
    IF W_NbAnnee < 0 THEN W_NbAnnee = 0
    W_NbAnnee = INT(W_NbAnnee / 100) * 100
    
    j = 1
    LOOP
    WHILE ENR_GRILLECC<2, j> > W_NbAnnee AND ENR_GRILLECC<2, j> <> "" OR ENR_GRILLECC<3, j> <= W_NbAnnee AND ENR_GRILLECC<2, j> <> ""
        j = j + 1
    REPEAT
    
    W_TauxHor = ENR_GRILLECC<4, j>/1000
    
    IF W_TauxHor # "" THEN
        IF ENR_GRILLECC<5> = "C" THEN
            W_TauxHor = W_TauxHor * W_PrixPoint / W_HoraireEtab<ENR_CONTRAT<3>[4,3]>
            *W_TauxHor = Int(W_TauxHor * 1000 + 1 / 2)
        END
    END ELSE
	W_TauxHor = 0
    END
  END ELSE
    W_TauxHor = 0
  END
END
IF W_TauxHor < W_SMICEtab<ENR_CONTRAT<3>[4,3]>/100 THEN
	W_TauxHor = W_SMICEtab<ENR_CONTRAT<3>[4,3]>/100
END
W_TauxHor = INT(W_TauxHor * 1000)/1000"R3"

BEGIN CASE
   CASE ENR_CONTRAT<25,DCOUNT(ENR_CONTRAT<14>,CHAR(253))> = "1"
	W_DureeMens = INT(ENR_CONTRAT<24,DCOUNT(ENR_CONTRAT<14>,CHAR(253))> * 5200 / 12 + 1/2)/100
   CASE ENR_CONTRAT<25,DCOUNT(ENR_CONTRAT<14>,CHAR(253))> = "2"
	W_DureeMens = INT(ENR_CONTRAT<24,DCOUNT(ENR_CONTRAT<14>,CHAR(253))> * 2600 / 12 + 1/2)/100
   CASE ENR_CONTRAT<25,DCOUNT(ENR_CONTRAT<14>,CHAR(253))> = "3"
	W_DureeMens = ENR_CONTRAT<24,DCOUNT(ENR_CONTRAT<14>,CHAR(253))>
   CASE ENR_CONTRAT<25,DCOUNT(ENR_CONTRAT<14>,CHAR(253))> = "4"
	W_DureeMens = INT(ENR_CONTRAT<24,DCOUNT(ENR_CONTRAT<14>,CHAR(253))> *100/ 12  + 1/2)/100
END CASE
W_DureeMens = W_DureeMens / 100

W_DateDepGrille = OCONV(ENR_CONTRAT<21,DCOUNT(ENR_CONTRAT<14>,CHAR(253))>,"D4/")
W_Coeff=ENR_CONTRAT<22,DCOUNT(ENR_CONTRAT<14>,CHAR(253))>/1000

W_JrsSuspContrat = INT(ENR_CONTRAT<70>) / 100
W_DateAnc = OCONV(ENR_CONTRAT<21,DCOUNT(ENR_CONTRAT<14>,CHAR(253))> + INT(ENR_CONTRAT<70>/100),"D2/")
IF ENR_CONTRAT<20,DCOUNT(ENR_CONTRAT<14>,CHAR(253))> = "01002" OR ENR_CONTRAT<20,DCOUNT(ENR_CONTRAT<14>,CHAR(253))> = "03002" OR ENR_CONTRAT<20,DCOUNT(ENR_CONTRAT<14>,CHAR(253))> = "08002" OR ENR_CONTRAT<20,DCOUNT(ENR_CONTRAT<14>,CHAR(253))> = "04017" OR ENR_CONTRAT<20,DCOUNT(ENR_CONTRAT<14>,CHAR(253))> = "04016" OR W_ValeurDiplome = SEQ("C") THEN
	W_Categorie = "C1"
END ELSE
	IF W_ValeurDiplome = SEQ("B") THEN
		W_Categorie = "B1"
	END ELSE
		W_Categorie = "A1"
	END
END

IF W_CCN = "06" THEN
	W_Categorie = "D1"
END

IF ENR_CONTRAT<5>="M" THEN
	W_Module="OUI"
END

W_HoraireEtabContrat = W_HoraireEtab<ENR_CONTRAT<3>[4,3]>

RETURN
