diff --git a/cg/cg0400.cpp b/cg/cg0400.cpp index 72842fd7a..b6378a498 100755 --- a/cg/cg0400.cpp +++ b/cg/cg0400.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include @@ -161,7 +162,7 @@ public: const char* desc_iva(const TString&); char frequenza_versamenti(long ditta, int anno); void look_pim(); - void ricalcola_liquidazione_se_necessario(); + void ricalcola_liquidazione_se_necessario(int anno, int ultimo_mese); TProgressivi_iva(){}; }; @@ -445,12 +446,12 @@ void TProgressivi_iva::look_pim() _gen1_array.sort(compare_rows); // ordinamento per codice iva } -void TProgressivi_iva::ricalcola_liquidazione_se_necessario() +void TProgressivi_iva::ricalcola_liquidazione_se_necessario(int ultimo_anno, int ultimo_mese) { TRelation rel("LIM"); TRectype& rec = rel.curr(); - TString8 anno; anno.format("%04d", _annoiva); + TString8 anno; anno.format("%04d", ultimo_anno); rec.put("CODTAB", anno); TCursor cur(&rel, "", 1, &rec, &rec); @@ -462,7 +463,7 @@ void TProgressivi_iva::ricalcola_liquidazione_se_necessario() for (cur = 0l; cur.pos() < items; ++cur) { const int mese = atoi(rec.get("CODTAB").mid(4, 2)); - if (mese >= 1 && mese <= 12) + if (mese >= 1 && mese <= ultimo_mese) { if (rec.get_bool("B0")) computed.set(mese); // Mese calcolato! @@ -471,19 +472,24 @@ void TProgressivi_iva::ricalcola_liquidazione_se_necessario() } } - const char freq = frequenza_versamenti(0, _annoiva); - const int periods = freq == 'M' ? 12 : 4; + const char freq = frequenza_versamenti(0, ultimo_anno); + const int periods = freq == 'M' ? ultimo_mese : (ultimo_mese/3); const bool ok = computed.ones() == periods; - if (!ok && yesno_box(FR("Alcuni mesi precedenti non risultano ricalcolati:\n" + if (!ok && yesno_box(FR("Alcuni periodi non risultano ricalcolati:\n" "è consigliabile il ricalcolo. Si desidera eseguirlo?"))) { - for (int mese = (freq == 'M') ? 1 : 3; mese <= 12; mese += (freq == 'M') ? 1 : 3) + const int recalc = (freq == 'M') ? ultimo_mese : ultimo_mese/3; + TProgind pi(recalc, "Ricalcolo liquidazione in corso...", TRUE, TRUE); + for (int mese = (freq == 'M') ? 1 : 3; mese <= ultimo_mese; mese += (freq == 'M') ? 1 : 3) { + pi.addstatus(1); + if (pi.iscancelled()) + break; if (!computed[mese]) { TToken_string body(36); - body.add(_annoiva); + body.add(ultimo_anno); body.add(mese); body.add(get_firm()); body.add("V"); // visualizzazione: no ff alla fine, zeri stampati @@ -813,7 +819,7 @@ bool TProgressivi_iva::set_print(int m) if (_tipoprog == 1 && _livelloprog == 1) _sospmsk = msk.get_int(F_TIPOTAB); //vendite in genere; vendite in sospensione d'imposta - ricalcola_liquidazione_se_necessario(); + ricalcola_liquidazione_se_necessario(_annoiva, 12); setta_intestazione(); azzera_mesi(); cerca_i_pim(); @@ -829,6 +835,8 @@ bool TProgressivi_iva::set_print(int m) _tipo_prog_reg = *msk.get(F_TIPOPROGREG); // L <=> Solo liquidazione, V <=> Solo volume d'affari prefix().set_codditta(_codditta); + ricalcola_liquidazione_se_necessario(_anno, _mese); + TLocalisamfile attiv(LF_ATTIV); attiv.zero(); attiv.put(ATT_CODDITTA, _codditta); diff --git a/cg/cg3600.cpp b/cg/cg3600.cpp index c75b22227..e23adee3c 100755 --- a/cg/cg3600.cpp +++ b/cg/cg3600.cpp @@ -27,6 +27,8 @@ // TList /////////////////////////////////////////////////////////// +#ifdef USE_OBSOLETE_LIST + class TList : public TContainer { enum { MAX_SKIP = 8192 }; @@ -309,6 +311,48 @@ bool TList::remove(long index) return o != NULL; } +#else + +// Simpler and faster 32 bit implemetation + +class TList : public TContainer +{ + TArray _data; + +protected: + // @cmember Ritorna un puntatore al primo oggetto del contenitore + virtual TObject* first_item( ) { return _data.first_item(); } + // @cmember Ritorna un puntatore all'ultimo oggetto del contenitore + virtual TObject* last_item( ) { return _data.last_item(); } + // @cmember Ritorna un puntatore all'oggetto successivo all'oggetto corrente + virtual TObject* succ_item( ) { return _data.succ_item(); } + // @cmember Ritorna un puntatore all'oggetto che precede l'oggetto corrente + virtual TObject* pred_item( ) { return _data.pred_item(); } + // @cmember Ritorna il numero di oggetti nel contenitore + virtual long objects( ) { return _data.objects(); } + +public: + long items() const { return _data.items(); } + void destroy() { _data.destroy(); } + long insert(TObject* obj, long pos) { return _data.insert(obj, pos); } + long append(TObject* obj, long pos = -1); + bool remove(long pos) { _data.remove(pos, TRUE); return TRUE; } + + const TObject& obj(long index) const + { const TObject* o = _data.objptr(index); CHECK(o, "Null list item"); return *o; } +}; + +long TList::append(TObject* obj, long index) +{ + if (index < 0 || index >= items()) + index = items(); + else + index++; + return insert(obj, index); +} + +#endif + /////////////////////////////////////////////////////////// // TBalance /////////////////////////////////////////////////////////// @@ -372,7 +416,7 @@ bool TBalance::find(const TBill& b, int esercizio, av.set('A', saldi.get_real(SLD_PAVERE)); sf.set(saldi.get_char(SLD_FLAGSALFIN), saldi.get_real(SLD_SALDOFIN)); pd.set('D', saldi.get_real(SLD_PDAREPRO)); - pd.set('A', saldi.get_real(SLD_PAVEREPRO)); + pa.set('A', saldi.get_real(SLD_PAVEREPRO)); } else { @@ -712,9 +756,11 @@ void TMastrino::read(const TBill& conto, else max_data_reg = esercizi[ae].fine(); } - + +#ifdef USE_OBSOLETE_LIST // Stima dimensione mastrino _riga.choose_step(num_giorni); +#endif // Valori dei saldi fino alla data di inizio stampa: // Vengono inizializzati con i saldi iniziali dell'esercizio, diff --git a/cg/cglib01.cpp b/cg/cglib01.cpp index dfa2d8e26..86f8be2bb 100755 --- a/cg/cglib01.cpp +++ b/cg/cglib01.cpp @@ -884,10 +884,10 @@ char TBill::sezione() const return _sezione; } -// Certified 99% (uses __tmp_string) +// Certified 100% const char* TBill::string(int mode) const { - TString& s = get_tmp_string(80); + TString& s = get_tmp_string(); if (mode & 0x4) {