Patch level : 2.2

Files correlati     : ve0 ve6
Ricompilazione Demo : [ ]
Commento            :

Corretta contabilizzazione analitica dei documenti


git-svn-id: svn://10.65.10.50/trunk@13222 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2005-06-24 17:05:02 +00:00
parent 3b0f6d38b7
commit 9191d73f21
5 changed files with 53 additions and 41 deletions

View File

@ -17,10 +17,6 @@ class TViswin;
#include "../ve/clifor.h"
#endif
#ifndef __CURRENCY_H
#include <currency.h>
#endif
#ifndef __CGLIB01_H
#include "../cg/cglib01.h"
#endif
@ -89,23 +85,23 @@ class TDocumento_variable_field : public TVariable_field
bool _dirty;
public:
TObject* dup() const { return new TDocumento_variable_field(*this); }
virtual TObject* dup() const { return new TDocumento_variable_field(*this); }
// @cmember segnala che il campo deve essere ricalcolato
virtual bool dirty() const { return _dirty; }
// @cmember assegna lo stato di campo da ricalcolare
virtual void set_dirty(bool on = TRUE) { _dirty = on;}
virtual void set_dirty(bool on = true) { _dirty = on; }
// @ cmember Costruttore con una espressione di calcolo
TDocumento_variable_field(const char * name, const char * expr = "", TTypeexp type = _strexpr)
: TVariable_field(name, expr, type), _dirty(TRUE) {}
: TVariable_field(name, expr, type), _dirty(true) {}
// @ cmember Costruttore con una funzione
TDocumento_variable_field(const char * name, VIRTUAL_GET_FUNCTION getfunc)
: TVariable_field(name, getfunc), _dirty(TRUE) {}
: TVariable_field(name, getfunc), _dirty(true) {}
// @ cmember Costruttore con una espressione di calcolo
TDocumento_variable_field(const char * name, const TExpression & expr, TTypeexp type = _strexpr)
: TVariable_field(name, expr, type), _dirty(TRUE) {}
: TVariable_field(name, expr, type), _dirty(true) {}
// @ cmember Costruttore con un variable_field
TDocumento_variable_field(const TVariable_field & f) : TVariable_field(f), _dirty(TRUE) {}
TDocumento_variable_field(const TVariable_field & f) : TVariable_field(f), _dirty(true) {}
// @ cmember Distruttore
virtual ~TDocumento_variable_field() {}
};
@ -179,10 +175,10 @@ class TFormula_documento : public TRectype // velib01
TExpr_documento * _expr;
protected:
int read(const char* codice, const char* expr = NULL, bool numexpr = TRUE);
int read(const char* codice, const char* expr = NULL, bool numexpr = true);
public:
TObject* dup() const { return new TFormula_documento(_tab == "%FRD" ? _documento : _riga, codice(), NULL, TRUE); }
TObject* dup() const { return new TFormula_documento(_tab == "%FRD" ? _documento : _riga, codice(), NULL, true); }
public:
const TString& codice() const { return get("CODTAB");}
@ -193,7 +189,7 @@ public:
const TString& expr_string() const { return get("S1"); }
TTypeexp expr_type() const { return get_bool("B0") ? _numexpr : _strexpr;}
TFormula_documento(TTipo_formula tipo = _documento, const char* codice = NULL, const char* expr = NULL, bool numexpr = TRUE);
TFormula_documento(TTipo_formula tipo = _documento, const char* codice = NULL, const char* expr = NULL, bool numexpr = true);
TFormula_documento(const TRectype& rec);
virtual ~TFormula_documento();
};
@ -299,7 +295,7 @@ public:
const TString & main_print_profile() const { return get("S5").left(8); }
const TString & additional_print_profile() const { return get("S5").mid(8); }
TFormula_documento * first_formula() { return succ_formula(TRUE); }
TFormula_documento * first_formula() { return succ_formula(true); }
TFormula_documento * succ_formula(bool restart = FALSE);
const int ncopie() const { return get_int("I0"); }
@ -407,7 +403,7 @@ public:
int detraibilita() const { return get_int("I0"); }
real perc_indetraibilita() const { return get_real("R0"); }
TFormula_documento* first_formula() { return succ_formula(TRUE); }
TFormula_documento* first_formula() { return succ_formula(true); }
TFormula_documento* succ_formula(bool restart = FALSE);
int read(const char* tiporig);
@ -441,12 +437,12 @@ protected:
static void test_firm();
public:
void dirty_fields(bool dirty_document = TRUE);
void dirty_fields(bool dirty_document = true);
bool doc_dependent() const;
int numero() const { return get_int(RDOC_NRIGA); }
void set_numero(int numero) { put(RDOC_NRIGA, numero);}
bool is_generata() const { return get_bool(RDOC_GENERATA);}
void generata(bool on = TRUE) { put(RDOC_GENERATA, on);}
void generata(bool on = true) { put(RDOC_GENERATA, on);}
bool is_merce() const { return tipo().tipo() == RIGA_MERCE;}
bool is_spese() const { return tipo().tipo() == RIGA_SPESEDOC;}
bool is_prestazione() const { return tipo().tipo() == RIGA_PRESTAZIONI;}
@ -460,7 +456,7 @@ public:
bool is_checked() const { return get_bool(RDOC_CHECKED);}
bool is_evadibile() const { return is_merce() || is_omaggio() || is_spese() || is_prestazione(); }
bool is_evasa() const; // Ritorna vero se la riga è evasa
void checked(bool on = TRUE) { put(RDOC_CHECKED, (bool)on); }
void checked(bool on = true) { put(RDOC_CHECKED, (bool)on); }
void unchecked() { checked(FALSE); }
bool linked() const { return get(RDOC_DACODNUM).not_empty();}
// @cmember Assegna il documento corrente
@ -501,12 +497,12 @@ public:
real prezzo(bool scontato, bool lordo, int ndec = AUTO_DECIMALS) const ;
real importo(bool scontato , bool lordo, int ndec = AUTO_DECIMALS) const ;
real sconto() const { return importo(FALSE,FALSE) - importo(TRUE,FALSE); }
real sconto() const { return importo(FALSE,FALSE) - importo(true,FALSE); }
real iva(int ndec) const;
real imponibile(bool lordo = FALSE) const;
real imponibile_omaggio(int iva_calc_mode = 1) const;
real iva_omaggio(int ndec, int iva_calc_mode = 1) const;
real imposta(bool round = TRUE) const;
real imposta(bool round = true) const;
real provvigione(int ndec = AUTO_DECIMALS) const;
real ritenuta(const char tipor = '\0', bool lordo = false, int ndec = AUTO_DECIMALS) const;
@ -548,8 +544,8 @@ protected:
virtual TRiepilogo_iva & copy(const TRiepilogo_iva & a);
public:
real imponibile(bool spese = TRUE) const { return _imp + (spese ? _imp_spese : ZERO);} // Imponibile
real imposta(bool spese = TRUE) const { return _iva + (spese ? _iva_spese : ZERO);} // Iva
real imponibile(bool spese = true) const { return _imp + (spese ? _imp_spese : ZERO);} // Imponibile
real imposta(bool spese = true) const { return _iva + (spese ? _iva_spese : ZERO);} // Iva
real & imp() { return _imp;};
real & imp_spese() { return _imp_spese;};
real & imp_spese_row() { return _imp_spese_row;};
@ -660,7 +656,7 @@ public:
TRiga_documento& new_row(const char *tipo = NULL);
virtual int read(TBaseisamfile& f, word op = _isequal, word lockop = _nolock);
virtual int write(TBaseisamfile& f) const { return write_rewrite(f, FALSE); }
virtual int rewrite(TBaseisamfile& f) const { return write_rewrite(f, TRUE); }
virtual int rewrite(TBaseisamfile& f) const { return write_rewrite(f, true); }
virtual int remove(TBaseisamfile& f) const;
int read(char provv, int anno, const char* codnum, long numdoc, word op = _isequal, word lockop = _nolock);
@ -668,13 +664,13 @@ public:
int read(word op = _isequal, word lockop = _nolock) { TLocalisamfile f(LF_DOC); return read(f, op, lockop);}
int write(bool re = FALSE) const { TLocalisamfile f(LF_DOC); return write_rewrite(f, re);}
int rewrite() const { return write(TRUE); }
int rewrite() const { return write(true); }
int remove() const { TLocalisamfile f(LF_DOC); return remove(f);}
int decimals(bool price = FALSE) const;
void flush_rows();
TProvvigioni_agente& calc_provvigioni(const bool generata = TRUE);
TProvvigioni_agente& calc_provvigioni(const bool generata = true);
int write_provvigioni() { return calc_provvigioni().write();}
char tipo_numerazione() const { return get_char("PROVV"); }
@ -828,7 +824,7 @@ public:
void occ2mask();
void cli2mask();
void doc2mask(bool reload_clifo = TRUE);
void doc2mask(bool reload_clifo = true);
void mask2doc();
void update_giacenza();
@ -875,7 +871,7 @@ class TDocumentoEsteso : public TDocumento
// membri per il calcolo del riepilogo IVA
int _sum_filter; // Filtro corrente della riga TRiepilogo_iva in corso di stampa (-1 se non ha ancora calcolato la tabella)
bool _sum_selected; // TRUE se ha selezionato una riga del riepilogo, funge da semaforo per leggere la prossima
bool _sum_selected; // true se ha selezionato una riga del riepilogo, funge da semaforo per leggere la prossima
TString_array _order_array; // Array di TToken_string contenenti i codici IVA soddisfacenti ad ogni tipo di filtro
TAssoc_array _summary_table; // Array associativo contenete imonibili ed imposte pronte per la stampa;
TArray _summary_array; // Array dove vengono memorizzate le imposte/imponibili per riga
@ -890,7 +886,7 @@ public:
const bool summary_compiled() { return _sum_filter > -1; }
void compile_summary(); // Aggiorna la tabella riepilogativa
void summary_filter(byte selector); // filtra la tabellina secondo il filtro corrente se non e' gia' stato fatto
void summary_reset(bool force=FALSE); // riposiziona l'array dei codici IVA (_order_array). Se il parametro e' TRUE forza il ricalcolo della tabella
void summary_reset(bool force=FALSE); // riposiziona l'array dei codici IVA (_order_array). Se il parametro e' true forza il ricalcolo della tabella
void summary_set_next(); // seleziona il prossimo elemento del filtro
const TRiepilogo_iva& sum_current() const { return _sum_current; } // ritorna la riga corrente del filtro corrente
const char * summary_get(const TString& w); // ritorna l'informazione richiesta estratta dall'elemento corrente

