diff --git a/src/tp/tp0900.cpp b/src/tp/tp0900.cpp index a10731ea9..2fbe32a7a 100755 --- a/src/tp/tp0900.cpp +++ b/src/tp/tp0900.cpp @@ -99,10 +99,10 @@ protected: bool scrivi_csv(const TRectype& prima_riga, TDichiarazione_CONAI_csv_recordset& csv, const TCONAI_class conai_specie, const TString & sottoclass, const TString& conai_codsp, TLog_report &log) const; - void scrivi_csv_doc_con_riga_generata(const TDocumento& doc, const int n_riga_generata, + void scrivi_csv_doc_generata(const TDocumento& doc, const int n_riga_generata, TDichiarazione_CONAI_csv_recordset& csv, const TCONAI_class conai_specie, const TString & sottoclass, const TString& conai_codsp, TLog_report &log) const; - void scrivi_csv_doc_rettifiche(const TDocumento& doc, TDichiarazione_CONAI_csv_recordset& csv, + void scrivi_csv_doc_not_generata(const TDocumento& doc, TDichiarazione_CONAI_csv_recordset& csv, const TCONAI_class conai_specie, const TString & sottoclass, const TString& conai_codsp) const; @@ -147,7 +147,7 @@ real TDichiarazione_CONAI::clifo_conai(const TCli_for& clifo, const TCONAI_class } //riempie recordset con le righe CONAI del documento che contiene una riga generata CONAI -void TDichiarazione_CONAI::scrivi_csv_doc_con_riga_generata(const TDocumento& doc, const int n_riga_generata, +void TDichiarazione_CONAI::scrivi_csv_doc_generata(const TDocumento& doc, const int n_riga_generata, TDichiarazione_CONAI_csv_recordset& csv, const TCONAI_class conai_specie, const TString & sottoclass, const TString& conai_codsp, TLog_report &log) const @@ -316,7 +316,7 @@ void TDichiarazione_CONAI::scrivi_csv_doc_con_riga_generata(const TDocumento& do //riempie recordset con le righe CONAI del documento che NON ha una riga generata CONAI; trattasi di documenti.. //..farlocchi costruiti ad arte per correggere le vaccate dei rompiscatolifici -void TDichiarazione_CONAI::scrivi_csv_doc_rettifiche(const TDocumento& doc, TDichiarazione_CONAI_csv_recordset& csv, +void TDichiarazione_CONAI::scrivi_csv_doc_not_generata(const TDocumento& doc, TDichiarazione_CONAI_csv_recordset& csv, const TCONAI_class conai_specie, const TString & sottoclass, const TString& conai_codsp) const { @@ -331,109 +331,129 @@ void TDichiarazione_CONAI::scrivi_csv_doc_rettifiche(const TDocumento& doc, TDic TString80 clifo_paiv; //cerca la percentuale di esenzione conai sul cliente (controllo const real cfven_perc_conai = clifo_conai(clifo, conai_specie, clifo_paiv, doc); + bool ok = cfven_perc_conai >= CENTO; - const int nrighe = doc.rows(); - - //ciclo di riempimento delle righe csv;scandisce solo l'array con i valori compilati - FOR_EACH_PHYSICAL_RDOC(doc, i, rdoc) + if (!ok) { - for (int j = 1; j <= FR_CMAX; j++) + bool has_rettifica = false; + + FOR_EACH_PHYSICAL_RDOC(doc, j, rdoc) { - TString4 sottocat = rdoc->get(conai_sottocat_name(j)); - - if (sottocat == sottoclass) + //c'è la riga generata con codart di tipo conai (sia automatica che manuale)? + if (rdoc->get(RDOC_CODART) == conai_codsp && !rdoc->is_generata()) { - real peso; - real prezzo; - const TRectype& spp = cache().get("SPP", conai_codsp); - - if (rdoc->is_merce()) - { - prezzo = spp.get_real("R10"); + has_rettifica = true; + break; + } + } + ok |= has_rettifica; + } - peso = rdoc->get_real(conai_peso_name(j)); - } - else - if (rdoc->is_spese() && !rdoc->is_generata() && rdoc->get(RDOC_CODART) == conai_codsp) + if (ok) + { + const int nrighe = doc.rows(); + + //ciclo di riempimento delle righe csv;scandisce solo l'array con i valori compilati + FOR_EACH_PHYSICAL_RDOC(doc, i, rdoc) + { + for (int j = 1; j <= FR_CMAX; j++) + { + TString4 sottocat = rdoc->get(conai_sottocat_name(j)); + + if (sottocat == sottoclass) + { + real peso; + real prezzo; + const TRectype& spp = cache().get("SPP", conai_codsp); + + if (rdoc->is_merce()) { - peso = rdoc->get_real(RDOC_QTA); - prezzo = rdoc->get_real(RDOC_PREZZO); //va preso dalla riga stessa + prezzo = spp.get_real("R10"); + + peso = rdoc->get_real(conai_peso_name(j)); } - if (sottocat == sottoclass && (peso != ZERO)) - { - //puo' capitare che la sottocategoria sia stata troncata alla categoria - if (sottocat.len() == 2) - sottocat << "99"; + else + if (rdoc->is_spese() && !rdoc->is_generata() && rdoc->get(RDOC_CODART) == conai_codsp) + { + peso = rdoc->get_real(RDOC_QTA); + prezzo = rdoc->get_real(RDOC_PREZZO); //va preso dalla riga stessa + } + if (sottocat == sottoclass && (peso != ZERO)) + { + //puo' capitare che la sottocategoria sia stata troncata alla categoria + if (sottocat.len() == 2) + sottocat << "99"; - //creazione di un nuovo record da esportare - csv.new_rec(""); + //creazione di un nuovo record da esportare + csv.new_rec(""); - //riempie i campi del record del csv - //codnum-anno-ndoc-datadoc-codcli-cofi-nriga-codagg1-sottocat-prezzo-um-conai(AB)-conai(B)-conai(A) - //parte chiave della riga - csv.set(0, rdoc->get(RDOC_CODNUM)); - csv.set(1, TVariant(rdoc->get(RDOC_ANNO))); - csv.set(2, TVariant(rdoc->get(RDOC_NDOC))); - csv.set(3, TVariant(datadoc)); - csv.set(4, TVariant(clifo.codice())); - csv.set(5, TVariant(clifo_paiv)); - csv.set(6, TVariant(rdoc->get(RDOC_CODART))); - csv.set(7, TVariant(rdoc->get(RDOC_NRIGA))); + //riempie i campi del record del csv + //codnum-anno-ndoc-datadoc-codcli-cofi-nriga-codagg1-sottocat-prezzo-um-conai(AB)-conai(B)-conai(A) + //parte chiave della riga + csv.set(0, rdoc->get(RDOC_CODNUM)); + csv.set(1, TVariant(rdoc->get(RDOC_ANNO))); + csv.set(2, TVariant(rdoc->get(RDOC_NDOC))); + csv.set(3, TVariant(datadoc)); + csv.set(4, TVariant(clifo.codice())); + csv.set(5, TVariant(clifo_paiv)); + csv.set(6, TVariant(rdoc->get(RDOC_CODART))); + csv.set(7, TVariant(rdoc->get(RDOC_NRIGA))); - //codici conai - csv.set(8, TVariant(sottocat.left(2))); //codice materiale conai (es. carta, legno...) - csv.set(9, TVariant(sottocat)); //sottocodice materiale (es. carta imballo, busta...) + //codici conai + csv.set(8, TVariant(sottocat.left(2))); //codice materiale conai (es. carta, legno...) + csv.set(9, TVariant(sottocat)); //sottocodice materiale (es. carta imballo, busta...) - //prezzo - csv.set(10, TVariant(prezzo)); + //prezzo + csv.set(10, TVariant(prezzo)); - //um conai - const TString4 umqta = spp.get("S7"); //unita' di misura dalla tabella SPP - csv.set(11, TVariant(umqta)); + //um conai + const TString4 umqta = spp.get("S7"); //unita' di misura dalla tabella SPP + csv.set(11, TVariant(umqta)); - //quantita' totale conai (A + B) sul report (le NAC hanno segno rovesciato) - real qta_tot_conai = rdoc->get_real(RDOC_QTA); - const real qta_unitaria_conai = rdoc->get_real(conai_peso_name(j)); + //quantita' totale conai (A + B) sul report (le NAC hanno segno rovesciato) + real qta_tot_conai = rdoc->get_real(RDOC_QTA); + const real qta_unitaria_conai = rdoc->get_real(conai_peso_name(j)); - if (qta_unitaria_conai != ZERO) - qta_tot_conai *= qta_unitaria_conai; - if (is_nac) - qta_tot_conai = -qta_tot_conai; - csv.set(15, TVariant(qta_tot_conai)); + if (qta_unitaria_conai != ZERO) + qta_tot_conai *= qta_unitaria_conai; + if (is_nac) + qta_tot_conai = -qta_tot_conai; + csv.set(15, TVariant(qta_tot_conai)); - //percentuale di esenzione conai al 100%? - const real rdoc_perc_conai = rdoc->get_real(conai_esenzione_name(conai_specie, LF_RIGHEDOC)); // ex QTAGG2 + //percentuale di esenzione conai al 100%? + const real rdoc_perc_conai = rdoc->get_real(conai_esenzione_name(conai_specie, LF_RIGHEDOC)); // ex QTAGG2 - //quantita' assoggettata (B) sul report (le NAC hanno segno rovesciato, ma avendolo gia' gia' rovesciato.. - //..in precedenza non deve fare nulla!) - real qta_assoggettata_conai = qta_tot_conai; + //quantita' assoggettata (B) sul report (le NAC hanno segno rovesciato, ma avendolo gia' gia' rovesciato.. + //..in precedenza non deve fare nulla!) + real qta_assoggettata_conai = qta_tot_conai; - //segnalazione Sirio 1767: nelle righe fatte a mano, se la % di esenzione sul cliente è 100% -> la qta_assoggettata_conai.. - //..viene azzerata; questo perchè la rdoc_perc_conai può non essere modificabile a mano (ponendola = 100) se il verig non.. - //..è personalizzato - if (rdoc_perc_conai >= CENTO || cfven_perc_conai >= CENTO) // Guy: Mi pare strano gestire solo il caso 100% - qta_assoggettata_conai = ZERO; + //segnalazione Sirio 1767: nelle righe fatte a mano, se la % di esenzione sul cliente è 100% -> la qta_assoggettata_conai.. + //..viene azzerata; questo perchè la rdoc_perc_conai può non essere modificabile a mano (ponendola = 100) se il verig non.. + //..è personalizzato + if (rdoc_perc_conai >= CENTO || cfven_perc_conai >= CENTO) // Guy: Mi pare strano gestire solo il caso 100% + qta_assoggettata_conai = ZERO; - csv.set(13, TVariant(qta_assoggettata_conai)); + csv.set(13, TVariant(qta_assoggettata_conai)); - //quantita' esente conai (A) sul report - const real qta_esente_conai = qta_tot_conai - qta_assoggettata_conai; //deve essere sempre ZERO! - csv.set(12, TVariant(qta_esente_conai)); + //quantita' esente conai (A) sul report + const real qta_esente_conai = qta_tot_conai - qta_assoggettata_conai; //deve essere sempre ZERO! + csv.set(12, TVariant(qta_esente_conai)); - //valore totale contributo (BxC) sul report - const real totale_contrib_conai = qta_assoggettata_conai * prezzo; - csv.set(14, TVariant(totale_contrib_conai)); + //valore totale contributo (BxC) sul report + const real totale_contrib_conai = qta_assoggettata_conai * prezzo; + csv.set(14, TVariant(totale_contrib_conai)); - //percentuale di esenzione conai - csv.set(16, TVariant(rdoc_perc_conai)); + //percentuale di esenzione conai + csv.set(16, TVariant(rdoc_perc_conai)); - //percentuale di esenzione conai in cfven - csv.set(17, TVariant(cfven_perc_conai)); - TString descr = cache().get("&VESCC", sottocat, "S2"); + //percentuale di esenzione conai in cfven + csv.set(17, TVariant(cfven_perc_conai)); + TString descr = cache().get("&VESCC", sottocat, "S2"); - if (descr.blank()) - descr = cache().get("&VESCC", sottocat, "S0"); - csv.set(18, descr); + if (descr.blank()) + descr = cache().get("&VESCC", sottocat, "S0"); + csv.set(18, descr); + } } } } @@ -454,9 +474,9 @@ bool TDichiarazione_CONAI::scrivi_csv(const TRectype& prima_riga, TDichiarazione #ifdef DBG //check di debug - if (numdoc == 1451) + if (numdoc == 935L) const int cazzone = 1; - if (numdoc == 5L) + if ((numdoc == 308L) || (numdoc == 343L)) int i = 1; #endif //documento della prima riga e quindi anche di tutte le altre righe conai @@ -517,23 +537,9 @@ bool TDichiarazione_CONAI::scrivi_csv(const TRectype& prima_riga, TDichiarazione } } if (n_riga_generata > 0) - scrivi_csv_doc_con_riga_generata(doc, n_riga_generata, csv, conai_specie, sottoclass, conai_codsp, log); + scrivi_csv_doc_generata(doc, n_riga_generata, csv, conai_specie, sottoclass, conai_codsp, log); else - { - bool has_rettifica = false; - - FOR_EACH_PHYSICAL_RDOC(doc, j, rdoc) - { - //c'è la riga generata con codart di tipo conai (sia automatica che manuale)? - if (rdoc->get(RDOC_CODART) == conai_codsp && !rdoc->is_generata()) - { - has_rettifica = true; - break; - } - } - if (has_rettifica) - scrivi_csv_doc_rettifiche(doc, csv, conai_specie, sottoclass, conai_codsp); - } + scrivi_csv_doc_not_generata(doc, csv, conai_specie, sottoclass, conai_codsp); return true; }