*PARAMETRES*
*Comptage des requtes LogisRoute*
*Date de dbut (sous la forme JJ/MM/AAAA) |10X|DTE|O*
*Date de fin (sous la forme JJ/MM/AAAA) |10X|DTE|O*
*Code aidant|5N|TXT|N*
*Code Entit|3N|TXT|N*
*Code secteur|3N|TXT|N*
*FIN PARAMETRES*

SUBROUTINE RECHINTERVAC(RETURNVAL,PARAMETRES,W_Sortie)

EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"

OPEN "","TAMPONMAPPY" TO F.TAMPONMAPPY ELSE PRINT "ERREUR OUVERTURE MAPPY"
OPEN "","PARAMLOGISROUTE" TO F.PARAMLOGISROUTE ELSE PRINT "ERREUR OUVERTURE PARAMLOGISROUTE"

W_DateDeb=PARAMETRES<1>
W_DateFin=PARAMETRES<2>
W_CodeAidant = PARAMETRES<3>
W_CodeEntite = PARAMETRES<4>
W_CodeSecteur = PARAMETRES<5>

*W_DateDeb = "01/11/2010"
*W_DateFin = "30/11/2010"
*W_CodeAidant = "00096"

* Chargement des paramtres
GOSUB 999

* Modif Guillaume DA11043 08/04/2011
*EXECUTE 'VIDER-FICHIER TAMPONMAPPY'

*************************************************************
*	TRAITEMENT POUR RECUPERER LES INTER-VACATIONS POUR LE   *
*	REQUETAGE SUR LE SITE MAPPY.FR							*
* --------------------------------------------------------- *
* GUILLAUME									 JANVIER 2009 	*
*************************************************************
DATEDEB=ICONV(W_DateDeb,"D4/")
DATEFIN=ICONV(W_DateFin,"D4/")

S_InterVac = 0
S_GeoLoc = 0

IF W_OrigineInterVac = "1" THEN

    OPEN "","TPSTEMPO" TO F.TEMPO ELSE PRINT "ERREUR OUVERTURE TEMPO"
    OPEN "","TEMPO" TO F.TEMP ELSE PRINT "ERREUR OUVERTURE TEMPO"
    
    * Modif Guillaume DA11043 08/04/2011
    IF W_CodeSecteur <> "" THEN
        W_ParamSecteur = "S|":W_CodeSecteur
    END ELSE
        W_ParamSecteur = "|"
    END

    EXECUTE 'AFFICHEPLANNING |RECHINTERVAC|':W_CodeEntite:'|PM|':DATEDEB:'|':DATEFIN:'|':W_ParamSecteur:'|':W_CodeAidant:'|E'
    * Fin modif Guillaume DA11043 08/04/2011
    
        
    **On lit le fichier gnr par le pr afficheplanning
    READ ENR_TEMPO FROM F.TEMPO,"AFFICHEPLANNINGRECHINTERVAC" THEN
    
    	FOR i=1 TO DCOUNT(ENR_TEMPO,CHAR(254))
            * Modif Guillaume DA10251 08/12/2010
            * On stocke le code de l'aidant trait pour les i suivants            
            IF ENR_TEMPO<i>[1,7] = "#Interv" THEN W_AidantEnCours = ENR_TEMPO<i>[8,5]
            
        	IF ENR_TEMPO<i>[1,7] # "#Interv" THEN
    			GOSUB 10
    		END
    	NEXT i
    	
    END
    
    W_Sortie = "Nombre d'inter-vacations : ":S_InterVac:CHAR(10):CHAR(13):"Nombre de golocalisation : ":S_GeoLoc
    
