From 7d60fb41e5e5c046bb099816d63075e81ee78695 Mon Sep 17 00:00:00 2001 From: guy Date: Wed, 29 Jun 2005 13:04:49 +0000 Subject: [PATCH] Patch level : 2.2 Files correlati : Ricompilazione Demo : [ ] Commento : Aggiunto riferimento al documento originale sui movimenti provenenienti da documento git-svn-id: svn://10.65.10.50/trunk@13237 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ca/ca3300.cpp | 226 ++++++++----------------------------------------- ca/calib02.cpp | 140 ++++++++++++++++++++++++++++++ ca/calib02.h | 78 +++++++++++------ ca/f107.dir | 2 +- ca/f107.trr | 6 +- ca/movana.h | 4 + 6 files changed, 241 insertions(+), 215 deletions(-) diff --git a/ca/ca3300.cpp b/ca/ca3300.cpp index e8924c995..ca3911d29 100755 --- a/ca/ca3300.cpp +++ b/ca/ca3300.cpp @@ -229,188 +229,6 @@ TPrint_bilancio_ca_mask::TPrint_bilancio_ca_mask() create_sheet(); } - -//////////////////////////////////////////////////////// -// Recordset -//////////////////////////////////////////////////////// - -class TPiano_conti_recordset : public TISAM_recordset -{ - word _tipimov; - TString _da_conto, _a_conto; - int _contolen; - TAnal_bill _bill; - TDate _dal, _al; - bool _movimentati, _nonnulli; - -protected: - bool valid_record(const TRelation& rel) const; - static bool pianoconti_filter(const TRelation* rel); - - virtual void set_custom_filter(TCursor& cursor) const; - -public: - virtual const TVariant& get(const char* column_name) const; - - void set_filter(const TMask& m, int r); - TPiano_conti_recordset(const char* sql); -}; - -const TVariant& TPiano_conti_recordset::get(const char* column_name) const -{ - if (strncmp(column_name, "SALDO:", 6) == 0) - { - TString16 sub_field = column_name+6; - const char last = sub_field.right(1)[0]; - int tipimov = 0; - switch (last) - { - case 'C': tipimov = 1; sub_field.rtrim(1); break; // Consuntivo - case 'P': - case 'V': tipimov = 6; sub_field.rtrim(1); break; // Preventivo o variazaione preventivo - default : tipimov = _tipimov; break; - } - - ((TAnal_bill&)_bill).set_conto(get(PCONANA_CODCONTO).as_string()); - const TSaldanal& s = ca_saldo(_bill, _dal, _al, tipimov); - - TVariant& var = get_tmp_var(); - if (strcmp(sub_field, "INI_DARE") == 0) - { - var = s._ini.sezione() == 'D' ? s._ini.valore() : ZERO; - } else - if (strcmp(sub_field, "INI_AVERE") == 0) - { - var = s._ini.sezione() == 'A' ? s._ini.valore() : ZERO; - } else - if (strcmp(sub_field, "MOV_DARE") == 0) - { - var = s._dare.valore(); - } else - if (strcmp(sub_field, "MOV_AVERE") == 0) - { - var = s._avere.valore(); - } else - if (strcmp(sub_field, "FIN_DARE") == 0) - { - var = s._fin.sezione() == 'D' ? s._fin.valore() : ZERO; - } else - if (strcmp(sub_field, "FIN_AVERE") == 0) - { - var = s._fin.sezione() == 'A' ? s._fin.valore() : ZERO; - } - return var; - } - if (strcmp(column_name, "#CMSCDC") == 0) - { - const TMultilevel_code_info& info = ca_multilevel_code_info(LF_FASI); - switch (info.parent()) - { - case LF_CDC : column_name = "#COSTO"; break; - case LF_COMMESSE: column_name = "#COMMESSA"; break; - default : return NULL_VARIANT; - } - } - if (strcmp(column_name, "#COSTO") == 0) - { - TVariant& var = get_tmp_var(); - var = _bill.costo(); - return var; - } - if (strcmp(column_name, "#COMMESSA") == 0) - { - TVariant& var = get_tmp_var(); - var = _bill.commessa(); - return var; - } - if (strcmp(column_name, "#FASE") == 0) - { - TVariant& var = get_tmp_var(); - var = _bill.fase(); - return var; - } - - return TISAM_recordset::get(column_name); -} - -bool TPiano_conti_recordset::valid_record(const TRelation& rel) const -{ - const TString& conto = rel.curr().get(PCONANA_CODCONTO); - if (conto.len() < _contolen) - return false; - - if (_movimentati || _nonnulli) - { - ((TAnal_bill&)_bill).set_conto(conto); - const TSaldanal& s = ca_saldo(_bill, _dal, _al, _tipimov); - if (_movimentati && !s._movimentato) - return false; - if (_nonnulli && s._ini.is_zero() && s._dare.is_zero() && s._avere.is_zero()) - return false; - } - return true; -} - -static const TPiano_conti_recordset* _current_recset = NULL; - -bool TPiano_conti_recordset::pianoconti_filter(const TRelation* rel) -{ return _current_recset->valid_record(*rel); } - -void TPiano_conti_recordset::set_custom_filter(TCursor& cursor) const -{ - TRectype darec = cursor.curr(); - TRectype arec = darec; - - darec.zero(); darec.put(PCONANA_CODCONTO, _da_conto); - arec.zero(); arec.put(PCONANA_CODCONTO, _a_conto); - cursor.setregion(darec, arec); - - _current_recset = this; - cursor.set_filterfunction(pianoconti_filter); -} - -void TPiano_conti_recordset::set_filter(const TMask& m, int r) -{ - _contolen = 0; - const TMultilevel_code_info& info = ca_multilevel_code_info(LF_PCONANA); - for (int l = info.levels()-1; l >= 0; l--) - _contolen += info.len(l); - - for (int i = 0; m.id2pos(F_PDC1_INI+i) > 0; i++) - { - _da_conto << m.get(F_PDC1_INI+i); - _a_conto << m.get(F_PDC1_FIN+i); - } - - _dal = m.get(F_DATADA); - _al = m.get(F_DATAA); - - switch (m.get(F_TIPOSTAMPA)[0]) - { - case 'C': _tipimov = 1; break; // Consuntivo - case 'P': _tipimov = 6; break; // Preventivo e variazioni - default : _tipimov = 7; break; // Raffronto - } - - _movimentati = m.get_int(F_STAMPAV) == 1; - _nonnulli = m.get_int(F_STAMPAV) == 2; - - if (r >= 0) - { - TSheet_field& sf = m.sfield(F_RIGHE); - TMask& sm = sf.sheet_mask(); - sf.update_mask(r); - TRelation rel(LF_RMOVANA); - sm.autosave(rel); - _bill.get(rel.curr()); - } - else - _bill.reset(); -} - -TPiano_conti_recordset::TPiano_conti_recordset(const char* sql) : TISAM_recordset(sql) -{ } - //////////////////////////////////////////////////////// // Report //////////////////////////////////////////////////////// @@ -421,20 +239,50 @@ protected: virtual bool set_recordset(const TString& sql); public: - void set_recordset(const TMask& msk, int row); + void set_filter(const TMask& msk, int row); TReport_bilancio_ca(const char* name); }; -bool TReport_bilancio_ca::set_recordset(const TString& sql) +bool TReport_bilancio_ca::set_recordset(const TString& /* sql */) { - TPiano_conti_recordset* rset = new TPiano_conti_recordset(sql); + TPconana_recordset* rset = new TPconana_recordset(); return TReport::set_recordset(rset); } -void TReport_bilancio_ca::set_recordset(const TMask& msk, int row) +void TReport_bilancio_ca::set_filter(const TMask& m, int row) { - TPiano_conti_recordset* rset = (TPiano_conti_recordset*)recordset(); - rset->set_filter(msk, row); + TString da_conto, a_conto, costo, commessa, fase; + for (int i = 0; m.id2pos(F_PDC1_INI+i) > 0; i++) + { + da_conto << m.get(F_PDC1_INI+i); + a_conto << m.get(F_PDC1_FIN+i); + } + + const TDate dal = m.get(F_DATADA); + const TDate al = m.get(F_DATAA); + + int tipimov = 0; + switch (m.get(F_TIPOSTAMPA)[0]) + { + case 'C': tipimov = 1; break; // Consuntivo + case 'P': tipimov = 6; break; // Preventivo e variazioni + default : tipimov = 7; break; // Raffronto + } + + const bool movimentati = m.get_int(F_STAMPAV) == 1; + const bool nonnulli = m.get_int(F_STAMPAV) == 2; + + TSheet_field& sf = m.sfield(F_RIGHE); + TMask& sm = sf.sheet_mask(); + sf.update_mask(row); + TRelation rel(LF_RMOVANA); + sm.autosave(rel); + costo = rel.curr().get(RMOVANA_CODCCOSTO); + commessa = rel.curr().get(RMOVANA_CODCMS); + fase = rel.curr().get(RMOVANA_CODFASE); + + TPconana_recordset* rset = (TPconana_recordset*)recordset(); + rset->set_filter(da_conto, a_conto, costo, commessa, fase, dal, al, tipimov, movimentati, nonnulli); } TReport_bilancio_ca::TReport_bilancio_ca(const char* name) @@ -465,7 +313,7 @@ void TPrint_bilancio_ca::main_loop() const int rows = sf.items(); for (int i = 0; i < rows; i++) { - rep.set_recordset(mask, i); + rep.set_filter(mask, i); book.add(rep); } diff --git a/ca/calib02.cpp b/ca/calib02.cpp index e2b25d066..ff6094394 100755 --- a/ca/calib02.cpp +++ b/ca/calib02.cpp @@ -7,9 +7,149 @@ #include "../include/rdoc.h" #include "movana.h" +#include "pconana.h" #include "rmovana.h" #include "saldana.h" +/////////////////////////////////////////////////////////// +// TPconana_recordset +/////////////////////////////////////////////////////////// + +const TVariant& TPconana_recordset::get(const char* column_name) const +{ + if (strncmp(column_name, "SALDO:", 6) == 0) + { + TString16 sub_field = column_name+6; + const char last = sub_field.right(1)[0]; + int tipimov = 0; + switch (last) + { + case 'C': tipimov = 1; sub_field.rtrim(1); break; // Consuntivo + case 'P': + case 'V': tipimov = 6; sub_field.rtrim(1); break; // Preventivo o variazaione preventivo + default : tipimov = _tipimov; break; + } + + ((TAnal_bill&)_bill).set_conto(relation()->curr().get(PCONANA_CODCONTO)); + const TSaldanal& s = ca_saldo(_bill, _dal, _al, tipimov); + + TVariant& var = get_tmp_var(); + if (strcmp(sub_field, "INI_DARE") == 0) + { + var = s._ini.sezione() == 'D' ? s._ini.valore() : ZERO; + } else + if (strcmp(sub_field, "INI_AVERE") == 0) + { + var = s._ini.sezione() == 'A' ? s._ini.valore() : ZERO; + } else + if (strcmp(sub_field, "MOV_DARE") == 0) + { + var = s._dare.valore(); + } else + if (strcmp(sub_field, "MOV_AVERE") == 0) + { + var = s._avere.valore(); + } else + if (strcmp(sub_field, "FIN_DARE") == 0) + { + var = s._fin.sezione() == 'D' ? s._fin.valore() : ZERO; + } else + if (strcmp(sub_field, "FIN_AVERE") == 0) + { + var = s._fin.sezione() == 'A' ? s._fin.valore() : ZERO; + } + return var; + } + if (strcmp(column_name, "#CMSCDC") == 0) + { + const TMultilevel_code_info& info = ca_multilevel_code_info(LF_FASI); + switch (info.parent()) + { + case LF_CDC : column_name = "#COSTO"; break; + case LF_COMMESSE: column_name = "#COMMESSA"; break; + default : return NULL_VARIANT; + } + } + if (strcmp(column_name, "#COSTO") == 0) + return get_tmp_var() = _bill.costo(); + if (strcmp(column_name, "#COMMESSA") == 0) + return get_tmp_var() = _bill.commessa(); + if (strcmp(column_name, "#FASE") == 0) + return get_tmp_var() = _bill.fase(); + + return TISAM_recordset::get(column_name); +} + +bool TPconana_recordset::valid_record(const TRelation& rel) const +{ + if (_movimentati || _nonnulli) + { + const TString& conto = rel.curr().get(PCONANA_CODCONTO); + ((TAnal_bill&)_bill).set_conto(conto); + const TSaldanal& s = ca_saldo(_bill, _dal, _al, _tipimov); + if (_movimentati && !s._movimentato) + return false; + if (_nonnulli && s._ini.is_zero() && s._dare.is_zero() && s._avere.is_zero()) + return false; + } + return true; +} + +static const TPconana_recordset* _current_recset = NULL; + +bool TPconana_recordset::pianoconti_filter(const TRelation* rel) +{ return _current_recset->valid_record(*rel); } + +void TPconana_recordset::set_custom_filter(TCursor& cursor) const +{ + TString filter; + filter << "LEN(" << PCONANA_CODCONTO << ")==" << _contolen; + cursor.setfilter(filter); + + TRectype darec(LF_PCONANA), arec(LF_PCONANA); + darec.put(PCONANA_CODCONTO, _da_conto); + arec.put(PCONANA_CODCONTO, _a_conto); + cursor.setregion(darec, arec); + + if (_movimentati || _nonnulli) + { + _current_recset = this; + cursor.set_filterfunction(pianoconti_filter); + } + else + cursor.set_filterfunction(NULL); +} + +void TPconana_recordset::set_filter(const char* da_conto, const char* a_conto, + const char* costo, const char* commessa, const char* fase, + const TDate& dal, const TDate& al, + word tipimov, bool movimentati, bool nonnulli) +{ + _contolen = 0; + const TMultilevel_code_info& info = ca_multilevel_code_info(LF_PCONANA); + for (int l = info.levels()-1; l >= 0; l--) + _contolen += info.len(l); + + _da_conto = da_conto; + _a_conto = a_conto; + + _dal = dal; + _al = al; + + _tipimov= tipimov; + _movimentati = movimentati; + _nonnulli = nonnulli; + + _bill.reset(); + _bill.set_costo(costo); + _bill.set_commessa(commessa); + _bill.set_fase(fase); +} + +TPconana_recordset::TPconana_recordset() : TISAM_recordset("USE PCONANA") +{ } + + /////////////////////////////////////////////////////////// // TAnal_report /////////////////////////////////////////////////////////// diff --git a/ca/calib02.h b/ca/calib02.h index 40ea3a2de..93ad522ed 100755 --- a/ca/calib02.h +++ b/ca/calib02.h @@ -5,30 +5,6 @@ #include #endif -/////////////////////////////////////////////////////////// -// TAnal_rapport -/////////////////////////////////////////////////////////// - -class TAnal_report : public TReport -{ - unsigned int _first_msg; - -protected: // protected is safer - virtual bool get_usr_val(const TString& name, TVariant& var) const; - virtual size_t get_usr_words(TString_array& words) const; - virtual bool execute_usr_word(unsigned int opcode, TVariant_stack& stack); - virtual bool use_mask() { return false;} - - void msg_format(int logicnum, TVariant_stack& stack); - void msg_format_costo (TVariant_stack& stack); - void msg_format_commessa (TVariant_stack& stack); - void msg_format_fase (TVariant_stack& stack); - void msg_format_conto (TVariant_stack& stack); - void msg_format_commessa_costo(TVariant_stack& stack); - -public: // meglio pubic? -}; - /////////////////////////////////////////////////////////// // TAnal_bill /////////////////////////////////////////////////////////// @@ -76,4 +52,58 @@ struct TSaldanal : public TObject const TSaldanal& ca_saldo(const TAnal_bill& bill, const TDate& dal, const TDate& al, word tipi = 1); +//////////////////////////////////////////////////////// +// TPconana_recordset +//////////////////////////////////////////////////////// + +class TPconana_recordset : public TISAM_recordset +{ + word _tipimov; + TString _da_conto, _a_conto; + int _contolen; + TAnal_bill _bill; + TDate _dal, _al; + bool _movimentati, _nonnulli; + +protected: + bool valid_record(const TRelation& rel) const; + static bool pianoconti_filter(const TRelation* rel); + + virtual void set_custom_filter(TCursor& cursor) const; + +public: + virtual const TVariant& get(const char* column_name) const; + + void set_filter(const char* da_conto, const char* a_conto, + const char* costo, const char* commessa, const char* fase, + const TDate& dal, const TDate& al, + word tipimov, bool movimentati, bool nonnulli); + + TPconana_recordset(); +}; + +/////////////////////////////////////////////////////////// +// TAnal_rapport +/////////////////////////////////////////////////////////// + +class TAnal_report : public TReport +{ + unsigned int _first_msg; + +protected: // protected is safer + virtual bool get_usr_val(const TString& name, TVariant& var) const; + virtual size_t get_usr_words(TString_array& words) const; + virtual bool execute_usr_word(unsigned int opcode, TVariant_stack& stack); + virtual bool use_mask() { return false;} + + void msg_format(int logicnum, TVariant_stack& stack); + void msg_format_costo (TVariant_stack& stack); + void msg_format_commessa (TVariant_stack& stack); + void msg_format_fase (TVariant_stack& stack); + void msg_format_conto (TVariant_stack& stack); + void msg_format_commessa_costo(TVariant_stack& stack); + +public: // meglio pubic? +}; + #endif diff --git a/ca/f107.dir b/ca/f107.dir index 44d8f932a..d72d25919 100755 --- a/ca/f107.dir +++ b/ca/f107.dir @@ -1,3 +1,3 @@ 107 0 -$movana|0|0|152|0|Movimenti di Analitica||| +$movana|0|0|168|0|Movimenti di Analitica||| diff --git a/ca/f107.trr b/ca/f107.trr index 743c97992..89d8bff1e 100755 --- a/ca/f107.trr +++ b/ca/f107.trr @@ -1,5 +1,5 @@ 107 -17 +21 ANNOES|9|4|0|Codice esercizio NUMREG|3|7|0|Numero di operazione DATAREG|5|8|0|Data operazione @@ -17,6 +17,10 @@ CAMBIO|4|15|6|Cambio della valuta TOTDOC|4|18|3|Totale documento SEZIONE|1|1|0|Sezione del totale documento BLOCCATO|8|1|0|Movimento bloccato +DPROVV|1|1|0|Documento originale PROVV +DANNO|2|4|0|Documento originale ANNO +DCODNUM|1|4|0|Documento originale CODNUM +DNDOC|3|7|0|Documento originale NDOC 3 NUMREG| DATACOMP+NUMREG|X diff --git a/ca/movana.h b/ca/movana.h index 924b3a6f9..cc14d46a4 100755 --- a/ca/movana.h +++ b/ca/movana.h @@ -15,5 +15,9 @@ #define MOVANA_SEZIONE "SEZIONE" #define MOVANA_TOTDOC "TOTDOC" #define MOVANA_BLOCCATO "BLOCCATO" +#define MOVANA_DPROVV "DPROVV" +#define MOVANA_DANNO "DANNO" +#define MOVANA_DCODNUM "DCODNUM" +#define MOVANA_DNDOC "DNDOC" #endif \ No newline at end of file