**********************************************************
* Cloture de la paie
* rgularisation des HISTORCUMUL suite  pbs de clture
* Vanessa
**********************************************************

* Ouvertures des fichiers

EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
OPEN "","CONTRAT" TO F.CONTRAT ELSE PRINT "OUVERTURE CONTRAT" ;* en criture
OPEN "","DETAILCALCUL" TO F.DETAILCALCUL ELSE PRINT "OUVERTURE DETAILCALCUL" ;* en lecture
OPEN "","HISTORCUMUL" TO F.HISTORCUMUL ELSE PRINT "OUVERTURE HISTORCUMUL" ;* en criture
OPEN "","RUBSAISIE" TO F.RUBSAISIE ELSE PRINT "OUVERTURE RUBSAISIE" ;* en lecture
OPEN "","RUBCHARGE" TO F.RUBCHARGE ELSE PRINT "OUVERTURE RUBCHARGE" ;* en lecture
OPEN "","TRANCHE" TO F.TRANCHE ELSE STOP

******************************************************************************

PRINT "Veuillez saisir une priode de dbut sous la forme AAAAMM. Vrifiez que l'entit n'est pas en dcalage de paie."
INPUT W_PerDeb 

PRINT "Veuillez saisir une priode de fin sous la forme AAAAMM"
INPUT W_PerFin

PRINT "Veuillez saisir un type d'activit (P/M)"
INPUT W_Act

PRINT "Veuillez saisir le code aidant"
INPUT W_Aidant

   W_DateDeb=ICONV("01/":W_PerDeb[5,2]:"/":W_PerDeb[1,4],"D4/")

   W_Mois=W_PerFin[5,2]
   W_An=W_PerFin[1,4]

   W_Mois=W_Mois+1
   IF W_Mois MATCH "1N" THEN W_Mois = "0":W_Mois
   IF W_Mois="13" THEN
      W_Mois="01"
      W_An=W_An+1
   END
   W_DateFin=ICONV("01/":W_Mois:"/":W_An,"D4/")-1
   W_An=W_PerFin[1,4]

   REQUETECONTRAT=""
   REQUETECUMUL=""
   
   EXECUTE 'SELECT HISTORCUMUL AVEC CodeAidant = "':W_Aidant:'" AND AVEC PeriodeHistCum = "':W_An:'" AND AVEC PrestManda = "':W_Act:'"'
   EXECUTE 'SAUVE-LISTE REQUETECUMUL'
   EXECUTE 'LISTE REQUETECUMUL' CAPTURING MSG RETURNING MSGCODE

   IF MSGCODE<1>#209 THEN 

      W_Fini="FAUX"
      SELECT F.HISTORCUMUL TO REQUETECUMUL

      LOOP
         READNEXT W_CleCumul FROM REQUETECUMUL ELSE W_Fini="VRAI"

      WHILE W_Fini="FAUX" DO
         DELETE F.HISTORCUMUL,W_CleCumul

      REPEAT

   END

   W_RequeteContrat='SELECT CONTRAT AVEC 65 # "O"'
   IF W_Act#"M" THEN
      W_RequeteContrat=W_RequeteContrat:' AND AVEC 1 # "02"'
   END ELSE
      W_RequeteContrat=W_RequeteContrat:' AND AVEC 1 = "02"'
   END
   W_RequeteContrat=W_RequeteContrat:' AND AVEC CodeAidant = "':W_Aidant:'"'
   W_RequeteContrat=W_RequeteContrat:' AND AVEC 7 <= "':W_DateFin:'" AND AVEC 8 >= "':W_DateDeb:'" OR = ""'
   W_RequeteContrat=W_RequeteContrat:' PAR @ID'

   W_Fini="FAUX"
   EXECUTE W_RequeteContrat
   EXECUTE 'SAUVE-LISTE REQUETECONTRAT'
   EXECUTE 'LISTE REQUETECONTRAT' CAPTURING MSG RETURNING MSGCODE

   IF MSGCODE<1>=209 THEN 
        STOP
   END

   SELECT F.CONTRAT TO REQUETECONTRAT

   LOOP
      READNEXT W_CleContrat FROM REQUETECONTRAT ELSE W_Fini="VRAI" 
   WHILE W_Fini="FAUX" DO
      READ ENR_CONTRAT FROM F.CONTRAT,W_CleContrat THEN
          GOSUB 10 
      END

   REPEAT

