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
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
78
79
CODNUM|1|4|0|Codice della numerazione
ANNO|2|4|0|Anno
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
NUMREG|3|7|0|Numero movimento contabilizzato
NUMANT|3|7|0|Numero movimento anticipo contabilizzato
NUMREGCA|3|7|0|Numero di operazione contabilita' analitica
4
PROVV+ANNO+CODNUM+NDOC|
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());
TRiga_documento & riga = new_row(tipo);
riga.put("CODART", s);
riga.put(RDOC_CODART, s);
riga.generata();
riga.put("DESCR", sp.descrizione());
riga.put(RDOC_DESCR, sp.descrizione());
switch (sp.tipo())
{
case 'Q':
@ -2199,13 +2199,13 @@ void TDocumento::update_spese_aut(TString_array & spese_aut, bool preserve_old,
real prezzo = sp.prezzo();
sppr_calc(sp, valuta, cambio, prezzo, controeuro);
riga.put("PREZZO", prezzo);
riga.put("UMQTA", sp.um());
riga.put(RDOC_PREZZO, prezzo);
riga.put(RDOC_UMQTA, sp.um());
}
break;
case 'P':
default:
riga.put("QTA", sp.perc());
riga.put(RDOC_QTA, sp.perc());
break;
}
if (cod_iva_cli.empty())

View File

@ -352,7 +352,7 @@ protected:
error_type write_anticipo(TDocumento&);
// scrive il movimento INTRA
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
void aggiorna_saldi(TSaldo_agg& saldo, TMovimentoPN& mv, bool save);
@ -482,7 +482,7 @@ protected:
public:
virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
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(const TRectype& rec);

View File

@ -3,7 +3,6 @@
#include <execp.h>
#include <modaut.h>
#include <tabutil.h>
#include <progind.h>
#include <printer.h>
#include <viswin.h>
@ -14,6 +13,7 @@
#include "../cg/cgsaldac.h"
#include "../in/inlib01.h"
#include "../mg/anamag.h"
#include "../ca/movana.h"
#include <comuni.h>
#include <unloc.h>
@ -1443,7 +1443,7 @@ error_type TContabilizzazione::compile_head_mov_re(TDocumento& doc)
_viswin->add_line(msg);
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);
}
else
@ -2747,7 +2747,7 @@ error_type TContabilizzazione::write_all(TDocumento& doc, TMovimentoPN_VE & movi
err = movimento.write();
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;
}
// Aggiorno subito i saldi
@ -2773,7 +2773,7 @@ error_type TContabilizzazione::write_all(TDocumento& doc, TMovimentoPN_VE & movi
const TRectype& mov = _movimento->curr();
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);
_viswin->add_line(msg);
@ -2807,7 +2807,7 @@ error_type TContabilizzazione::write_all_re(TDocumento& doc, TMovimentoPN_VE & m
err = movimento.write();
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;
}
// Aggiorno subito i saldi
@ -2818,9 +2818,8 @@ error_type TContabilizzazione::write_all_re(TDocumento& doc, TMovimentoPN_VE & m
_total_docs++;
change_doc_status(doc);
TString msg("Generazione Movimento ");
msg << "$[b,w]" << _movimento->curr().get(MOV_NUMREG) << "$[n,w]";
TString msg(TR("--- Movimento contabile "));
msg << "$[b,w]" << _movimento->curr().get_long(MOV_NUMREG) << "$[n,w]";
msg << " del " << _movimento->curr().get(MOV_DATAREG);
_viswin->add_line(msg);
@ -3441,7 +3440,7 @@ error_type TContabilizzazione::write_intra(TDocumento& doc)
intra.put("TOTDOCIMM", totale_righe);
if (_caus->valintra() && codvali.empty())
{
TString8 codval(TCurrency::get_firm_val());
TString4 codval(TCurrency::get_firm_val());
if (codval.empty())
TCurrency::get_euro_val();
@ -3467,7 +3466,7 @@ error_type TContabilizzazione::write_intra(TDocumento& doc)
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
if (!_caus->link_analitica())
@ -3542,9 +3541,9 @@ void TContabilizzazione::aggiorna_saldi(TSaldo_agg& saldo, TMovimentoPN& mv, boo
void TContabilizzazione::display_error(TDocumento& doc)
{
TToken_string msg(256, '.');
const TString16 numerazione = doc.numerazione();
const TString4 numerazione = doc.numerazione();
const long numero = doc.numero();
const TString16 causale = _caus == NULL ? "" : _caus->codice();
const TString4 causale = _caus == NULL ? "" : _caus->codice();
switch (_error)
{
@ -3716,7 +3715,7 @@ bool TContabilizzazione::in_enabled() 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 char provv = doc.get_char(DOC_PROVV);
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);
}
const TString16 stato_doc = rec.get(DOC_STATO);
const TString16 stato_ok = stato_finale_doc_iniziale();
const TString4 stato_doc = rec.get(DOC_STATO);
const TString4 stato_ok = stato_finale_doc_iniziale();
return stato_doc == stato_ok;
}
static bool link_handler(int n, const char* nreg)
{
if (n == 0)
{
switch (n)
{
TRectype mov(LF_MOV);
mov.put(MOV_NUMREG, nreg);
return mov.edit();
case 0:
{
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;
}
@ -3778,6 +3790,7 @@ bool TContabilizzazione::elabora(TLista_documenti& doc_in, TLista_documenti& doc
TPrinter& p = printer();
p.links().add("Movimento Prima Nota |b|w", 0);
p.links().add("Movimento Analitico |r|w", 1);
p.setlinkhandler(link_handler);
_viswin = new TViswin(NULL, TR("Contabilizzazione documenti"), false, true, true);
_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;
int annoes = 0;
TString descr;
bool dare = true;
TString descr, msg;
bool dare = false;
if (numreg_cg > 0)
{
@ -365,7 +363,6 @@ bool TContabilizzazione_analitica::elabora(const TDocumento& doc, long numreg_cg
descr = mov_cg.get(MOV_DESCR);
TCausale & caus = (TCausale &) doc2caus(doc);
dare = !(caus.sezione_clifo() == 'D');
}
else
{
@ -375,10 +372,39 @@ bool TContabilizzazione_analitica::elabora(const TDocumento& doc, long numreg_cg
if (doc.is_nota_credito())
dare= !dare;
}
const char sezione = dare ? 'D' : 'A';
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++)
{
const TRiga_documento& riga = doc[i];
@ -406,52 +432,48 @@ bool TContabilizzazione_analitica::elabora(const TDocumento& doc, long numreg_cg
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);
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;
}
totdoc += imp;
}
}
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;
}