diff --git a/ha/hacnv100a.ini b/ha/hacnv100a.ini index b8cb1040b..2525f9f7a 100755 --- a/ha/hacnv100a.ini +++ b/ha/hacnv100a.ini @@ -573,6 +573,7 @@ FOR_GRUPPO = 5 FOR_CONTO = 601 GRUPPI_MOV = 3|6|7|8 IVA_ESENTE = 999 +CONTO_OMAGGI=8|15|22 // parametri generali della maschera (dns user password) [Main] diff --git a/ha/hacnv200.cpp b/ha/hacnv200.cpp index 5b1d6fc7a..7abe43f30 100755 --- a/ha/hacnv200.cpp +++ b/ha/hacnv200.cpp @@ -350,7 +350,8 @@ bool THardy_movimenti::scrivi_righe() TString paragraph; int nrigai = 1; // contatore righe iva TConfig& ini = config(); - TString8 ivaesente = ini.get("IVA_ESENTE", "Parametri"); + TString8 iva_esente = ini.get("IVA_ESENTE", "Parametri"); + TToken_string conto_omaggi = ini.get("CONTO_OMAGGI", "Parametri"); TToken_string gruppi_mov = ini.get("GRUPPI_MOV", "Parametri"); // se è un movimento iva metto in atto il meccanismo di ricerca per assegnare le aliquote ai conti if (_righeiva->items()>0) @@ -369,13 +370,15 @@ bool THardy_movimenti::scrivi_righe() for (int i=0;i<_righeiva->items();i++) { TRectype& rec_rmoviva = *(TRectype*)_righeiva->objptr(i); + const char* codiva = rec_rmoviva.get(RMI_CODIVA); + const bool riga_omaggio = _ivaoma->is_key(codiva); real imponibile = get_imponibile(rec_rmoviva); for (int j=0;j<_righecont->items();j++) { TRectype& rec_rmov = *(TRectype*)_righecont->objptr(j); real importo = rec_rmov.get_real(RMV_IMPORTO); - if (importo == imponibile) + if ((!riga_omaggio) && (importo == imponibile)) { rec_rmoviva.put(RMI_TIPOC, rec_rmov.get(RMV_TIPOC)); rec_rmoviva.put(RMI_GRUPPO, rec_rmov.get(RMV_GRUPPO)); @@ -384,19 +387,6 @@ bool THardy_movimenti::scrivi_righe() paragraph.format("%d,%d",LF_RMOVIVA, nrigai++); _conf->set_paragraph(paragraph); // riga iva rec2ini(rec_rmoviva); - const char* codiva = rec_rmoviva.get(RMI_CODIVA); - // se iva utilizzata per gli omaggi, devo fare un'altra riga iva identica ma con importo avere con iva esente - if (_ivaoma->is_key(codiva)) - { - paragraph.format("%d,%d",LF_RMOVIVA, nrigai++); - _conf->set_paragraph(paragraph); // riga iva - rec2ini(rec_rmoviva); - // sostituisco codice iva e importo (-) - importo = -importo; - _conf->set(RMI_CODIVA, ivaesente); // codice iva esente per quadrare il movimento - _conf->set(RMI_IMPONIBILE, importo.string(0,2)); // imponibile negativo - _conf->set(RMI_IMPOSTA, ""); // imposta zero - } _righecont->destroy(j, true); j = _righecont->items(); // _righeiva->destroy(i); @@ -411,6 +401,8 @@ bool THardy_movimenti::scrivi_righe() TRectype& rec_rmoviva = *(TRectype*)_righeiva->objptr(i); if (!rec_rmoviva.empty()) { + const char* codiva = rec_rmoviva.get(RMI_CODIVA); + const bool riga_omaggio = _ivaoma->is_key(codiva); real imponibile = rec_rmoviva.get_real(RMI_IMPONIBILE); real imposta = rec_rmoviva.get_real(RMI_IMPOSTA); TGeneric_distrib dimponibile(imponibile, ndec); @@ -437,6 +429,22 @@ bool THardy_movimenti::scrivi_righe() _conf->set_paragraph(paragraph); // riga iva rec2ini(rec_rmoviva); } + // se iva utilizzata per gli omaggi, devo fare un'altra riga iva identica ma con importo avere con iva esente e gr/co/so letto da configurazione CONTO_OMAGGI + if (riga_omaggio) + { + paragraph.format("%d,%d",LF_RMOVIVA, nrigai++); + _conf->set_paragraph(paragraph); // riga iva + rec2ini(rec_rmoviva); + // sostituisco codice iva e importo (-) e gruppo conto sottoconto + imponibile = -imponibile; + _conf->set(RMI_CODIVA, iva_esente); // codice iva esente per quadrare il movimento + _conf->set(RMI_IMPONIBILE, imponibile.string(0,2)); // imponibile negativo + _conf->set(RMI_IMPOSTA, ""); // imposta zero + _conf->set(RMI_TIPOC, ""); + _conf->set(RMI_GRUPPO, conto_omaggi.get(0)); + _conf->set(RMI_CONTO, conto_omaggi.get(1)); + _conf->set(RMI_SOTTOCONTO, conto_omaggi.get(2)); + } } } _righecont->destroy();