Patch level : 2.2

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :

Corretta contabilizzazione analitica documenti


git-svn-id: svn://10.65.10.50/trunk@13236 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2005-06-29 13:04:06 +00:00
parent 599a3684ec
commit d76774f0bd
6 changed files with 114 additions and 78 deletions

View File

@ -1,3 +1,3 @@
33 33
0 0
$doc|0|0|516|0|Documenti di vendita|NDOC*3|| $doc|0|0|523|0|Documenti di vendita|NDOC*3||

View File

@ -1,5 +1,5 @@
33 33
78 79
CODNUM|1|4|0|Codice della numerazione CODNUM|1|4|0|Codice della numerazione
ANNO|2|4|0|Anno ANNO|2|4|0|Anno
PROVV|1|1|0|Tipo numerazione <P>rovvisorio <D>efinitivo PROVV|1|1|0|Tipo numerazione <P>rovvisorio <D>efinitivo
@ -78,6 +78,7 @@ FASCMS|1|10|0|Fase Commessa
CODCOSTO|1|20|0|Centro di costo CODCOSTO|1|20|0|Centro di costo
NUMREG|3|7|0|Numero movimento contabilizzato NUMREG|3|7|0|Numero movimento contabilizzato
NUMANT|3|7|0|Numero movimento anticipo contabilizzato NUMANT|3|7|0|Numero movimento anticipo contabilizzato
NUMREGCA|3|7|0|Numero di operazione contabilita' analitica
4 4
PROVV+ANNO+CODNUM+NDOC| PROVV+ANNO+CODNUM+NDOC|
TIPOCF+CODCF+PROVV+ANNO+DATADOC+CODNUM+NDOC|X TIPOCF+CODCF+PROVV+ANNO+DATADOC+CODNUM+NDOC|X

View File

@ -2179,9 +2179,9 @@ void TDocumento::update_spese_aut(TString_array & spese_aut, bool preserve_old,
TString16 tipo(sp.tipo_riga()); TString16 tipo(sp.tipo_riga());
TRiga_documento & riga = new_row(tipo); TRiga_documento & riga = new_row(tipo);
riga.put("CODART", s); riga.put(RDOC_CODART, s);
riga.generata(); riga.generata();
riga.put("DESCR", sp.descrizione()); riga.put(RDOC_DESCR, sp.descrizione());
switch (sp.tipo()) switch (sp.tipo())
{ {
case 'Q': case 'Q':
@ -2199,13 +2199,13 @@ void TDocumento::update_spese_aut(TString_array & spese_aut, bool preserve_old,
real prezzo = sp.prezzo(); real prezzo = sp.prezzo();
sppr_calc(sp, valuta, cambio, prezzo, controeuro); sppr_calc(sp, valuta, cambio, prezzo, controeuro);
riga.put("PREZZO", prezzo); riga.put(RDOC_PREZZO, prezzo);
riga.put("UMQTA", sp.um()); riga.put(RDOC_UMQTA, sp.um());
} }
break; break;
case 'P': case 'P':
default: default:
riga.put("QTA", sp.perc()); riga.put(RDOC_QTA, sp.perc());
break; break;
} }
if (cod_iva_cli.empty()) if (cod_iva_cli.empty())

View File

@ -352,7 +352,7 @@ protected:
error_type write_anticipo(TDocumento&); error_type write_anticipo(TDocumento&);
// scrive il movimento INTRA // scrive il movimento INTRA
error_type write_intra(TDocumento&); error_type write_intra(TDocumento&);
error_type write_anal(const TDocumento& doc, const TMovimentoPN& mv); error_type write_anal(TDocumento& doc, const TMovimentoPN& mv);
// Aggiorna i saldi // Aggiorna i saldi
void aggiorna_saldi(TSaldo_agg& saldo, TMovimentoPN& mv, bool save); void aggiorna_saldi(TSaldo_agg& saldo, TMovimentoPN& mv, bool save);
@ -482,7 +482,7 @@ protected:
public: public:
virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out, virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
const TDate& data_elab, bool interattivo = false); const TDate& data_elab, bool interattivo = false);
bool elabora(const TDocumento& doc, long numreg_cg, TViswin* viswin, bool can_write); bool elabora(TDocumento& doc, long numreg_cg, TViswin* viswin, bool can_write);
TContabilizzazione_analitica(); TContabilizzazione_analitica();
TContabilizzazione_analitica(const TRectype& rec); TContabilizzazione_analitica(const TRectype& rec);

View File

