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:
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();
}