campo-sirio/ba/ba8600.cpp
luca 9b5bca12ce Patch level :10.0 250
Files correlati     :
Ricompilazione Demo : [ ]
Commento            :
0001155: La ricerca file archiviati è rimasta nel look 3.2
Descrizione  La ricerca file archiviati è rimasta nel look 3.2


git-svn-id: svn://10.65.10.50/trunk@18355 c028cbd2-c16b-5b4b-a496-9718f37d4682
2009-02-25 16:08:18 +00:00

244 lines
5.4 KiB
C++
Executable File

#include "ba8.h"
#include <applicat.h>
#include <automask.h>
#include <config.h>
#include <defmask.h>
#include <msksheet.h>
#include <prefix.h>
#include "ba8600a.h"
///////////////////////////////////////////////////////////
// TGoogle_mask
///////////////////////////////////////////////////////////
class TGoogle_mask : public TAutomask
{
TFilename _base_dir;
clock_t _next_update;
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
virtual void on_idle();
void query_firm(int anno, long ditta);
void query_year(int anno);
void query();
public:
TGoogle_mask(const TFilename& base_dir);
};
void TGoogle_mask::on_idle()
{
if (_next_update > 0 && clock() >= _next_update)
query();
}
bool TGoogle_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case DLG_USER:
if (e == fe_button)
{
const TMask& m = o.mask();
TFilename name = _base_dir;
name.add(m.get(102));
TString8 str; str.format("%05ldA", m.get_int(101));
name.add(str);
name.add(m.get(103));
xvt_sys_goto_url(name, "open");
}
break;
case F_SHEET:
if (e == se_query_add || e == se_query_del)
return false;
break;
case DLG_ELABORA:
if (e == fe_button)
query();
break;
default:
break;
}
if (e == fe_modify && jolly ==0)
_next_update = clock() + 5*CLOCKS_PER_SEC;
return true;
}
void TGoogle_mask::query_firm(int anno, long firm)
{
const TString& tipodoc = get(F_TIPODOC);
const long codcf = get_long(F_CLIFO);
TSheet_field& sheet = sfield(F_SHEET);
TFilename name = _base_dir;
TString8 str;
str.format("%04d", anno); name.add(str);
str.format("%05ldA", firm); name.add(str);
xvt_fsys_save_dir();
DIRECTORY dir; xvt_fsys_convert_str_to_dir(name, &dir);
if (xvt_fsys_set_dir(&dir))
{
SLIST files = xvt_fsys_list_files("", "*.*", FALSE);
for (SLIST_ELT e = xvt_slist_get_first(files); e; e = xvt_slist_get_next(files, e))
{
TToken_string file(xvt_slist_get(files, e, NULL), '_');
if (file.items() < 3)
continue;
if (tipodoc.full() && tipodoc.compare(file.get(1), -1, true) != 0)
continue;
if (codcf > 0 && codcf != file.get_long(3))
continue;
TToken_string& row = sheet.row(-1);
row.add(firm);
row.add(anno);
row.add(file);
}
xvt_slist_destroy(files);
}
else
error_box("Ma che cavolo di cartella %s stai guardando Willis?", (const char*) name);
xvt_fsys_restore_dir();
}
void TGoogle_mask::query_year(int anno)
{
const long firm = get_long(F_DITTA);
if (firm <= 0)
{
TFilename name = _base_dir;
TString8 str; str.format("%04d", anno);
name.add(str);
name.add("?????A");
SLIST files = xvt_fsys_list_files(DIR_TYPE, name, TRUE);
for (SLIST_ELT e = xvt_slist_get_first(files); e; e = xvt_slist_get_next(files, e))
{
const TFilename name = xvt_slist_get(files, e, NULL);
const long firm = atol(name.name());
query_firm(anno, firm);
}
xvt_slist_destroy(files);
}
else
query_firm(anno, firm);
}
void TGoogle_mask::query()
{
_next_update = 0;
TWait_cursor hourglass;
TSheet_field& sheet = sfield(F_SHEET);
sheet.destroy();
int anno = get_int(F_ANNO);
if (anno < 1000)
{
TFilename name = _base_dir;
name.add("????");
SLIST files = xvt_fsys_list_files(DIR_TYPE, name, TRUE);
for (SLIST_ELT e = xvt_slist_get_first(files); e; e = xvt_slist_get_next(files, e))
{
const TFilename dirname = xvt_slist_get(files, e, NULL);
anno = atoi(dirname.right(4));
if (anno >= 1000)
query_year(anno);
}
xvt_slist_destroy(files);
}
else
query_year(anno);
sheet.force_update();
_next_update = 0;
}
TGoogle_mask::TGoogle_mask(const TFilename& base_dir)
: _base_dir(base_dir), _next_update(0)
{
TSheet_field::set_line_number_width(7);
read_mask("ba8600a", 0, 1);
set_handlers();
set(F_STUDIO, firm2dir(-1));
}
///////////////////////////////////////////////////////////
// TGoogle_app
///////////////////////////////////////////////////////////
class TGoogle_app : public TSkeleton_application
{
TGoogle_mask* _mask;
public:
virtual bool create();
virtual void main_loop();
virtual bool destroy();
};
bool TGoogle_app::create()
{
TConfig ini("servers/servers.ini", "Spotlite");
TFilename name = ini.get("Data");
bool ok = name.exist();
if (!ok)
{
name = firm2dir(-1);
name.add("spotlite");
TString msg;
msg << TR("Il server di archiviazione non e' configurato")
<< ":\n" << TR("si desidera usare la seguente cartella?")
<< '\n' << name;
const KEY ync = yesnocancel_box(msg);
if (ync != K_ESC)
{
ok = ync == K_YES;
if (!ok)
{
DIRECTORY dir; xvt_fsys_convert_str_to_dir(name, &dir);
ok = xvt_dm_post_dir_sel(&dir) == FL_OK;
if (ok)
xvt_fsys_convert_dir_to_str(&dir, name.get_buffer(), name.size());
}
if (ok)
{
ok = xvt_fsys_mkdir(name) != 0;
if (ok)
ini.set("Data", name);
}
}
}
_mask = ok ? new TGoogle_mask(name) : NULL;
return ok && TSkeleton_application::create();
}
void TGoogle_app::main_loop()
{
_mask->run();
}
bool TGoogle_app::destroy()
{
delete _mask;
return TSkeleton_application::destroy();
}
int ba8600(int argc, char* argv[])
{
TGoogle_app app;
app.run(argc, argv, TR("Ricerca documenti archiviati"));
return 0;
}