diff --git a/cg/cg2100.cpp b/cg/cg2100.cpp index ed67f1a08..7627cb219 100755 --- a/cg/cg2100.cpp +++ b/cg/cg2100.cpp @@ -1316,14 +1316,13 @@ long TPrimanota_application::calcola_m770(int tipo_coll, real& spese, real& comp if (tipo_coll == 6) { TString_array& rcg = cgs().rows_array(); + TToken_string& row = rcg.row(0); TImporto imp; - - for (int i = rcg.items()-1; i >= 0; i--) - { - TToken_string& row = rcg.row(i); - imp = row; - compenso += imp.valore(); - } + imp = row; + if (imp.sezione() == 'D') + compenso = imp.valore(); + else + compenso = ZERO; } return forn; diff --git a/cg/cg2104.cpp b/cg/cg2104.cpp index f34d59a19..6c46216e1 100755 --- a/cg/cg2104.cpp +++ b/cg/cg2104.cpp @@ -676,7 +676,11 @@ void TPrimanota_application::set_pagamento(const char* c, const char* d) _pag = NULL; } if (c != NULL || d != NULL) + { + if (!TDate::isdate(d)) + d = ""; _pag = new TPagamento(c, d); + } } void TPrimanota_application::set_totale_pagamento(bool update) @@ -950,8 +954,8 @@ void TPrimanota_application::write_scadenze(const TMask& m) { sposta = (oldgame->conto().sottoconto() == newgame->conto().sottoconto()); if (sposta) - sposta = yesno_box("Si desidera spostare la fattura ed i " - "pagamenti relativi nella nuova partita?"); + sposta = yesno_box("Si desidera spostare la fattura e gli eventuali\n" + "pagamenti relativi nella partita %d %s?", anno, (const char*)numpart); } if (sposta) { diff --git a/cg/cg2105.cpp b/cg/cg2105.cpp index 71502c823..f9a23f9d7 100755 --- a/cg/cg2105.cpp +++ b/cg/cg2105.cpp @@ -1364,17 +1364,9 @@ bool TGame_mask::nuovo_handler(TMask_field& f, KEY k) if (edit) { - if (game.ok()) - { - gm.set(P_ANNO, anno); - gm.set(P_NUMERO, numero); - gm._changed = TRUE; - } - else - { - if (!game.is_on_file()) - app().partite().destroy(game); - } + gm.set(P_ANNO, anno); + gm.set(P_NUMERO, numero); + gm._changed = TRUE; // Aggiorna sheet partite: aggiunge la nuova partita e lo riordina gm.fill_partite(); diff --git a/cg/pagament.cpp b/cg/pagament.cpp index c09d190c4..9351f6fcd 100755 --- a/cg/pagament.cpp +++ b/cg/pagament.cpp @@ -63,9 +63,10 @@ void TPagamento::set_inizio(const TDate& d, bool rispetta_date) if (_inscad == 'F' && _mcomm && _inizio.day() == 31) _inizio.set_day(30); } - + TDate data(rispetta_date ? data_rata(0) : _inizio); // Aggiusta data iniziale con i gironi prima rata - next_scad(data, scad_rata(0), _mcomm, 0); + if (!rispetta_date) + next_scad(data, scad_rata(0), _mcomm, 0); bool dummy; recalc_rate(0, FALSE, NULL, NULL, data.string(), NULL, NULL, _rdiff, _mcomm, dummy); @@ -430,33 +431,39 @@ void TPagamento::set_numero_rate(int n, int sscad, int rdiff) void TPagamento::next_scad(TDate& d, int scad, bool mcomm, int rata) { - if (mcomm && !(rata == 0 && (scad % 30) != 0)) + if (mcomm && (rata > 0 || (scad % 30) == 0)) { - int nm = scad / 30; - int ny = nm / 12; - nm %= 12; + int nm = scad / 30; + int ny = nm / 12; + nm %= 12; int newm = d.month() + nm; if (newm > 12) { newm -= 12; ny++; } - bool last = d.is_end_month() && inizio_scadenza() == 'M'; +// bool last = d.is_end_month() && inizio_scadenza() == 'M'; + const bool last = inizio_scadenza() == 'M' || _datadoc.is_end_month(); int dy = d.day(); - // la palla del febbraio & c. + // la palla del febbraio & c. ??? if (rata > 1) { - TDate oldd(data_rata(rata-2)); + const TDate oldd(data_rata(rata-2)); if (oldd.day() > dy) dy = oldd.day(); } - d.set_day(1); // il giorno 1 ce l'hanno tutti + d.set_day(1); // il giorno 1 ce l'hanno tutti d.set_month(newm); d.set_year(d.year()+ny); - +/* d.set_end_month(); if (!last && dy < d.day()) d.set_day(dy); +*/ + if (last) + d.set_end_month(); + else + d.set_day(dy); } else { @@ -1472,10 +1479,7 @@ bool TPagamento::read(TTable* t, TTable* r) // aggiusta _inizio secondo INSCAD; vedi mese commerciale etc. if (_inscad == 'M') - { - if (_mcomm) _inizio.set_day(_inizio.month() == 2 ? 28 : 30); - else _inizio.set_end_month(); - } + _inizio.set_end_month(); else if (_inscad == 'F' && _mcomm && _inizio.day() == 31) _inizio.set_day(30);