diff --git a/sc/sc2100.cpp b/sc/sc2100.cpp index 737e220df..2eff02d4d 100755 --- a/sc/sc2100.cpp +++ b/sc/sc2100.cpp @@ -54,6 +54,7 @@ protected: int find_magic(TString& s, TString& magic1, TString& magic2) const; void change_magic_body(const TEC_row& o, TString& s); void change_magic_footer(const THash_object& o, TString& s); + void modify_picture(TForm_item& fi, TString_array& op, const bool in_valuta); void print_total(int riga, const THash_object& o); void stampa_testata(TPrinter& p); @@ -147,7 +148,7 @@ public: void print_on(TPrint_section& body); TEC_row(const TRiga_partite& row, const TDate& data, const TImporto& imp, int rata); - TEC_row(const char* desc, const TImporto& imp); + TEC_row(const char* desc, const TImporto& imp, const TValuta& val); virtual ~TEC_row() {} }; @@ -168,11 +169,12 @@ TEC_row::TEC_row(const TRiga_partite& row, const TDate& data, const TImporto& im _valuta.get(row); } -TEC_row::TEC_row(const char* desc, const TImporto& imp) +TEC_row::TEC_row(const char* desc, const TImporto& imp, const TValuta& val) : _riga(9999), _rata(9999), _num_prot(0), _num_reg(0), _salvo_buon_fine(FALSE) { _descrizione = desc; _importo = imp; _importo.normalize(); + _valuta = val; } // Le righe dell'estratto conto sono ordinate per data, riga partita, numero rata o @@ -219,17 +221,19 @@ void TEC_row::set_imp(TForm_item& fi, const real& imp, bool valuta) const if (old_picture.find(',') > 0) new_picture << ".###"; else - new_picture << ",###"; + new_picture << ",@@@"; } + int exceed = fi.width() - new_picture.len(); + if (exceed<0) + { + exceed=::abs(exceed); + new_picture = new_picture.mid(exceed,new_picture.len()-exceed); + } fi.set_picture(new_picture); } fi.set(imp.string()); - if (valuta) - { - fi.set_picture(old_picture); - } } TEC_form& TEC_row::form() const @@ -271,10 +275,13 @@ void TEC_row::print_on(TPrint_section& body) TForm_item& datapag = body.find_field(PEC_DATAPAG); datapag.set(_data.string()); + TString_array old_pictures; const real& imp = _importo.valore(); TForm_item& dare = body.find_field(PEC_DARE); TForm_item& avere = body.find_field(PEC_AVERE); + old_pictures.add(dare.picture()); + old_pictures.add(avere.picture()); if (_importo.sezione() == 'D') { set_imp(dare, imp, valuta); @@ -287,9 +294,11 @@ void TEC_row::print_on(TPrint_section& body) } TForm_item& scaduto = body.find_field(PEC_SCADUTO); + old_pictures.add(scaduto.picture()); set_imp(scaduto, _scaduto, valuta); TForm_item& esposto = body.find_field(PEC_ESPOSTO); + old_pictures.add(esposto.picture()); set_imp(esposto, _esposto, valuta); esposto.set_prompt(_salvo_buon_fine ? "*" : " "); @@ -308,7 +317,12 @@ void TEC_row::print_on(TPrint_section& body) body.update(); // Crea vera riga di stampa esposto.set_prompt(" "); // Ripristina il vecchi prompt - descr.set_prompt(old_prompt); + descr.set_prompt(old_prompt); + dare.set_picture(old_pictures.row(0)); + avere.set_picture(old_pictures.row(1)); + scaduto.set_picture(old_pictures.row(2)); + esposto.set_picture(old_pictures.row(3)); + } /////////////////////////////////////////////////////////// @@ -655,9 +669,8 @@ void TEC_form::stampa_riporti(TPrinter& pr) THash_object* tot[MAXTOT]; _num_rip = ordina_totali_per_valuta(tot); - const word maxtot = section('F').height() - 1; // La prima riga e' riservata alla fincatura - if (_num_rip > maxtot) - _num_rip = maxtot; + if (_num_rip > _maxtot) + _num_rip = _maxtot; const TString& riporto = describe(PEC_RIPORTO); TString desc(80); @@ -668,9 +681,14 @@ void TEC_form::stampa_riporti(TPrinter& pr) TTotal& t = (TTotal&)(tot[j]->obj()); desc = riporto; + TValuta val; if (key.not_empty()) + { desc << ' ' << key; - TEC_row rip(desc, t.importo().normalize()); + TValuta val1(key,botime,ZERO); // E' una valuta fittizia, giusto per far + val = val1; // eseguire in set_imp() i calcoli per i decimali. + } + TEC_row rip(desc, t.importo().normalize(),val); rip.scaduto(t.scaduto()); rip.esposto(t.esposto()); rip.importo_lire(t.importo_lire()); @@ -748,6 +766,27 @@ void TEC_form::change_magic_footer(const THash_object& o, TString& s) } } +void TEC_form::modify_picture(TForm_item& fi, TString_array& op, const bool in_valuta) +{ + if (in_valuta && _in_valuta) + { + TString pic(20); + pic = fi.picture(); + op.add(pic); + if (pic.find(',') > 0) + pic << ".###"; + else + pic << ",@@@"; + int exceed = fi.width() - pic.len(); + if (exceed<0) + { + exceed=::abs(exceed); + pic = pic.mid(exceed,pic.len()-exceed); + } + fi.set_picture(pic); + } +} + void TEC_form::print_total(int riga, const THash_object& o) { const short MAXID = 4; @@ -776,9 +815,13 @@ void TEC_form::print_total(int riga, const THash_object& o) const TTotal& t = (const TTotal&)o.obj(); const TImporto& imp = t.importo(); + const bool in_valuta = o.key().not_empty(); TForm_item& dare = foot.find_field(PEC_DARE); TForm_item& avere = foot.find_field(PEC_AVERE); + TString_array old_pictures;//pictures da rippristinare dopo aver stampato + modify_picture(dare,old_pictures,in_valuta); + modify_picture(avere,old_pictures,in_valuta); if (dare.x() <= 0 || avere.x() <= 0) { TForm_item& bdare = body.find_field(PEC_DARE); @@ -810,6 +853,7 @@ void TEC_form::print_total(int riga, const THash_object& o) } TForm_item& scaduto = foot.find_field(PEC_SCADUTO); + modify_picture(scaduto,old_pictures,in_valuta); if (scaduto.x() <= 0) { TForm_item& bscaduto = body.find_field(PEC_SCADUTO); @@ -818,6 +862,7 @@ void TEC_form::print_total(int riga, const THash_object& o) scaduto.set(t.scaduto().string()); TForm_item& esposto = foot.find_field(PEC_ESPOSTO); + modify_picture(esposto,old_pictures,in_valuta); if (esposto.x() <= 0) { TForm_item& besposto = body.find_field(PEC_ESPOSTO); @@ -846,6 +891,13 @@ void TEC_form::print_total(int riga, const THash_object& o) } } + if (in_valuta)//restore old pictures + { + dare.set_picture(old_pictures.row(0)); + avere.set_picture(old_pictures.row(1)); + scaduto.set_picture(old_pictures.row(2)); + esposto.set_picture(old_pictures.row(3)); + } for (word r = 0; r < _total_rows; r++) printer().setfooterline(riga + r, foot.row(r)); } @@ -950,7 +1002,7 @@ bool TEC_form::print_game(const TPartita& game) { saldo.normalize(); - TEC_row sld(describe(PEC_SALDO), saldo); + TEC_row sld(describe(PEC_SALDO), saldo, righe.row(r-1).valuta()); sld.scaduto(scaduto); sld.esposto(esposto); sld.importo_lire(implire); diff --git a/sc/sc2401.cpp b/sc/sc2401.cpp index 1281d187f..3f3d377dc 100755 --- a/sc/sc2401.cpp +++ b/sc/sc2401.cpp @@ -75,11 +75,12 @@ TESSL_row::TESSL_row(const TRiga_partite& row, const TDate& data, const TImporto _valuta.get(row); } -TESSL_row::TESSL_row(const char* desc, const TImporto& imp) +TESSL_row::TESSL_row(const char* desc, const TImporto& imp, const TValuta& val) : _riga(9999), _rata(9999), _num_prot(0), _num_reg(0), _salvo_buon_fine(FALSE) { _descrizione = desc; - _importo = imp; _importo.normalize(); + _importo = imp; _importo.normalize(); + _valuta = val; } // le righe dell'estratto conto sono ordinate per data, riga partita, numero rata, @@ -126,17 +127,19 @@ void TESSL_row::set_imp(TForm_item& fi, const real& imp, bool valuta) const if (old_picture.find(',') > 0) new_picture << ".###"; else - new_picture << ",###"; - } + new_picture << ",@@@"; + } + int exceed = fi.width() - new_picture.len(); + if (exceed<0) + { + exceed=::abs(exceed); + new_picture = new_picture.mid(exceed,new_picture.len()-exceed); + } fi.set_picture(new_picture); } fi.set(imp.string()); - if (valuta) - { - fi.set_picture(old_picture); - } } TESSL_form& TESSL_row::form() const @@ -181,10 +184,13 @@ void TESSL_row::print_on(TPrint_section& body) TForm_item& datapag = body.find_field(PEC_DATAPAG); datapag.set(_data.string()); + TString_array old_pictures; const real& imp = _importo.valore(); TForm_item& dare = body.find_field(PEC_DARE); TForm_item& avere = body.find_field(PEC_AVERE); - + + old_pictures.add(dare.picture()); + old_pictures.add(avere.picture()); if (_importo.sezione() == 'D') { set_imp(dare, imp, valuta); @@ -200,9 +206,11 @@ void TESSL_row::print_on(TPrint_section& body) importo_in_lire.set(_importo_lire.string()); TForm_item& scaduto = body.find_field(PEC_SCADUTO); + old_pictures.add(scaduto.picture()); set_imp(scaduto, _scaduto, valuta); TForm_item& esposto = body.find_field(PEC_ESPOSTO); + old_pictures.add(esposto.picture()); set_imp(esposto, _esposto, valuta); esposto.set_prompt(_salvo_buon_fine ? "*" : " "); @@ -219,6 +227,10 @@ void TESSL_row::print_on(TPrint_section& body) esposto.set_prompt(" "); descr.set_prompt(old_prompt); // Ripristina il vecchio prompt + dare.set_picture(old_pictures.row(0)); + avere.set_picture(old_pictures.row(1)); + scaduto.set_picture(old_pictures.row(2)); + esposto.set_picture(old_pictures.row(3)); } static int val_compare(const void* o1, const void* o2) { @@ -541,7 +553,6 @@ void TESSL_form::stampa_riporti(TPrinter& pr) THash_object* tot[MAXTOT]; _num_rip = ordina_totali_per_valuta(tot); -// const word maxtot = section('F').height() - 1; if (_num_rip > _maxtot) _num_rip = _maxtot; @@ -555,9 +566,14 @@ void TESSL_form::stampa_riporti(TPrinter& pr) TTotal& t = (TTotal&)(tot[j]->obj()); desc = riporto; + TValuta val; if (key.not_empty()) + { desc << ' ' << key; - TESSL_row rip(desc, t.importo().normalize()); + TValuta val1(key,botime,ZERO); // E' una valuta fittizia, giusto per far + val = val1; // eseguire in set_imp() i calcoli per i decimali. + } + TESSL_row rip(desc, t.importo().normalize(),val); rip.scaduto(t.scaduto()); rip.esposto(t.esposto()); rip.importo_in_lire(t.importo_lire()); @@ -635,6 +651,27 @@ void TESSL_form::change_magic_footer(const THash_object& o, TString& s) } } +void TESSL_form::modify_picture(TForm_item& fi, TString_array& op, const bool in_valuta) +{ + if (in_valuta && _in_valuta) + { + TString pic(20); + pic = fi.picture(); + op.add(pic); + if (pic.find(',') > 0) + pic << ".###"; + else + pic << ",@@@"; + int exceed = fi.width() - pic.len(); + if (exceed<0) + { + exceed=::abs(exceed); + pic = pic.mid(exceed,pic.len()-exceed); + } + fi.set_picture(pic); + } +} + void TESSL_form::print_total(int riga, const THash_object& o) { const short MAXID = 5; @@ -663,9 +700,13 @@ void TESSL_form::print_total(int riga, const THash_object& o) const TTotal& t = (const TTotal&)o.obj(); const TImporto& imp = t.importo(); + const bool in_valuta = o.key().not_empty(); TForm_item& dare = foot.find_field(PEC_DARE); TForm_item& avere = foot.find_field(PEC_AVERE); + TString_array old_pictures;//pictures da rippristinare dopo aver stampato + modify_picture(dare,old_pictures,in_valuta); + modify_picture(avere,old_pictures,in_valuta); if (dare.x() <= 0 || avere.x() <= 0) { TForm_item& bdare = body.find_field(PEC_DARE); @@ -696,6 +737,7 @@ void TESSL_form::print_total(int riga, const THash_object& o) } TForm_item& scaduto = foot.find_field(PEC_SCADUTO); + modify_picture(scaduto,old_pictures,in_valuta); if (scaduto.x() <= 0) { TForm_item& bscaduto = body.find_field(PEC_SCADUTO); @@ -704,6 +746,7 @@ void TESSL_form::print_total(int riga, const THash_object& o) scaduto.set(t.scaduto().string()); TForm_item& esposto = foot.find_field(PEC_ESPOSTO); + modify_picture(esposto,old_pictures,in_valuta); if (esposto.x() <= 0) { TForm_item& besposto = body.find_field(PEC_ESPOSTO); @@ -720,6 +763,7 @@ void TESSL_form::print_total(int riga, const THash_object& o) implire.set(t.importo_lire().string()); TForm_item& unreferenced = foot.find_field(PEC_UNASSIGNED); + modify_picture(unreferenced,old_pictures,in_valuta); if (unreferenced.x() <= 0) { TForm_item& uns = body.find_field(PEC_AVERE); @@ -739,7 +783,14 @@ void TESSL_form::print_total(int riga, const THash_object& o) desc_field.set_prompt(*p); } } - + if (in_valuta)//restore old pictures + { + dare.set_picture(old_pictures.row(0)); + avere.set_picture(old_pictures.row(1)); + scaduto.set_picture(old_pictures.row(2)); + esposto.set_picture(old_pictures.row(3)); + unreferenced.set_picture(old_pictures.row(4)); + } for (word r = 0; r < _total_rows; r++) printer().setfooterline(riga + r, foot.row(r)); } @@ -814,7 +865,6 @@ bool TESSL_form::print_game(const TPartita& game) for (int r = 0; r < righe.items(); r++) { TESSL_row& riga = righe.row(r); - if (pr.rows_left() < body.height()) { pr.formfeed(); @@ -850,7 +900,7 @@ bool TESSL_form::print_game(const TPartita& game) { saldo.normalize(); - TESSL_row sld(describe(PEC_SALDO), saldo); + TESSL_row sld(describe(PEC_SALDO), saldo, righe.row(r-1).valuta()); sld.scaduto(scaduto); sld.esposto(esposto); sld.importo_in_lire(implire); diff --git a/sc/sc2401.h b/sc/sc2401.h index 479a1ebbc..6a1bde903 100755 --- a/sc/sc2401.h +++ b/sc/sc2401.h @@ -97,7 +97,7 @@ public: void print_on(TPrint_section& body); TESSL_row(const TRiga_partite& row, const TDate& data, const TImporto& imp, int rata); - TESSL_row(const char* desc, const TImporto& imp); + TESSL_row(const char* desc, const TImporto& imp, const TValuta& val); virtual ~TESSL_row() {} }; @@ -137,6 +137,7 @@ protected: int find_magic(TString& s, TString& magic1, TString& magic2) const; void change_magic_body(const TESSL_row& o, TString& s); void change_magic_footer(const THash_object& o, TString& s); + void modify_picture(TForm_item& fi, TString_array& op, const bool in_valuta); void print_total(int riga, const THash_object& o); void stampa_testata(TPrinter& p); diff --git a/sc/sc2402.cpp b/sc/sc2402.cpp index e4e195816..0bd9212e8 100755 --- a/sc/sc2402.cpp +++ b/sc/sc2402.cpp @@ -39,8 +39,8 @@ TSol_row::TSol_row(const TRiga_partite& row, const TDate& data, const TImporto& { } -TSol_row::TSol_row(const char* desc, const TImporto& imp) - :TESSL_row(desc, imp) +TSol_row::TSol_row(const char* desc, const TImporto& imp, const TValuta& val) + :TESSL_row(desc, imp, val) {} diff --git a/sc/sc2402.h b/sc/sc2402.h index 81fb26689..60db7570e 100755 --- a/sc/sc2402.h +++ b/sc/sc2402.h @@ -43,7 +43,7 @@ protected: // TSortable public: TSol_row(const TRiga_partite& row, const TDate& data, const TImporto& imp, int rata); - TSol_row(const char* desc, const TImporto& imp); + TSol_row(const char* desc, const TImporto& imp, const TValuta& val); virtual ~TSol_row() {} };