git-svn-id: svn://10.65.10.50/branches/R_10_00@23161 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
04a1ce4267
commit
53022a1efe
130
tp/tp0900.cpp
130
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();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user