Files correlati : cg0.exe cg0200a.msk cg0800a.msk cg0800a.rep cg4.exe cg4b00a.msk cg4b00a.rep Commento : Aggiunti campi PADESTIM e PARIFAMM agli indirizzi di spedizione Aggiunta selezione per codice attività nei riepiloghi IVA
331 lines
9.0 KiB
C++
331 lines
9.0 KiB
C++
#include "cglib.h"
|
|
#include "causali.h"
|
|
#include <utility.h>
|
|
|
|
enum tiporeg {
|
|
vendita = 1,
|
|
acquisto = 2,
|
|
riepilogativo = 3,
|
|
incassi = 4,
|
|
giornale = 5,
|
|
sociale = 6,
|
|
cespiti = 7
|
|
};
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// TRiepilogoIVA_report
|
|
///////////////////////////////////////////////////////////
|
|
|
|
bool TRiepilogoIVA_report::set_recordset(TRecordset * set)
|
|
{
|
|
const bool ok = TReport::set_recordset(set);
|
|
|
|
if (set != nullptr)
|
|
{
|
|
set->unfreeze();
|
|
set->requery();
|
|
set->freeze();
|
|
}
|
|
return ok;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// TRiepilogoIVA_recordset
|
|
///////////////////////////////////////////////////////////
|
|
|
|
class TRiepilogoIVA_record : public TObject
|
|
{
|
|
TString4 _cod;
|
|
TArray _values;
|
|
|
|
real & get_val(int index);
|
|
TRiepilogoIVA_record & copy(const TRiepilogoIVA_record & r);
|
|
|
|
public:
|
|
virtual TObject* dup() const { return new TRiepilogoIVA_record(*this); }
|
|
const TString & cod() const { return _cod; }
|
|
real & impacq() { return get_val(0); }
|
|
real & ivaacq() { return get_val(1); }
|
|
real & impcorr() { return get_val(2); }
|
|
real & ivacorr() { return get_val(3); }
|
|
real & impven() { return get_val(4); }
|
|
real & ivaven() { return get_val(5); }
|
|
real & impacqind() { return get_val(6); }
|
|
real & ivaacqind() { return get_val(7); }
|
|
TRiepilogoIVA_record& operator= (const TRiepilogoIVA_record & rec) { return copy(rec);}
|
|
|
|
TRiepilogoIVA_record(const TRiepilogoIVA_record & rec) { copy(rec); }
|
|
|
|
TRiepilogoIVA_record(const char * cod) : _cod(cod) {}
|
|
};
|
|
|
|
TRiepilogoIVA_record & TRiepilogoIVA_record::copy(const TRiepilogoIVA_record & r)
|
|
{
|
|
_cod = r._cod;
|
|
_values = r._values;
|
|
return *this;
|
|
}
|
|
|
|
real & TRiepilogoIVA_record::get_val(int index)
|
|
{
|
|
real * val = (real *)_values.objptr(index);
|
|
|
|
if (val == nullptr)
|
|
_values.add(val = new real, index);
|
|
return *val;
|
|
}
|
|
|
|
void TRiepilogoIVA_recordset::requery()
|
|
{
|
|
if (not_frozen())
|
|
{
|
|
TAssoc_array work_array;
|
|
TISAM_recordset recset(query_text());
|
|
|
|
recset.set_var("#FROMDATE", from(), true);
|
|
recset.set_var("#TODATE", to(), true);
|
|
recset.set_var("#ANNO", (long)anno(), true);
|
|
if (codatt().full())
|
|
recset.set_var("#CODATT", codatt(), true);
|
|
recset.set_var("#DAMESE", (long)da_mese(), true);
|
|
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();
|
|
|
|
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;
|
|
|
|
work_array.get_keys(keys);
|
|
_rows.destroy();
|
|
FOR_EACH_ARRAY_ITEM(keys, i, obj)
|
|
{
|
|
TString & key = (TString &)*obj;
|
|
TRiepilogoIVA_record & row = (TRiepilogoIVA_record &)work_array.find(key);
|
|
|
|
_rows.add(row);
|
|
}
|
|
}
|
|
}
|
|
|
|
bool TRiepilogoIVA_recordset::move_to(TRecnotype pos)
|
|
{
|
|
bool ok = (pos >= 0) && (pos < items());
|
|
|
|
if (_pos < 0)
|
|
pos = 0;
|
|
else
|
|
if (_pos >= items())
|
|
_pos = items() - 1;
|
|
else
|
|
_pos = pos;
|
|
return ok;
|
|
}
|
|
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())
|
|
{
|
|
// query << "&&(" << FIELD_NAME(REG, "S8") << "==\"" << _codatt << "\")";
|
|
query << "&&(" << FIELD_NAME(REG, "S8") << "=#CODATT)";
|
|
query << "\nJOIN " << LF_MOV << " INTO " << MOV_NUMREG << "==" << RMI_NUMREG;
|
|
query << "\nJOIN REG TO " << LF_MOV << " INTO CODTAB==" << MAIN_SUB_FIELD_NAME(MOV_DATAREG, 7, 10) << "+" << MOV_REG;
|
|
}
|
|
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";
|
|
return query;
|
|
}
|
|
|
|
const TVariant& TRiepilogoIVA_recordset::get_field(int num, const char* field) const
|
|
{
|
|
if (*field != '#')
|
|
{
|
|
TVariant & val = get_tmp_var();
|
|
TRiepilogoIVA_record & row = (TRiepilogoIVA_record &) _rows[_pos];
|
|
|
|
if (xvt_str_compare_ignoring_case(field, IVAVEN) == 0)
|
|
int i = 1;
|
|
if (xvt_str_compare_ignoring_case(field, COD) == 0)
|
|
{
|
|
val = row.cod();
|
|
return val;
|
|
}
|
|
else
|
|
if (xvt_str_compare_ignoring_case(field, DESC) == 0)
|
|
{
|
|
TCodiceIVA c(row.cod());
|
|
|
|
val = c.descrizione();
|
|
return val;
|
|
}
|
|
else
|
|
if (xvt_str_compare_ignoring_case(field, IMPACQ) == 0)
|
|
{
|
|
val = row.impacq();
|
|
return val;
|
|
}
|
|
else
|
|
if (xvt_str_compare_ignoring_case(field, IVAACQ) == 0)
|
|
{
|
|
val = row.ivaacq();
|
|
return val;
|
|
}
|
|
else
|
|
if (xvt_str_compare_ignoring_case(field, IMPCORR) == 0)
|
|
{
|
|
val = row.impcorr();
|
|
return val;
|
|
}
|
|
else
|
|
if (xvt_str_compare_ignoring_case(field, IVACORR) == 0)
|
|
{
|
|
val = row.ivacorr();
|
|
return val;
|
|
}
|
|
else
|
|
if (xvt_str_compare_ignoring_case(field, IMPVEN) == 0)
|
|
{
|
|
val = row.impven();
|
|
return val;
|
|
}
|
|
else
|
|
if (xvt_str_compare_ignoring_case(field, IVAVEN) == 0)
|
|
{
|
|
val = row.ivaven();
|
|
return val;
|
|
}
|
|
else
|
|
if (xvt_str_compare_ignoring_case(field, IMPACQIND) == 0)
|
|
{
|
|
val = row.impacqind();
|
|
return val;
|
|
}
|
|
else
|
|
if (xvt_str_compare_ignoring_case(field, IVAACQIND) == 0)
|
|
{
|
|
val = row.ivaacqind();
|
|
return val;
|
|
}
|
|
}
|
|
return NULL_VARIANT;
|
|
}
|
|
|
|
void TRiepilogoIVA_recordset::add_field(TFieldtypes tipo, short id, int width, const char* name)
|
|
{
|
|
TRecordset_column_info* i = new TRecordset_column_info;
|
|
|
|
TString& n = i->_name;
|
|
|
|
if (name && *name)
|
|
n = name;
|
|
i->_type = tipo;
|
|
i->_pos = id;
|
|
i->_width = width;
|
|
|
|
_info.add(i);
|
|
}
|
|
|
|
const TVariant& TRiepilogoIVA_recordset::get(unsigned int column) const
|
|
{
|
|
TVariant & v = get_tmp_var();
|
|
if (_pos >= 0 && _pos < items() && column >= 0 && column < columns())
|
|
{
|
|
const TRecordset_column_info& info = column_info(column);
|
|
|
|
v = get_field(0, info._name);
|
|
}
|
|
|
|
return v;
|
|
}
|
|
|
|
TRiepilogoIVA_recordset::TRiepilogoIVA_recordset() : TRecordset(), _pos(0), _annuale(false)
|
|
{
|
|
add_field(_alfafld, 101, 4, COD);
|
|
add_field(_alfafld, 102, 50, DESC);
|
|
add_field(_realfld, 103, 18, IMPACQ);
|
|
add_field(_realfld, 104, 18, IVAACQ);
|
|
add_field(_realfld, 105, 18, IMPCORR);
|
|
add_field(_realfld, 106, 18, IVACORR);
|
|
add_field(_realfld, 107, 18, IMPVEN);
|
|
add_field(_realfld, 108, 18, IVAVEN);
|
|
add_field(_realfld, 109, 18, IMPACQIND);
|
|
add_field(_realfld, 110, 18, IVAACQIND);
|
|
}
|
|
|