// Invio contabilita'
#define STRICT
#include <windows.h>
#include <direct.h>

#include <colors.h>
#include <isam.h>

#include <math.h>

#include <applicat.h>
#include <mask.h>
#include <relation.h>
#include <tabutil.h>
#include <utility.h>
#include <config.h>
#include <urldefid.h> 
#include <prefix.h>
#include <lffiles.h>  
#include <progind.h>  
#include <execp.h>  
#include <mailbox.h>  
#include <archives.h>
#include <nditte.h>  
#include <mov.h>
#include <rmov.h>
#include <rmoviva.h> 
#include <causali.h>
#include <rcausali.h>
#include <clifo.h>
#include <pconti.h>
#include <comuni.h>
#include <occas.h>

#include "cg6901.h"   
#include "cg6903.h"
#include "cglib04.h"

class TInv_cont : public TApplication
{ 
  enum { BUFSIZE = 4096 };
  
  TTransfer_file  _tras_file;
  TProgind*       _prog;
  TLocalisamfile* _caus;
  TLocalisamfile* _rcaus;
  TLocalisamfile* _clifo;
  TLocalisamfile* _pcon;
  TLocalisamfile* _mov;
  TLocalisamfile* _rmov;
  TLocalisamfile* _rmoviva;
  TLocalisamfile* _occas;
  TIsamtempfile*  _tcaus;
  TIsamtempfile*  _trcaus;
  TIsamtempfile*  _tclifo;
  TIsamtempfile*  _tpcon;
  TIsamtempfile*  _tmov;
  TIsamtempfile*  _trmov;
  TIsamtempfile*  _triva;
  TIsamtempfile*  _toccas;             
  TArchive        _arc;    
  
  char        _scelta;  
  
  TString     _control_rec, _header, _trasf, _std, _stato, _marker, _nome_simbolico;
  TString     _files, _codcaus, _numdoc, _reg, _codpag, _tipodoc, _codcausm, _sigle;
  TString     _ocfpi, _ragsococc, _indocc, _capocc, _localocc, _provocc, _codvali;
  bool        _esiste_ditta, _esiste_record, _inviato, _flag_bollato;
  long        _ditta, _protiva, _uprotiva, _codcf, _numrec, _tot_rec;           
  long        _dim_tot, _dim_disk; 
  long        _numrec_cau,_numrec_clifo,_numrec_pcon,_numrec_pn,_numrec_iva;
  int         _num,_annoes;                             
  TDate       _data, _datadoc, _data74ter,_datalimsk,_dataregiva,_datareg;
  real        _corrlire, _cambioi, _corrval;

public:        
  TString _titolo;
  
  virtual bool create();
  virtual bool destroy();
  virtual bool menu(MENU_TAG m);         
  
  bool    main_loop();
  
  bool    esiste_tabella_studio();
  bool    record_controllo();  
  bool    esegui_controlli();
  bool    leggi_header();
  bool    controlli();
  bool    sub_controlli();
  bool    tabella_ditta();
  bool    controlla_stato_invio();
  bool    numero_data();
  void    leggi_record_controllo();          
  void    codifica_ditta (TMask& m);
  void    testata_mov_PN ();
  void    testata_trasfer(long nreg, int nrig, TString& record);
  void    sola_iva(TString& record);
  bool    testata_mov_IVA(long numreg);
  void    cerca_occasionale();
  void    cerca_comune_occas(const TString& com);
  
  void    apri_file_temp();
  void    chiudi_file_temp();

  void    crea_marker(TMask& m);
  void    setta_parametri_record(TMask& m,const TString& flag);
  void    setta_tabella_studio(TMask& m, bool flag_ditta = TRUE);
  void    setta_tabella_ditta(TMask& m, const char* flag, bool comp = TRUE);
  void    crea_record_controllo(TMask& m);
  
  bool    invio_tempfile(TMask& m);   
  void    causali2tempfile(TString& key,TMask& m);            
  void    cancella_righe_causali(TString& codcaus);
  void    scrivi_righe_causali(TString& codcaus, char uselab);
  void    clifo2tempfile(TString& key,TMask& m);
  void    pcon2tempfile(TString& key,TMask& m);
  
  void    movPN2tempfile(TString& key,TMask& m);
  void    scrivi_righePN(long numreg); 
  void    primanota_inviata(long numreg);  
  
  void    movIVA2tempfile(TString& key,TMask& m);
  bool    occasionali(const TString& ocfpi);
  void    iva_inviata(long numreg);
  
  bool    invio_contabilita();
  bool    invio_tab_cau();
  bool    invio_clifo  ();
  bool    invio_pcon   ();
  bool    invio_mov_PN ();
  bool    invio_mov_IVA();    

  void    aggiorna_header(TString& files);
  void    aggiorna_trasfer(TString& files);
  
  void    negPC2negAS(TString& numero);
  void    dec2integer(real& val, long dec);

  void    aggiorna_marker(TString& token, int pos);
  void    calcola_totale_record();
  void    scrivi_telefono(TString& app);
  
  const char* cerca_provincia(const TString& comcf); 
  
  static bool setta_maschera_hnd(TMask_field& f, KEY k);
  static bool messaggio_hnd     (TMask_field& f, KEY k);    
  
  int   calcola_numero_dischi(TMask& m);
  FILE* chiedi_disco(const char* name, int disk, char floppy, bool lettura);
  bool  scrivi_disco(char floppy, int disk, const char* work, FILE* i, TProgind& w);
  
  TInv_cont(char mov);
};                                      

HIDDEN TInv_cont& app() { return (TInv_cont &) main_app(); }

