Patch level : 12.0 1040

Files correlati     : tutto in
Commento            :

Aggiornato il modulo intra

Interno :

Primo rilascio mancano  la generazione riepiloghi e l'invio delle righe di servizio
This commit is contained in:
Alessandro Bonazzi 2021-03-16 13:42:00 +01:00
parent 0d18d1808a
commit 77e13fc725
2 changed files with 130 additions and 77 deletions

View File

@ -447,6 +447,7 @@ public: // TObject
int regime_speciale() const { return get_int("I5");}
const TString& natura() const { return get("S12"); }
const TString& tipo_intra() const { return get("S13"); }
TCodiceIVA(const char* codice = nullptr);
TCodiceIVA(const TRectype & rec) : TRectype(rec) {}
@ -940,8 +941,8 @@ public:
virtual const TString& query_text() const;
virtual unsigned int columns() const { return _info.items(); }
virtual const TRecordset_column_info& column_info(unsigned int column) const { return (const TRecordset_column_info&)_info[column]; }
// const TString& col2name(unsigned int column) const;
virtual const TVariant& get(unsigned int column) const;
const TVariant& get(const char * name) const;
void set_from(const TDate& from) { set_var("#FROMDATE", from, true); ; }
void set_to(const TDate& to) { set_var("#TODATE", to, true); }
@ -960,6 +961,8 @@ public:
bool set_annual(bool on) { return _annuale = on; }
bool annuale() const { return _annuale; }
virtual bool is_competenza() const { return false; }
virtual int is_intra() const { return false; }
virtual const char * remap_IVA(const char * codIVA, const TISAM_recordset & rmov) const { return codIVA; }
TRiepilogoIVA_recordset();
virtual ~TRiepilogoIVA_recordset() { }

View File

