Stampa Estratto Conto
git-svn-id: svn://10.65.10.50/trunk@2208 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
1b4bb30c66
commit
7a41843999
527
sc/sc2100.cpp
527
sc/sc2100.cpp
@ -1,449 +1,216 @@
|
|||||||
#ifndef __APPLICAT_H
|
|
||||||
#include <applicat.h>
|
#include <applicat.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __MASK_H
|
|
||||||
#include <mask.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __CONFIG_H
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __FORM_H
|
|
||||||
#include <form.h>
|
#include <form.h>
|
||||||
#endif
|
#include <printer.h>
|
||||||
|
|
||||||
#ifndef __RELATION_H
|
|
||||||
#include <relation.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __URLDEFID_H
|
|
||||||
#include <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 "sc2.h"
|
||||||
#include "sc2100a.h"
|
#include "sc2101.h"
|
||||||
|
|
||||||
|
#include <clifo.h>
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// Form speciale per estratti conto
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class TEC_form : public TForm
|
||||||
|
{
|
||||||
|
TCursor* _cursore;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void ec_header_handler(TPrinter& p);
|
||||||
|
static void ec_footer_handler(TPrinter& p);
|
||||||
|
|
||||||
|
public:
|
||||||
|
long move_cursor(char tipocf, long clifo);
|
||||||
|
|
||||||
|
TEC_form(const char* codice, TCursor* cursor);
|
||||||
|
virtual ~TEC_form();
|
||||||
|
};
|
||||||
|
|
||||||
|
void TEC_form::ec_header_handler(TPrinter& pr)
|
||||||
|
{
|
||||||
|
TPrint_section& head = section('H', 1);
|
||||||
|
|
||||||
|
head.reset();
|
||||||
|
pr.resetheader();
|
||||||
|
|
||||||
|
head.update();
|
||||||
|
for (word j = 0; j < head.height(); j++)
|
||||||
|
pr.setheaderline(j, head.row(j));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TEC_form::ec_footer_handler(TPrinter& p)
|
||||||
|
{
|
||||||
|
TRACE("Stamperei un footer");
|
||||||
|
}
|
||||||
|
|
||||||
|
long TEC_form::move_cursor(char tipocf, long clifo)
|
||||||
|
{
|
||||||
|
TRectype& cli = cursor()->file().curr();
|
||||||
|
cli.put(CLI_TIPOCF, tipocf);
|
||||||
|
cli.put(CLI_CODCF, clifo);
|
||||||
|
const long rec = cursor()->read();
|
||||||
|
return rec;
|
||||||
|
}
|
||||||
|
|
||||||
|
TEC_form::TEC_form(const char* codice, TCursor* cur)
|
||||||
|
: TForm(BASE_EC_PROFILE, codice)
|
||||||
|
{
|
||||||
|
_cursore = cur;
|
||||||
|
|
||||||
|
TPrinter& pr = printer();
|
||||||
|
|
||||||
|
pr.setheaderhandler(ec_header_handler);
|
||||||
|
pr.headerlen(section('H', 1).height());
|
||||||
|
|
||||||
|
pr.setfooterhandler(ec_footer_handler);
|
||||||
|
pr.footerlen(section('F', 1).height());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEC_form::~TEC_form()
|
||||||
|
{
|
||||||
|
printer().setheaderhandler(NULL);
|
||||||
|
printer().setfooterhandler(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// Stampa estratti conto
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
class TStampaEC_application : public TApplication
|
class TStampaEC_application : public TApplication
|
||||||
{
|
{
|
||||||
enum what {clienti, fornitori};
|
TEC_mask* _msk;
|
||||||
|
TEC_form* _form;
|
||||||
|
|
||||||
TForm* _form;
|
TString _lingua;
|
||||||
|
TString _linprof;
|
||||||
// begin AARGH
|
bool _gesval;
|
||||||
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:
|
|
||||||
|
|
||||||
|
protected: // TApplication
|
||||||
virtual bool create();
|
virtual bool create();
|
||||||
virtual bool destroy();
|
virtual bool destroy();
|
||||||
virtual bool menu(MENU_TAG m);
|
virtual bool menu(MENU_TAG m);
|
||||||
|
virtual void on_firm_change();
|
||||||
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:
|
public:
|
||||||
|
static TStampaEC_application& app() { return (TStampaEC_application&)main_app(); }
|
||||||
|
|
||||||
bool select_ec(); // starting point
|
public:
|
||||||
bool print_selected();
|
TEC_mask& mask() { return *_msk; }
|
||||||
bool print_ec(long clifo);
|
TCursor_sheet& sheet() { return _msk->cur_sheet(); }
|
||||||
|
TEC_form& form() { return *_form; }
|
||||||
|
|
||||||
TCursor_sheet* cur_sheet();
|
bool select_ec(); // starting point
|
||||||
|
bool print_selected(); // print selected items
|
||||||
// utils per handlers
|
bool print_ec(char tipocf, long clifo); // print one item
|
||||||
void reset_sheets(TMask& m);
|
|
||||||
void set_what(what w) {_what = w; }
|
|
||||||
void set_key (int k) {_key = k; }
|
|
||||||
|
|
||||||
TStampaEC_application();
|
TStampaEC_application();
|
||||||
virtual ~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()
|
bool TStampaEC_application::select_ec()
|
||||||
{
|
{
|
||||||
TMask m("sc2100a");
|
TEC_mask& m = mask();
|
||||||
KEY k;
|
while (m.run() != K_ESC)
|
||||||
|
|
||||||
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"));
|
_linprof = m.get_prof_lang();
|
||||||
m.set(F_LUOGOSEND, _ditta->lfile(LF_COMUNI).get("DENCOM"));
|
_form = new TEC_form(m.get_prof_code(), sheet().cursor());
|
||||||
|
|
||||||
|
print_selected();
|
||||||
|
|
||||||
|
delete _form;
|
||||||
|
_form = NULL;
|
||||||
}
|
}
|
||||||
|
return TRUE;
|
||||||
while ((k = m.run()) != K_ESC)
|
|
||||||
if (k == K_ENTER)
|
|
||||||
{
|
|
||||||
// sciroppa profilo
|
|
||||||
if (_form != NULL) delete _form;
|
|
||||||
TString16 base(m.get(F_PROFBASE));
|
|
||||||
TString16 code(m.get(F_CODPROF));
|
|
||||||
|
|
||||||
_form = new TForm(base, code.empty() ? NULL : (const char*)code);
|
|
||||||
|
|
||||||
if (base == BASE_EC_PROFILE) _linprof = "";
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_linprof[0] = base[base.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()
|
bool TStampaEC_application::print_selected()
|
||||||
{
|
{
|
||||||
for (int i = 0; i < cur_sheet()->items(); i++)
|
TCursor_sheet& c = sheet();
|
||||||
|
const char who = mask().get_who(); // Tipo clienti/fornitori
|
||||||
|
const int key = mask().get_key(); // Tipo di ordinamento
|
||||||
|
const long print_all = !c.one_checked(); // Se non ho selezionato nulla allora li stampo tutti
|
||||||
|
long analfabeti = 0; // Persone non stampate in quanto aventi lingua errata
|
||||||
|
|
||||||
|
printer().open();
|
||||||
|
|
||||||
|
const long items = c.items();
|
||||||
|
for (int i = 0; i < items; i++) if (print_all || c.checked(i))
|
||||||
{
|
{
|
||||||
if (cur_sheet()->checked(i))
|
TToken_string& t = c.row(i);
|
||||||
{
|
const long clifo = t.get_long(key);
|
||||||
TToken_string& t = cur_sheet()->row(i);
|
const bool ok = print_ec(who, clifo);
|
||||||
print_ec(t.get_long(1));
|
if (!ok) analfabeti++;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printer().close();
|
||||||
|
|
||||||
|
if (analfabeti > 0)
|
||||||
|
warning_box("%ld clienti/fornitori non sono stati stmapati in quanto "
|
||||||
|
"il codice lingua non corrispondeva al profilo di stampa", analfabeti);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TStampaEC_application::print_ec(long clifo)
|
bool TStampaEC_application::print_ec(char tipocf, long clifo)
|
||||||
{
|
{
|
||||||
TLocalisamfile clf(LF_CLIFO);
|
TEC_form& f = form();
|
||||||
clf.zero();
|
f.move_cursor(tipocf, clifo);
|
||||||
|
|
||||||
clf.put(CLI_TIPOCF, _what == clienti ? "C" : "F");
|
const TRectype& clf = f.cursor()->file().curr();
|
||||||
clf.put(CLI_CODCF, clifo);
|
const TString lincf(clf.get(CLI_CODLIN));
|
||||||
if (clf.read() != NOERR)
|
|
||||||
fatal_box("Errore in archivio clienti/fornitori");
|
|
||||||
|
|
||||||
TString lincf = clf.get(CLI_CODLIN);
|
|
||||||
|
|
||||||
bool ok = TRUE;
|
bool ok = TRUE;
|
||||||
|
|
||||||
// make controllations per lingua profilo/CF
|
// make controllations per lingua profilo/CF
|
||||||
if (_linprof == _lingua && !lincf.empty())
|
if ((_linprof == _lingua && !lincf.empty()) || _linprof != _lingua)
|
||||||
ok = (lincf == _linprof);
|
ok = lincf == _linprof;
|
||||||
else if (_linprof != _lingua)
|
|
||||||
ok = (lincf == _linprof);
|
if (!ok) // Cliente analfabeta
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
if (ok)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// TBC: ci vuole? warning_box ("Dio bestia! Cliente analfabeta!");
|
|
||||||
};
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
TCursor_sheet* TStampaEC_application::cur_sheet()
|
///////////////////////////////////////////////////////////
|
||||||
{
|
// Generic TApplication methods
|
||||||
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()
|
bool TStampaEC_application::create()
|
||||||
{
|
{
|
||||||
TApplication::create();
|
TApplication::create();
|
||||||
|
|
||||||
// crea relazioni, cursori e cursor_sheets
|
_msk = new TEC_mask("sc2100a");
|
||||||
_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, "cg");
|
|
||||||
_lingua = tc.get("CodLin");
|
|
||||||
_gesval = tc.get_bool("GesVal");
|
|
||||||
|
|
||||||
dispatch_e_menu(MENU_ITEM(1));
|
dispatch_e_menu(MENU_ITEM(1));
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TStampaEC_application::destroy()
|
bool TStampaEC_application::destroy()
|
||||||
{
|
{
|
||||||
delete _for_sh_k2;
|
delete _msk;
|
||||||
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();
|
return TApplication::destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TStampaEC_application::on_firm_change()
|
||||||
|
{
|
||||||
|
TApplication::on_firm_change();
|
||||||
|
TConfig c(CONFIG_DITTA, "cg");
|
||||||
|
_lingua = c.get("CodLin");
|
||||||
|
_gesval = c.get_bool("GesVal");
|
||||||
|
}
|
||||||
|
|
||||||
bool TStampaEC_application::menu(MENU_TAG m)
|
bool TStampaEC_application::menu(MENU_TAG m)
|
||||||
{
|
{
|
||||||
if (m == MENU_ITEM(1))
|
select_ec();
|
||||||
return select_ec();
|
return FALSE;
|
||||||
else return TApplication::menu(m);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TStampaEC_application::TStampaEC_application() : _selected(10000),
|
TStampaEC_application::TStampaEC_application()
|
||||||
_what(clienti), _key(1), _lingua(1), _linprof(2), _form(NULL)
|
: _lingua(1), _linprof(1), _msk(NULL), _form(NULL)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
int sc2100(int argc, char** argv)
|
int sc2100(int argc, char** argv)
|
||||||
|
37
sc/sc2100a.h
37
sc/sc2100a.h
@ -1,27 +1,22 @@
|
|||||||
|
#ifndef __SC2100A_H
|
||||||
|
#define __SC2100A_H
|
||||||
|
|
||||||
#define F_CODDITTA 101
|
#define F_CODDITTA 101
|
||||||
#define F_RAGSOC 102
|
#define F_RAGSOC 102
|
||||||
#define F_CODPROF 103
|
#define F_CODPROF 103
|
||||||
#define F_DESPROF 104
|
#define F_LINPROF 104
|
||||||
#define D_DATALIMOP 105
|
#define F_DESPROF 105
|
||||||
#define D_DATALIMSC 106
|
#define F_DATALIMOP 110
|
||||||
#define F_GIORISCH 107
|
#define F_DATALIMSC 111
|
||||||
#define B_STAMPCHIU 108
|
#define F_GIORISCH 112
|
||||||
#define D_DATACHIU 109
|
#define F_STAMPCHIU 113
|
||||||
#define F_LUOGOSEND 110
|
#define F_DATACHIU 114
|
||||||
#define D_DATASEND 111
|
#define F_LUOGOSEND 115
|
||||||
#define R_CLIFO 112
|
#define F_DATASEND 116
|
||||||
#define F_CFCODFR 113
|
#define F_CLIFO 117
|
||||||
#define F_CFCODTO 114
|
|
||||||
#define B_CFCODFR 115
|
|
||||||
#define B_CFCODTO 116
|
|
||||||
#define F_CFDESFR 117
|
|
||||||
#define F_CFDESTO 118
|
|
||||||
#define B_SELECT 119
|
|
||||||
#define B_RESET 120
|
|
||||||
#define R_SORTCF 121
|
|
||||||
#define F_NSEL 122
|
|
||||||
#define F_COMSEND 123
|
|
||||||
#define F_PROFBASE 124
|
|
||||||
|
|
||||||
// basename of profile
|
// basename of profile
|
||||||
#define BASE_EC_PROFILE "PEC"
|
#define BASE_EC_PROFILE "PEC"
|
||||||
|
|
||||||
|
#endif
|
126
sc/sc2100a.uml
126
sc/sc2100a.uml
@ -1,3 +1,4 @@
|
|||||||
|
#include "scselmsk.h"
|
||||||
#include "sc2100a.h"
|
#include "sc2100a.h"
|
||||||
|
|
||||||
PAGE "Stampa estratti conto" -1 -1 68 17
|
PAGE "Stampa estratti conto" -1 -1 68 17
|
||||||
@ -6,7 +7,7 @@ NUMBER F_CODDITTA 5
|
|||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 1 "Cod. "
|
PROMPT 1 1 "Cod. "
|
||||||
FLAGS "DFR"
|
FLAGS "DFR"
|
||||||
USE LF_NDITTE KEY 1
|
USE LF_NDITTE
|
||||||
INPUT CODDITTA F_CODDITTA
|
INPUT CODDITTA F_CODDITTA
|
||||||
OUTPUT F_RAGSOC RAGSOC
|
OUTPUT F_RAGSOC RAGSOC
|
||||||
CHECKTYPE REQUIRED
|
CHECKTYPE REQUIRED
|
||||||
@ -23,177 +24,130 @@ BEGIN
|
|||||||
PROMPT 0 7 ""
|
PROMPT 0 7 ""
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_PROFBASE 8
|
NUMBER F_CODPROF 4
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 8 "Profilo base"
|
PROMPT 1 8 "Profilo "
|
||||||
USE LF_FORM KEY 1 SELECT (CODPROF="")&&(TIPOPROF[1,3]=BASE_EC_PROFILE)
|
FLAGS "Z"
|
||||||
DISPLAY "Codice@9" TIPOPROF
|
USE LF_FORM
|
||||||
|
INPUT TIPOPROF BASE_EC_PROFILE
|
||||||
|
INPUT CODPROF[1,4] F_CODPROF
|
||||||
|
INPUT CODPROF[5,5] F_LINPROF
|
||||||
|
DISPLAY "Codice" CODPROF
|
||||||
DISPLAY "Descrizione@50" DESC
|
DISPLAY "Descrizione@50" DESC
|
||||||
INPUT TIPOPROF F_PROFBASE
|
OUTPUT F_CODPROF CODPROF
|
||||||
OUTPUT F_PROFBASE TIPOPROF
|
OUTPUT F_LINPROF F_CODPROF
|
||||||
OUTPUT F_DESPROF DESC
|
OUTPUT F_DESPROF DESC
|
||||||
HELP ""
|
|
||||||
FLAGS ""
|
|
||||||
CHECKTYPE REQUIRED
|
CHECKTYPE REQUIRED
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_CODPROF 5
|
STRING F_LINPROF 1
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 25 8 ""
|
PROMPT 18 8 ""
|
||||||
USE LF_FORM KEY 1 SELECT CODPROF!=""
|
USE %LNG
|
||||||
DISPLAY "Codice" CODPROF
|
INPUT CODTAB F_LINPROF
|
||||||
DISPLAY "Descrizione@50" DESC
|
DISPLAY "Codice" CODTAB
|
||||||
INPUT TIPOPROF F_PROFBASE SELECT
|
DISPLAY "Descrizione@50" S0
|
||||||
INPUT CODPROF F_CODPROF
|
OUTPUT F_LINPROF CODTAB
|
||||||
// OUTPUT F_PROFBASE TIPOPROF
|
|
||||||
OUTPUT F_CODPROF CODPROF
|
|
||||||
OUTPUT F_DESPROF DESC
|
|
||||||
HELP ""
|
|
||||||
FLAGS ""
|
|
||||||
CHECKTYPE NORMAL
|
CHECKTYPE NORMAL
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_DESPROF 50 30
|
STRING F_DESPROF 50 40
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 34 8 " "
|
PROMPT 25 8 ""
|
||||||
HELP ""
|
|
||||||
FLAGS "D"
|
FLAGS "D"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
DATE D_DATALIMOP
|
DATE F_DATALIMOP
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 9 "Data limite operazione "
|
PROMPT 1 9 "Data limite operazione "
|
||||||
HELP ""
|
|
||||||
FLAGS "A"
|
FLAGS "A"
|
||||||
CHECKTYPE REQUIRED
|
CHECKTYPE REQUIRED
|
||||||
END
|
END
|
||||||
|
|
||||||
DATE D_DATALIMSC
|
DATE F_DATALIMSC
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 10 "Data limite scaduto "
|
PROMPT 1 10 "Data limite scaduto "
|
||||||
HELP ""
|
|
||||||
FLAGS ""
|
|
||||||
CHECKTYPE REQUIRED
|
CHECKTYPE REQUIRED
|
||||||
END
|
END
|
||||||
|
|
||||||
NUMBER F_GIORISCH 3
|
NUMBER F_GIORISCH 3
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 11 "Giorni calcolo rischio "
|
PROMPT 1 11 "Giorni calcolo rischio "
|
||||||
HELP ""
|
|
||||||
FLAGS ""
|
|
||||||
END
|
END
|
||||||
|
|
||||||
BOOLEAN B_STAMPCHIU
|
BOOLEAN F_STAMPCHIU
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 12 "Stampa partite chiuse"
|
PROMPT 1 12 "Stampa partite chiuse"
|
||||||
MESSAGE TRUE ENABLE,D_DATACHIU
|
MESSAGE TRUE ENABLE,F_DATACHIU
|
||||||
MESSAGE FALSE DISABLE,D_DATACHIU
|
MESSAGE FALSE DISABLE,F_DATACHIU
|
||||||
HELP ""
|
|
||||||
FLAGS ""
|
|
||||||
END
|
END
|
||||||
|
|
||||||
DATE D_DATACHIU
|
DATE F_DATACHIU
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 25 12 "dal "
|
PROMPT 25 12 "dal "
|
||||||
HELP ""
|
|
||||||
FLAGS ""
|
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_COMSEND 5
|
STRING F_LUOGOSEND 50 32
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 13 "Luogo d'invio "
|
PROMPT 1 13 "Luogo d'invio "
|
||||||
USE LF_COMUNI KEY 1
|
|
||||||
INPUT COM F_COMSEND
|
|
||||||
INPUT DENCOM F_LUOGOSEND
|
|
||||||
DISPLAY "Codice" COM
|
|
||||||
DISPLAY "Descrizione@50" DENCOM
|
|
||||||
OUTPUT F_COMSEND COM
|
|
||||||
OUTPUT F_LUOGOSEND DENCOM
|
|
||||||
// CHECKTYPE NORMAL
|
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_LUOGOSEND 50 20
|
DATE F_DATASEND
|
||||||
BEGIN
|
|
||||||
PROMPT 24 13 ""
|
|
||||||
USE LF_COMUNI KEY 2
|
|
||||||
INPUT DENCOM F_LUOGOSEND
|
|
||||||
INPUT COM F_COMSEND
|
|
||||||
DISPLAY "Descrizione@50" DENCOM
|
|
||||||
DISPLAY "Codice" COM
|
|
||||||
OUTPUT F_COMSEND COM
|
|
||||||
OUTPUT F_LUOGOSEND DENCOM
|
|
||||||
// CHECKTYPE NORMAL
|
|
||||||
END
|
|
||||||
|
|
||||||
DATE D_DATASEND
|
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 50 13 "data "
|
PROMPT 50 13 "data "
|
||||||
HELP ""
|
|
||||||
FLAGS "A"
|
FLAGS "A"
|
||||||
CHECKTYPE REQUIRED
|
CHECKTYPE REQUIRED
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
BUTTON B_SELECT 10 1
|
BUTTON SC_SELECT 10 1
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 51 3 "~Selezione"
|
PROMPT 51 3 "~Selezione"
|
||||||
HELP ""
|
|
||||||
FLAGS ""
|
|
||||||
END
|
END
|
||||||
|
|
||||||
BUTTON B_RESET 10 1
|
BUTTON SC_RESET 10 1
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 51 4 "~Azzera"
|
PROMPT 51 4 "~Azzera"
|
||||||
HELP ""
|
|
||||||
FLAGS ""
|
|
||||||
END
|
END
|
||||||
|
|
||||||
RADIOBUTTON R_CLIFO 20
|
RADIOBUTTON SC_CLIFO 20
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 2 "Selezione"
|
PROMPT 1 2 "Selezione"
|
||||||
ITEM "1|Clienti"
|
ITEM "C|Clienti"
|
||||||
ITEM "2|Fornitori"
|
ITEM "F|Fornitori"
|
||||||
HELP ""
|
|
||||||
FLAGS ""
|
|
||||||
END
|
END
|
||||||
|
|
||||||
RADIOBUTTON R_SORTCF 20
|
RADIOBUTTON SC_SORTCF 20
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 25 2 "Ordinamento"
|
PROMPT 25 2 "Ordinamento"
|
||||||
ITEM "1|Per codice"
|
ITEM "1|Per codice"
|
||||||
ITEM "2|Per ragione sociale"
|
ITEM "2|Per ragione sociale"
|
||||||
HELP ""
|
|
||||||
FLAGS ""
|
|
||||||
END
|
END
|
||||||
|
|
||||||
NUMBER F_CFCODFR 5
|
NUMBER SC_CFCODFR 5
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 6 "Da codice "
|
PROMPT 1 6 "Da codice "
|
||||||
HELP ""
|
|
||||||
FLAGS ""
|
|
||||||
END
|
END
|
||||||
|
|
||||||
NUMBER F_CFCODTO 5
|
NUMBER SC_CFCODTO 5
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 36 6 "a codice "
|
PROMPT 36 6 "a codice "
|
||||||
HELP ""
|
|
||||||
FLAGS ""
|
|
||||||
END
|
END
|
||||||
|
|
||||||
NUMBER F_NSEL 3
|
NUMBER SC_NSEL 3
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 56 6 "N. "
|
PROMPT 56 6 "N. "
|
||||||
FLAGS "D"
|
FLAGS "D"
|
||||||
END
|
END
|
||||||
|
|
||||||
BUTTON B_CFCODFR 2 1
|
BUTTON SC_CFBUTFR 2 1
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 31 6 ""
|
PROMPT 31 6 ""
|
||||||
PICTURE 109
|
PICTURE 109
|
||||||
END
|
END
|
||||||
|
|
||||||
BUTTON B_CFCODTO 2 1
|
BUTTON SC_CFBUTTO 2 1
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 51 6 ""
|
PROMPT 51 6 ""
|
||||||
PICTURE 109
|
PICTURE 109
|
||||||
|
43
sc/sc2101.cpp
Executable file
43
sc/sc2101.cpp
Executable file
@ -0,0 +1,43 @@
|
|||||||
|
#include <prefix.h>
|
||||||
|
|
||||||
|
#include "sc2101.h"
|
||||||
|
#include "sc2100a.h"
|
||||||
|
|
||||||
|
TEC_mask::TEC_mask(const char* name) : TSelection_mask(name), _ditta(LF_NDITTE)
|
||||||
|
{
|
||||||
|
_ditta.add(LF_ANAG, "TIPOA==TIPOA|CODANAGR==CODANAGR");
|
||||||
|
_ditta.add(LF_COMUNI, "COM==COMRF(COMRES)", 1, LF_ANAG);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEC_mask::~TEC_mask()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void TEC_mask::on_firm_change()
|
||||||
|
{
|
||||||
|
TMask::on_firm_change();
|
||||||
|
|
||||||
|
_ditta[0].put("CODDITTA", prefix().get_codditta());
|
||||||
|
if (_ditta.read() == NOERR)
|
||||||
|
set(F_LUOGOSEND, _ditta[LF_COMUNI].get("DENCOM"));
|
||||||
|
}
|
||||||
|
|
||||||
|
void TEC_mask::start_run()
|
||||||
|
{
|
||||||
|
on_firm_change();
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* TEC_mask::get_prof_base() const
|
||||||
|
{
|
||||||
|
return BASE_EC_PROFILE;
|
||||||
|
}
|
||||||
|
|
||||||
|
const TString& TEC_mask::get_prof_code() const
|
||||||
|
{
|
||||||
|
return get(F_CODPROF);
|
||||||
|
}
|
||||||
|
|
||||||
|
const TString& TEC_mask::get_prof_lang() const
|
||||||
|
{
|
||||||
|
return get(F_LINPROF);
|
||||||
|
}
|
25
sc/sc2101.h
Executable file
25
sc/sc2101.h
Executable file
@ -0,0 +1,25 @@
|
|||||||
|
#ifndef __SC2101_H
|
||||||
|
#define __SC2101_H
|
||||||
|
|
||||||
|
#ifndef __SCSELECT_H
|
||||||
|
#include "scselect.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
class TEC_mask : public TSelection_mask
|
||||||
|
{
|
||||||
|
TRelation _ditta;
|
||||||
|
|
||||||
|
protected: // TMask
|
||||||
|
virtual void on_firm_change();
|
||||||
|
virtual void start_run();
|
||||||
|
|
||||||
|
public:
|
||||||
|
const char* get_prof_base() const;
|
||||||
|
const TString& get_prof_code() const;
|
||||||
|
const TString& get_prof_lang() const;
|
||||||
|
|
||||||
|
TEC_mask(const char* name);
|
||||||
|
virtual ~TEC_mask();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
@ -5,10 +5,10 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
TCursor_sheet_RecNo::TCursor_sheet_RecNo(TCursor * cursor, const char* fields,
|
TCursor_sheet_RecNo::TCursor_sheet_RecNo(TCursor * cursor, const char* fields,
|
||||||
const char * title, const char * head, byte buttons)
|
const char * title, const char * head, byte buttons)
|
||||||
: TCursor_sheet(cursor, fields, title, head, buttons)
|
: TCursor_sheet(cursor, fields, title, head, buttons)
|
||||||
{
|
{
|
||||||
_recnos.reset();
|
_recnos.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TCursor_sheet_RecNo::on_key(KEY k)
|
bool TCursor_sheet_RecNo::on_key(KEY k)
|
||||||
@ -17,8 +17,8 @@ bool TCursor_sheet_RecNo::on_key(KEY k)
|
|||||||
{
|
{
|
||||||
case K_SPACE:
|
case K_SPACE:
|
||||||
{
|
{
|
||||||
*_cursor = selected(); // Posiziona il cursore
|
*cursor() = selected(); // Posiziona il cursore
|
||||||
rec_check(_cursor->file().recno(), !checked(selected()));
|
rec_check(cursor()->file().recno(), !checked(selected()));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case K_F2:
|
case K_F2:
|
||||||
@ -30,7 +30,7 @@ bool TCursor_sheet_RecNo::on_key(KEY k)
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return TCursor_sheet::on_key(k);
|
return TCursor_sheet::on_key(k);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TCursor_sheet_RecNo::rec_check(long n, bool on)
|
void TCursor_sheet_RecNo::rec_check(long n, bool on)
|
||||||
|
290
sc/scselect.cpp
Executable file
290
sc/scselect.cpp
Executable file
@ -0,0 +1,290 @@
|
|||||||
|
#include "scselect.h"
|
||||||
|
|
||||||
|
TSelection_mask::TSelection_mask(const char* name)
|
||||||
|
: TMask(name), _who('C'), _key(1), _clifo_rel(NULL),
|
||||||
|
_cli_cur_k1(NULL), _cli_cur_k2(NULL), _for_cur_k1(NULL), _for_cur_k2(NULL)
|
||||||
|
{
|
||||||
|
// 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);
|
||||||
|
|
||||||
|
|
||||||
|
_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");
|
||||||
|
|
||||||
|
if (id2pos(SC_CLIFO) >= 0)
|
||||||
|
{
|
||||||
|
_for_cur_k1 = new TCursor(_clifo_rel, "TIPOCF=\"F\"", 1);
|
||||||
|
_for_cur_k2 = new TCursor(_clifo_rel, "TIPOCF=\"F\"", 2);
|
||||||
|
_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");
|
||||||
|
}
|
||||||
|
|
||||||
|
set_handler(SC_CLIFO, rclifo_handler);
|
||||||
|
set_handler(SC_SORTCF, rsortcf_handler);
|
||||||
|
set_handler(SC_CFBUTFR, bfrom_handler);
|
||||||
|
set_handler(SC_CFBUTTO, bto_handler);
|
||||||
|
set_handler(SC_SELECT, bselect_handler);
|
||||||
|
set_handler(SC_RESET, breset_handler);
|
||||||
|
set_handler(SC_CFCODFR, ffrom_handler);
|
||||||
|
set_handler(SC_CFCODTO, fto_handler);
|
||||||
|
}
|
||||||
|
|
||||||
|
TSelection_mask::~TSelection_mask()
|
||||||
|
{
|
||||||
|
delete _for_sh_k2;
|
||||||
|
delete _for_sh_k1;
|
||||||
|
delete _for_cur_k2;
|
||||||
|
delete _for_cur_k1;
|
||||||
|
|
||||||
|
delete _cli_sh_k2;
|
||||||
|
delete _cli_sh_k1;
|
||||||
|
delete _cli_cur_k2;
|
||||||
|
delete _cli_cur_k1;
|
||||||
|
|
||||||
|
delete _clifo_rel;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TSelection_mask::set_handler(short fld_id, CONTROL_HANDLER handler)
|
||||||
|
{
|
||||||
|
const int pos = id2pos(fld_id);
|
||||||
|
if (pos >= 0)
|
||||||
|
fld(pos).set_handler(handler);
|
||||||
|
}
|
||||||
|
|
||||||
|
TCursor_sheet& TSelection_mask::cur_sheet()
|
||||||
|
{
|
||||||
|
TCursor_sheet* cs;
|
||||||
|
if (get_key() == 1) cs = get_who() == 'C' ? _cli_sh_k1 : _for_sh_k1;
|
||||||
|
else cs = get_who() == 'C' ? _cli_sh_k2 : _for_sh_k2;
|
||||||
|
|
||||||
|
CHECK(cs, "Can't use a NULL TCursor_sheet");
|
||||||
|
return *cs;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TSelection_mask::reset_sheets()
|
||||||
|
{
|
||||||
|
_cli_sh_k1->uncheck(-1);
|
||||||
|
_cli_sh_k2->uncheck(-1);
|
||||||
|
if (_for_sh_k1)
|
||||||
|
{
|
||||||
|
_for_sh_k1->uncheck(-1);
|
||||||
|
_for_sh_k2->uncheck(-1);
|
||||||
|
}
|
||||||
|
reset(SC_CFCODFR);
|
||||||
|
reset(SC_CFCODTO);
|
||||||
|
reset(SC_NSEL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Seleziona tutti i clienti con codice compreso tra due estremi
|
||||||
|
void TSelection_mask::select_clifo_range(long from, long to)
|
||||||
|
{
|
||||||
|
TCursor_sheet& c = cur_sheet();
|
||||||
|
const long items = c.items();
|
||||||
|
const int key = get_key();
|
||||||
|
|
||||||
|
long nsel = 0;
|
||||||
|
|
||||||
|
if (to == 0l)
|
||||||
|
to = c.row(items-1).get_long(key);
|
||||||
|
if (from == 0l)
|
||||||
|
from = c.row(0).get_long(key);
|
||||||
|
|
||||||
|
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 < items; i++)
|
||||||
|
{
|
||||||
|
TToken_string& tt = c.row(i);
|
||||||
|
long cod = tt.get_long(key);
|
||||||
|
if (cod >= from && cod <= to)
|
||||||
|
{
|
||||||
|
c.check(i);
|
||||||
|
nsel ++;
|
||||||
|
if (firs == 0l) firs = cod;
|
||||||
|
last = cod;
|
||||||
|
}
|
||||||
|
else c.uncheck(i);
|
||||||
|
|
||||||
|
if (cod == from) cod1ok = TRUE;
|
||||||
|
if (cod == to) cod2ok = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!cod1ok) from = firs;
|
||||||
|
if (!cod2ok) to = last;
|
||||||
|
|
||||||
|
set(SC_CFCODFR, from);
|
||||||
|
set(SC_CFCODTO, to);
|
||||||
|
set(SC_NSEL, nsel);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cerca il primo e l'ultimo cliente selezionati
|
||||||
|
void TSelection_mask::set_clifo_limits()
|
||||||
|
{
|
||||||
|
long first = 0, last = 0, nsel = 0;
|
||||||
|
|
||||||
|
TCursor_sheet& c = cur_sheet();
|
||||||
|
const long items = c.items();
|
||||||
|
const int key = get_key();
|
||||||
|
|
||||||
|
for (int i = 0; i < items; i++) if (c.checked(i))
|
||||||
|
{
|
||||||
|
TToken_string& t = c.row(i);
|
||||||
|
const long kod = t.get_long(key);
|
||||||
|
if (first == 0)
|
||||||
|
{
|
||||||
|
first = last = kod;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (first > kod) first = kod;
|
||||||
|
if (last < kod) last = kod;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsel++;
|
||||||
|
}
|
||||||
|
set(SC_CFCODFR, first);
|
||||||
|
set(SC_CFCODTO, last);
|
||||||
|
set(SC_NSEL, nsel);
|
||||||
|
}
|
||||||
|
|
||||||
|
// handlers
|
||||||
|
bool TSelection_mask::bfrom_handler(TMask_field& f, KEY k)
|
||||||
|
{
|
||||||
|
if (k == K_SPACE)
|
||||||
|
{
|
||||||
|
TSelection_mask& m = (TSelection_mask&)f.mask();
|
||||||
|
TCursor_sheet& c = m.cur_sheet();
|
||||||
|
|
||||||
|
c.disable_check();
|
||||||
|
if (c.run() == K_ENTER)
|
||||||
|
{
|
||||||
|
TToken_string& t = c.row(c.selected());
|
||||||
|
const long cod1 = t.get_long(m.get_key());
|
||||||
|
const long cod2 = m.get_long(SC_CFCODTO);
|
||||||
|
m.set(SC_CFCODFR, cod1);
|
||||||
|
m.select_clifo_range(cod1, cod2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TSelection_mask::bto_handler(TMask_field& f, KEY k)
|
||||||
|
{
|
||||||
|
if (k == K_SPACE)
|
||||||
|
{
|
||||||
|
TSelection_mask& m = (TSelection_mask&)f.mask();
|
||||||
|
TCursor_sheet& c = m.cur_sheet();
|
||||||
|
c.disable_check();
|
||||||
|
if (c.run() == K_ENTER)
|
||||||
|
{
|
||||||
|
TToken_string& t = c.row(c.selected());
|
||||||
|
const long cod2 = t.get_long(m.get_key());
|
||||||
|
const long cod1 = m.get_long(SC_CFCODFR);
|
||||||
|
m.set(SC_CFCODTO, cod2);
|
||||||
|
m.select_clifo_range(cod1, cod2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TSelection_mask::ffrom_handler(TMask_field& f, KEY k)
|
||||||
|
{
|
||||||
|
TSelection_mask& m = (TSelection_mask&)f.mask();
|
||||||
|
|
||||||
|
if (k == K_TAB && f.focusdirty())
|
||||||
|
{
|
||||||
|
const long cod1 = atol(f.get());
|
||||||
|
const long cod2 = m.get_long(SC_CFCODTO);
|
||||||
|
m.select_clifo_range(cod1, cod2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if (k == K_F9)
|
||||||
|
{
|
||||||
|
TMask_field& f = m.field(SC_CFBUTFR);
|
||||||
|
f.on_hit();
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TSelection_mask::fto_handler(TMask_field& f, KEY k)
|
||||||
|
{
|
||||||
|
TSelection_mask& m = (TSelection_mask&)f.mask();
|
||||||
|
|
||||||
|
if (k == K_TAB && f.focusdirty())
|
||||||
|
{
|
||||||
|
const long cod1 = m.get_long(SC_CFCODFR);
|
||||||
|
const long cod2 = atol(f.get());
|
||||||
|
m.select_clifo_range(cod1, cod2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if (k == K_F9)
|
||||||
|
{
|
||||||
|
TMask_field& f = m.field(SC_CFBUTTO);
|
||||||
|
f.on_hit();
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TSelection_mask::breset_handler(TMask_field& f, KEY k)
|
||||||
|
{
|
||||||
|
if (k == K_SPACE)
|
||||||
|
{
|
||||||
|
TSelection_mask& m = (TSelection_mask&)f.mask();
|
||||||
|
m.reset_sheets();
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TSelection_mask::bselect_handler(TMask_field& f, KEY k)
|
||||||
|
{
|
||||||
|
if (k == K_SPACE)
|
||||||
|
{
|
||||||
|
TSelection_mask& m = (TSelection_mask&)f.mask();
|
||||||
|
TCursor_sheet& c = m.cur_sheet();
|
||||||
|
c.enable_check();
|
||||||
|
c.run();
|
||||||
|
m.set_clifo_limits();
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TSelection_mask::rclifo_handler(TMask_field& f, KEY k)
|
||||||
|
{
|
||||||
|
if (k == K_SPACE)
|
||||||
|
{
|
||||||
|
TSelection_mask& m = (TSelection_mask&)f.mask();
|
||||||
|
m.set_who(f.get()[0]);
|
||||||
|
m.reset_sheets();
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TSelection_mask::rsortcf_handler(TMask_field& f, KEY k)
|
||||||
|
{
|
||||||
|
if (k == K_SPACE)
|
||||||
|
{
|
||||||
|
TSelection_mask& m = (TSelection_mask&)f.mask();
|
||||||
|
m.set_key(atoi(f.get()));
|
||||||
|
m.reset_sheets();
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
68
sc/scselect.h
Executable file
68
sc/scselect.h
Executable file
@ -0,0 +1,68 @@
|
|||||||
|
#ifndef __SCSELECT_H
|
||||||
|
#define __SCSELECT_H
|
||||||
|
|
||||||
|
#ifndef __MASK_H
|
||||||
|
#include <mask.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __RELATION_H
|
||||||
|
#include <relation.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __SHEET_H
|
||||||
|
#include <sheet.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __SCSELMSK_H
|
||||||
|
#include "scselmsk.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
class TSelection_mask : public TMask
|
||||||
|
{
|
||||||
|
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;
|
||||||
|
|
||||||
|
char _who;
|
||||||
|
int _key;
|
||||||
|
|
||||||
|
protected: // TMask
|
||||||
|
virtual void set_handler(short fld_id, CONTROL_HANDLER handler);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void select_clifo_range(long from, long to);
|
||||||
|
void set_clifo_limits();
|
||||||
|
|
||||||
|
void set_who(char w) { _who = w; }
|
||||||
|
void set_key (int k) { _key = k; }
|
||||||
|
|
||||||
|
void reset_sheets();
|
||||||
|
|
||||||
|
// 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);
|
||||||
|
|
||||||
|
public:
|
||||||
|
TCursor_sheet& cur_sheet();
|
||||||
|
|
||||||
|
char get_who() const { return _who; }
|
||||||
|
int get_key() const { return _key; }
|
||||||
|
|
||||||
|
TSelection_mask(const char* name);
|
||||||
|
virtual ~TSelection_mask();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
Loading…
x
Reference in New Issue
Block a user