**********
* CALCUL DES ELEMENTS BUDGETAIRES
* DIDIER - 28/09/2004
**********
EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
OPEN "","BUDGETFICHPERSO" TO F.BUDGETFICHPERSO ELSE STOP
OPEN "","BUDGETDETAILCALCUL" TO F.BUDGETDETAILCALCUL ELSE STOP
OPEN "","BUDGETHISTORCUMUL" TO F.HISTORCUMUL ELSE STOP
OPEN "","BUDGETDETAILCALCUL" TO F.DETAILCALCUL ELSE STOP
OPEN "","RUBCHARGE" TO F.RUBCHARGE ELSE STOP
OPEN "","TRANCHE" TO F.TRANCHE ELSE STOP
PROCREAD W_VARIABLES ELSE STOP
W_CODENTITE=FIELD(W_VARIABLES," ",2)
W_PERIODEBUDGET=FIELD(W_VARIABLES," ",3)
W_TYPETRAIT=FIELD(W_VARIABLES," ",4)
* W_TYPETRAIT = C SIGNIFIE COMPLET
* W_TYPETRAIT = V SIGNIFIE A VALIDER
* W_TYPETRAIT = I SIGNIFIE INDIVIDUEL
W_CODAIDANT=FIELD(W_VARIABLES," ",5)
W_POURCACOMPTE=0
W_SOLDECOMPTE=0
W_BUDGET=1
W_PERIODEDEBUT=W_PERIODEBUDGET:"01"
W_PERIODEDEBUT1="01/01/":W_PERIODEBUDGET
W_PERIODEDEBUT1=ICONV(W_PERIODEDEBUT1,"D4/")
W_PERIODEFIN=W_PERIODEBUDGET:"12"
W_PERIODEFIN1="31/12/":W_PERIODEBUDGET
W_PERIODEFIN1=ICONV(W_PERIODEFIN1,"D4/")
W_REQUETE=""
BEGIN CASE
   CASE W_TYPETRAIT="C"
      W_REQUETE='SELECT BUDGETDETAILCALCUL AVEC CodAssoBudget = "':W_CODENTITE:'" AND AVEC PeriodeBudget >= "':W_PERIODEDEBUT:'" AND <= "':W_PERIODEFIN:'"'
   CASE W_TYPETRAIT="V"
      W_REQUETE='SELECT BUDGETDETAILCALCUL AVEC CodAssoBudget = "':W_CODENTITE:'" AND AVEC PeriodeBudget >= "':W_PERIODEDEBUT:'" AND <= "':W_PERIODEFIN:'" AND AVEC CumulBrutBudget =""'
   CASE 1
      W_REQUETE='SELECT BUDGETDETAILCALCUL AVEC CodAssoBudget = "':W_CODENTITE:'" AND AVEC PeriodeBudget >= "':W_PERIODEDEBUT:'" AND <= "':W_PERIODEFIN:'" AND AVEC 0 = "':W_CODAIDANT:']"'
END CASE
EXECUTE W_REQUETE
GOSUB 300
W_REQUETE=""
LISTBUDGETFICHPERSO=""
BEGIN CASE
   CASE W_TYPETRAIT="C"
      W_REQUETE='SELECT BUDGETFICHPERSO AVEC 0 = "[':W_CODENTITE:W_PERIODEBUDGET:'"'
   CASE W_TYPETRAIT="V"
      W_REQUETE='SELECT BUDGETFICHPERSO AVEC 0 = "[':W_CODENTITE:W_PERIODEBUDGET:'" AND AVEC 25 = ""'
   CASE 1
      W_REQUETE='SELECT BUDGETFICHPERSO AVEC 0 = "':W_CODAIDANT:']" AND AVEC 0 = "[':W_PERIODEBUDGET:'"'
END CASE
EXECUTE W_REQUETE
EXECUTE 'SAUVE-LISTE LISTBUDGETFICHPERSO'
EXECUTE 'LISTE LISTBUDGETFICHPERSO' RETURNING W_MSG
IF W_MSG<1>="209" THEN STOP
SELECT F.BUDGETFICHPERSO TO LISTBUDGETFICHPERSO
W_FINI="NON"
LOOP
   READNEXT W_CLE FROM LISTBUDGETFICHPERSO ELSE W_FINI="OUI"
   UNTIL W_FINI="OUI" DO
      GOSUB 100