@ -3,7 +3,6 @@
#include <execp.h> #include <execp.h>
#include <modaut.h> #include <modaut.h>
#include <tabutil.h> #include <tabutil.h>
#include <progind.h>
#include <printer.h> #include <printer.h>
#include <viswin.h> #include <viswin.h>
@ -14,6 +13,7 @@
#include "../cg/cgsaldac.h" #include "../cg/cgsaldac.h"
#include "../in/inlib01.h" #include "../in/inlib01.h"
#include "../mg/anamag.h" #include "../mg/anamag.h"
#include "../ca/movana.h"
#include <comuni.h> #include <comuni.h>
#include <unloc.h> #include <unloc.h>
@ -1443,7 +1443,7 @@ error_type TContabilizzazione::compile_head_mov_re(TDocumento& doc)
_viswin->add_line(msg); _viswin->add_line(msg);
return no_error; return no_error;
} }
msg.format("--- Il documento verrà ricontabilizzato nel movimento %ld", numreg); msg.format("--- Il documento verrà ricontabilizzato nel movimento contabile %ld", numreg);
_viswin->add_line(msg); _viswin->add_line(msg);
} }
else else
@ -2747,7 +2747,7 @@ error_type TContabilizzazione::write_all(TDocumento& doc, TMovimentoPN_VE & movi
err = movimento.write(); err = movimento.write();
if (err != NOERR) if (err != NOERR)
{ {
error_box("Errore %d scrivendo il movimento %ld.", err, numreg); error_box("*** Errore %d scrivendo il movimento contabile %ld.", err, numreg);
return generic_error; return generic_error;
} }
// Aggiorno subito i saldi // Aggiorno subito i saldi
@ -2773,7 +2773,7 @@ error_type TContabilizzazione::write_all(TDocumento& doc, TMovimentoPN_VE & movi
const TRectype& mov = _movimento->curr(); const TRectype& mov = _movimento->curr();
TString80 msg; TString80 msg;
msg.format("Generazione Movimento $[b,w]%5ld$[n,w]", mov.get_long(MOV_NUMREG)); msg.format("--- Movimento contabile $[b,w]%ld$[n,w]", mov.get_long(MOV_NUMREG));
msg << " del " << mov.get(MOV_DATAREG); msg << " del " << mov.get(MOV_DATAREG);
_viswin->add_line(msg); _viswin->add_line(msg);
@ -2807,7 +2807,7 @@ error_type TContabilizzazione::write_all_re(TDocumento& doc, TMovimentoPN_VE & m
err = movimento.write(); err = movimento.write();
if (err != NOERR) if (err != NOERR)
{ {
error_box("Errore %d scrivendo il movimento %ld.", err, numreg); error_box("*** Errore %d scrivendo il movimento contabile %ld.", err, numreg);
return generic_error; return generic_error;
} }
// Aggiorno subito i saldi // Aggiorno subito i saldi
@ -2818,9 +2818,8 @@ error_type TContabilizzazione::write_all_re(TDocumento& doc, TMovimentoPN_VE & m
_total_docs++; _total_docs++;
change_doc_status(doc); change_doc_status(doc);
TString msg("Generazione Movimento "); TString msg(TR("--- Movimento contabile "));
msg << "$[b,w]" << _movimento->curr().get_long(MOV_NUMREG) << "$[n,w]";
msg << "$[b,w]" << _movimento->curr().get(MOV_NUMREG) << "$[n,w]";
msg << " del " << _movimento->curr().get(MOV_DATAREG); msg << " del " << _movimento->curr().get(MOV_DATAREG);
_viswin->add_line(msg); _viswin->add_line(msg);
@ -3441,7 +3440,7 @@ error_type TContabilizzazione::write_intra(TDocumento& doc)
intra.put("TOTDOCIMM", totale_righe); intra.put("TOTDOCIMM", totale_righe);
if (_caus->valintra() && codvali.empty()) if (_caus->valintra() && codvali.empty())
{ {
TString8 codval(TCurrency::get_firm_val()); TString4 codval(TCurrency::get_firm_val());
if (codval.empty()) if (codval.empty())
TCurrency::get_euro_val(); TCurrency::get_euro_val();
@ -3467,7 +3466,7 @@ error_type TContabilizzazione::write_intra(TDocumento& doc)
return _error; return _error;
} }
error_type TContabilizzazione::write_anal(const TDocumento& doc, const TMovimentoPN& movimento) error_type TContabilizzazione::write_anal(TDocumento& doc, const TMovimentoPN& movimento)
{ {
// Controlla flag sulla causale // Controlla flag sulla causale
if (!_caus->link_analitica()) if (!_caus->link_analitica())
@ -3542,9 +3541,9 @@ void TContabilizzazione::aggiorna_saldi(TSaldo_agg& saldo, TMovimentoPN& mv, boo
void TContabilizzazione::display_error(TDocumento& doc) void TContabilizzazione::display_error(TDocumento& doc)
{ {
TToken_string msg(256, '.'); TToken_string msg(256, '.');
const TString16 numerazione = doc.numerazione(); const TString4 numerazione = doc.numerazione();
const long numero = doc.numero(); const long numero = doc.numero();
const TString16 causale = _caus == NULL ? "" : _caus->codice(); const TString4 causale = _caus == NULL ? "" : _caus->codice();
switch (_error) switch (_error)
{ {
@ -3716,7 +3715,7 @@ bool TContabilizzazione::in_enabled() const
bool TContabilizzazione::prev_contabilized(const TDocumento& doc) const bool TContabilizzazione::prev_contabilized(const TDocumento& doc) const
{ {
const TString16 codnum = doc.get(DOC_CODNUM); const TString4 codnum = doc.get(DOC_CODNUM);
const int anno = doc.get_int(DOC_ANNO); const int anno = doc.get_int(DOC_ANNO);
const char provv = doc.get_char(DOC_PROVV); const char provv = doc.get_char(DOC_PROVV);
long ndoc = doc.get_long(DOC_NDOC); long ndoc = doc.get_long(DOC_NDOC);
@ -3738,18 +3737,31 @@ bool TContabilizzazione::prev_contabilized(const TDocumento& doc) const
return err == NOERR && rec.same_key(doc.head(), 1); return err == NOERR && rec.same_key(doc.head(), 1);
} }
const TString16 stato_doc = rec.get(DOC_STATO); const TString4 stato_doc = rec.get(DOC_STATO);
const TString16 stato_ok = stato_finale_doc_iniziale(); const TString4 stato_ok = stato_finale_doc_iniziale();
return stato_doc == stato_ok; return stato_doc == stato_ok;
} }
static bool link_handler(int n, const char* nreg) static bool link_handler(int n, const char* nreg)
{ {
if (n == 0) switch (n)
{ {
TRectype mov(LF_MOV); case 0:
mov.put(MOV_NUMREG, nreg); {
return mov.edit(); TRectype mov(LF_MOV);
mov.put(MOV_NUMREG, nreg);
return mov.edit();
}
break;
case 1:
{
TRectype mov(LF_MOVANA);
mov.put(MOVANA_NUMREG, nreg);
return mov.edit();
}
break;
default:
break;
} }
return false; return false;
} }
@ -3778,6 +3790,7 @@ bool TContabilizzazione::elabora(TLista_documenti& doc_in, TLista_documenti& doc
TPrinter& p = printer(); TPrinter& p = printer();
p.links().add("Movimento Prima Nota |b|w", 0); p.links().add("Movimento Prima Nota |b|w", 0);
p.links().add("Movimento Analitico |r|w", 1);
p.setlinkhandler(link_handler); p.setlinkhandler(link_handler);
_viswin = new TViswin(NULL, TR("Contabilizzazione documenti"), false, true, true); _viswin = new TViswin(NULL, TR("Contabilizzazione documenti"), false, true, true);
_viswin->open_modal(); _viswin->open_modal();

View File

@ -347,14 +347,12 @@ void TContabilizzazione_analitica::init_distrib(TString_array& conti, TGeneric_d
} }
} }
bool TContabilizzazione_analitica::elabora(const TDocumento& doc, long numreg_cg, TViswin* viswin, bool can_write) bool TContabilizzazione_analitica::elabora(TDocumento& doc, long numreg_cg, TViswin* viswin, bool can_write)
{ {
TAnal_mov* mov = NULL;
TDate datareg, datacomp; TDate datareg, datacomp;
int annoes = 0; int annoes = 0;
TString descr; TString descr, msg;
bool dare = true; bool dare = false;
if (numreg_cg > 0) if (numreg_cg > 0)
{ {
@ -365,7 +363,6 @@ bool TContabilizzazione_analitica::elabora(const TDocumento& doc, long numreg_cg
descr = mov_cg.get(MOV_DESCR); descr = mov_cg.get(MOV_DESCR);
TCausale & caus = (TCausale &) doc2caus(doc); TCausale & caus = (TCausale &) doc2caus(doc);
dare = !(caus.sezione_clifo() == 'D'); dare = !(caus.sezione_clifo() == 'D');
} }
else else
{ {
@ -375,10 +372,39 @@ bool TContabilizzazione_analitica::elabora(const TDocumento& doc, long numreg_cg
if (doc.is_nota_credito()) if (doc.is_nota_credito())
dare= !dare; dare= !dare;
} }
const char sezione = dare ? 'D' : 'A';
const int decimals = TCurrency::get_firm_dec(); const int decimals = TCurrency::get_firm_dec();
// Scandisco le righe del documento, TAnal_mov mov;
long numreg_ca = doc.get_long(DOC_NUMREGCA);
if (numreg_ca > 0)
{
const int err = mov.read(numreg_ca);
if (err == NOERR)
{
if (viswin != NULL)
{
msg.format("--- Il documento verrà ricontabilizzato nel movimento analitico %ld", numreg_ca);
viswin->add_line(msg);
}
mov.body().destroy_rows();
}
else
mov.put(MOVANA_NUMREG, numreg_ca = 0);
}
mov.put(MOVANA_DATAREG, datareg);
mov.put(MOVANA_DATACOMP, datacomp);
mov.put(MOVANA_ANNOES, annoes);
mov.put(MOVANA_DESCR, descr);
mov.put(MOVANA_NUMREGCG, numreg_cg); // Movimento contabile associato
mov.put(MOVANA_DPROVV, doc.get(DOC_PROVV)); // Documento originale
mov.put(MOVANA_DANNO, doc.get(DOC_ANNO));
mov.put(MOVANA_DCODNUM, doc.get(DOC_CODNUM));
mov.put(MOVANA_DNDOC, doc.get(DOC_NDOC));
TImporto totdoc; // Totale movimento analitico
// Scandisco le righe del documento,
for (int i = 1; i <= doc.physical_rows(); i++) for (int i = 1; i <= doc.physical_rows(); i++)
{ {
const TRiga_documento& riga = doc[i]; const TRiga_documento& riga = doc[i];
@ -406,52 +432,48 @@ bool TContabilizzazione_analitica::elabora(const TDocumento& doc, long numreg_cg
continue; continue;
} }
if (can_write) TGeneric_distrib esso(valore, decimals);
init_distrib(conti, esso);
FOR_EACH_ARRAY_ROW(conti, i, row)
{ {
const char sezione = dare ? 'D' : 'A'; TRectype& rmov = mov.new_row();
rmov.put(RMOVANA_ANNOES, annoes);
rmov.put(RMOVANA_CODCONTO, row->get(0));
rmov.put(RMOVANA_CODCMS, row->get());
rmov.put(RMOVANA_CODFASE, row->get());
rmov.put(RMOVANA_CODCCOSTO,row->get());
TImporto totdoc; TImporto imp(sezione, real(esso.get()));
imp.normalize();
rmov.put(RMOVANA_SEZIONE, imp.sezione());
rmov.put(RMOVANA_IMPORTO, imp.valore());
TGeneric_distrib esso(valore, decimals); totdoc += imp;
init_distrib(conti, esso);
FOR_EACH_ARRAY_ROW(conti, i, row)
{
if (mov == NULL)
{
mov = new TAnal_mov;
mov->put(MOVANA_DATAREG, datareg);
mov->put(MOVANA_DATACOMP, datacomp);
mov->put(MOVANA_ANNOES, annoes);
mov->put(MOVANA_NUMREGCG, numreg_cg);
mov->put(MOVANA_DESCR, descr);
}
TRectype& rmov = mov->new_row();
rmov.put(RMOVANA_ANNOES, annoes);
rmov.put(RMOVANA_CODCONTO, row->get(0));
rmov.put(RMOVANA_CODCMS, row->get());
rmov.put(RMOVANA_CODFASE, row->get());
rmov.put(RMOVANA_CODCCOSTO,row->get());
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;
}
} }
} }
if (can_write)
{
totdoc.normalize();
mov.put(MOVANA_SEZIONE, totdoc.sezione());
mov.put(MOVANA_TOTDOC, totdoc.valore());
TLocalisamfile movana(LF_MOVANA);
if (numreg_ca > 0)
mov.rewrite(movana);
else
{
mov.write(movana);
numreg_ca = mov.get_long(MOVANA_NUMREG);
doc.put(DOC_NUMREGCA, numreg_ca);
}
if (viswin != NULL)
{
msg.format(FR("--- Movimento analitico $[r,w]%ld$[n,w] del %s"), numreg_ca, datacomp.string());
viswin->add_line(msg);
}
}
return can_write; return can_write;
} }