****************************************************
* Generation du fichier COLBRE01 pour la MUTEX     *
* spcifique pour  CAEN                            *
* vanessa                                          *
****************************************************

* Ouvertures des fichiers
EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
OPEN "","ASSOCIATION" TO F.ASSOCIATION ELSE STOP
OPEN "","CIVILAIDANT" TO F.CIVILAIDANT ELSE STOP
OPEN "","CONTRAT" TO F.CONTRAT ELSE STOP
OPEN "","DADSCRC" TO F.DADSCRC ELSE STOP
OPEN "","HISTORCUMUL" TO F.HISTORCUMUL ELSE STOP
OPEN "","ORGANISMESOCIAL" TO F.ORGANISMESOCIAL ELSE STOP
OPEN "","REGROUPBRC" TO F.REGROUPBRC ELSE STOP
OPEN "","RUBCHARGE" TO F.RUBCHARGE ELSE STOP
OPEN "","TRANCHE" TO F.TRANCHE ELSE STOP

*********************************************************
* Recuperation des arguments

PRINT "Veuillez saisir l'anne pour laquelle vous voulez gnrer le fichier (sous la forme AAAA)"
INPUT W_An

PRINT "Veuillez saisir le code de l'entit juridique pour laquelle vous voulez gnrer le fichier (3N)"
INPUT W_Entite

PRINT "Veuillez saisir le code de l'organisme de charge pour lequel vous voulez gnrer le fichier (3N)"
INPUT W_Org

*********************************************************
* Initialisation des variables
W_Fini="FAUX"
W_Ligne=""
W_NoLigne=1
ENR_DADSCRC=""
W_TabContrat=""
W_CountContrat=0
W_RequeteContrat=""
W_RequeteRegBrc=""
W_NomPrenom=""
W_DateNais=""
W_NbEnfant=0
W_NbEnr=0
W_TotalSalaire=0
W_Nir=""

******************************************
* Programme principal

   READ ENR_ASSOCIATION FROM F.ASSOCIATION,W_Entite ELSE PRINT "ASSOCIATION"

   W_DateDeb=ICONV("01/01/":W_An,"D4/")
   W_DateFin=ICONV("31/12/":W_An,"D4/")

   * Requete contrat pour les salaries prestaires.
   GOSUB 10

   * Selection des rubriques regroupees
   GOSUB 40

   IF PasRegBrc="VRAI" THEN
      STOP
   END

   * Chargement en table des rubriques regroupees
   GOSUB 50

   READNEXT W_CleContrat FROM W_RequeteContrat ELSE W_Fini="VRAI"
   W_CleAidantPrec=W_CleContrat[1,5]
   W_TabContrat<1>=W_CleContrat

   W_NbEtab=0
   W_EtabPrec=""

**************************************************************************
* etiquette
1

   i=2
   LOOP
      READNEXT W_CleContrat FROM W_RequeteContrat ELSE W_Fini="VRAI"
   WHILE W_CleAidantPrec = W_CleContrat[1,5] AND W_Fini # "VRAI" DO
      W_TabContrat<i>=W_CleContrat
      i=i+1
      W_CleAidantPrec=W_CleContrat[1,5]
   REPEAT

   * Traitement du precedent
   W_CodeAidant=W_CleAidantPrec
   READ ENR_CIVILAIDANT FROM F.CIVILAIDANT,W_CodeAidant ELSE PRINT "AIDANT"
   W_CountContrat=DCOUNT(W_TabContrat,CHAR(254))

   READ ENR_CONTRAT FROM F.CONTRAT,W_TabContrat<W_CountContrat> ELSE PRINT "CONTRAT"

   W_TotalLigneSal=0
   W_CumulTotBrut=0
   W_CumulTranche=0

   * Enregistrement 200 (Salari)
   GOSUB 200

   W_TabContrat=""
   W_CleAidantPrec=W_CleContrat[1,5]
   W_TabContrat<1>=W_CleContrat
   IF W_Fini# "VRAI" THEN
      GOTO 1
   END

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

   * Enregistrement drapeau de debut
   GOSUB 100

   * Enregistrement drapeau de fin
   GOSUB 990

   WRITE ENR_DADSCRC ON F.DADSCRC,"COLBRE01"

