#include #include #include #include #include "velib01.h" #include "ve6200a.h" class TFatturazione_bolle_app : public TApplication { TArray _file; void open_files(int logicnum, ...); protected: // TApplication virtual bool create(); virtual bool menu(MENU_TAG mt); public: TFatturazione_bolle_app() { } virtual ~TFatturazione_bolle_app() { } }; void TFatturazione_bolle_app::open_files(int logicnum, ...) { va_list marker; va_start(marker, logicnum); while (logicnum > 0) { CHECKD(_file.objptr(logicnum) == NULL, "File gia' aperto: ", logicnum); _file.add(new TLocalisamfile(logicnum), logicnum); logicnum = va_arg(marker, int); } } bool TFatturazione_bolle_app::create() { open_files(LF_TABCOM, LF_CLIFO, LF_CFVEN, LF_DOC, LF_RIGHEDOC, 0); dispatch_e_menu(MENU_ITEM(1)); return TRUE; } bool TFatturazione_bolle_app::menu(MENU_TAG) { TMask m("ve6200a"); while (m.run() == K_ENTER) { TIndwin iw(48, "Inizializzazione ...\n ", TRUE, FALSE, 48); begin_wait(); const TDate data_elab = m.get(F_DATA_ELAB); const int anno = data_elab.year(); const long dc = m.get_long(F_CODICE_CLIFO_DA); const long ac = m.get_long(F_CODICE_CLIFO_A); const long da = m.get_long(F_CODICE_AGENTE_DA); const long aa = m.get_long(F_CODICE_AGENTE_A); const long dz = m.get_long(F_CODICE_ZONA_DA); const long az = m.get_long(F_CODICE_ZONA_A); const TDate dd = m.get(F_DATA_DOCUMENTO_DA); TString st_da = m.get(F_DATA_DOCUMENTO_A); const TDate ad = st_da.not_empty() ? (const char*)st_da : data_elab; const TString& codnum = m.get(F_CODICE_NUMERAZIONE); const long dn = m.get_long(F_NUMERO_DOCUMENTO_DA); const long an = m.get_long(F_NUMERO_DOCUMENTO_A); TFatturazione_bolle eld(m.get(F_CODICE_ELAB)); TToken_string tipidoc(24), statidoc(10); eld.tipi_validi(tipidoc); eld.stati_validi(statidoc); TLista_clienti clienti; const int tot_cli = clienti.leggi(dc, ac, da, aa, dz, az); TString msg(80); for (int c = 0; c < tot_cli && !iw.iscancelled(); c++) { const long codcli = clienti[c]; // Codice cliente in esame msg = "Elaborazione dei documenti del cliente "; msg << codcli << " ..."; iw.set_text(msg); // Messaggio sul cliente do_events(); // Attende visualizzazione TLista_documenti din, dout; // Legge tutti i documenti di input din.read('D', 'C', codcli, anno, tipidoc, statidoc, dd, ad, codnum, dn, an); if (din.items() == 0) continue; // Crea documenti di output bool ok = eld.elabora(din, dout, data_elab); if (ok) { msg << '\n' << din.items() << " documenti raggruppati in " << dout.items(); iw.set_text(msg); // Messaggio sul cliente do_events(); // Attende visualizzazione int err = dout.write(); // Scrive documenti di output if (err == NOERR) { err = din.rewrite(); // Aggiorna stato dei documenti di input if (err != NOERR) ok = error_box("Errore %d durante la scrittura dei documenti raggruppati!", err); } else ok = error_box("Errore %d durante l'aggiornamento dei documenti da raggruppare!", err); } else { ok = error_box("I documenti relativi al cliente %ld non sono stati elaborati.", codcli); } if (!ok) // In case di errore ... break; // ... termina qui l'elaborazione. } end_wait(); } return FALSE; } int ve6200 (int argc, char **argv) { TFatturazione_bolle_app a; a.run (argc, argv, "Fatturazione Bolle"); return TRUE; }