From 2b1c61fb339d5571315e2e2638e2c4b58bfa7002 Mon Sep 17 00:00:00 2001 From: nik Date: Mon, 12 Sep 1994 07:42:21 +0000 Subject: [PATCH] Stampa registri completa (senza ancora liquidazione) git-svn-id: svn://10.65.10.50/trunk@216 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- cg/cg4400.cpp | 3184 ++++++++++++++++++++++++------------------------ cg/cg4400.h | 258 ++-- cg/cg4400a.uml | 472 +++---- cg/cg4401.cpp | 227 ++-- 4 files changed, 2079 insertions(+), 2062 deletions(-) diff --git a/cg/cg4400.cpp b/cg/cg4400.cpp index 16693f157..105f650a4 100755 --- a/cg/cg4400.cpp +++ b/cg/cg4400.cpp @@ -1,1576 +1,1608 @@ -// cg4400.cpp -// Stampa tabella registri -#include "cg4.h" -#include "cg4400.h" -#include "cg4400a.h" - -HIDDEN TString256 TMP; - -HIDDEN CG4400_application * app() { return (CG4400_application*) MainApp(); } - -bool filter_func (const TRelation * r) -{ - TLocalisamfile * mov = r->lfile(LF_MOV); - TString codreg = mov->get(MOV_REG); - TDate datareg = mov->get_date(MOV_DATAREG); - int annoiva = mov->get_int(MOV_ANNOIVA); - - if (codreg != (app()->_codreg) || annoiva != (app()->_annoes)) - return FALSE; - - if (app()->_data_da.string() != "" && app()->_data_a.string() != "") - if ( (datareg < app()->_data_da || datareg > app()->_data_a ) || (!datareg.ok()) ) - return FALSE; - - return TRUE; -} - -HIDDEN int compare_rows(const TObject** o1, const TObject** o2) -{ - TRiga* r1 = (TRiga*)*o1; - TRiga* r2 = (TRiga*)*o2; - - return (strcmp((const char*)r1->_codiva, (const char*)r2->_codiva)); -} - -HIDDEN int compare(const TObject** o1, const TObject** o2) -{ - TRigaiva* r1 = (TRigaiva*)*o1; - TRigaiva* r2 = (TRigaiva*)*o2; - TString campo1; - TString campo2; - - campo1.format("%d%4s", r1->_tipodet, (const char*)r1->_codiva); - campo2.format("%d%4s", r2->_tipodet, (const char*)r2->_codiva); - return (strcmp((const char*)campo1, (const char*)campo2)); -} - -/* - bool CG4400_application::libro_giornale_iva_unico() - { - TConfig conf(CONFIG_DITTA); - - return conf.get("StLgiU") == "X"; - } - */ - -bool mask_select (TMask_field& f, KEY k) -{ - long j, cnt, chk; int i; - TString from = f.mask().get(DA_CODICE); - TString to = f.mask().get(A_CODICE); - TBit_array selected = app()->_selected; - - // build sheet - if (k == K_SPACE) - { - f.mask().field(DA_CODICE).set(""); - f.mask().field(A_CODICE).set(""); - app()->_ditte->destroy(); chk = 0l; - for (i = 0; i < app()->_nomiditte.items(); i++) - { - if (app()->_selected[i]) continue; - TToken_string d = (const char*)((TToken_string&)app()->_nomiditte[i]); - TString cod = d.get(0); - app()->_ditte->add(d); - - if (!from.empty() || !to.empty()) - { - if (from.empty()) from = "0"; - if (to.empty()) to = "999999999"; - if (atol(cod) >= atol(from) && atol(cod) <= atol(to)) - app()->_ditte->check(chk++); - } - } - // seleziona e aggiungi alle gia' selezionate - if (app()->_ditte->run() == K_ENTER) - { - cnt = 0; - for (j = 0l; j < app()->_n_ditte; j++) - { - if (app()->_selected[j]) continue; - if (app()->_ditte->checked(cnt++)) - selected.set(j); - } - app()->_selected |= selected; - selected.reset(); - } - long numd = app()->_selected.ones(); - f.mask().set(F_SELECT,numd); - } - return TRUE; -} - -bool mask_verifica (TMask_field& f, KEY k) -{ - int i; - - if (k == K_SPACE) - { - app()->_ditte->destroy(); - for (i = 0; i < app()->_nomiditte.items(); i++) - { - TToken_string d = (const char*)((TToken_string&)app()->_nomiditte[i]); - app()->_ditte->add(d); - if (app()->_selected[i]) app()->_ditte->check(i); - } - app()->_ditte->disable_check(); - app()->_ditte->run(); - app()->_ditte->enable_check(); - } - return TRUE; -} - -bool mask_annulla (TMask_field& f, KEY k) -{ - if (k == K_SPACE) - { - app()->_selected.reset(); - f.mask().set(F_SELECT, "0"); - } - return TRUE; -} - -bool mask_mese (TMask_field& f, KEY k) -{ - if (k == K_ENTER) - { - int mese = f.mask().get_int(MESE); - int umese = f.mask().get_int(ULTIMO_MESE); - - if (mese != umese+1) - { - f.warning_box ("Le stampe devono essere richieste mese per mese! I mesi successivi a %s non sono ancora stati stampati.", itom(umese)); - return FALSE; - } - } - return TRUE; -} - -bool mask_cod (TMask_field& f, KEY k) -{ - TTable TabLbu ("%LBU"); - TString codtab; - int anno; - - //if ( (k == K_TAB) && f.mask().is_running() ) - if ( (k == K_SPACE)||(k == K_TAB) ) - { - TString codlib = f.mask().get(CODICE_LIB_UN); - anno = f.mask().get_int(ANNO); - - TabLbu.zero(); - codtab.format ("%04d%-3s", anno, (const char*)codlib); - TabLbu.put ("CODTAB", codtab); - TabLbu.read(); - if ( TabLbu.good() ) - { - // f.mask().set(MESE,TabLbu.get_long("I0")+1); - f.mask().set(ULTIMO_MESE,TabLbu.get_long("I0")); - f.mask().set(ULTIMA_PAGINA,TabLbu.get_long("I1")); - } - } - return TRUE; -} - -bool mask_data (TMask_field& f, KEY k) -{ - const short id = f.dlg(); - - if (k == K_ENTER) - { - int anno = f.mask().get_int(ANNO); - TDate data = f.mask().get(id); - if (data.ok()) - if (data.year() != anno) - { - f.warning_box("L'anno delle date limite deve essere uguale all'anno iva specificato"); - return FALSE; - } - } - return TRUE; -} - -/* - bool mask_fino_a_mese (TMask_field& f, KEY k) - { - if (k == K_ENTER) - { - TTable TabReg ("REG"); - TString16 codtab; - int giorni_del_mese; - TString codreg = f.mask().get(CODICE_LIBRO); - int tipo = f.mask().get_int(TIPO_STAMPA); - int anno = f.mask().get_int(ANNO); - - if ( (tipo == 1) || (tipo == 4) ) - { - int fino_a_mese = f.mask().get_int(FINO_A_MESE); - if (fino_a_mese == 12) - giorni_del_mese = 31; - else - { - TDate primo = format("01/%02d/%4d", fino_a_mese+1, anno); - --primo; - giorni_del_mese = primo.day(); - } - TDate datasup = format("%02d/%02d/%4d",giorni_del_mese,fino_a_mese,anno); - if (codreg != "") - { - TabReg.zero(); - codtab << anno << codreg; - TabReg.put ("CODTAB", codtab); - TabReg.read(); - if ( TabReg.good() ) - { - TDate data = TabReg.get_date("D3"); - if (datasup < data) - { - TString16 datas = format("%02d/%4d", data.month(), data.year()); - f.warning_box ("La data specificata non deve essere inferiore al %s (ultima data di stampa specificata sul registro)", (const char*)datas); - return FALSE; - } - } - } - if (tipo == 4) - { - TabReg.zero(); - TabReg.put ("CODTAB", anno); - TRectype r (TabReg.curr()); - TabReg.read(_isgteq); - for (; !TabReg.eof(); TabReg.next()) - { - if (TabReg.curr() != r) break; - - int tiporeg = TabReg.get_int("I0"); - if (tiporeg == 5) //libro giornale - { - TDate data = TabReg.get_date("D3"); - if (datasup > data) - { - TString16 datas = format("%02d/%4d", data.month(), data.year()); - f.warning_box ("La data specificata non deve essere superiore al %s (ultima data di stampa del libro giornale)", (const char*)datas); - return FALSE; - } - } - } - } - } - } - return TRUE; - } - */ - -//da una SHEET non e' possibile mandare messaggi nella maschera!!! -HIDDEN bool my_handler (TMask_field& f, KEY k) -{ - if (k == K_TAB) - { - TMask& m = f.mask(); - int stampa_su = m.get_int(TIPO_STAMPA); - if ( (stampa_su == 1) || (stampa_su == 4) ) - { - m.hide (CODICE_LIB_UN); - m.hide (CODICE_LIBRO_PROVA); - m.hide (MESE); - m.hide (ULTIMO_MESE); - m.hide (ULTIMA_PAGINA); - m.hide (CODICE_LIBRO_IVA); - m.hide (DATA_STAMPA); - m.hide (DA_DATA); - m.hide (A_DATA); - m.show (CODICE_LIBRO); - m.show (TIPO_RIEPILOGATIVO); - m.show (FINO_A_MESE); - } - if (stampa_su == 2) - { - m.show (CODICE_LIB_UN); - m.hide (CODICE_LIBRO_PROVA); - m.show (MESE); - m.show (ULTIMO_MESE); - m.show (ULTIMA_PAGINA); - m.show (CODICE_LIBRO_IVA); - m.hide (DATA_STAMPA); - m.hide (DA_DATA); - m.hide (A_DATA); - m.hide (CODICE_LIBRO); - m.hide (TIPO_RIEPILOGATIVO); - m.hide (FINO_A_MESE); - } - if (stampa_su == 3) - { - m.hide (CODICE_LIB_UN); - m.hide (MESE); - m.hide (ULTIMO_MESE); - m.hide (ULTIMA_PAGINA); - m.hide (CODICE_LIBRO_IVA); - m.hide (CODICE_LIBRO); - m.show (CODICE_LIBRO_PROVA); - m.show (DATA_STAMPA); - m.show (DA_DATA); - m.show (A_DATA); - m.hide (TIPO_RIEPILOGATIVO); - m.hide (FINO_A_MESE); - } - } - return TRUE; -} - -const char * CG4400_application::descr_doc(const char * tipo) -{ - TTable tab_tpd("%TPD"); - TString codtab = format ("%-2s", tipo); - - tab_tpd.zero(); - tab_tpd.put("CODTAB", codtab); - if (tab_tpd.read()==NOERR) - TMP = tab_tpd.get("S0"); - else - TMP = ""; - - return TMP; -} - -const char * CG4400_application::descr_iva(const char * cod) -{ - TTable tab_iva("%IVA"); - TString codtab = format ("%-4s", cod); - - tab_iva.zero(); - tab_iva.put("CODTAB", codtab); - if (tab_iva.read()==NOERR) - TMP = tab_iva.get("S0"); - else - TMP = ""; - - return TMP; -} - -const char * CG4400_application::desc_attivita(const char * codatt) -{ - TTable attiv ("%AIS"); - - attiv.zero(); - attiv.put("CODTAB", codatt); - if (attiv.read()==NOERR) - TMP = attiv.get("S0"); - else - TMP = ""; - return TMP; -} - -const char * CG4400_application::ricerca_cf(char tipocf, long codcf) -{ - _clifo->zero(); - _clifo->put(CLI_TIPOCF, tipocf); - _clifo->put(CLI_CODCF, codcf); - if (_clifo->read() == NOERR) - TMP = _clifo->get(CLI_RAGSOC); - else - TMP = ""; - return TMP; -} - -const char * CG4400_application::ricerca_occ(const char * occ) -{ - TLocalisamfile occas (LF_OCCAS); - - occas.zero(); - occas.put(OCC_CFPI, occ); - - if (occas.read() == NOERR) - TMP = occas.get(OCC_RAGSOC); - else - TMP = ""; - return TMP; -} - -void CG4400_application::user_create() -{ - _nditte = new TLocalisamfile(LF_NDITTE); - _ditte = new TArray_sheet(-1, -1, 0, 0, "Selezione Ditte", - "@1|Cod.@5|Ragione Sociale@50"); - _n_ditte = 0l; - for (_nditte->first(); !_nditte->eof(); _nditte->next()) - { - TString cod = _nditte->get("CODDITTA"); - _n_ditte++; - TToken_string* d = new TToken_string(" "); - d->add(cod); - d->add(_nditte->get("RAGSOC")); - _nomiditte.add(d); - } - _tab = new TLocalisamfile(LF_TAB); - _tabcom = new TLocalisamfile(LF_TABCOM); - _tabreg = new TTable("REG"); - _tablbu = new TTable("%LBU"); - _tabinl = new TTable("%INL"); - _tablim = new TTable("LIM"); - _tabpim = new TTable("PIM"); - _clifo = new TLocalisamfile(LF_CLIFO); - _occas = new TLocalisamfile(LF_OCCAS); - _rel = new TRelation (LF_MOV); - _rel->add(LF_CAUSALI,"CODCAUS=CODCAUS",1,LF_MOV); - _rel->add(LF_RMOVIVA,"NUMREG=NUMREG",1,LF_MOV); - _cur = new TCursor(_rel, "", 1); - //_cur->set_filterfunction(filter_func); - - add_cursor(_cur); - add_file(LF_MOV); - add_file(LF_RMOVIVA); -} - -void CG4400_application::user_destroy() -{ - delete _ditte; - delete _nditte; - delete _tab; - delete _tabcom; - delete _cur; - delete _rel; - delete _clifo; -} - - -void CG4400_application::calcola_progressivi(real& r0, real& r1, const char* codiva, const int tipocr) -{ - TTable pim ("PIM"); - TString chiave; - int i, num=0; - - if (_tipo_stampa == 1) - num = _datareg.month(); - if ( (_tipo_stampa == 2) || (_tipo_stampa == 4) ) - num = _fino_a_mese; - - if (_frequiva == 'T') - for (i=3; isave_status(); - bool ok = _cur->is_first_match(LF_RMOVIVA); - int nrec = 0; - - while (ok) - { - nrec++; - TRectype iva (_cur->file(LF_RMOVIVA)->curr()); - tipodet = iva.get_int (RMI_TIPODET); - tipocr = iva.get_int (RMI_TIPOCR); - impo = iva.get_real(RMI_IMPONIBILE); - impos = iva.get_real(RMI_IMPOSTA); - codiva = iva.get(RMI_CODIVA); - - impop = imposp = 0.00; - _riga_rmi.add_riga(impo,impos,codiva,tipodet,impop,imposp); - - if (_tipo_reg == 2) //registro acquisti - { - if (_tipo_stampa != 3) //stampa definitiva - calcola_progressivi(impop,imposp,codiva,tipocr); - _iva_array.add_riga(impo,impos,codiva,tipodet,impop,imposp); - } - - impop = imposp = 0.00; - if (_tipo_stampa != 3) - calcola_progressivi(impop,imposp,codiva,tipocr); - - _tot_iva_array.add_riga(impo,impos,codiva,impop,imposp); - - ok = _cur->next_match(LF_RMOVIVA); - } - _cur->restore_status(); - - return nrec; -} - -int CG4400_application::setta_riga(int r, const TRigaiva& riga, real& tot1, - real& tot2, real& tot3, real& tot4) -{ - set_row(r, "%3s", (const char*)riga._codiva); - TString descr = descr_iva(riga._codiva); - set_row(r, "@5g%s",(const char*)descr); - set_row(r, "@25g%r", &riga._imponibile); - set_row(r, "@41g%r", &riga._imposta); - if (_tipo_stampa != 3) - { - set_row(r, "@81g%r", &riga._imponibilep); - set_row(r++, "@98g%r", &riga._impostap); - } - else r++; - tot1 += riga._imponibile; - tot2 += riga._imposta; - tot3 += riga._imponibilep; - tot4 += riga._impostap; - - return r; -} - -bool CG4400_application::controlla_liquidazione() -{ - TTable lim ("LIM"); - TTable pim ("PIM"); - TString16 mesi_ric = ""; - TString16 mesi_cal = ""; - TString16 chiave = ""; - int i; - - if (lim.empty()) - return yesno_box("Non esiste la tabella liquidazione iva mensile! Vuoi ugualmente continuare la stampa?"); - if (pim.empty()) - return yesno_box("Non esiste la tabella progressivi iva mensile! Vuoi ugualmente continuare la stampa?"); - - if (_frequiva == 'T') //nella tabella LIM ho solo i mesi 3, 6, 9, 12 - { - for (i=3; i<=_fino_a_mese+3; i+=3) - { - chiave = ""; - chiave << _annoes << i; - lim.put("CODTAB", chiave); - if (lim.read() == NOERR) - { - bool calcolato = lim.get_bool("B0"); - if (!calcolato) - - // return yesno_box("La liquidazione relativa al mese di %s deve essere ricalcolata. Vuoi ugualmente continuare la stampa?", itom(i) ); - mesi_ric << itom(i) << "\n\r"; - } - else - // return yesno_box("La liquidazione relativa al mese di %s non e' stata calcolata. Vuoi ugualmente continuare la stampa?", itom(i) ); - mesi_cal << itom(i) << "\n\r"; - } - } - if (_frequiva == 'M') - { - for (i=1; i<=_fino_a_mese; i++); - { - chiave = ""; - chiave << _annoes << i; - lim.put("CODTAB", chiave); - if (lim.read() == NOERR) - { - bool calcolato = lim.get_bool("B0"); - if (!calcolato) - // return yesno_box("La liquidazione relativa al mese di %s deve essere ricalcolata. Vuoi ugualmente continuare la stampa?", itom(i) ); - mesi_ric << itom(i) << "\n\r"; - } - else - // return yesno_box("La liquidazione relativa al mese di %s non e' stata calcolata. Vuoi ugualmente continuare la stampa?", itom(i) ); - mesi_cal << itom(i) << "\n\r"; - } - } - if (mesi_ric.not_empty()) - { - warning_box ("Deve essere ricalcolata la liquidazione relativa ai mesi di:\n %s ", (const char *)mesi_ric); - return yesno_box("Vuoi ugualmente continuare la stampa?"); - } - - if (mesi_cal.not_empty()) - { - warning_box ("La liquidazione relativa al mese di %s non e' stata calcolata", (const char *)mesi_cal); - return yesno_box("Vuoi ugualmente continuare la stampa?"); - } - return TRUE; -} - -//controlla che i movimenti con data di registrazione compresa tra l'anno precedente e l'ultima data stampata siano tutti gia' stati stampati in forma definitiva*/ -bool CG4400_application::controlla_mov() -{ - TLocalisamfile mov (LF_MOV); - bool ok = TRUE; - byte tipo; - TDate udata; - TDate data = format("01/01/%4d", _annoes - 1); - TRecnotype rec = _tabreg->recno(); - for (mov.first(); !mov.eof(); mov.next()) - { - TString16 reg = mov.get(MOV_REG); - TDate datareg = mov.get_date(MOV_DATAREG); - if (_stampa_tutti_i_registri) - cerca_reg (reg, tipo, udata); - else udata = _data_da; - if ( (_stampa_tutti_i_registri && ((tipo == 1)||(tipo == 2))) - || ((!_stampa_tutti_i_registri)&&(reg == _codreg)) ) - if ( (datareg >= data) && (datareg <= udata) ) - { - bool stampato = mov.get_bool(MOV_STAMPATO); - long numreg = mov.get_long(MOV_NUMREG); - if (!stampato) - { - warning_box("Il movimento con numero di registrazione %ld non e' ancora stato stampato in forma definitiva!", numreg); - ok = FALSE; - } - } - } - _tabreg->readat(rec); - return ok; -} - -void CG4400_application::cerca_reg(const TString& c, byte& t, TDate& d) -{ - TString16 cod = ""; - - cod << _annoes << c; - _tabreg->zero(); - _tabreg->put("CODTAB", cod); - if (_tabreg->read() == NOERR) - { - t = _tabreg->get_int ("I0"); - d = _tabreg->get_date("D3"); - } -} - -/* - bool CG4400_application::controlla_mov() - { - bool ok = TRUE; - - if (_stampa_tutti_i_registri) - { - TRecnotype rec = _tabreg->recno();//la first l'ho gia' fatta - for (; !_tabreg->eof(); _tabreg->next()) - { - TString codtab = _tabreg->get("CODTAB"); - int anno = atoi(codtab.mid(0,4)); - if (anno != _annoes) break; - - TDate data_da = _tabreg->get_date("D3"); - TString16 codreg = codtab.mid(4,3); - leggi_movimenti(data_da, codreg, ok); - } - _tabreg->readat(rec); - } - else - leggi_movimenti(_data_da, _codreg, ok); - - return ok; - } - - void CG4400_application::leggi_movimenti(const TDate& d, const TString& cod, bool& ok) - { - TLocalisamfile mov (LF_MOV); - bool stampato; - long numreg; - TString codreg; - - TDate data = format("01/01/%4d", _annoes - 1); - mov.zero(); - TRectype a (mov.curr()); - mov.put(MOV_DATAREG, data); - a.put (MOV_DATAREG, d); - mov.read(_isgteq); - while (mov.curr() < a && !mov.eof()) - { - stampato = mov.get_bool(MOV_STAMPATO); - numreg = mov.get_long(MOV_NUMREG); - codreg = mov.get(MOV_REG); - if (codreg == cod) - if (!stampato) - { - warning_box("Il movimento con numero di registrazione %ld non e' ancora stato stampato in forma definitiva!", numreg); - ok = FALSE; - } - mov.next(); - } - } - */ - -void CG4400_application::set_page_tot_reg() -{ - reset_print(); - TString riga(_stampa_width); - int r=1, rr=0, row=0; - real tot_imponib, tot_imposta, tot_imponibp, tot_impostap; - - riga.fill('-'); - set_row(r, "%s", (const char *) riga); - r++; - set_row(r, "Legenda Tipo Operazione: 1=operazione intracomunitaria 2=AF art.34 comma 3"); - set_row(r, "@78g3=operazione intracomunitaria e AF art.34 comma 3"); - r++; - set_row(++r, "Tipo documento@30gTotale documento"); - r+=2; - for (int j = 0; j < _doc_array.items(); j++) - { - TTipodoc& doc = (TTipodoc&)_doc_array[j]; - rr = r+j; - set_row(rr, "%2s", (const char*) doc._tipodoc); - set_row(rr, "@3g%.25s", (const char*) doc._descrdoc); - set_row(rr, "@29g%r", &doc._totdoc); - } - _doc_array.destroy(); - - if (rr > 0) - rr++; - else - rr = r; - - if (_nrec > 0) //numero records di rmoviva - { - set_row(++rr, "@26g---------- P E R I O D O ----------"); - if (_tipo_stampa != 3) - set_row(rr,"@82g------ P R O G R E S S I V I ------"); - rr++; - set_row(rr, "Cod."); - if (_tipo_reg == 2) - { - set_row(rr, "@36gA C Q U I S T I"); - if (_tipo_stampa != 3) - set_row(rr, "@92gA C Q U I S T I"); - } - if (_tipo_reg == 1) - { - set_row(rr, "@37gV E N D I T E"); - if (_tipo_stampa != 3) - set_row(rr, "@93gV E N D I T E"); - } - rr++; - set_row(rr, "iva Descrizione@30gImponibile@49gImposta"); - if (_tipo_stampa != 3) - set_row(rr++, "@86gImponibile@106gImposta"); - else rr++; - rr++; - tot_imponib = tot_imposta = tot_imponibp = tot_impostap = 0.00; - - _tot_iva_array.sort(compare_rows); - - for (int k = 0; k < _tot_iva_array.items(); k++) - { - TRiga& riga = (TRiga&)_tot_iva_array[k]; - row = rr+k; - set_row(row, "%3s", (const char*)riga._codiva); - TString descr = descr_iva(riga._codiva); - set_row(row, "@5g%s", (const char*)descr); - set_row(row, "@25g%r", &riga._imponibile); - set_row(row, "@41g%r", &riga._imposta); - if (_tipo_stampa != 3) - { - set_row(row, "@81g%r", &riga._imponibilep); - set_row(row, "@98g%r", &riga._impostap); - } - tot_imponib += riga._imponibile; - tot_imposta += riga._imposta; - tot_imponibp += riga._imponibilep; - tot_impostap += riga._impostap; - } - _tot_iva_array.destroy(); - row++; - set_row(++row, "TOTALE@25g%r@41g%r", &tot_imponib, &tot_imposta); - if (_tipo_stampa != 3) - set_row(row, "@81g%r@98g%r", &tot_imponibp, &tot_impostap); - //la stampa "tipi di indetraibilita'" viene fatta solo per gli acquisti - if (_tipo_reg == 2) - { - row+=2; - int tdetprec = -1; - int rw = row; - tot_imponib = tot_imposta = tot_imponibp = tot_impostap = 0.00; - - _iva_array.sort(compare); - for (int s = 0; s < _iva_array.items(); s++) - { - TRigaiva& riga = (TRigaiva&)_iva_array[s]; - switch (riga._tipodet) - { - case 1: if (riga._tipodet != tdetprec) - { - set_row(rw++, "----- Indetraibile su op.es. -----"); - set_row(rw, "Cod."); - rw++; - set_row(rw, "iva Descrizione@30gImponibile@49gImposta"); - if (_tipo_stampa != 3) - set_row(rw++, "@86gImponibile@106gImposta"); - else rw++; - rw++; - } - rw = setta_riga(rw, riga, tot_imponib, tot_imposta, tot_imponibp, tot_impostap); - tdetprec = riga._tipodet; - break; - case 3: if (tdetprec == 1) - { - set_row(++rw, "TOTALE@25g%r@41g%r", &tot_imponib, &tot_imposta); - if (_tipo_stampa != 3) - set_row(rw, "@81g%r@98g%r", &tot_imponibp, &tot_impostap); - tot_imponib = tot_imposta = tot_imponibp = tot_impostap = 0.00; - rw+=2; - } - if (riga._tipodet != tdetprec) - { - set_row(rw++, "----- Passaggi interni -----"); - set_row(rw, "Cod."); - rw++; - set_row(rw, "iva Descrizione@30gImponibile@49gImposta"); - if (_tipo_stampa != 3) - set_row(rw++, "@86gImponibile@106gImposta"); - else rw++; - rw++; - } - rw = setta_riga(rw, riga, tot_imponib, tot_imposta, tot_imponibp, tot_impostap); - tdetprec = riga._tipodet; - break; - case 9: if ( (tdetprec == 1) || (tdetprec == 3) ) - { - set_row(++rw, "TOTALE@25g%r@41g%r", &tot_imponib, &tot_imposta); - if (_tipo_stampa != 3) - set_row(rw, "@81g%r@98g%r", &tot_imponibp, &tot_impostap); - tot_imponib = tot_imposta = tot_imponibp = tot_impostap = 0.00; - rw+=2; - } - if (riga._tipodet != tdetprec) - { - set_row(rw++, "----- N.D. 9 - acquisti indeducibili per ART.19 -----"); - set_row(rw, "Cod."); - rw++; - set_row(rw, "iva Descrizione@30gImponibile@49gImposta"); - if (_tipo_stampa != 3) - set_row(rw++, "@86gImponibile@106gImposta"); - else rw++; - rw++; - } - rw = setta_riga(rw, riga, tot_imponib, tot_imposta, tot_imponibp, tot_impostap); - tdetprec = riga._tipodet; - break; - default: break; - } - } - if (tdetprec == 9) - { - set_row(++rw, "TOTALE@25g%r@41g%r", &tot_imponib, &tot_imposta); - if (_tipo_stampa != 3) - set_row(rw, "@81g%r@98g%r", &tot_imponibp, &tot_impostap); - } - _iva_array.destroy(); - } - } -} - -bool CG4400_application::compila_reg(const TMask& m) -{ - int anno; - long codditta = _nditte->get_long("CODDITTA"); - TString16 codtab = ""; - - _tipo_stampa = m.get_int(TIPO_STAMPA); - if (_tipo_stampa == 2) //stampa su libro unico di studio - _codreg = m.get(CODICE_LIBRO_IVA); - else if (_tipo_stampa == 3) //stampa di prova - _codreg = m.get(CODICE_LIBRO_PROVA); - else _codreg = m.get(CODICE_LIBRO); - - if (_codreg.trim().empty()) - { - _stampa_tutti_i_registri = TRUE; - _tabreg->first(); - if (!_tabreg->eof()) - { - codtab = _tabreg->get("CODTAB"); - anno = atoi(codtab.mid(0,4)); - if (anno > _annoes) - { - warning_box("Non esistono registri IVA della Ditta %ld per l'anno %d", - codditta, _annoes); - return FALSE; - } - } - } - else // stampa un solo registro - { - _stampa_tutti_i_registri = FALSE; - codtab << _annoes << _codreg; - _tabreg->zero(); - _tabreg->put("CODTAB", codtab); - if (_tabreg->read() == NOERR) - { - _tipo_reg = _tabreg->get_int("I0"); - _pagine_stampate = _tabreg->get_int("I1"); - //_pagine_numerate = tab_reg.get_int("I2"); - //_stampa_ok = tab_reg.get_int("I7"); - //_nprog_da = tab_reg.get_long ("I6"); - //_tot_dare = tab_reg.get_real ("R1") - //_tot_avere = tab_reg.get_real ("R2"); - if (_tipo_stampa != 3) - _data_da = _tabreg->get_date ("D3"); - if ( _tipo_stampa == 1 || _tipo_stampa == 4 ) - if ( _data_a < _data_da) - { - TString16 datas = format("%02d/%4d", _data_da.month(), _data_da.year()); - warning_box ("La data specificata non deve essere inferiore al %s (ultima data di stampa specificata sul registro)", (const char*)datas); - return FALSE; - } - //_stampa_intesta = _tabreg->get_bool ("B9"); - _codatt = _tabreg->get("S8"); - _attivita = desc_attivita(_codatt); - _desc_lib = _tabreg->get ("S0"); - } - else - { - warning_box("Il registro IVA specificato non esiste nella \n Ditta %ld", codditta); - return FALSE; - } - } - - if (_tipo_stampa == 4) - { - TString app(4); - _tabreg->zero(); - app = format("%04d", _annoes); - _tabreg->put ("CODTAB", app); - TRectype r (_tabreg->curr()); - _tabreg->read(_isgteq); - for (; !_tabreg->eof(); _tabreg->next()) - { - if (_tabreg->curr() != r) break; - - int tiporeg = _tabreg->get_int("I0"); - if (tiporeg == 5) //libro giornale - { - TDate data = _tabreg->get_date("D3"); - if (_data_a > data) - { - TString16 datas = format("%02d/%4d", data.month(), data.year()); - warning_box ("La data specificata non deve essere superiore al %s (ultima data di stampa del libro giornale)", (const char*)datas); - return FALSE; - } - } - } - } - - return TRUE; -} - -bool CG4400_application::compila_lib() -{ - TTable tab_lib ("%LBU"); - TString16 cod; - - cod << _annoes << _codlib; - tab_lib.zero(); - tab_lib.put("CODTAB", cod); - - if (tab_lib.read() == NOERR) - { - _stampa_ind_ditta = tab_lib.get_bool("B1"); - return TRUE; - } - return FALSE; -} - -bool CG4400_application::preprocess_print(int file, int counter) -{ - if (file == LF_MOV) - { - _iva_array.destroy(); - _riga_rmi.destroy(); - _tot_iva_array.destroy(); - _doc_array.destroy(); - _dataregp = ""; - _mov_empty = TRUE; - _primast = _u_stampata; - set_print_zero(); - } - return TRUE; -} - -bool CG4400_application::preprocess_page(int file, int counter) -{ - if (file == LF_MOV) - { - if (counter) return TRUE; - int rr = 0; - TString ragsoc; - TString tipo_op = ""; - - TLocalisamfile* mov = _cur->file(LF_MOV); - TLocalisamfile* caus = _cur->file(LF_CAUSALI); - - //long annoes = mov->get_long(MOV_ANNOES); - //TString16 codreg = mov->get(MOV_REG); - _datareg = mov->get_date(MOV_DATAREG); - - //if (codreg != _codreg || annoes != _annoes) - // return FALSE; - - //if (_data_da.string() != "" && _data_a.string() != "") - // if ( (_datareg < _data_da || _datareg > _data_a) || (!_datareg.ok()) ) - // return FALSE; - - _mov_empty = FALSE; - - //if ( (_tipo_stampa == 1) || (_tipo_stampa == 4) ) - if ( (_datareg.month() != _dataregp.month()) && (_dataregp.ok()) ) - { - if (_tipo_stampa == 2) - ++ _u_stampata; - printer().formfeed(); - } - - _dataregp = _datareg; - - TDate datadoc = mov->get_date(MOV_DATADOC); - long numreg = mov->get_long(MOV_NUMREG); - long protiva = mov->get_long(MOV_PROTIVA); - real totdoc = mov->get_real(MOV_TOTDOC); - TString numdoc = mov->get(MOV_NUMDOC); - char tipocf = mov->get(MOV_TIPO)[0]; - TString ocfpi = mov->get(MOV_OCFPI); - long codcf = mov->get_long(MOV_CODCF); - long numgio = mov->get_long(MOV_NUMGIO); - bool stampato = mov->get_bool(MOV_STAMPATO); - bool intra = caus->get_bool(CAU_INTRACOM); - bool autof = caus->get_bool(CAU_AUTOFATT); - TString descrcau = caus->get(CAU_DESCR); - - //aggiornamento di mov - if (_tipo_stampa != 3) - if (!stampato) - { - mov->put(MOV_STAMPATO,TRUE); - mov->rewrite(); - } - - if ( intra && autof) - tipo_op = "3"; - else if (intra) - tipo_op = "1"; - else if (autof) - tipo_op = "2"; - - if ( (tipocf == 'C') || (tipocf == 'F') ) - { - if (ocfpi.trim().empty()) - ragsoc = ricerca_cf(tipocf, codcf); - else - ragsoc = ricerca_occ(ocfpi); - } - else ragsoc = descrcau; - - _tipodoc = mov->get(MOV_TIPODOC); - _descr_doc = descr_doc(_tipodoc); - TString app = datadoc.string(2, '/'); - - _doc_array.add_riga(_tipodoc,_descr_doc,totdoc); - - //setto le righe di stampa - _r = 1; - set_row(_r, "%s", (const char*) _datareg.string(2, '/')); - set_row(_r, "@9g%5d", protiva); - set_row(_r, "@15g%s", (const char*) app); - set_row(_r, "@24g%s", (const char*) numdoc); - set_row(_r, "@32g%6d", codcf); - set_row(_r, "@39g%.28s",(const char*) ragsoc); - set_row(_r, "@68g%s", (const char*) tipo_op); - set_row(_r, "@70g%2s", (const char*) _tipodoc); - set_row(_r, "@72g%r", &totdoc); - - _nrec = riga_rmoviva(); - if (_nrec > 0) - { - for (int j = 0; j < _riga_rmi.items(); j++) - { - TRigaiva& riga = (TRigaiva&)_riga_rmi[j]; - rr = _r+j; - set_row(rr, "@87g%r", &riga._imponibile); - set_row(rr, "@102g%4s",(const char*)riga._codiva); - if (_tipo_reg == 2) - set_row(rr, "@107g%d", riga._tipodet); - set_row(rr, "@108g%r", &riga._imposta); - } - _riga_rmi.destroy(); - int tipocr = _cur->file(LF_RMOVIVA)->get_int(RMI_TIPOCR); - set_row(_r, "@124g%d", tipocr); - } - //int tipocr = _cur->file(LF_RMOVIVA)->get_int(RMI_TIPOCR); - //set_row(_r, "@124g%d", tipocr); - if (_tipo_stampa == 3) //stampa di prova - { - set_row(_r, "@125g%6d", numreg); - if (stampato) - set_row(_r, "@131g*"); - } - if (_tipo_stampa == 4) //stampa con riferimento al libro giornale - set_row(_r, "@125g%ld", numgio); - } - return TRUE; -} - -void CG4400_application::aggiorna_reg() -{ - TString16 codtab; - TTable Tabreg ("REG"); - TTable TabInl ("%INL"); - long pag; - //long stampate; - - word ultimast = get_page_number(); - if (_stampa_tutti_i_registri) //ho fatto un salto pagina dopo avere stampato un registro - --ultimast; - - codtab << _annoes << _codreg; - Tabreg.zero(); - Tabreg.put("CODTAB", codtab); - if (Tabreg.read() == NOERR) - { - //stampate = ultimast + 1; - if (!_mov_empty) //cioe' se e' stata stampata almeno una pagina - { - pag = _pagine_stampate + ultimast; - Tabreg.put("I1", pag); - } - Tabreg.put("D3", _data_a); - Tabreg.rewrite(); - } - if (_tipo_stampa == 2) //stampa su libro unico - //sulla tabella %inl (indice libro unico) devo generare una riga per ogni registro stampato - if (!_mov_empty) - { - bool trovato = FALSE; - codtab = ""; - codtab << _annoes << _codlib; - TabInl.zero(); - TRectype nuovo (TabInl.curr()); - TRectype recprec (TabInl.curr()); - TabInl.put("CODTAB", codtab); - - TRectype rec (TabInl.curr()); - TabInl.read (_isgteq); - for (; !TabInl.eof(); TabInl.next()) - { - if (TabInl.curr() != rec) break; - - trovato = TRUE; - recprec = TabInl.curr(); - } - - TString cod = ""; - if (trovato) - { - TString16 cod_inl = recprec.get("CODTAB"); - long numero_riga = atol(cod_inl.mid(7,6)) + 1; - TString16 num_riga (format("%6d", numero_riga)); - cod_inl = cod_inl.mid(0,7); - nuovo = recprec; - cod << cod_inl << num_riga; - } - else - { - TString16 num_riga ( format("%6d", 1L) ); - cod << codtab << num_riga; - } - - long numini = _pagine_stampate + 1; - nuovo.put("CODTAB", cod); - nuovo.put("I0", (long)_annoes); - nuovo.put("I1", (long)_fino_a_mese); - nuovo.put("I2", (long)(_primast + 1)); - nuovo.put("I3", (long)(_primast + ultimast)); - nuovo.put("I4", get_firm()); - nuovo.put("S0", _codreg); - nuovo.put("I5", (long)numini); - nuovo.put("I6", (long)(numini + ultimast - 1)); - - if (trovato) - TabInl.rewrite(nuovo); - else - TabInl.write(nuovo); - - _u_stampata += ultimast; - } -} - -void CG4400_application::aggiorna_lib() -{ - TString16 cod = ""; - TTable lbu ("%LBU"); - - cod << _annoes << _codlib; - lbu.zero(); - lbu.put("CODTAB", cod); - if (lbu.read() == NOERR) - { - lbu.put("I0", (long) _fino_a_mese); - lbu.put("I1", (long) _u_stampata); - lbu.rewrite(); - } -} - -print_action CG4400_application::postprocess_page (int file, int counter) -{ - if (file == LF_MOV) - if (!counter) - { - bool FINITO = FALSE; - TRecnotype pos = _cur->pos(); - long items = _cur->items(); - - FINITO = (pos == items-1); - - if ( FINITO ) - { - set_page_tot_reg(); - return REPEAT_PAGE; - } - else //if ( (_tipo_stampa == 1) || (_tipo_stampa == 4) ) - { - TLocalisamfile* mov = _cur->file(LF_MOV); - _cur->save_status(); - ++(*_cur); - _dataregs = mov->get_date(MOV_DATAREG); - --(*_cur); - _cur->restore_status(); - - if (_dataregs.month() != _dataregp.month()) - { - set_page_tot_reg(); - return REPEAT_PAGE; - } - } - } - return NEXT_PAGE; -} - -print_action CG4400_application::postprocess_print(int file, int counter) -{ - if (file == LF_MOV) - { - //aggiorna registri solo se non e' stampa di prova - if ( (_tipo_stampa != 3) && (!_stampa_tutti_i_registri) ) - aggiorna_reg(); - if (_stampa_tutti_i_registri) - //if (!_mov_empty ) - { - if (_tipo_stampa == 2) - ++ _u_stampata; - printer().formfeed(); - } - /* - if (_stampa_tutti_i_registri) - { - TString16 codtab; - int anno, tipo; - //vado avanti dal punto in cui sono - _tabreg->next(); - for (; !_tabreg->eof(); _tabreg->next()) - { - tipo = _tabreg->get_int("I0"); - if ( (tipo == 1) || (tipo == 2) ) //registro iva - { - codtab = _tabreg->get("CODTAB"); - anno = atoi(codtab.mid(0,4)); - break; - } - } - if ( (_tabreg->eof()) || (anno != _annoes) ) - { - if (_tipo_stampa == 2) //stampa su libro unico - aggiorna_lib(); - return NEXT_PAGE; - } - else - { - _tipo_reg = _tabreg->get_int("I0"); - _desc_lib = _tabreg->get("S0"); - _data_da = _tabreg->get_date("D3"); - _pagine_stampate = _tabreg->get_int("I1"); - _codreg = codtab.mid(4,3); - _primast = get_page_number(); - if (!_mov_empty ) - printer().formfeed(); - _cur->set_filterfunction(NULL); - _cur->set_filterfunction(filter_func); - _mov_empty = TRUE; - return REPEAT_PAGE; - } - } - */ - } - - return NEXT_PAGE; -} - -bool CG4400_application::set_print(int n) -{ - TMask m("cg4400a"); - int giorni_del_mese; - - if (set_ditte(m)) - if (_selected.ones() > 0l) - { - _annoes = m.get_int(ANNO);//in realta' e' l'anno IVA !!! - _tipo_stampa = m.get_int(TIPO_STAMPA); - //Se stampa di prova l'utente indica data_da e data_a - if (_tipo_stampa == 3) - { - _data_stampa = m.get(DATA_STAMPA); - _data_da = m.get(DA_DATA); - _data_a = m.get(A_DATA); - if (!_data_da.ok()) - _data_da = format("01/01/%4d", _annoes); - if (!_data_a.ok()) - _data_a = format("31/12/%4d", _annoes); - printer().setdate(_data_stampa); - } - // senno' data_da e' letta dal registro - else //stampe definitive - { - if ( (_tipo_stampa == 1) || (_tipo_stampa == 4) ) - _fino_a_mese = m.get_int(FINO_A_MESE); - else //stampa su libro unico - { - _codlib = m.get(CODICE_LIB_UN); - _fino_a_mese = m.get_int(MESE); - _u_stampata = m.get_int(ULTIMA_PAGINA); - //set_page_number(_u_stampata + 1); - } - if (_fino_a_mese == 12) - giorni_del_mese = 31; - else - { - TDate primo = format("01/%02d/%4d", _fino_a_mese+1, _annoes); - --primo; - giorni_del_mese = primo.day(); - } - _data_a=format("%02d/%02d/%4d",giorni_del_mese,_fino_a_mese,_annoes); - // NB data_da viene letta nella preprocess_page - } - if (_tipo_stampa == 2) - compila_lib(); - stampa_registri_IVA(m); - } - else warning_box("Nessuna ditta selezionata!"); - return FALSE; -} - -void CG4400_application::stampa_registri_IVA(const TMask& m) -{ - long l; - long firm = TApplication::get_firm(); - bool ok = FALSE; - - for (l = 0l, _nditte->first(); !_nditte->eof(); l++, _nditte->next()) - { - if (_selected[l]) - { - TApplication::set_firm(_nditte->get_long("CODDITTA")); - ok = compila_reg(m); // cerca il primo registro valido (nel caso di stampa tutti i registri), senno' legge i dati del registro specificato - if (!ok) continue; - if (!_stampa_tutti_i_registri) - _cur->set_filterfunction(filter_func); - _frequiva = _nditte->get("FREQVIVA")[0]; - if (_tipo_stampa != 3) //stampa definitiva - ok = controlla_liquidazione() && controlla_mov(); - - if (!ok) continue; - - if (!_stampa_tutti_i_registri) - print(); - else - { - TString16 codtab; - int anno, tipo; - for (_tabreg->first(); !_tabreg->eof(); _tabreg->next()) - { - tipo = _tabreg->get_int("I0"); - codtab = _tabreg->get("CODTAB"); - anno = atoi(codtab.mid(0,4)); - if (anno > _annoes) - break; - if (anno == _annoes) - if ( (tipo == 1) || (tipo == 2) ) //registro iva - { - _tipo_reg = _tabreg->get_int("I0"); - _desc_lib = _tabreg->get("S0"); - if (_tipo_stampa != 3) - _data_da = _tabreg->get_date("D3"); - _pagine_stampate = _tabreg->get_int("I1"); - _codreg = codtab.mid(4,3); - _codatt = _tabreg->get("S8"); - _attivita = desc_attivita(_codatt); - _desc_lib = _tabreg->get ("S0"); - //_primast = get_page_number(); - //if (!_mov_empty ) - // printer().formfeed(); - _cur->set_filterfunction(NULL); - _cur->set_filterfunction(filter_func); - //set_page_number(_u_stampata + 1); - print(); - if (_tipo_stampa != 3) aggiorna_reg(); - } - } - } - if (_tipo_stampa == 2) - aggiorna_lib(); - } - } - - TApplication::set_firm(firm); -} - -bool CG4400_application::set_ditte(TMask& m) -{ - _selected.reset(); - - m.field(F_SELECT).set("0"); - m.field(DA_CODICE).set(""); - m.field(A_CODICE).set(""); - m.field(TIPO_STAMPA).set("1"); - - m.set_handler (TIPO_STAMPA, my_handler); - m.set_handler (DA_DATA, mask_data); - m.set_handler (A_DATA, mask_data); - m.set_handler (MESE, mask_mese); - //m.set_handler (FINO_A_MESE, mask_fino_a_mese); - m.set_handler (CODICE_LIB_UN, mask_cod); - m.set_handler (DLG_SELECT, mask_select); - m.set_handler (F_ANNULLA, mask_annulla); - m.set_handler (F_VERIFICA, mask_verifica); - - KEY tasto; - - _stampa_width = 132; - set_real_picture("###.###.###.###"); - - tasto = m.run(); - - // m.first_focus(tasto); - - return tasto == K_ENTER; -} - -int CG4400_application::stampa_intestazione_ditta() -{ - TDati_ditta tditta(get_firm(), _stampa_width); - TString riga (tditta.prima_riga()); - int r=1; - - set_header (r, "%s", (const char *) riga); - r++; - - riga = tditta.seconda_riga(); - - set_header (r, "%s", (const char*) riga); - r++; - - return r; -} - -void CG4400_application::preprocess_header() -{ - int r=1; - TString cor, nd1, nd2; - TString riga(_stampa_width); - TString data; - - if (_tipo_stampa != 3) //cioe' si tratta di una stampa definitiva - { - if ( (_tipo_stampa == 1) || (_tipo_stampa == 4) ) - data.format("%s %s %d", (const char*)"mese di", itom(_datareg.month()), - _datareg.year()); - else data.format("%s %s %d", (const char*)"mese di", itom(_fino_a_mese), _annoes); - } -else - data = _data_da.string(); - - reset_header(); - - if (_tipo_stampa == 2) - { - if (_stampa_ind_ditta) - r = stampa_intestazione_ditta(); - long num = _u_stampata + 1; - set_header(r++, "@94gProgr.Studio %ld@114gProgr.Utente @#", num); - } - else - r = stampa_intestazione_ditta(); - set_header(r, "Registro IVA: %s %s %s Attivita\' %s %s", - (const char *) _codreg, (const char *) _desc_lib, - (const char *) data, (const char *) _codatt, - (const char *) _attivita); - r++; - - riga.fill('-'); - set_header(r, riga); - r++; - if (_tipo_reg == 1) //registro vendite - { - cor = "R"; - nd1 = ""; - nd2 = ""; - } - if (_tipo_reg == 2) - { - cor = "C"; - nd1 = "N"; - nd2 = "D"; - } - if (_tipo_stampa == 3) //stampa di prova - { - set_header(r,"@10gNum.@19gDocumento@68gT Tipo@103gCod %s@121g@124gT@128gNum", (const char*) nd1); - r++; - set_header(r, "Data reg. prot.@17gData@25gNumero Codice Ragione sociale/descrizione@68gO Doc.@76gTotale doc.@91gImponibile Iva %s@112gImposta@124g%s@128gReg", (const char*) nd2, (const char*) cor); - r++; - } - else - { - set_header(r,"@10gNum.@19gDocumento@68gT Tipo@103gCod %s@121g@124gT", (const char*) nd1); - if (_tipo_stampa == 4) //stampa definitiva con rif. al libro giornale - set_header(r, "@128gNum."); - r++; - set_header(r, "Data reg. prot.@17gData@25gNumero Codice Ragione sociale/descrizione@68gO Doc.@76gTotale doc.@91gImponibile Iva %s@112gImposta@124g%s", - (const char*) nd2, (const char*) cor); - if (_tipo_stampa == 4) - set_header(r, "@128gop."); - r++; - } - riga.fill('-'); - set_header(r, riga); -} - -int cg4400 (int argc, char * argv[]) -{ - CG4400_application a; - a.run(argc, argv, "Stampa registri IVA"); - return 0; -} - - - - - - - - - - - - - - +// cg4400.cpp +// Stampa tabella registri +#include "cg4.h" +#include "cg4400.h" +#include "cg4400a.h" + +static TString256 TMP; + +HIDDEN CG4400_application * app() { return (CG4400_application*) MainApp(); } + +bool filter_func (const TRelation * r) +{ + TLocalisamfile * mov = r->lfile(LF_MOV); + TString codreg = mov->get(MOV_REG); + TDate datareg = mov->get_date(MOV_DATAREG); + int annoiva = mov->get_int(MOV_ANNOIVA); + + if (codreg != (app()->_codreg) || annoiva != (app()->_annoes)) + return FALSE; + + if (app()->_data_da.string() != "" && app()->_data_a.string() != "") + if ( (datareg < app()->_data_da || datareg > app()->_data_a ) || (!datareg.ok()) ) + return FALSE; + + return TRUE; +} + +HIDDEN int compare_rows(const TObject** o1, const TObject** o2) +{ + TRiga* r1 = (TRiga*)*o1; + TRiga* r2 = (TRiga*)*o2; + + return (strcmp((const char*)r1->_codiva, (const char*)r2->_codiva)); +} + +HIDDEN int compare(const TObject** o1, const TObject** o2) +{ + TRigaiva* r1 = (TRigaiva*)*o1; + TRigaiva* r2 = (TRigaiva*)*o2; + TString campo1; + TString campo2; + + campo1.format("%d%4s", r1->_tipodet, (const char*)r1->_codiva); + campo2.format("%d%4s", r2->_tipodet, (const char*)r2->_codiva); + return (strcmp((const char*)campo1, (const char*)campo2)); +} + +/* +bool CG4400_application::libro_giornale_iva_unico() +{ + TConfig conf(CONFIG_DITTA); + + return conf.get("StLgiU") == "X"; +} +*/ + +bool mask_select (TMask_field& f, KEY k) +{ + long j, cnt, chk; int i; + TString from = f.mask().get(DA_CODICE); + TString to = f.mask().get(A_CODICE); + TBit_array selected = app()->_selected; + + // build sheet + if (k == K_SPACE) + { + f.mask().field(DA_CODICE).set(""); + f.mask().field(A_CODICE).set(""); + app()->_ditte->destroy(); chk = 0l; + for (i = 0; i < app()->_nomiditte.items(); i++) + { + if (app()->_selected[i]) continue; + TToken_string d = (const char*)((TToken_string&)app()->_nomiditte[i]); + TString cod = d.get(1); + app()->_ditte->add(d); + + if (!from.empty() || !to.empty()) + { + if (from.empty()) from = "0"; + if (to.empty()) to = "999999"; + if (atol(cod) >= atol(from) && atol(cod) <= atol(to)) + { + selected.set(chk++); + app()->_ditte->check(chk++); + } + } + } + // seleziona e aggiungi alle gia' selezionate + if (app()->_ditte->run() == K_ENTER) + { + cnt = 0; + for (j = 0l; j < app()->_n_ditte; j++) + { + if (app()->_selected[j]) continue; + if (app()->_ditte->checked(cnt++)) + selected.set(j); + } + app()->_selected |= selected; + selected.reset(); + } + long numd = app()->_selected.ones(); + f.mask().set(F_SELECT,numd); + } + return TRUE; +} + +bool mask_verifica (TMask_field& f, KEY k) +{ + int i; + + if (k == K_SPACE) + { + app()->_ditte->destroy(); + for (i = 0; i < app()->_nomiditte.items(); i++) + { + TToken_string d = (const char*)((TToken_string&)app()->_nomiditte[i]); + app()->_ditte->add(d); + if (app()->_selected[i]) app()->_ditte->check(i); + } + app()->_ditte->disable_check(); + app()->_ditte->run(); + app()->_ditte->enable_check(); + } + return TRUE; +} + +bool mask_annulla (TMask_field& f, KEY k) +{ + if (k == K_SPACE) + { + app()->_selected.reset(); + f.mask().set(F_SELECT, "0"); + } + return TRUE; +} + +bool mask_from_to (TMask_field& f, KEY k) +{ + if (k == K_TAB) + { + app()->_selected.reset(); + TString from, to; + const short id = f.dlg(); + from = f.mask().get(id-1); + to = f.mask().get(id); + int i; + if (!from.empty() || !to.empty()) + { + long chk = 0l; + if (from.empty()) from = "0"; + if (to.empty()) to = "999999"; + + for (i = 0; i < app()->_nomiditte.items(); i++) + { + TToken_string d = (const char*)((TToken_string&)app()->_nomiditte[i]); + TString cod = d.get(1); + + if (atol(cod) >= atol(from) && atol(cod)<= atol(to)) + app()->_selected.set(chk++); + } + } + } + return TRUE; +} + +bool mask_mese (TMask_field& f, KEY k) +{ + if (k == K_ENTER) + { + int mese = f.mask().get_int(MESE); + int umese = f.mask().get_int(ULTIMO_MESE); + + if (mese != umese+1) + { + f.warning_box ("Le stampe devono essere richieste mese per mese! I mesi successivi a %s non sono ancora stati stampati.", itom(umese)); + return FALSE; + } + } + return TRUE; +} + +bool mask_cod (TMask_field& f, KEY k) +{ + TTable TabLbu ("%LBU"); + TString codtab; + int anno; + + //if ( (k == K_TAB) && f.mask().is_running() ) + if ( (k == K_SPACE)||(k == K_TAB) ) + { + TString codlib = f.mask().get(CODICE_LIB_UN); + anno = f.mask().get_int(ANNO); + + TabLbu.zero(); + codtab.format ("%04d%-3s", anno, (const char*)codlib); + TabLbu.put ("CODTAB", codtab); + TabLbu.read(); + if ( TabLbu.good() ) + { + // f.mask().set(MESE,TabLbu.get_long("I0")+1); + f.mask().set(ULTIMO_MESE,TabLbu.get_long("I0")); + f.mask().set(ULTIMA_PAGINA,TabLbu.get_long("I1")); + } + } + return TRUE; +} + +bool mask_data (TMask_field& f, KEY k) +{ + const short id = f.dlg(); + + if (k == K_ENTER) + { + int anno = f.mask().get_int(ANNO); + TDate data = f.mask().get(id); + if (data.ok()) + if (data.year() != anno) + { + f.warning_box("L'anno delle date limite deve essere uguale all'anno iva specificato"); + return FALSE; + } + } + return TRUE; +} + +/* +bool mask_fino_a_mese (TMask_field& f, KEY k) +{ + if (k == K_ENTER) + { + TTable TabReg ("REG"); + TString16 codtab; + int giorni_del_mese; + TString codreg = f.mask().get(CODICE_LIBRO); + int tipo = f.mask().get_int(TIPO_STAMPA); + int anno = f.mask().get_int(ANNO); + + if ( (tipo == 1) || (tipo == 4) ) + { + int fino_a_mese = f.mask().get_int(FINO_A_MESE); + if (fino_a_mese == 12) + giorni_del_mese = 31; + else + { + TDate primo = format("01/%02d/%4d", fino_a_mese+1, anno); + --primo; + giorni_del_mese = primo.day(); + } + TDate datasup = format("%02d/%02d/%4d",giorni_del_mese,fino_a_mese,anno); + if (codreg != "") + { + TabReg.zero(); + codtab << anno << codreg; + TabReg.put ("CODTAB", codtab); + TabReg.read(); + if ( TabReg.good() ) + { + TDate data = TabReg.get_date("D3"); + if (datasup < data) + { + TString16 datas = format("%02d/%4d", data.month(), data.year()); + f.warning_box ("La data specificata non deve essere inferiore al %s (ultima data di stampa specificata sul registro)", (const char*)datas); + return FALSE; + } + } + } + if (tipo == 4) + { + TabReg.zero(); + TabReg.put ("CODTAB", anno); + TRectype r (TabReg.curr()); + TabReg.read(_isgteq); + for (; !TabReg.eof(); TabReg.next()) + { + if (TabReg.curr() != r) break; + + int tiporeg = TabReg.get_int("I0"); + if (tiporeg == 5) //libro giornale + { + TDate data = TabReg.get_date("D3"); + if (datasup > data) + { + TString16 datas = format("%02d/%4d", data.month(), data.year()); + f.warning_box ("La data specificata non deve essere superiore al %s (ultima data di stampa del libro giornale)", (const char*)datas); + return FALSE; + } + } + } + } + } + } + return TRUE; +} +*/ + +//da una SHEET non e' possibile mandare messaggi nella maschera!!! +HIDDEN bool my_handler (TMask_field& f, KEY k) +{ + if (k == K_TAB) + { + TMask& m = f.mask(); + int stampa_su = m.get_int(TIPO_STAMPA); + if ( (stampa_su == 1) || (stampa_su == 4) ) + { + m.hide (CODICE_LIB_UN); + m.hide (CODICE_LIBRO_PROVA); + m.hide (MESE); + m.hide (ULTIMO_MESE); + m.hide (ULTIMA_PAGINA); + m.hide (CODICE_LIBRO_IVA); + m.hide (DATA_STAMPA); + m.hide (DA_DATA); + m.hide (A_DATA); + m.show (CODICE_LIBRO); + m.show (TIPO_RIEPILOGATIVO); + m.show (FINO_A_MESE); + } + if (stampa_su == 2) + { + m.show (CODICE_LIB_UN); + m.hide (CODICE_LIBRO_PROVA); + m.show (MESE); + m.show (ULTIMO_MESE); + m.show (ULTIMA_PAGINA); + m.show (CODICE_LIBRO_IVA); + m.hide (DATA_STAMPA); + m.hide (DA_DATA); + m.hide (A_DATA); + m.hide (CODICE_LIBRO); + m.hide (TIPO_RIEPILOGATIVO); + m.hide (FINO_A_MESE); + } + if (stampa_su == 3) + { + m.hide (CODICE_LIB_UN); + m.hide (MESE); + m.hide (ULTIMO_MESE); + m.hide (ULTIMA_PAGINA); + m.hide (CODICE_LIBRO_IVA); + m.hide (CODICE_LIBRO); + m.show (CODICE_LIBRO_PROVA); + m.show (DATA_STAMPA); + m.show (DA_DATA); + m.show (A_DATA); + m.hide (TIPO_RIEPILOGATIVO); + m.hide (FINO_A_MESE); + } + } + return TRUE; +} + +const char * CG4400_application::descr_doc(const char * tipo) +{ + TTable tab_tpd("%TPD"); + TString codtab = format ("%-2s", tipo); + + tab_tpd.zero(); + tab_tpd.put("CODTAB", codtab); + if (tab_tpd.read()==NOERR) + TMP = tab_tpd.get("S0"); + else + TMP = ""; + + return TMP; +} + +const char * CG4400_application::descr_iva(const char * cod) +{ + TTable tab_iva("%IVA"); + TString codtab = format ("%-4s", cod); + + tab_iva.zero(); + tab_iva.put("CODTAB", codtab); + if (tab_iva.read()==NOERR) + TMP = tab_iva.get("S0"); + else + TMP = ""; + + return TMP; +} + +const char * CG4400_application::desc_attivita(const char * codatt) +{ + TTable attiv ("%AIS"); + + attiv.zero(); + attiv.put("CODTAB", codatt); + if (attiv.read()==NOERR) + TMP = attiv.get("S0"); + else + TMP = ""; + return TMP; +} + +const char * CG4400_application::ricerca_cf(char tipocf, long codcf) +{ + _clifo->zero(); + _clifo->put(CLI_TIPOCF, tipocf); + _clifo->put(CLI_CODCF, codcf); + if (_clifo->read() == NOERR) + TMP = _clifo->get(CLI_RAGSOC); + else + TMP = ""; + return TMP; +} + +const char * CG4400_application::ricerca_occ(const char * occ) +{ + TLocalisamfile occas (LF_OCCAS); + + occas.zero(); + occas.put(OCC_CFPI, occ); + + if (occas.read() == NOERR) + TMP = occas.get(OCC_RAGSOC); + else + TMP = ""; + return TMP; +} + +void CG4400_application::user_create() +{ + _nditte = new TLocalisamfile(LF_NDITTE); + _ditte = new TArray_sheet(-1, -1, 0, 0, "Selezione Ditte", + "@1|Cod.@5|Ragione Sociale@50"); + _n_ditte = 0l; + for (_nditte->first(); !_nditte->eof(); _nditte->next()) + { + TString cod = _nditte->get("CODDITTA"); + _n_ditte++; + TToken_string* d = new TToken_string(" "); + d->add(cod); + d->add(_nditte->get("RAGSOC")); + _nomiditte.add(d); + } + _tab = new TLocalisamfile(LF_TAB); + _tabcom = new TLocalisamfile(LF_TABCOM); + _tabreg = new TTable("REG"); + _tablbu = new TTable("%LBU"); + _tabinl = new TTable("%INL"); + _tablim = new TTable("LIM"); + _tabpim = new TTable("PIM"); + _clifo = new TLocalisamfile(LF_CLIFO); + _occas = new TLocalisamfile(LF_OCCAS); + _rel = new TRelation (LF_MOV); + _rel->add(LF_CAUSALI,"CODCAUS=CODCAUS",1,LF_MOV); + _rel->add(LF_RMOVIVA,"NUMREG=NUMREG",1,LF_MOV); + _cur = new TCursor(_rel, "", 1); + //_cur->set_filterfunction(filter_func); + + add_cursor(_cur); + add_file(LF_MOV); + add_file(LF_RMOVIVA); +} + +void CG4400_application::user_destroy() +{ + delete _ditte; + delete _nditte; + delete _tab; + delete _tabcom; + delete _cur; + delete _rel; + delete _clifo; +} + + +void CG4400_application::calcola_progressivi(real& r0, real& r1, const char* codiva, const int tipocr) +{ + TTable pim ("PIM"); + TString chiave; + int i, num=0; + + if (_tipo_stampa == 1) + num = _datareg.month(); + if ( (_tipo_stampa == 2) || (_tipo_stampa == 4) ) + num = _fino_a_mese; + + if (_frequiva == 'T') + for (i=3; isave_status(); + bool ok = _cur->is_first_match(LF_RMOVIVA); + int nrec = 0; + + while (ok) + { + nrec++; + TRectype iva (_cur->file(LF_RMOVIVA)->curr()); + tipodet = iva.get_int (RMI_TIPODET); + tipocr = iva.get_int (RMI_TIPOCR); + impo = iva.get_real(RMI_IMPONIBILE); + impos = iva.get_real(RMI_IMPOSTA); + codiva = iva.get(RMI_CODIVA); + + impop = imposp = 0.00; + _riga_rmi.add_riga(impo,impos,codiva,tipodet,impop,imposp); + + if (_tipo_reg == 2) //registro acquisti + { + if (_tipo_stampa != 3) //stampa definitiva + calcola_progressivi(impop,imposp,codiva,tipocr); + _iva_array.add_riga(impo,impos,codiva,tipodet,impop,imposp); + } + + impop = imposp = 0.00; + if (_tipo_stampa != 3) + calcola_progressivi(impop,imposp,codiva,tipocr); + + _tot_iva_array.add_riga(impo,impos,codiva,impop,imposp); + + ok = _cur->next_match(LF_RMOVIVA); + } + _cur->restore_status(); + + return nrec; +} + +int CG4400_application::setta_riga(int r, const TRigaiva& riga, real& tot1, + real& tot2, real& tot3, real& tot4) +{ + set_row(r, "%3s", (const char*)riga._codiva); + TString descr = descr_iva(riga._codiva); + set_row(r, "@5g%s",(const char*)descr); + set_row(r, "@25g%r", &riga._imponibile); + set_row(r, "@41g%r", &riga._imposta); + if (_tipo_stampa != 3) + { + set_row(r, "@81g%r", &riga._imponibilep); + set_row(r++, "@98g%r", &riga._impostap); + } + else r++; + tot1 += riga._imponibile; + tot2 += riga._imposta; + tot3 += riga._imponibilep; + tot4 += riga._impostap; + + return r; +} + +bool CG4400_application::controlla_liquidazione() +{ + TTable lim ("LIM"); + TTable pim ("PIM"); + TString16 mesi_ric = ""; + TString16 mesi_cal = ""; + TString16 chiave = ""; + int i; + + if (lim.empty()) + return yesno_box("Non esiste la tabella liquidazione iva mensile! Vuoi ugualmente continuare la stampa?"); + if (pim.empty()) + return yesno_box("Non esiste la tabella progressivi iva mensile! Vuoi ugualmente continuare la stampa?"); + + if (_frequiva == 'T') //nella tabella LIM ho solo i mesi 3, 6, 9, 12 + { + for (i=3; i<=_fino_a_mese+3; i+=3) + { + chiave = ""; + chiave << _annoes << i; + lim.put("CODTAB", chiave); + if (lim.read() == NOERR) + { + bool calcolato = lim.get_bool("B0"); + if (!calcolato) + + // return yesno_box("La liquidazione relativa al mese di %s deve essere ricalcolata. Vuoi ugualmente continuare la stampa?", itom(i) ); + mesi_ric << itom(i) << "\n\r"; + } + else + // return yesno_box("La liquidazione relativa al mese di %s non e' stata calcolata. Vuoi ugualmente continuare la stampa?", itom(i) ); + mesi_cal << itom(i) << "\n\r"; + } + } + if (_frequiva == 'M') + { + for (i=1; i<=_fino_a_mese; i++); + { + chiave = ""; + chiave << _annoes << i; + lim.put("CODTAB", chiave); + if (lim.read() == NOERR) + { + bool calcolato = lim.get_bool("B0"); + if (!calcolato) + // return yesno_box("La liquidazione relativa al mese di %s deve essere ricalcolata. Vuoi ugualmente continuare la stampa?", itom(i) ); + mesi_ric << itom(i) << "\n\r"; + } + else + // return yesno_box("La liquidazione relativa al mese di %s non e' stata calcolata. Vuoi ugualmente continuare la stampa?", itom(i) ); + mesi_cal << itom(i) << "\n\r"; + } + } + if (mesi_ric.not_empty()) + { + warning_box ("Deve essere ricalcolata la liquidazione relativa ai mesi di:\n %s ", (const char *)mesi_ric); + return yesno_box("Vuoi ugualmente continuare la stampa?"); + } + + if (mesi_cal.not_empty()) + { + warning_box ("La liquidazione relativa al mese di %s non e' stata calcolata", (const char *)mesi_cal); + return yesno_box("Vuoi ugualmente continuare la stampa?"); + } + return TRUE; +} + +//controlla che i movimenti con data di registrazione compresa tra l'anno precedente e l'ultima data stampata siano tutti gia' stati stampati in forma definitiva*/ +bool CG4400_application::controlla_mov() +{ + TLocalisamfile mov (LF_MOV); + bool ok = TRUE; + byte tipo; + TDate udata; + TDate data = format("01/01/%4d", _annoes - 1); + TRecnotype rec = _tabreg->recno(); + for (mov.first(); !mov.eof(); mov.next()) + { + TString16 reg = mov.get(MOV_REG); + TDate datareg = mov.get_date(MOV_DATAREG); + if (_stampa_tutti_i_registri) + cerca_reg (reg, tipo, udata); + else udata = _data_da; + if ( (_stampa_tutti_i_registri && ((tipo == 1)||(tipo == 2))) + || ((!_stampa_tutti_i_registri)&&(reg == _codreg)) ) + if ( (datareg >= data) && (datareg <= udata) ) + { + bool stampato = mov.get_bool(MOV_STAMPATO); + long numreg = mov.get_long(MOV_NUMREG); + if (!stampato) + { + warning_box("Il movimento con numero di registrazione %ld non e' ancora stato stampato in forma definitiva!", numreg); + ok = FALSE; + } + } + } + _tabreg->readat(rec); + return ok; +} + +void CG4400_application::cerca_reg(const TString& c, byte& t, TDate& d) +{ + TString16 cod = ""; + + cod << _annoes << c; + _tabreg->zero(); + _tabreg->put("CODTAB", cod); + if (_tabreg->read() == NOERR) + { + t = _tabreg->get_int ("I0"); + d = _tabreg->get_date("D3"); + } +} + +/* +bool CG4400_application::controlla_mov() +{ + bool ok = TRUE; + + if (_stampa_tutti_i_registri) + { + TRecnotype rec = _tabreg->recno();//la first l'ho gia' fatta + for (; !_tabreg->eof(); _tabreg->next()) + { + TString codtab = _tabreg->get("CODTAB"); + int anno = atoi(codtab.mid(0,4)); + if (anno != _annoes) break; + + TDate data_da = _tabreg->get_date("D3"); + TString16 codreg = codtab.mid(4,3); + leggi_movimenti(data_da, codreg, ok); + } + _tabreg->readat(rec); + } + else + leggi_movimenti(_data_da, _codreg, ok); + + return ok; +} + +void CG4400_application::leggi_movimenti(const TDate& d, const TString& cod, bool& ok) +{ + TLocalisamfile mov (LF_MOV); + bool stampato; + long numreg; + TString codreg; + + TDate data = format("01/01/%4d", _annoes - 1); + mov.zero(); + TRectype a (mov.curr()); + mov.put(MOV_DATAREG, data); + a.put (MOV_DATAREG, d); + mov.read(_isgteq); + while (mov.curr() < a && !mov.eof()) + { + stampato = mov.get_bool(MOV_STAMPATO); + numreg = mov.get_long(MOV_NUMREG); + codreg = mov.get(MOV_REG); + if (codreg == cod) + if (!stampato) + { + warning_box("Il movimento con numero di registrazione %ld non e' ancora stato stampato in forma definitiva!", numreg); + ok = FALSE; + } + mov.next(); + } +} +*/ + +void CG4400_application::set_page_tot_reg() +{ + reset_print(); + TString riga(_stampa_width); + int r=1, rr=0, row=0; + real tot_imponib, tot_imposta, tot_imponibp, tot_impostap; + + riga.fill('-'); + set_row(r, "%s", (const char *) riga); + r++; + set_row(r, "Legenda Tipo Operazione: 1=operazione intracomunitaria 2=AF art.34 comma 3"); + set_row(r, "@78g3=operazione intracomunitaria e AF art.34 comma 3"); + r++; + set_row(++r, "Tipo documento@30gTotale documento"); + r+=2; + for (int j = 0; j < _doc_array.items(); j++) + { + TTipodoc& doc = (TTipodoc&)_doc_array[j]; + rr = r+j; + set_row(rr, "%2s", (const char*) doc._tipodoc); + set_row(rr, "@3g%.25s", (const char*) doc._descrdoc); + set_row(rr, "@29g%r", &doc._totdoc); + } + _doc_array.destroy(); + + if (rr > 0) + rr++; + else + rr = r; + + if (_nrec > 0) //numero records di rmoviva + { + set_row(++rr, "@26g---------- P E R I O D O ----------"); + if (_tipo_stampa != 3) + set_row(rr,"@82g------ P R O G R E S S I V I ------"); + rr++; + set_row(rr, "Cod."); + if (_tipo_reg == 2) + { + set_row(rr, "@36gA C Q U I S T I"); + if (_tipo_stampa != 3) + set_row(rr, "@92gA C Q U I S T I"); + } + if (_tipo_reg == 1) + { + set_row(rr, "@37gV E N D I T E"); + if (_tipo_stampa != 3) + set_row(rr, "@93gV E N D I T E"); + } + rr++; + set_row(rr, "iva Descrizione@30gImponibile@49gImposta"); + if (_tipo_stampa != 3) + set_row(rr++, "@86gImponibile@106gImposta"); + else rr++; + rr++; + tot_imponib = tot_imposta = tot_imponibp = tot_impostap = 0.00; + + _tot_iva_array.sort(compare_rows); + + for (int k = 0; k < _tot_iva_array.items(); k++) + { + TRiga& riga = (TRiga&)_tot_iva_array[k]; + row = rr+k; + set_row(row, "%3s", (const char*)riga._codiva); + TString descr = descr_iva(riga._codiva); + set_row(row, "@5g%s", (const char*)descr); + set_row(row, "@25g%r", &riga._imponibile); + set_row(row, "@41g%r", &riga._imposta); + if (_tipo_stampa != 3) + { + set_row(row, "@81g%r", &riga._imponibilep); + set_row(row, "@98g%r", &riga._impostap); + } + tot_imponib += riga._imponibile; + tot_imposta += riga._imposta; + tot_imponibp += riga._imponibilep; + tot_impostap += riga._impostap; + } + _tot_iva_array.destroy(); + row++; + set_row(++row, "TOTALE@25g%r@41g%r", &tot_imponib, &tot_imposta); + if (_tipo_stampa != 3) + set_row(row, "@81g%r@98g%r", &tot_imponibp, &tot_impostap); + //la stampa "tipi di indetraibilita'" viene fatta solo per gli acquisti + if (_tipo_reg == 2) + { + row+=2; + int tdetprec = -1; + int rw = row; + tot_imponib = tot_imposta = tot_imponibp = tot_impostap = 0.00; + + _iva_array.sort(compare); + for (int s = 0; s < _iva_array.items(); s++) + { + TRigaiva& riga = (TRigaiva&)_iva_array[s]; + switch (riga._tipodet) + { + case 1: if (riga._tipodet != tdetprec) + { + set_row(rw++, "----- Indetraibile su op.es. -----"); + set_row(rw, "Cod."); + rw++; + set_row(rw, "iva Descrizione@30gImponibile@49gImposta"); + if (_tipo_stampa != 3) + set_row(rw++, "@86gImponibile@106gImposta"); + else rw++; + rw++; + } + rw = setta_riga(rw, riga, tot_imponib, tot_imposta, tot_imponibp, tot_impostap); + tdetprec = riga._tipodet; + break; + case 3: if (tdetprec == 1) + { + set_row(++rw, "TOTALE@25g%r@41g%r", &tot_imponib, &tot_imposta); + if (_tipo_stampa != 3) + set_row(rw, "@81g%r@98g%r", &tot_imponibp, &tot_impostap); + tot_imponib = tot_imposta = tot_imponibp = tot_impostap = 0.00; + rw+=2; + } + if (riga._tipodet != tdetprec) + { + set_row(rw++, "----- Passaggi interni -----"); + set_row(rw, "Cod."); + rw++; + set_row(rw, "iva Descrizione@30gImponibile@49gImposta"); + if (_tipo_stampa != 3) + set_row(rw++, "@86gImponibile@106gImposta"); + else rw++; + rw++; + } + rw = setta_riga(rw, riga, tot_imponib, tot_imposta, tot_imponibp, tot_impostap); + tdetprec = riga._tipodet; + break; + case 9: if ( (tdetprec == 1) || (tdetprec == 3) ) + { + set_row(++rw, "TOTALE@25g%r@41g%r", &tot_imponib, &tot_imposta); + if (_tipo_stampa != 3) + set_row(rw, "@81g%r@98g%r", &tot_imponibp, &tot_impostap); + tot_imponib = tot_imposta = tot_imponibp = tot_impostap = 0.00; + rw+=2; + } + if (riga._tipodet != tdetprec) + { + set_row(rw++, "----- N.D. 9 - acquisti indeducibili per ART.19 -----"); + set_row(rw, "Cod."); + rw++; + set_row(rw, "iva Descrizione@30gImponibile@49gImposta"); + if (_tipo_stampa != 3) + set_row(rw++, "@86gImponibile@106gImposta"); + else rw++; + rw++; + } + rw = setta_riga(rw, riga, tot_imponib, tot_imposta, tot_imponibp, tot_impostap); + tdetprec = riga._tipodet; + break; + default: break; + } + } + if (tdetprec == 9) + { + set_row(++rw, "TOTALE@25g%r@41g%r", &tot_imponib, &tot_imposta); + if (_tipo_stampa != 3) + set_row(rw, "@81g%r@98g%r", &tot_imponibp, &tot_impostap); + } + _iva_array.destroy(); + } + } +} + +bool CG4400_application::compila_reg(const TMask& m) +{ + int anno; + long codditta = _nditte->get_long("CODDITTA"); + TString16 codtab = ""; + + _tipo_stampa = m.get_int(TIPO_STAMPA); + if (_tipo_stampa == 2) //stampa su libro unico di studio + _codreg = m.get(CODICE_LIBRO_IVA); + else if (_tipo_stampa == 3) //stampa di prova + _codreg = m.get(CODICE_LIBRO_PROVA); + else _codreg = m.get(CODICE_LIBRO); + + if (_codreg.trim().empty()) + { + _stampa_tutti_i_registri = TRUE; + _tabreg->first(); + if (!_tabreg->eof()) + { + codtab = _tabreg->get("CODTAB"); + anno = atoi(codtab.mid(0,4)); + if (anno > _annoes) + { + warning_box("Non esistono registri IVA della Ditta %ld per l'anno %d", + codditta, _annoes); + return FALSE; + } + } + } + else // stampa un solo registro + { + _stampa_tutti_i_registri = FALSE; + codtab << _annoes << _codreg; + _tabreg->zero(); + _tabreg->put("CODTAB", codtab); + if (_tabreg->read() == NOERR) + { + _tipo_reg = _tabreg->get_int("I0"); + _pagine_stampate = _tabreg->get_int("I1"); + //_pagine_numerate = tab_reg.get_int("I2"); + //_stampa_ok = tab_reg.get_int("I7"); + //_nprog_da = tab_reg.get_long ("I6"); + //_tot_dare = tab_reg.get_real ("R1") + //_tot_avere = tab_reg.get_real ("R2"); + if (_tipo_stampa != 3) + _data_da = _tabreg->get_date ("D3"); + if ( _tipo_stampa == 1 || _tipo_stampa == 4 ) + if ( _data_a < _data_da) + { + TString16 datas = format("%02d/%4d", _data_da.month(), _data_da.year()); + warning_box ("La data specificata non deve essere inferiore al %s (ultima data di stampa specificata sul registro)", (const char*)datas); + return FALSE; + } + //_stampa_intesta = _tabreg->get_bool ("B9"); + _codatt = _tabreg->get("S8"); + _attivita = desc_attivita(_codatt); + _desc_lib = _tabreg->get ("S0"); + } + else + { + warning_box("Il registro IVA specificato non esiste nella \n Ditta %ld", codditta); + return FALSE; + } + } + + if (_tipo_stampa == 4) + { + TString app(4); + _tabreg->zero(); + app = format("%04d", _annoes); + _tabreg->put ("CODTAB", app); + TRectype r (_tabreg->curr()); + _tabreg->read(_isgteq); + for (; !_tabreg->eof(); _tabreg->next()) + { + if (_tabreg->curr() != r) break; + + int tiporeg = _tabreg->get_int("I0"); + if (tiporeg == 5) //libro giornale + { + TDate data = _tabreg->get_date("D3"); + if (_data_a > data) + { + TString16 datas = format("%02d/%4d", data.month(), data.year()); + warning_box ("La data specificata non deve essere superiore al %s (ultima data di stampa del libro giornale)", (const char*)datas); + return FALSE; + } + } + } + } + + return TRUE; +} + +bool CG4400_application::compila_lib() +{ + TTable tab_lib ("%LBU"); + TString16 cod; + + cod << _annoes << _codlib; + tab_lib.zero(); + tab_lib.put("CODTAB", cod); + + if (tab_lib.read() == NOERR) + { + _stampa_ind_ditta = tab_lib.get_bool("B1"); + return TRUE; + } + return FALSE; +} + +bool CG4400_application::preprocess_print(int file, int counter) +{ + if (file == LF_MOV) + { + _iva_array.destroy(); + _riga_rmi.destroy(); + _tot_iva_array.destroy(); + _doc_array.destroy(); + _dataregp = ""; + _mov_empty = TRUE; + _primast = _u_stampata; + set_print_zero(); + } + return TRUE; +} + +bool CG4400_application::preprocess_page(int file, int counter) +{ + if (file == LF_MOV) + { + if (counter) return TRUE; + int rr = 0; + TString ragsoc; + TString tipo_op = ""; + + TLocalisamfile* mov = _cur->file(LF_MOV); + TLocalisamfile* caus = _cur->file(LF_CAUSALI); + + //long annoes = mov->get_long(MOV_ANNOES); + //TString16 codreg = mov->get(MOV_REG); + _datareg = mov->get_date(MOV_DATAREG); + + //if (codreg != _codreg || annoes != _annoes) + // return FALSE; + + //if (_data_da.string() != "" && _data_a.string() != "") + // if ( (_datareg < _data_da || _datareg > _data_a) || (!_datareg.ok()) ) + // return FALSE; + + _mov_empty = FALSE; + + //if ( (_tipo_stampa == 1) || (_tipo_stampa == 4) ) + if ( (_datareg.month() != _dataregp.month()) && (_dataregp.ok()) ) + { + if (_tipo_stampa == 2) + ++ _u_stampata; + printer().formfeed(); + } + + _dataregp = _datareg; + + TDate datadoc = mov->get_date(MOV_DATADOC); + long numreg = mov->get_long(MOV_NUMREG); + long protiva = mov->get_long(MOV_PROTIVA); + real totdoc = mov->get_real(MOV_TOTDOC); + TString numdoc = mov->get(MOV_NUMDOC); + char tipocf = mov->get(MOV_TIPO)[0]; + TString ocfpi = mov->get(MOV_OCFPI); + long codcf = mov->get_long(MOV_CODCF); + long numgio = mov->get_long(MOV_NUMGIO); + bool stampato = mov->get_bool(MOV_STAMPATO); + bool intra = caus->get_bool(CAU_INTRACOM); + bool autof = caus->get_bool(CAU_AUTOFATT); + TString descrcau = caus->get(CAU_DESCR); + + //aggiornamento di mov + if (_tipo_stampa != 3) + if (!stampato) + { + mov->put(MOV_STAMPATO,TRUE); + mov->rewrite(); + } + + if ( intra && autof) + tipo_op = "3"; + else if (intra) + tipo_op = "1"; + else if (autof) + tipo_op = "2"; + + if ( (tipocf == 'C') || (tipocf == 'F') ) + { + if (ocfpi.trim().empty()) + ragsoc = ricerca_cf(tipocf, codcf); + else + ragsoc = ricerca_occ(ocfpi); + } + else ragsoc = descrcau; + + _tipodoc = mov->get(MOV_TIPODOC); + _descr_doc = descr_doc(_tipodoc); + TString app = datadoc.string(2, '/'); + + _doc_array.add_riga(_tipodoc,_descr_doc,totdoc); + + //setto le righe di stampa + _r = 1; + set_row(_r, "%s", (const char*) _datareg.string(2, '/')); + set_row(_r, "@9g%5d", protiva); + set_row(_r, "@15g%s", (const char*) app); + set_row(_r, "@24g%s", (const char*) numdoc); + set_row(_r, "@32g%6d", codcf); + set_row(_r, "@39g%.28s",(const char*) ragsoc); + set_row(_r, "@68g%s", (const char*) tipo_op); + set_row(_r, "@70g%2s", (const char*) _tipodoc); + set_row(_r, "@72g%r", &totdoc); + + _nrec = riga_rmoviva(); + if (_nrec > 0) + { + for (int j = 0; j < _riga_rmi.items(); j++) + { + TRigaiva& riga = (TRigaiva&)_riga_rmi[j]; + rr = _r+j; + set_row(rr, "@87g%r", &riga._imponibile); + set_row(rr, "@102g%4s",(const char*)riga._codiva); + if (_tipo_reg == 2) + set_row(rr, "@107g%d", riga._tipodet); + set_row(rr, "@108g%r", &riga._imposta); + } + _riga_rmi.destroy(); + int tipocr = _cur->file(LF_RMOVIVA)->get_int(RMI_TIPOCR); + set_row(_r, "@124g%d", tipocr); + } + //int tipocr = _cur->file(LF_RMOVIVA)->get_int(RMI_TIPOCR); + //set_row(_r, "@124g%d", tipocr); + if (_tipo_stampa == 3) //stampa di prova + { + set_row(_r, "@125g%6d", numreg); + if (stampato) + set_row(_r, "@131g*"); + } + if (_tipo_stampa == 4) //stampa con riferimento al libro giornale + set_row(_r, "@125g%ld", numgio); + } + return TRUE; +} + +void CG4400_application::aggiorna_reg() +{ + TString16 codtab; + TTable Tabreg ("REG"); + TTable TabInl ("%INL"); + long pag; + //long stampate; + + word ultimast = get_page_number(); + if (_stampa_tutti_i_registri) //ho fatto un salto pagina dopo avere stampato un registro + --ultimast; + + codtab << _annoes << _codreg; + Tabreg.zero(); + Tabreg.put("CODTAB", codtab); + if (Tabreg.read() == NOERR) + { + //stampate = ultimast + 1; + if (!_mov_empty) //cioe' se e' stata stampata almeno una pagina + { + pag = _pagine_stampate + ultimast; + Tabreg.put("I1", pag); + } + Tabreg.put("D3", _data_a); + Tabreg.rewrite(); + } + if (_tipo_stampa == 2) //stampa su libro unico + //sulla tabella %inl (indice libro unico) devo generare una riga per ogni registro stampato + if (!_mov_empty) + { + bool trovato = FALSE; + codtab = ""; + codtab << _annoes << _codlib; + TabInl.zero(); + TRectype nuovo (TabInl.curr()); + TRectype recprec (TabInl.curr()); + TabInl.put("CODTAB", codtab); + + TRectype rec (TabInl.curr()); + TabInl.read (_isgteq); + for (; !TabInl.eof(); TabInl.next()) + { + if (TabInl.curr() != rec) break; + + trovato = TRUE; + recprec = TabInl.curr(); + } + + TString cod = ""; + if (trovato) + { + TString16 cod_inl = recprec.get("CODTAB"); + long numero_riga = atol(cod_inl.mid(7,6)) + 1; + TString16 num_riga (format("%6d", numero_riga)); + cod_inl = cod_inl.mid(0,7); + nuovo = recprec; + cod << cod_inl << num_riga; + } + else + { + TString16 num_riga ( format("%6d", 1L) ); + cod << codtab << num_riga; + } + + long numini = _pagine_stampate + 1; + nuovo.put("CODTAB", cod); + nuovo.put("I0", (long)_annoes); + nuovo.put("I1", (long)_fino_a_mese); + nuovo.put("I2", (long)(_primast + 1)); + nuovo.put("I3", (long)(_primast + ultimast)); + nuovo.put("I4", get_firm()); + nuovo.put("S0", _codreg); + nuovo.put("I5", (long)numini); + nuovo.put("I6", (long)(numini + ultimast - 1)); + + if (trovato) + TabInl.rewrite(nuovo); + else + TabInl.write(nuovo); + + _u_stampata += ultimast; + } +} + +void CG4400_application::aggiorna_lib() +{ + TString16 cod = ""; + TTable lbu ("%LBU"); + + cod << _annoes << _codlib; + lbu.zero(); + lbu.put("CODTAB", cod); + if (lbu.read() == NOERR) + { + lbu.put("I0", (long) _fino_a_mese); + lbu.put("I1", (long) _u_stampata); + lbu.rewrite(); + } +} + +print_action CG4400_application::postprocess_page (int file, int counter) +{ + if (file == LF_MOV) + if (!counter) + { + bool FINITO = FALSE; + TRecnotype pos = _cur->pos(); + long items = _cur->items(); + + FINITO = (pos == items-1); + + if ( FINITO ) + { + set_page_tot_reg(); + return REPEAT_PAGE; + } + else //if ( (_tipo_stampa == 1) || (_tipo_stampa == 4) ) + { + TLocalisamfile* mov = _cur->file(LF_MOV); + _cur->save_status(); + ++(*_cur); + _dataregs = mov->get_date(MOV_DATAREG); + --(*_cur); + _cur->restore_status(); + + if (_dataregs.month() != _dataregp.month()) + { + set_page_tot_reg(); + return REPEAT_PAGE; + } + } + } + return NEXT_PAGE; +} + +print_action CG4400_application::postprocess_print(int file, int counter) +{ + if (file == LF_MOV) + { + //aggiorna registri solo se non e' stampa di prova + if ( (_tipo_stampa != 3) && (!_stampa_tutti_i_registri) ) + aggiorna_reg(); + if (_stampa_tutti_i_registri) + //if (!_mov_empty ) + { + if (_tipo_stampa == 2) + ++ _u_stampata; + printer().formfeed(); + } + /* + if (_stampa_tutti_i_registri) + { + TString16 codtab; + int anno, tipo; + //vado avanti dal punto in cui sono + _tabreg->next(); + for (; !_tabreg->eof(); _tabreg->next()) + { + tipo = _tabreg->get_int("I0"); + if ( (tipo == 1) || (tipo == 2) ) //registro iva + { + codtab = _tabreg->get("CODTAB"); + anno = atoi(codtab.mid(0,4)); + break; + } + } + if ( (_tabreg->eof()) || (anno != _annoes) ) + { + if (_tipo_stampa == 2) //stampa su libro unico + aggiorna_lib(); + return NEXT_PAGE; + } + else + { + _tipo_reg = _tabreg->get_int("I0"); + _desc_lib = _tabreg->get("S0"); + _data_da = _tabreg->get_date("D3"); + _pagine_stampate = _tabreg->get_int("I1"); + _codreg = codtab.mid(4,3); + _primast = get_page_number(); + if (!_mov_empty ) + printer().formfeed(); + _cur->set_filterfunction(NULL); + _cur->set_filterfunction(filter_func); + _mov_empty = TRUE; + return REPEAT_PAGE; + } + } + */ + } + + return NEXT_PAGE; +} + +bool CG4400_application::set_print(int n) +{ + TMask m("cg4400a"); + int giorni_del_mese; + + if (set_ditte(m)) + if (_selected.ones() > 0l) + { + _annoes = m.get_int(ANNO);//in realta' e' l'anno IVA !!! + _tipo_stampa = m.get_int(TIPO_STAMPA); + //Se stampa di prova l'utente indica data_da e data_a + if (_tipo_stampa == 3) + { + _data_stampa = m.get(DATA_STAMPA); + _data_da = m.get(DA_DATA); + _data_a = m.get(A_DATA); + if (!_data_da.ok()) + _data_da = format("01/01/%4d", _annoes); + if (!_data_a.ok()) + _data_a = format("31/12/%4d", _annoes); + printer().setdate(_data_stampa); + } + // senno' data_da e' letta dal registro + else //stampe definitive + { + if ( (_tipo_stampa == 1) || (_tipo_stampa == 4) ) + _fino_a_mese = m.get_int(FINO_A_MESE); + else //stampa su libro unico + { + _codlib = m.get(CODICE_LIB_UN); + _fino_a_mese = m.get_int(MESE); + _u_stampata = m.get_int(ULTIMA_PAGINA); + //set_page_number(_u_stampata + 1); + } + if (_fino_a_mese == 12) + giorni_del_mese = 31; + else + { + TDate primo = format("01/%02d/%4d", _fino_a_mese+1, _annoes); + --primo; + giorni_del_mese = primo.day(); + } + _data_a=format("%02d/%02d/%4d",giorni_del_mese,_fino_a_mese,_annoes); + // NB data_da viene letta nella preprocess_page + } + if (_tipo_stampa == 2) + compila_lib(); + stampa_registri_IVA(m); + } + else warning_box("Nessuna ditta selezionata!"); + return FALSE; +} + +void CG4400_application::stampa_registri_IVA(const TMask& m) +{ + long l; + long firm = TApplication::get_firm(); + bool ok = FALSE; + + for (l = 0l, _nditte->first(); !_nditte->eof(); l++, _nditte->next()) + { + if (_selected[l]) + { + TApplication::set_firm(_nditte->get_long("CODDITTA")); + ok = compila_reg(m); // cerca il primo registro valido (nel caso di stampa tutti i registri), senno' legge i dati del registro specificato + if (!ok) continue; + if (!_stampa_tutti_i_registri) + _cur->set_filterfunction(filter_func); + _frequiva = _nditte->get("FREQVIVA")[0]; + if (_tipo_stampa != 3) //stampa definitiva + ok = controlla_liquidazione() && controlla_mov(); + + if (!ok) continue; + + if (!_stampa_tutti_i_registri) + print(); + else + { + TString16 codtab; + int anno, tipo; + for (_tabreg->first(); !_tabreg->eof(); _tabreg->next()) + { + tipo = _tabreg->get_int("I0"); + codtab = _tabreg->get("CODTAB"); + anno = atoi(codtab.mid(0,4)); + if (anno > _annoes) + break; + if (anno == _annoes) + if ( (tipo == 1) || (tipo == 2) ) //registro iva + { + _tipo_reg = _tabreg->get_int("I0"); + _desc_lib = _tabreg->get("S0"); + if (_tipo_stampa != 3) + _data_da = _tabreg->get_date("D3"); + _pagine_stampate = _tabreg->get_int("I1"); + _codreg = codtab.mid(4,3); + _codatt = _tabreg->get("S8"); + _attivita = desc_attivita(_codatt); + _desc_lib = _tabreg->get ("S0"); + //_primast = get_page_number(); + //if (!_mov_empty ) + // printer().formfeed(); + _cur->set_filterfunction(NULL); + _cur->set_filterfunction(filter_func); + //set_page_number(_u_stampata + 1); + print(); + if (_tipo_stampa != 3) aggiorna_reg(); + } + } + } + if (_tipo_stampa == 2) + aggiorna_lib(); + } + } + + TApplication::set_firm(firm); +} + +bool CG4400_application::set_ditte(TMask& m) +{ + _selected.reset(); + + m.field(F_SELECT).set("0"); + m.field(DA_CODICE).set(""); + m.field(A_CODICE).set(""); + m.field(TIPO_STAMPA).set("1"); + + m.set_handler (TIPO_STAMPA, my_handler); + m.set_handler (A_CODICE, mask_from_to); + m.set_handler (DA_DATA, mask_data); + m.set_handler (A_DATA, mask_data); + m.set_handler (MESE, mask_mese); + m.set_handler (CODICE_LIB_UN, mask_cod); + m.set_handler (DLG_SELECT, mask_select); + m.set_handler (F_ANNULLA, mask_annulla); + m.set_handler (F_VERIFICA, mask_verifica); + + KEY tasto; + + _stampa_width = 132; + set_real_picture("###.###.###.###"); + + tasto = m.run(); + +// m.first_focus(tasto); + + return tasto == K_ENTER; +} + +int CG4400_application::stampa_intestazione_ditta() +{ + TDati_ditta tditta(get_firm(), _stampa_width); + TString riga (tditta.prima_riga()); + int r=1; + + set_header (r, "%s", (const char *) riga); + r++; + + riga = tditta.seconda_riga(); + + set_header (r, "%s", (const char*) riga); + r++; + + return r; +} + +void CG4400_application::preprocess_header() +{ + int r=1; + TString cor, nd1, nd2; + TString riga(_stampa_width); + TString data; + + if (_tipo_stampa != 3) //cioe' si tratta di una stampa definitiva + { + if ( (_tipo_stampa == 1) || (_tipo_stampa == 4) ) + data.format("%s %s %d", (const char*)"mese di", itom(_datareg.month()), + _datareg.year()); + else data.format("%s %s %d", (const char*)"mese di", itom(_fino_a_mese), _annoes); + } + else + data = _data_da.string(); + + reset_header(); + + if (_tipo_stampa == 2) + { + if (_stampa_ind_ditta) + r = stampa_intestazione_ditta(); + long num = _u_stampata + 1; + set_header(r++, "@94gProgr.Studio %ld@114gProgr.Utente @#", num); + } + else + r = stampa_intestazione_ditta(); + set_header(r, "Registro IVA: %s %s %s Attivita\' %s %s", + (const char *) _codreg, (const char *) _desc_lib, + (const char *) data, (const char *) _codatt, + (const char *) _attivita); + r++; + + riga.fill('-'); + set_header(r, riga); + r++; + if (_tipo_reg == 1) //registro vendite + { + cor = "R"; + nd1 = ""; + nd2 = ""; + } + if (_tipo_reg == 2) + { + cor = "C"; + nd1 = "N"; + nd2 = "D"; + } + if (_tipo_stampa == 3) //stampa di prova + { + set_header(r,"@10gNum.@19gDocumento@68gT Tipo@103gCod %s@121g@124gT@128gNum", (const char*) nd1); + r++; + set_header(r, "Data reg. prot.@17gData@25gNumero Codice Ragione sociale/descrizione@68gO Doc.@76gTotale doc.@91gImponibile Iva %s@112gImposta@124g%s@128gReg", (const char*) nd2, (const char*) cor); + r++; + } + else + { + set_header(r,"@10gNum.@19gDocumento@68gT Tipo@103gCod %s@121g@124gT", (const char*) nd1); + if (_tipo_stampa == 4) //stampa definitiva con rif. al libro giornale + set_header(r, "@128gNum."); + r++; + set_header(r, "Data reg. prot.@17gData@25gNumero Codice Ragione sociale/descrizione@68gO Doc.@76gTotale doc.@91gImponibile Iva %s@112gImposta@124g%s", +(const char*) nd2, (const char*) cor); + if (_tipo_stampa == 4) + set_header(r, "@128gop."); + r++; + } + riga.fill('-'); + set_header(r, riga); +} + +int cg4400 (int argc, char * argv[]) +{ + CG4400_application a; + a.run(argc, argv, "Stampa registri IVA"); + return 0; +} + + + + + + + + + + + + + + diff --git a/cg/cg4400.h b/cg/cg4400.h index 44ecffc4d..32da6a731 100755 --- a/cg/cg4400.h +++ b/cg/cg4400.h @@ -1,130 +1,128 @@ -// -// cg4400.h -// -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "cglib03.h" - -//const int MAXSTR = 255; -//static char __tmp[MAXSTR]; - -//enum STAMPA { bollati=1, unici=2 }; -const int TABREG = (int)TTable::name2log("REG"); - -bool filter_func (const TRelation*); -bool my_handler (TMask_field&, KEY); -bool mask_cod (TMask_field&, KEY); -bool mask_data (TMask_field&, KEY); -bool mask_mese (TMask_field&, KEY); -bool mask_fino_a_mese (TMask_field&, KEY); -bool mask_select (TMask_field&, KEY); -bool mask_verifica (TMask_field&, KEY); -bool mask_annulla (TMask_field&, KEY); - -class TDati_ditta : public TObject -{ - TLocalisamfile * _nditte, * _anag, *_comuni; - TString _ragsoc, _cofi, _paiva; - TString _comunefis, _viafis, _provfis, _cap; - long _codditta; - int _stampa_width; -protected: - void get_dati_ditta(); - TRectype& look_com (const char * codice); -public: - const char* prima_riga (); - const char* seconda_riga (); - TDati_ditta (long cod_ditta, int stampa_width); - virtual ~TDati_ditta(); -}; - -class CG4400_application : public TPrintapp -{ - friend bool filter_func (const TRelation *r); - friend bool mask_cod (TMask_field&, KEY); - friend bool mask_mese (TMask_field&, KEY); - //friend bool mask_fino_a_mese (TMask_field&, KEY); - friend bool my_handler (TMask_field&, KEY); - friend bool mask_select (TMask_field&, KEY); - friend bool mask_verifica (TMask_field&, KEY); - friend bool mask_annulla (TMask_field&, KEY); - - TCursor * _cur; - TRelation *_rel; - TLocalisamfile *_clifo, *_nditte, *_occas, *_tab, *_tabcom; - TTable *_tabreg, *_tablbu, *_tabinl, *_tablim, *_tabpim; - TRigaiva_array _iva_array, _riga_rmi; - TTipodoc_array _doc_array; - TRiga_array _tot_iva_array; - TArray_sheet *_ditte; - TBit_array _selected; - TArray _nomiditte; //array descrizioni ditte per sheet - TRecnotype _nrec; - bool _mov_empty, _stampa_ind_ditta, _stampa_tutti_i_registri; - char _frequiva; - TDate _data_da, _data_a, _data_stampa, _dataregp, _dataregs, _datareg; - long _n_ditte, _u_stampata, _primast; - int _fino_a_mese, _tipo_reg, _tipo_stampa, _pagine_stampate; - int _annoes, _r, _stampa_width; // riga corrente di stampa - real _totale_doc; - TString _codreg, _desc_lib, _codatt, _attivita; - TString _tipodoc, _descr_doc, _codlib; - -public: - const char* desc_attivita (const char * codatt); - const char* descr_doc (const char * tipo); - const char* descr_iva (const char * cod); - const char* ricerca_cf (char tipocf, long codcf); - const char* ricerca_occ(const char * occ); - int setta_riga (int, const TRigaiva&, real&, real&, real&, real&); - int riga_rmoviva(); - bool set_print(int); - bool set_ditte(TMask&); - bool compila_reg(const TMask&); - bool compila_lib(); - bool controlla_liquidazione(); - bool controlla_mov(); - void cerca_reg(const TString&, byte&, TDate&); - //void leggi_movimenti(const TDate&, const TString&, bool&); - void stampa_registri_IVA(const TMask&); - void set_page_tot_reg(); - void aggiorna_reg(); - void aggiorna_lib(); - void calcola_progressivi(real&, real&, const char*, const int); - void user_create(); - void user_destroy(); - bool preprocess_page(int, int); - int stampa_intestazione_ditta(); - bool preprocess_print(int, int); - print_action postprocess_print(int, int); - print_action postprocess_page (int, int); - void preprocess_header(); - - CG4400_application() : TPrintapp(),_ditte(NULL),_selected(10000), - _nomiditte(100) {} - - virtual ~CG4400_application() {} -}; - - - - +// +// cg4400.h +// +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cglib03.h" + +//enum STAMPA { bollati=1, unici=2 }; +const int TABREG = (int)TTable::name2log("REG"); + +bool filter_func (const TRelation*); +bool my_handler (TMask_field&, KEY); +bool mask_from_to (TMask_field&, KEY); +bool mask_cod (TMask_field&, KEY); +bool mask_data (TMask_field&, KEY); +bool mask_mese (TMask_field&, KEY); +bool mask_fino_a_mese (TMask_field&, KEY); +bool mask_select (TMask_field&, KEY); +bool mask_verifica (TMask_field&, KEY); +bool mask_annulla (TMask_field&, KEY); + +class TDati_ditta : public TObject +{ + TLocalisamfile * _nditte, * _anag, *_comuni; + TString _ragsoc, _cofi, _paiva; + TString _comunefis, _viafis, _provfis, _cap; + long _codditta; + int _stampa_width; +protected: + void get_dati_ditta(); + TRectype& look_com (const char * codice); +public: + const char* prima_riga (); + const char* seconda_riga (); + TDati_ditta (long cod_ditta, int stampa_width); + virtual ~TDati_ditta(); +}; + +class CG4400_application : public TPrintapp +{ + friend bool filter_func (const TRelation *r); + friend bool mask_cod (TMask_field&, KEY); + friend bool mask_from_to (TMask_field&, KEY); + friend bool mask_mese (TMask_field&, KEY); + friend bool my_handler (TMask_field&, KEY); + friend bool mask_select (TMask_field&, KEY); + friend bool mask_verifica (TMask_field&, KEY); + friend bool mask_annulla (TMask_field&, KEY); + + TCursor * _cur; + TRelation *_rel; + TLocalisamfile *_clifo, *_nditte, *_occas, *_tab, *_tabcom; + TTable *_tabreg, *_tablbu, *_tabinl, *_tablim, *_tabpim; + TRigaiva_array _iva_array, _riga_rmi; + TTipodoc_array _doc_array; + TRiga_array _tot_iva_array; + TArray_sheet *_ditte; + TBit_array _selected; + TArray _nomiditte; //array descrizioni ditte per sheet + TRecnotype _nrec; + bool _mov_empty, _stampa_ind_ditta, _stampa_tutti_i_registri; + char _frequiva; + TDate _data_da, _data_a, _data_stampa, _dataregp, _dataregs, _datareg; + long _n_ditte, _u_stampata, _primast; + int _fino_a_mese, _tipo_reg, _tipo_stampa, _pagine_stampate; + int _annoes, _r, _stampa_width; // riga corrente di stampa + real _totale_doc; + TString _codreg, _desc_lib, _codatt, _attivita; + TString _tipodoc, _descr_doc, _codlib; + +public: + const char* desc_attivita (const char * codatt); + const char* descr_doc (const char * tipo); + const char* descr_iva (const char * cod); + const char* ricerca_cf (char tipocf, long codcf); + const char* ricerca_occ(const char * occ); + int setta_riga (int, const TRigaiva&, real&, real&, real&, real&); + int riga_rmoviva(); + bool set_print(int); + bool set_ditte(TMask&); + bool compila_reg(const TMask&); + bool compila_lib(); + bool controlla_liquidazione(); + bool controlla_mov(); + void cerca_reg(const TString&, byte&, TDate&); + //void leggi_movimenti(const TDate&, const TString&, bool&); + void stampa_registri_IVA(const TMask&); + void set_page_tot_reg(); + void aggiorna_reg(); + void aggiorna_lib(); + void calcola_progressivi(real&, real&, const char*, const int); + void user_create(); + void user_destroy(); + bool preprocess_page(int, int); + int stampa_intestazione_ditta(); + bool preprocess_print(int, int); + print_action postprocess_print(int, int); + print_action postprocess_page (int, int); + void preprocess_header(); + + CG4400_application() : TPrintapp(),_ditte(NULL),_selected(10000), + _nomiditte(100) {} + + virtual ~CG4400_application() {} +}; + + + + diff --git a/cg/cg4400a.uml b/cg/cg4400a.uml index 4484af1fe..632181e30 100755 --- a/cg/cg4400a.uml +++ b/cg/cg4400a.uml @@ -1,236 +1,236 @@ -// cg4400a.uml -// Stampa tabella registri - -#include "cg4400a.h" - -PAGE "Stampa registri IVA" -1 -1 56 19 - -/* -LISTBOX TIPO_STAMPA 2 27 -BEGIN - PROMPT 2 1 "Tipo stampa " - ITEM "1|Libri bollati della ditta" - MESSAGE SHOW,1@|HIDE,2@|HIDE,3@ - ITEM "2|Libri unici dello studio" - MESSAGE SHOW,2@|HIDE,1@|HIDE,3@ - ITEM "3|Stampa di prova" - MESSAGE SHOW,3@|HIDE,1@|HIDE,2@|SHOW,CODICE_LIBRO - ITEM "4|Stampa libri con riferimenti al libro giornale" - MESSAGE SHOW,1@|HIDE,2@|HIDE,3@ -END -*/ - -NUMBER TIPO_STAMPA 1 -BEGIN - PROMPT 2 1 "Tipo stampa " - SHEET "Cod|Descrizione@50" - INPUT TIPO_STAMPA - OUTPUT TIPO_STAMPA - ITEM "1|Libri bollati della ditta" - ITEM "2|Libri unici dello studio" - ITEM "3|Stampa di prova" - ITEM "4|Stampa libri con riferimenti al libro giornale" -END - -GROUPBOX DLG_NULL 35 5 -BEGIN - PROMPT 20 1 "Scelta ditte" -END - -NUMBER DA_CODICE 6 -BEGIN - PROMPT 21 2 "Da codice " - HELP "Immettere codice ditta di partenza per la selezione" - USE LF_NDITTE KEY 1 - CHECKTYPE NORMAL - INPUT CODDITTA DA_CODICE - DISPLAY "Codice" CODDITTA - DISPLAY "Ragione sociale@50" RAGSOC - OUTPUT DA_CODICE CODDITTA -END - -NUMBER A_CODICE 6 -BEGIN - PROMPT 21 3 "A codice " - HELP "Immettere codice ditta di fine selezione" - COPY USE DA_CODICE - CHECKTYPE NORMAL - INPUT CODDITTA A_CODICE - COPY DISPLAY DA_CODICE - OUTPUT A_CODICE CODDITTA -END - -STRING F_SELECT 6 -BEGIN - PROMPT 21 4 "Scelte n. " - FLAGS "D" -END - -BUTTON DLG_SELECT 9 -BEGIN - PROMPT 42 2 "Selezione" - //MESSAGE EXIT,DLG_SELECT -END - -BUTTON F_ANNULLA 9 -BEGIN - PROMPT 42 3 "Annulla" - //MESSAGE EXIT,F_ANNULLA -END - -BUTTON F_VERIFICA 9 -BEGIN - PROMPT 42 4 "Verifica" - //MESSAGE EXIT,F_VERIFICA -END - -DATE DATA_STAMPA -BEGIN - PROMPT 2 6 "Data stampa " - FLAG "AH" - GROUP 3 -END - -NUMBER ANNO 4 -BEGIN - PROMPT 2 7 "Anno " - FLAGS "A" - CHECKTYPE REQUIRED -END - -STRING CODICE_LIBRO 3 -BEGIN - PROMPT 20 7 "Codice libro " - HELP "Specificare il codice libro di cui si chiede la stampa; nel caso in cui non si indichi nessun codice verranno stampati tutti i libri delle ditte selezionate" - USE REG SELECT (I0<"3") && (S6=="") && (CODTAB[1,4]==#111) - INPUT CODTAB[1,4] ANNO - INPUT CODTAB[5,7] CODICE_LIBRO - DISPLAY "Anno " CODTAB[1,4] - DISPLAY "Codice " CODTAB[5,7] - DISPLAY "Descrizione @40" S0 - OUTPUT ANNO CODTAB[1,4] - OUTPUT CODICE_LIBRO CODTAB[5,7] - //CHECKTYPE NORMAL - FLAGS "UR" - GROUP 1 -END - -STRING CODICE_LIBRO_PROVA 3 -BEGIN - PROMPT 20 7 "Codice libro " - HELP "Specificare il codice libro di cui si chiede la stampa; nel caso in cui non si indichi nessun codice verranno stampati tutti i libri delle ditte selezionate" - USE REG SELECT (I0<"3") && (CODTAB[1,4]==#111) - INPUT CODTAB[1,4] ANNO - INPUT CODTAB[5,7] CODICE_LIBRO_PROVA - DISPLAY "Anno " CODTAB[1,4] - DISPLAY "Codice " CODTAB[5,7] - DISPLAY "Descrizione @40" S0 - OUTPUT ANNO CODTAB[1,4] - OUTPUT CODICE_LIBRO_PROVA CODTAB[5,7] - //CHECKTYPE NORMAL - FLAGS "UR" - GROUP 1 -END - -STRING CODICE_LIB_UN 3 -BEGIN - PROMPT 20 7 "Cod.libro unico " - HELP "Specificare il codice del libro unico su cui deve essere effettuata la stampa" - USE %LBU SELECT CODTAB[1,4]==#111 - INPUT CODTAB[1,4] ANNO - INPUT CODTAB[5,7] CODICE_LIB_UN - DISPLAY "Anno " CODTAB[1,4] - DISPLAY "Codice " CODTAB[5,7] - DISPLAY "Descrizione @40" S0 - OUTPUT ANNO CODTAB[1,4] - OUTPUT CODICE_LIB_UN CODTAB[5,7] - FLAGS "UR" - CHECKTYPE REQUIRED - GROUP 2 -END - -GROUPBOX DLG_NULL 52 3 -BEGIN - PROMPT 2 9 "Stampa movimenti" -END - -DATE DA_DATA -BEGIN - PROMPT 5 10 "Dalla data " - GROUP 3 -END - -DATE A_DATA -BEGIN - PROMPT 30 10 "Alla data " - GROUP 3 -END - -LISTBOX FINO_A_MESE 10 -BEGIN - PROMPT 5 10 "Fino al mese " - FLAGS "M" - GROUP 1 -END - -LISTBOX MESE 10 -BEGIN - PROMPT 5 10 "Mese " - FLAGS "M" - GROUP 2 -END - -LISTBOX TIPO_RIEPILOGATIVO 11 -BEGIN - PROMPT 2 12 "Tipo riepilogativo " - HELP "Selezionare Del periodo/Annuale a seconda che si desideri la stampa della liquidazione periodica/annuale" - ITEM "P|Del periodo" - ITEM "A|Annuale" - GROUP 1 -END - -LISTBOX ULTIMO_MESE 10 -BEGIN - PROMPT 2 13 "Ultimo mese stampa su libro unico " - FLAGS "MD" - GROUP 2 -END - -NUMBER ULTIMA_PAGINA 4 -BEGIN - PROMPT 2 14 "Ultimo numero di pagina stampata libro unico " - FLAGS "R" - GROUP 2 -END - -STRING CODICE_LIBRO_IVA 3 -BEGIN - PROMPT 2 15 "Eventuale codice libro IVA " - HELP "Se non viene indicato nessun cod. libro IVA, vengono stampati tutti i registri delle ditte selezionate" - USE REG SELECT (I0<"3") && (S6=="") && (CODTAB[1,4]==#111) - INPUT CODTAB[1,4] ANNO - INPUT CODTAB[5,7] CODICE_LIBRO_IVA - DISPLAY "Anno " CODTAB[1,4] - DISPLAY "Codice " CODTAB[5,7] - DISPLAY "Descrizione @40" S0 - OUTPUT ANNO CODTAB[1,4] - OUTPUT CODICE_LIBRO_IVA CODTAB[5,7] - //CHECKTYPE NORMAL - FLAGS "UR" - GROUP 2 -END - -BUTTON DLG_OK 9 2 -BEGIN - PROMPT -12 -1 "" -END - -BUTTON DLG_CANCEL 9 2 -BEGIN - PROMPT -22 -1 "" -END - -ENDPAGE - -ENDMASK - +// cg4400a.uml +// Stampa tabella registri + +#include "cg4400a.h" + +PAGE "Stampa registri IVA" -1 -1 56 19 + +/* +LISTBOX TIPO_STAMPA 2 27 +BEGIN + PROMPT 2 1 "Tipo stampa " + ITEM "1|Libri bollati della ditta" + MESSAGE SHOW,1@|HIDE,2@|HIDE,3@ + ITEM "2|Libri unici dello studio" + MESSAGE SHOW,2@|HIDE,1@|HIDE,3@ + ITEM "3|Stampa di prova" + MESSAGE SHOW,3@|HIDE,1@|HIDE,2@|SHOW,CODICE_LIBRO + ITEM "4|Stampa libri con riferimenti al libro giornale" + MESSAGE SHOW,1@|HIDE,2@|HIDE,3@ +END +*/ + +NUMBER TIPO_STAMPA 1 +BEGIN + PROMPT 2 1 "Tipo stampa " + SHEET "Cod|Descrizione@50" + INPUT TIPO_STAMPA + OUTPUT TIPO_STAMPA + ITEM "1|Libri bollati della ditta" + ITEM "2|Libri unici dello studio" + ITEM "3|Stampa di prova" + ITEM "4|Stampa libri con riferimenti al libro giornale" +END + +GROUPBOX DLG_NULL 35 5 +BEGIN + PROMPT 20 1 "Scelta ditte" +END + +NUMBER DA_CODICE 6 +BEGIN + PROMPT 21 2 "Da codice " + HELP "Immettere codice ditta di partenza per la selezione" + USE LF_NDITTE KEY 1 + CHECKTYPE NORMAL + INPUT CODDITTA DA_CODICE + DISPLAY "Codice" CODDITTA + DISPLAY "Ragione sociale@50" RAGSOC + OUTPUT DA_CODICE CODDITTA +END + +NUMBER A_CODICE 6 +BEGIN + PROMPT 21 3 "A codice " + HELP "Immettere codice ditta di fine selezione" + COPY USE DA_CODICE + CHECKTYPE NORMAL + INPUT CODDITTA A_CODICE + COPY DISPLAY DA_CODICE + OUTPUT A_CODICE CODDITTA +END + +STRING F_SELECT 6 +BEGIN + PROMPT 21 4 "Scelte n. " + FLAGS "D" +END + +BUTTON DLG_SELECT 9 +BEGIN + PROMPT 42 2 "Selezione" + //MESSAGE EXIT,DLG_SELECT +END + +BUTTON F_ANNULLA 9 +BEGIN + PROMPT 42 3 "Annulla" + //MESSAGE EXIT,F_ANNULLA +END + +BUTTON F_VERIFICA 9 +BEGIN + PROMPT 42 4 "Verifica" + //MESSAGE EXIT,F_VERIFICA +END + +DATE DATA_STAMPA +BEGIN + PROMPT 2 6 "Data stampa " + FLAG "AH" + GROUP 3 +END + +NUMBER ANNO 4 +BEGIN + PROMPT 2 7 "Anno " + FLAGS "A" + CHECKTYPE REQUIRED +END + +STRING CODICE_LIBRO 3 +BEGIN + PROMPT 20 7 "Codice libro " + HELP "Specificare il codice libro di cui si chiede la stampa; nel caso in cui non si indichi nessun codice verranno stampati tutti i libri delle ditte selezionate" + USE REG SELECT (I0<"3") && (S6=="") && (CODTAB[1,4]==#111) + INPUT CODTAB[1,4] ANNO + INPUT CODTAB[5,7] CODICE_LIBRO + DISPLAY "Anno " CODTAB[1,4] + DISPLAY "Codice " CODTAB[5,7] + DISPLAY "Descrizione @40" S0 + OUTPUT ANNO CODTAB[1,4] + OUTPUT CODICE_LIBRO CODTAB[5,7] + //CHECKTYPE NORMAL + FLAGS "UR" + GROUP 1 +END + +STRING CODICE_LIBRO_PROVA 3 +BEGIN + PROMPT 20 7 "Codice libro " + HELP "Specificare il codice libro di cui si chiede la stampa; nel caso in cui non si indichi nessun codice verranno stampati tutti i libri delle ditte selezionate" + USE REG SELECT (I0<"3") && (CODTAB[1,4]==#111) + INPUT CODTAB[1,4] ANNO + INPUT CODTAB[5,7] CODICE_LIBRO_PROVA + DISPLAY "Anno " CODTAB[1,4] + DISPLAY "Codice " CODTAB[5,7] + DISPLAY "Descrizione @40" S0 + OUTPUT ANNO CODTAB[1,4] + OUTPUT CODICE_LIBRO_PROVA CODTAB[5,7] + //CHECKTYPE NORMAL + FLAGS "UR" + GROUP 1 +END + +STRING CODICE_LIB_UN 3 +BEGIN + PROMPT 20 7 "Cod.libro unico " + HELP "Specificare il codice del libro unico su cui deve essere effettuata la stampa" + USE %LBU SELECT CODTAB[1,4]==#111 + INPUT CODTAB[1,4] ANNO + INPUT CODTAB[5,7] CODICE_LIB_UN + DISPLAY "Anno " CODTAB[1,4] + DISPLAY "Codice " CODTAB[5,7] + DISPLAY "Descrizione @40" S0 + OUTPUT ANNO CODTAB[1,4] + OUTPUT CODICE_LIB_UN CODTAB[5,7] + FLAGS "UR" + CHECKTYPE REQUIRED + GROUP 2 +END + +GROUPBOX DLG_NULL 52 3 +BEGIN + PROMPT 2 9 "Stampa movimenti" +END + +DATE DA_DATA +BEGIN + PROMPT 5 10 "Dalla data " + GROUP 3 +END + +DATE A_DATA +BEGIN + PROMPT 30 10 "Alla data " + GROUP 3 +END + +LISTBOX FINO_A_MESE 10 +BEGIN + PROMPT 5 10 "Fino al mese " + FLAGS "M" + GROUP 1 +END + +LISTBOX MESE 10 +BEGIN + PROMPT 5 10 "Mese " + FLAGS "M" + GROUP 2 +END + +LISTBOX TIPO_RIEPILOGATIVO 11 +BEGIN + PROMPT 2 12 "Tipo riepilogativo " + HELP "Selezionare Del periodo/Annuale a seconda che si desideri la stampa della liquidazione periodica/annuale" + ITEM "P|Del periodo" + ITEM "A|Annuale" + GROUP 1 +END + +LISTBOX ULTIMO_MESE 10 +BEGIN + PROMPT 2 13 "Ultimo mese stampa su libro unico " + FLAGS "MD" + GROUP 2 +END + +NUMBER ULTIMA_PAGINA 4 +BEGIN + PROMPT 2 14 "Ultimo numero di pagina stampata libro unico " + FLAGS "R" + GROUP 2 +END + +STRING CODICE_LIBRO_IVA 3 +BEGIN + PROMPT 2 15 "Eventuale codice libro IVA " + HELP "Se non viene indicato nessun cod. libro IVA, vengono stampati tutti i registri delle ditte selezionate" + USE REG SELECT (I0<"3") && (S6=="") && (CODTAB[1,4]==#111) + INPUT CODTAB[1,4] ANNO + INPUT CODTAB[5,7] CODICE_LIBRO_IVA + DISPLAY "Anno " CODTAB[1,4] + DISPLAY "Codice " CODTAB[5,7] + DISPLAY "Descrizione @40" S0 + OUTPUT ANNO CODTAB[1,4] + OUTPUT CODICE_LIBRO_IVA CODTAB[5,7] + //CHECKTYPE NORMAL + FLAGS "UR" + GROUP 2 +END + +BUTTON DLG_OK 9 2 +BEGIN + PROMPT -12 -1 "" +END + +BUTTON DLG_CANCEL 9 2 +BEGIN + PROMPT -22 -1 "" +END + +ENDPAGE + +ENDMASK + diff --git a/cg/cg4401.cpp b/cg/cg4401.cpp index 822eda615..e4248bb77 100755 --- a/cg/cg4401.cpp +++ b/cg/cg4401.cpp @@ -1,120 +1,107 @@ -// cg4401.cpp -// - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include "cg4400.h" - - -TRectype& TDati_ditta::look_com(const char * cod) -{ - _comuni->zero(); - _comuni->put(COM_COM,cod); - _comuni->read(); - if (_comuni->bad()) _comuni->zero(); - return _comuni->curr(); -} - -TDati_ditta::TDati_ditta(long cod_ditta, int stampa_width) -{ - _stampa_width = stampa_width; - _codditta = cod_ditta; - _nditte = new TLocalisamfile(LF_NDITTE); - _anag = new TLocalisamfile(LF_ANAG); - _comuni = new TLocalisamfile(LF_COMUNI); -} - -TDati_ditta::~TDati_ditta() -{ - delete _anag; delete _nditte; delete _comuni; -} - -void TDati_ditta::get_dati_ditta () -{ - TString codanagr; - TString tipoa; - - _nditte->zero(); - _nditte->put(NDT_CODDITTA, _codditta); - _nditte->read(); - - if (_nditte->bad()) _nditte->zero(); - - _ragsoc = _nditte->get(NDT_RAGSOC); - codanagr = _nditte->curr().get(NDT_CODANAGR); - tipoa = _nditte->curr().get(NDT_TIPOA); - - _anag->setkey(1); - _anag->zero(); - _anag->put (ANA_TIPOA, tipoa); - _anag->put (ANA_CODANAGR, codanagr); - _anag->read(); - if (_anag->bad()) _anag->zero(); - - _cofi = _anag->get(ANA_COFI); - _paiva = _anag->get(ANA_PAIV); - _comunefis = _anag->get(ANA_COMRF); - - if (_comunefis.trim().empty()) - _comunefis = _anag->get(ANA_COMRES); - - TRectype dep = look_com (_comunefis); - - _comunefis = dep.get(COM_DENCOM); - _provfis = dep.get(COM_PROVCOM); - _cap = dep.get(COM_CAPCOM); - if (_comunefis.trim().empty()) - { - _viafis = _anag->get(ANA_INDRF); - _viafis.rtrim(); - _viafis << " " << _anag->curr().get (ANA_CIVRF); - } - else - { - _viafis = _anag->get(ANA_INDRES); - _viafis.rtrim(); - _viafis << " " << _anag->get (ANA_CIVRES); - } -} - -const char * TDati_ditta::prima_riga() -{ - //TString riga(_stampa_width); - //tmp = ""; - TString tmp(132); - get_dati_ditta(); - - /* - riga.format("Ditta %d %s Via %s %s %s %s", _codditta, - (const char *)_ragsoc,(const char *)_viafis, (const char *)_cap, - (const char *)_comunefis, (const char *)_provfis); - */ - tmp.format("Ditta %ld ", _codditta); - tmp << format("%s %s %s %s %s", - (const char *)_ragsoc,(const char *)_viafis, (const char *)_cap, - (const char *)_comunefis, (const char *)_provfis); - //tmp = riga; - return tmp; -} - -const char * TDati_ditta::seconda_riga() -{ - //TString riga(_stampa_width); - //tmp = ""; - TString tmp(132); - tmp = "Data @<"; - tmp.right_just(_stampa_width-15); - tmp.overwrite (format ("Partita iva %s @26gCodice fiscale %s", - (const char*)_paiva, (const char*)_cofi)); - //tmp = riga; - return tmp; -} - +// cg4401.cpp +// + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "cg4400.h" + +static TString256 tmp; + +TRectype& TDati_ditta::look_com(const char * cod) +{ + _comuni->zero(); + _comuni->put(COM_COM,cod); + _comuni->read(); + if (_comuni->bad()) _comuni->zero(); + return _comuni->curr(); +} + +TDati_ditta::TDati_ditta(long cod_ditta, int stampa_width) +{ + _stampa_width = stampa_width; + _codditta = cod_ditta; + _nditte = new TLocalisamfile(LF_NDITTE); + _anag = new TLocalisamfile(LF_ANAG); + _comuni = new TLocalisamfile(LF_COMUNI); +} + +TDati_ditta::~TDati_ditta() +{ + delete _anag; delete _nditte; delete _comuni; +} + +void TDati_ditta::get_dati_ditta () +{ + TString16 codanagr; + char tipoa; + + _nditte->zero(); + _nditte->put(NDT_CODDITTA, _codditta); + _nditte->read(); + + if (_nditte->bad()) _nditte->zero(); + + _ragsoc = _nditte->get(NDT_RAGSOC); + codanagr = _nditte->get(NDT_CODANAGR); + tipoa = _nditte->get_char(NDT_TIPOA); + + _anag->setkey(1); + _anag->zero(); + _anag->put (ANA_TIPOA, tipoa); + _anag->put (ANA_CODANAGR, codanagr); + _anag->read(); + if (_anag->bad()) _anag->zero(); + + _cofi = _anag->get(ANA_COFI); + _paiva = _anag->get(ANA_PAIV); + _comunefis = _anag->get(ANA_COMRF); + + if (_comunefis.trim().empty()) + _comunefis = _anag->get(ANA_COMRES); + + TRectype dep = look_com (_comunefis); + + _comunefis = dep.get(COM_DENCOM); + _provfis = dep.get(COM_PROVCOM); + _cap = dep.get(COM_CAPCOM); + if (_comunefis.trim().empty()) + { + _viafis = _anag->get(ANA_INDRF); + _viafis.rtrim(); + _viafis << " " << _anag->curr().get (ANA_CIVRF); + } + else + { + _viafis = _anag->get(ANA_INDRES); + _viafis.rtrim(); + _viafis << " " << _anag->get (ANA_CIVRES); + } +} + +const char * TDati_ditta::prima_riga() +{ + get_dati_ditta(); + tmp << "Ditta " << _codditta << ' ' << _ragsoc << " Via " << _viafis << ' ' + << _cap << ' ' << _comunefis << ' ' << _provfis; + return tmp; +} + +const char * TDati_ditta::seconda_riga() +{ + tmp = ""; + tmp = "Data @<"; + tmp.right_just(_stampa_width-15); + tmp.overwrite (format ("Partita iva %s @26gCodice fiscale %s", + (const char*)_paiva, (const char*)_cofi)); + return tmp; +} + +