From 53022a1efe5808e2c02b4c9eb60218b924d1337d Mon Sep 17 00:00:00 2001 From: guy Date: Mon, 21 Dec 2015 11:20:00 +0000 Subject: [PATCH] git-svn-id: svn://10.65.10.50/branches/R_10_00@23161 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- tp/tp0900.cpp | 130 ++++++++++++++++++++++++-------------------------- 1 file changed, 63 insertions(+), 67 deletions(-) diff --git a/tp/tp0900.cpp b/tp/tp0900.cpp index ebe3a8553..8570d741a 100755 --- a/tp/tp0900.cpp +++ b/tp/tp0900.cpp @@ -95,7 +95,7 @@ class TDichiarazione_CONAI : public TSkeleton_application protected: real clifo_conai(const TCli_for& clifo, const TCONAI_class conai_specie, TString& paiv) const; void elabora(const TMask& mask) const; - void scrivi_csv(const TRectype& prima_riga, TDichiarazione_CONAI_csv_recordset& csv, + bool scrivi_csv(const TRectype& prima_riga, TDichiarazione_CONAI_csv_recordset& csv, const TCONAI_class conai_specie, const TString& conai_codart) const; void scrivi_csv_doc_con_riga_generata(const TDocumento& doc, const int n_riga_generata, TDichiarazione_CONAI_csv_recordset& csv, const TCONAI_class conai_specie) const; @@ -134,7 +134,7 @@ void TDichiarazione_CONAI::scrivi_csv_doc_con_riga_generata(const TDocumento& do { //prende dalla riga i dati che gli servono per fare vari calcoli const TRiga_documento& riga_generata = doc[n_riga_generata]; - const TString80 conai_codart = riga_generata.get(RDOC_CODART); //questo ci serve per trovare le righe conai + const TCodice_articolo conai_codart = riga_generata.get(RDOC_CODART); //questo ci serve per trovare le righe conai const real totale_qta_assogg = riga_generata.get_real(RDOC_QTA); //questo ci serve per le quantita' assoggetate o no TGeneric_distrib agip(totale_qta_assogg, 5); //distrib per ridistribuire le % dei quantitativi assoggetati @@ -144,7 +144,7 @@ void TDichiarazione_CONAI::scrivi_csv_doc_con_riga_generata(const TDocumento& do const bool is_nac = doc.is_nota_credito(); //prende la data del documento - const TDate& datadoc = doc.data(); + const TDate datadoc = doc.data(); //prende il cliente ed i suoi dati const TCli_for& clifo = doc.clifor(); @@ -152,20 +152,14 @@ void TDichiarazione_CONAI::scrivi_csv_doc_con_riga_generata(const TDocumento& do //cerca la percentuale di esenzione conai sul cliente (controllo) const real cfven_perc_conai = clifo_conai(clifo, conai_specie, clifo_paiv); - const int nrighe = doc.rows(); - //ciclo di creazione del distrib con le quote conai - for (int j = 1; j <= nrighe; j++) + FOR_EACH_PHYSICAL_RDOC(doc, j, rdoc) { - const TRiga_documento& rdoc = doc[j]; - //quantita' totale conai (A + B) sul report - const real n = rdoc.calc_conai_qta(conai_specie); - + const real n = rdoc->calc_conai_qta(conai_specie); if (!n.is_zero()) { qta_AB_conai.add(n, j); //va calcolato con il metodo apposito - //quantita' assoggettata (B) sul report agip.add(n); } @@ -189,32 +183,32 @@ void TDichiarazione_CONAI::scrivi_csv_doc_con_riga_generata(const TDocumento& do //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))); + csv.set(0, rdoc.get(RDOC_CODNUM)); + csv.set(1, rdoc.get(RDOC_ANNO)); + csv.set(2, rdoc.get(RDOC_NDOC)); + csv.set(3, datadoc); + csv.set(4, clifo.codice()); + csv.set(5, clifo_paiv); + csv.set(6, rdoc.get(RDOC_CODART)); + csv.set(7, 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...) + csv.set(8, sottocat.left(2)); //codice materiale conai (es. carta, legno...) + csv.set(9, 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)); + csv.set(10, prezzo); //um conai const TString4 umqta = cache().get("SPP", conai_codart, "S7"); //unita' di misura dalla tabella SPP - csv.set(11, TVariant(umqta)); + csv.set(11, umqta); //quantita' totale conai (A + B) sul report (le NAC hanno segno rovesciato) real qta_tot_conai = (const real&)qta_AB_conai[i]; if (is_nac) qta_tot_conai = -qta_tot_conai; - csv.set(15, TVariant(qta_tot_conai)); + csv.set(15, qta_tot_conai); //quantita' assoggettata (B) sul report (le NAC hanno segno rovesciato) real qta_assoggettata_conai = agip.get(); @@ -228,11 +222,11 @@ void TDichiarazione_CONAI::scrivi_csv_doc_con_riga_generata(const TDocumento& do if (is_nac) qta_assoggettata_conai = -qta_assoggettata_conai; - csv.set(13, TVariant(qta_assoggettata_conai)); + csv.set(13, 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)); + csv.set(12, qta_esente_conai); //valore totale contributo (BxC) sul report const real totale_contrib_conai = qta_assoggettata_conai * prezzo; @@ -345,7 +339,7 @@ void TDichiarazione_CONAI::scrivi_csv_doc_speciale(const TDocumento& doc, TDichi //crea il documento che contiene la riga che gli viene passata,cerca la riga generata ed in base al risultato della ricerca chiama.. //..il metodo adatto -void TDichiarazione_CONAI::scrivi_csv(const TRectype& prima_riga, TDichiarazione_CONAI_csv_recordset& csv, +bool TDichiarazione_CONAI::scrivi_csv(const TRectype& prima_riga, TDichiarazione_CONAI_csv_recordset& csv, const TCONAI_class conai_specie, const TString& conai_codart) const { //crea la testata delle righedoc per poter fare vari calcoli (e intanto il tempo se ne va...) @@ -362,33 +356,34 @@ void TDichiarazione_CONAI::scrivi_csv(const TRectype& prima_riga, TDichiarazione #ifdef DBG //check di debug - if (numdoc == 5) + if (numdoc == 1451) const int cazzone = 1; #endif //se il cliente non c'entra con il conai e' inutile perdere tempo! - if (addconai) + if (!addconai) + return false; + + //cerca la riga generata (in tal caso e' un documento con righe CONAI giuste) + const int nrighe = doc.rows(); + + int n_riga_generata = 0; + for (int j = 1; j <= nrighe; j++) { - //cerca la riga generata (in tal caso e' un documento con righe CONAI giuste) - const int nrighe = doc.rows(); - - int n_riga_generata = 0; - for (int j = 1; j <= nrighe; j++) + const TRiga_documento& rdoc = doc[j]; + //c'è la riga generata con codart di tipo conai (sia automatica che manuale)? + if (rdoc.get(RDOC_CODART) == conai_codart && (rdoc.is_spese() || rdoc.is_generata())) { - const TRiga_documento& rdoc = doc[j]; - //c'è la riga generata con codart di tipo conai (sia automatica che manuale)? - if (rdoc.get(RDOC_CODART) == conai_codart && (rdoc.is_spese() || rdoc.is_generata())) - { - n_riga_generata = j; - break; - } + n_riga_generata = j; + break; } - - if (n_riga_generata > 0) - scrivi_csv_doc_con_riga_generata(doc, n_riga_generata, csv, conai_specie); - else - scrivi_csv_doc_speciale(doc, csv, conai_specie, conai_codart); } + + if (n_riga_generata > 0) + scrivi_csv_doc_con_riga_generata(doc, n_riga_generata, csv, conai_specie); + else + scrivi_csv_doc_speciale(doc, csv, conai_specie, conai_codart); + return true; } @@ -401,7 +396,7 @@ static int compare_csv_rows_specie(const TObject** o1, const TObject** o2) const TFixed_string c1 = s1.get(8); const TFixed_string c2 = s2.get(8); - int cmp = c1.compare(c2); + int cmp = c1.compare(c2, -1, true); // sotto ordinamento per codice cliente (campo 4) if (cmp == 0) @@ -428,16 +423,16 @@ static int compare_csv_rows_cofi(const TObject** o1, const TObject** o2) TToken_string& s2 = *(TToken_string*)*o2; //deve ordinare sul campo cofi/piva (campo 5) - const TString& cf1 = s1.get(5); - const TString& cf2 = s2.get(5); - int cmp = cf1.compare(cf2); + const TFixed_string cf1 = s1.get(5); + const TFixed_string cf2 = s2.get(5); + int cmp = cf1.compare(cf2, -1, true); // sotto ordinamento per codnum (campo 0) if (cmp == 0) { const TString4 c1 = s1.get(0); const TString4 c2 = s2.get(0); - cmp = c1.compare(c2); + cmp = c1.compare(c2, -1, true); // sotto-sotto ordinamento per ndoc (campo 2) if (cmp == 0) @@ -464,8 +459,8 @@ static int compare_csv_rows_datadoc(const TObject** o1, const TObject** o2) // sotto ordinamento per codnum (campo 0) if (cmp == 0) { - const TString4 c1 = s1.get(0); - const TString4 c2 = s2.get(0); + const TFixed_string c1 = s1.get(0); + const TFixed_string c2 = s2.get(0); cmp = c1.compare(c2); // sotto-sotto ordinamento per ndoc (campo 2) @@ -576,8 +571,8 @@ void TDichiarazione_CONAI::elabora(const TMask& mask) const query << "USE RDOC"; query << "\nSELECT BETWEEN(33.DATADOC,#DADATA,#ADATA)&&BETWEEN(33.TIPODOC,#TIPODOC,#TIPODOC)&&(" << scat_fieldname <<"!=\"\")"; query << "\nJOIN DOC INTO PROVV==PROVV ANNO==ANNO CODNUM==CODNUM NDOC==NDOC"; - query << "\nFROM CODNUM=#CODNUM ANNO=#ANNO PROVV=D"; - query << "\nTO CODNUM=#CODNUM ANNO=#ANNO PROVV=D"; + query << "\nFROM PROVV=D ANNO=#ANNO CODNUM=#CODNUM"; + query << "\nTO PROVV=D ANNO=#ANNO CODNUM=#CODNUM"; //crea il recordset principale relativo alle righe originali CONAI ed assegna subito i valori delle variabili che restano costanti al cambio.. //..numerazione/tipo: sono le date ed il codice articolo @@ -597,32 +592,31 @@ void TDichiarazione_CONAI::elabora(const TMask& mask) const FOR_EACH_SHEET_ROW(sf, r, row) { //estrazione definitiva dei record che soddisfano il casino di parametri richiesti - const TString4 last_codnum = row->get(0); - rdoc.set_var("#CODNUM", TVariant(last_codnum)); - rdoc.set_var("#TIPODOC", TVariant(row->get(2))); + const TString4 cod = row->get(0); + const TString4 tip = row->get(2); + rdoc.set_var("#CODNUM", cod); + rdoc.set_var("#TIPODOC", tip); - //quanti record validi ha trovato? - const long items = rdoc.items(); + TString msg; + msg << TR("Generazione righe ") << cod; + if (tip.full()) msg << " (" << tip << ')'; - //E crea pure la progind.. - TString msg; msg << TR("Generazione righe ") << last_codnum << " ..."; - TProgind pi(items, msg); + TProgress_monitor pi(1, msg); // Prima progresso indeterminato (1) ... + pi.set_max(rdoc.items()); // ... poi conteggio esatto (rdoc.items) long last_ndoc = 0; //Scansione del recordset trovato for (bool ok = rdoc.move_first(); ok; ok = rdoc.move_next()) { - if (!pi.addstatus(1)) + if (!pi.add_status()) break; - const long ndoc = rdoc.get(RDOC_NDOC).as_int(); if (ndoc != last_ndoc) { scrivi_csv(rdoc.cursor()->curr(), *csv, conai_specie, codart.as_string()); last_ndoc = ndoc; } - } //for(bool ok = rdoc.move_first(.. } //FOR_EACH... @@ -675,6 +669,8 @@ void TDichiarazione_CONAI::elabora(const TMask& mask) const rep.mask2report(mask); rep.print_or_preview(); } + else + delete csv; } } @@ -688,7 +684,7 @@ void TDichiarazione_CONAI::main_loop() bool TDichiarazione_CONAI::create() { if (!has_module(DCAUT)) - return error_box(TR("Modulo non autorizzato")); + return cantaccess_box(title()); return TSkeleton_application::create(); }