PRINT "TOTAL DECLARE : ":W_TotalSalaire
PRINT "NOMBRE DE SALARIE DECLARE : ":W_NbEnr*1
PRINT "TAILLE DU FICHIER EN OCTET : ":(W_NbEnr+2)*98

STOP

**************************************************************************
* Requete sur contrat
10 
   EXECUTE 'SSELECT CONTRAT AVEC 65 # "O" AND AVEC 1 # "02" AND AVEC 2 = "':W_Entite:'" AND AVEC 7 <= "':W_DateFin:'" AND AVEC 8 >= "':W_DateDeb:'" OR = "" PAR NomPrenomAidantContrat PAR CodeAidant PAR 7'
   EXECUTE 'SAUVE-LISTE W_RequeteContrat'
   EXECUTE "LISTE W_RequeteContrat" RETURNING MSGCODE
   IF MSGCODE<1>=209 THEN
      STOP
   END ELSE
      SELECT F.CONTRAT TO W_RequeteContrat
   END

RETURN

**************************************************************************
* Selection des rubriques regroupees
40
   EXECUTE 'SSELECT REGROUPBRC AVEC AssocBrc = "':W_Entite:'" AND AVEC CodeOrg = "':W_Org:'"'
   EXECUTE 'SAUVE-LISTE W_RequeteRegBrc'
   EXECUTE "LISTE W_RequeteRegBrc" RETURNING MSGCODE
   IF MSGCODE<1> # 209 THEN
      SELECT F.REGROUPBRC TO W_RequeteRegBrc
      PasRegBrc="FAUX"
   END ELSE
      PasRegBrc="VRAI"
   END

RETURN

**************************************************************************
* Chargement en table des rubriques regroupees
* Description du tableau : 1=T  2=A  3=B  4=C
50

   W_TabRubChg=""
   W_FiniBrc="FAUX"
   LOOP
      READNEXT W_CleRegBrc FROM W_RequeteRegBrc ELSE W_FiniBrc="VRAI"
   WHILE W_FiniBrc # "VRAI" DO
      iBrc=1
      LOOP
         READ ENR_REGROUPBRC FROM F.REGROUPBRC,W_CleRegBrc ELSE PRINT "REGROUPBRC"
      WHILE ENR_REGROUPBRC<2,iBrc> # "" DO
         READ ENR_RUBCHARGE FROM F.RUBCHARGE,ENR_REGROUPBRC<2,iBrc> ELSE PRINT "RUBCHARGE"
         READ ENR_TRANCHE FROM F.TRANCHE,ENR_RUBCHARGE<2> ELSE PRINT "TRANCHE"

         IF ENR_TRANCHE<10> > 4 THEN
            IF W_TabRubChg<ENR_TRANCHE<10>> # "" THEN
               W_TabRubChg<1,-1>=ENR_REGROUPBRC<2,iBrc>
            END ELSE
                W_TabRubChg<1>=ENR_REGROUPBRC<2,iBrc>
            END
         END ELSE
            IF W_TabRubChg<ENR_TRANCHE<10>> # "" THEN
               W_TabRubChg<ENR_TRANCHE<10>,-1>=ENR_REGROUPBRC<2,iBrc>
            END ELSE
               W_TabRubChg<ENR_TRANCHE<10>>=ENR_REGROUPBRC<2,iBrc>
            END
         END

         iBrc=iBrc+1
      REPEAT
   REPEAT

RETURN

**************************************************************************
* Enregistrement dbut
100

   W_Ligne="COLBRE01"

   W_Date=OCONV(DATE(),"D4/")
   W_Date=CONVERT("/","",W_Date)
   W_Date=W_Date[5,4]:W_Date[3,2]:W_Date[1,2]

   W_Ligne=W_Ligne:W_Date

   IF LEN(ENR_ASSOCIATION<1>) > 12 THEN
      ENR_ASSOCIATION<1>=ENR_ASSOCIATION<1>[1,12]
   END ELSE
      ENR_ASSOCIATION<1>=ENR_ASSOCIATION<1>:SPACE(12-LEN(ENR_ASSOCIATION<1>))
   END
   W_Ligne=W_Ligne:ENR_ASSOCIATION<1>

   IF LEN(ENR_ASSOCIATION<2>) > 32 THEN
      ENR_ASSOCIATION<2>=ENR_ASSOCIATION<2>[1,32]
   END ELSE
      ENR_ASSOCIATION<2>=ENR_ASSOCIATION<2>:SPACE(32-LEN(ENR_ASSOCIATION<2>))
   END
   W_Ligne=W_Ligne:ENR_ASSOCIATION<2>

   W_NbEnr=W_NbEnr "R%6"

   W_Ligne=W_Ligne:W_NbEnr:"                              "

   ENR_DADSCRC<1>=W_Ligne