REPEAT
EXECUTE 'EFFACER-LISTE LISTBUDGETFICHPERSO'
STOP
**********
* EXECUTION CALCUL DE PAIE MOIS PAR MOIS SUR LA PERIODE BUDGETAIRE
**********
100 READ ENRBUDGETFICHPERSO FROM F.BUDGETFICHPERSO,W_CLE ELSE RETURN
ENRBUDGETFICHPERSO<25>=0
ENRBUDGETFICHPERSO<26>=0
ENRBUDGETFICHPERSO<27>=0
ENRBUDGETFICHPERSO<28>=0
ENRBUDGETFICHPERSO<29>=0
ENRBUDGETFICHPERSO<35>=""
ENRBUDGETFICHPERSO<36>=""
ENRBUDGETFICHPERSO<37>=""
WRITE ENRBUDGETFICHPERSO ON F.BUDGETFICHPERSO,W_CLE
DatDebBudget=ENRBUDGETFICHPERSO<8>
IF DatDebBudget>W_PERIODEFIN1 THEN RETURN
DatFinBudget=ENRBUDGETFICHPERSO<23>
IF DatFinBudget#"" THEN
   IF DatFinBudget<W_PERIODEDEBUT1 THEN RETURN
END
IF DatDebBudget>W_PERIODEDEBUT1 THEN
   W_DATE=OCONV(DatDebBudget,"D4/")
   W_PERDEBCALCUL=W_PERIODEBUDGET:W_DATE[4,2]
END ELSE
   W_PERDEBCALCUL=W_PERIODEDEBUT
END
W_PERFINCALCUL=W_PERIODEFIN
IF DatFinBudget#"" THEN
   IF DatFinBudget<=W_PERIODEFIN1 THEN
      W_DATE=OCONV(DatFinBudget,"D4/")
      W_PERFINCALCUL=W_PERIODEBUDGET:W_DATE[4,2]
   END ELSE
      W_PERFINCALCUL=W_PERIODEFIN
   END
END
IF W_PERDEBCALCUL>W_PERFINCALCUL THEN RETURN
FOR W_PERIODE=W_PERDEBCALCUL TO W_PERFINCALCUL
  EXECUTE "CALCULPAIE I ":W_CODENTITE:" ":W_PERIODE:" ":W_CLE[1,8]:" 0 0 ":W_BUDGET
  GOSUB 200
NEXT W_PERIODE
RETURN
**********
* CLOTURE DE PAIE INDIVIDUELLE
**********
200 W_ENTREESURMOIS="NON"
W_DATEDEBCONTRAT=ENRBUDGETFICHPERSO<8>
W_DATEDEBCONTRAT=OCONV(W_DATEDEBCONTRAT,"D4 ")
W_DATEDEBCONTRAT=W_DATEDEBCONTRAT[7,4]:W_DATEDEBCONTRAT[4,2]
IF W_DATEDEBCONTRAT=W_PERIODE THEN W_ENTREESURMOIS="OUI"
W_CodeAnnee=W_PERIODE[1,4]
W_CleHistorCumul=W_CLE[1,5]:W_CodeAnnee:W_CLE[6,3]
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"
IF ENR_HISTORCUMUL<5>=0 THEN W_ENTREESURMOIS="OUI"
READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CLE[1,8]:W_PERIODE ELSE ENR_DETAILCALCUL="" 
ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,1;ENR_HISTORCUMUL<1>+ENR_DETAILCALCUL<6>)
ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,2;ENR_HISTORCUMUL<2>+ENR_DETAILCALCUL<6>)
ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,4;ENR_HISTORCUMUL<4>+ENR_DETAILCALCUL<29>)
W_CumulBrut=ENR_HISTORCUMUL<5>
ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,5;ENR_HISTORCUMUL<5>+ENR_DETAILCALCUL<7>)
ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,6;ENR_HISTORCUMUL<6>+ENR_DETAILCALCUL<15>)
ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,7;ENR_HISTORCUMUL<7>+ENR_DETAILCALCUL<16>)
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
j=1
LOOP
 IF W_CUMASSURSSAFPLAF#0 AND W_CUMASSURSSAFTOT#0 THEN j=99
 WHILE 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="" 
   IF ENR_RUBCHARGE<16>="01" THEN
    READ ENR_TRANCHE FROM F.TRANCHE,ENR_RUBCHARGE<2> ELSE ENR_TRANCHE=""
    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
