Patch level : 12.0 nopatch

Files correlati     :
Commento        :

report application
This commit is contained in:
Alessandro Bonazzi 2021-11-24 11:56:37 +01:00
parent 4fbb00fdb5
commit 4ac26c95d3
3 changed files with 183 additions and 78 deletions

View File

@ -129,6 +129,7 @@ TTrec * TReport_application::get_dbase_recdesc(TReport & rep, const TAutomask &
fieldname = fld.formatted_text();
fieldname.cut(9);
fieldname.strip_spaces();
fieldname.strip(",.");
fieldname.upper();
if (nfields == 0)
@ -169,75 +170,157 @@ void TReport_application::main_loop()
TAutomask & m = get_mask();
KEY k;
bool has_rs = main_app().has_module(RSAUT, CHK_DONGLE);
TString arg = argv(2);
if (m.exist(DLG_EXPORT))
m.enable(DLG_EXPORT, has_rs);
if (m.exist(DLG_EXPORT_EXCEL))
m.enable(DLG_EXPORT_EXCEL, has_rs);
if (m.exist(DLG_EXPORT_PDF))
m.enable(DLG_EXPORT_PDF, has_rs);
if (m.exist(DLG_EXPORT_DBF))
m.enable(DLG_EXPORT_DBF, has_rs);
if (m.exist(DLG_EXPORT_TEXT))
m.enable(DLG_EXPORT_TEXT, has_rs);
if (m.exist(DLG_OUTPUT))
m.show(DLG_OUTPUT, has_rs);
while ((k = m.run()) != K_QUIT)
arg.trim();
if (arg.starts_with("-b"))
{
TReport & rep = get_report(m);
TReport_book b(title());
TFilename name = get_output_filename(m, rep);
bool ask_filename = name.blank();
export_type type = _export_printer;
TFilename fname = arg.mid(2);
switch (k)
if(fname.exist())
{
case K_EXCEL:
type = _export_excel;
break;
case K_PDF:
type = _export_pdf;
break;
case K_TEXT:
type = _export_text;
break;
case K_DBF:
type = _export_dbase;
break;
case K_VISUALIZE:
type = _export_visualize;
break;
default:
break;
m.load(fname);
TReport & rep = get_report(m);
TReport_book b(title());
export_type type = _export_printer;
TFilename name = argv(4);
bool ask_filename = name.blank();
if (name.blank() || name.starts_with("-u"))
name = get_output_filename(m, rep);
k = 20000 + UPCASE(argv(3)[0]);
switch (k)
{
case K_PRINT:
type = _export_printer;
break;
case K_EXPORT:
type = _export_generic;
break;
case K_EXCEL:
type = _export_excel;
break;
case K_PDF:
type = _export_pdf;
break;
case K_TEXT:
type = _export_text;
break;
case K_DBF:
type = _export_dbase;
break;
case K_VISUALIZE:
type = _export_visualize;
break;
default:
break;
}
execute_print(b, m, rep, type);
switch (k)
{
case K_ENTER:
case K_PRINT:
print(b, m, rep);
break;
case K_EXPORT:
export(b, m, rep);
break;
case K_EXCEL:
b.export_excel(name);
break;
case K_PDF:
b.export_pdf(name);
break;
case K_TEXT:
b.export_text(name);
break;
case K_DBF:
b.export_dbase(name, get_dbase_recdesc(rep, m), false, false, ask_filename);
break;
case K_VISUALIZE:
preview(b, m, rep);
break;
default:
break;
}
}
execute_print(b, m, rep, type);
switch (k)
}
else
{
if (m.exist(DLG_EXPORT))
m.enable(DLG_EXPORT, has_rs);
if (m.exist(DLG_EXPORT_EXCEL))
m.enable(DLG_EXPORT_EXCEL, has_rs);
if (m.exist(DLG_EXPORT_PDF))
m.enable(DLG_EXPORT_PDF, has_rs);
if (m.exist(DLG_EXPORT_DBF))
m.enable(DLG_EXPORT_DBF, has_rs);
if (m.exist(DLG_EXPORT_TEXT))
m.enable(DLG_EXPORT_TEXT, has_rs);
if (m.exist(DLG_OUTPUT))
m.show(DLG_OUTPUT, has_rs);
while ((k = m.run()) != K_QUIT)
{
case K_ENTER:
case K_PRINT:
b.print_or_preview();
break;
case K_EXPORT:
b.esporta();
break;
case K_EXCEL:
b.export_excel(name, false, true, ask_filename);
break;
case K_PDF:
b.export_pdf(name, false, true, ask_filename);
break;
case K_TEXT:
b.export_text(name, false, true, ask_filename);
break;
case K_DBF :
b.export_dbase(name, false, get_dbase_recdesc(rep, m), true, ask_filename);
break;
case K_VISUALIZE:
b.preview();
break;
default:
break;
TReport & rep = get_report(m);
TReport_book b(title());
TFilename name = get_output_filename(m, rep);
bool ask_filename = name.blank();
export_type type = _export_printer;
switch (k)
{
case K_EXCEL:
type = _export_excel;
break;
case K_EXPORT:
type = _export_generic;
break;
case K_PDF:
type = _export_pdf;
break;
case K_TEXT:
type = _export_text;
break;
case K_DBF:
type = _export_dbase;
break;
case K_VISUALIZE:
type = _export_visualize;
break;
default:
break;
}
execute_print(b, m, rep, type);
switch (k)
{
case K_ENTER:
case K_PRINT:
b.print_or_preview();
break;
case K_EXPORT:
esporta(b, m, rep);
break;
case K_EXCEL:
export_excel(name, b, m, rep);
break;
case K_PDF:
export_pdf(name, b, m, rep);
break;
case K_TEXT:
export_text(name, b, m, rep);
break;
case K_DBF:
export_dbase(name, b, m, rep);
break;
case K_VISUALIZE:
b.preview();
break;
default:
break;
}
}
}
}
@ -249,5 +332,11 @@ const char * TReport_application::get_output_filename(const TAutomask & mask, co
if (output.blank())
output.tempdir();
output.add(output_name(mask, rep));
TString & t = get_tmp_string(20);
_strtime_s(t.get_buffer(), t.size());
t.strip(":");
output << '_' << today.date2ansi() << '_' << t;
return get_tmp_string() = output;
}

