diff --git a/cg/cg2100.cpp b/cg/cg2100.cpp index ee6e1ef87..c41d235ba 100755 --- a/cg/cg2100.cpp +++ b/cg/cg2100.cpp @@ -125,6 +125,8 @@ TMask* TPrimanota_application::load_mask(int n) m->set_handler(FS_VSCAB, codcab_handler); TMask& sm = ps.sheet_mask(); + sm.set_handler(102, ratalit_handler); + sm.set_handler(103, rataval_handler); sm.set_handler(105, tipopag_handler); sm.set_handler(106, tipopag_handler); } diff --git a/cg/cg2102.h b/cg/cg2102.h index 7f8c3f7d8..9d201c66d 100755 --- a/cg/cg2102.h +++ b/cg/cg2102.h @@ -114,6 +114,10 @@ class TPrimanota_application : public TRelation_application static bool recalc_handler(TMask_field& f, KEY key); static bool codcab_handler(TMask_field& f, KEY key); static bool tipopag_handler(TMask_field& f, KEY key); + + static bool ratalit_handler(TMask_field& f, KEY key); + static bool rataval_handler(TMask_field& f, KEY key); + static bool iva_notify(TSheet_field& s, int r, KEY key); static bool iva_handler(TMask_field& f, KEY key); diff --git a/cg/cg2104.cpp b/cg/cg2104.cpp index b15b658e1..119ac8022 100755 --- a/cg/cg2104.cpp +++ b/cg/cg2104.cpp @@ -432,6 +432,38 @@ bool TPrimanota_application::codcab_handler(TMask_field& f, KEY key) return TRUE; } +bool TPrimanota_application::ratalit_handler(TMask_field& f, KEY key) +{ + if (key == K_F8 || (key == K_TAB && f.focusdirty() && f.get().empty())) + { + TPagamento& pag = app().pagamento(); + if (pag.in_valuta()) + { + TValuta v("", TDate(), pag.cambio()); + const real other(f.mask().get(103)); + TString16 s(v.val2lit(other).string()); + f.set(s); + } + } + return TRUE; +} + +bool TPrimanota_application::rataval_handler(TMask_field& f, KEY key) +{ + if (key == K_F8 || (key == K_TAB && f.focusdirty() && f.get().empty())) + { + TPagamento& pag = app().pagamento(); + if (pag.in_valuta()) + { + TValuta v("", TDate(), pag.cambio()); + const real other(f.mask().get(102)); + TString16 s(v.lit2val(other).string()); + f.set(s); + } + } + return TRUE; +} + void TPrimanota_application::reset_pagamento(TMask&) { TPagamento& pag = pagamento(); diff --git a/cg/pagament.cpp b/cg/pagament.cpp index fffe62b5a..66450ac0b 100755 --- a/cg/pagament.cpp +++ b/cg/pagament.cpp @@ -683,7 +683,7 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified, { // calcola defaults per tipo pagamento e scadenza // nel caso di rate nuove - oldscad = scad_rata(1); + oldscad = scad_rata(srate.items() - 1); if (_mcomm) { int mesi = oldscad / 30; @@ -986,6 +986,7 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified, else if (_inited) { if (dd <= botime) dd = lastdate; + if (j > 0 && nscd == 0) nscd = oldscad; next_scad(dd,nscd,mcomm,j); } else nscd = _int_rate; diff --git a/cg/pagament.h b/cg/pagament.h index eb231596a..8c14399c1 100755 --- a/cg/pagament.h +++ b/cg/pagament.h @@ -112,6 +112,7 @@ public: void set_round(int n) { _round = n; } void set_cambio(const real& ex); bool in_valuta() const { return _cambio != 1.0; } + const real& cambio() const { return _cambio; } // check consistency: returns word with errors flagged, 0 if ok word validate() const;