#include #include #include #include #include #include #include #include #include "cg1400.h" class TStampa_deleghe_IVA : public TApplication { TArray_sheet* _ditte; int _mese, _anno, _tipo; TString _azienda, _dipendenza; bool _stampa_distinte, _aggiorna_codici, _stampa_prova; protected: virtual bool create(); virtual bool destroy(); virtual bool menu(MENU_TAG); virtual void print(); int select(); bool print_deleghe(); void print_distinta(); public: TStampa_deleghe_IVA() : _ditte(NULL) {} }; bool TStampa_deleghe_IVA::create() { CHECK(_ditte == NULL, "Eh la vaca!"); _ditte = new TArray_sheet(-1, -1, 0, 0, "Selezione Deleghe da stampare" ,"@1|Cod.@5|Ragione Sociale@50|Importo@15|Azienda|Dipend."); dispatch_e_menu(BAR_ITEM(1)); return TRUE; } bool TStampa_deleghe_IVA::destroy() { delete _ditte; return TRUE; } int TStampa_deleghe_IVA::select() { { TMask m("cg1400a"); if (m.run() != K_ENTER) return 0; _azienda = m.get(F_ABI); _dipendenza = m.get(F_CAB); _mese = atoi(m.get(F_MESE)); _anno = atoi(m.get(F_ANNO)); _tipo = atoi(m.get(F_TIPO)); _stampa_prova = m.get_bool(F_PROVA); _stampa_distinte = m.get_bool(F_DISTINTA); _aggiorna_codici = m.get_bool(F_AGGIORNA); TDate d(m.get(F_DATA)); printer().setdate(d); } TLocalisamfile nditte(LF_NDITTE); TTable deleghe("%DEL"); TString chiave(16); TToken_string d(80); _ditte->destroy(); for (nditte.first(); !nditte.eof(); nditte.next()) { const long dit = atol(nditte.get("CODDITTA")); chiave = format("%05ld", dit); chiave << format("%04d%02d%d", _anno, _mese, _tipo); deleghe.put("CODTAB", chiave); if (deleghe.read() == NOERR && deleghe.get_bool("B0") == FALSE) // Da stampare { d = " "; // Selezione d.add(chiave.left(5)); // Codice ditta d.add(nditte.get("RAGSOC")); // Ragione sociale real importo(deleghe.get("R0")); d.add(importo.string(".")); // Importo const long az = atol(deleghe.get("I0")); d.add(format("%05ld", az)); // Azienda const long di = atol(deleghe.get("I1")); d.add(format("%05ld", di)); // Dipendenza _ditte->add(d); } } if (_ditte->items() > 0) { const bool ok = _ditte->run() == K_ENTER; if (ok) enable_menu_item(M_FILE_PRINT); } else { warning_box("Nessuna ditta ha deleghe da stampare"); return 2; } return 1; } bool TStampa_deleghe_IVA::menu(MENU_TAG) { int s = 0; while ((s = select()) != 0) if (s == 1) print(); return FALSE; } void TStampa_deleghe_IVA::print() { print_deleghe(); if (_stampa_distinte) { bool ok = yesno_box("Inserire il modulo continuo nella stampante " "e confermare la stampa della distinta"); if (ok) print_distinta(); } } void TStampa_deleghe_IVA::print_distinta() { enum Tabulatori { TAB_DITTA = 0, TAB_SEDE = 52, TAB_PROV = 78, TAB_IMPORTO = 82, TAB_NOTE = 100 }; printer().open(); TLocalisamfile ditte(LF_NDITTE); TRectype& ditta = ditte.curr(); TLocalisamfile anagrafiche(LF_ANAG); TRectype& anag = anagrafiche.curr(); TLocalisamfile comuni(LF_COMUNI); TRectype& comune = comuni.curr(); TTable banche("%BAN"); TRectype& banca = banche.curr(); TString codban(16); if (_azienda.not_empty()) { codban = _azienda; codban << _dipendenza; banca.put("CODTAB", codban); banche.read(); } TPrintrow row; if (atol(_azienda)) row.put(banca.get("S0"), 0); row.put("DISTINTA DELEGHE DI VERSAMENTO", 60); row.put("Data @>", 110); row.put("Pag.@#", 124); printer().setheaderline(0, row); row.reset(); if (atol(_dipendenza)) row.put(banca.get("S1"), 0); TString t(132); t = "Dichiarazione "; switch (_tipo) { case 2 : t << "annuale : "; break; case 7 : t << "acconti IVA : "; break; default: t << "periodica : " << _mese << '-'; break; } t << _anno; row.put(t, 60); printer().setheaderline(1, row); t.fill('-', 130); row.reset(); row.put(t, 0); printer().setheaderline(2, row); printer().setheaderline(4, row); row.reset(); row.put("Ditta", TAB_DITTA); row.put("Sede" , TAB_SEDE); row.put("Importo", TAB_IMPORTO+8); row.put("Note", TAB_NOTE); printer().setheaderline(3, row); real totale; for (int i = 0; i < _ditte->items(); i++) if (_ditte->checked(i)) { const TString cod(_ditte->row(i).get(1)); ditta.put("CODDITTA", cod); ditte.read(); anag.put("TIPOA", ditta.get("TIPOA")); anag.put("CODANAGR", ditta.get("CODANAGR")); anagrafiche.read(); comune.put("STATO", anag.get("STATORF")); comune.put("COM", anag.get("COMRF")); comuni.read(); TParagraph_string dencom(comune.get("DENCOM"), 18); row.reset(); row.put(ditta.get("RAGSOC"), TAB_DITTA); row.put(dencom.get(), 52); row.put(comune.get("PROVCOM"), TAB_PROV); TString imp(_ditte->row(i).get(3)); row.put(imp, TAB_IMPORTO); printer().print(row); imp.strip("."); real importo(imp); totale += importo; const char* r; while ((r = dencom.get()) != NULL) { row.reset(); row.put(r, 52); printer().print(row); } } row.reset(); printer().print(row); row.put("@BTotale versamenti :", TAB_SEDE); row.put(totale.string("###.###.###.###"), TAB_IMPORTO); printer().print(row); printer().close(); } bool TStampa_deleghe_IVA::print_deleghe() { bool ok = printer().open(); if (!ok) return FALSE; TFilename name; name << "del" << _azienda; TForm f(name); for (int i = 0; ok && i < _ditte->items(); i++) if (_ditte->checked(i)) { const TString d(_ditte->row(i).get(1)); TRectype& delega = f.cursor()->curr(); TString chiave(16); chiave = d; chiave << format("%04d%02d%d", _anno, _mese, _tipo); delega.put("CODTAB", chiave); f.cursor()->file()->read(); const bool cera = atoi(delega.get("S7")) != 0; if (!cera) { delega.put("S7", _azienda); delega.put("S8", _dipendenza); f.cursor()->file()->rewrite(); } f.cursor()->read(); // Posiziona il cursore ok = f.print(-1); // Stampa solo il record corrente if (!ok) break; bool scrivi = _aggiorna_codici && !cera; if (!_stampa_prova) { delega.put("B0", "X"); // Stampato scrivi = TRUE; } if (!_aggiorna_codici && !cera) // Cancella codice se non richiesto { delega.put("S7", ""); delega.put("S8", ""); scrivi = TRUE; } if (scrivi) f.cursor()->file()->rewrite(); } printer().close(); return ok; } int cg1400(int argc, char* argv[]) { TStampa_deleghe_IVA a; a.run(argc, argv, "Stampa Deleghe IVA"); return 0; }