diff --git a/src/ve01/velib.h b/src/ve01/velib.h index b6ffa336f..3f5287c37 100644 --- a/src/ve01/velib.h +++ b/src/ve01/velib.h @@ -181,7 +181,6 @@ public: bool is_ritenuta() const { return tipo_ritenuta() != '\0'; } bool is_ritenuta_fiscale() const { return tipo_ritenuta() == RITENUTA_FISCALE; } bool is_ritenuta_sociale() const { return tipo_ritenuta() == RITENUTA_SOCIALE; } - const TString& codice_tipo_ritenuta() const { return get("S13").left(4); } const TString& tipo_riga() const { return get("S8"); } char genere() const; const TString& conto_analitico_vendite() const { return ((cod() == "ATR") || (cod() == "RSS")) ? EMPTY_STRING : get_tmp_string() = get("S1").sleft(20); } @@ -194,8 +193,9 @@ public: const int codtrib() const { return get_int("S10"); } const TRectype& rec_caus_770() const; const int caus_770() const { return get_int("I6"); } - const int quadro_770() const { return get_int("S12"); } - const int quadroLA_770() const { return get_int("S14"); } + const TString& quadro_770() const { return get("S12"); } + const TString& quadroLA_770() const { return get("S14"); } + const TString& codice_tipo_ritenuta() const { return get("S13").left(4); } const TString& codice_cassa_previdenziale() const { return get("S13").left(4); } bool sogg_a_rit() const { return get_bool("B0"); } bool spe_cal_rit() const { return get_bool("B1"); } @@ -1147,7 +1147,7 @@ public: real spese(const TString & tipo_spesa) const; real prestazioni() const; real ritenute(const char tipo = '\0', bool lordo = false, int ndec = AUTO_DECIMALS) const; - int find_riga_ritenute(const TSpesa_prest * sp, const char tipo = '\0', int from_row = 1); + int find_riga_ritenute(const char tipo = '\0', int from_row = 1); real provvigione(bool first = true, int ndec = AUTO_DECIMALS) const; real valore(bool totale, bool lordo = false, int ndec = AUTO_DECIMALS) const; diff --git a/src/ve01/velib03.cpp b/src/ve01/velib03.cpp index 6284c95d2..97e50336a 100644 --- a/src/ve01/velib03.cpp +++ b/src/ve01/velib03.cpp @@ -846,17 +846,17 @@ void TDocumento::copy_data(TRectype& dst, const TRectype& src) // Ripristina tutti i campi chiave set_key(dst, provv, anno, codnum, numdoc); dst.init_memo(RECORD_NON_FISICO); - if (is_riga) - { - dst.put(RDOC_NRIGA, nriga); - dst.put(RDOC_IDRIGA, idriga); - dst.zero(RDOC_MOVMAG); - const TString& memo = src.get(RDOC_DESCEST); - dst.put(RDOC_DESCEST, memo); + if (is_riga) + { + dst.put(RDOC_NRIGA, nriga); + dst.put(RDOC_IDRIGA, idriga); + dst.zero(RDOC_MOVMAG); + const TString& memo = src.get(RDOC_DESCEST); + dst.put(RDOC_DESCEST, memo); - const TString& g1 = src.get(RDOC_RG1); + const TString& g1 = src.get(RDOC_RG1); - dst.put(RDOC_RG1, g1); + dst.put(RDOC_RG1, g1); ((TRiga_documento &) dst).load_memo(); // ((TRiga_documento &)dst).reset_fields((TAuto_variable_rectype &)dst, false); ((TRiga_documento &)dst).set_fields((TAuto_variable_rectype &)src); @@ -1659,7 +1659,7 @@ int TDocumento::write_rewrite(TBaseisamfile & f, bool re) const const TString80 codcms(get(DOC_CODCMS)); const TString80 fascms(get(DOC_FASCMS)); const TString80 codcos(get(DOC_CODCOSTO)); - + /* if (get(DOC_TIPODOC).full() && tipo().causale().full()) { const TCausale & caus = cached_causale(tipo().causale()); @@ -1708,7 +1708,7 @@ int TDocumento::write_rewrite(TBaseisamfile & f, bool re) const } if (r.is_evadibile() && datacons.ok()) // on 27-9-2013 was if (r.is_evadibile() && is_ordine()) { - docevaso &= r.is_evasa(); + docevaso &= r.is_evasa(); const TDate dcons = r.get_date(RDOC_DATACONS); if (!dcons.ok()) r.put(RDOC_DATACONS, datacons); @@ -2278,45 +2278,45 @@ bool TDocumento::raggruppabile(const TDocumento& doc, TToken_string& campi) cons void TDocumento::set_fields(TAuto_variable_rectype & rec) { - if (tipo_valido()) + if (tipo_valido()) { - TTipo_documento& tipo_doc = (TTipo_documento&)tipo(); // first_formula() is NOT const - const TString& tot_doc = tipo_doc.totale_doc(); + TTipo_documento& tipo_doc = (TTipo_documento&)tipo(); // first_formula() is NOT const + const TString& tot_doc = tipo_doc.totale_doc(); - for (const TFormula_documento* f = tipo_doc.first_formula(); f; f = tipo_doc.succ_formula()) + for (const TFormula_documento* f = tipo_doc.first_formula(); f; f = tipo_doc.succ_formula()) { TExpr_documento* exp = f->expr(); - if (exp != nullptr) // Puo' succedere che sia NULL con dati incoerenti - { - if (tot_doc == f->name()) + if (exp != nullptr) // Puo' succedere che sia NULL con dati incoerenti + { + if (tot_doc == f->name()) { - TString16 tot_doc_netto(tot_doc); + TString16 tot_doc_netto(tot_doc); tot_doc_netto.insert("_"); const TFixed_string netto_def(exp->string()); - TExpr_documento netto_exp(netto_def, _numexpr, this); + TExpr_documento netto_exp(netto_def, _numexpr, this); - add_field(new TDocumento_variable_field(tot_doc_netto, netto_exp)); + add_field(new TDocumento_variable_field(tot_doc_netto, netto_exp)); - if (netto_def == "IMPONIBILI()+IMPOSTE()") - { - TExpr_documento tot_exp("IMPONIBILI(1)+IMPOSTE(1)", _numexpr, this); - add_field(new TDocumento_variable_field(tot_doc, tot_exp)); - } - else - { + if (netto_def == "IMPONIBILI()+IMPOSTE()") + { + TExpr_documento tot_exp("IMPONIBILI(1)+IMPOSTE(1)", _numexpr, this); + add_field(new TDocumento_variable_field(tot_doc, tot_exp)); + } + else + { TExpr_documento tot_exp(format("%s + _BOLLI(%s)", (const char *) tot_doc_netto, - (const char*)tot_doc_netto), _numexpr, this); - add_field(new TDocumento_variable_field(tot_doc, tot_exp)); - } - } - else - { + (const char*)tot_doc_netto), _numexpr, this); + add_field(new TDocumento_variable_field(tot_doc, tot_exp)); + } + } + else + { exp->set_doc(this); - add_field(new TDocumento_variable_field(f->name(), *exp)); - } - } - } + add_field(new TDocumento_variable_field(f->name(), *exp)); + } + } + } for (TVariable_field* src_field = rec.first_variable_field(); src_field != nullptr; src_field = rec.succ_variable_field()) @@ -2325,7 +2325,7 @@ void TDocumento::set_fields(TAuto_variable_rectype & rec) if (src_field->expression() == nullptr) put(fieldname, rec.get(fieldname)); } - } + } } real TDocumento::imponibile(bool spese, int ndec) const @@ -2918,23 +2918,23 @@ real TDocumento::ritenute(const char tipo, bool lordo, int ndec) const return val; } -int TDocumento::find_riga_ritenute(const TSpesa_prest * sp, const char tipo, int from_row) +int TDocumento::find_riga_ritenute(const char tipo, int from_row) { - sp = nullptr; const int nrows = rows(); int r = from_row; + bool found = false; for (; r <= nrows; r++) { TRiga_documento & riga = row(r); - if (riga.is_spese() && riga.spesa().tipo() == tipo) + if (riga.is_spese() && riga.spesa().tipo_ritenuta() == tipo) { - sp = (const TSpesa_prest *)& riga.spesa(); + found = true; break; } } - return sp == nullptr ? -1 : r ; + return found ? r : -1; } TPagamento& TDocumento::pagamento() @@ -3335,10 +3335,10 @@ void TDocumento::update_raee() void TDocumento::update_spese_aut(TString_array & spese_aut, bool preserve_old, TSheet_field* sh, bool force) { - const bool updated = get_bool(DOC_SPESEUPD); + const bool updated = get_bool(DOC_SPESEUPD); - if (!force && updated) - return; + if (!force && updated) + return; const bool interactive = sh != NULL; @@ -3376,70 +3376,70 @@ void TDocumento::update_spese_aut(TString_array & spese_aut, bool preserve_old, if (sp.read(s) != NOERR) warning_box("Codice spesa '%s' assente", (const char*)s); - else + else { const TString4 tipo(sp.tipo_riga()); TRiga_documento& riga = new_row(tipo); riga.put(RDOC_CODART, s); - riga.generata(); - riga.put(RDOC_DESCR, sp.descrizione()); - if (cod_iva_cli.blank()) - riga.put(RDOC_CODIVA, sp.cod_iva()); - else - riga.put(RDOC_CODIVA, cod_iva_cli); - switch (sp.tipo()) - { - case 'Q': - { + riga.generata(); + riga.put(RDOC_DESCR, sp.descrizione()); + if (cod_iva_cli.blank()) + riga.put(RDOC_CODIVA, sp.cod_iva()); + else + riga.put(RDOC_CODIVA, cod_iva_cli); + switch (sp.tipo()) + { + case 'Q': + { real qta = sp.qta(); if (qta == ZERO) qta = UNO; riga.put("QTA", qta); - } - // Continua perche' e' quantita' e valore - case 'V': - { - const real cambio = get_real(DOC_CAMBIO); - const TString4 valuta = get(DOC_CODVAL); - real prezzo = sp.prezzo(); + } + // Continua perche' e' quantita' e valore + case 'V': + { + const real cambio = get_real(DOC_CAMBIO); + const TString4 valuta = get(DOC_CODVAL); + real prezzo = sp.prezzo(); - sppr_calc(sp, valuta, cambio, prezzo); + sppr_calc(sp, valuta, cambio, prezzo); if (this->tipo().calcolo_lordo()) - { - prezzo = riga.iva().lordo(prezzo, ALL_DECIMALS); - riga.put(RDOC_PREZZOL, prezzo); - } - riga.put(RDOC_PREZZO, prezzo); - riga.put(RDOC_UMQTA, sp.um()); + { + prezzo = riga.iva().lordo(prezzo, ALL_DECIMALS); + riga.put(RDOC_PREZZOL, prezzo); } + riga.put(RDOC_PREZZO, prezzo); + riga.put(RDOC_UMQTA, sp.um()); + } + break; + case 'P': + default: + riga.put(RDOC_QTA, sp.perc()); break; - case 'P': - default: - riga.put(RDOC_QTA, sp.perc()); - break; - } + } if (cod_iva_cli.empty()) riga.put(RDOC_CODIVA, sp.cod_iva()); else riga.put(RDOC_CODIVA, cod_iva_cli); - riga.put(RDOC_CODCOSTO, sp.cdc()); - riga.put(RDOC_CODCMS, sp.cms()); - riga.put(RDOC_FASCMS, sp.fase()); - riga.cms2tipodet(); + riga.put(RDOC_CODCOSTO, sp.cdc()); + riga.put(RDOC_CODCMS, sp.cms()); + riga.put(RDOC_FASCMS, sp.fase()); + riga.cms2tipodet(); - if (interactive) - { - const int nrow = sh->insert(-1, FALSE); - riga.autoload(*sh); + if (interactive) + { + const int nrow = sh->insert(-1, FALSE); + riga.autoload(*sh); sh->check_row(nrow); } } } } } - put(DOC_SPESEUPD, true); + put(DOC_SPESEUPD, true); } void TDocumento::update_conai_qta() diff --git a/src/ve01/velib08.cpp b/src/ve01/velib08.cpp index e33c2733b..62a32f5fe 100644 --- a/src/ve01/velib08.cpp +++ b/src/ve01/velib08.cpp @@ -619,21 +619,20 @@ bool TDocumento::add_dati_generali(TXmlItem & dati_generali) dati_generali_doc.AddEnclosedText("Numero", complete_numdoc()); const real fiscali = ritenute('F'); - const TSpesa_prest * fiscale = nullptr; - - for (int r = find_riga_ritenute(fiscale, 'F'); r > 0; r = find_riga_ritenute(fiscale, 'F', r + 1)) + + for (int r = find_riga_ritenute('F'); r > 0; r = find_riga_ritenute('F', r + 1)) { - if (fiscali != ZERO && fiscale != nullptr) // ritenuta + const TSpesa_prest & fiscale = row(r).spesa(); + + if (fiscali != ZERO) // ritenuta { TXmlItem & ritenuta = dati_generali_doc.AddChild("DatiRitenuta"); - TString tipo; const TRiga_documento & rdoc = row(r); - tipo << fiscale->tipo_ritenuta(); - ritenuta.AddEnclosedText("TipoRitenuta", tipo); + ritenuta.AddEnclosedTextFull("TipoRitenuta", fiscale.codice_tipo_ritenuta()); ritenuta.AddEnclosedValue("ImportoRitenuta", rdoc.ritenuta()); - ritenuta.AddEnclosedAliquota("AliquotaRitenuta", fiscale->perc()); - ritenuta.AddEnclosedInt("CausalePagamento", fiscale->quadroLA_770()); + ritenuta.AddEnclosedAliquota("AliquotaRitenuta", fiscale.perc()); + ritenuta.AddEnclosedTextFull("CausalePagamento", fiscale.quadroLA_770()); } } if (bolli_esenti_dovuti()) // @@ -644,35 +643,30 @@ bool TDocumento::add_dati_generali(TXmlItem & dati_generali) bollo.AddEnclosedText("BolloVirtuale", "SI"); bollo.AddEnclosedValue("ImportoBollo", bolli_es); } - - const TSpesa_prest * previdenziale = nullptr; - - for (int r = find_riga_ritenute(previdenziale, 'S'); r > 0; r = find_riga_ritenute(previdenziale, 'S',r +1)) + for (int r = find_riga_ritenute('S'); r > 0; r = find_riga_ritenute('S',r +1)) { - if (previdenziale != nullptr) //cassa previdenziale - { - const real imponibile = prestazioni();//calc_ritenuta(rdoc.doc()); - const real importo_cassa = imponibile * previdenziale->perc() / CENTO; + const TSpesa_prest & previdenziale = row(r).spesa(); + const real imponibile = prestazioni();//calc_ritenuta(rdoc.doc()); + const real importo_cassa = imponibile * previdenziale.perc() / CENTO; // Inserisco il tutto nei dati riepilogo - TXmlItem & cassa = dati_generali_doc.AddChild("DatiCassaPrevidenziale"); + TXmlItem & cassa = dati_generali_doc.AddChild("DatiCassaPrevidenziale"); - cassa.AddEnclosedText("TipoCassa", previdenziale->codice_cassa_previdenziale()); - cassa.AddEnclosedReal("AlCassa", previdenziale->perc()); - cassa.AddEnclosedValue("ImportoContributoCassa", importo_cassa); - cassa.AddEnclosedValue("ImponibileCassa", imponibile); // qui + cassa.AddEnclosedText("TipoCassa", previdenziale.codice_cassa_previdenziale()); + cassa.AddEnclosedReal("AlCassa", previdenziale.perc()); + cassa.AddEnclosedValue("ImportoContributoCassa", importo_cassa); + cassa.AddEnclosedValue("ImponibileCassa", imponibile); // qui - const TCodiceIVA & i = cached_codIVA(previdenziale->cod_iva()); + const TCodiceIVA & i = cached_codIVA(previdenziale.cod_iva()); - cassa.AddEnclosedAliquota("AliquotaIVA", i.percentuale()); - if (previdenziale->sogg_a_rit()) - cassa.AddEnclosedText("Ritenuta", "SI"); - cassa.AddEnclosedText("Natura", i.natura()); + cassa.AddEnclosedAliquota("AliquotaIVA", i.percentuale()); + if (previdenziale.sogg_a_rit()) + cassa.AddEnclosedText("Ritenuta", "SI"); + cassa.AddEnclosedText("Natura", i.natura()); - TString rifamm = previdenziale->descrizione().sleft(30); + TString rifamm = previdenziale.descrizione().sleft(30); - cassa.AddEnclosedTextFull("RiferimentoAmministrazione", rifamm.trim()); - } + cassa.AddEnclosedTextFull("RiferimentoAmministrazione", rifamm.trim()); } /*if (false) //sconto qui Lo sconto in testata stato disabilitato in quanto su Campo influenza solo le righe merci mentre dovrebbe modificare tutte le righe { @@ -1194,20 +1188,20 @@ const TString& TDocumento::descrizione(const TRiga_documento& rdoc) { if (rdoc.get_bool(RDOC_DESCLUNGA)) { - TString& tmp = get_tmp_string(); + TString& tmp = get_tmp_string(); tmp << rdoc.get(RDOC_DESCR) << rdoc.get(RDOC_DESCEST); - tmp.replace('\n', ' '); - tmp.strip_double_spaces(); - tmp.trim(); - if (tmp.len() > 1000) - { - TString err; + tmp.replace('\n', ' '); + tmp.strip_double_spaces(); + tmp.trim(); + if (tmp.len() > 1000) + { + TString err; err << "Il documento " << rdoc.doc().anno() << " " << rdoc.doc().codice_numerazione().codice() << " " << rdoc.doc().numero() << " ha la riga numero " << rdoc.numero() << " pi lunga di quanto supportato dal formato dell'agenzia delle entrate, verr troncata a 1000 caratteri"; - get_xml_log()->log(1, err); - } + get_xml_log()->log(1, err); + } return tmp.left(1000); } return rdoc.get(RDOC_DESCR); @@ -2064,8 +2058,8 @@ bool TDocumento::get_bank(TTipo_pag tipo, TString& iban, TString& abi, TString& if (tipo == _bonfico) return get_bank_presentazione(iban, abi, cab, istituto); else - if (tipo == _ric_ban || tipo == _rid) - return get_bank_appoggio(iban, abi, cab, istituto); + if (tipo == _ric_ban || tipo == _rid) + return get_bank_appoggio(iban, abi, cab, istituto); return false; } @@ -2091,13 +2085,13 @@ bool TDocumento::get_bank_presentazione(TString& iban, TString& abi, TString& ca key.add(codcf()); key.add("N"); key.add(1); - const TRectype& cfban = cache().get(LF_CFBAN, key); + const TRectype& cfban = cache().get(LF_CFBAN, key); if (!cfban.empty()) { abi = cfban.get(CFBAN_ABI); cab = cfban.get(CFBAN_CAB); found = abi.full() && cab.full(); - iban = cfban.get(CFBAN_IBAN); + iban = cfban.get(CFBAN_IBAN); if (found && iban.blank()) get_bnp_iban(abi, cab, -1, iban); } @@ -2130,13 +2124,13 @@ bool TDocumento::get_bank_appoggio(TString& iban, TString& abi, TString& cab, TS key.add(codcf()); key.add("V"); key.add(1); - const TRectype& cfban = cache().get(LF_CFBAN, key); + const TRectype& cfban = cache().get(LF_CFBAN, key); if (!cfban.empty()) { const TString& abi_cf = cfban.get(CFBAN_ABI); const TString& cab_cf = cfban.get(CFBAN_CAB); const bool found_cf = abi_cf.full() && cab_cf.full(); - iban = cfban.get(CFBAN_IBAN); + iban = cfban.get(CFBAN_IBAN); if (found_cf && iban.blank()) get_bnp_iban(abi_cf, cab_cf, -1, iban); } @@ -2253,33 +2247,33 @@ bool TDocumento::add_allegati(TXmlItem & body) if (get_fp_bool_var(FP_ALLEG_FAT)) { - if (!tipo().main_print_profile(rep, 2)) - get_xml_log()->log(1, "Impossibile generare la fattura, non disponibile un profilo di stampa per questo tipo documento!"); - else - { - //ve1 -2 {CODNUM} {ANNO} {PROVV} {NDOC}(-{ANDOC}) {TIPO_ELABORAZIONE} {TIPO_STAMPA} {NUM_COPIE} {ARCHIVIAZIONE} - // Costruisco la chiamata - TString commandline = "ve011 -2 "; - - commandline << get(DOC_CODNUM) << ' ' << get(DOC_ANNO) << ' ' << get(DOC_PROVV) << ' ' << get(DOC_NDOC) << " X P 1 D"; // X: stampa su disco, P: provvisorio, 1: 1 copia, D: disabilita archiviazione - - TExternal_app interattivo(commandline); - - if (interattivo.run() != NOERR) - { - TString msgerr = "Fallita generazione PDF documento "; - msgerr << get(DOC_CODNUM) << ' ' << get(DOC_ANNO) << ' ' << get(DOC_PROVV) << ' ' << get(DOC_NDOC); - error_box(msgerr); - } + if (!tipo().main_print_profile(rep, 2)) + get_xml_log()->log(1, "Impossibile generare la fattura, non disponibile un profilo di stampa per questo tipo documento!"); else { - TFilename pdf; pdf.tempdir(); - pdf << SLASH << get(DOC_ANNO) << '_' << get(DOC_CODNUM) << '_' << get(DOC_NDOC) << ".pdf"; - if (!pdf.exist() && !yesno_box("Attenzione! Non stato possibile creare il pdf, continuare?")) - return false; - add_allegato(body, pdf, "Fattura di cortesia"); - } - } + //ve1 -2 {CODNUM} {ANNO} {PROVV} {NDOC}(-{ANDOC}) {TIPO_ELABORAZIONE} {TIPO_STAMPA} {NUM_COPIE} {ARCHIVIAZIONE} + // Costruisco la chiamata + TString commandline = "ve011 -2 "; + + commandline << get(DOC_CODNUM) << ' ' << get(DOC_ANNO) << ' ' << get(DOC_PROVV) << ' ' << get(DOC_NDOC) << " X P 1 D"; // X: stampa su disco, P: provvisorio, 1: 1 copia, D: disabilita archiviazione + + TExternal_app interattivo(commandline); + + if (interattivo.run() != NOERR) + { + TString msgerr = "Fallita generazione PDF documento "; + msgerr << get(DOC_CODNUM) << ' ' << get(DOC_ANNO) << ' ' << get(DOC_PROVV) << ' ' << get(DOC_NDOC); + error_box(msgerr); + } + else + { + TFilename pdf; pdf.tempdir(); + pdf << SLASH << get(DOC_ANNO) << '_' << get(DOC_CODNUM) << '_' << get(DOC_NDOC) << ".pdf"; + if (!pdf.exist() && !yesno_box("Attenzione! Non stato possibile creare il pdf, continuare?")) + return false; + add_allegato(body, pdf, "Fattura di cortesia"); + } + } } TToken_string allegati(get(DOC_CARTACEI), '\n'); @@ -2474,7 +2468,7 @@ bool TDocumento::generate_xml(TLog_report * log) if (update) { put(DOC_PRG_INVIO, prg); - set_fp_var(FP_PRG_INVIO, prg); + set_fp_var(FP_PRG_INVIO, prg); put(DOC_XML_NAME, fname); } if (get(DOC_STATO_SDI).blank()) @@ -3119,7 +3113,6 @@ bool TDocumento::get_dati_generali(TXmlItem & dati_generali, real & totale_imp) put(DOC_MESELIQ, datarif.month()); const real fiscali = ritenute('F'); - const TSpesa_prest * fiscale = nullptr; TXmlItem * ritenuta = dati_generali_doc->FindFirstChild("DatiRitenuta"); int child = 0; @@ -3127,16 +3120,14 @@ bool TDocumento::get_dati_generali(TXmlItem & dati_generali, real & totale_imp) { int riga_ritfisc = -1; - for (int r = find_riga_ritenute(fiscale, 'F'); riga_ritfisc < 0 && r > 0; r = find_riga_ritenute(fiscale, 'F', r + 1)) + for (int r = find_riga_ritenute('F'); riga_ritfisc < 0 && r > 0; r = find_riga_ritenute('F', r + 1)) { - if (fiscale != nullptr) // ritenuta - { - TString tipo; - const TRiga_documento & rdoc = row(r); + const TSpesa_prest & fiscale = row(r).spesa(); + TString tipo; + const TRiga_documento & rdoc = row(r); - if (ritenuta->GetEnclosedText("TipoRitenuta") == fiscale->codice_tipo_ritenuta()) - riga_ritfisc = r; - } + if (ritenuta->GetEnclosedText("TipoRitenuta") == fiscale.codice_tipo_ritenuta()) + riga_ritfisc = r; } if (riga_ritfisc < 0) { @@ -3181,7 +3172,6 @@ bool TDocumento::get_dati_generali(TXmlItem & dati_generali, real & totale_imp) } TXmlItem * cassaprev = dati_generali_doc->FindFirstChild("DatiCassaPrevidenziale"); - const TSpesa_prest * cassa = nullptr; child = 0; for (TXmlItem * cassaprev = dati_generali_doc->FindChild("DatiCassaPrevidenziale", child); cassaprev != nullptr; cassaprev = dati_generali_doc->FindChild("DatiCassaPrevidenziale", child)) @@ -3194,16 +3184,15 @@ bool TDocumento::get_dati_generali(TXmlItem & dati_generali, real & totale_imp) const bool soggrit = strsoggrit == "si"; - for (int r = find_riga_ritenute(cassa, 'S'); riga_ritsoc < 0 && r > 0; r = find_riga_ritenute(cassa, 'S', r + 1)) + for (int r = find_riga_ritenute('S'); riga_ritsoc < 0 && r > 0; r = find_riga_ritenute('S', r + 1)) { - if (cassa != nullptr) // ritenuta - { - TString tipo; - const TRiga_documento & rdoc = row(r); + const TSpesa_prest & cassa = row(r).spesa(); + TString tipo; + const TRiga_documento & rdoc = row(r); + + if (codicesdi == cassa.codice_cassa_previdenziale()) + riga_ritsoc = r; - if (codicesdi == cassa->codice_cassa_previdenziale()) - riga_ritsoc = r; - } } if (riga_ritsoc < 0) { @@ -3262,7 +3251,6 @@ bool TDocumento::get_dati_generali(TXmlItem & dati_generali, real & totale_imp) if (codiva.blank()) codiva = sp->cod_iva(); } - riga.put(RDOC_DESCR, sp->descrizione()); riga.put(RDOC_UMQTA, sp->um()); riga.put(RDOC_CODIVA, codiva);