Patch level :4.0 nopatch

Files correlati     :cg7.exe
Ricompilazione Demo : [ ]
Commento            :enrichetta personal program


git-svn-id: svn://10.65.10.50/trunk@14781 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2007-01-23 11:42:17 +00:00
parent 71f1b43a1a
commit a1d8aab0db

View File

@ -281,12 +281,12 @@ protected:
int cerca_pagamento(const TBill& bill) const;
int cerca_costo(const TBill& bill) const;
bool test_swap(TCausale& caus, bool ritsoc) const;
real calcola_pagamento(TRectype& curpag_rec);
real calcola_pagamento(TRectype& curpag_rec, real& iva_indetraibile);
bool sottrai_iva(TMovimentoPN& pn, const TRectype& rigaiva);
void stringa_grcosot(TRecord_text& recrighe, const TString& zio);
long calcola_fattura_originale(long nreg) const;
bool calcola_imponibile_totdoc(const long nreg, const TRectype& pag_rec,
real& imponibile, real& totdoc, real& totpagato) const;
real& imponibile, real& totdoc, real& totpagato, real& iva_indetraibile) const;
public:
const real get_importo() {return _importo;}
@ -956,7 +956,7 @@ void TInvioP::lettura_conti(TAssoc_array& assoc, const char tipoconto)
}
}
bool TInvioP::calcola_imponibile_totdoc(const long nreg, const TRectype& pag_rec, real& imponibile, real& totdoc, real& totpagato) const
bool TInvioP::calcola_imponibile_totdoc(const long nreg, const TRectype& pag_rec, real& imponibile, real& totdoc, real& totpagato, real& iva_indetraibile) const
{
totpagato = pag_rec.get_real(PAGSCA_IMPORTO);
@ -1017,7 +1017,12 @@ bool TInvioP::calcola_imponibile_totdoc(const long nreg, const TRectype& pag_rec
imponibile += importo;
if (tipodet.full())
{
//serve per i casi speciali con fdr in regime fidcale diverso da quello..
//..della fattura
iva_indetraibile += iva;
imponibile += iva;
}
else
imposta += iva;
}
@ -1054,7 +1059,7 @@ bool TInvioP::calcola_imponibile_totdoc(const long nreg, const TRectype& pag_rec
return ok;
}
real TInvioP::calcola_pagamento(TRectype& curpag_rec)
real TInvioP::calcola_pagamento(TRectype& curpag_rec, real& iva_indetraibile)
{
//deve costruirsi la riga di partita che riguarda il documento di origine
//per prima cosa crea tale riga a partire dal pagamento, che ha una chiave lunghissima...
@ -1075,29 +1080,37 @@ real TInvioP::calcola_pagamento(TRectype& curpag_rec)
//dichiariamo una serie di simpatici real utilizzati in seguito
real totdoc,imponibile,totpagato;
if (calcola_imponibile_totdoc(nreg, curpag_rec, imponibile, totdoc, totpagato))
if (calcola_imponibile_totdoc(nreg, curpag_rec, imponibile, totdoc, totpagato, iva_indetraibile))
{
const real percentuale = totpagato /totdoc;
//cerca se esiste una fattura da ricevere anteriore alla fattura da pagare
const long fdr = calcola_fattura_originale(nreg);
//se la trova deve tenerne conto in quanto la presente fattura (nreg) potrebbe pagare solo..
//..una parte della fdr originale
if (fdr != nreg)
{
real imponibile_fdr, totdoc_fdr, totpagato_fdr;
if (calcola_imponibile_totdoc(fdr, curpag_rec, imponibile_fdr, totdoc_fdr, totpagato_fdr))
real imponibile_fdr, totdoc_fdr, totpagato_fdr, iva_indetraibile_fdr;
//riutilizza la calcola_imponibile_totdoc per l'fdr;si fa notare che in questo caso gli..
//..ultimi due parametri del metodo sono del tutto inutili
if (calcola_imponibile_totdoc(fdr, curpag_rec, imponibile_fdr, totdoc_fdr, totpagato_fdr, iva_indetraibile_fdr))
{
const real rapporto_pagati = totdoc / totdoc_fdr;
const real rapporto_imponibili = imponibile_fdr / imponibile;
//la fattura con totdoc paga una parte di una precedente fdr con totdoc maggiore!
//in questo caso totpagato e' quello della fattura e deve uscire senza ricalcolare..
//..percentuali e cazzi vari
//..percentuali e cazzi vari (funziona ststisticamente!)
if (rapporto_pagati >= 0.7)
imponibile = imponibile_fdr;
}
} //if(fdr!=nreg..
else //se non esiste una fdr eventuali ive indetraibili non sussistono
iva_indetraibile = ZERO;
//calcolo finale del pagato
totpagato = imponibile * percentuale;
totpagato.round(2);
}
} //if(calcola_imponibile_totdoc(nreg,...
return totpagato;
}
@ -1187,17 +1200,20 @@ bool TInvioP::i_proforma_pagamenti()
const tipo_movimento tipomov = (tipo_movimento)cur_rec.get_int(MOV_TIPOMOV);
if (tipomov == tm_pagamento || tipomov == tm_nota_credito || tipomov == tm_pagamento_insoluto)
{
//attraverso le partite,noto il MOV_NUMREG,riesce a collegarsi al pagamento in LF_PAGSCA
TRelation relpart(LF_PARTITE);
TRectype da(LF_PARTITE);
da.put(PART_NREG, cur_rec.get(MOV_NUMREG));
TCursor curpart(&relpart, "", 2, &da, &da);
const long curpart_items = curpart.items();
//se trova la partita relativa al numreg...
if (curpart_items != 0)
{
curpart.freeze();
TRectype& curpart_rec = curpart.curr();
TRelation relpag(LF_PAGSCA);
TRectype da(LF_PAGSCA);
//..collega i pagamenti filtrando con i parametri estratti dalle partite
for (curpart = 0; curpart.pos() < curpart_items; ++(curpart))
{
da.put(PAGSCA_TIPOC, curpart_rec.get(PART_TIPOCF));
@ -1211,6 +1227,10 @@ bool TInvioP::i_proforma_pagamenti()
filtro.format("NRIGP == %d", nrigapart);
TCursor curpag(&relpag, filtro, 1, &da, &da);
const long curpag_items = curpag.items();
real iva_indet = ZERO; //valore dell'eventuale iva indetraibile
//se trova i pagamenti,che sono alla fin fine cio' che cerca...
if (curpag_items != 0)
{
TAssoc_array pagame;
@ -1230,13 +1250,14 @@ bool TInvioP::i_proforma_pagamenti()
pi->_accsal = 'A';
pagame.add(indice, pi);
}
const real importo_pagato = calcola_pagamento(curpag_rec); //aggiunta nuova!!!
//ricava l'importo del pagamento e lo aggiunge al memorizzatore
const real importo_pagato = calcola_pagamento(curpag_rec, iva_indet);
pi->_somma += importo_pagato;
if (curpag_rec.get_char(PAGSCA_ACCSAL) == 'S')
pi->_accsal = 'S';
}
// scrivo i record risultanti
// scrive i record risultanti
for (TPay_info* pi = (TPay_info*)pagame.first_item(); pi != NULL; pi = (TPay_info*)pagame.succ_item())
{
TToken_string keypart;
@ -1252,11 +1273,23 @@ bool TInvioP::i_proforma_pagamenti()
_nregcosto = calcola_fattura_originale(nregfatt);
_importo = pi->_somma;
_accsal = pi->_accsal;
//..e finalmente scrive 'sta minchia di riga
TRecord_text recpag;
recpag.set_type("G");
trasfilepag->autoload(recpag, curpag);
trasfilepag->write(recpag);
//se ha una riga di iva indetraibile dovuta al cambio regime fiscale 2005->2006..
//..deve aggiungere una ulteriore riga!!
if (iva_indet > ZERO)
{
_nregcosto = nregfatt;
_importo = iva_indet;
_accsal = 'S';
recpag.set_type("G");
trasfilepag->autoload(recpag, curpag);
trasfilepag->write(recpag);
}
}
}//if curpag_items..