Patch level :2.1 nopatch

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :aggiunto trattamento del prorata alla stampa pagato


git-svn-id: svn://10.65.10.50/trunk@12162 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2004-06-07 15:37:50 +00:00
parent ed0dc61668
commit ba79bf3f29

View File

@ -629,29 +629,100 @@ void TPag_per_cms::find_commesse(const long nreg, const TRectype& riga_pag)
pn.curr().put(MOV_NUMREG, nreg);
if (pn.read() == NOERR)
{
//il totale documento deve tener conto delle ritenute fiscali e sociali
const real totdoc = pn.curr().get_real(MOV_TOTDOC) + pn.curr().get_real(MOV_RITFIS) - pn.curr().get_real(MOV_RITSOC);
const real totpagato = riga_pag.get_real(PART_IMPORTO);
const real percentuale = totpagato / totdoc;
real totdoc_cms;
real totdoc;
TAssoc_array commesse;
for (int i = 0; i < pn.iva_items(); i++)
//se movimento iva..
if (pn.iva_items() > 0)
{
const TRectype& rmoviva = pn.iva(i);
const TString& codcms = rmoviva.get(RMI_CODCMS);
const TString& codfase = rmoviva.get(RMI_FASCMS);
if (cms_in_range(codcms, codfase))
for (int i = 0; i < pn.iva_items(); i++)
{
real* imp = (real*)commesse.objptr(codcms);
if (imp == NULL)
const TRectype& rmoviva = pn.iva(i);
const TString& codcms = rmoviva.get(RMI_CODCMS);
const TString& codfase = rmoviva.get(RMI_FASCMS);
if (cms_in_range(codcms, codfase))
{
imp = new real;
commesse.add(codcms, imp);
const real importo = rmoviva.get_real(RMI_IMPONIBILE);
real imposta = rmoviva.get_real(RMI_IMPOSTA);
real* imp = (real*)commesse.objptr(codcms);
if (imp == NULL)
{
imp = new real;
commesse.add(codcms, imp);
}
*imp += importo;
totdoc_cms += importo;
if (imposta != ZERO)
{
//controllo prorata
const TRectype& pla = cache().get("CMS", codcms);
const bool prorata = pla.get_bool("B4");
if (prorata)
{
const TDate datareg = pn.curr().get_date(MOV_DATAREG);
const int anno = datareg.year();
TRegistro registro(pn.curr().get(MOV_REG), anno);
imposta *= (CENTO - registro.prorata(anno))/CENTO;
imposta.round(TCurrency::get_firm_dec()); //ci vanno i decimali della ditta
}
*imp += imposta;
totdoc_cms += imposta;
}
}
real importo = rmoviva.get_real(RMI_IMPONIBILE) + rmoviva.get_real(RMI_IMPOSTA);
*imp += importo;
}
totdoc = pn.curr().get_real(MOV_TOTDOC);
}
else //..movimento NON iva
{
for (int i = 0; i < pn.cg_items(); i++)
{
const TRectype& rmov = pn.cg(i);
const TBill conto(rmov);
if (conto.tipo() > ' ')
continue;
if (cerca_fiscali(conto) || cerca_sociali(conto))
continue;
TImporto importo(rmov.get_char(RMV_SEZIONE), rmov.get_real(RMV_IMPORTO));
importo.normalize('D');
const TString& codcms = rmov.get(RMV_CODCMS);
const TString& codfase = rmov.get(RMV_FASCMS);
if (cms_in_range(codcms,codfase))
{
real* imp = (real*)commesse.objptr(codcms);
if (imp == NULL)
{
imp = new real;
commesse.add(codcms, imp);
}
*imp += importo.valore();
totdoc_cms += importo.valore();
}
totdoc += importo.valore();
}
}
const real totpagato = riga_pag.get_real(PART_IMPORTO);
const real percentuale = totpagato / totdoc;
TGeneric_distrib distributore(totdoc_cms * percentuale, TCurrency::get_firm_dec());
{
FOR_EACH_ASSOC_OBJECT(commesse, h, k, imp)
{
const real& impcms = *(real*)imp;
distributore.add(impcms);
}
}
FOR_EACH_ASSOC_OBJECT(commesse, h, k, imp)
{
const real& impcms = *(real*)imp;
@ -659,7 +730,7 @@ void TPag_per_cms::find_commesse(const long nreg, const TRectype& riga_pag)
ppcs->_tipo = 0; //movimenti da saldaconto
ppcs->_codforn = riga_pag.get_long(PART_SOTTOCONTO);
ppcs->_datapag = riga_pag.get_date(_campodata);
ppcs->_importopagato.set_num(impcms * percentuale); //pagamento nella partita
ppcs->_importopagato.set_num(distributore.get()); //pagamento nella partita
ppcs->_descrpagamento = riga_pag.get(PART_DESCR);
ppcs->_nreg = nreg;
@ -685,7 +756,7 @@ void TPag_per_cms::add_importo(TAssoc_array& assoc, const TRectype& rmov) const
importo = new TImporto;
assoc.add(chiave,importo);
}
//incremento l'importo del conto commessa con l'importo movimento (iportocontocms += importormov)
//incremento l'importo del conto commessa con l'importo movimento (importocontocms += importormov)
const char sezione = rmov.get_char(RMV_SEZIONE);
const real valore = rmov.get_real(RMV_IMPORTO);
const TImporto imp(sezione, valore);
@ -710,10 +781,6 @@ void TPag_per_cms::find_commesse_cg(const long nreg)
add_importo(_righecosti, rmov);
else if (cerca_pagamento(conto))
add_importo(_righepagamenti, rmov);
else if (cerca_fiscali(conto))
add_importo(_righefiscali, rmov);
else if (cerca_sociali(conto))
add_importo(_righesociali, rmov);
}
}
}