View File

@ -54,11 +54,17 @@ protected: // TApplication
virtual void execute_print(TReport_book & book, TAutomask & mask, TReport & rep, export_type type = _export_printer);
public:
virtual const char * title() const { return title(); }
virtual short output_id() const { return DLG_OUTPUT; }
virtual short report_id() const { return DLG_REPORT; }
const char * report_name(const TAutomask & mask) const { return mask.get(report_id()); }
const char * output_name(const TAutomask & mask, const TReport & rep) const { return report_name(mask); }
virtual void print(TReport_book & book, TAutomask & mask, TReport & rep) { book.print_or_preview(); }
virtual void esporta(TReport_book & book, TAutomask & mask, TReport & rep) { book.esporta();}
virtual void export_excel(TFilename & name, TReport_book & book, TAutomask & mask, TReport & rep) { book.export_excel(name, false, true); }
virtual void export_pdf(TFilename & name, TReport_book & book, TAutomask & mask, TReport & rep) { book.export_pdf(name, false, true); }
virtual void export_text(TFilename & name, TReport_book & book, TAutomask & mask, TReport & rep) { book.export_text(name, 0, false, true); }
virtual void export_dbase(TFilename & name, TReport_book & book, TAutomask & mask, TReport & rep) { book.export_dbase(name, get_dbase_recdesc(rep, mask), false, true); }
virtual void preview(TReport_book & book, TAutomask & mask, TReport & rep) { book.preview(); }
virtual const char * output_name(const TAutomask & mask, const TReport & rep) const { return report_name(mask); }
const char * get_output_filename(const TAutomask & mask, const TReport & rep);
// @cmember Costruttore
TReport_application() { }

View File

