git-svn-id: svn://10.65.10.50/branches/R_10_00@23161 c028cbd2-c16b-5b4b-a496-9718f37d4682

This commit is contained in:
guy 2015-12-21 11:20:00 +00:00
parent 04a1ce4267
commit 53022a1efe

View File

@ -95,7 +95,7 @@ class TDichiarazione_CONAI : public TSkeleton_application
protected: protected:
real clifo_conai(const TCli_for& clifo, const TCONAI_class conai_specie, TString& paiv) const; real clifo_conai(const TCli_for& clifo, const TCONAI_class conai_specie, TString& paiv) const;
void elabora(const TMask& mask) 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; 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, 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; 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 //prende dalla riga i dati che gli servono per fare vari calcoli
const TRiga_documento& riga_generata = doc[n_riga_generata]; 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 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 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(); const bool is_nac = doc.is_nota_credito();
//prende la data del documento //prende la data del documento
const TDate& datadoc = doc.data(); const TDate datadoc = doc.data();
//prende il cliente ed i suoi dati //prende il cliente ed i suoi dati
const TCli_for& clifo = doc.clifor(); 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) //cerca la percentuale di esenzione conai sul cliente (controllo)
const real cfven_perc_conai = clifo_conai(clifo, conai_specie, clifo_paiv); 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 //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 //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()) if (!n.is_zero())
{ {
qta_AB_conai.add(n, j); //va calcolato con il metodo apposito qta_AB_conai.add(n, j); //va calcolato con il metodo apposito
//quantita' assoggettata (B) sul report //quantita' assoggettata (B) sul report
agip.add(n); 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 //riempie i campi del record del csv
//codnum-anno-ndoc-datadoc-codcli-cofi-nriga-codagg1-sottocat-prezzo-um-conai(AB)-conai(B)-conai(A) //codnum-anno-ndoc-datadoc-codcli-cofi-nriga-codagg1-sottocat-prezzo-um-conai(AB)-conai(B)-conai(A)
//parte chiave della riga //parte chiave della riga
csv.set(0, TVariant(rdoc.get(RDOC_CODNUM))); csv.set(0, rdoc.get(RDOC_CODNUM));
csv.set(1, TVariant(rdoc.get(RDOC_ANNO))); csv.set(1, rdoc.get(RDOC_ANNO));
csv.set(2, TVariant(rdoc.get(RDOC_NDOC))); csv.set(2, rdoc.get(RDOC_NDOC));
csv.set(3, TVariant(datadoc)); csv.set(3, datadoc);
csv.set(4, TVariant(clifo.codice())); csv.set(4, clifo.codice());
csv.set(5, TVariant(clifo_paiv)); csv.set(5, clifo_paiv);
csv.set(6, TVariant(rdoc.get(RDOC_CODART))); csv.set(6, rdoc.get(RDOC_CODART));
csv.set(7, TVariant(rdoc.get(RDOC_NRIGA))); csv.set(7, rdoc.get(RDOC_NRIGA));
//codici conai //codici conai
csv.set(8, TVariant(sottocat.left(2))); //codice materiale conai (es. carta, legno...) csv.set(8, sottocat.left(2)); //codice materiale conai (es. carta, legno...)
csv.set(9, TVariant(sottocat)); //sottocodice materiale (es. carta imballo, busta...) csv.set(9, sottocat); //sottocodice materiale (es. carta imballo, busta...)
//prezzo //prezzo
const real prezzo = riga_generata.get_real(RDOC_PREZZO); //va preso dalla riga generata 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 //um conai
const TString4 umqta = cache().get("SPP", conai_codart, "S7"); //unita' di misura dalla tabella SPP 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) //quantita' totale conai (A + B) sul report (le NAC hanno segno rovesciato)
real qta_tot_conai = (const real&)qta_AB_conai[i]; real qta_tot_conai = (const real&)qta_AB_conai[i];
if (is_nac) if (is_nac)
qta_tot_conai = -qta_tot_conai; 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) //quantita' assoggettata (B) sul report (le NAC hanno segno rovesciato)
real qta_assoggettata_conai = agip.get(); 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) if (is_nac)
qta_assoggettata_conai = -qta_assoggettata_conai; 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 //quantita' esente conai (A) sul report
const real qta_esente_conai = qta_tot_conai - qta_assoggettata_conai; 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 //valore totale contributo (BxC) sul report
const real totale_contrib_conai = qta_assoggettata_conai * prezzo; 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.. //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 //..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 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...) //crea la testata delle righedoc per poter fare vari calcoli (e intanto il tempo se ne va...)
@ -362,13 +356,14 @@ void TDichiarazione_CONAI::scrivi_csv(const TRectype& prima_riga, TDichiarazione
#ifdef DBG #ifdef DBG
//check di debug //check di debug
if (numdoc == 5) if (numdoc == 1451)
const int cazzone = 1; const int cazzone = 1;
#endif #endif
//se il cliente non c'entra con il conai e' inutile perdere tempo! //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) //cerca la riga generata (in tal caso e' un documento con righe CONAI giuste)
const int nrighe = doc.rows(); const int nrighe = doc.rows();
@ -388,7 +383,7 @@ void TDichiarazione_CONAI::scrivi_csv(const TRectype& prima_riga, TDichiarazione
scrivi_csv_doc_con_riga_generata(doc, n_riga_generata, csv, conai_specie); scrivi_csv_doc_con_riga_generata(doc, n_riga_generata, csv, conai_specie);
else else
scrivi_csv_doc_speciale(doc, csv, conai_specie, conai_codart); 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 c1 = s1.get(8);
const TFixed_string c2 = s2.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) // sotto ordinamento per codice cliente (campo 4)
if (cmp == 0) 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; TToken_string& s2 = *(TToken_string*)*o2;
//deve ordinare sul campo cofi/piva (campo 5) //deve ordinare sul campo cofi/piva (campo 5)
const TString& cf1 = s1.get(5); const TFixed_string cf1 = s1.get(5);
const TString& cf2 = s2.get(5); const TFixed_string cf2 = s2.get(5);
int cmp = cf1.compare(cf2); int cmp = cf1.compare(cf2, -1, true);
// sotto ordinamento per codnum (campo 0) // sotto ordinamento per codnum (campo 0)
if (cmp == 0) if (cmp == 0)
{ {
const TString4 c1 = s1.get(0); const TString4 c1 = s1.get(0);
const TString4 c2 = s2.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) // sotto-sotto ordinamento per ndoc (campo 2)
if (cmp == 0) 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) // sotto ordinamento per codnum (campo 0)
if (cmp == 0) if (cmp == 0)
{ {
const TString4 c1 = s1.get(0); const TFixed_string c1 = s1.get(0);
const TString4 c2 = s2.get(0); const TFixed_string c2 = s2.get(0);
cmp = c1.compare(c2); cmp = c1.compare(c2);
// sotto-sotto ordinamento per ndoc (campo 2) // sotto-sotto ordinamento per ndoc (campo 2)
@ -576,8 +571,8 @@ void TDichiarazione_CONAI::elabora(const TMask& mask) const
query << "USE RDOC"; query << "USE RDOC";
query << "\nSELECT BETWEEN(33.DATADOC,#DADATA,#ADATA)&&BETWEEN(33.TIPODOC,#TIPODOC,#TIPODOC)&&(" << scat_fieldname <<"!=\"\")"; 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 << "\nJOIN DOC INTO PROVV==PROVV ANNO==ANNO CODNUM==CODNUM NDOC==NDOC";
query << "\nFROM CODNUM=#CODNUM ANNO=#ANNO PROVV=D"; query << "\nFROM PROVV=D ANNO=#ANNO CODNUM=#CODNUM";
query << "\nTO CODNUM=#CODNUM ANNO=#ANNO PROVV=D"; 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.. //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 //..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) FOR_EACH_SHEET_ROW(sf, r, row)
{ {
//estrazione definitiva dei record che soddisfano il casino di parametri richiesti //estrazione definitiva dei record che soddisfano il casino di parametri richiesti
const TString4 last_codnum = row->get(0); const TString4 cod = row->get(0);
rdoc.set_var("#CODNUM", TVariant(last_codnum)); const TString4 tip = row->get(2);
rdoc.set_var("#TIPODOC", TVariant(row->get(2))); rdoc.set_var("#CODNUM", cod);
rdoc.set_var("#TIPODOC", tip);
//quanti record validi ha trovato? TString msg;
const long items = rdoc.items(); msg << TR("Generazione righe ") << cod;
if (tip.full()) msg << " (" << tip << ')';
//E crea pure la progind.. TProgress_monitor pi(1, msg); // Prima progresso indeterminato (1) ...
TString msg; msg << TR("Generazione righe ") << last_codnum << " ..."; pi.set_max(rdoc.items()); // ... poi conteggio esatto (rdoc.items)
TProgind pi(items, msg);
long last_ndoc = 0; long last_ndoc = 0;
//Scansione del recordset trovato //Scansione del recordset trovato
for (bool ok = rdoc.move_first(); ok; ok = rdoc.move_next()) for (bool ok = rdoc.move_first(); ok; ok = rdoc.move_next())
{ {
if (!pi.addstatus(1)) if (!pi.add_status())
break; break;
const long ndoc = rdoc.get(RDOC_NDOC).as_int(); const long ndoc = rdoc.get(RDOC_NDOC).as_int();
if (ndoc != last_ndoc) if (ndoc != last_ndoc)
{ {
scrivi_csv(rdoc.cursor()->curr(), *csv, conai_specie, codart.as_string()); scrivi_csv(rdoc.cursor()->curr(), *csv, conai_specie, codart.as_string());
last_ndoc = ndoc; last_ndoc = ndoc;
} }
} //for(bool ok = rdoc.move_first(.. } //for(bool ok = rdoc.move_first(..
} //FOR_EACH... } //FOR_EACH...
@ -675,6 +669,8 @@ void TDichiarazione_CONAI::elabora(const TMask& mask) const
rep.mask2report(mask); rep.mask2report(mask);
rep.print_or_preview(); rep.print_or_preview();
} }
else
delete csv;
} }
} }
@ -688,7 +684,7 @@ void TDichiarazione_CONAI::main_loop()
bool TDichiarazione_CONAI::create() bool TDichiarazione_CONAI::create()
{ {
if (!has_module(DCAUT)) if (!has_module(DCAUT))
return error_box(TR("Modulo non autorizzato")); return cantaccess_box(title());
return TSkeleton_application::create(); return TSkeleton_application::create();
} }