585 lines
14 KiB
C++
Executable File
585 lines
14 KiB
C++
Executable File
// cg3301.cpp
|
|
//
|
|
// classi di supporto per cg3300_application
|
|
//
|
|
|
|
#include <lffiles.h>
|
|
#include <isam.h>
|
|
#include <tabutil.h>
|
|
#include <strings.h>
|
|
#include <scanner.h>
|
|
|
|
#include <comuni.h>
|
|
#include <clifo.h>
|
|
#include <alleg.h>
|
|
#include <nditte.h>
|
|
#include <anagr.h>
|
|
#include <anafis.h>
|
|
#include <anagiu.h>
|
|
|
|
#include "cg3300.h"
|
|
|
|
const int CODTABLEN = 15;
|
|
|
|
#define MAXSTR 128
|
|
static char __tmp[MAXSTR];
|
|
static TFixed_string tmp(__tmp, MAXSTR);
|
|
|
|
//
|
|
// SortRecord
|
|
//
|
|
|
|
SortRecord::SortRecord()
|
|
{
|
|
_all = new struct alleg_sort;
|
|
_clifo = new TLocalisamfile(LF_CLIFO);
|
|
_comuni = new TLocalisamfile(LF_COMUNI);
|
|
_anagfis = new TLocalisamfile(LF_ANAGFIS);
|
|
_anaggiu = new TLocalisamfile(LF_ANAGGIU);
|
|
_anag = new TLocalisamfile(LF_ANAG);
|
|
_attiv = new TTable("%AIS");
|
|
_tpd = new TTable("%TPD");
|
|
azzera_struttura();
|
|
}
|
|
|
|
SortRecord::~SortRecord()
|
|
{
|
|
delete _clifo; delete _comuni; delete _attiv; delete _tpd;
|
|
delete _anagfis; delete _anaggiu; delete _anag;
|
|
delete _all;
|
|
}
|
|
|
|
long SortRecord::cerca_codice_all(TString tipo, long codcf)
|
|
{
|
|
TLocalisamfile& clifo = *_clifo;
|
|
|
|
clifo.zero();
|
|
clifo.put (CLI_TIPOCF, tipo);
|
|
clifo.put (CLI_CODCF, codcf);
|
|
clifo.read();
|
|
|
|
if (clifo.good())
|
|
{
|
|
long codice_all = clifo.get_long (CLI_CODALLEG);
|
|
return codice_all;
|
|
}
|
|
|
|
return 0L;
|
|
}
|
|
|
|
const char * SortRecord::decodifica_desc_att (TString & codatt)
|
|
{
|
|
TTable& attivita = * _attiv;
|
|
|
|
attivita.zero();
|
|
attivita.put ("CODTAB", codatt);
|
|
|
|
attivita.read();
|
|
|
|
if (attivita.bad())
|
|
attivita.zero();
|
|
|
|
tmp = attivita.get ("S0");
|
|
|
|
return __tmp;
|
|
}
|
|
|
|
bool SortRecord::corrispettivo (const char * tipodoc)
|
|
{
|
|
TTable& tpd = * _tpd;
|
|
TString natura_doc;
|
|
bool corrisp;
|
|
|
|
tpd.zero();
|
|
tpd.put ("CODTAB", tipodoc);
|
|
tpd.read();
|
|
if (tpd.bad())
|
|
tpd.zero();
|
|
|
|
natura_doc = tpd.get("I0");
|
|
corrisp = tpd.get_bool ("B0");
|
|
|
|
if ((natura_doc == "1") || (natura_doc == "9"))
|
|
if (corrisp)
|
|
return TRUE;
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
TRectype& SortRecord::look_com (const char * cod)
|
|
{
|
|
TLocalisamfile& com = *_comuni;
|
|
|
|
com.zero();
|
|
com.put (COM_COM, cod);
|
|
|
|
com.read();
|
|
|
|
if (com.bad())
|
|
com.zero();
|
|
|
|
return com.curr();
|
|
}
|
|
|
|
//
|
|
// Ricerca la ragione sociale in clifo
|
|
// Controlla il tipo di persona , se fisica scrive nome e cognome
|
|
// e tipo di persona nella struttura puntata da _RecordSort->Strutt
|
|
// Se e' persona fisica mette a '\0' il campo ragsoc_dett
|
|
//
|
|
// Ritorna la ragione sociale oppure NULL
|
|
//
|
|
const char * SortRecord::fill_dati_dettaglio (const char * tipocf, long codcf)
|
|
{
|
|
TLocalisamfile& clifo = *_clifo;
|
|
static char _rag[51];
|
|
TString tipop, cog, nom, rag;
|
|
TString indcf, comcf;
|
|
TString stato, paiva;
|
|
|
|
clifo.zero();
|
|
clifo.put (CLI_TIPOCF, tipocf);
|
|
clifo.put (CLI_CODCF, codcf);
|
|
clifo.read();
|
|
|
|
if ((clifo.good()))
|
|
{
|
|
tipop = clifo.get (CLI_TIPOPERS);
|
|
rag = clifo.get (CLI_RAGSOC);
|
|
|
|
indcf = clifo.curr().get (CLI_INDCF);
|
|
indcf << ", " << clifo.curr().get (CLI_CIVCF);
|
|
comcf = clifo.curr().get (CLI_COMCF);
|
|
|
|
TRectype dep = look_com ((const char *)comcf);
|
|
strcpy (_all->comune_dett , dep.get(COM_DENCOM));
|
|
strcpy (_all->prov_dett , dep.get(COM_PROVCOM));
|
|
|
|
strcpy (_all->via_dett , indcf);
|
|
|
|
paiva = clifo.curr().get (CLI_PAIV);
|
|
stato = clifo.curr().get (CLI_STATOPAIV);
|
|
|
|
strcpy (_all->paiva_dett , paiva);
|
|
strcpy (_all->statopaiva_dett , stato);
|
|
|
|
strcpy (_all->ragsoc_dett , rag);
|
|
|
|
if (tipop == "F")
|
|
{
|
|
int pos = rag.find (" ");
|
|
if (pos < 0) pos = rag.find (" ");
|
|
if (pos < 0) pos = 30; // se non ci sono spazi prendo i primi 30
|
|
cog = rag.left(pos);
|
|
nom = rag.mid (pos+1);
|
|
strcpy (_all->cognome_dett , cog.trim());
|
|
strcpy (_all->nome_dett , nom.trim());
|
|
//
|
|
// N.B.
|
|
// Azzero la ragione sociale se persona fisica.
|
|
//
|
|
strcpy (_all->ragsoc_dett , "\0");
|
|
}
|
|
strcpy (_rag, (const char*) rag);
|
|
return _rag;
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
//
|
|
// SortRecord::somma
|
|
//
|
|
// Somma gli importi dal record corrente di alleg nella struttura
|
|
// corrente.
|
|
// Incrementa SOLO i totali di riga (che sono nella struttura)
|
|
// NON i totali e i riporti in fondo alla pagina
|
|
//
|
|
void SortRecord::somma (TLocalisamfile * alleg, stampe tipo_stampa)
|
|
{
|
|
switch (tipo_stampa)
|
|
{
|
|
case fornitori:
|
|
case clienti:
|
|
_all->impesc += alleg->curr().get_real (ALL_IMPESC);
|
|
_all->ivaesc += alleg->curr().get_real (ALL_IVAESC);
|
|
_all->niesc += alleg->curr().get_real (ALL_NIESC);
|
|
_all->e8esc += alleg->curr().get_real (ALL_E8ESC);
|
|
_all->ndocesc += alleg->curr().get_int (ALL_NDOCESC);
|
|
|
|
_all->impesp += alleg->curr().get_real (ALL_IMPESP);
|
|
_all->ivaesp += alleg->curr().get_real (ALL_IVAESP);
|
|
_all->niesp += alleg->curr().get_real (ALL_NIESP);
|
|
_all->e8esp += alleg->curr().get_real (ALL_E8ESP);
|
|
_all->ndocesp += alleg->curr().get_int (ALL_NDOCESP);
|
|
|
|
// Incremento totali di riga
|
|
_all->tot_rigac += _all->impesc + _all->ivaesc + _all->niesc + _all->e8esc;
|
|
_all->tot_rigap += _all->impesp + _all->ivaesp + _all->niesp + _all->e8esp;
|
|
|
|
break;
|
|
|
|
case modulo101:
|
|
case modulo102:
|
|
_all->prog101102 += alleg->get_real("ALL_PROG101102");
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void SortRecord::azzera_struttura()
|
|
{
|
|
_all->codditta_dic = -1;
|
|
strcpy (_all->tipopers_dic, "\0");
|
|
strcpy (_all->paiva_dic, "\0");
|
|
strcpy (_all->cognome_dic, "\0");
|
|
strcpy (_all->nome_dic, "\0");
|
|
strcpy (_all->ragsoc_dic, "\0");
|
|
_all->datana_dic = "";
|
|
strcpy (_all->sesso_dic, "\0");
|
|
strcpy (_all->comunena_dic, "\0");
|
|
strcpy (_all->provna_dic, "\0");
|
|
strcpy (_all->viafis_dic, "\0"); // via + numero civico
|
|
strcpy (_all->comunefis_dic, "\0");
|
|
strcpy (_all->provfis_dic , "\0");
|
|
strcpy (_all->attivita_dic , "\0");
|
|
strcpy (_all->codatt_dic , "\0");
|
|
|
|
_all->natgiu_dic = 0;
|
|
|
|
strcpy (_all->codatt_dett, "\0");
|
|
strcpy (_all->tipopers_dett, "\0");
|
|
|
|
_all->codcf_dett = -1; // usato in da_sommare() per distinguere
|
|
// il primo record
|
|
|
|
strcpy (_all->ragsoc_dett , "\0");
|
|
strcpy (_all->cognome_dett , "\0");
|
|
strcpy (_all->nome_dett , "\0");
|
|
strcpy (_all->via_dett , "\0");
|
|
strcpy (_all->comune_dett , "\0");
|
|
strcpy (_all->prov_dett , "\0");
|
|
strcpy (_all->statopaiva_dett , "\0");
|
|
strcpy (_all->paiva_dett , "\0");
|
|
|
|
_all->anno = 0;
|
|
_all->immesso = FALSE;
|
|
|
|
_all->impesc = 0.00;
|
|
_all->ivaesc = 0.00;
|
|
_all->niesc = 0.00;
|
|
_all->e8esc = 0.00;
|
|
_all->ndocesc = 0;
|
|
|
|
_all->impesp = 0.00;
|
|
_all->ivaesp = 0.00;
|
|
_all->niesp = 0.00;
|
|
_all->e8esp = 0.00;
|
|
_all->ndocesp = 0;
|
|
|
|
_all->tot_rigac = 0.00;
|
|
_all->tot_rigap = 0.00;
|
|
|
|
_all->prog101102 = 0.00;
|
|
|
|
}
|
|
|
|
// -----------------------------------------------------------------
|
|
// COMPILA
|
|
//
|
|
// Compila la struttura _RecordSort->Strutt leggendo da _alleg
|
|
// Scarta i record con l'anno diverso da quello specificato
|
|
// nella maschera.
|
|
//
|
|
void SortRecord::compila(TLocalisamfile * _alleg)
|
|
{
|
|
TString tipoa;
|
|
long codcf;
|
|
|
|
// azzera_struttura();
|
|
|
|
tipoa = _alleg->curr().get (ALL_TIPOCF);
|
|
strcpy (_all->tipopers_dett, tipoa);
|
|
|
|
// strcpy (_all->tipopers_dett, _alleg->curr().get (ALL_TIPOCF));
|
|
|
|
codcf = _alleg->curr().get_long (ALL_CODCF);
|
|
_all->codcf_dett = codcf;
|
|
|
|
// _RecordSort->Strutt()->codcf_dett = _alleg->curr().get_long (ALL_CODCF);
|
|
|
|
// strcpy (_RecordSort->Strutt()->paiva_dett, get_paiva_cf (tipoa, codcf));
|
|
|
|
//
|
|
// QUI CAMBIA IL CODICE ATTIVITA
|
|
//
|
|
strcpy (_all->codatt_dett, _alleg->curr().get (ALL_CODATT));
|
|
|
|
_all->immesso = _alleg->curr().get_bool (ALL_IMMESSO);
|
|
|
|
_all->impesc = _alleg->curr().get_real (ALL_IMPESC);
|
|
_all->ivaesc = _alleg->curr().get_real (ALL_IVAESC);
|
|
_all->niesc = _alleg->curr().get_real (ALL_NIESC);
|
|
_all->e8esc = _alleg->curr().get_real (ALL_E8ESC);
|
|
_all->ndocesc = _alleg->curr().get_int (ALL_NDOCESC);
|
|
|
|
_all->impesp = _alleg->curr().get_real (ALL_IMPESP);
|
|
_all->ivaesp = _alleg->curr().get_real (ALL_IVAESP);
|
|
_all->niesp = _alleg->curr().get_real (ALL_NIESP);
|
|
_all->e8esp = _alleg->curr().get_real (ALL_E8ESP);
|
|
_all->ndocesp = _alleg->curr().get_int (ALL_NDOCESP);
|
|
|
|
_all->prog101102 = _alleg->curr().get_real (ALL_PROG101102);
|
|
|
|
fill_dati_dettaglio (tipoa, codcf);
|
|
}
|
|
|
|
bool SortRecord::fill_dati_anag_dic (TLocalisamfile * nditte)
|
|
{
|
|
TLocalisamfile& anagfis = *_anagfis;
|
|
TLocalisamfile& anaggiu = *_anaggiu;
|
|
TLocalisamfile& anag = *_anag;
|
|
TString codanagr;
|
|
TString tipoa;
|
|
TString comodo;
|
|
|
|
_all->codditta_dic = nditte->get_long(NDT_CODDITTA);
|
|
comodo = nditte->get(NDT_CODATTPREV);
|
|
|
|
strcpy (_all->codatt_dic, comodo);
|
|
if (comodo.not_empty())
|
|
comodo = decodifica_desc_att (comodo);
|
|
|
|
if (comodo.not_empty())
|
|
strcpy (_all->attivita_dic, comodo);
|
|
else
|
|
strcpy (_all->attivita_dic, "\0");
|
|
|
|
codanagr = nditte->curr().get(NDT_CODANAGR);
|
|
tipoa = nditte->curr().get(NDT_TIPOA);
|
|
|
|
strcpy (_all->tipopers_dic, tipoa);
|
|
|
|
anag.setkey(1);
|
|
anag.curr().zero();
|
|
anag.curr().put (ANA_TIPOA, tipoa);
|
|
anag.curr().put (ANA_CODANAGR, codanagr);
|
|
if (anag.read() == NOERR)
|
|
{
|
|
strcpy (_all->paiva_dic, anag.curr().get (ANA_PAIV));
|
|
strcpy (_all->ragsoc_dic , anag.curr().get(ANA_RAGSOC));
|
|
strcpy (_all->comunefis_dic, anag.curr().get(ANA_COMRF));
|
|
}
|
|
else
|
|
{
|
|
strcpy (_all->paiva_dic, "\0");
|
|
strcpy (_all->ragsoc_dic , "\0");
|
|
strcpy (_all->comunefis_dic, "\0");
|
|
}
|
|
|
|
if (_all->comunefis_dic[0] == '\0')
|
|
{
|
|
strcpy (_all->comunefis_dic, anag.curr().get(ANF_COMRES));
|
|
|
|
TRectype dep = look_com (_all->comunefis_dic);
|
|
|
|
strcpy (_all->comunefis_dic , dep.get(COM_DENCOM));
|
|
strcpy (_all->provfis_dic , dep.get(COM_PROVCOM));
|
|
comodo = anag.curr().get(ANA_INDRES);
|
|
comodo.rtrim();
|
|
comodo << " " << anag.curr().get (ANA_CIVRES);
|
|
strcpy (_all->viafis_dic , (const char *) comodo);
|
|
}
|
|
else
|
|
{
|
|
TRectype dep = look_com (_all->comunefis_dic);
|
|
strcpy (_all->comunefis_dic, dep.get(COM_DENCOM));
|
|
strcpy (_all->provfis_dic , dep.get(COM_PROVCOM));
|
|
comodo = anag.curr().get(ANA_INDRF);
|
|
comodo.rtrim();
|
|
comodo << " " << anag.curr().get (ANA_CIVRF);
|
|
|
|
strcpy (_all->viafis_dic, comodo);
|
|
}
|
|
|
|
if (tipoa[0] == 'F')
|
|
{
|
|
TString cognome, nome;
|
|
|
|
comodo = _all->ragsoc_dic;
|
|
cognome = comodo.sub(0,29);
|
|
cognome.trim();
|
|
strcpy (_all->cognome_dic, cognome);
|
|
|
|
comodo = _all->ragsoc_dic;
|
|
nome = comodo.mid(30);
|
|
nome.trim();
|
|
strcpy (_all->nome_dic, nome);
|
|
|
|
anagfis.setkey(1);
|
|
anagfis.curr().zero();
|
|
anagfis.curr().put (ANF_CODANAGR, codanagr);
|
|
anagfis.read();
|
|
|
|
_all->datana_dic = anagfis.curr().get_date(ANF_DATANASC);
|
|
strcpy (_all->sesso_dic , anagfis.curr().get(ANF_SESSO));
|
|
|
|
TRectype dep = look_com (anagfis.curr().get(ANF_COMNASC));
|
|
|
|
strcpy (_all->comunena_dic, dep.get(COM_DENCOM));
|
|
strcpy (_all->provna_dic , dep.get(COM_PROVCOM));
|
|
}
|
|
else
|
|
if (tipoa[0] == 'G')
|
|
{
|
|
// Leggo natura giuridica dal anagrafe giuridiche
|
|
anaggiu.setkey(1);
|
|
anaggiu.curr().zero();
|
|
anaggiu.curr().put (ANG_CODANAGR, codanagr);
|
|
if (anaggiu.read() == NOERR)
|
|
_all->natgiu_dic = anaggiu.curr().get_int (ANG_NATGIU);
|
|
else
|
|
_all->natgiu_dic = 0;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
//
|
|
// Totali
|
|
//
|
|
|
|
//
|
|
// I riporti sono i totali della pagina precedente..
|
|
//
|
|
void Totali::compila_riporti()
|
|
{
|
|
_rip_tot_es = _tot_esc;
|
|
_rip_tot_impes = _tot_impesc;
|
|
_rip_tot_ivaes = _tot_ivaesc;
|
|
_rip_tot_nies = _tot_niesc;
|
|
_rip_tot_e8es = _tot_e8esc;
|
|
}
|
|
|
|
void Totali::azzera_totali()
|
|
{
|
|
_rip_tot_es = 0;
|
|
_rip_tot_impes = 0.00;
|
|
_rip_tot_ivaes = 0.00;
|
|
_rip_tot_nies = 0.00;
|
|
_rip_tot_e8es = 0.00;
|
|
|
|
_tot_esc = 0;
|
|
_tot_impesc = 0.00;
|
|
_tot_ivaesc = 0.00;
|
|
_tot_niesc = 0.00;
|
|
_tot_e8esc = 0.00;
|
|
|
|
_tot_esp = 0;
|
|
_tot_impesp = 0.00;
|
|
_tot_ivaesp = 0.00;
|
|
_tot_niesp = 0.00;
|
|
_tot_e8esp = 0.00;
|
|
}
|
|
|
|
//
|
|
// Incrementa i totali in fondo alla pagina
|
|
//
|
|
void Totali::incrementa_totali(struct alleg_sort* buf, stampe tipo_stampa)
|
|
{
|
|
switch (tipo_stampa)
|
|
{
|
|
case fornitori:
|
|
case clienti:
|
|
_tot_tot_rigac += buf->tot_rigac;
|
|
_tot_tot_rigap += buf->tot_rigap;
|
|
|
|
_tot_esc += buf->ndocesc;
|
|
_tot_impesc += buf->impesc + buf->impesp;
|
|
_tot_ivaesc += buf->ivaesc + buf->ivaesp;
|
|
_tot_niesc += buf->niesc + buf->niesp;
|
|
_tot_e8esc += buf->e8esc + buf->e8esp;
|
|
|
|
_tot_esp += buf->ndocesp;
|
|
_tot_impesp += buf->impesp;
|
|
_tot_ivaesp += buf->ivaesp;
|
|
_tot_niesp += buf->niesp;
|
|
_tot_e8esp += buf->e8esp;
|
|
|
|
break;
|
|
|
|
case modulo101:
|
|
case modulo102:
|
|
_tot_col_101102 += buf->prog101102;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
//
|
|
// Array_desc_campi
|
|
//
|
|
|
|
void Array_desc_campi::leggi_modulo (const char * file, const char *modulo)
|
|
{
|
|
TScanner s(file);
|
|
|
|
s.paragraph (modulo);
|
|
|
|
s.equal();
|
|
_passo = s.integer();
|
|
|
|
s.equal();
|
|
_righe_modulo = s.integer();
|
|
|
|
int riga;
|
|
TString formato;
|
|
|
|
while (s.ok())
|
|
{
|
|
riga = s.integer();
|
|
formato = s.string();
|
|
|
|
add (riga, formato);
|
|
}
|
|
}
|
|
|
|
void Array_desc_campi::add(int r, const char * f)
|
|
{
|
|
desc_campo * descr = new desc_campo;
|
|
|
|
descr->_riga = r;
|
|
descr->_formato = f;
|
|
|
|
_campi.add (descr);
|
|
}
|
|
|
|
//
|
|
// Record_B
|
|
//
|
|
|
|
void Record_B::compila(TLocalisamfile *all)
|
|
{
|
|
esc = all->get_int (ALL_NDOCESC);
|
|
impesc = all->get_real (ALL_IMPESC);
|
|
ivaesc = all->get_real (ALL_IVAESC);
|
|
tot = impesc + ivaesc;
|
|
}
|
|
|
|
void Record_B::azzera()
|
|
{
|
|
tot = 0.00;
|
|
esc = 0;
|
|
impesc = 0.00;
|
|
ivaesc = 0.00;
|
|
}
|
|
|
|
void Record_B::somma()
|
|
{
|
|
tot = impesc + ivaesc;
|
|
}
|
|
|
|
|