// cg3301.cpp // // classi di supporto per cg3300_application // #include #include #include #include #include #include #include #include #include #include #include #include #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") { cog = rag.left(30); nom = rag.mid (31); 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; }