IF W_CUMASSURSSAFTOT=0 AND W_CUMASSURSSAFPLAF=0 THEN W_ENTREESURMOIS="OUI"
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="" 
     IF ENR_RUBCHARGE<16>="01" THEN
      READ ENR_TRANCHE FROM F.TRANCHE,ENR_RUBCHARGE<2> ELSE ENR_TRANCHE=""
      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=""     
  IF ENR_RUBCHARGE<16>="01" THEN
   READ ENR_TRANCHE FROM F.TRANCHE,ENR_RUBCHARGE<2> ELSE ENR_TRANCHE=""
   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=REPLACE(ENR_HISTORCUMUL,16,j;ENR_HISTORCUMUL<16,j>+ENR_DETAILCALCUL<28,i>)
   IF ENR_DETAILCALCUL<9,i>="" THEN  
    ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,j;ENR_HISTORCUMUL<17,j>+ENR_DETAILCALCUL<12,i>)
   END ELSE
    ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,j;ENR_HISTORCUMUL<17,j>+ENR_DETAILCALCUL<9,i>)
   END
   ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,18,j;ENR_HISTORCUMUL<18,j>+ENR_DETAILCALCUL<11,i>)
   ENR_HISTORCUMUL=REPLACE(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=REPLACE(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=REPLACE(ENR_HISTORCUMUL,16,W_Count+1;ENR_DETAILCALCUL<28,i>)
      IF ENR_DETAILCALCUL<9,i>="" THEN
       ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,W_Count+1;ENR_DETAILCALCUL<12,i>)
      END ELSE
       ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,W_Count+1;ENR_DETAILCALCUL<9,i>)
      END
     END ELSE
      ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,16,W_Count+1;W_CumulBrut+ENR_DETAILCALCUL<28,i>)
      IF ENR_DETAILCALCUL<9,i>="" THEN
       ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,W_Count+1;W_CumulBrut+ENR_DETAILCALCUL<12,i>)
      END ELSE
       ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,W_Count+1;W_CumulBrut+ENR_DETAILCALCUL<9,i>)
      END
     END
    END ELSE
     ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,16,W_Count+1;ENR_HISTORCUMUL<16,W_Count+1>+ENR_DETAILCALCUL<28,i>)
     IF ENR_DETAILCALCUL<9,i>="" THEN
      ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,W_Count+1;ENR_HISTORCUMUL<17,W_Count+1>+ENR_DETAILCALCUL<12,i>)
     END ELSE
      ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,W_Count+1;ENR_HISTORCUMUL<17,W_Count+1>+ENR_DETAILCALCUL<9,i>)
     END
    END
    ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,18,W_Count+1;ENR_HISTORCUMUL<18,W_Count+1>+ENR_DETAILCALCUL<11,i>)
    ENR_HISTORCUMUL=REPLACE(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=""
  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=REPLACE(ENR_HISTORCUMUL,16,j;W_CUMASSURSSAFPLAF+W_BASEURSSAFPLAF)
      END ELSE
       ENR_HISTORCUMUL=REPLACE(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=REPLACE(ENR_HISTORCUMUL,16,j;W_CUMASSURSSAFTOT+W_BASEURSSAFTOT)
      END ELSE
       ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,16,j;ENR_HISTORCUMUL<16,j>+W_BASEURSSAFTOT)
      END
     END
    END
   END
  END
 END	 
NEXT j
W_RUBAFFECT=""
* MAJ HISTORCUMUL POUR RUBRIQUES DE CHARGE A 0 (ATT 49 ET 50 DE DETAILCALCUL)
I=1
LOOP
 UNTIL ENR_DETAILCALCUL<49,I>="" DO
  K=1
  LOOP 
   UNTIL ENR_HISTORCUMUL<15,K>=ENR_DETAILCALCUL<49,I> OR ENR_HISTORCUMUL<15,K>="" DO
    K=K+1
  REPEAT
  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=""
   IF ENR_RUBCHARGE<16>="01" THEN
    READ ENR_TRANCHE FROM F.TRANCHE,ENR_RUBCHARGE<2> THEN
     IF ENR_TRANCHE<10>="02" THEN
      IF W_ENTREESURMOIS="OUI" THEN
       ENR_HISTORCUMUL<16,-1>=ENR_DETAILCALCUL<50,I>
      END ELSE
       ENR_HISTORCUMUL<16,-1>=W_CUMASSURSSAFPLAF+ENR_DETAILCALCUL<50,I>
      END
     END ELSE
      IF ENR_TRANCHE<10>="01" THEN
       IF W_ENTREESURMOIS="OUI" THEN
        ENR_HISTORCUMUL<16,-1>=ENR_DETAILCALCUL<50,I>
       END ELSE
        ENR_HISTORCUMUL<16,-1>=W_CUMASSURSSAFTOT+ENR_DETAILCALCUL<50,I>
       END
      END ELSE
       ENR_HISTORCUMUL<16,-1>=ENR_DETAILCALCUL<50,I>
      END
     END
    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
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
RETURN
**********
* SUPPRESSION ARTICLES DANS BUDGETDETAILCALCUL + VIDAGE BUDGETHISTORCUMUL
**********
300 W_FINSUPPR="NON"
LOOP
   READNEXT W_CLESUPPR ELSE W_FINSUPPR="OUI"
   UNTIL W_FINSUPPR="OUI" DO
      DELETE F.BUDGETDETAILCALCUL,W_CLESUPPR
REPEAT
EXECUTE "VIDER-FICHIER DATA BUDGETHISTORCUMUL"
RETURN
