diff --git a/tp/tp0900.cpp b/tp/tp0900.cpp index 6a06b31fd..d78b36f91 100755 --- a/tp/tp0900.cpp +++ b/tp/tp0900.cpp @@ -157,13 +157,11 @@ void TDichiarazione_CONAI::scrivi_csv_doc_con_riga_generata(TDocumento& doc, con { const TRiga_documento& rdoc = doc[j]; - //servono SOLO le righe CONAI!!!!! - const TString& codagg1 = rdoc.get(get_conai_cat_name(conai_specie)); + //quantita' totale conai (A + B) sul report + const real n = rdoc.calc_conai_qta(conai_specie); - if (codagg1 == conai_codart) - { - //quantita' totale conai (A + B) sul report - const real n = rdoc.calc_conai_qta(conai_specie); + if (n != ZERO) + { qta_AB_conai.add(n, j); //va calcolato con il metodo apposito //quantita' assoggettata (B) sul report @@ -177,80 +175,73 @@ void TDichiarazione_CONAI::scrivi_csv_doc_con_riga_generata(TDocumento& doc, con const TRiga_documento& rdoc = doc[i]; //servono SOLO le righe CONAI!!!!! - const TString& codagg1 = rdoc.get(get_conai_cat_name(conai_specie)); - - if (codagg1 == conai_codart) - { //se non e' stata definita la sottocategoria conai (maiali!!) va messa uguale a quella generica - TString4 codagg2 = rdoc.get(get_conai_sottocat_name(conai_specie)); - if (codagg2.empty()) - codagg2 = codagg1; - //puo' capitare che la sottocategoria sia stata troncata alla categoria - if (codagg2 == codagg1) - codagg2 << "99"; + TString4 sottocat = rdoc.get(get_conai_sottocat_name(conai_specie)); + //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-codagg2-prezzo-um-conai(AB)-conai(B)-conai(A) - //parte chiave della riga - csv.set(0, TVariant(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, TVariant(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(codagg1)); //codice materiale conai (es. carta, legno...) - csv.set(9, TVariant(codagg2)); //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 - const real prezzo = riga_generata.get_real(RDOC_PREZZO); //va preso dalla riga generata - csv.set(10, TVariant(prezzo)); + //prezzo + const real prezzo = riga_generata.get_real(RDOC_PREZZO); //va preso dalla riga generata + csv.set(10, TVariant(prezzo)); - //um conai - const TString4 umqta = cache().get("SPP", conai_codart, "S7"); //unita' di misura dalla tabella SPP - csv.set(11, TVariant(umqta)); + //um conai + const TString4 umqta = cache().get("SPP", conai_codart, "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 = (real&)qta_AB_conai[i]; - if (is_nac) - qta_tot_conai = -qta_tot_conai; - csv.set(15, TVariant(qta_tot_conai)); + //quantita' totale conai (A + B) sul report (le NAC hanno segno rovesciato) + real qta_tot_conai = (real&)qta_AB_conai[i]; + if (is_nac) + qta_tot_conai = -qta_tot_conai; + csv.set(15, TVariant(qta_tot_conai)); - //quantita' assoggettata (B) sul report (le NAC hanno segno rovesciato) - real qta_assoggettata_conai = agip.get(); + //quantita' assoggettata (B) sul report (le NAC hanno segno rovesciato) + real qta_assoggettata_conai = agip.get(); - //se non trova un prezzo nella riga generata la % di esenzione CONAI e' 100 - if (prezzo == ZERO) - { - //se trova la % di esenzione al 100 non puo' assoggettare conai! - qta_assoggettata_conai = ZERO; - } + //se non trova un prezzo nella riga generata la % di esenzione CONAI e' 100 + if (prezzo == ZERO) + { + //se trova la % di esenzione al 100 non puo' assoggettare conai! + qta_assoggettata_conai = ZERO; + } - if (is_nac) - qta_assoggettata_conai = -qta_assoggettata_conai; - csv.set(13, TVariant(qta_assoggettata_conai)); + if (is_nac) + qta_assoggettata_conai = -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; - csv.set(12, TVariant(qta_esente_conai)); + //quantita' esente conai (A) sul report + const real qta_esente_conai = qta_tot_conai - qta_assoggettata_conai; + 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 in qtagg2 - const real rdoc_perc_conai = rdoc.get_real(RDOC_QTAGG2); - csv.set(16, TVariant(rdoc_perc_conai)); + //percentuale di esenzione conai in qtagg2 + const real rdoc_perc_conai = rdoc.get_real(RDOC_QTAGG2); + csv.set(16, TVariant(rdoc_perc_conai)); - //percentuale di esenzione conai in cfven - csv.set(17, TVariant(cfven_perc_conai)); - } + //percentuale di esenzione conai in cfven + csv.set(17, TVariant(cfven_perc_conai)); } } @@ -278,78 +269,70 @@ void TDichiarazione_CONAI::scrivi_csv_doc_speciale(TDocumento& doc, TDichiarazio { const TRiga_documento& rdoc = doc[i]; - //servono SOLO le righe CONAI!!!!! - const TString& codagg1 = rdoc.get(get_conai_cat_name(conai_specie)); - - if (codagg1 == conai_codart) - { - //se non e' stata definita la sottocategoria conai (maiali!!) va messa uguale a quella generica - TString4 codagg2 = rdoc.get(get_conai_sottocat_name(conai_specie)); - if (codagg2.empty()) - codagg2 = codagg1; - //puo' capitare che la sottocategoria sia stata troncata alla categoria - if (codagg2 == codagg1) - codagg2 << "99"; + //se non e' stata definita la sottocategoria conai (maiali!!) va messa uguale a quella generica + TString4 sottocat = rdoc.get(get_conai_sottocat_name(conai_specie)); + //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-codagg2-prezzo-um-conai(AB)-conai(B)-conai(A) - //parte chiave della riga - csv.set(0, TVariant(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, TVariant(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(codagg1)); //codice materiale conai (es. carta, legno...) - csv.set(9, TVariant(codagg2)); //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 - const real prezzo = rdoc.get_real(RDOC_PREZZO); //va preso dalla riga stessa - csv.set(10, TVariant(prezzo)); + //prezzo + const real prezzo = rdoc.get_real(RDOC_PREZZO); //va preso dalla riga stessa + csv.set(10, TVariant(prezzo)); - //um conai - const TString4 umqta = cache().get("SPP", conai_codart, "S7"); //unita' di misura dalla tabella SPP - csv.set(11, TVariant(umqta)); + //um conai + const TString4 umqta = cache().get("SPP", conai_codart, "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); - if (is_nac) - qta_tot_conai = -qta_tot_conai; - csv.set(15, TVariant(qta_tot_conai)); + //quantita' totale conai (A + B) sul report (le NAC hanno segno rovesciato) + real qta_tot_conai = rdoc.get_real(RDOC_QTA); + 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(RDOC_QTAGG2); + //percentuale di esenzione conai al 100%? + const real rdoc_perc_conai = rdoc.get_real(RDOC_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; - if (rdoc_perc_conai == CENTO) - qta_assoggettata_conai = ZERO; + if (rdoc_perc_conai == CENTO) + 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 in qtagg2 - csv.set(16, TVariant(rdoc_perc_conai)); + //percentuale di esenzione conai in qtagg2 + csv.set(16, TVariant(rdoc_perc_conai)); - //percentuale di esenzione conai in cfven - csv.set(17, TVariant(cfven_perc_conai)); - } + //percentuale di esenzione conai in cfven + csv.set(17, TVariant(cfven_perc_conai)); } } @@ -402,7 +385,7 @@ static int compare_csv_rows_specie(const TObject** o1, const TObject** o2) TToken_string& s1 = *(TToken_string*)*o1; TToken_string& s2 = *(TToken_string*)*o2; - //deve ordinare sul campo codagg2 = codice specie conai (campo 8) + //deve ordinare sul campo sottocat = codice specie conai (campo 8) const TString& c1 = s1.get(8); const TString& c2 = s2.get(8); @@ -560,13 +543,15 @@ void TDichiarazione_CONAI::elabora(const TMask& mask) const //cerca le righe con numerazione e tipo indicate nello sheet;prende sia le righe che generano CONAI (per avere il codice conai,.. //..le quantita' etc) e le righe generate da CONAI (per avere i prezzi) TString query; - TString cat_fieldname(get_conai_cat_name(conai_specie)); + TString scat_fieldname(get_conai_sottocat_name(conai_specie)); - if (cat_fieldname!= "CODAGG1") - cat_fieldname.insert("RG1:"); + if (scat_fieldname.blank()) + return; - query << "USE RDOC KEY 1\n"; - query << "SELECT (BETWEEN(DOC.DATADOC,#DADATA,#ADATA))&&(DOC.TIPODOC=#TIPODOC)&&(" << cat_fieldname << "=#CODART)\n"; + scat_fieldname.insert("RG1:"); + + query << "USE RDOC\n"; + query << "SELECT BETWEEN(33.DATADOC,#DADATA,#ADATA)&&(33.TIPODOC==#TIPODOC)&&(" << scat_fieldname <<"!=\"\")\n"; query << "JOIN DOC INTO PROVV==PROVV ANNO==ANNO CODNUM==CODNUM NDOC==NDOC\n"; query << "FROM CODNUM=#CODNUM ANNO=#ANNO PROVV=\"D\"\n"; query << "TO CODNUM=#CODNUM ANNO=#ANNO PROVV=\"D\"\n"; @@ -578,7 +563,7 @@ void TDichiarazione_CONAI::elabora(const TMask& mask) const rdoc.set_var("#ANNO", TVariant((long)anno)); rdoc.set_var("#DADATA", dataini); rdoc.set_var("#ADATA", datafin); - rdoc.set_var("#CODART", codart); + //rdoc.set_var("#CODART", codart); //creazione del csv recordset che verra' riempito dai record del recordset rdoc TDichiarazione_CONAI_csv_recordset* csv = new TDichiarazione_CONAI_csv_recordset;