/************************************************** * File: ve61000.cpp * * Programma per il controllo degli ordini evasi * * Authors: Alessandro Bonazzi, Mattia Tollari * **************************************************/ #include #include #include #include #include #include #include "velib04.h" #include "../cg/cgsaldac.h" #include "ve61000a.h" /////////////////////////////////////////////// // MASCHERA // /////////////////////////////////////////////// class TEliminazione_documenti_mask : public TAutomask { TString_array _tipi_doc; // Array di stringhe contenente i tipi documenti da elaborare protected: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); public: // Controlla se lo stato ed il tipo del documento sono validi e rispettano la selezione bool doc_tipo_stato_ok(const TRectype& doc); // Constructor and Distructor TEliminazione_documenti_mask(): TAutomask("ve61000a") {} ~TEliminazione_documenti_mask() {} }; bool TEliminazione_documenti_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { switch (o.dlg()) { case DLG_USER: if (e == fe_button) { } break; default: break; } return true; } bool TEliminazione_documenti_mask::doc_tipo_stato_ok(const TRectype& doc) // Verifica che il tipo documento corrente esista tra i tipi previsti dalla elaborazione // differita selezionata { bool found = false; const TString4 tipo = doc.get(DOC_TIPODOC); const char stato = doc.get_char(DOC_STATO); const int items = _tipi_doc.items(); for (int i = 0; i < items && !found; i++) { TToken_string& t = _tipi_doc.row(i); const TString4 tipox(t.get(0)); const char statox = t.get(1)[0]; if (tipo == tipox && stato == statox) found = true; } return found; } ///////////////////////////////////////////// // APPLICAZIONE // ///////////////////////////////////////////// // TEliminazione_documenti // Applicazione per il controllo degli ordini evasi class TEliminazione_documenti_app : public TSkeleton_application { TEliminazione_documenti_mask* _msk; protected: // TApplication // Controlla gli ordini void check(); void fastCheck(); public: virtual bool create(); virtual bool destroy(); virtual void main_loop(); }; void TEliminazione_documenti_app::check() { // Creo la relazione alla tabella del Db TRelation rel(LF_DOC); // Definisco i due TRecType di inizio e fine per lo scorrimento TRectype recini(rel.curr()); TRectype recfin(rel.curr()); // Imposto il cursore rel.lfile().set_curr(new TDocumento); // Aggiungo dei filtri, in questo caso utilizzando la KEY 1 ho bisogno di // PROVV+ANNO // Inizio recini.put(DOC_PROVV, _msk->get(F_PROVV)); recini.put(DOC_ANNO, _msk->get(F_DA_ANNO)); // Fine recfin.put(DOC_PROVV, _msk->get(F_PROVV)); recfin.put(DOC_ANNO, _msk->get(F_A_ANNO)); // Istanzio il cursore TCursor cur(&rel, "", 1, &recini, &recfin); const long total = cur.items(); // Se esistono righe if (total > 0) { TString msg = TR("Confermare l'eliminazione di "); msg.add_plural(total, TR("documento")); if (yesno_box(msg)) { TProgress_monitor pi(total, title()); // Blocco il cursore per garantire l'integrità dei dati cur.freeze(); for (cur = 0; cur.pos() < total; ++cur) { if (!pi.add_status()) break; TDocumento& doc = (TDocumento&) cur.curr(); // Imposto il documento allo stato eliminabile doc.put(DOC_STATO, 9); doc.remove(); } } } } bool TEliminazione_documenti_app::create() { open_files(LF_TABCOM, LF_TAB, LF_DOC, LF_RIGHEDOC, LF_MOVANA, LF_RMOVANA, 0); _msk = new TEliminazione_documenti_mask(); return TSkeleton_application::create(); } bool TEliminazione_documenti_app::destroy() { if (_msk) delete _msk; return TSkeleton_application::destroy(); } void TEliminazione_documenti_app::main_loop() { while (_msk->run() == K_ENTER) check(); } int ve61000 (int argc, char **argv) { TEliminazione_documenti_app a; a.run(argc,argv, TR("Elimiazione documenti")); return true; }