#include #include #include #include #include #include "celib.h" #include "ce3400.h" #include "ce3600a.h" #include "../cg/cglib01.h" #include "ammce.h" #include "ammmv.h" #include "cespi.h" #include "movce.h" /////////////////////////////////////////////////////////// // Main Form /////////////////////////////////////////////////////////// class TLM_form : public TCespi_list_form { TCursor* _cur; int _tiposit; protected: virtual TRelation* relation() const { return _cur->relation(); } virtual TCursor* cursor() const { return _cur; } virtual bool validate(TForm_item& fld, TToken_string& val); public: void set_cursor(TCursor& cur) { _cur = &cur; } void set_testata(const TMask& m); TPrint_section& corpo() { return section('B', odd_page); } TLM_form(); }; void TLM_form::set_testata(const TMask& m) { TCespi_list_form::set_testata(m); _tiposit = m.get_int(F_SITUAZIONE); } bool TLM_form::validate(TForm_item& fld, TToken_string& val) { const char* cmd = val.get(0); if (xvt_str_compare_ignoring_case(cmd, "_RIVGEN") == 0) { const TRectype& mov = relation()->curr(); fld.set(mov.get(_tiposit == 1 ? MOVCE_RIVGF : MOVCE_RIVGC)); return TRUE; } return TCespi_list_form::validate(fld, val); } TLM_form::TLM_form() : TCespi_list_form("ce3600a") { } /////////////////////////////////////////////////////////// // Main Mask /////////////////////////////////////////////////////////// class TLM_mask : public TAutomask { protected: virtual bool on_field_event(TOperable_field& f, TField_event e, long jolly); public: TLM_mask() : TAutomask("ce3600a") { } }; bool TLM_mask::on_field_event(TOperable_field& f, TField_event e, long jolly) { bool ok = TRUE; switch (f.dlg()) { case F_CODCAT: case F_D_CODCAT: { TDitta_cespiti& dc = ditta_cespiti(); ok = dc.on_category_event(f, e, jolly); } break; default: break; } return ok; } /////////////////////////////////////////////////////////// // Main Application /////////////////////////////////////////////////////////// class TLM_app : public TSkeleton_application { TLM_form* _form; protected: virtual void main_loop(); public: void print_mov(); }; void TLM_app::print_mov() { TPrint_section& corpo = _form->corpo(); _form->print_section(corpo); } void TLM_app::main_loop() { TLM_mask m; ditta_cespiti().init_mask(m); while (m.run() != K_QUIT) { const int ese = m.get_int(F_ESERCIZIO); const int gruppo = m.get_int(F_GRUPPO); const TString4 specie = m.get(F_SPECIE); ditta_cespiti().set_attivita(ese, gruppo, specie); const int tiposit = m.get_int(F_SITUAZIONE); const int order = m.get_int(F_ORDINAMENTO); const int codcat = m.get_int(F_CODCAT); const TString& codmov = m.get(F_TIPOMOV); const TString& codimp = m.get(F_CODIMP); TLM_form form; _form = &form; TRelation rel(LF_MOVCE); TString expr; expr << "IDCESPITE==IDCESPITE"; rel.add(LF_CESPI, expr); expr << "|IDMOV==IDMOV|TPAMM==" << tiposit; rel.add(LF_MOVAM, expr); const TRectype& cespi = rel.curr(LF_CESPI); TDate fromdate(m.get(F_FROM_DATE)); TDate todate(m.get(F_TO_DATE)); TString filter; if (fromdate.ok()) filter << "(ANSI(" << MOVCE_DTMOV << ")>=\"" << fromdate.string(ANSI) << "\")"; if (todate.ok()) { if (filter.not_empty()) filter << "&&"; filter << "(ANSI(" << MOVCE_DTMOV << ")<=\"" << todate.string(ANSI) << "\")"; } if (codmov.not_empty()) { if (filter.not_empty()) filter << "&&"; filter << '(' << MOVCE_CODMOV << "==\"" << codmov << "\")"; } const char* orderby = order == 1 ? "DTMOV|IDMOV" : "IDMOV"; TSorted_cursor cur(&rel, orderby, filter); const long items = cur.items(); if (items > 0) { cur.freeze(); form.set_cursor(cur); form.set_testata(m); printer().open(); for (cur = 0L; cur.pos() < items; ++cur) { // Controllo qui la validità per non incasinare il valutatore con stringhe e numeri if (cespi.get_int(CESPI_CODCGRA) != gruppo || cespi.get(CESPI_CODSPA) != specie) continue; if (codcat > 0 && cespi.get_int(CESPI_CODCAT) != codcat) continue; if (codimp.not_empty() && cespi.get(CESPI_CODIMP) != codimp) continue; print_mov(); } printer().close(); } xvt_statbar_set(""); } } int ce3600(int argc, char* argv[]) { TLM_app app; app.run(argc, argv, TR("Lista Movimenti")); return 0; }