Patch level : 12.0 976

Files correlati     : tp0.exe
Commento            :

- Sistemata la gestione delle rettifiche CONAI
This commit is contained in:
Alessandro Bonazzi 2020-07-10 11:32:41 +02:00
parent 710ebf2f0d
commit 76dfb8b482

View File

@ -99,10 +99,10 @@ protected:
bool 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 & sottoclass, const TCONAI_class conai_specie, const TString & sottoclass,
const TString& conai_codsp, TLog_report &log) const; const TString& conai_codsp, TLog_report &log) const;
void scrivi_csv_doc_con_riga_generata(const TDocumento& doc, const int n_riga_generata, void scrivi_csv_doc_generata(const TDocumento& doc, const int n_riga_generata,
TDichiarazione_CONAI_csv_recordset& csv, const TCONAI_class conai_specie, TDichiarazione_CONAI_csv_recordset& csv, const TCONAI_class conai_specie,
const TString & sottoclass, const TString& conai_codsp, TLog_report &log) const; const TString & sottoclass, const TString& conai_codsp, TLog_report &log) const;
void scrivi_csv_doc_rettifiche(const TDocumento& doc, TDichiarazione_CONAI_csv_recordset& csv, void scrivi_csv_doc_not_generata(const TDocumento& doc, TDichiarazione_CONAI_csv_recordset& csv,
const TCONAI_class conai_specie, const TString & sottoclass, const TCONAI_class conai_specie, const TString & sottoclass,
const TString& conai_codsp) const; const TString& conai_codsp) const;
@ -147,7 +147,7 @@ real TDichiarazione_CONAI::clifo_conai(const TCli_for& clifo, const TCONAI_class
} }
//riempie recordset con le righe CONAI del documento che contiene una riga generata CONAI //riempie recordset con le righe CONAI del documento che contiene una riga generata CONAI
void TDichiarazione_CONAI::scrivi_csv_doc_con_riga_generata(const TDocumento& doc, const int n_riga_generata, void TDichiarazione_CONAI::scrivi_csv_doc_generata(const TDocumento& doc, const int n_riga_generata,
TDichiarazione_CONAI_csv_recordset& csv, TDichiarazione_CONAI_csv_recordset& csv,
const TCONAI_class conai_specie, const TString & sottoclass, const TCONAI_class conai_specie, const TString & sottoclass,
const TString& conai_codsp, TLog_report &log) const const TString& conai_codsp, TLog_report &log) const
@ -316,7 +316,7 @@ void TDichiarazione_CONAI::scrivi_csv_doc_con_riga_generata(const TDocumento& do
//riempie recordset con le righe CONAI del documento che NON ha una riga generata CONAI; trattasi di documenti.. //riempie recordset con le righe CONAI del documento che NON ha una riga generata CONAI; trattasi di documenti..
//..farlocchi costruiti ad arte per correggere le vaccate dei rompiscatolifici //..farlocchi costruiti ad arte per correggere le vaccate dei rompiscatolifici
void TDichiarazione_CONAI::scrivi_csv_doc_rettifiche(const TDocumento& doc, TDichiarazione_CONAI_csv_recordset& csv, void TDichiarazione_CONAI::scrivi_csv_doc_not_generata(const TDocumento& doc, TDichiarazione_CONAI_csv_recordset& csv,
const TCONAI_class conai_specie, const TString & sottoclass, const TCONAI_class conai_specie, const TString & sottoclass,
const TString& conai_codsp) const const TString& conai_codsp) const
{ {
@ -331,109 +331,129 @@ void TDichiarazione_CONAI::scrivi_csv_doc_rettifiche(const TDocumento& doc, TDic
TString80 clifo_paiv; TString80 clifo_paiv;
//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, doc); const real cfven_perc_conai = clifo_conai(clifo, conai_specie, clifo_paiv, doc);
bool ok = cfven_perc_conai >= CENTO;
const int nrighe = doc.rows(); if (!ok)
//ciclo di riempimento delle righe csv;scandisce solo l'array con i valori compilati
FOR_EACH_PHYSICAL_RDOC(doc, i, rdoc)
{ {
for (int j = 1; j <= FR_CMAX; j++) bool has_rettifica = false;
FOR_EACH_PHYSICAL_RDOC(doc, j, rdoc)
{ {
TString4 sottocat = rdoc->get(conai_sottocat_name(j)); //c'è la riga generata con codart di tipo conai (sia automatica che manuale)?
if (rdoc->get(RDOC_CODART) == conai_codsp && !rdoc->is_generata())
if (sottocat == sottoclass)
{ {
real peso; has_rettifica = true;
real prezzo; break;
const TRectype& spp = cache().get("SPP", conai_codsp); }
}
if (rdoc->is_merce()) ok |= has_rettifica;
{ }
prezzo = spp.get_real("R10");
peso = rdoc->get_real(conai_peso_name(j)); if (ok)
} {
else const int nrighe = doc.rows();
if (rdoc->is_spese() && !rdoc->is_generata() && rdoc->get(RDOC_CODART) == conai_codsp)
//ciclo di riempimento delle righe csv;scandisce solo l'array con i valori compilati
FOR_EACH_PHYSICAL_RDOC(doc, i, rdoc)
{
for (int j = 1; j <= FR_CMAX; j++)
{
TString4 sottocat = rdoc->get(conai_sottocat_name(j));
if (sottocat == sottoclass)
{
real peso;
real prezzo;
const TRectype& spp = cache().get("SPP", conai_codsp);
if (rdoc->is_merce())
{ {
peso = rdoc->get_real(RDOC_QTA); prezzo = spp.get_real("R10");
prezzo = rdoc->get_real(RDOC_PREZZO); //va preso dalla riga stessa
peso = rdoc->get_real(conai_peso_name(j));
} }
if (sottocat == sottoclass && (peso != ZERO)) else
{ if (rdoc->is_spese() && !rdoc->is_generata() && rdoc->get(RDOC_CODART) == conai_codsp)
//puo' capitare che la sottocategoria sia stata troncata alla categoria {
if (sottocat.len() == 2) peso = rdoc->get_real(RDOC_QTA);
sottocat << "99"; prezzo = rdoc->get_real(RDOC_PREZZO); //va preso dalla riga stessa
}
if (sottocat == sottoclass && (peso != ZERO))
{
//puo' capitare che la sottocategoria sia stata troncata alla categoria
if (sottocat.len() == 2)
sottocat << "99";
//creazione di un nuovo record da esportare //creazione di un nuovo record da esportare
csv.new_rec(""); csv.new_rec("");
//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, rdoc->get(RDOC_CODNUM)); csv.set(0, rdoc->get(RDOC_CODNUM));
csv.set(1, TVariant(rdoc->get(RDOC_ANNO))); csv.set(1, TVariant(rdoc->get(RDOC_ANNO)));
csv.set(2, TVariant(rdoc->get(RDOC_NDOC))); csv.set(2, TVariant(rdoc->get(RDOC_NDOC)));
csv.set(3, TVariant(datadoc)); csv.set(3, TVariant(datadoc));
csv.set(4, TVariant(clifo.codice())); csv.set(4, TVariant(clifo.codice()));
csv.set(5, TVariant(clifo_paiv)); csv.set(5, TVariant(clifo_paiv));
csv.set(6, TVariant(rdoc->get(RDOC_CODART))); csv.set(6, TVariant(rdoc->get(RDOC_CODART)));
csv.set(7, TVariant(rdoc->get(RDOC_NRIGA))); csv.set(7, TVariant(rdoc->get(RDOC_NRIGA)));
//codici conai //codici conai
csv.set(8, TVariant(sottocat.left(2))); //codice materiale conai (es. carta, legno...) 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(9, TVariant(sottocat)); //sottocodice materiale (es. carta imballo, busta...)
//prezzo //prezzo
csv.set(10, TVariant(prezzo)); csv.set(10, TVariant(prezzo));
//um conai //um conai
const TString4 umqta = spp.get("S7"); //unita' di misura dalla tabella SPP const TString4 umqta = spp.get("S7"); //unita' di misura dalla tabella SPP
csv.set(11, TVariant(umqta)); csv.set(11, TVariant(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 = rdoc->get_real(RDOC_QTA); real qta_tot_conai = rdoc->get_real(RDOC_QTA);
const real qta_unitaria_conai = rdoc->get_real(conai_peso_name(j)); const real qta_unitaria_conai = rdoc->get_real(conai_peso_name(j));
if (qta_unitaria_conai != ZERO) if (qta_unitaria_conai != ZERO)
qta_tot_conai *= qta_unitaria_conai; qta_tot_conai *= qta_unitaria_conai;
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, TVariant(qta_tot_conai));
//percentuale di esenzione conai al 100%? //percentuale di esenzione conai al 100%?
const real rdoc_perc_conai = rdoc->get_real(conai_esenzione_name(conai_specie, LF_RIGHEDOC)); // ex QTAGG2 const real rdoc_perc_conai = rdoc->get_real(conai_esenzione_name(conai_specie, LF_RIGHEDOC)); // ex QTAGG2
//quantita' assoggettata (B) sul report (le NAC hanno segno rovesciato, ma avendolo gia' gia' rovesciato.. //quantita' assoggettata (B) sul report (le NAC hanno segno rovesciato, ma avendolo gia' gia' rovesciato..
//..in precedenza non deve fare nulla!) //..in precedenza non deve fare nulla!)
real qta_assoggettata_conai = qta_tot_conai; real qta_assoggettata_conai = qta_tot_conai;
//segnalazione Sirio 1767: nelle righe fatte a mano, se la % di esenzione sul cliente è 100% -> la qta_assoggettata_conai.. //segnalazione Sirio 1767: nelle righe fatte a mano, se la % di esenzione sul cliente è 100% -> la qta_assoggettata_conai..
//..viene azzerata; questo perchè la rdoc_perc_conai può non essere modificabile a mano (ponendola = 100) se il verig non.. //..viene azzerata; questo perchè la rdoc_perc_conai può non essere modificabile a mano (ponendola = 100) se il verig non..
//..è personalizzato //..è personalizzato
if (rdoc_perc_conai >= CENTO || cfven_perc_conai >= CENTO) // Guy: Mi pare strano gestire solo il caso 100% if (rdoc_perc_conai >= CENTO || cfven_perc_conai >= CENTO) // Guy: Mi pare strano gestire solo il caso 100%
qta_assoggettata_conai = ZERO; qta_assoggettata_conai = ZERO;
csv.set(13, TVariant(qta_assoggettata_conai)); csv.set(13, TVariant(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; //deve essere sempre ZERO! const real qta_esente_conai = qta_tot_conai - qta_assoggettata_conai; //deve essere sempre ZERO!
csv.set(12, TVariant(qta_esente_conai)); csv.set(12, TVariant(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;
csv.set(14, TVariant(totale_contrib_conai)); csv.set(14, TVariant(totale_contrib_conai));
//percentuale di esenzione conai //percentuale di esenzione conai
csv.set(16, TVariant(rdoc_perc_conai)); csv.set(16, TVariant(rdoc_perc_conai));
//percentuale di esenzione conai in cfven //percentuale di esenzione conai in cfven
csv.set(17, TVariant(cfven_perc_conai)); csv.set(17, TVariant(cfven_perc_conai));
TString descr = cache().get("&VESCC", sottocat, "S2"); TString descr = cache().get("&VESCC", sottocat, "S2");
if (descr.blank()) if (descr.blank())
descr = cache().get("&VESCC", sottocat, "S0"); descr = cache().get("&VESCC", sottocat, "S0");
csv.set(18, descr); csv.set(18, descr);
}
} }
} }
} }
@ -454,9 +474,9 @@ bool TDichiarazione_CONAI::scrivi_csv(const TRectype& prima_riga, TDichiarazione
#ifdef DBG #ifdef DBG
//check di debug //check di debug
if (numdoc == 1451) if (numdoc == 935L)
const int cazzone = 1; const int cazzone = 1;
if (numdoc == 5L) if ((numdoc == 308L) || (numdoc == 343L))
int i = 1; int i = 1;
#endif #endif
//documento della prima riga e quindi anche di tutte le altre righe conai //documento della prima riga e quindi anche di tutte le altre righe conai
@ -517,23 +537,9 @@ bool TDichiarazione_CONAI::scrivi_csv(const TRectype& prima_riga, TDichiarazione
} }
} }
if (n_riga_generata > 0) if (n_riga_generata > 0)
scrivi_csv_doc_con_riga_generata(doc, n_riga_generata, csv, conai_specie, sottoclass, conai_codsp, log); scrivi_csv_doc_generata(doc, n_riga_generata, csv, conai_specie, sottoclass, conai_codsp, log);
else else
{ scrivi_csv_doc_not_generata(doc, csv, conai_specie, sottoclass, conai_codsp);
bool has_rettifica = false;
FOR_EACH_PHYSICAL_RDOC(doc, j, rdoc)
{
//c'è la riga generata con codart di tipo conai (sia automatica che manuale)?
if (rdoc->get(RDOC_CODART) == conai_codsp && !rdoc->is_generata())
{
has_rettifica = true;
break;
}
}
if (has_rettifica)
scrivi_csv_doc_rettifiche(doc, csv, conai_specie, sottoclass, conai_codsp);
}
return true; return true;
} }