dc9dc4d6fb
git-svn-id: svn://10.65.10.50/trunk@2146 c028cbd2-c16b-5b4b-a496-9718f37d4682
446 lines
11 KiB
C++
Executable File
446 lines
11 KiB
C++
Executable File
#ifndef __APPLICAT_H
|
|
#include <applicat.h>
|
|
#endif
|
|
|
|
#ifndef __MASK_H
|
|
#include <mask.h>
|
|
#endif
|
|
|
|
#ifndef __CONFIG_H
|
|
#include <config.h>
|
|
#endif
|
|
|
|
#ifndef __FORM_H
|
|
#include <form.h>
|
|
#endif
|
|
|
|
#ifndef __RELATION_H
|
|
#include <relation.h>
|
|
#endif
|
|
|
|
#ifndef __URLDEFID_H
|
|
#include <urldefid.h>
|
|
#endif
|
|
|
|
#ifndef __SHEET_H
|
|
#include <sheet.h>
|
|
#endif
|
|
|
|
#ifndef __LFFILES_H
|
|
#include <lffiles.h>
|
|
#endif
|
|
|
|
#ifndef __CLIFO_H
|
|
#include <clifo.h>
|
|
#endif
|
|
|
|
#include "sc2.h"
|
|
#include "sc2100a.h"
|
|
|
|
class TStampaEC_application : public TApplication
|
|
{
|
|
enum what {clienti, fornitori};
|
|
|
|
TForm* _form;
|
|
|
|
// begin AARGH
|
|
TRelation* _clifo_rel;
|
|
TCursor* _cli_cur_k1;
|
|
TCursor* _cli_cur_k2;
|
|
TCursor* _for_cur_k1;
|
|
TCursor* _for_cur_k2;
|
|
TCursor_sheet* _cli_sh_k1;
|
|
TCursor_sheet* _cli_sh_k2;
|
|
TCursor_sheet* _for_sh_k1;
|
|
TCursor_sheet* _for_sh_k2;
|
|
// end AARGH
|
|
|
|
what _what;
|
|
int _key;
|
|
TBit_array _selected;
|
|
|
|
TRelation* _ditta;
|
|
TString _lingua;
|
|
TString _linprof;
|
|
bool _gesval;
|
|
|
|
protected:
|
|
|
|
virtual bool create();
|
|
virtual bool destroy();
|
|
virtual bool menu(MENU_TAG m);
|
|
|
|
long select_clifo_range(TMask& m, long from, long to);
|
|
|
|
static TStampaEC_application& app() { return (TStampaEC_application&)main_app(); }
|
|
|
|
// handlers
|
|
static bool bfrom_handler(TMask_field& f, KEY k);
|
|
static bool bto_handler(TMask_field& f, KEY k);
|
|
static bool ffrom_handler(TMask_field& f, KEY k);
|
|
static bool fto_handler(TMask_field& f, KEY k);
|
|
static bool breset_handler(TMask_field& f, KEY k);
|
|
static bool bselect_handler(TMask_field& f, KEY k);
|
|
static bool rclifo_handler(TMask_field& f, KEY k);
|
|
static bool rsortcf_handler(TMask_field& f, KEY k);
|
|
|
|
void set_clifo_limits(TMask&);
|
|
|
|
public:
|
|
|
|
bool select_ec(); // starting point
|
|
bool print_selected();
|
|
bool print_ec(long clifo);
|
|
|
|
TCursor_sheet* cur_sheet();
|
|
|
|
// utils per handlers
|
|
void reset_sheets(TMask& m);
|
|
void set_what(what w) {_what = w; }
|
|
void set_key (int k) {_key = k; }
|
|
|
|
TStampaEC_application();
|
|
virtual ~TStampaEC_application() {}
|
|
};
|
|
|
|
// handlers
|
|
bool TStampaEC_application::bfrom_handler(TMask_field& f, KEY k)
|
|
{
|
|
if (k == K_SPACE)
|
|
{
|
|
app().cur_sheet()->disable_check();
|
|
if (app().cur_sheet()->run() == K_ENTER)
|
|
{
|
|
TToken_string& t = app().cur_sheet()->row(app().cur_sheet()->selected());
|
|
long cod1 = t.get_long(1);
|
|
long cod2 = f.mask().get_long(F_CFCODTO);
|
|
f.mask().set(F_CFCODFR, cod1);
|
|
app().select_clifo_range(f.mask(), cod1, cod2);
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
bool TStampaEC_application::bto_handler(TMask_field& f, KEY k)
|
|
{
|
|
if (k == K_SPACE)
|
|
{
|
|
app().cur_sheet()->disable_check();
|
|
if (app().cur_sheet()->run() == K_ENTER)
|
|
{
|
|
TToken_string& t = app().cur_sheet()->row(app().cur_sheet()->selected());
|
|
long cod2 = t.get_long(1);
|
|
long cod1 = f.mask().get_long(F_CFCODFR);
|
|
f.mask().set(F_CFCODTO, cod2);
|
|
app().select_clifo_range(f.mask(), cod1, cod2);
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
bool TStampaEC_application::ffrom_handler(TMask_field& f, KEY k)
|
|
{
|
|
if (!f.focusdirty()) return TRUE;
|
|
|
|
if (k == K_TAB)
|
|
{
|
|
long cod1 = atol(f.get());
|
|
long cod2 = f.mask().get_long(F_CFCODTO);
|
|
app().select_clifo_range(f.mask(), cod1, cod2);
|
|
}
|
|
else if (k == K_F9)
|
|
app().bfrom_handler(f.mask().field(B_CFCODFR), K_SPACE);
|
|
return TRUE;
|
|
}
|
|
|
|
bool TStampaEC_application::fto_handler(TMask_field& f, KEY k)
|
|
{
|
|
if (!f.focusdirty()) return TRUE;
|
|
|
|
if (k == K_TAB)
|
|
{
|
|
long cod2 = atol(f.get());
|
|
long cod1 = f.mask().get_long(F_CFCODFR);
|
|
app().select_clifo_range(f.mask(), cod1, cod2);
|
|
}
|
|
else if (k == K_F9)
|
|
app().bfrom_handler(f.mask().field(B_CFCODTO), K_SPACE);
|
|
return TRUE;
|
|
}
|
|
|
|
bool TStampaEC_application::breset_handler(TMask_field& f, KEY k)
|
|
{
|
|
if (k == K_SPACE)
|
|
app().reset_sheets(f.mask());
|
|
return TRUE;
|
|
}
|
|
|
|
bool TStampaEC_application::bselect_handler(TMask_field& f, KEY k)
|
|
{
|
|
if (k == K_SPACE)
|
|
{
|
|
app().cur_sheet()->enable_check();
|
|
app().cur_sheet()->run();
|
|
}
|
|
app().set_clifo_limits(f.mask());
|
|
return TRUE;
|
|
}
|
|
|
|
bool TStampaEC_application::rclifo_handler(TMask_field& f, KEY k)
|
|
{
|
|
if (k == K_SPACE)
|
|
{
|
|
app().set_what(f.get() == "1" ? clienti : fornitori);
|
|
app().reset_sheets(f.mask());
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
bool TStampaEC_application::rsortcf_handler(TMask_field& f, KEY k)
|
|
{
|
|
if (k == K_SPACE)
|
|
{
|
|
app().set_key(atoi(f.get()));
|
|
app().reset_sheets(f.mask());
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
long TStampaEC_application::select_clifo_range(TMask& m, long from, long to)
|
|
{
|
|
long nsel = 0;
|
|
|
|
if (cur_sheet()->items() == 0)
|
|
{
|
|
beep();
|
|
return 0l;
|
|
}
|
|
|
|
if (to == 0l)
|
|
to = cur_sheet()->row(cur_sheet()->items() - 1).get_long(1);
|
|
if (from == 0l)
|
|
from = cur_sheet()->row(0).get_long(1);
|
|
|
|
if (from > to)
|
|
{
|
|
long tmp = to;
|
|
to = from;
|
|
from = tmp;
|
|
}
|
|
|
|
bool go = FALSE;
|
|
bool cod1ok = FALSE, cod2ok = FALSE;
|
|
long last = 0l;
|
|
long firs = 0l;
|
|
|
|
for (long i = 0; i < cur_sheet()->items(); i++)
|
|
{
|
|
TToken_string& tt = cur_sheet()->row(i);
|
|
long cod = tt.get_long(1);
|
|
if (cod >= from && cod <= to)
|
|
{
|
|
cur_sheet()->check(i);
|
|
nsel ++;
|
|
if (firs == 0l) firs = cod;
|
|
last = cod;
|
|
}
|
|
else cur_sheet()->uncheck(i);
|
|
|
|
if (cod == from) cod1ok = TRUE;
|
|
if (cod == to) cod2ok = TRUE;
|
|
}
|
|
|
|
if (!cod1ok) from = firs;
|
|
if (!cod2ok) to = last;
|
|
|
|
m.set(F_CFCODFR, from);
|
|
m.set(F_CFCODTO, to);
|
|
m.set(F_NSEL, nsel);
|
|
return 0l;
|
|
}
|
|
|
|
void TStampaEC_application::reset_sheets(TMask& m)
|
|
{
|
|
_cli_sh_k1->uncheck(-1);
|
|
_cli_sh_k2->uncheck(-1);
|
|
_for_sh_k1->uncheck(-1);
|
|
_for_sh_k2->uncheck(-1);
|
|
|
|
m.set(F_CFCODFR,"");
|
|
m.set(F_CFCODTO,"");
|
|
}
|
|
|
|
bool TStampaEC_application::select_ec()
|
|
{
|
|
TMask m("sc2100a");
|
|
KEY k;
|
|
|
|
m.set_handler(R_CLIFO, rclifo_handler);
|
|
m.set_handler(R_SORTCF, rsortcf_handler);
|
|
m.set_handler(B_CFCODFR, bfrom_handler);
|
|
m.set_handler(B_CFCODTO, bto_handler);
|
|
m.set_handler(B_SELECT, bselect_handler);
|
|
m.set_handler(B_RESET, breset_handler);
|
|
m.set_handler(F_CFCODFR, ffrom_handler);
|
|
m.set_handler(F_CFCODTO, fto_handler);
|
|
|
|
if (_ditta->good())
|
|
{
|
|
m.set(F_COMSEND, _ditta->lfile(LF_COMUNI).get("COM"));
|
|
m.set(F_LUOGOSEND, _ditta->lfile(LF_COMUNI).get("DENCOM"));
|
|
}
|
|
|
|
while ((k = m.run()) != K_ESC)
|
|
if (k == K_ENTER)
|
|
{
|
|
// sciroppa profilo
|
|
if (_form != NULL) delete _form;
|
|
_form = new TForm(BASE_EC_PROFILE, m.get(F_CODPROF));
|
|
_linprof[0] = _form->code()[_form->code().len() - 1];
|
|
_linprof[1] = '\0';
|
|
print_selected();
|
|
}
|
|
return k != K_ESC;
|
|
}
|
|
|
|
void TStampaEC_application::set_clifo_limits(TMask& m)
|
|
{
|
|
long first = 0, last = 0;
|
|
bool primo = FALSE;
|
|
for (int i = 0; i < cur_sheet()->items(); i++)
|
|
{
|
|
if (cur_sheet()->checked(i))
|
|
{
|
|
TToken_string& t = cur_sheet()->row(i);
|
|
long kod = t.get_long(1);
|
|
if (!primo++) first = last = kod;
|
|
if (first > kod) first = kod;
|
|
if (last < kod) last = kod;
|
|
}
|
|
}
|
|
m.set(F_CFCODFR, first);
|
|
m.set(F_CFCODTO, last);
|
|
}
|
|
|
|
bool TStampaEC_application::print_selected()
|
|
{
|
|
for (int i = 0; i < cur_sheet()->items(); i++)
|
|
{
|
|
if (cur_sheet()->checked(i))
|
|
{
|
|
TToken_string& t = cur_sheet()->row(i);
|
|
print_ec(t.get_long(1));
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
bool TStampaEC_application::print_ec(long clifo)
|
|
{
|
|
TLocalisamfile clf(LF_CLIFO);
|
|
clf.zero();
|
|
|
|
clf.put(CLI_TIPOCF, _what == clienti ? "C" : "F");
|
|
clf.put(CLI_CODCF, clifo);
|
|
if (clf.read() != NOERR)
|
|
fatal_box("Errore in archivio clienti/fornitori");
|
|
|
|
TString lincf = clf.get(CLI_CODLIN);
|
|
|
|
bool ok = TRUE;
|
|
|
|
// make controllations per lingua profilo/CF
|
|
if (_linprof == _lingua && !lincf.empty())
|
|
ok = (lincf == _linprof);
|
|
else if (_linprof != _lingua)
|
|
ok = (lincf == _linprof);
|
|
|
|
if (ok)
|
|
{
|
|
}
|
|
else
|
|
{
|
|
warning_box ("Dio bestia! Cliente analfabeta!");
|
|
};
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
TCursor_sheet* TStampaEC_application::cur_sheet()
|
|
{
|
|
if (_key == 1) return (_what == clienti ? _cli_sh_k1 : _for_sh_k1);
|
|
else return (_what == clienti ? _cli_sh_k2 : _for_sh_k2);
|
|
}
|
|
|
|
bool TStampaEC_application::create()
|
|
{
|
|
TApplication::create();
|
|
|
|
// crea relazioni, cursori e cursor_sheets
|
|
_clifo_rel = new TRelation(LF_CLIFO);
|
|
|
|
_cli_cur_k1 = new TCursor(_clifo_rel, "TIPOCF=\"C\"", 1);
|
|
_cli_cur_k2 = new TCursor(_clifo_rel, "TIPOCF=\"C\"", 2);
|
|
_for_cur_k1 = new TCursor(_clifo_rel, "TIPOCF=\"F\"", 1);
|
|
_for_cur_k2 = new TCursor(_clifo_rel, "TIPOCF=\"F\"", 2);
|
|
|
|
_cli_sh_k1 = new TCursor_sheet(_cli_cur_k1, " |CODCF|RAGSOC", "Selezione clienti per codice",
|
|
"@1|Codice|Ragione Sociale@50");
|
|
_cli_sh_k2 = new TCursor_sheet(_cli_cur_k2, " |RAGSOC|CODCF", "Selezione clienti per ragione sociale",
|
|
"@1|Ragione Sociale@50|Codice");
|
|
_for_sh_k1 = new TCursor_sheet(_for_cur_k1, " |CODCF|RAGSOC", "Selezione fornitori per codice",
|
|
"@1|Codice|Ragione Sociale@50");
|
|
_for_sh_k2 = new TCursor_sheet(_for_cur_k2, " |RAGSOC|CODCF", "Selezione fornitori per ragione sociale",
|
|
"@1|Ragione Sociale@50|Codice");
|
|
|
|
// relasiun per la ditta defiga
|
|
_ditta = new TRelation(LF_NDITTE);
|
|
_ditta->add(LF_ANAG, "TIPOA==TIPOA|CODANAGR==CODANAGR");
|
|
_ditta->add(LF_COMUNI, "COM==COMRF(COMRES)", 1, LF_ANAG);
|
|
|
|
_ditta->zero();
|
|
_ditta->lfile().put("CODDITTA", get_firm());
|
|
_ditta->read();
|
|
|
|
TConfig tc(CONFIG_DITTA);
|
|
_lingua = tc.get("CodLin", "");
|
|
_gesval = tc.get_bool("GesVal", "");
|
|
|
|
dispatch_e_menu(MENU_ITEM(1));
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
bool TStampaEC_application::destroy()
|
|
{
|
|
delete _for_sh_k2;
|
|
delete _for_sh_k1;
|
|
delete _cli_sh_k2;
|
|
delete _cli_sh_k1;
|
|
delete _for_cur_k2;
|
|
delete _for_cur_k1;
|
|
delete _cli_cur_k2;
|
|
delete _cli_cur_k1;
|
|
delete _clifo_rel;
|
|
|
|
return TApplication::destroy();
|
|
}
|
|
|
|
bool TStampaEC_application::menu(MENU_TAG m)
|
|
{
|
|
if (m == MENU_ITEM(1))
|
|
return select_ec();
|
|
else return TApplication::menu(m);
|
|
}
|
|
|
|
TStampaEC_application::TStampaEC_application() : _selected(10000),
|
|
_what(clienti), _key(1), _lingua(1), _linprof(2), _form(NULL)
|
|
{}
|
|
|
|
int sc2100(int argc, char** argv)
|
|
{
|
|
TStampaEC_application app;
|
|
app.run(argc, argv, "Stampa Estratti Conto");
|
|
return 0;
|
|
}
|