diff --git a/ve/ve2.cpp b/ve/ve2.cpp index 4f992654e..2f351b9c7 100755 --- a/ve/ve2.cpp +++ b/ve/ve2.cpp @@ -1,5 +1,5 @@ -#include <checks.h> #include <xvt.h> +#include <checks.h> extern int ve2100(int argc, char* argv[]); // tabelle sconti (di riga/di documento/incondizionati) extern int ve2200(int argc, char* argv[]); // testate listini/contratti/offerte diff --git a/ve/ve2400.cpp b/ve/ve2400.cpp index 38d41b854..3621b2d1d 100755 --- a/ve/ve2400.cpp +++ b/ve/ve2400.cpp @@ -1,5 +1,6 @@ #include "velib.h" #include "ve2400.h" +#include "ve2401.h" #include "../ca/calib01.h" #include "../cg/cglib01.h" @@ -12,7 +13,6 @@ #include <relapp.h> #include <tabutil.h> #include <urldefid.h> -#include <utility.h> //--------------------------------------------------- // MASCHERA ANAGRAFICA MAGAZZINO @@ -254,6 +254,7 @@ void create_browse2(TEdit_field& kfld, int level, short key_id, short des_id, co int create_fields(TMask& msk, int x, int y, short key_id, short des_id, const TCodart_livelli &cal, const bool chktyp) { const int last_level = cal.last_level(); + int tab0 = x; int i; for (i = 1; i <= last_level; i++) //cicla su tutti i livelli del codart abilitati @@ -435,7 +436,10 @@ void TMask_anamag::create_user_fields() if (type == 'X') f = &add_boolean(F_USER1 + i - 1, PAGE_USER, prompt, 2, 3 + i); if (f != NULL) - f->set_field(format("USER%d", i)); + { + TString8 u; u.format("USER%d", i); + f->set_field(u); + } disable_user_page = false; } } @@ -481,13 +485,20 @@ TMask_anamag::TMask_anamag(TRelation * rel) : TMask("ve2400") create_user_fields(); - if(livelli_art->enabled()) + if (livelli_art->enabled()) { create_fields(*this, 1, 1, F_LIVART1, F_DESLIVART1, *livelli_art, true); first_focus(F_LIVART1); } else + { + if (advanced_codart_enabled()) + { + TButton_field& bu = add_button(F_ADVANCED, 0, PR("Codice guidato"), 1, 1, 20); + bu.set_handler(advanced_codart_handler); + } first_focus(F_CODART); + } } void TMask_anamag::sheetsto_put(TSheet_field &sheet_sto, int item) diff --git a/ve/ve2400.h b/ve/ve2400.h index eb1b9fcd5..36b4fc078 100755 --- a/ve/ve2400.h +++ b/ve/ve2400.h @@ -1,6 +1,7 @@ #define F_CODART 101 #define F_DESCR 102 #define F_COPY 100 +#define F_ADVANCED 108 #define F_GRMERC 103 #define F_GRMERCD1 106 diff --git a/ve/ve2401.cpp b/ve/ve2401.cpp new file mode 100755 index 000000000..73f1f7f1c --- /dev/null +++ b/ve/ve2401.cpp @@ -0,0 +1,161 @@ +#include "ve2400.h" +#include "ve2401.h" + +#include <automask.h> +#include <diction.h> +#include <recarray.h> +#include <recset.h> + +/////////////////////////////////////////////////////////// +// Utility per gestione struttura codice avanzato +/////////////////////////////////////////////////////////// + +const TString& root_code() +{ + static TString4 _root_code; + if (_root_code.empty()) + { + const TString query = "USE FSA SELECT B0='X'"; + TISAM_recordset set(query); + if (set.move_first()) + _root_code = set.get("CODTAB").as_string(); + else + _root_code = " "; // Evito riletture inutili + } + return _root_code; +} + +static const TRectype& get_sublevel_info(const TString& code) +{ + return cache().get("FSA", code.full() ? code : root_code()); +} + +/////////////////////////////////////////////////////////// +// Maschera dianamica per inserimento codici +/////////////////////////////////////////////////////////// + +class TCodart_mask : public TAutomask +{ +protected: + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); + void create_level(int level, const TString& subcode); + void rebuild(); + +public: + TCodart_mask(); +}; + +bool TCodart_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + switch (o.dlg()) + { + case 101: + if (e == fe_modify) // Se cambio il contenuto del primo livello ... + rebuild(); // Ricostruisco la maschera + break; + default: + break; + } + return true; +} + +void TCodart_mask::create_level(int level, const TString& subcode) +{ + const TRectype& fsa = get_sublevel_info(subcode); + if (!fsa.empty()) + { + const TString4 code = fsa.get("CODTAB"); // Puo' essere diverso da subcode! + TString80 prompt = fsa.get("S0"); prompt.left_just(21); + const TString& picture = fsa.get("S1"); + const int length = picture.len(); + + TEdit_field& kfld = add_string(100+level, 0, prompt, 1, level, length, "B"); + TEdit_field& dfld = add_string(200+level, 0, "", 40, level, 36, "D"); + + TFilename tmp; tmp.temp(); + ofstream out(tmp); + + out << "USE GSA" << endl; //usa la tabella dei sottolivelli articolo + + out << "IN CODTAB[1,3] \"" << code << "\" SELECT" << endl; + out << "IN CODTAB[4,0] " << kfld.dlg() << endl; + out << "DI \"" << prompt; + if (length > prompt.len()) + out << '@' << length; + out << "\" CODTAB[4,0]" << endl; + out << "DI \"" << HR("Descrizione") << "@50\" S0" << endl; + out << "OU " << kfld.dlg() << " CODTAB[4,0]" << endl; + out << "OU " << dfld.dlg() << " S0" << endl; + + out << "CH RE" << endl; + out << "EN" << endl; + out.close(); + + TScanner scan(tmp); + while (scan.pop() != "EN") + kfld.parse_item(scan); + + xvt_fsys_removefile(tmp); + set_handlers(); + } +} + +void TCodart_mask::rebuild() +{ + TArray& a = fields_array(); + for (int i = a.last(); i > 3; i--) + a.destroy(i); + + TString8 code = root_code(); + code << get(101); + const TString& children = cache().get("GSA", code, "S1"); + for (int i = 0; i < 8; i++) + { + const TString& subcode = children.mid(i*3, 3); + if (subcode.full()) + create_level(i+2, subcode); + else + break; + } + + force_update(); +} + +TCodart_mask::TCodart_mask() : TAutomask(TR("Articolo guidato"), 1, 78, 13) +{ + add_button(DLG_OK, 0, "", -12, -1, 10, 2); + add_button(DLG_CANCEL, 0, "", -22, -1, 10, 2); + create_level(1, EMPTY_STRING); +} + +const TString& advanced_get_codart() +{ + TCodart_mask m; + if (m.run() == K_ENTER) + { + TString& tmp = get_tmp_string(); + for (short id = 101; m.id2pos(id) >= 0; id++) + tmp << m.get(id); + return tmp; + } + return EMPTY_STRING; +} + +/////////////////////////////////////////////////////////// +// Essenzialissima interfaccia pubblica +/////////////////////////////////////////////////////////// + +bool advanced_codart_enabled() +{ + return root_code().full(); +} + +bool advanced_codart_handler(TMask_field& fld, KEY key) +{ + if (key == K_SPACE) + { + TMask& msk = fld.mask(); + msk.set(F_CODART, advanced_get_codart(), true); + } + return true; +} diff --git a/ve/ve2401.h b/ve/ve2401.h new file mode 100755 index 000000000..9b6b80463 --- /dev/null +++ b/ve/ve2401.h @@ -0,0 +1,11 @@ +#ifndef __VE2401_H +#define __VE2401_H + +#ifndef __MASKFLD_H +#include <maskfld.h> +#endif + +bool advanced_codart_enabled(); +bool advanced_codart_handler(TMask_field& fld, KEY key); + +#endif \ No newline at end of file diff --git a/ve/velib03.cpp b/ve/velib03.cpp index be16bd811..4c09a751b 100755 --- a/ve/velib03.cpp +++ b/ve/velib03.cpp @@ -167,7 +167,7 @@ void TDocumento::init() check_modules(); - TConfig c(CONFIG_DITTA, "ve"); + //TConfig c(CONFIG_DITTA, "ve"); // A cosa serviva questo ennesimo rallentamento? } TDocumento::TDocumento()