RETURN

**************************************************************************
* Enregistrement 200
200

   * numro de contrat MUTEX
   READ ENR_ORGANISMESOCIAL FROM F.ORGANISMESOCIAL,ENR_CONTRAT<2>:'000':W_Org ELSE PRINT "ORGANISMESOCIAL"

   ENR_ORGANISMESOCIAL<19>=ICONV(ENR_ORGANISMESOCIAL<19>,"MCN")
   IF LEN(ENR_ORGANISMESOCIAL<19>) > 10 THEN
      ENR_ORGANISMESOCIAL<19>=ENR_ORGANISMESOCIAL<19>[1,10]
   END ELSE
      ENR_ORGANISMESOCIAL<19>=ENR_ORGANISMESOCIAL<19> "R%10"
   END
   W_Ligne=ENR_ORGANISMESOCIAL<19>

   * code de mise  jour sur l'anne de dclaration
   READ ENR_CONTRAT1 FROM F.CONTRAT,W_TabContrat<1> ELSE PRINT "CONTRAT"
   READ ENR_CONTRATDERN FROM F.CONTRAT,W_TabContrat<DCOUNT(W_TabContrat,CHAR(254))> ELSE PRINT "CONTRAT"

   IF ENR_CONTRAT1<7> >= W_DateDeb AND ENR_CONTRAT1<7> <= W_DateFin THEN
      W_Ligne=W_Ligne:"C"
   END ELSE
      IF (ENR_CONTRAT1<7> < W_DateDeb AND ENR_CONTRATDERN<8> > W_DateFin) OR (ENR_CONTRAT1<7> < W_DateDeb AND ENR_CONTRATDERN<8> = "") THEN
         W_Ligne=W_Ligne:"M"
      END ELSE
         IF ENR_CONTRATDERN<8> >= W_DateDeb AND ENR_CONTRATDERN<8> <= W_DateFin THEN
            W_Ligne=W_Ligne:"S"
         END
      END
   END
  
   * nom complet de la personne
   W_NomPrenom=ENR_CIVILAIDANT<2>:",":ENR_CIVILAIDANT<3>
   IF LEN(W_NomPrenom) > 32 THEN
      W_NomPrenom=W_NomPrenom[1,32]
   END ELSE
      W_NomPrenom=W_NomPrenom:SPACE(32-LEN(W_NomPrenom))
   END
   W_Ligne=W_Ligne:W_NomPrenom

   * sexe de la personne
   W_Ligne=W_Ligne:ENR_CIVILAIDANT<16>

   * date de naissance
   W_DateNais=OCONV(ENR_CIVILAIDANT<26>,"D4/")
   W_DateNais=CONVERT("/","",W_DateNais)
   W_DateNais=W_DateNais[5,4]:W_DateNais[3,2]:W_DateNais[1,2]
   W_Ligne=W_Ligne:W_DateNais

   * situation de famille
   W_Sit=""
   BEGIN CASE
      CASE ENR_CIVILAIDANT<21> = "1"
         W_Sit="M"
      CASE ENR_CIVILAIDANT<21> = "2"
         W_Sit="C"
      CASE ENR_CIVILAIDANT<21> = "3"
         W_Sit="V"
      CASE ENR_CIVILAIDANT<21> = "4"
         W_Sit="D"
      CASE ENR_CIVILAIDANT<21> = "5"
         W_Sit="B"
      CASE ENR_CIVILAIDANT<21> = "6"
         W_Sit="S"
      CASE ENR_CIVILAIDANT<21> = "7"
         W_Sit="U"
   END CASE
   W_Ligne=W_Ligne:W_Sit

   * nombre d'enfants
   W_CountEnf=DCOUNT(ENR_CIVILAIDANT<25>,CHAR(253))
   W_Annee=W_An-26
   W_NbEnfant=0
   FOR l=1 TO W_CountEnf
      IF ENR_CIVILAIDANT<25,l>="1" AND ENR_CIVILAIDANT<24,l> > ICONV("01/01/":W_Annee,"D4/") THEN
         W_NbEnfant=W_NbEnfant+1
      END
   NEXT l
   W_Ligne=W_Ligne:W_NbEnfant "R%2"

   * salaire annuel + devise
   READ ENR_HISTORCUMUL FROM F.HISTORCUMUL,W_CodeAidant:W_An:W_Entite THEN

      W_IndTabRubChg=1
      GOSUB 210
      W_TotBrut=W_CumulHisto 

      W_IndTabRubChg=2
      GOSUB 210
      W_TrancheA=W_CumulHisto 

      W_IndTabRubChg=3
      GOSUB 210
      W_TrancheB=W_CumulHisto 

      W_IndTabRubChg=4
      GOSUB 210
      W_TrancheC=W_CumulHisto 

      W_CumulHisto=W_TotBrut+W_TrancheA+W_TrancheB+W_TrancheC

	W_TotalSalaire=W_TotalSalaire+W_CumulHisto

      W_CumulHisto=W_CumulHisto "R%9"

      W_Ligne=W_Ligne:W_CumulHisto:"E"

   END ELSE
      W_Ligne=W_Ligne:"000000000":"E"   
   END

   * date d'entre
   W_DateEnt=OCONV(ENR_CONTRAT1<7>,"D4/")
   W_DateEnt=CONVERT("/","",W_DateEnt)
   W_DateEnt=W_DateEnt[5,4]:W_DateEnt[3,2]:W_DateEnt[1,2]
   W_Ligne=W_Ligne:W_DateEnt

   * date de sortie
   IF ENR_CONTRATDERN<8> # "" THEN
      W_DateSortie=OCONV(ENR_CONTRATDERN<8>,"D4/")
      W_DateSortie=CONVERT("/","",W_DateSortie)
      W_DateSortie=W_DateSortie[5,4]:W_DateSortie[3,2]:W_DateSortie[1,2]
      W_Ligne=W_Ligne:W_DateSortie
   END ELSE
      W_Ligne=W_Ligne:"        "
   END

   W_Nir=ICONV(ENR_CIVILAIDANT<17>,"MCN"):ENR_CIVILAIDANT<18>
   W_Nir=W_Nir:SPACE(15-(LEN(W_Nir)))
   W_Ligne=W_Ligne:W_Nir

   W_NbEnr=W_NbEnr+1
   W_NoLigne=W_NoLigne+1
   ENR_DADSCRC<W_NoLigne>=W_Ligne

