2Patch level : 12.0 972

Files correlati     : tp0.exe
Commento            :

Modificata la gestione degli addebiti a accrediti di solo CONAI per la dichiarazione.
Bisogna utilizzare righe di spesa a quantità e przzo con codice crispondente al codice spesa CONAI cirrispondente emettere il codice della sottocategoria nel primo camp CONAI. Il peso unitario non serve e NON viene utilizzato.
This commit is contained in:
Alessandro Bonazzi 2020-06-24 19:00:02 +02:00
parent 3931306edf
commit ea05729cc3

View File

@ -98,13 +98,13 @@ protected:
void elabora(const TMask& mask) const;
bool scrivi_csv(const TRectype& prima_riga, TDichiarazione_CONAI_csv_recordset& csv,
const TCONAI_class conai_specie, const TString & sottoclass,
const TString& conai_codart, 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,
TDichiarazione_CONAI_csv_recordset& csv, const TCONAI_class conai_specie,
const TString & sottoclass, TLog_report &log) const;
void scrivi_csv_doc_speciale(const TDocumento& doc, TDichiarazione_CONAI_csv_recordset& csv,
const TString & sottoclass, const TString& conai_codsp, TLog_report &log) const;
void scrivi_csv_doc_rettifiche(const TDocumento& doc, TDichiarazione_CONAI_csv_recordset& csv,
const TCONAI_class conai_specie, const TString & sottoclass,
const TString& conai_codart) const;
const TString& conai_codsp) const;
public:
virtual bool create();
@ -150,7 +150,7 @@ real TDichiarazione_CONAI::clifo_conai(const TCli_for& clifo, const TCONAI_class
void TDichiarazione_CONAI::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 TString & sottoclass,
TLog_report &log) const
const TString& conai_codsp, TLog_report &log) const
{
//prende dalla riga i dati che gli servono per fare vari calcoli
const TRiga_documento& riga_generata = doc[n_riga_generata];
@ -181,14 +181,20 @@ void TDichiarazione_CONAI::scrivi_csv_doc_con_riga_generata(const TDocumento& do
FOR_EACH_PHYSICAL_RDOC(doc, j, rdoc)
{
//quantita' totale conai (A + B) sul report
for (int k = 1; k <= FR_CMAX; k++)
{
const TString4 sottocat = rdoc->get(conai_sottocat_name(k));
if (sottocat == sottoclass)
{
const real n = rdoc->calc_conai_qta(k);
real n;
if (rdoc->is_merce())
n = rdoc->calc_conai_qta(k);
else
if (rdoc->is_spese() && !rdoc->is_generata() && rdoc->get(RDOC_CODART) == conai_codsp)
n = rdoc->get_real(RDOC_QTA);
if (!n.is_zero())
{
real * q = (real *)qta_AB_conai.objptr(j);
@ -287,6 +293,7 @@ void TDichiarazione_CONAI::scrivi_csv_doc_con_riga_generata(const TDocumento& do
csv.set(12, qta_esente_conai);
//valore totale contributo (BxC) sul report
const real totale_contrib_conai = qta_assoggettata_conai * prezzo;
csv.set(14, TVariant(totale_contrib_conai));
@ -309,9 +316,9 @@ 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..
//..farlocchi costruiti ad arte per correggere le vaccate dei rompiscatolifici
void TDichiarazione_CONAI::scrivi_csv_doc_speciale(const TDocumento& doc, TDichiarazione_CONAI_csv_recordset& csv,
void TDichiarazione_CONAI::scrivi_csv_doc_rettifiche(const TDocumento& doc, TDichiarazione_CONAI_csv_recordset& csv,
const TCONAI_class conai_specie, const TString & sottoclass,
const TString& conai_codart) const
const TString& conai_codsp) const
{
//scopre se il doc e' una NAC
const bool is_nac = doc.is_nota_credito();
@ -333,8 +340,25 @@ void TDichiarazione_CONAI::scrivi_csv_doc_speciale(const TDocumento& doc, TDichi
for (int j = 1; j <= FR_CMAX; j++)
{
TString4 sottocat = rdoc->get(conai_sottocat_name(j));
const real peso = rdoc->get_real(conai_peso_name(j));
if (sottocat == sottoclass)
{
real peso;
real prezzo;
const TRectype& spp = cache().get("SPP", conai_codsp);
if (rdoc->is_merce())
{
prezzo = spp.get_real("R10");
peso = rdoc->get_real(conai_peso_name(j));
}
else
if (rdoc->is_spese() && !rdoc->is_generata() && rdoc->get(RDOC_CODART) == conai_codsp)
{
peso = rdoc->get_real(RDOC_QTA);
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
@ -360,9 +384,7 @@ void TDichiarazione_CONAI::scrivi_csv_doc_speciale(const TDocumento& doc, TDichi
csv.set(8, TVariant(sottocat.left(2))); //codice materiale conai (es. carta, legno...)
csv.set(9, TVariant(sottocat)); //sottocodice materiale (es. carta imballo, busta...)
const TRectype& spp = cache().get("SPP", conai_codart);
//prezzo
const real prezzo = spp.get("R10"); // rdoc.get_real(RDOC_PREZZO); //va preso dalla riga stessa
csv.set(10, TVariant(prezzo));
//um conai
@ -414,19 +436,27 @@ 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
bool TDichiarazione_CONAI::scrivi_csv(const TRectype& prima_riga, TDichiarazione_CONAI_csv_recordset& csv,
const TCONAI_class conai_specie, const TString & sottoclass,
const TString& conai_codart, TLog_report &log) const
const TString& conai_codsp, TLog_report &log) const
{
//crea la testata delle righedoc per poter fare vari calcoli (e intanto il tempo se ne va...)
const int anno = prima_riga.get_int(RDOC_ANNO);
const TString4 codnum = prima_riga.get(RDOC_CODNUM);
const long numdoc = prima_riga.get_long(RDOC_NDOC);
#ifdef DBG
//check di debug
if (numdoc == 1451)
const int cazzone = 1;
if (numdoc == 81L)
int i = 1;
#endif
//documento della prima riga e quindi anche di tutte le altre righe conai
TDocumento doc('D', anno, codnum, numdoc);
@ -434,12 +464,6 @@ bool TDichiarazione_CONAI::scrivi_csv(const TRectype& prima_riga, TDichiarazione
const TCli_for& clifo = doc.clifor();
const bool addconai = clifo.vendite().get_bool(CFV_ADDCONAI);
#ifdef DBG
//check di debug
if (numdoc == 1451)
const int cazzone = 1;
#endif
//se il cliente non c'entra con il conai e' inutile perdere tempo!
if (!addconai)
return false;
@ -454,8 +478,8 @@ bool TDichiarazione_CONAI::scrivi_csv(const TRectype& prima_riga, TDichiarazione
{
if (rdoc->is_generata() && rdoc->get(RDOC_GENTIPO) == "C")
has_conai_row = true;
//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()))
//c'è la riga generata con codsp di tipo conai (sia automatica che manuale)?
if (rdoc->get(RDOC_CODART) == conai_codsp && (rdoc->is_spese() && rdoc->is_generata()))
{
n_riga_generata = j;
break;
@ -482,7 +506,7 @@ bool TDichiarazione_CONAI::scrivi_csv(const TRectype& prima_riga, TDichiarazione
FOR_EACH_PHYSICAL_RDOC_BACK(doc, j, rdoc)
{
//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()))
if (rdoc->get(RDOC_CODART) == conai_codsp && (rdoc->is_spese() || rdoc->is_generata()))
{
n_riga_generata = j;
break;
@ -491,10 +515,23 @@ bool TDichiarazione_CONAI::scrivi_csv(const TRectype& prima_riga, TDichiarazione
}
}
if (n_riga_generata > 0)
scrivi_csv_doc_con_riga_generata(doc, n_riga_generata, csv, conai_specie, sottoclass, log);
scrivi_csv_doc_con_riga_generata(doc, n_riga_generata, csv, conai_specie, sottoclass, conai_codsp, log);
else
scrivi_csv_doc_speciale(doc, csv, conai_specie, sottoclass, conai_codart);
{
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;
}
@ -728,7 +765,7 @@ void TDichiarazione_CONAI::elabora(const TMask& mask) const
for (bool ok_scc = scc.move_first(); ok_scc; ok_scc = scc.move_next())
{
TString sottoclass(scc.get("CODTAB").as_string());
TString codart(scc.get("S1").as_string());
TString codsp(scc.get("S1").as_string());
TString msg(str);
msg << " - Sottocategoria " << sottoclass << ')';
@ -746,7 +783,7 @@ void TDichiarazione_CONAI::elabora(const TMask& mask) const
const long ndoc = rdoc.get(RDOC_NDOC).as_int();
if (ndoc != last_ndoc)
{
scrivi_csv(rdoc.cursor()->curr(), *csv, conai_specie, sottoclass, codart, log);
scrivi_csv(rdoc.cursor()->curr(), *csv, conai_specie, sottoclass, codsp, log);
last_ndoc = ndoc;
}
} //for(bool ok = rdoc.move_first(..