////////////////////////////////////////////////////////////// // Stampa documenti ////////////////////////////////////////////////////////////// #include #include #include #include #include #include #include #include #include #include #include "../ve/velib.h" #include "si0200a.h" class TDocisamfile : public TLocalisamfile { TDocumento _doc; public: virtual TRectype& curr() const { return (TRectype&) _doc; } virtual int readat(TRecnotype nrec, word lockop = _nolock); TDocisamfile() : TLocalisamfile(LF_DOC) {} virtual ~TDocisamfile() {}; }; int TDocisamfile::readat(TRecnotype nrec, word lockop) { int err = TBaseisamfile::readat(nrec, _nolock); if (err == NOERR) err = _doc.read(TBaseisamfile::curr()); return err; } class TListe_form : public TForm { // @access Protected Member protected: public: virtual bool validate(TForm_item& fld, TToken_string& val); TListe_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = ""); virtual ~TListe_form() {} }; bool TListe_form::validate(TForm_item& fld, TToken_string& val) { return TForm::validate(fld, val); } TListe_form::TListe_form(const char* form, const char* code, int editlevel, const char* desc) : TForm(form, code, editlevel, desc) { const int num = relation()->lfile().num(); if (num == LF_DOC) relation()->lfile().set_curr(new TDocumento); } class TListe_application: public TSkeleton_application { TMask * _select_mask; TListe_form * _form; TFilename _formname; protected: virtual bool create(); virtual bool destroy(); char tipo_lista() const { return _formname[6]; } void set_limits(); virtual void main_loop(); virtual const char * extra_modules() const { return "BA"; } public: TListe_application() : _select_mask(NULL), _form(NULL) {}; virtual ~TListe_application() {}; }; inline TListe_application& app() { return (TListe_application&) main_app(); } bool TListe_application::create() { if (argc() < 3) return error_box("manca il nome del form di stampa"); open_files(LF_DOC, LF_RIGHEDOC, LF_CONDV, LF_RCONDV, LF_ANAMAG, LF_SCONTI, LF_UMART, LF_TAB, LF_TABCOM, LF_CLIFO, LF_CFVEN, LF_INDSP, LF_OCCAS, LF_PCON, LF_MOVMAG, LF_RMOVMAG, LF_MAG, LF_SVRIEP, LF_AGENTI, LF_PERCPROV, LF_ATTIV, LF_CAUSALI, 0); _formname = argv(2); _select_mask = new TMask("si0200a"); _form = new TListe_form(_formname); return TSkeleton_application::create(); } void TListe_application::set_limits() { TCursor * c = _form->cursor(); TRelation * r = c->relation(); const int headlnum = r->lfile().num(); TString16 tipo(_select_mask->get(F_TIPOCF)); TString16 cli_fr(_select_mask->get(F_CODFR)); TString16 cli_to(_select_mask->get(F_CODTO)); TRectype from(LF_CLIFO); from.put("TIPOCF", tipo); TRectype to(from); TString filter("("); if (headlnum == LF_DOC) { if (cli_fr.empty() && cli_to.empty()) { TString16 rag_fr(_select_mask->get(F_RAGSOCFR)); if (rag_fr.not_empty()) filter << format("&&(20->RAGSOC>=\"%s\")", (const char *) rag_fr); TString16 rag_to(_select_mask->get(F_RAGSOCTO)); if (rag_to.not_empty()) filter << format("&&(20->RAGSOC<=\"%s\")", (const char *) rag_to); } else { TString16 cli_fr(_select_mask->get(F_CODFR)); if (cli_fr.not_empty()) from.put("CODCF", cli_fr); TString16 rag_to(_select_mask->get(F_CODTO)); if (rag_to.not_empty()) to.put("CODCF", cli_to); c->setkey(2); } c->setregion(from, to); } else { if (cli_fr.empty() && cli_to.empty()) { TString16 rag_fr(_select_mask->get(F_RAGSOCFR)); if (rag_fr.not_empty()) filter << format("&&(20->RAGSOC>=\"%s\")", (const char *) rag_fr); TString16 rag_to(_select_mask->get(F_RAGSOCTO)); if (rag_to.not_empty()) filter << format("&&(20->RAGSOC<=\"%s\")", (const char *) rag_to); } else { TString16 cli_fr(_select_mask->get(F_CODFR)); if (cli_fr.not_empty()) from.put("CODCF", cli_fr); TString16 rag_to(_select_mask->get(F_CODTO)); if (rag_to.not_empty()) to.put("CODCF", cli_to); } } if (filter != "(") filter << "&&"; filter << format("(ANNO==%d)", _select_mask->get_int(F_ANNO)); filter << format("&&(PROVV==\"%c\")", _select_mask->get(F_PROVV)[0]); TSheet_field & s = _select_mask->sfield(F_SHEETNUMS); const int rows = s.items(); if (rows > 0) { TString sw, e1, e2; for (int j=0; jSTATO==\"%c\")",c); // Se k vale 2 o piu' significa ke gli stati prec erano != "" no!? if (k == 1) e1 << "&&("; else e1 << "||"; e1 << e2; } if (e2.not_empty()) e1 << ")"; e1 << ")"; // Piazza la parentesi finale if (j == 0) filter << "&&("; else filter << "||"; filter << e1; } filter << ")"; // Parentesi finale } TDate data_fr(_select_mask->get(F_DA_DATADOC)); if (data_fr.ok()) filter << format("&&(ANSI(33->DATADOC)>=\"%s\")", (const char *) data_fr.string(ANSI)); TDate data_to(_select_mask->get(F_A_DATADOC)); if (data_to.ok()) filter << format("&&(ANSI(33->DATADOC)<=\"%s\")", (const char *) data_to.string(ANSI)); TString80 art_fr(_select_mask->get(F_SERVFR)); if (art_fr.not_empty()) filter << format("&&(34->CODARTMAG>=\"%s\")", (const char *) art_fr); TString80 art_to(_select_mask->get(F_SERVTO)); if (art_to.not_empty()) filter << format("&&(34->CODARTMAG<=\"%s\")", (const char *) art_to); filter << ")"; c->setfilter(filter, TRUE); } bool TListe_application::destroy() { delete _select_mask; delete _form; return TApplication::destroy(); } void TListe_application::main_loop() { while (_select_mask->run() != K_ESC) { set_limits(); _form->print(); } } // Do all the work! int si0200(int argc, char* argv[]) { TListe_application a; a.run(argc, argv, "Lista documenti"); return (0); }