#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); }