STOP

*********************************************************
*********************************************************
* MAJ du fichier HISTORCUMUL

10

   W_CodeAnnee=W_PerFin[1,4]
   IF ENR_CONTRAT<1>="02" THEN
      W_CleHistorCumul=W_CleContrat[1,5]:W_CodeAnnee:ENR_CONTRAT<3>
   END ELSE 
      W_CleHistorCumul=W_CleContrat[1,5]:W_CodeAnnee:ENR_CONTRAT<2>
   END


   FOR W_Per = W_PerDeb TO W_PerFin

      IF W_Per[5,2] = "13" THEN
      	 W_Per=W_Per[1,4]+1:"01"
      END

      W_ENTREESURMOIS="NON"
      W_DATEDEBCONTRAT=ENR_CONTRAT<7>
      W_DATEDEBCONTRAT=OCONV(W_DATEDEBCONTRAT,"D4 ")
      W_DATEDEBCONTRAT=W_DATEDEBCONTRAT[7,4]:W_DATEDEBCONTRAT[4,2]
      IF W_DATEDEBCONTRAT=W_Per THEN W_ENTREESURMOIS="OUI"

      READ ENR_HISTORCUMUL FROM F.HISTORCUMUL,W_CleHistorCumul ELSE ENR_HISTORCUMUL=""
      IF ENR_HISTORCUMUL="" THEN W_ENTREESURMOIS="OUI"
      IF ENR_HISTORCUMUL#"" THEN W_ENTREESURMOIS="NON"

      READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CleContrat:W_Per THEN

      IF ENR_HISTORCUMUL<11>="" AND ENR_CONTRAT<7> >= ICONV("01/01/":W_CodeAnnee[1,4],"D4/") AND ENR_CONTRAT<7> <= ICONV("31/12/":W_CodeAnnee[1,4],"D4/") THEN
         ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,11;ENR_CONTRAT<7>)
      END
      IF ENR_HISTORCUMUL<12>="" AND ENR_CONTRAT<8> >= ICONV("01/01/":W_CodeAnnee[1,4],"D4/") AND ENR_CONTRAT<8> <= ICONV("31/12/":W_CodeAnnee[1,4],"D4/") THEN
         ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,12;ENR_CONTRAT<8>)
      END
      IF ENR_HISTORCUMUL<12> # "" AND ENR_CONTRAT<7> # ENR_HISTORCUMUL<11> AND ENR_CONTRAT<7> >= ICONV("01/01/":W_CodeAnnee[1,4],"D4/") AND ENR_CONTRAT<7> <= ICONV("31/12/":W_CodeAnnee[1,4],"D4/") THEN
         ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,13;ENR_CONTRAT<7>)
      END
      IF ENR_HISTORCUMUL<12> # "" AND ENR_CONTRAT<8> # ENR_HISTORCUMUL<12> AND ENR_CONTRAT<8> >= ICONV("01/01/":W_CodeAnnee[1,4],"D4/") AND ENR_CONTRAT<8> <= ICONV("31/12/":W_CodeAnnee[1,4],"D4/") THEN
         ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,14;ENR_CONTRAT<8>)
      END

      ENR_HISTORCUMUL<2>=ENR_HISTORCUMUL<2>+ENR_DETAILCALCUL<6>
 
      IF ENR_DETAILCALCUL<6> >= 6000 THEN
         ENR_HISTORCUMUL<3>=W_Per[5,2]
      END

      ENR_HISTORCUMUL<4>=ENR_HISTORCUMUL<4>+ENR_DETAILCALCUL<29>

      W_CumulBrut=ENR_HISTORCUMUL<5>

      ENR_HISTORCUMUL<5>=ENR_HISTORCUMUL<5>+ENR_DETAILCALCUL<7>
      ENR_HISTORCUMUL<6>=ENR_HISTORCUMUL<6>+ENR_DETAILCALCUL<15>
      ENR_HISTORCUMUL<7>=ENR_HISTORCUMUL<7>+ENR_DETAILCALCUL<16>
 
      W_Temp=DCOUNT(ENR_DETAILCALCUL<2>,CHAR(253))

      FOR i=1 TO W_Temp
     
         READ ENR_RUBSAISIE FROM F.RUBSAISIE,ENR_DETAILCALCUL<2,i> ELSE 
		ENR_RUBSAISIE="" 
		PRINT "Rubsaisie ":ENR_DETAILCALCUL<2,i>
	   END

         IF ENR_RUBSAISIE<2>="3" OR ENR_RUBSAISIE<2>="4" THEN
            ENR_HISTORCUMUL<1>=ENR_HISTORCUMUL<1>+ENR_DETAILCALCUL<3,i>
         END
       
         IF ENR_RUBSAISIE<2>="0" THEN
            ENR_HISTORCUMUL<8>=ENR_HISTORCUMUL<8>+ENR_DETAILCALCUL<5,i>
 
            W_Count=DCOUNT(ENR_HISTORCUMUL<9>,CHAR(253))
 	    IF W_Count < 4 THEN
               W_Passe="FALSE"
               FOR j=1 TO W_Count
                  IF ENR_RUBSAISIE<3>=ENR_HISTORCUMUL<9,j> THEN
                     W_Passe="TRUE"
                  END 
               NEXT j 
               IF W_Passe="FALSE" THEN
	          ENR_HISTORCUMUL<9,W_Count+1>=ENR_RUBSAISIE<3>
	       END
  	    END

         END
      NEXT i

      W_Temp=DCOUNT(ENR_DETAILCALCUL<17>,CHAR(253))
      W_CumulRub=0
      FOR i=1 TO W_Temp
         READ ENR_RUBSAISIE FROM F.RUBSAISIE,ENR_DETAILCALCUL<17,i> ELSE 
		ENR_RUBSAISIE="" 
		PRINT "Rubsaisie ":ENR_DETAILCALCUL<2,i>
	   END

         IF ENR_RUBSAISIE<2>="2" THEN
            ENR_HISTORCUMUL<10>=ENR_HISTORCUMUL<10>+ENR_DETAILCALCUL<20,i>
         END 

         * gestion de la rubrique 832, chomage partiel...
         IF ENR_DETAILCALCUL<17,i> = "832" THEN
	    ENR_HISTORCUMUL<20>=ENR_HISTORCUMUL<20>+ENR_DETAILCALCUL<20,i>
         END

         IF ENR_HISTORCUMUL<20>=0 THEN
            ENR_HISTORCUMUL<20>=""
         END

         * gestion de l'att 21 de HISTORCUMUL
         IF ENR_CONTRAT<1>="02" AND ENR_DETAILCALCUL<1>="E" THEN
            IF ENR_DETAILCALCUL<17,i> = "816" OR ENR_DETAILCALCUL<17,i> = "824" OR ENR_DETAILCALCUL<17,i> = "829" THEN
               W_CumulRub = W_CumulRub + ENR_DETAILCALCUL<20,i>
            END
         END

      NEXT i

      * gestion de l'att 21 de HISTORCUMUL
      IF ENR_CONTRAT<1>="02" AND ENR_DETAILCALCUL<1>="E" THEN
	 ENR_HISTORCUMUL<21>=ENR_HISTORCUMUL<21> + (ENR_DETAILCALCUL<21>-W_CumulRub)
      END

      IF ENR_HISTORCUMUL<21>=0 THEN
         ENR_HISTORCUMUL<21>=""
      END

      i=1
      W_ENRHISTORCUMUL=""
      W_Count=DCOUNT(ENR_HISTORCUMUL<15>,CHAR(253))
      FOR j=1 TO W_Count
         W_ENRHISTORCUMUL<1,j>=""
      NEXT j
      W_BASEURSSAFTOT=0
      W_BASEURSSAFPLAF=0
      W_CUMASSURSSAFTOT=0
      W_CUMASSURSSAFPLAF=0
      LOOP
      WHILE ENR_DETAILCALCUL<8,i> # "" DO
         j=1
         LOOP
         WHILE ENR_DETAILCALCUL<8,i> # ENR_HISTORCUMUL<15,j> AND ENR_HISTORCUMUL<15,j> # "" DO
            IF W_CUMASSURSSAFPLAF=0 OR W_CUMASSURSSAFTOT=0 THEN
               READ ENR_RUBCHARGE FROM F.RUBCHARGE,ENR_HISTORCUMUL<15,j> ELSE 
			ENR_RUBCHARGE="" 
			PRINT "Rubcharge ":ENR_HISTORCUMUL<15,j>
	   	   END
	
               IF ENR_RUBCHARGE<16>="01" THEN
	          READ ENR_TRANCHE FROM F.TRANCHE,ENR_RUBCHARGE<2> ELSE
			ENR_TRANCHE = ""
			PRINT "Tranche ":ENR_RUBCHARGE<2>
		    END
                  IF ENR_TRANCHE<10>="02" THEN
                     IF W_CUMASSURSSAFPLAF=0 THEN W_CUMASSURSSAFPLAF=ENR_HISTORCUMUL<16,j>
                  END
	          IF ENR_TRANCHE<10>="01" THEN
                     IF W_CUMASSURSSAFTOT=0 THEN W_CUMASSURSSAFTOT=ENR_HISTORCUMUL<16,j>
                  END
               END
            END        
 	    j=j+1
         REPEAT

         READ ENR_RUBCHARGE FROM F.RUBCHARGE,ENR_DETAILCALCUL<8,i> ELSE 
		ENR_RUBCHARGE=""     
		PRINT "RubCharge ":ENR_DETAILCALCUL<8,i>
	   END
         IF ENR_RUBCHARGE<16>="01" THEN
	    READ ENR_TRANCHE FROM F.TRANCHE,ENR_RUBCHARGE<2> ELSE 
		ENR_TRANCHE=""	
		PRINT "Tranche ":ENR_RUBCHARGE<2>
	    END
	    IF ENR_TRANCHE<10>="02" THEN
               IF W_BASEURSSAFPLAF=0 THEN W_BASEURSSAFPLAF=ENR_DETAILCALCUL<28,i>
            END
	    IF ENR_TRANCHE<10>="01" THEN
               IF W_BASEURSSAFTOT=0 THEN W_BASEURSSAFTOT=ENR_DETAILCALCUL<28,i>
            END
         END

         IF ENR_DETAILCALCUL<8,i>=ENR_HISTORCUMUL<15,j> THEN
            W_ENRHISTORCUMUL<1,j>="1"
            IF ENR_RUBCHARGE<16>="01" THEN
               IF ENR_TRANCHE<10>="02" THEN
                  IF W_CUMASSURSSAFPLAF=0 THEN W_CUMASSURSSAFPLAF=ENR_HISTORCUMUL<16,j>
               END
	       IF ENR_TRANCHE<10>="01" THEN
                  IF W_CUMASSURSSAFTOT=0 THEN W_CUMASSURSSAFTOT=ENR_HISTORCUMUL<16,j>
               END
            END
  	    ENR_HISTORCUMUL<16,j>=ENR_HISTORCUMUL<16,j>+ENR_DETAILCALCUL<28,i>
 	    IF ENR_DETAILCALCUL<9,i>="" THEN  
 	       ENR_HISTORCUMUL<17,j>=ENR_HISTORCUMUL<17,j>+ENR_DETAILCALCUL<12,i>
	    END ELSE
	       ENR_HISTORCUMUL<17,j>=ENR_HISTORCUMUL<17,j>+ENR_DETAILCALCUL<9,i>
	    END
  	    ENR_HISTORCUMUL<18,j>=ENR_HISTORCUMUL<18,j>+ENR_DETAILCALCUL<11,i>
  	    ENR_HISTORCUMUL<19,j>=ENR_HISTORCUMUL<19,j>+ENR_DETAILCALCUL<14,i>
         END ELSE	
            IF ENR_HISTORCUMUL<15,j> = "" THEN
	       W_Count=DCOUNT(ENR_HISTORCUMUL<15>,CHAR(253))
	       ENR_HISTORCUMUL<15,W_Count+1>=ENR_DETAILCALCUL<8,i>
               W_ENRHISTORCUMUL<1,W_Count+1>="0"	      

 	       IF ENR_RUBCHARGE<18>="3" THEN
                  IF ENR_RUBCHARGE<16>="01" THEN
	             ENR_HISTORCUMUL<16,W_Count+1>=ENR_DETAILCALCUL<28,i>
	             IF ENR_DETAILCALCUL<9,i>="" THEN
	                ENR_HISTORCUMUL<17,W_Count+1>=ENR_DETAILCALCUL<12,i>
                     END ELSE
	                ENR_HISTORCUMUL<17,W_Count+1>=ENR_DETAILCALCUL<9,i>
                     END
                  END ELSE
	             ENR_HISTORCUMUL<16,W_Count+1>=W_CumulBrut+ENR_DETAILCALCUL<28,i>
	             IF ENR_DETAILCALCUL<9,i>="" THEN
	                ENR_HISTORCUMUL<17,W_Count+1>=W_CumulBrut+ENR_DETAILCALCUL<12,i>
                     END ELSE
	                ENR_HISTORCUMUL<17,W_Count+1>=W_CumulBrut+ENR_DETAILCALCUL<9,i>
                     END
                  END
	       END ELSE
	          ENR_HISTORCUMUL<16,W_Count+1>=ENR_HISTORCUMUL<16,W_Count+1>+ENR_DETAILCALCUL<28,i>
	          IF ENR_DETAILCALCUL<9,i>="" THEN
	             ENR_HISTORCUMUL<17,W_Count+1>=ENR_HISTORCUMUL<17,W_Count+1>+ENR_DETAILCALCUL<12,i>
                  END ELSE
	             ENR_HISTORCUMUL<17,W_Count+1>=ENR_HISTORCUMUL<17,W_Count+1>+ENR_DETAILCALCUL<9,i>
                  END
  	       END
	       ENR_HISTORCUMUL<18,W_Count+1>=ENR_HISTORCUMUL<18,W_Count+1>+ENR_DETAILCALCUL<11,i>
  	       ENR_HISTORCUMUL<19,W_Count+1>=ENR_HISTORCUMUL<19,W_Count+1>+ENR_DETAILCALCUL<14,i>
	    END
         END		
         i=i+1	
      REPEAT

      * MAJ CUMUL D'ASSIETTE BRUTE (ATT 16 D'HISTORCUMUL) POUR RUBRIQUE URSSAF NON PRESENTE DANS
      * FICHIER DETAILCALCUL
      W_Count=DCOUNT(W_ENRHISTORCUMUL<1>,CHAR(253))
      FOR j=1 TO W_Count
         IF W_ENRHISTORCUMUL<1,j>#"1" THEN
            READ ENR_RUBCHARGE FROM F.RUBCHARGE,ENR_HISTORCUMUL<15,j> ELSE
			ENR_RUBCHARGE=""
			PRINT "rubcharge ":ENR_HISTORCUMUL<15,j>
		END
            IF ENR_RUBCHARGE<16>="01" THEN
	       READ ENR_TRANCHE FROM F.TRANCHE,ENR_RUBCHARGE<2> THEN
	          IF ENR_TRANCHE<10>="02" THEN
                     D=1
                     LOOP
                     UNTIL ENR_DETAILCALCUL<49,D>="" OR ENR_DETAILCALCUL<49,D>=ENR_HISTORCUMUL<15,j> DO
                        D=D+1
                     REPEAT
                     IF ENR_DETAILCALCUL<49,D>="" THEN
                        IF W_ENRHISTORCUMUL<1,j>="0" THEN
                           IF W_ENTREESURMOIS="NON" THEN ENR_HISTORCUMUL<16,j>=W_CUMASSURSSAFPLAF+W_BASEURSSAFPLAF
                        END ELSE
                           ENR_HISTORCUMUL<16,j>=ENR_HISTORCUMUL<16,j>+W_BASEURSSAFPLAF
                        END
                     END
                  END
	          IF ENR_TRANCHE<10>="01" THEN
                     D=1
                     LOOP
                     UNTIL ENR_DETAILCALCUL<49,D>="" OR ENR_DETAILCALCUL<49,D>=ENR_HISTORCUMUL<15,j> DO
                        D=D+1
                     REPEAT
                     IF ENR_DETAILCALCUL<49,D>="" THEN
                        IF W_ENRHISTORCUMUL<1,j>="0" THEN
                           IF W_ENTREESURMOIS="NON" THEN ENR_HISTORCUMUL<16,j>=W_CUMASSURSSAFTOT+W_BASEURSSAFTOT
                        END ELSE
                           ENR_HISTORCUMUL<16,j>=ENR_HISTORCUMUL<16,j>+W_BASEURSSAFTOT
                        END
                     END
                  END
               END ELSE
			PRINT "Tranche ":ENR_RUBCHARGE<2>
		   END
            END
         END	 
      NEXT j

      W_RUBAFFECT=""
      * MAJ HISTORCUMUL POUR RUBRIQUES DE CHARGE A 0 (ATT 49 ET 50 DE DETAILCALCUL)
      GOSUB 11

      IF ENR_HISTORCUMUL<8> = "" THEN
         ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,8;"0")
      END 

      IF ENR_HISTORCUMUL<10> = "" THEN
         ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,10;"0")
      END  

      WRITE ENR_HISTORCUMUL ON F.HISTORCUMUL,W_CleHistorCumul

      END

   NEXT W_Per