END ELSE


    OPEN "","TLGPOINTAGE" TO F.TLGPOINTAGE ELSE PRINT "ERREUR OUVERTURE TLGPOINTAGE"
    
    W_AidantPrec = ""
    ENR_TLGPRESTPREC = ""
    W_RequetePointage = ""
    
    W_Fini = "FAUX"
    W_Requete = 'SELECT TLGPOINTAGE AVEC 3 >= "' : DATEDEB : '" AND AVEC DateDebInterv <= "':DATEFIN:'" AND AVEC TypeActivite = "P"'
    
    IF W_CodeAidant <> "" THEN
        W_Requete = W_Requete:' AND AVEC CodeAidant = "':W_CodeAidant:'"'
    END
    
    W_Requete = W_Requete:' PAR CodeAidant PAR DateDebInterv PAR HeureDebInterv'
    
    EXECUTE W_Requete
    EXECUTE 'SAUVE-LISTE W_RequetePointage'
    EXECUTE "LISTE W_RequetePointage" RETURNING MSGCODE

    IF MSGCODE<1> # 209 THEN
     	SELECT F.TLGPOINTAGE TO W_RequetePointage
     	

    	LOOP WHILE W_Fini = "FAUX"
            READNEXT W_ClePointage FROM W_RequetePointage ELSE W_Fini = "VRAI"
            READ ENR_TLGPOINTAGE FROM F.TLGPOINTAGE, W_ClePointage ELSE ENR_TLGPOINTAGE = ""
            GOSUB 20

            W_PointagePrec = W_ClePointage
            W_AidePrec = W_ClePointage[9,5]
            
            ENR_TLGPRESTPREC = ENR_TLGPOINTAGE

        REPEAT
        
        * Modif Guillaume DA10251 08/12/2010
        * Inscription du trajet aid-aidant s'il y a lieu
        IF (W_HreDeb * 100 / 60) >= W_AidantAideHeureAM THEN
            WRITE ENR_VIDE ON F.TAMPONMAPPY, "B":W_DernierPointage[9,5]:"S":W_DernierPointage[3,5]
        END

    END
    W_Sortie = "Nombre d'inter-vacations : ":S_InterVac:CHAR(10):CHAR(13):"Nombre de golocalisation : ":S_GeoLoc
END