RETURN

**************************************************************************
* Recherche l'assiette des differents types de tranche.
210


   W_CumulHisto=0
   iHistorTab=1

   IF W_TabRubChg<W_IndTabRubChg> # "" THEN
      W_Trouve1Rub = "F"
      LOOP
      WHILE W_TabRubChg<W_IndTabRubChg,iHistorTab> # "" AND W_Trouve1Rub = "F" DO
         iHistor=1
	   
         LOOP
         WHILE W_TabRubChg<W_IndTabRubChg,iHistorTab> # ENR_HISTORCUMUL<15,iHistor> AND ENR_HISTORCUMUL<15,iHistor> # "" DO
            iHistor=iHistor+1
         REPEAT

         IF ENR_HISTORCUMUL<15,iHistor> # "" THEN
            W_CumulHisto=W_CumulHisto + ENR_HISTORCUMUL<17,iHistor>       
	    W_Trouve1Rub = "V"
         END

         iHistorTab=iHistorTab+1
      REPEAT

      W_CumulHisto=INT(W_CumulHisto/100 + 1/2)
   END

RETURN

**************************************************************************
* Enregistrement fin
990

   W_Ligne=""

   FOR l=1 TO 96
      W_Ligne=W_Ligne:"9"
   NEXT l

   W_NoLigne=W_NoLigne+1
   ENR_DADSCRC<W_NoLigne>=W_Ligne

RETURN