@ -960,7 +960,7 @@ TSize TBook::page_res() const
bool TBook::open_page()
{
if (_out == NULL) // Sto per scrivere la prima pagina
if (_out == nullptr) // Sto per scrivere la prima pagina
{
_out = new ofstream(_file);
_max_frame.x = _max_frame.y = 0;
@ -1644,8 +1644,12 @@ HIDDEN bool ask_export_filename(TFilename& fname)
return ok;
}
bool TBook::export_text(TFilename& fname, bool signature, int size, bool goto_url, bool ask_filename)
bool TBook::export_text(TFilename& fname, int size, bool signature, bool goto_url, bool ask_filename)
{
ask_filename != fname.blank();
if (ask_filename && !ask_export_filename(fname))
return false;
TString ext = fname.ext(); ext.lower();
if (ext.blank())
@ -1655,9 +1659,6 @@ bool TBook::export_text(TFilename& fname, bool signature, int size, bool goto_ur
if (ext.starts_with("xls") || ext.starts_with("htm"))
return export_excel(fname, signature, goto_url, ask_filename);
if (ask_filename && !ask_export_filename(fname))
return false;
TToken_string str(1024, '=');
ifstream ifs(_file);
@ -1846,8 +1847,12 @@ static void reformat_excel(TString& str)
}
}
bool TBook::export_dbase(TFilename& fname, bool signature, TTrec * desc, bool goto_url, bool ask_filename)
bool TBook::export_dbase(TFilename& fname, TTrec * desc, bool signature, bool goto_url, bool ask_filename)
{
ask_filename != fname.blank();
if (ask_filename && !ask_export_filename(fname))
return false;
TFilename temp;
TToken_string line(8192, '\t');
TString ext = fname.ext(); ext.lower();
@ -1936,13 +1941,15 @@ bool TBook::export_dbase(TFilename& fname, bool signature, TTrec * desc, bool go
bool TBook::export_excel(TFilename& fname, bool signature, bool goto_url, bool ask_filename)
{
ask_filename != fname.blank();
if (ask_filename && !ask_export_filename(fname))
return false;
TTabulator tab;
TString ext = fname.ext(); ext.lower();
if (ext.blank())
fname.ext("xls");
if (ask_filename && !ask_export_filename(fname))
return false;
int row = 0, col = 0, wid = 0;
TToken_string str(1024, '=');
@ -2380,19 +2387,21 @@ bool TBook::print(size_t pagefrom, size_t pageto, word copies)
bool TBook::export_pdf(TFilename& filename, bool signature, bool goto_url, bool ask_filename)
{
TString ext = filename.ext(); ext.lower();
if (ext.blank())
filename.ext("pdf");
bool ok = (pages() > 0) && main_app().has_module(RSAUT); // Controllo paranoico dei permessi
if (ok)
{
ask_filename |= filename.blank();
if (ask_filename && !ask_export_filename(filename))
return false;
// Evita problemi di aggiornamento del pdf: deve sempre rigenerarlo!
if (filename.exist() && !filename.fremove())
return cantwrite_box(filename);
TString ext = filename.ext(); ext.lower();
if (ext.blank())
filename.ext("pdf");
_pdf_file = filename;
_pagefrom = 1;
@ -2437,7 +2446,7 @@ bool TBook::esporta()
break;
case 'E':
case 'e':
ok = export_text(fname, signature, size);
ok = export_text(fname, size, signature);
if (ok)
xvt_sys_goto_url(fname, "open");
break;
@ -2458,7 +2467,7 @@ bool TBook::esporta()
xvt_sys_goto_url(fname, "open");
break;
case K_DBF:
ok = export_dbase(fname, signature);
ok = export_dbase(fname, nullptr, signature);
if (ok)
xvt_sys_goto_url(fname, "open");
break;
@ -2521,7 +2530,7 @@ bool TBook::print_or_preview()
case exportprinter:
{
TFilename f = printer().get_export_file();
ok = export_text(f, false, 0);
ok = export_text(f, 0, false);
if (ok)
xvt_sys_goto_url(f, "open");
}
@ -2551,6 +2560,7 @@ TBook::TBook(const char* name)
_file.temp("rep", "rap");
_is_temporary = true;
}
ofstream out(_file);
}
TBook::~TBook()