Patch level : 12.00 nopatch
Files correlati : Commento : Ricerca dei report per descrizione
This commit is contained in:
parent
4b95782d3d
commit
b1387820bf
@ -1682,9 +1682,12 @@ bool TProfile_select::check(CheckTime ct)
|
|||||||
// TReport_select
|
// TReport_select
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
TReport_select::TReport_select(TEdit_field* ef, const char* classe)
|
TReport_select::TReport_select(TEdit_field* ef, const char* classe, const char *type)
|
||||||
: TBrowse_button(ef), _classe(classe)
|
: TBrowse_button(ef), _classe(classe), _type(type), _required(false)
|
||||||
{ }
|
{
|
||||||
|
if ( _type.blank())
|
||||||
|
_type = "D";
|
||||||
|
}
|
||||||
|
|
||||||
void TReport_select::parse_input(TScanner& scanner)
|
void TReport_select::parse_input(TScanner& scanner)
|
||||||
{
|
{
|
||||||
@ -1698,40 +1701,36 @@ void TReport_select::parse_output(TScanner& scanner)
|
|||||||
|
|
||||||
KEY TReport_select::run()
|
KEY TReport_select::run()
|
||||||
{
|
{
|
||||||
TFilename path = field().get();
|
TFilename repdescr = field().get_window_data();
|
||||||
|
|
||||||
if (select_custom_file(path, "rep", _classe))
|
if (select_custom_file(repdescr, "rep", _type, _classe))
|
||||||
{
|
field().set(repdescr);
|
||||||
path = path.name();
|
return repdescr.full() ? K_ENTER : K_ESC;
|
||||||
path.ext("");
|
|
||||||
field().set(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
return path.not_empty() ? K_ENTER : K_ESC;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TReport_select::check(CheckTime ct)
|
bool TReport_select::check(CheckTime ct)
|
||||||
{
|
{
|
||||||
TFilename name = field().get();
|
TFilename name;
|
||||||
|
|
||||||
if (ct == STARTING_CHECK || ct == RUNNING_CHECK || ct == FINAL_CHECK)
|
if (ct == STARTING_CHECK || ct == RUNNING_CHECK || ct == FINAL_CHECK)
|
||||||
{
|
{
|
||||||
TString_array reps;
|
TString_array reps;
|
||||||
|
const TString & repdescr = field().get_window_data();
|
||||||
|
|
||||||
list_custom_files("rep", _classe, reps);
|
|
||||||
if (name.empty())
|
list_custom_files("rep", _classe, reps, _type);
|
||||||
|
|
||||||
|
if (repdescr.empty())
|
||||||
{
|
{
|
||||||
|
|
||||||
if (reps.items() > 0)
|
if (reps.items() > 0)
|
||||||
field().set(((TToken_string &)reps[0]).get(0));
|
field().set_window_data(((TToken_string &)reps[0]).get(0));
|
||||||
else
|
else
|
||||||
field().set("");
|
field().set_window_data("");
|
||||||
}
|
}
|
||||||
if (ct == RUNNING_CHECK || ct == FINAL_CHECK)
|
if (ct == RUNNING_CHECK || ct == FINAL_CHECK)
|
||||||
{
|
{
|
||||||
const TString & repname = field().get();
|
if (repdescr.blank() && ct == FINAL_CHECK)
|
||||||
|
|
||||||
if (repname.blank() && ct == FINAL_CHECK)
|
|
||||||
return field().error_box(TR("Il report deve essere specificato"));
|
return field().error_box(TR("Il report deve essere specificato"));
|
||||||
if (_classe.full())
|
if (_classe.full())
|
||||||
{
|
{
|
||||||
@ -1741,12 +1740,15 @@ bool TReport_select::check(CheckTime ct)
|
|||||||
{
|
{
|
||||||
TToken_string * row = (TToken_string *)obj;
|
TToken_string * row = (TToken_string *)obj;
|
||||||
|
|
||||||
found = (repname == row->get(0));
|
found = (repdescr == row->get(0));
|
||||||
if (found)
|
if (found)
|
||||||
|
{
|
||||||
|
name = row->get(descr_type() ? 1 : 0);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!found)
|
if (!found)
|
||||||
return field().error_box(FR("Il report %s non è compatibile"), (const char *)repname);
|
return field().error_box(FR("Il report %s non è compatibile"), (const char *)repdescr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1760,13 +1762,38 @@ void TReport_select::set_report_class(const char * classe)
|
|||||||
TString_array reps;
|
TString_array reps;
|
||||||
|
|
||||||
_classe = classe;
|
_classe = classe;
|
||||||
list_custom_files("rep", _classe, reps);
|
list_custom_files("rep", _classe, reps, _type);
|
||||||
if (reps.items())
|
if (reps.items())
|
||||||
field().set(reps[0].get());
|
field().set(reps[0].get());
|
||||||
else
|
else
|
||||||
field().set("");
|
field().set("");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const TString & TReport_select::get_path(const char * name)
|
||||||
|
{
|
||||||
|
TString repdescr = name;
|
||||||
|
bool found = false;
|
||||||
|
TFilename path;
|
||||||
|
TString_array reps;
|
||||||
|
|
||||||
|
list_custom_files("rep", _classe, reps, _type);
|
||||||
|
FOR_EACH_ARRAY_ITEM(reps, r, obj)
|
||||||
|
{
|
||||||
|
TToken_string * row = (TToken_string *)obj;
|
||||||
|
|
||||||
|
found = (repdescr == row->get(0));
|
||||||
|
if (found)
|
||||||
|
{
|
||||||
|
path = row->get(0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (cod_type() && !required() && path.blank())
|
||||||
|
path = name;
|
||||||
|
|
||||||
|
return get_tmp_string() = path;
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
// TFuzzy_browse
|
// TFuzzy_browse
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
|
@ -384,8 +384,9 @@ public:
|
|||||||
|
|
||||||
class TReport_select : public TBrowse_button
|
class TReport_select : public TBrowse_button
|
||||||
{
|
{
|
||||||
TString _classe;
|
TString _classe;
|
||||||
|
TString4 _type;
|
||||||
|
bool _required;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// @cmember Controlla la sintassi della input del campo e ne setta i membri
|
// @cmember Controlla la sintassi della input del campo e ne setta i membri
|
||||||
@ -404,8 +405,13 @@ public:
|
|||||||
|
|
||||||
void set_report_class(const char * classe);
|
void set_report_class(const char * classe);
|
||||||
const TString & get_report_class() const { return _classe; }
|
const TString & get_report_class() const { return _classe; }
|
||||||
|
const TString & get_path(const char * name);
|
||||||
|
bool descr_type() const { return _type == "D"; }
|
||||||
|
bool cod_type() const { return _type == "C"; }
|
||||||
|
void set_required(bool on = true) { _required = on; }
|
||||||
|
bool required() const { return _required; }
|
||||||
|
|
||||||
TReport_select(TEdit_field* ef, const char* classe);
|
TReport_select(TEdit_field* ef, const char* classe, const char * type);
|
||||||
virtual ~TReport_select() { }
|
virtual ~TReport_select() { }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -404,7 +404,14 @@ void TMask_field::construct(TScanner& scanner, WINDOW parent)
|
|||||||
|
|
||||||
while(scanner.popkey() != "EN") // END of control
|
while(scanner.popkey() != "EN") // END of control
|
||||||
parse_item(scanner);
|
parse_item(scanner);
|
||||||
|
if (this->is_kind_of(CLASS_EDIT_FIELD))
|
||||||
|
{
|
||||||
|
TEdit_field & e = (TEdit_field &)*this;
|
||||||
|
TReport_select * rs = e.reportsel();
|
||||||
|
|
||||||
|
if (rs != nullptr)
|
||||||
|
rs->set_required(e.check_type() == CHECK_REQUIRED);
|
||||||
|
}
|
||||||
if (is_edit())
|
if (is_edit())
|
||||||
{
|
{
|
||||||
TBrowse* b = ((TEdit_field*)this)->browse();
|
TBrowse* b = ((TEdit_field*)this)->browse();
|
||||||
@ -1941,6 +1948,13 @@ void TEditable_field::set_field(const TString& fr)
|
|||||||
// Legge il valore attuale del campo in formato RAW
|
// Legge il valore attuale del campo in formato RAW
|
||||||
const TString& TEditable_field::get() const
|
const TString& TEditable_field::get() const
|
||||||
{
|
{
|
||||||
|
if (is_kind_of(CLASS_EDIT_FIELD))
|
||||||
|
{
|
||||||
|
TReport_select * b = ((TEdit_field *)this)->reportsel();
|
||||||
|
|
||||||
|
if (b != nullptr)
|
||||||
|
return b->get_path(_str);
|
||||||
|
}
|
||||||
return _str;
|
return _str;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2203,7 +2217,7 @@ const TBrowse* TEdit_field::parse_browse(TScanner& scanner) const
|
|||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TEdit_field::set_selector(char s, const TString& str)
|
bool TEdit_field::set_selector(char s, const TString& str, const TString & type)
|
||||||
{
|
{
|
||||||
#ifdef DBG
|
#ifdef DBG
|
||||||
if (_browse)
|
if (_browse)
|
||||||
@ -2216,7 +2230,7 @@ bool TEdit_field::set_selector(char s, const TString& str)
|
|||||||
case 'D': _browse = new TDir_select(this); break;
|
case 'D': _browse = new TDir_select(this); break;
|
||||||
case 'F': _browse = new TFile_select(this, str); break;
|
case 'F': _browse = new TFile_select(this, str); break;
|
||||||
case 'P': _browse = new TProfile_select(this); set_default("NONE"); break;
|
case 'P': _browse = new TProfile_select(this); set_default("NONE"); break;
|
||||||
case 'R': _browse = new TReport_select(this, str); break;
|
case 'R': _browse = new TReport_select(this, str, type); break;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2429,17 +2443,26 @@ bool TEdit_field::parse_item(TScanner& scanner)
|
|||||||
|
|
||||||
if (scanner.key() == "DS") // DSELECT
|
if (scanner.key() == "DS") // DSELECT
|
||||||
{
|
{
|
||||||
return set_selector('D', EMPTY_STRING);
|
return set_selector('D');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (scanner.key() == "PS") // PSELECT
|
if (scanner.key() == "PS") // PSELECT
|
||||||
{
|
{
|
||||||
return set_selector('P', EMPTY_STRING);
|
return set_selector('P');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (scanner.key() == "RS") // RSELECT
|
if (scanner.key() == "RS") // RSELECT
|
||||||
{
|
{
|
||||||
return set_selector('R', scanner.string());
|
TString classe = scanner.string();
|
||||||
|
TString type = scanner.line();
|
||||||
|
|
||||||
|
type.upper();
|
||||||
|
if (type != "D" && type != "C")
|
||||||
|
{
|
||||||
|
scanner.push();
|
||||||
|
type.cut(0);
|
||||||
|
}
|
||||||
|
return set_selector('R', classe, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (scanner.key() == "IT") // ITEM
|
if (scanner.key() == "IT") // ITEM
|
||||||
@ -2675,6 +2698,7 @@ void TEdit_field::autoselect(bool on)
|
|||||||
TString& TEdit_field::get_window_data()
|
TString& TEdit_field::get_window_data()
|
||||||
{
|
{
|
||||||
_str = win2raw(_ctl->caption());
|
_str = win2raw(_ctl->caption());
|
||||||
|
|
||||||
return _str;
|
return _str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -873,9 +873,6 @@ protected:
|
|||||||
// @cmember Ritorna <p data> formattato secondo i flags settati del campo
|
// @cmember Ritorna <p data> formattato secondo i flags settati del campo
|
||||||
virtual const char* reformat(const char* data) const;
|
virtual const char* reformat(const char* data) const;
|
||||||
|
|
||||||
// @cmember Scrive il valore del campo direttamente sulla finestra del controllo
|
|
||||||
virtual void set_window_data(const char* data);
|
|
||||||
|
|
||||||
// @cmember Mostra un messaggio di errore di default per il campo
|
// @cmember Mostra un messaggio di errore di default per il campo
|
||||||
bool default_error_box() const;
|
bool default_error_box() const;
|
||||||
|
|
||||||
@ -884,6 +881,9 @@ protected:
|
|||||||
|
|
||||||
// @access Public Member
|
// @access Public Member
|
||||||
public:
|
public:
|
||||||
|
// @cmember Scrive il valore del campo direttamente sulla finestra del controllo
|
||||||
|
virtual void set_window_data(const char* data);
|
||||||
|
|
||||||
// @cmember Setta il flag read-only
|
// @cmember Setta il flag read-only
|
||||||
virtual void set_read_only(bool r);
|
virtual void set_read_only(bool r);
|
||||||
|
|
||||||
@ -906,7 +906,7 @@ public:
|
|||||||
// @cmember Imposta la ricerca del campo
|
// @cmember Imposta la ricerca del campo
|
||||||
virtual void set_query_button(TBrowse_button* );
|
virtual void set_query_button(TBrowse_button* );
|
||||||
|
|
||||||
bool set_selector(char s, const TString& str);
|
bool set_selector(char s, const TString& str = EMPTY_STRING, const TString & type = EMPTY_STRING);
|
||||||
|
|
||||||
// @cmember Ritorna true se il campo e' di tipo edit
|
// @cmember Ritorna true se il campo e' di tipo edit
|
||||||
virtual bool is_edit() const { return true; }
|
virtual bool is_edit() const { return true; }
|
||||||
|
@ -1012,7 +1012,7 @@ static bool get_xml_child(const TString& line, const char* tag, TString& value)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool list_custom_files(const char* ext, const char* classe, TString_array& files)
|
bool list_custom_files(const char* ext, const char* classe, TString_array& files, const char * type)
|
||||||
{
|
{
|
||||||
TString_array lista;
|
TString_array lista;
|
||||||
TFilename path;
|
TFilename path;
|
||||||
@ -1061,10 +1061,20 @@ bool list_custom_files(const char* ext, const char* classe, TString_array& files
|
|||||||
if (ok)
|
if (ok)
|
||||||
{
|
{
|
||||||
get_xml_child(stringona, "description", desc);
|
get_xml_child(stringona, "description", desc);
|
||||||
|
|
||||||
TToken_string* riga = new TToken_string;
|
TToken_string* riga = new TToken_string;
|
||||||
riga->add(*row);
|
|
||||||
|
if (type[0] == 'D')
|
||||||
|
{
|
||||||
|
riga->add(desc);
|
||||||
|
riga->add(*row);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
riga->add(*row);
|
||||||
|
riga->add(desc);
|
||||||
|
}
|
||||||
riga->add(acqua);
|
riga->add(acqua);
|
||||||
riga->add(desc);
|
|
||||||
riga->add(path.find("custom") > 0 ? "X" : "");
|
riga->add(path.find("custom") > 0 ? "X" : "");
|
||||||
files.add(riga);
|
files.add(riga);
|
||||||
}
|
}
|
||||||
@ -1073,20 +1083,21 @@ bool list_custom_files(const char* ext, const char* classe, TString_array& files
|
|||||||
return !files.empty();
|
return !files.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool select_custom_file(TFilename& path, const char* ext, const char* library)
|
bool select_custom_file(TFilename& descr, const char* ext, const char* type, const char* library)
|
||||||
{
|
{
|
||||||
TArray_sheet sheet(-1, -1, 78, 20, TR("Selezione"), HR("Nome@16|Classe@8|Descrizione@50|Custom"));
|
const TString header = type[0] == 'D' ? HR("Descrizione@50|Nome@16|Classe@8|Custom") : HR("Nome@16|Descrizione@50|Classe@8|Custom");
|
||||||
|
TArray_sheet sheet(-1, -1, 78, 20, TR("Selezione"), header);
|
||||||
TString_array& files = sheet.rows_array();
|
TString_array& files = sheet.rows_array();
|
||||||
TFilename first = path.name(); first.ext(""); // Riga su cui posizionarsi
|
// TFilename first = path.name(); first.ext(""); // Riga su cui posizionarsi
|
||||||
bool ok = list_custom_files(ext, library, files);
|
bool ok = list_custom_files(ext, library, files, type);
|
||||||
|
|
||||||
if (ok)
|
if (ok)
|
||||||
{
|
{
|
||||||
if (first.full()) // Cerco la prima riga da selezionare se possibile
|
if (descr.full()) // Cerco la prima riga da selezionare se possibile
|
||||||
{
|
{
|
||||||
FOR_EACH_ARRAY_ROW(files, i, row)
|
FOR_EACH_ARRAY_ROW(files, i, row)
|
||||||
{
|
{
|
||||||
if (first.compare(row->get(0), -1, true) == 0) // Ho trovato la selezione corrente
|
if (descr.compare(row->get(0), -1, true) == 0) // Ho trovato la selezione corrente
|
||||||
{
|
{
|
||||||
sheet.select(i);
|
sheet.select(i);
|
||||||
break;
|
break;
|
||||||
@ -1096,11 +1107,7 @@ bool select_custom_file(TFilename& path, const char* ext, const char* library)
|
|||||||
|
|
||||||
ok = sheet.run() == K_ENTER;
|
ok = sheet.run() == K_ENTER;
|
||||||
if (ok)
|
if (ok)
|
||||||
{
|
descr = sheet.row(-1).get(0); //
|
||||||
path = sheet.row(-1).get(0);
|
|
||||||
path.ext(ext);
|
|
||||||
ok = path.custom_path();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ok;
|
return ok;
|
||||||
|
@ -199,8 +199,8 @@ public:
|
|||||||
// Utility
|
// Utility
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
bool list_custom_files(const char* ext, const char* library, TString_array& files);
|
bool list_custom_files(const char* ext, const char* library, TString_array& files, const char * type);
|
||||||
bool select_custom_file(TFilename& path, const char* ext, const char* classe = NULL);
|
bool select_custom_file(TFilename& descr, const char* exte, const char* type, const char* classe = NULL);
|
||||||
const TString& logic2table(int logic_num);
|
const TString& logic2table(int logic_num);
|
||||||
int table2logic(const TString& name);
|
int table2logic(const TString& name);
|
||||||
TRecordset* create_recordset(const TString& sql);
|
TRecordset* create_recordset(const TString& sql);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user