#include #include #include #include #include "../ve/velib07.h" #include "vd1.h" #include "vd1600.h" //////////////// // MASCHERA //////////////// class TPrint_dettaglio_scontrini_mask : public TAutomask { protected: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); public: TPrint_dettaglio_scontrini_mask(const char tipo); virtual ~TPrint_dettaglio_scontrini_mask(); }; TPrint_dettaglio_scontrini_mask::TPrint_dettaglio_scontrini_mask(const char tipo) : TAutomask("vd1600") //NON si puo' chiamare vd1600a perche' in tal caso la... //..maschera scatta 2 volte (scatta anche quella omonima del report) { //la maschera gestisce i 2 casi di stampa giornaliera e di periodo accendendo e spegnendo i campi if (tipo == 'G') { set_caption(TR("Riepilogo scontrini giornaliero")); hide(F_ADATA); disable(F_DADATA); field(F_DADATA).set_prompt(PR("In data ")); } else { set_caption(TR("Riepilogo scontrini")); } } TPrint_dettaglio_scontrini_mask::~TPrint_dettaglio_scontrini_mask() {} bool TPrint_dettaglio_scontrini_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { switch (o.dlg()) { case F_CODCASSA: if (e == fe_init) { TConfig conf(CONFIG_WST); o.set(conf.get("NCASSA")); o.check(STARTING_CHECK); } break; case F_DADATA: if (e == fe_modify) { const TDate dadata(o.get()); set(F_ANNO, dadata.year()); } break; case F_ADATA: if (e == fe_close) { const TDate adata(o.get()); const TDate dadata = get(F_DADATA); if (adata.year() != dadata.year() || adata < dadata) return error_box(TR("La data finale deve essere maggiore od uguale a quella finale ed appartenere allo stesso anno!")); } break; case F_CODNUM: if (e == fe_init) { TConfig conf(CONFIG_DITTA, "vd"); o.set(conf.get("CODNUM")); o.check(STARTING_CHECK); } break; default: break; } return true; } //////////////////////////////////////////////////////// // REPORT //////////////////////////////////////////////////////// class TPrint_dettaglio_scontrini_rep : public TDocument_report { protected: virtual bool use_mask() {return false;} }; /////////////////////////////// // APPLICAZIONE /////////////////////////////// class TPrint_dettaglio_scontrini : public TSkeleton_application { char _tipo; protected: virtual void main_loop(); virtual bool create(); }; void TPrint_dettaglio_scontrini::main_loop() { TPrint_dettaglio_scontrini_mask mask(_tipo); while (mask.run() == K_ENTER) { TReport_book book; TString path = mask.get(F_REPORT); if (path.empty()) path = "vd1600a"; TPrint_dettaglio_scontrini_rep rep; rep.load(path); rep.mask2report(mask); book.add(rep); book.print_or_preview(); } } bool TPrint_dettaglio_scontrini::create() { if (argc()>2) _tipo = argv(2)[0]; // se c'è, prende il tipo di stampa dalla linea di comando else _tipo = 'G'; //per default stampa il giornaliero return TSkeleton_application:: create(); } int vd1600(int argc, char* argv[]) { TPrint_dettaglio_scontrini a; a.run(argc, argv, "Riepilogo dettaglio scontrini"); return 0; }