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

@ -16,11 +16,7 @@ class TViswin;
#ifndef __CLIFOR_H #ifndef __CLIFOR_H
#include "../ve/clifor.h" #include "../ve/clifor.h"
#endif #endif
#ifndef __CURRENCY_H
#include <currency.h>
#endif
#ifndef __CGLIB01_H #ifndef __CGLIB01_H
#include "../cg/cglib01.h" #include "../cg/cglib01.h"
#endif #endif
@ -89,23 +85,23 @@ class TDocumento_variable_field : public TVariable_field
bool _dirty; bool _dirty;
public: 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 // @cmember segnala che il campo deve essere ricalcolato
virtual bool dirty() const { return _dirty;} virtual bool dirty() const { return _dirty; }
// @cmember assegna lo stato di campo da ricalcolare // @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 // @ cmember Costruttore con una espressione di calcolo
TDocumento_variable_field(const char * name, const char * expr = "", TTypeexp type = _strexpr) 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 // @ cmember Costruttore con una funzione
TDocumento_variable_field(const char * name, VIRTUAL_GET_FUNCTION getfunc) 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 // @ cmember Costruttore con una espressione di calcolo
TDocumento_variable_field(const char * name, const TExpression & expr, TTypeexp type = _strexpr) 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 // @ 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 // @ cmember Distruttore
virtual ~TDocumento_variable_field() {} virtual ~TDocumento_variable_field() {}
}; };
@ -179,10 +175,10 @@ class TFormula_documento : public TRectype // velib01
TExpr_documento * _expr; TExpr_documento * _expr;
protected: 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: 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: public:
const TString& codice() const { return get("CODTAB");} const TString& codice() const { return get("CODTAB");}
@ -193,7 +189,7 @@ public:
const TString& expr_string() const { return get("S1"); } const TString& expr_string() const { return get("S1"); }
TTypeexp expr_type() const { return get_bool("B0") ? _numexpr : _strexpr;} 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); TFormula_documento(const TRectype& rec);
virtual ~TFormula_documento(); virtual ~TFormula_documento();
}; };
@ -299,7 +295,7 @@ public:
const TString & main_print_profile() const { return get("S5").left(8); } const TString & main_print_profile() const { return get("S5").left(8); }
const TString & additional_print_profile() const { return get("S5").mid(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); TFormula_documento * succ_formula(bool restart = FALSE);
const int ncopie() const { return get_int("I0"); } const int ncopie() const { return get_int("I0"); }
@ -407,7 +403,7 @@ public:
int detraibilita() const { return get_int("I0"); } int detraibilita() const { return get_int("I0"); }
real perc_indetraibilita() const { return get_real("R0"); } 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); TFormula_documento* succ_formula(bool restart = FALSE);
int read(const char* tiporig); int read(const char* tiporig);
@ -441,12 +437,12 @@ protected:
static void test_firm(); static void test_firm();
public: public:
void dirty_fields(bool dirty_document = TRUE); void dirty_fields(bool dirty_document = true);
bool doc_dependent() const; bool doc_dependent() const;
int numero() const { return get_int(RDOC_NRIGA); } int numero() const { return get_int(RDOC_NRIGA); }
void set_numero(int numero) { put(RDOC_NRIGA, numero);} void set_numero(int numero) { put(RDOC_NRIGA, numero);}
bool is_generata() const { return get_bool(RDOC_GENERATA);} 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_merce() const { return tipo().tipo() == RIGA_MERCE;}
bool is_spese() const { return tipo().tipo() == RIGA_SPESEDOC;} bool is_spese() const { return tipo().tipo() == RIGA_SPESEDOC;}
bool is_prestazione() const { return tipo().tipo() == RIGA_PRESTAZIONI;} 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_checked() const { return get_bool(RDOC_CHECKED);}
bool is_evadibile() const { return is_merce() || is_omaggio() || is_spese() || is_prestazione(); } bool is_evadibile() const { return is_merce() || is_omaggio() || is_spese() || is_prestazione(); }
bool is_evasa() const; // Ritorna vero se la riga è evasa 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); } void unchecked() { checked(FALSE); }
bool linked() const { return get(RDOC_DACODNUM).not_empty();} bool linked() const { return get(RDOC_DACODNUM).not_empty();}
// @cmember Assegna il documento corrente // @cmember Assegna il documento corrente
@ -501,12 +497,12 @@ public:
real prezzo(bool scontato, bool lordo, int ndec = AUTO_DECIMALS) const ; real prezzo(bool scontato, bool lordo, int ndec = AUTO_DECIMALS) const ;
real importo(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 iva(int ndec) const;
real imponibile(bool lordo = FALSE) const; real imponibile(bool lordo = FALSE) const;
real imponibile_omaggio(int iva_calc_mode = 1) const; real imponibile_omaggio(int iva_calc_mode = 1) const;
real iva_omaggio(int ndec, 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 provvigione(int ndec = AUTO_DECIMALS) const;
real ritenuta(const char tipor = '\0', bool lordo = false, 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); virtual TRiepilogo_iva & copy(const TRiepilogo_iva & a);
public: public:
real imponibile(bool spese = TRUE) const { return _imp + (spese ? _imp_spese : ZERO);} // Imponibile 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 imposta(bool spese = true) const { return _iva + (spese ? _iva_spese : ZERO);} // Iva
real & imp() { return _imp;}; real & imp() { return _imp;};
real & imp_spese() { return _imp_spese;}; real & imp_spese() { return _imp_spese;};
real & imp_spese_row() { return _imp_spese_row;}; real & imp_spese_row() { return _imp_spese_row;};
@ -660,7 +656,7 @@ public:
TRiga_documento& new_row(const char *tipo = NULL); TRiga_documento& new_row(const char *tipo = NULL);
virtual int read(TBaseisamfile& f, word op = _isequal, word lockop = _nolock); virtual int read(TBaseisamfile& f, word op = _isequal, word lockop = _nolock);
virtual int write(TBaseisamfile& f) const { return write_rewrite(f, FALSE); } 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; virtual int remove(TBaseisamfile& f) const;
int read(char provv, int anno, const char* codnum, long numdoc, word op = _isequal, word lockop = _nolock); 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 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 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 remove() const { TLocalisamfile f(LF_DOC); return remove(f);}
int decimals(bool price = FALSE) const; int decimals(bool price = FALSE) const;
void flush_rows(); 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();} int write_provvigioni() { return calc_provvigioni().write();}
char tipo_numerazione() const { return get_char("PROVV"); } char tipo_numerazione() const { return get_char("PROVV"); }
@ -828,7 +824,7 @@ public:
void occ2mask(); void occ2mask();
void cli2mask(); void cli2mask();
void doc2mask(bool reload_clifo = TRUE); void doc2mask(bool reload_clifo = true);
void mask2doc(); void mask2doc();
void update_giacenza(); void update_giacenza();
@ -875,7 +871,7 @@ class TDocumentoEsteso : public TDocumento
// membri per il calcolo del riepilogo IVA // 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) 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 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; 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 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; } const bool summary_compiled() { return _sum_filter > -1; }
void compile_summary(); // Aggiorna la tabella riepilogativa 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_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 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 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 const char * summary_get(const TString& w); // ritorna l'informazione richiesta estratta dall'elemento corrente

View File

@ -765,7 +765,7 @@ const TString & TRiga_documento::codice_costo() const
const TString & TRiga_documento::codice_commessa() const const TString & TRiga_documento::codice_commessa() const
{ {
const TString & cod_cms = get(RDOC_CODCMS); const TString& cod_cms = get(RDOC_CODCMS);
return cod_cms.empty() ? doc().get(DOC_CODCMS) : cod_cms; return cod_cms.empty() ? doc().get(DOC_CODCMS) : cod_cms;
} }
@ -803,7 +803,7 @@ void TRiga_documento::put_str(const char* fieldname, const char* val)
{ {
if (strcmp(fieldname, RDOC_TIPORIGA) == 0) if (strcmp(fieldname, RDOC_TIPORIGA) == 0)
{ {
const TString16 v(val); const TString4 v(val);
if (TRectype::get(RDOC_TIPORIGA) != v) if (TRectype::get(RDOC_TIPORIGA) != v)
{ {
TAuto_variable_rectype::put_str(fieldname, 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--) for (int i = loaded_rows(); i > 0; i--)
{ {
TRiga_documento & r = (TRiga_documento &) row(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) if (ok)
{ {
const TString riga_cms = riga.get(RDOC_CODCMS); const TString riga_cms = riga.codice_commessa();
const TString riga_fsc = riga.get(RDOC_FASCMS); const TString riga_fsc = riga.fase_commessa();
const TString riga_cos = riga.get(RDOC_CODCOSTO); const TString riga_cos = riga.codice_costo();
const bool riga_any = riga_cms.not_empty() || riga_fsc.not_empty() || riga_cos.not_empty(); 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 ... 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) 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); TGeneric_distrib esso(valore, decimals);
init_distrib(conti, esso); init_distrib(conti, esso);
FOR_EACH_ARRAY_ROW(conti, i, row) 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_CODCMS, row->get());
rmov.put(RMOVANA_CODFASE, row->get()); rmov.put(RMOVANA_CODFASE, row->get());
rmov.put(RMOVANA_CODCCOSTO,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) if (mov != NULL)
{ {
totdoc.normalize();
mov->put(MOVANA_SEZIONE, totdoc.sezione());
mov->put(MOVANA_TOTDOC, totdoc.valore());
TLocalisamfile movana(LF_MOVANA); TLocalisamfile movana(LF_MOVANA);
mov->write(movana); mov->write(movana);
delete mov; 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_TIPOCF, m.get(F_TIPOCF));
doc.put(DOC_CODCF, m.get(F_CODCF)); doc.put(DOC_CODCF, m.get(F_CODCF));
TPagamento& pag = doc.pagamento(); 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(); pag.set_rate_auto();
int numrate = pag.n_rate( ); const int numrate = pag.n_rate( );
for(int i = 0; i < MAX_VIS_RATE; i++) for(int i = 0; i < MAX_VIS_RATE; i++)
{ {
if (i < numrate) if (i < numrate)