diff --git a/src/ca/ca2100.cpp b/src/ca/ca2100.cpp index feb491c68..9ccc1082e 100755 --- a/src/ca/ca2100.cpp +++ b/src/ca/ca2100.cpp @@ -1025,7 +1025,7 @@ bool TMovanal_msk::row2imp(int r, TImporto& imp) const return !imp.is_zero(); } -const TToken_string& TMovanal_msk::rec2key(const TRectype& rec) const +const TToken_string& TMovanal_msk::rec2key(const TRectype& rec) const //qui { TToken_string& key = get_tmp_string(); key = get(F_TIPO); @@ -1127,7 +1127,6 @@ void TMovanal_msk::aggiorna_saldo_riga(int r) sld += TImporto('D', dare); } } - sld.normalize(); set(F_DARE, sld.sezione() == 'D' ? sld.valore() : ZERO); set(F_AVERE, sld.sezione() == 'A' ? sld.valore() : ZERO); diff --git a/src/ca/ca2300.cpp b/src/ca/ca2300.cpp index 027f480e4..58a8e3c89 100755 --- a/src/ca/ca2300.cpp +++ b/src/ca/ca2300.cpp @@ -50,11 +50,8 @@ bool TRic_saldi_msk::on_field_event(TOperable_field& o, TField_event e, long jol const long recset_items = recset.items(); TProgind pi(recset_items, "Ricerca movimenti che interessano l'esercizio selezionato...", true, true); - for (bool ok = recset.move_first(); ok; ok = recset.move_next()) + for (bool ok = recset.move_first(); pi.addstatus(1) && ok; ok = recset.move_next()) { - if (!pi.addstatus(1)) - break; - const TDate curr_date = recset.get(MOVANA_DATACOMP).as_date(); const TDate fcomp_date = recset.get(MOVANA_DATAFCOMP).as_date(); diff --git a/src/ca/ca3100.cpp b/src/ca/ca3100.cpp index 9febd1644..d7a577c39 100755 --- a/src/ca/ca3100.cpp +++ b/src/ca/ca3100.cpp @@ -1,8 +1,11 @@ #include #include #include -#include +#include +#include "commesse.h" +#include "cdc.h" +#include "fasi.h" #include "movana.h" #include "rmovana.h" @@ -19,121 +22,63 @@ class TPrint_movimenti_ca_mask : public TAnal_report_mask { protected: bool on_field_event(TOperable_field& o, TField_event e, long jolly); - const TString& get_report_class() const; - bool test_compatible_report(); void create_page2(); int create_page2_sheet(int lf, int& y, short& dlg, bool required); + public: - TPrint_movimenti_ca_mask(); + virtual const TString & get_report_class() const; + TPrint_movimenti_ca_mask(); virtual ~TPrint_movimenti_ca_mask() {} }; -const TString& TPrint_movimenti_ca_mask::get_report_class() const +const TString & TPrint_movimenti_ca_mask::get_report_class() const { - TString& classe = get_tmp_string(); - classe = "ca3100"; - const int stp = get_int(F_TIPOSTAMPA); - classe << (stp == 1 ? 'a' : 'b'); // tipo di report da usare - return classe; -} + TString classe = TAnal_report_mask::get_report_class(); + const int stp = get_int(F_TIPOSTAMPA); -bool TPrint_movimenti_ca_mask::test_compatible_report() -{ - TFilename lib = get_report_class(); - const TString& name = get(F_REPORT); - bool ok = name.not_empty(); - if (ok) - { - TReport rep; - ok = rep.load(name); - if (ok) - { - const TString& classe = rep.get_class(); - ok = classe == lib; - } - } - if (!ok) - { - set(F_REPORT, lib); - lib.ext("rep"); - ok = lib.custom_path(); - } - return ok; + classe.cut(6); + classe << (stp == 1 ? 'a' : 'b'); // tipo di report da usare + return get_tmp_string() = classe; } bool TPrint_movimenti_ca_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { switch (o.dlg()) { - case DLG_PRINT: - if (e == fe_button) - { - main_app().print(); - return false; - } - break; - case DLG_PREVIEW: - if (e == fe_button) - { - main_app().preview(); - return false; - } - break; - case F_TIPOSTAMPA: - if (e == fe_init || e == fe_modify) - { - test_compatible_report(); //in base al tipo stampa setta i report compatibili - } - break; - case F_REPORT: - if (e == fe_button) - { - const TString8 lib = get_report_class(); - TFilename path = o.get(); - if (select_custom_file(path, "rep", lib)) - { - path = path.name(); - path.ext(""); - o.set(path); - } - } else - if (e == fe_close) - { - if (!test_compatible_report()) - return error_box(TR("Impossibile trovare un report compatibile")); - } - break; - case F_DATAINI: - case F_DATAFIN: - if (e == fe_close) - { - const TString& anno = get(F_ANNO); - if (anno.not_empty()) //se l'anno esercizio esiste... + case F_TIPOSTAMPA: + if (e == fe_modify || e == fe_init) + set_report_class(); + break; + case F_DATAINI: + case F_DATAFIN: + if (e == fe_close) { - const TRectype& esc = cache().get("ESC", anno); - const TDate datainiesc = esc.get("D0"); - const TDate datafinesc = esc.get("D1"); - if (o.empty()) + const TString& anno = get(F_ANNO); + if (anno.not_empty()) //se l'anno esercizio esiste... { - const TDate dataesc = o.dlg() == F_DATAINI ? datainiesc : datafinesc; - o.set(dataesc.string()); - } - else - { - const TDate d = o.get(); - if (d < datainiesc || d > datafinesc) - return error_box(TR("La data deve essere compresa nell'esercizio selezionato")); + const TRectype& esc = cache().get("ESC", anno); + const TDate datainiesc = esc.get("D0"); + const TDate datafinesc = esc.get("D1"); + if (o.empty()) + { + const TDate dataesc = o.dlg() == F_DATAINI ? datainiesc : datafinesc; + o.set(dataesc.string()); + } + else + { + const TDate d = o.get(); + if (d < datainiesc || d > datafinesc) + return error_box(TR("La data deve essere compresa nell'esercizio selezionato")); + } } } - } - break; - - default: break; + break; + default: + break; } return true; } - TPrint_movimenti_ca_mask::TPrint_movimenti_ca_mask() :TAnal_report_mask("ca3100") { @@ -146,7 +91,6 @@ TPrint_movimenti_ca_mask::TPrint_movimenti_ca_mask() create_sheet(F_RIGHE); } - /////////////////////////////////////////////////////////// // RECORDSET /////////////////////////////////////////////////////////// @@ -158,12 +102,12 @@ class TPrint_movimenti_ca_recordset : public TISAM_recordset char _tipomov; long _danumreg, _anumreg; TString4 _dacaus, _acaus; - TString _codcosto, _codcms, _codfas; + TString _codcosto, _codcms, _codfas, _contsep; protected: + const TVariant& get(const char* column_name) const; static bool mov_filter(const TRelation* rel); bool valid_record(const TRelation& rel) const; - virtual void set_custom_filter(TCursor& cur) const; public: @@ -171,28 +115,33 @@ public: TPrint_movimenti_ca_recordset(const TString& sql) : TISAM_recordset(sql) { } }; -static const TPrint_movimenti_ca_recordset* myself = NULL; +static const TPrint_movimenti_ca_recordset* myself = nullptr; //metodo per riconoscere se il record corrente soddisfa i filtri della maschera...strafighissimo! bool TPrint_movimenti_ca_recordset::valid_record(const TRelation& rel) const { //prima controlla la testata... const TRectype& mov = rel.curr(LF_MOVANA); + const TRectype& rmov = rel.curr(LF_RMOVANA); switch (_tipoord) { case 1: //controllo sul numreg { const long numreg = mov.get_long(MOVANA_NUMREG); - if (numreg < _danumreg || ( _anumreg >= _danumreg && numreg > _anumreg )) + const int nr = rmov.get_int(RMOVANA_NUMRIG); + + if (nr > 1) + int i = 1; + if (!between(numreg, _danumreg, _anumreg)) return false; } break; case 2: //controllo sulle date { - const char* datefld = _anno > 0 ? MOVANA_DATACOMP : MOVANA_DATAREG; - const TDate data = mov.get(datefld); - if (data < _dadata || ( _adata.ok() && data > _adata )) + const TDate data = mov.get(_anno > 0 ? MOVANA_DATACOMP : MOVANA_DATAREG); + + if (!data.between(_dadata, _adata)) return false; } break; @@ -213,32 +162,36 @@ bool TPrint_movimenti_ca_recordset::valid_record(const TRelation& rel) const if (tipomov != _tipomov) return false; } - //..poi le righe (devono comparire solo le righe con cdc/cms/fsc che appaiono nello sheet) - const TRectype& rmov = rel.curr(LF_RMOVANA); - - if (_codcosto.not_empty()) - { - const TString& cos = rmov.get(RMOVANA_CODCCOSTO); - if (!cos.starts_with(_codcosto)) + if (_codcosto.full() && !rmov.get(RMOVANA_CODCCOSTO).starts_with(_codcosto)) return false; - } - if (_codcms.not_empty()) - { - const TString& cms = rmov.get(RMOVANA_CODCMS); - if (!cms.starts_with(_codcms)) + if (_codcms.full() && !rmov.get(RMOVANA_CODCMS).starts_with(_codcms)) return false; - } - if (_codfas.not_empty()) - { - const TString& fas = rmov.get(RMOVANA_CODFASE); - if (!fas.starts_with(_codfas)) + if (_codfas.full() && !rmov.get(RMOVANA_CODFASE).starts_with(_codfas)) return false; - } - + if (_contsep.full() && _contsep != mov.get(MOVANA_CONTSEP)) + return false; return true; } +const TVariant& TPrint_movimenti_ca_recordset::get(const char* column_name) const +{ + const TFixed_string fld(column_name); + + if (fld == "#COSTO") + return get_tmp_var() = _codcosto; + else + if (fld == "#COMMESSA") + return get_tmp_var() = _codcms; + else + if (fld == "#FASE") + return get_tmp_var() = _codfas; + else + if (fld == "#CONTSEP") + return get_tmp_var() = _contsep; + return TISAM_recordset::get(column_name); +} + bool TPrint_movimenti_ca_recordset::mov_filter(const TRelation* rel) { return myself->valid_record(*rel); @@ -286,10 +239,9 @@ void TPrint_movimenti_ca_recordset::set_filter(const TPrint_movimenti_ca_mask& m _acaus = msk.get(F_CAUSALEFIN); _tipomov = msk.get(F_TIPOMOV)[0]; + _contsep = msk.get(F_CONTSEP); } - - //////////////////////////////////////////////////////// // REPORT //////////////////////////////////////////////////////// @@ -302,6 +254,8 @@ class TPrint_movimenti_ca_rep : public TAnal_report protected: virtual bool set_recordset(const TString& sql); virtual bool get_usr_val(const TString& name, TVariant& var) const; + virtual const char * get_excel_header_section() { return get_class() == "ca3100a" ? "H0|H1|H2" : "H0|H2|H3"; } + virtual void set_dbase_fixed_fields(bool on = true); public: void set_filter(const TPrint_movimenti_ca_mask& msk, int cms_row); @@ -314,26 +268,30 @@ bool TPrint_movimenti_ca_rep::get_usr_val(const TString& name, TVariant& var) co var.set(_anno); return true; } - if (name == "#DADATA") - { - var.set(_dadata); - return true; - } - if (name == "#ADATA") - { - var.set(_adata); - return true; - } - if (name == "#DANUMREG") - { - var.set(_danumreg); - return true; - } - if (name == "#ANUMREG") - { - var.set(_anumreg); - return true; - } + else + if (name == "#DADATA") + { + var.set(_dadata); + return true; + } + else + if (name == "#ADATA") + { + var.set(_adata); + return true; + } + else + if (name == "#DANUMREG") + { + var.set(_danumreg); + return true; + } + else + if (name == "#ANUMREG") + { + var.set(_anumreg); + return true; + } return TAnal_report::get_usr_val(name, var); } @@ -343,6 +301,12 @@ bool TPrint_movimenti_ca_rep::set_recordset(const TString& sql) return TReport::set_recordset(rs); } +void TPrint_movimenti_ca_rep::set_dbase_fixed_fields(bool on) +{ + field("B1.201")->show(on); + field("B1.202")->show(on); +} + void TPrint_movimenti_ca_rep::set_filter(const TPrint_movimenti_ca_mask& msk, int cms_row) { _anno = msk.get_int(F_ANNO); @@ -359,64 +323,93 @@ void TPrint_movimenti_ca_rep::set_filter(const TPrint_movimenti_ca_mask& msk, in //////////////////////////////////////////////////////// // APPLICAZIONE //////////////////////////////////////////////////////// -class TPrint_movimenti_ca : public TSkeleton_application +class TPrint_movimenti_ca : public TReport_application { - TPrint_movimenti_ca_mask* _mask; + TPrint_movimenti_ca_mask * _mask; + TPrint_movimenti_ca_rep * _rep; protected: virtual const char * extra_modules() const {return "cm";} //funziona anche con autorizzazione CM + virtual TReport & get_report(const TAutomask & m); + virtual TTrec * get_dbase_recdesc(TReport & rep, const TAutomask & mask); + virtual TAutomask & get_mask(); + virtual void execute_print(TReport_book & book, TAutomask & mask, TReport & rep, export_type type = _export_printer); + virtual const char * output_name(const TAutomask & mask, const TReport & rep) const { return "lmov"; } + // @cmember Distruzione dei dati dell'utente + virtual bool user_destroy(); - void print_or_preview(const bool stampa); - virtual void print(); - virtual void preview(); - - virtual void main_loop(); +public: + TPrint_movimenti_ca() : _mask(nullptr), _rep(nullptr) {} + ~TPrint_movimenti_ca() {} }; - -void TPrint_movimenti_ca::print_or_preview(const bool stampa) +TReport & TPrint_movimenti_ca::get_report(const TAutomask & m) { - //costruzione della query x il report in base ai parametri della maschera - TSheet_field& sheet = _mask->sfield(F_RIGHE); - const int n_righe_sheet = sheet.items(); - //se lo sheet č vuoto aggiunge una riga vuota - if (n_righe_sheet == 0) - sheet.insert(); - - //report e book - TReport_book book; //book dei report - - TPrint_movimenti_ca_rep rep; - rep.load(_mask->get(F_REPORT)); - - FOR_EACH_SHEET_ROW(sheet, r, row) - { - rep.set_filter(*_mask, r); - book.add(rep); - } - - if (stampa) - book.print(); //stampa il book dei report - else - book.preview(); //anteprima il book dei report + if (_rep == nullptr) + _rep = new TPrint_movimenti_ca_rep; + _rep->load(_mask->get(DLG_REPORT)); + return * _rep; } -void TPrint_movimenti_ca::print() +TTrec * TPrint_movimenti_ca::get_dbase_recdesc(TReport & rep, const TAutomask & mask) { - print_or_preview(true); + TTrec * desc = new TTrec; + TToken_string def; + TRectype cms(LF_COMMESSE); + TRectype fasi(LF_FASI); + TRectype cdc(LF_CDC); + TRectype rmovana(LF_RMOVANA); + TRectype movana(LF_MOVANA); + const int tipostampa = mask.get_int(F_TIPOSTAMPA); + + desc->add_fielddef(rmovana.rec_des(), RMOVANA_NUMRIG); + desc->add_fielddef(cdc.rec_des(), CDC_CODCOSTO); + desc->add_fielddef(cms.rec_des(), COMMESSE_CODCMS); + desc->add_fielddef(fasi.rec_des(), FASI_CODFASE); + desc->add_fielddef(rmovana.rec_des(), RMOVANA_CODCONTO); + desc->add_fielddef(rmovana.rec_des(), RMOVANA_DESCR); + desc->add_fielddef(movana.rec_des(), MOVANA_TIPOMOV); + desc->add_fielddef("DARE", _realfld, 18, 2); + desc->add_fielddef("AVERE", _realfld, 18, 2); + desc->add_fielddef(movana.rec_des(), MOVANA_NUMREG); + desc->add_fielddef(movana.rec_des(), MOVANA_CONTSEP); + + TToken_string keydef(MOVANA_NUMREG, '+'); + + keydef.add(RMOVANA_NUMRIG); + + desc->add_keydef(keydef, true); + return desc; } -void TPrint_movimenti_ca::preview() +TAutomask & TPrint_movimenti_ca::get_mask() { - print_or_preview(false); + if (_mask == nullptr) + _mask = new TPrint_movimenti_ca_mask; + return *_mask; } -void TPrint_movimenti_ca::main_loop() +void TPrint_movimenti_ca::execute_print(TReport_book & book, TAutomask & mask, TReport & rep, export_type type) { - _mask = new TPrint_movimenti_ca_mask; - _mask->run(); - delete _mask; - _mask = NULL; + //costruzione della query x il report in base ai parametri della maschera + TSheet_field & sheet = mask.sfield(F_RIGHE); + const int n_righe_sheet = sheet.items(); + + //se lo sheet č vuoto aggiunge una riga vuota + if (n_righe_sheet == 0) + sheet.insert(); + FOR_EACH_SHEET_ROW(sheet, r, row) + { + ((TPrint_movimenti_ca_rep &) rep).set_filter((TPrint_movimenti_ca_mask &) mask, r); + book.add(rep, type); + } +} + +bool TPrint_movimenti_ca::user_destroy() +{ + safe_delete(_mask); + safe_delete(_rep); + return TReport_application::user_destroy(); } int ca3100(int argc, char* argv[]) diff --git a/src/ca/ca3100.h b/src/ca/ca3100.h index 21991b612..a1f6283fb 100755 --- a/src/ca/ca3100.h +++ b/src/ca/ca3100.h @@ -14,8 +14,9 @@ #define F_NUMEROFIN 210 #define F_CAUSALEINI 211 #define F_CAUSALEFIN 212 -#define F_REPORT 213 #define F_TIPOMOV 214 +#define F_CONTSEP 215 +#define F_DESCONTSEP 216 //sheet di pagina 2 #define F_RIGHE 400 diff --git a/src/ca/ca3100.uml b/src/ca/ca3100.uml index e56fd336e..81d0a6aa9 100755 --- a/src/ca/ca3100.uml +++ b/src/ca/ca3100.uml @@ -1,25 +1,15 @@ #include "ca3100.h" #include "camask.h" +#define ALL_EXPORT +#define CLASS_NAME "ca3100a" + TOOLBAR "topbar" 0 0 0 2 #include ENDPAGE -TOOLBAR "bottombar" 0 -2 0 1 - -STRING F_REPORT 256 66 -BEGIN - PROMPT 1 -2 "Report " - FLAGS "B" - CHECKTYPE REQUIRED -END - -STRING DLG_PROFILE 50 -BEGIN - PROMPT 1 -1 "Profilo " - PSELECT -END - +TOOLBAR "bottombar" 0 -3 0 1 +#include ENDPAGE PAGE "Parametri stampa" 0 0 0 2 @@ -151,9 +141,35 @@ BEGIN ITEM "T|Trasferito" END +STRING F_CONTSEP 6 +BEGIN + PROMPT 1 10 "Cont. separata " + USE &NPENT + INPUT CODTAB F_CONTSEP + DISPLAY "Codice@6" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_CONTSEP CODTAB + OUTPUT F_DESCONTSEP S0 + CHECKTYPE NORMAL + FIELD CONTSEP + MODULE NP +END + +STRING F_DESCONTSEP 50 48 +BEGIN + PROMPT 26 10 "" + USE &NPENT KEY 2 + INPUT S0 F_DESCONTSEP + DISPLAY "Descrizione@50" S0 + DISPLAY "Codice@6" CODTAB + COPY OUTPUT F_CONTSEP + CHECKTYPE NORMAL + MODULE NP +END + SPREADSHEET F_RIGHE -1 -1 BEGIN - PROMPT 1 12 "Selezione su CdC / Commesse / Fasi" + PROMPT 0 12 "Selezione su CdC / Commesse / Fasi" ITEM "Cdc1" ITEM "Cdc2" ITEM "Cdc3" diff --git a/src/ca/ca3100a.rep b/src/ca/ca3100a.rep index 519db804b..7ace1b3a3 100755 --- a/src/ca/ca3100a.rep +++ b/src/ca/ca3100a.rep @@ -1,8 +1,8 @@ - + Movimenti CA per numero registrazione -
+ -
+ -
+ -
-
+