diff --git a/ha/hacnv100a.ini b/ha/hacnv100a.ini index 455597ace..f1219acc2 100755 --- a/ha/hacnv100a.ini +++ b/ha/hacnv100a.ini @@ -575,6 +575,16 @@ CONTI_MOV = 3,1,0|3,5,0|3,45,2|3,45,3|5,601,127|5,601,137|5,601,295|6,1,8|6,1,9| IVA_ESENTE = 999 CONTO_OMAGGI=8|15|22 +[Indetraibilita] +072=9 +076=9 +079=9 +210=E +215=D +220=A +320=C +I50=B + // parametri generali della maschera (dns user password) [Main] 201 = hardy diff --git a/ha/hacnv200.cpp b/ha/hacnv200.cpp index 1288f355b..e67df5b9a 100755 --- a/ha/hacnv200.cpp +++ b/ha/hacnv200.cpp @@ -45,7 +45,6 @@ protected: void rec2ini(const TRectype& rec); void recset2rec(const TODBC_recordset& recset, TRectype& rec, const TString_array& lista_campi); real get_imponibile(const TRectype& rec); - real get_netto(const TRectype& rec, const real & lordo); public: virtual bool trasferisci(); @@ -338,31 +337,16 @@ real THardy_movimenti::get_imponibile(const TRectype& rec) const TString& gruppo = cache().get(LF_RCAUSALI, causale, RCA_GRUPPO); if (gruppo.blank()) { - real& perc = (real&)_ivaind->find(codiva); - imponibile = imponibile+(imponibile*perc)/CENTO; + real imposta = rec.get_real(RMI_IMPOSTA); + TString& codind = (TString&)_ivaind->find(codiva); + real perc(cache().get("%DET", codind, "R0")); + imposta = (imposta*perc)/CENTO + 0,01; + imposta.round(2); } } return imponibile; } -real THardy_movimenti::get_netto(const TRectype& rec, const real & lordo) -{ - real val = lordo; - const char* codiva = rec.get(RMI_CODIVA); - if (_ivaind->is_key(codiva)) - { - TString16 causale = get_str("IdCausale"); - causale << "|4"; - const TString& gruppo = cache().get(LF_RCAUSALI, causale, RCA_GRUPPO); - if (gruppo.blank()) - { - real& perc = (real&)_ivaind->find(codiva); - val = (val * CENTO)/(CENTO + perc); - } - } - return val; -} - // gestisce tutto il procedimento di scrittura su ini delle righe iva e contabili bool THardy_movimenti::scrivi_righe() { @@ -426,6 +410,8 @@ bool THardy_movimenti::scrivi_righe() { TRectype& rec_rmoviva = *(TRectype*)_righeiva->objptr(i); const char* codiva = rec_rmoviva.get(RMI_CODIVA); + const TString* codind = (TString*)_ivaind->objptr(codiva); + TCodiceIVA c(codiva); const bool riga_omaggio = _ivaoma->is_key(codiva); real imponibile = get_imponibile(rec_rmoviva); @@ -439,11 +425,19 @@ bool THardy_movimenti::scrivi_righe() const real impon = rec_rmoviva.get_real(RMI_IMPONIBILE); const real iva = rec_rmoviva.get_real(RMI_IMPOSTA); c.imposta(importo); + // se il codice iva ha una indetraibilità, metto il codice di ind. nella riga iva + if (codind != NULL) + rec_rmoviva.put(RMI_TIPODET, *codind); rec_rmoviva.put(RMI_TIPOC, rec_rmov.get(RMV_TIPOC)); rec_rmoviva.put(RMI_GRUPPO, rec_rmov.get(RMV_GRUPPO)); rec_rmoviva.put(RMI_CONTO, rec_rmov.get(RMV_CONTO)); rec_rmoviva.put(RMI_SOTTOCONTO, rec_rmov.get(RMV_SOTTOCONTO)); - const real wimp = get_netto(rec_rmoviva, importo); + real wimp = impon ; + if (importo < imponibile) + { + wimp *= importo / imponibile; + wimp.round(2); + } const real wiva = c.imposta(wimp); if (importo < imponibile) { @@ -474,6 +468,9 @@ bool THardy_movimenti::scrivi_righe() if (!rec_rmoviva.empty()) { const char* codiva = rec_rmoviva.get(RMI_CODIVA); + const TString* codind = (TString*)_ivaind->objptr(codiva); + if (codind != NULL) + rec_rmoviva.put(RMI_TIPODET, *codind); const bool riga_omaggio = _ivaoma->is_key(codiva); real imponibile = rec_rmoviva.get_real(RMI_IMPONIBILE); real imposta = rec_rmoviva.get_real(RMI_IMPOSTA); @@ -529,6 +526,8 @@ bool THardy_movimenti::scrivi_righe() // procedura principale di conversione bool THardy_movimenti::trasferisci() { + TConfig& ini = config(); + // creazione array delle aliquote iva con % indetraibilità e degli omaggi // leggere la tabella hardy AliquoteIVA _ivaind->destroy(); @@ -545,8 +544,8 @@ bool THardy_movimenti::trasferisci() const int flomaggio = recset_iva.get("FlOmaggio").as_int(); if (ind != ZERO) { - real* oggetto = new real(); - _ivaind->add(codiva, (TObject*)oggetto); + TString4 oggetto = ini.get(codiva, "Indetraibilita"); + _ivaind->add(codiva, oggetto); } if (flomaggio > 0) { @@ -572,7 +571,6 @@ bool THardy_movimenti::trasferisci() query << "' ORDER BY DataMovimento "; TRecordset& recset = create_recordset(query); - TConfig& ini = config(); TString_array lista_campi; ini.list_variables(lista_campi, true, "MOV", true);