Patch level : 2.2 210

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

Bug 0000522

 La contabilizzazione analitica non considera l'indetraibilità sui dicumenti di acquisto


git-svn-id: svn://10.65.10.50/trunk@13465 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2005-10-28 19:41:48 +00:00
parent cdcf43cc70
commit ba935d2176
2 changed files with 110 additions and 3 deletions

View File

@ -473,6 +473,7 @@ class TContabilizzazione_analitica : public TElaborazione // velib04f
protected:
bool search_costo_ricavo(const TRiga_documento& riga, TBill& conto);
bool find_conti_iva_indetraibile(const TRiga_documento& riga, const TBill & bill, TString_array& conti);
bool find_conti(const TRiga_documento& riga, TString_array& conti);
void init();

View File

@ -251,6 +251,57 @@ bool TContabilizzazione_analitica::search_costo_ricavo(const TRiga_documento& r,
return conto.ok() && conto.find();
}
bool TContabilizzazione_analitica::find_conti_iva_indetraibile(const TRiga_documento& riga, const TBill & bill, TString_array& conti)
{
const TString80 riga_cos = riga.codice_costo();
const TString80 riga_cms = riga.codice_commessa();
const TString16 riga_fsc = riga.fase_commessa();
const bool riga_any = riga_cos.not_empty() || riga_cms.not_empty() || riga_fsc.not_empty();
if (_usepdcc)
{
TToken_string conto;
conto.format("%03d%03d%06ld", bill.gruppo(), bill.conto(), bill.sottoconto());
if (riga_any)
{
conto.add(riga_cos, 1);
conto.add(riga_cms, 2);
conto.add(riga_fsc, 3);
}
conto.add(100, 4);
conti.add(conto);
}
else
{
// Cerca la ripartizione del conto
const TRecord_array& rip = _rip.righe(bill);
TToken_string conto;
for (int i = 1; i <= rip.rows(); i++)
{
const TRectype& rigarip = rip.row(i);
conto = rigarip.get(RRIP_CODCONTO);
if (riga_any)
{
conto.add(riga_cos, 1);
conto.add(riga_cms, 2);
conto.add(riga_fsc, 3);
}
else
{
conto.add(rigarip.get(RRIP_CODCOSTO), 1);
conto.add(rigarip.get(RRIP_CODCMS), 2);
conto.add(rigarip.get(RRIP_CODFASE), 3);
}
conto.add(rigarip.get(RRIP_RIPARTO), 4);
conti.add(conto);
}
}
return !conti.empty();
}
bool TContabilizzazione_analitica::find_conti(const TRiga_documento& riga, TString_array& conti)
{
bool bArcticleFound = false;
@ -367,6 +418,7 @@ bool TContabilizzazione_analitica::elabora(TDocumento& doc, long numreg_cg, TVis
int annoes = 0;
TString descr, msg, codcaus;
bool dare = false;
TCausale & caus = (TCausale &) doc2caus(doc);
if (numreg_cg > 0)
{
@ -375,7 +427,6 @@ bool TContabilizzazione_analitica::elabora(TDocumento& doc, long numreg_cg, TVis
datacomp = mov_cg.get_date(MOV_DATACOMP);
annoes = mov_cg.get_int(MOV_ANNOES);
descr = mov_cg.get(MOV_DESCR);
TCausale & caus = (TCausale &) doc2caus(doc);
dare = !(caus.sezione_clifo() == 'D');
}
else
@ -388,7 +439,6 @@ bool TContabilizzazione_analitica::elabora(TDocumento& doc, long numreg_cg, TVis
descr = doc.tipo().descrizione();
const TString8 rif = doc.get(DOC_NUMDOCRIF);
TCausale & caus = (TCausale &) doc2caus(doc);
codcaus = caus.codice();
const bool use_rif = caus.iva() == iva_acquisti && rif.not_empty();
if (use_rif)
@ -440,6 +490,8 @@ bool TContabilizzazione_analitica::elabora(TDocumento& doc, long numreg_cg, TVis
TImporto totdoc; // Totale movimento analitico
const TipoIVA tiva = caus.iva();
TBill bill; caus.bill(RIGA_IVA_NON_DETRAIBILE, bill);
// Scandisco le righe del documento,
for (int i = 1; i <= doc.physical_rows(); i++)
@ -453,7 +505,60 @@ bool TContabilizzazione_analitica::elabora(TDocumento& doc, long numreg_cg, TVis
// salto valori nulli
const real qta = riga.get(RDOC_QTA);
// const real valore = riga.valore(true, decimals);
const real valore = riga.importo(true, false);
real valore = riga.importo(true, false);
if (valore.is_zero())
continue;
if (tiva != iva_vendite)
{
real pind = ZERO;
if (tiva != nessuna_iva)
{
const int annodoc = doc.get_date(DOC_DATADOC).year();
if (caus.reg().prorata100(annodoc))
pind = CENTO;
}
if (pind == ZERO)
pind = riga.tipo().perc_indetraibilita();
if (pind > ZERO)
{
const real ivaind = (riga.imposta(false) * pind) / CENTO;
if (bill.ok())
{
if (bill.is_analitico())
{
TString_array conti_ind;
if (find_conti_iva_indetraibile(riga, bill, conti_ind)) //qui
{
TGeneric_distrib esso(ivaind, decimals);
init_distrib(conti_ind, esso);
FOR_EACH_ARRAY_ROW(conti_ind, j, row_ind)
{
TRectype& rmov = mov.new_row();
rmov.put(RMOVANA_ANNOES, annoes);
rmov.put(RMOVANA_CODCONTO, row_ind->get(0));
rmov.put(RMOVANA_CODCCOSTO,row_ind->get());
rmov.put(RMOVANA_CODCMS, row_ind->get());
rmov.put(RMOVANA_CODFASE, row_ind->get());
rmov.put(RMOVANA_DESCR, riga.get(RDOC_DESCR));
TImporto imp(sezione, real(esso.get()));
imp.normalize();
rmov.put(RMOVANA_SEZIONE, imp.sezione());
rmov.put(RMOVANA_IMPORTO, imp.valore());
totdoc += imp;
}
}
}
}
else
valore += ivaind;
}
}
if (valore.is_zero())
continue;
@ -473,6 +578,7 @@ bool TContabilizzazione_analitica::elabora(TDocumento& doc, long numreg_cg, TVis
}
TGeneric_distrib esso(valore, decimals);
init_distrib(conti, esso);
FOR_EACH_ARRAY_ROW(conti, i, row)
{