campo-sirio/src/cg/cglib05.cpp

292 lines
7.5 KiB
C++
Raw Normal View History

#include "cglib05.h"
///////////////////////////////////////////////////////////
// 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); }
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 == NULL)
_values.add(val = new real, index);
return *val;
}
void TRiepilogoIVA_recordset::requery()
{
if (_freezed)
return;
TString wrk = query_text();
TString query;
TAssoc_array work_array;
TString16 reg_fieldname; reg_fieldname << LF_MOV << "." << MOV_REG;
TString16 datareg_fieldname; datareg_fieldname << LF_MOV << "." << MOV_DATAREG;
TString16 datacomp_fieldname; datacomp_fieldname << LF_MOV << "." << MOV_MESELIQ;
TString16 meseliq_fieldname; meseliq_fieldname << LF_MOV << "." << MOV_MESELIQ;
int p = wrk.find("FROMDATE");
if (p > 0)
query << wrk.left(p) << _from_date.string();
wrk.ltrim(p + 8);
p = wrk.find("TODATE");
if (p > 0)
{
query << wrk.left(p);
if (senzacompetenzaIVA() && !competenzadiversaIVA() && !registrazioneIVAritardo())
query << _to_date.string();
else
{
TDate to(_to_date);
to.set_day(31);
to.set_month(12);
if (_to_date.month() == 12)
to.addyear(1);
query << to.string();
}
query << wrk.mid(p + 6);
}
TISAM_recordset recset(query);
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();
if (((gruppo >= _from_gruppo) && (gruppo <= _to_gruppo)) &&
((conto >= _from_conto) && (conto <= _to_conto)) &&
((sottoconto >= _from_sottoconto) && (conto <= _to_sottoconto)))
{
TRegistro codreg(recset.get(reg_fieldname).as_string());
TipoIVA t = codreg.iva();
// filtro competenza
TDate data = recset.get(datareg_fieldname).as_date();
if (competenzadiversaIVA())
{
const int meseliq = recset.get(meseliq_fieldname).as_int();
if (meseliq != 0)
{
data.set_month(meseliq);
data.set_end_month();
if (data < _from_date || data > _to_date)
continue;
}
}
if (registrazioneIVAritardo())
{
TDate datacomp = recset.get(datacomp_fieldname).as_date();
}
if (senzacompetenzaIVA() && (data < _from_date || data > _to_date))
continue;
if (rec == NULL)
work_array.add(cod, rec = new TRiepilogoIVA_record(cod));
if (t == iva_acquisti)
{
real & r = rec->impacq();
r += recset.get(RMI_IMPONIBILE).as_real();
real & r1 = rec->ivaacq();
r1 += recset.get(RMI_IMPOSTA).as_real();
}
else
if (t == iva_vendite)
{
if (codreg.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(" << LF_MOV << "." << MOV_DATAREG << ";" << '"' << "FROMDATE" << '"' << ";" << '"' << "TODATE" << '"' << ") \nJOIN " << LF_MOV << " INTO NUMREG==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;
}
}
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), _from_date(botime), _to_date(eotime),
_from_gruppo(0), _from_conto(0), _from_sottoconto(0L),
_to_gruppo(999), _to_conto(999), _to_sottoconto(999999L),
_freezed(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);
}