// Programma per la gestione e la stampa della dichiarazione periodica IVA #include #include #include #include #include #include #include "cg5800.h" #include "cglib03.h" class TQuadro_VT_selfirm_mask : public TAutomask { TArray_sheet * _ditte; int _year; protected: bool select_button(); void build_ditte_sheet(); public: const int get_year() const { return _year; } virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); TQuadro_VT_selfirm_mask(); ~TQuadro_VT_selfirm_mask(); }; TQuadro_VT_selfirm_mask::TQuadro_VT_selfirm_mask() : TAutomask("cg5800a") { _ditte = new TArray_sheet(-1, -1, -4, -4, TR("Selezione Ditte"), HR("Cod.@5|Ragione Sociale@50")); const TDate oggi(TODAY); _year = oggi.year(); build_ditte_sheet(); } TQuadro_VT_selfirm_mask::~TQuadro_VT_selfirm_mask() { delete _ditte; } void TQuadro_VT_selfirm_mask::build_ditte_sheet() { TTable pum("PUM"); _ditte->destroy(); TPointer_array firms; TPrefix::firms(firms); long good_company = -1; FOR_EACH_ARRAY_ITEM(firms, i, obj) { TToken_string* d = new TToken_string(63); const long codditta = firms.get_long(i); d->add(codditta); d->add(cache().get(LF_NDITTE, codditta, NDT_RAGSOC)); const long pos = _ditte->add(d); pum.put("CODTAB", _year); if (pum.read(_isgteq) == NOERR && atoi(pum.get("CODTAB").left(4)) == _year) { if (good_company <= 0) good_company = pos; } else _ditte->disable_row(pos); } if (good_company >= 0) { TToken_string& row = _ditte->row(good_company); set(F_CODDITTA, row.get(0)); set(F_RAGSOC, row.get(1)); } else { reset(F_CODDITTA); reset(F_RAGSOC); } } bool TQuadro_VT_selfirm_mask::select_button() { if (_ditte->run() == K_ENTER) { TToken_string& row = _ditte->row(_ditte->selected()); set(F_CODDITTA, row.get(0)); set(F_RAGSOC, row.get(1)); return true; } return false; } bool TQuadro_VT_selfirm_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { switch (o.dlg()) { case F_CODDITTA: if (e == fe_button) return select_button(); if (e == fe_modify) { bool found = false; TString16 ditta = o.get(); for (int i = 0; i < _ditte->items(); i++) { TToken_string& row = _ditte->row(i); if (ditta == row.get(0)) { if (_ditte->row_enabled(i)) { set(F_CODDITTA, row.get(0)); set(F_RAGSOC, row.get(1)); found = true; } else { warning_box(FR("Non sono definiti i parametri liquidazione per la ditta %ld"), atol(ditta)); o.reset(); } break; } } if (!found) o.reset(); return found; } break; case F_RAGSOC: if (e == fe_button) return select_button(); if (e == fe_modify) { bool found = false; TString8 ditta = o.get(); for (int i = 0; i < _ditte->items(); i++) { TToken_string& row = _ditte->row(i); TString ts(row.get(1)); if (ts.find(ditta) != -1) { if (_ditte->row_enabled(i)) { set(F_CODDITTA, row.get(0)); set(F_RAGSOC, row.get(1)); found = true; break; } } } if (!found) o.reset(); return found; } break; case F_YEAR: if (e == fe_modify) { _year = atoi(o.get()); build_ditte_sheet(); set(F_CODDITTA, ""); set(F_RAGSOC, ""); } break; default: break; } return true; } class TQuadro_VT_iva_form : public TForm { public: TQuadro_VT_iva_form() : TForm("cg5800a") {} }; class TQuadro_VT_iva_mask : public TAutomask { TQuadro_VT_selfirm_mask* _sf; protected: void read_iva_data(); public: void set_prospect(); void print_prospect(); virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); TQuadro_VT_iva_mask(TQuadro_VT_selfirm_mask *m) : TAutomask("cg5800b"), _sf(m) { } }; void TQuadro_VT_iva_mask::read_iva_data() { TTable pem("PEM"); real tprimp, tpriva, timp, tiva; TString16 key; key.format("%04d00", _sf->get_year()); pem.put("CODTAB", key); int err = pem.read(); if (err == NOERR) { set(F_TOTIVIMP, pem.get("R0")); set(F_TOTIVIVA, pem.get("R1")); timp += pem.get_real("R0"); tiva += pem.get_real("R1"); for (int codreg = 1;codreg < 23; codreg++) { key.format("%04d%02d", _sf->get_year(), codreg); pem.put("CODTAB", key); err = pem.read(); if (err == NOERR) { set(F_REGIMP(codreg - 1), pem.get("R0")); set(F_REGIVA(codreg - 1), pem.get("R1")); tprimp += pem.get_real("R0"); tpriva += pem.get_real("R1"); timp += pem.get_real("R0"); tiva += pem.get_real("R1"); } } set(F_TOTIMP, timp); set(F_TOTIVA, tiva); set(F_TOTPRIMP, tprimp); set(F_TOTPRIVA, tpriva); } else warning_box(FR("Risultati liquidazione non presenti o da ricalcolare per l'anno %d."), _sf->get_year()); } void TQuadro_VT_iva_mask::print_prospect() { const int anno = _sf->get_int(F_YEAR); TQuadro_VT_iva_form frm; frm.find_field('B', odd_page, FF_YEAR).set(get(F_YEAR)); frm.find_field('B', odd_page, FF_TOTIMP).set(get(F_TOTIMP)); frm.find_field('B', odd_page, FF_TOTIVA).set(get(F_TOTIVA)); frm.find_field('B', odd_page, FF_TOTPRIMP).set(get(F_TOTPRIMP)); frm.find_field('B', odd_page, FF_TOTPRIVA).set(get(F_TOTPRIVA)); frm.find_field('B', odd_page, FF_TOTIVIMP).set(get(F_TOTIVIMP)); frm.find_field('B', odd_page, FF_TOTIVIVA).set(get(F_TOTIVIVA)); for (int reg = 0; reg < 22; reg++) { frm.find_field('B', odd_page, FF_REGIMP(reg)).set(get(F_REGIMP(reg))); frm.find_field('B', odd_page, FF_REGIVA(reg)).set(get(F_REGIVA(reg))); } TRectype f(LF_NDITTE); f.put(NDT_CODDITTA, get(F_CODDITTA)); frm.cursor()->setregion(f,f); frm.print(); } bool TQuadro_VT_iva_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { switch (o.dlg()) { case DLG_PRELPR: if (e == fe_button) { TReport rep; if (rep.load("cg5800ra.rep")) { TRecordset* r = rep.recordset(); if (r != NULL) { const TVariant var = get(F_YEAR); r->set_var("#ANNO", var); } rep.print_or_preview(); } } break; default: break; } return true; } void TQuadro_VT_iva_mask::set_prospect() { CHECK(_sf, "Invalid mask"); const int anno = _sf->get_year(); const long ditta = _sf->get_long(F_CODDITTA); set(F_YEAR, anno); set(F_CODDITTA, ditta); set(F_RAGSOC, _sf->get(F_RAGSOC)); TFirm frm(ditta); TIva_round ir; ir.set_default_iva_mode(anno, false, ditta); read_iva_data(); } class TQuadro_VT_iva_app : public TSkeleton_application { protected: virtual bool create(); virtual void main_loop(); public: virtual bool firm_change_enabled() const { return false; } }; bool TQuadro_VT_iva_app::create() { open_files(LF_TAB, LF_TABCOM, LF_NDITTE, 0); return TSkeleton_application::create(); } void TQuadro_VT_iva_app::main_loop() { const long ditta = get_firm(); TQuadro_VT_selfirm_mask* m1 = new TQuadro_VT_selfirm_mask(); while (m1->run() != K_QUIT) { if (m1->get(F_CODDITTA).empty() || m1->get(F_RAGSOC).empty()) { error_box(TR("Selezionare una ditta")); continue; } set_firm(m1->get_long(F_CODDITTA)); TQuadro_VT_iva_mask* m2 = new TQuadro_VT_iva_mask(m1); m2->reset(); m2->enable_default(); m2->set_prospect(); if (m2->run() == K_ENTER) m2->print_prospect(); delete m2; } delete m1; set_firm(ditta); } int cg5800(int argc, char* argv[]) { TQuadro_VT_iva_app a; a.run(argc, argv, TR("Quadro VT")); return 0; }