Corretta stampa in valuta.

git-svn-id: svn://10.65.10.50/trunk@2478 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
angelo 1996-01-19 18:28:44 +00:00
parent a4b804a300
commit aba2659298
5 changed files with 134 additions and 31 deletions

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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)
{}

View File

@ -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() {}
};