View File

@ -803,7 +803,7 @@ void TRiga_documento::put_str(const char* fieldname, const char* val)
{
if (strcmp(fieldname, RDOC_TIPORIGA) == 0)
{
const TString16 v(val);
const TString4 v(val);
if (TRectype::get(RDOC_TIPORIGA) != v)
{
TAuto_variable_rectype::put_str(fieldname, v);

View File

@ -799,9 +799,9 @@ void TDocumento::dirty_fields()
for (int i = loaded_rows(); i > 0; i--)
{
TRiga_documento & r = (TRiga_documento &) row(i);
r.dirty_fields(FALSE);
r.dirty_fields(false);
}
_dirty_deny = TRUE;
_dirty_deny = true;
}
}

View File

@ -285,9 +285,9 @@ bool TContabilizzazione_analitica::find_conti(const TRiga_documento& riga, TStri
if (ok)
{
const TString riga_cms = riga.get(RDOC_CODCMS);
const TString riga_fsc = riga.get(RDOC_FASCMS);
const TString riga_cos = riga.get(RDOC_CODCOSTO);
const TString riga_cms = riga.codice_commessa();
const TString riga_fsc = riga.fase_commessa();
const TString riga_cos = riga.codice_costo();
const bool riga_any = riga_cms.not_empty() || riga_fsc.not_empty() || riga_cos.not_empty();
if (contanal.blank()) // Non ho trovato il conto in anagrafica ...
@ -400,6 +400,13 @@ bool TContabilizzazione_analitica::elabora(const TDocumento& doc, long numreg_cg
if (can_write)
{
bool dare = doc.get_char(DOC_TIPOCF) == 'F';
if (doc.is_nota_credito())
dare= !dare;
const char sezione = dare ? 'D' : 'A';
TImporto totdoc;
TGeneric_distrib esso(valore, decimals);
init_distrib(conti, esso);
FOR_EACH_ARRAY_ROW(conti, i, row)
@ -419,12 +426,21 @@ bool TContabilizzazione_analitica::elabora(const TDocumento& doc, long numreg_cg
rmov.put(RMOVANA_CODCMS, row->get());
rmov.put(RMOVANA_CODFASE, row->get());
rmov.put(RMOVANA_CODCCOSTO,row->get());
rmov.put(RMOVANA_IMPORTO, esso.get());
rmov.put(RMOVANA_SEZIONE, 'D');
TImporto imp(sezione, real(esso.get()));
imp.normalize();
rmov.put(RMOVANA_SEZIONE, imp.sezione());
rmov.put(RMOVANA_IMPORTO, imp.valore());
totdoc += imp;
}
if (mov != NULL)
{
totdoc.normalize();
mov->put(MOVANA_SEZIONE, totdoc.sezione());
mov->put(MOVANA_TOTDOC, totdoc.valore());
TLocalisamfile movana(LF_MOVANA);
mov->write(movana);
delete mov;

View File

@ -213,10 +213,10 @@ bool condpag_hndl( TMask_field& field, KEY key )
doc.put(DOC_TIPOCF, m.get(F_TIPOCF));
doc.put(DOC_CODCF, m.get(F_CODCF));
TPagamento& pag = doc.pagamento();
pag.set_total(real(100), real(10), real(10));
pag.set_total(CENTO, real(10), real(10));
pag.set_rate_auto();
int numrate = pag.n_rate( );
const int numrate = pag.n_rate( );
for(int i = 0; i < MAX_VIS_RATE; i++)
{
if (i < numrate)