RETURN

*********************************************************
*********************************************************
11 *

   I=1
   LOOP
   UNTIL ENR_DETAILCALCUL<49,I>="" DO
      * RECHERCHE DANS HISTORCUMUL
      K=1
      LOOP 
         UNTIL ENR_HISTORCUMUL<15,K>=ENR_DETAILCALCUL<49,I> OR ENR_HISTORCUMUL<15,K>="" DO
	 K=K+1
      REPEAT
      * SI RUB TROUVEE DANS HISTORCUMUL
      IF ENR_DETAILCALCUL<50,I>="" THEN ENR_DETAILCALCUL<50,I>=0
      IF ENR_HISTORCUMUL<15,K> # "" THEN
         ENR_HISTORCUMUL<16,K>=ENR_HISTORCUMUL<16,K>+ENR_DETAILCALCUL<50,I>
      END ELSE
	 ENR_HISTORCUMUL<15,-1>=ENR_DETAILCALCUL<49,I>
         READ ENR_RUBCHARGE FROM F.RUBCHARGE,ENR_DETAILCALCUL<49,I> ELSE
		ENR_RUBCHARGE=""
		PRINT "RubCharge ":ENR_DETAILCALCUL<49,I>
	   END
         IF ENR_RUBCHARGE<16>="01" THEN
            READ ENR_TRANCHE FROM F.TRANCHE,ENR_RUBCHARGE<2> THEN
               IF ENR_TRANCHE<10>="02" THEN
                  ENR_HISTORCUMUL<16,-1>=W_CUMASSURSSAFPLAF+ENR_DETAILCALCUL<50,I>
               END ELSE
                  IF ENR_TRANCHE<10>="01" THEN
                     ENR_HISTORCUMUL<16,-1>=W_CUMASSURSSAFTOT+ENR_DETAILCALCUL<50,I>
                  END ELSE
                     ENR_HISTORCUMUL<16,-1>=ENR_DETAILCALCUL<50,I>
                  END
               END
            END ELSE
			PRINT "Tranche ":ENR_RUBCHARGE<2>
		END
         END ELSE
            ENR_HISTORCUMUL<16,-1>=ENR_DETAILCALCUL<50,I>
         END
	 ENR_HISTORCUMUL<17,-1>="0"
	 ENR_HISTORCUMUL<18,-1>="0"
	 ENR_HISTORCUMUL<19,-1>="0"
      END
      I=I+1
   REPEAT

RETURN