RETURN
    
    
****************************************************************************
* Recherche des intervacations sur le planning
10
    * Modif Guillaume DA10251 08/12/2010
    *  - Si on a une intervention le matin, on compte le trajet aidant-aide de dbut de journe
    *  - Si on a une intervention l'aprs-midi, on compte le trajet aide-aidant de fin de journe.
    W_CodeAideIntervMatin = ""
    W_CodeAideIntervAM = ""
    ENR_VIDE = ""
    
	W_Count=DCOUNT(ENR_TEMPO<i,1>,CHAR(252))
	FOR y=1 TO W_Count
		IF ENR_TEMPO<i,1,y>[1,7]="IntervP" THEN

            * Modif Guillaume DA10251 08/12/2010            
            * Si gestion aidant-aide
            IF W_AidantAideKM = 1 OR W_AidantAideTpsTraj = 1 THEN
                IF ENR_TEMPO<i,1,y>[1,7] # "INDISPO" THEN
                    *  Si heure de dbut de l'intervention <  la sparation de l'aprs-midi => on prend le premier aid de la journe
                    IF ENR_TEMPO<i,2,y> < W_AidantAideHeureAM AND W_CodeAideIntervMatin = "" THEN W_CodeAideIntervMatin = ENR_TEMPO<i,4,y>[6,5]
                    
                    *  Si Heure de fin de l'intervention >=  la sparation de l'aprs-midi => on prend le dernier aid de la journe par crasement 
                    *  de la variable W_IntervAM.                
                    IF ENR_TEMPO<i,3,y> >= W_AidantAideHeureAM THEN W_CodeAideIntervAM = ENR_TEMPO<i,4,y>[6,5]
                END
            END
            

			FOR z=y+1 TO W_Count
                * Modif Guillaume DA10199 23/08/2010
                IF ENR_TEMPO<i,1,z>[1,7]="INDISPO" THEN 
                    * On passe le tour
                    NULL
    			END ELSE

    				IF ENR_TEMPO<i,1,z>[1,7]="IntervP" THEN
                        W_HreFin=ENR_TEMPO<i,3,y>
    					W_HreDeb=ENR_TEMPO<i,2,z>
    					* Modif Guillaume DA10092 07/04/2010
    					IF INT(W_HreDeb)-INT(W_HreFin) <= W_DurMaxInterVac AND INT(W_HreDeb)-INT(W_HreFin) >= W_DurMinInterVac THEN
                            
                            READ ENR_VIDE FROM F.TAMPONMAPPY, "B":ENR_TEMPO<i,4,y>[6,5]:"B":ENR_TEMPO<i,4,z>[6,5] ELSE
                                ENR_VIDE = ""
                                WRITE ENR_VIDE ON F.TAMPONMAPPY, "B":ENR_TEMPO<i,4,y>[6,5]:"B":ENR_TEMPO<i,4,z>[6,5]
                                S_InterVac = S_InterVac + 1    
                            END
                            
                            READ ENR_VIDE FROM F.TEMP, ENR_TEMPO<i,4,y>[6,5] ELSE
                                ENR_VIDE = ""
                                WRITE ENR_VIDE ON F.TEMP, ENR_TEMPO<i,4,y>[6,5]
                                S_GeoLoc = S_GeoLoc + 1
                            END
                            
                            READ ENR_VIDE FROM F.TEMP, ENR_TEMPO<i,4,z>[6,5] ELSE
                                ENR_VIDE = ""
                                WRITE ENR_VIDE ON F.TEMP, ENR_TEMPO<i,4,z>[6,5]
                                S_GeoLoc = S_GeoLoc + 1
                            END

    						EXIT
    					END
    					EXIT
    				END ELSE
    					*  si # de intervP alors on ne paie pas 
    					EXIT
    				END
    			END
			NEXT z
		END
	NEXT y
	
	* Modif Guillaume DA10251 08/12/2010
	* Si gestion aidant-aid
    IF W_AidantAideKM = 1 OR W_AidantAideKM = 1 THEN
    	* Si on a un aid le matin
    	IF W_CodeAideIntervMatin <> "" THEN
            READ ENR_VIDE FROM F.TAMPONMAPPY, "S":W_AidantEnCours:"B":W_CodeAideIntervMatin ELSE
                ENR_VIDE = ""
                WRITE ENR_VIDE ON F.TAMPONMAPPY, "S":W_AidantEnCours:"B":W_CodeAideIntervMatin
                S_InterVac = S_InterVac + 1    
            END
            
            READ ENR_VIDE FROM F.TEMP, "S":W_AidantEnCours ELSE
                ENR_VIDE = ""
                WRITE ENR_VIDE ON F.TEMP, "S":W_AidantEnCours
                S_GeoLoc = S_GeoLoc + 1
            END
            
            READ ENR_VIDE FROM F.TEMP, "B":W_CodeAideIntervMatin ELSE
                ENR_VIDE = ""
                WRITE ENR_VIDE ON F.TEMP, "B":W_CodeAideIntervMatin
                S_GeoLoc = S_GeoLoc + 1
            END


        END
        
        * Si on a un aid l'aprs-midi
        IF W_CodeAideIntervAM <> "" THEN
            READ ENR_VIDE FROM F.TAMPONMAPPY, "B":W_CodeAideIntervAM:"S":W_AidantEnCours ELSE
                ENR_VIDE = ""
                WRITE ENR_VIDE ON F.TAMPONMAPPY, "B":W_CodeAideIntervAM:"S":W_AidantEnCours
                S_InterVac = S_InterVac + 1    
            END
            
            READ ENR_VIDE FROM F.TEMP, "B":W_CodeAideIntervAM ELSE
                ENR_VIDE = ""
                WRITE ENR_VIDE ON F.TEMP, "B":W_CodeAideIntervAM
                S_GeoLoc = S_GeoLoc + 1
            END
            
            READ ENR_VIDE FROM F.TEMP, "S":W_AidantEnCours ELSE
                ENR_VIDE = ""
                WRITE ENR_VIDE ON F.TEMP, "S":W_AidantEnCours
                S_GeoLoc = S_GeoLoc + 1
            END

            WRITE ENR_VIDE ON F.TAMPONMAPPY, "B":W_CodeAideIntervAM:"S":W_AidantEnCours
        END
    END
            
	
