From 7a41843999f5f8be3fbdac9c3d7ea4397ff07789 Mon Sep 17 00:00:00 2001 From: guy Date: Mon, 27 Nov 1995 08:39:47 +0000 Subject: [PATCH] Stampa Estratto Conto git-svn-id: svn://10.65.10.50/trunk@2208 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- sc/sc2100.cpp | 535 ++++++++++++++---------------------------------- sc/sc2100a.h | 37 ++-- sc/sc2100a.uml | 126 ++++-------- sc/sc2101.cpp | 43 ++++ sc/sc2101.h | 25 +++ sc/sc2201.cpp | 14 +- sc/scselect.cpp | 290 ++++++++++++++++++++++++++ sc/scselect.h | 68 ++++++ 8 files changed, 640 insertions(+), 498 deletions(-) create mode 100755 sc/sc2101.cpp create mode 100755 sc/sc2101.h create mode 100755 sc/scselect.cpp create mode 100755 sc/scselect.h diff --git a/sc/sc2100.cpp b/sc/sc2100.cpp index b67772932..6cd4a03ad 100755 --- a/sc/sc2100.cpp +++ b/sc/sc2100.cpp @@ -1,449 +1,216 @@ -#ifndef __APPLICAT_H #include -#endif - -#ifndef __MASK_H -#include -#endif - -#ifndef __CONFIG_H #include -#endif - -#ifndef __FORM_H #include -#endif - -#ifndef __RELATION_H -#include -#endif - -#ifndef __URLDEFID_H +#include #include -#endif - -#ifndef __SHEET_H -#include -#endif - -#ifndef __LFFILES_H -#include -#endif - -#ifndef __CLIFO_H -#include -#endif #include "sc2.h" -#include "sc2100a.h" +#include "sc2101.h" + +#include + +/////////////////////////////////////////////////////////// +// 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 { - enum what {clienti, fornitori}; - - TForm* _form; + TEC_mask* _msk; + TEC_form* _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; + TString _lingua; + TString _linprof; + bool _gesval; -protected: - +protected: // TApplication virtual bool create(); virtual bool destroy(); virtual bool menu(MENU_TAG m); - - long select_clifo_range(TMask& m, long from, long to); - + virtual void on_firm_change(); + +public: 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: + TEC_mask& mask() { return *_msk; } + TCursor_sheet& sheet() { return _msk->cur_sheet(); } + TEC_form& form() { return *_form; } - bool select_ec(); // starting point - bool print_selected(); - bool print_ec(long clifo); + bool select_ec(); // starting point + bool print_selected(); // print selected items + bool print_ec(char tipocf, long clifo); // print one item - 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()) + TEC_mask& m = mask(); + while (m.run() != K_ESC) { - m.set(F_COMSEND, _ditta->lfile(LF_COMUNI).get("COM")); - m.set(F_LUOGOSEND, _ditta->lfile(LF_COMUNI).get("DENCOM")); + _linprof = m.get_prof_lang(); + _form = new TEC_form(m.get_prof_code(), sheet().cursor()); + + print_selected(); + + delete _form; + _form = NULL; } - - 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; + return TRUE; } -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++) +{ + 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 = cur_sheet()->row(i); - print_ec(t.get_long(1)); - } + TToken_string& t = c.row(i); + const long clifo = t.get_long(key); + const bool ok = print_ec(who, clifo); + 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; } -bool TStampaEC_application::print_ec(long clifo) +bool TStampaEC_application::print_ec(char tipocf, 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"); + TEC_form& f = form(); + f.move_cursor(tipocf, clifo); - TString lincf = clf.get(CLI_CODLIN); + const TRectype& clf = f.cursor()->file().curr(); + const 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 ((_linprof == _lingua && !lincf.empty()) || _linprof != _lingua) + ok = lincf == _linprof; - if (ok) - { - } - else - { -// TBC: ci vuole? warning_box ("Dio bestia! Cliente analfabeta!"); - }; - + if (!ok) // Cliente analfabeta + return FALSE; + + 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); -} +/////////////////////////////////////////////////////////// +// Generic TApplication methods +/////////////////////////////////////////////////////////// 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, "cg"); - _lingua = tc.get("CodLin"); - _gesval = tc.get_bool("GesVal"); + _msk = new TEC_mask("sc2100a"); 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; - +{ + delete _msk; 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) { - if (m == MENU_ITEM(1)) - return select_ec(); - else return TApplication::menu(m); + select_ec(); + return FALSE; } -TStampaEC_application::TStampaEC_application() : _selected(10000), - _what(clienti), _key(1), _lingua(1), _linprof(2), _form(NULL) +TStampaEC_application::TStampaEC_application() + : _lingua(1), _linprof(1), _msk(NULL), _form(NULL) {} int sc2100(int argc, char** argv) diff --git a/sc/sc2100a.h b/sc/sc2100a.h index 8bf73dbfa..ee6dded03 100755 --- a/sc/sc2100a.h +++ b/sc/sc2100a.h @@ -1,27 +1,22 @@ +#ifndef __SC2100A_H +#define __SC2100A_H + #define F_CODDITTA 101 #define F_RAGSOC 102 #define F_CODPROF 103 -#define F_DESPROF 104 -#define D_DATALIMOP 105 -#define D_DATALIMSC 106 -#define F_GIORISCH 107 -#define B_STAMPCHIU 108 -#define D_DATACHIU 109 -#define F_LUOGOSEND 110 -#define D_DATASEND 111 -#define R_CLIFO 112 -#define F_CFCODFR 113 -#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 +#define F_LINPROF 104 +#define F_DESPROF 105 +#define F_DATALIMOP 110 +#define F_DATALIMSC 111 +#define F_GIORISCH 112 +#define F_STAMPCHIU 113 +#define F_DATACHIU 114 +#define F_LUOGOSEND 115 +#define F_DATASEND 116 +#define F_CLIFO 117 + // basename of profile #define BASE_EC_PROFILE "PEC" + +#endif \ No newline at end of file diff --git a/sc/sc2100a.uml b/sc/sc2100a.uml index 6f2e57048..7b602575c 100755 --- a/sc/sc2100a.uml +++ b/sc/sc2100a.uml @@ -1,3 +1,4 @@ +#include "scselmsk.h" #include "sc2100a.h" PAGE "Stampa estratti conto" -1 -1 68 17 @@ -6,7 +7,7 @@ NUMBER F_CODDITTA 5 BEGIN PROMPT 1 1 "Cod. " FLAGS "DFR" - USE LF_NDITTE KEY 1 + USE LF_NDITTE INPUT CODDITTA F_CODDITTA OUTPUT F_RAGSOC RAGSOC CHECKTYPE REQUIRED @@ -23,177 +24,130 @@ BEGIN PROMPT 0 7 "" END -STRING F_PROFBASE 8 +NUMBER F_CODPROF 4 BEGIN - PROMPT 1 8 "Profilo base" - USE LF_FORM KEY 1 SELECT (CODPROF="")&&(TIPOPROF[1,3]=BASE_EC_PROFILE) - DISPLAY "Codice@9" TIPOPROF + PROMPT 1 8 "Profilo " + FLAGS "Z" + 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 - INPUT TIPOPROF F_PROFBASE - OUTPUT F_PROFBASE TIPOPROF + OUTPUT F_CODPROF CODPROF + OUTPUT F_LINPROF F_CODPROF OUTPUT F_DESPROF DESC - HELP "" - FLAGS "" CHECKTYPE REQUIRED END -STRING F_CODPROF 5 +STRING F_LINPROF 1 BEGIN - PROMPT 25 8 "" - USE LF_FORM KEY 1 SELECT CODPROF!="" - DISPLAY "Codice" CODPROF - DISPLAY "Descrizione@50" DESC - INPUT TIPOPROF F_PROFBASE SELECT - INPUT CODPROF F_CODPROF -// OUTPUT F_PROFBASE TIPOPROF - OUTPUT F_CODPROF CODPROF - OUTPUT F_DESPROF DESC - HELP "" - FLAGS "" + PROMPT 18 8 "" + USE %LNG + INPUT CODTAB F_LINPROF + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_LINPROF CODTAB CHECKTYPE NORMAL END -STRING F_DESPROF 50 30 +STRING F_DESPROF 50 40 BEGIN - PROMPT 34 8 " " - HELP "" + PROMPT 25 8 "" FLAGS "D" END -DATE D_DATALIMOP +DATE F_DATALIMOP BEGIN PROMPT 1 9 "Data limite operazione " - HELP "" FLAGS "A" CHECKTYPE REQUIRED END -DATE D_DATALIMSC +DATE F_DATALIMSC BEGIN PROMPT 1 10 "Data limite scaduto " - HELP "" - FLAGS "" CHECKTYPE REQUIRED END NUMBER F_GIORISCH 3 BEGIN PROMPT 1 11 "Giorni calcolo rischio " - HELP "" - FLAGS "" END -BOOLEAN B_STAMPCHIU +BOOLEAN F_STAMPCHIU BEGIN PROMPT 1 12 "Stampa partite chiuse" - MESSAGE TRUE ENABLE,D_DATACHIU - MESSAGE FALSE DISABLE,D_DATACHIU - HELP "" - FLAGS "" + MESSAGE TRUE ENABLE,F_DATACHIU + MESSAGE FALSE DISABLE,F_DATACHIU END -DATE D_DATACHIU +DATE F_DATACHIU BEGIN PROMPT 25 12 "dal " - HELP "" - FLAGS "" END -STRING F_COMSEND 5 +STRING F_LUOGOSEND 50 32 BEGIN 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 -STRING F_LUOGOSEND 50 20 -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 +DATE F_DATASEND BEGIN PROMPT 50 13 "data " - HELP "" FLAGS "A" CHECKTYPE REQUIRED END -BUTTON B_SELECT 10 1 +BUTTON SC_SELECT 10 1 BEGIN PROMPT 51 3 "~Selezione" - HELP "" - FLAGS "" END -BUTTON B_RESET 10 1 +BUTTON SC_RESET 10 1 BEGIN PROMPT 51 4 "~Azzera" - HELP "" - FLAGS "" END -RADIOBUTTON R_CLIFO 20 +RADIOBUTTON SC_CLIFO 20 BEGIN PROMPT 1 2 "Selezione" - ITEM "1|Clienti" - ITEM "2|Fornitori" - HELP "" - FLAGS "" + ITEM "C|Clienti" + ITEM "F|Fornitori" END -RADIOBUTTON R_SORTCF 20 +RADIOBUTTON SC_SORTCF 20 BEGIN PROMPT 25 2 "Ordinamento" ITEM "1|Per codice" ITEM "2|Per ragione sociale" - HELP "" - FLAGS "" END -NUMBER F_CFCODFR 5 +NUMBER SC_CFCODFR 5 BEGIN PROMPT 1 6 "Da codice " - HELP "" - FLAGS "" END -NUMBER F_CFCODTO 5 +NUMBER SC_CFCODTO 5 BEGIN PROMPT 36 6 "a codice " - HELP "" - FLAGS "" END -NUMBER F_NSEL 3 +NUMBER SC_NSEL 3 BEGIN PROMPT 56 6 "N. " FLAGS "D" END -BUTTON B_CFCODFR 2 1 +BUTTON SC_CFBUTFR 2 1 BEGIN PROMPT 31 6 "" PICTURE 109 END -BUTTON B_CFCODTO 2 1 +BUTTON SC_CFBUTTO 2 1 BEGIN PROMPT 51 6 "" PICTURE 109 diff --git a/sc/sc2101.cpp b/sc/sc2101.cpp new file mode 100755 index 000000000..67cae02e8 --- /dev/null +++ b/sc/sc2101.cpp @@ -0,0 +1,43 @@ +#include + +#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); +} diff --git a/sc/sc2101.h b/sc/sc2101.h new file mode 100755 index 000000000..7ab713758 --- /dev/null +++ b/sc/sc2101.h @@ -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 diff --git a/sc/sc2201.cpp b/sc/sc2201.cpp index 4b2da719e..4af84f994 100755 --- a/sc/sc2201.cpp +++ b/sc/sc2201.cpp @@ -5,11 +5,11 @@ /////////////////////////////////////////////////////////////////////////////// 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) { - _recnos.reset(); -} + _recnos.reset(); +} bool TCursor_sheet_RecNo::on_key(KEY k) { @@ -17,8 +17,8 @@ bool TCursor_sheet_RecNo::on_key(KEY k) { case K_SPACE: { - *_cursor = selected(); // Posiziona il cursore - rec_check(_cursor->file().recno(), !checked(selected())); + *cursor() = selected(); // Posiziona il cursore + rec_check(cursor()->file().recno(), !checked(selected())); break; } case K_F2: @@ -30,7 +30,7 @@ bool TCursor_sheet_RecNo::on_key(KEY k) default: break; } - return TCursor_sheet::on_key(k); + return TCursor_sheet::on_key(k); } void TCursor_sheet_RecNo::rec_check(long n, bool on) @@ -49,4 +49,4 @@ void TCursor_sheet_RecNo::rec_check(long n, bool on) _recnos.set(n, on); } - + diff --git a/sc/scselect.cpp b/sc/scselect.cpp new file mode 100755 index 000000000..828d663fb --- /dev/null +++ b/sc/scselect.cpp @@ -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; +} + diff --git a/sc/scselect.h b/sc/scselect.h new file mode 100755 index 000000000..9a4287b2b --- /dev/null +++ b/sc/scselect.h @@ -0,0 +1,68 @@ +#ifndef __SCSELECT_H +#define __SCSELECT_H + +#ifndef __MASK_H +#include +#endif + +#ifndef __RELATION_H +#include +#endif + +#ifndef __SHEET_H +#include +#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