#include #include #include #include #include #include "ps0872.h" #include "ps0872200a.h" class TReportPs08722 : public TReport { protected: virtual bool get_usr_val(const TString& name, TVariant& var) const; }; class TMaskPs08722 : public TAutomask { TCursor_sheet * _sht; TCursor * _cur; TReport _rep; bool _select_changed; protected: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); void update_sheet(); public: TCursor_sheet & sheet() const { return *_sht;} TMaskPs08722(); virtual ~TMaskPs08722(); }; TMaskPs08722::TMaskPs08722() : TAutomask("ps0872200a"), _sht(NULL), _cur(NULL) { // crea relazioni, cursori e cursor_sheets update_sheet(); ((TButton_field&) field(DLG_SELECT)).set_exit_key(0); _select_changed = false; } TMaskPs08722::~TMaskPs08722() { if (_sht != NULL) delete _sht; } bool TMaskPs08722::on_field_event(TOperable_field& o, TField_event e, long jolly) { const int id = o.dlg(); switch (id) { case F_NUM: case F_DACLI: case F_DAL: if (e == fe_modify) _select_changed = true; break; case F_ACLI: if (e == fe_close) { const long dacli = o.mask().get_long(F_DACLI); const long acli = atol(o.get()); if (acli > 0 && acli < dacli) return error_box("Inserire un codice cliente maggiore o uguale a quello iniziale"); } else if (e == fe_modify) _select_changed = true; break; case F_AL: if (e == fe_close) { const TDate dal(o.mask().get_date(F_DAL)); const TDate al(o.get()); if (al.ok() && al < dal) return error_box("Inserire una data maggiore o uguale alla data iniziale"); } else if (e == fe_modify) _select_changed = true; break; case F_REPORT: if (e == fe_modify) enable(DLG_SELECT, _sht != NULL && o.get() == "StampaSchedProd"); break; case DLG_SELECT: if (e == fe_button) { if (_select_changed) update_sheet(); _select_changed = false; _sht->run(); } break; default: break; } return TRUE; } void TMaskPs08722::update_sheet() { if (_sht != NULL) { delete _sht; _sht = NULL; } else { TFilename name("StampaSchedProd.rep"); name.custom_path(); _rep.load(name); } TISAM_recordset * r = (TISAM_recordset *) _rep.recordset(); if (r != NULL) { TVariant var; var = get(F_NUM); r->set_var("#NUM", var); var = get(F_DACLI); r->set_var("#DACLI", var); var = get(F_ACLI); r->set_var("#ACLI", var); var = get_date(F_DAL); if (!var.as_date().ok()) var = botime; r->set_var("#DAL", var); var = get_date(F_AL); if (!var.as_date().ok()) var = eotime; r->set_var("#AL", var); var = "F"; r->set_var("#F", var); } _select_changed = false; _sht = new TCursor_sheet(r->cursor(), " |33->DATADOC|NDOC|CODARTMAG|20->RAGSOC", "Selezione clienti per codice", "@1|Data@10|Numero|Articolo@20|Ragione Sociale@50",0,1); _sht->check(-1); } class TStampaProduzionePs0872 : public TSkeleton_application { TMaskPs08722 * _mask; virtual bool check_autorization() const {return false;} virtual const char * extra_modules() const {return "ve";} protected: virtual void main_loop(); virtual bool create(); public: const TMaskPs08722 & mask() const {return *_mask;} virtual ~TStampaProduzionePs0872(); }; void TStampaProduzionePs0872::main_loop() { while (_mask->run() == K_ENTER) { TReport_book book; TReportPs08722 rep; TFilename report_name(_mask->get(F_REPORT)); report_name.ext("rep"); report_name.custom_path(); if (rep.load(report_name)) { TRecordset * r = rep.recordset(); if (r != NULL) { TVariant var; var = _mask->get(F_NUM); r->set_var("#NUM", var); var = _mask->get(F_DACLI); r->set_var("#DACLI", var); var = _mask->get(F_ACLI); r->set_var("#ACLI", var); var = _mask->get_date(F_DAL); if (!var.as_date().ok()) var = botime; r->set_var("#DAL", var); var = _mask->get_date(F_AL); if (!var.as_date().ok()) var = eotime; r->set_var("#AL", var); var = "F"; r->set_var("#F", var); } book.add(rep); if (book.pages() > 0) book.print_or_preview(); } } } bool TStampaProduzionePs0872::create() { _mask = new TMaskPs08722; return TSkeleton_application:: create(); } TStampaProduzionePs0872::~TStampaProduzionePs0872() { delete _mask; } TStampaProduzionePs0872 & app() { return (TStampaProduzionePs0872&) main_app();} bool TReportPs08722::get_usr_val(const TString& name, TVariant& var) const { if (name == "#TO_PRINT") { TISAM_recordset * r = (TISAM_recordset *) recordset(); const long pos = r->cursor()->pos(); var = (long) (app().mask().sheet().checked(pos) ? 1 : 0); return true; } return TReport::get_usr_val(name, var); } int ps0872200(int argc, char* argv[]) { TStampaProduzionePs0872 a; a.run(argc, argv, "Stampa Produzione RealPlast"); return 0; }