#include <mask.h>
#include <printapp.h>
#include <tabutil.h>
#include <sort.h>
#include <progind.h>
#include <prefix.h>

#include <nditte.h>
#include <anagr.h> 
#include <comuni.h>

#include "ba3600.h"

class Stp_indici_LUnico : public TPrintapp
{
  struct ind_lib
  {
    char   mese[3];
    char   nini_plib[6];  
    long   nfin_plib;
    char   cod_reg[4];
    long   nini_put;
    long   nfin_put;
    char   cod_vid[4];
    bool   pag_ann;
  };

  TMask*            _msk;
  TTable*           _tab_lbu,*_tab_reg;
  TLocalisamfile*   _indlib;
  TLocalisamfile*   _nditte;
  TLocalisamfile*   _anag;
  TLocalisamfile*   _comuni;
  TSort*            _sort;

  TDate   _datastampa;
  int     _anno, _meseda, _mesea;
  TString _codlib, _desc_cod_lib,_mese,_meseprec,_cod_reg,_descrizione,_cod_vidimaz;   
  TString _cofi, _paiv, _codcom, _ragsoc, _ind, _civ, _cap, _com, _prov;
  TString _cofi_dta, _paiv_dta, _codcom_dta, _ragsoc_dta, _ind_dta, _civ_dta, _cap_dta, _com_dta, _prov_dta;  
  bool    _pag_ann,_ended;//_stampa_intesta, _stampa_ind;
  char    _tipo_intesta, _tipoa_ditta; 
  long    _ditta,_oldditta, _numini_pagut,_numfin_pagut,_numini_paglib, _numfin_paglib, _codana_intesta, _codana_ditta;

public:
  
  bool menu (MENU_TAG m) { return TPrintapp::menu(m) ; }
  virtual bool user_create() ;
  virtual bool user_destroy();
  bool set_print(int);
  
  virtual bool preprocess_page (int,int);
  virtual print_action postprocess_page (int,int);
  
  virtual void postclose_print();
  virtual void set_page(int,int);
  
  void        init_sort();
  void        crea_sort();
  void        print_header();
  bool        preprocess_prova(int);
  bool        preprocess_bollato();
  void        crea_intestazione_prova();
  void        ragsoc_ditta(long);
  void        descrizione_codreg(const TString&,TString&);
  void        setta_righe_prova();
  void        setta_righe_bollato();
  void        dati_libro_unico();
  void        intestatario();
  void        compatta_ragsoc(TString&);
  void        descrizione();                            
  void        dati_anagrafici_ditta();

  static bool registri_ditta_hnd(TMask_field& f, KEY k);
  
  Stp_indici_LUnico() {}
  virtual ~Stp_indici_LUnico() {}
};