@ -72,7 +72,7 @@ void TRiepilogoIVA_recordset::requery()
TAssoc_array work_array;
TISAM_recordset recset(query_text());
recset.set_var("#FROMDATE", from(), true);
recset.set_var("#FROMDATE", from(), true);
recset.set_var("#TODATE", to(), true);
recset.set_var("#ANNO", (long)anno(), true);
if (codatt().full())
@ -81,79 +81,84 @@ void TRiepilogoIVA_recordset::requery()
recset.set_var("#AMESE", (long)a_mese(), true);
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
{
TString cod = recset.get(RMI_CODIVA).as_string();
TRiepilogoIVA_record * rec = (TRiepilogoIVA_record *)work_array.objptr(cod);
long gruppo = recset.get(RMI_GRUPPO).as_int();
long conto = recset.get(RMI_CONTO).as_int();
long sottoconto = recset.get(RMI_SOTTOCONTO).as_int();
int indetr = recset.get(RMI_TIPODET).as_int();
TString cod = remap_IVA(recset.get(RMI_CODIVA).as_string(), recset);
TRegistro reg(recset.get(FIELD_NAME(LF_MOV, MOV_REG)).as_string());
TipoIVA t = reg.iva();
TDate data = recset.get(FIELD_NAME(LF_MOV, MOV_DATAREG)).as_date();
const int meseliq = recset.get(FIELD_NAME(LF_MOV, MOV_MESELIQ)).as_int();
const TDate datadoc = recset.get(FIELD_NAME(LF_MOV, MOV_DATADOC)).as_date();
const TipoIVA tipo = reg.iva(); // 1=Vendite; 2=Acquisti
const bool fatt_rit_2018 = recset.get(FIELD_NAME(LF_MOV, MOV_RITFATT)).as_bool() && (data.year() >= 2018);
const int year_diff = data.year() - datadoc.year();
const bool fattritind = ((tipo == iva_acquisti) && fatt_rit_2018) && ((year_diff > 2) || ((year_diff >= 1) && data.month() >= 5));
const bool fattrit = ((tipo == iva_acquisti) && !fattritind && fatt_rit_2018) && (year_diff >= 1);
if (cod.full())
{
TRiepilogoIVA_record * rec = (TRiepilogoIVA_record *)work_array.objptr(cod);
long gruppo = recset.get(RMI_GRUPPO).as_int();
long conto = recset.get(RMI_CONTO).as_int();
long sottoconto = recset.get(RMI_SOTTOCONTO).as_int();
int indetr = recset.get(RMI_TIPODET).as_int();
if (is_competenza())
{
if (meseliq != 0)
{
if (meseliq > data.month())
data.addyear(-1);
data.set_month(meseliq);
data.set_end_month();
}
}
if (fattrit)
{
data.addyear(-1);
data.set_month(12);
data.set_end_month();
}
if (data.year() != anno() || (data.year() == anno() && (data.month() < da_mese() || data.month() > a_mese())))
continue;
if (rec == nullptr)
work_array.add(cod, rec = new TRiepilogoIVA_record(cod));
if (t == iva_acquisti)
{
if (indetr == 0)
{
real & r = rec->impacq();
r += recset.get(RMI_IMPONIBILE).as_real();
real & r1 = rec->ivaacq();
r1 += recset.get(RMI_IMPOSTA).as_real();
}
else
{
real & r = rec->impacqind();
r += recset.get(RMI_IMPONIBILE).as_real();
real & r1 = rec->ivaacqind();
r1 += recset.get(RMI_IMPOSTA).as_real();
}
}
else
if (t == iva_vendite)
{
if (reg.corrispettivi())
{
real & r = rec->impcorr();
r += recset.get(RMI_IMPONIBILE).as_real();
real & r1 = rec->ivacorr();
r1 += recset.get(RMI_IMPOSTA).as_real();
}
else
{
real & r = rec->impven();
r += recset.get(RMI_IMPONIBILE).as_real();
real & r1 = rec->ivaven();
r1 += recset.get(RMI_IMPOSTA).as_real();
}
}
TRegistro reg(recset.get(FIELD_NAME(LF_MOV, MOV_REG)).as_string());
TipoIVA t = reg.iva();
TDate data = recset.get(FIELD_NAME(LF_MOV, MOV_DATAREG)).as_date();
const int meseliq = recset.get(FIELD_NAME(LF_MOV, MOV_MESELIQ)).as_int();
const TDate datadoc = recset.get(FIELD_NAME(LF_MOV, MOV_DATADOC)).as_date();
const TipoIVA tipo = reg.iva(); // 1=Vendite; 2=Acquisti
const bool fatt_rit_2018 = recset.get(FIELD_NAME(LF_MOV, MOV_RITFATT)).as_bool() && (data.year() >= 2018);
const int year_diff = data.year() - datadoc.year();
const bool fattritind = ((tipo == iva_acquisti) && fatt_rit_2018) && ((year_diff > 2) || ((year_diff >= 1) && data.month() >= 5));
const bool fattrit = ((tipo == iva_acquisti) && !fattritind && fatt_rit_2018) && (year_diff >= 1);
if (is_competenza())
{
if (meseliq != 0)
{
if (meseliq > data.month())
data.addyear(-1);
data.set_month(meseliq);
data.set_end_month();
}
}
if (fattrit)
{
data.addyear(-1);
data.set_month(12);
data.set_end_month();
}
if (data.year() != anno() || (data.year() == anno() && (data.month() < da_mese() || data.month() > a_mese())))
continue;
if (rec == nullptr)
work_array.add(cod, rec = new TRiepilogoIVA_record(cod));
if (t == iva_acquisti)
{
if (indetr == 0)
{
real & r = rec->impacq();
r += recset.get(RMI_IMPONIBILE).as_real();
real & r1 = rec->ivaacq();
r1 += recset.get(RMI_IMPOSTA).as_real();
}
else
{
real & r = rec->impacqind();
r += recset.get(RMI_IMPONIBILE).as_real();
real & r1 = rec->ivaacqind();
r1 += recset.get(RMI_IMPOSTA).as_real();
}
}
else
if (t == iva_vendite)
{
if (reg.corrispettivi())
{
real & r = rec->impcorr();
r += recset.get(RMI_IMPONIBILE).as_real();
real & r1 = rec->ivacorr();
r1 += recset.get(RMI_IMPOSTA).as_real();
}
else
{
real & r = rec->impven();
r += recset.get(RMI_IMPONIBILE).as_real();
real & r1 = rec->ivaven();
r1 += recset.get(RMI_IMPOSTA).as_real();
}
}
}
}
TString_array keys;
@ -187,9 +192,11 @@ const TString& TRiepilogoIVA_recordset::query_text() const
{
TString & query = get_tmp_string();
// query << "USE " << LF_RMOVIVA << " KEY 1 SELECT BETWEEN(" << FIELD_NAME(LF_MOV, MOV_DATAREG) << ";" << '"' << "FROMDATE" << '"' << ";" << '"' << "TODATE" << '"' << ")";
query << "USE " << LF_RMOVIVA << " KEY 1 SELECT BETWEEN(" << FIELD_NAME(LF_MOV, MOV_DATAREG) << "; #FROMDATE; #TODATE)";
if (codatt().full())
if (is_intra())
query << "&&(" << FIELD_NAME(LF_CAUSALI, CAU_INTRACOM) << "==\"X\")&&("
<< FIELD_NAME(REG, "I0") << "=\"2\")";
if (codatt().full())
{
// query << "&&(" << FIELD_NAME(REG, "S8") << "==\"" << _codatt << "\")";
query << "&&(" << FIELD_NAME(REG, "S8") << "=#CODATT)";
@ -198,7 +205,13 @@ const TString& TRiepilogoIVA_recordset::query_text() const
}
else
query << "\nJOIN " << LF_MOV << " INTO " << MOV_NUMREG << "==" << RMI_NUMREG;
// query << "USE " << LF_RMOVIVA << " KEY 1 SELECT BETWEEN(" << LF_MOV << "." << MOV_DATAREG << ";FROMDATE;TODATE) \nJOIN " << LF_MOV << " INTO NUMREG==NUMREG";
if (is_intra())
{
query << "\nJOIN " << LF_CAUSALI << " TO " << LF_MOV << " INTO " << CAU_CODCAUS << "==" << MOV_CODCAUS;
query << "\nJOIN REG TO " << LF_MOV << " INTO CODTAB==" << MAIN_SUB_FIELD_NAME(MOV_DATAREG, 7, 10) << "+" << MOV_REG;
query << "\nJOIN " << LF_CLIFO << " TO " << LF_MOV << " INTO " << CLI_TIPOCF << "==" << MOV_TIPO << " " << CLI_CODCF << "==" << MOV_CODCF;
}
return query;
}
@ -291,6 +304,44 @@ void TRiepilogoIVA_recordset::add_field(TFieldtypes tipo, short id, int width, c
_info.add(i);
}
const TVariant& TRiepilogoIVA_recordset::get(const char * name) const
{
const TString16 fldname(name);
TVariant & v = get_tmp_var();
if (fldname == COD)
return v = get((unsigned int) 0);
else
if (fldname == DESC)
v = get(1);
else
if (fldname == IMPACQ)
v = get(2);
else
if (fldname == IVAACQ)
v = get(3);
else
if (fldname == IMPCORR)
v = get(4);
else
if (fldname == IVACORR)
v = get(5);
else
if (fldname == IMPVEN)
v = get(6);
else
if (fldname == IVAVEN)
v = get(7);
else
if (fldname == IMPACQIND)
v = get(8);
else
if (fldname == IVAACQIND)
v = get(9);
return v;
}
const TVariant& TRiepilogoIVA_recordset::get(unsigned int column) const
{
TVariant & v = get_tmp_var();
@ -300,7 +351,6 @@ const TVariant& TRiepilogoIVA_recordset::get(unsigned int column) const
v = get_field(0, info._name);
}
return v;
}