RETURN

****************************************************************************
* Recherche des intervacations sur la tlgestion
20
    ENR_VIDE = ""
    
    W_HreFin = (ENR_TLGPRESTPREC<4>[1,2] * 60) + ENR_TLGPRESTPREC<4>[4,2]
    W_HreDeb = (W_ClePointage[19,2] * 60) + W_ClePointage[22,2]
    
    W_NbJours = W_ClePointage[14,5] - ENR_TLGPRESTPREC<3>
    
    W_DureeInterVac = W_HreDeb - W_HreFin + (1440 * W_NbJours)
    
    * Modif Guillaume DA10092 07/04/2010
    IF W_DureeInterVac <= W_DurMaxInterVacMin AND W_DureeInterVac >= W_DurMinInterVacMin THEN        
        

        WRITE ENR_VIDE ON F.TAMPONMAPPY, "B":W_AidePrec:"B":W_ClePointage[9,5]
	END
	
	* Modif Guillaume DA10251 08/12/2010
    * Si gestion Aidant-aid    
    IF W_AidantAideKM = 1 OR W_AidantAideTpsTraj = 1 THEN
        * Si on est sur une nouvelle journe *RUPTURE*
        IF W_ClePointage[14,5] # W_PointagePrec[14,5] THEN
            
            * Inscription du trajet aidant-aid s'il y a lieu
            IF (W_HreDeb * 100 / 60) < W_AidantAideHeureAM THEN
                WRITE ENR_VIDE ON F.TAMPONMAPPY, "S":W_ClePointage[3,5]:"B":W_ClePointage[9,5]
            END
            
            * Si pas premier pointage
            IF W_PointagePrec <> "" THEN
                * Inscription du trajet aid-aidant s'il y a lieu
                IF (W_HreDeb * 100 / 60) >= W_AidantAideHeureAM THEN
                    WRITE ENR_VIDE ON F.TAMPONMAPPY, "B":W_DernierPointage[9,5]:"S":W_DernierPointage[3,5]
                END
            END
        END ELSE
            * Ecrasement du dernier pointage en attendant la rupture de la journe
            W_DernierPointage = W_ClePointage
        END

    END


RETURN

****************************************************************************
* Chargement des paramtres
999
    READ ENR_PARAMLOGISROUTE FROM F.PARAMLOGISROUTE, "1" ELSE
        W_Sortie = "Erreur de paramtrage"
        STOP
    END
    
    W_DurMaxInterVac = (ENR_PARAMLOGISROUTE<1> * 100) / 60
    W_DurMaxInterVacMin = ENR_PARAMLOGISROUTE<1>
    W_OrigineInterVac = ENR_PARAMLOGISROUTE<9>
    
    * Modif Guillaume DA10092 07/04/2010
    W_DurMinInterVacMin = ENR_PARAMLOGISROUTE<10>
    IF W_DurMinInterVacMin = "" THEN W_DurMinInterVacMin = 0
	W_DurMinInterVac = (W_DurMinInterVacMin * 100) / 60
	
	* Modif Guillaume DA10251 08/12/2010
	W_AidantAideKM = ENR_PARAMLOGISROUTE<11>
    W_AidantAideTpsTraj = ENR_PARAMLOGISROUTE<12>
    
    W_AidantAideHeureAM = ENR_PARAMLOGISROUTE<13>[1,2] * 60 + ENR_PARAMLOGISROUTE<13>[3,2]
    W_AidantAideHeureAM = INT((W_AidantAideHeureAM * 100 / 60) + 1/2)

RETURN

	
RETURN