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
This commit is contained in:
guy 2005-06-29 13:04:49 +00:00
parent d76774f0bd
commit 7d60fb41e5
6 changed files with 241 additions and 215 deletions

View File

@ -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);
}

View File

@ -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
///////////////////////////////////////////////////////////

View File

@ -5,30 +5,6 @@
#include <report.h>
#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

View File

@ -1,3 +1,3 @@
107
0
$movana|0|0|152|0|Movimenti di Analitica|||
$movana|0|0|168|0|Movimenti di Analitica|||

View File

@ -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

View File

@ -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