572ff303d1
git-svn-id: svn://10.65.10.50/branches/R_10_00@22945 c028cbd2-c16b-5b4b-a496-9718f37d4682
1300 lines
33 KiB
C++
Executable File
1300 lines
33 KiB
C++
Executable File
#include <automask.h>
|
||
#include <defmask.h>
|
||
#include <modaut.h>
|
||
#include <printer.h>
|
||
#include <recset.h>
|
||
#include <tabapp.h>
|
||
#include <utility.h>
|
||
|
||
#include "velib.h"
|
||
#include "../ca/calib01.h"
|
||
#include "veuml.h"
|
||
#include "veini.h"
|
||
#include "verig.h"
|
||
|
||
#include "vetbatr.h"
|
||
#include "vetbgmc.h"
|
||
#include "vetbnum.h"
|
||
#include "vetbprs.h"
|
||
#include "vetbrss.h"
|
||
#include "vetbspp.h"
|
||
#include "vehntip.h"
|
||
#include "vehntri.h"
|
||
#include "vetbtip.h"
|
||
#include "vetbtri.h"
|
||
|
||
#define TAB_GRMERC "GMC"
|
||
|
||
HIDDEN void add_frr_list(TEdit_field & e)
|
||
{
|
||
TList_sheet * sh = e.sheet();
|
||
|
||
if (sh != NULL)
|
||
{
|
||
TString_array & items = sh->rows_array();
|
||
TISAM_recordset r("USE %FRR");
|
||
|
||
for (bool ok = r.move_first(); ok; ok = r.move_next())
|
||
{
|
||
TToken_string data(r.get("CODTAB").as_string());
|
||
|
||
data.add(r.get("S0").as_string());
|
||
items.add(data);
|
||
}
|
||
}
|
||
}
|
||
|
||
HIDDEN void add_frd_list(TEdit_field & e)
|
||
{
|
||
TList_sheet * sh = e.sheet();
|
||
|
||
if (sh != NULL)
|
||
{
|
||
TString_array & items = sh->rows_array();
|
||
TISAM_recordset r("USE %FRD");
|
||
|
||
for (bool ok = r.move_first(); ok; ok = r.move_next())
|
||
{
|
||
TToken_string data(r.get("CODTAB").as_string());
|
||
|
||
data.add(r.get("S0").as_string());
|
||
items.add(data);
|
||
}
|
||
}
|
||
}
|
||
|
||
HIDDEN void add_fld_list(TEdit_field & e, int logicnum)
|
||
{
|
||
TList_sheet* sh = e.sheet();
|
||
if (sh != NULL)
|
||
{
|
||
TString_array& items = sh->rows_array();
|
||
TRelation rel(logicnum);
|
||
TRelation_description reldes(rel);
|
||
|
||
const RecDes& rd = prefix().get_recdes(logicnum);
|
||
for (int i = 0; i < rd.NFields; i++)
|
||
{
|
||
const RecFieldDes& fd = rd.Fd[i];
|
||
TToken_string data;
|
||
|
||
data << logicnum << '.' << fd.Name;
|
||
data.add(reldes.get_field_description(fd.Name));
|
||
items.add(data);
|
||
}
|
||
}
|
||
}
|
||
|
||
///////////////////////////////////////////////////////////
|
||
// TVendite_mask
|
||
///////////////////////////////////////////////////////////
|
||
|
||
class TVendite_mask : public TAutomask
|
||
{
|
||
TString4 _tab; // Voglio la tabella sempre sotto mano
|
||
|
||
protected:
|
||
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||
|
||
bool is_table(const char* tab) const { return _tab == tab; }
|
||
|
||
void get_printer_config(TString& name) const;
|
||
bool get_printer_name(TString& name) const;
|
||
void reset_printer_config() const;
|
||
|
||
bool on_tri_event(TOperable_field& o, TField_event e, long jolly);
|
||
bool on_tip_event(TOperable_field& o, TField_event e, long jolly);
|
||
bool on_num_event(TOperable_field& o, TField_event e, long jolly);
|
||
|
||
public:
|
||
const TString& table_code() const { return _tab; }
|
||
|
||
TVendite_mask(const char* name);
|
||
virtual ~TVendite_mask() { }
|
||
};
|
||
|
||
///////////////////////////////////////////////////////////
|
||
// TTIP_handlers_mask
|
||
///////////////////////////////////////////////////////////
|
||
|
||
class TTIP_handlers_mask : public TAutomask
|
||
{
|
||
TDocumento_mask * _docmask;
|
||
|
||
protected:
|
||
void add_mask_items(TList_field& l);
|
||
void build_items(TEdit_field& e, const char * flist);
|
||
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||
|
||
public:
|
||
void mask2prof(TTipo_documento & tipo);
|
||
void prof2mask(TTipo_documento & tipo);
|
||
|
||
TTIP_handlers_mask(const char * tipodoc);
|
||
virtual ~TTIP_handlers_mask() { delete _docmask; }
|
||
};
|
||
|
||
///////////////////////////////////////////////////////////
|
||
// TTRI_handlers_mask
|
||
///////////////////////////////////////////////////////////
|
||
|
||
class TTRI_handlers_mask : public TAutomask
|
||
{
|
||
TMask* _rigamask;
|
||
|
||
protected:
|
||
void add_mask_items(TList_field& l);
|
||
void build_items(TEdit_field& e, const char * flist);
|
||
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||
|
||
public:
|
||
void mask2prof(TTipo_riga_documento & tipo);
|
||
void prof2mask(TTipo_riga_documento & tipo);
|
||
|
||
TTRI_handlers_mask(const TTipo_riga_documento & tiporiga);
|
||
virtual ~TTRI_handlers_mask() { delete _rigamask; }
|
||
};
|
||
|
||
void TVendite_mask::get_printer_config(TString& config) const
|
||
{
|
||
config = _tab;
|
||
for (TEditable_field* f = get_key_field(1, true); f; f = get_key_field(1, false))
|
||
{
|
||
if (f->shown())
|
||
config << f->get();
|
||
}
|
||
}
|
||
|
||
bool TVendite_mask::get_printer_name(TString& name) const
|
||
{
|
||
TString parag; get_printer_config(parag);
|
||
TConfig ini(CONFIG_STAMPE, parag);
|
||
name = ini.get("Name");
|
||
return name.full();
|
||
}
|
||
|
||
void TVendite_mask::reset_printer_config() const
|
||
{
|
||
TString parag; get_printer_config(parag);
|
||
TConfig ini(CONFIG_STAMPE, parag);
|
||
ini.remove_all();
|
||
}
|
||
|
||
static TString4 __tab_codnum;
|
||
|
||
static bool tab_tip_filter(const TRelation* r)
|
||
{
|
||
if (__tab_codnum.blank())
|
||
return true;
|
||
|
||
const TString4 tipo = r->curr().get("CODTAB");
|
||
const TCodice_numerazione& cod_num = cached_numerazione(__tab_codnum);
|
||
for (int i = 0; i < cod_num.ntipi_doc(); i++ )
|
||
{
|
||
const TString& curtipo = cod_num.tipo_doc(i);
|
||
if (curtipo == tipo)
|
||
return true;
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
bool TVendite_mask::on_tip_event(TOperable_field& o, TField_event e, long jolly)
|
||
{
|
||
switch (o.dlg())
|
||
{
|
||
case F_PROFILO:
|
||
if (e == fe_init || e == fe_modify)
|
||
enable(DLG_CONFIG, !o.empty());
|
||
break;
|
||
case DLG_CONFIG:
|
||
if (e == fe_button && get(F_PROFILO).full())
|
||
{
|
||
TTipo_documento t(get(F_CODTAB));
|
||
TTIP_handlers_mask m(get(F_CODTAB));
|
||
|
||
m.set(F_NAMETIP, get(F_PROFILO));
|
||
m.prof2mask(t);
|
||
if (m.run() == K_ENTER)
|
||
m.mask2prof(t);
|
||
}
|
||
break;
|
||
default: break;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
bool TVendite_mask::on_tri_event(TOperable_field& o, TField_event e, long jolly)
|
||
{
|
||
switch (o.dlg())
|
||
{
|
||
case F_CODTAB:
|
||
if (e == fe_init || e == fe_modify)
|
||
enable(DLG_CONFIG, !o.empty());
|
||
break;
|
||
case DLG_CONFIG:
|
||
if (e == fe_button)
|
||
{
|
||
TTipo_riga_documento t(get(F_CODTAB));
|
||
TTRI_handlers_mask m(t);
|
||
TString name("verig");
|
||
|
||
name << t.codice();
|
||
m.set(F_NAMETRI, name);
|
||
m.prof2mask(t);
|
||
if (m.run() == K_ENTER)
|
||
m.mask2prof(t);
|
||
}
|
||
break;
|
||
default: break;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
bool TVendite_mask::on_num_event(TOperable_field& o, TField_event e, long jolly)
|
||
{
|
||
switch (o.dlg())
|
||
{
|
||
case FN_CODNUM:
|
||
if (e == fe_init || e == fe_modify)
|
||
{
|
||
__tab_codnum = o.get();
|
||
efield(FN_TIPODOC).browse()->cursor()->set_filterfunction(tab_tip_filter);
|
||
}
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
return true; //metodo che gestiva la stampante per le numerazioni documenti
|
||
}
|
||
|
||
bool TVendite_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||
{
|
||
if (is_table("NUM"))
|
||
return on_num_event(o, e, jolly);
|
||
if (is_table("TIP"))
|
||
return on_tip_event(o, e, jolly);
|
||
if (is_table("TRI"))
|
||
return on_tri_event(o, e, jolly);
|
||
return true;
|
||
}
|
||
|
||
TVendite_mask::TVendite_mask(const char* name) : TAutomask(name)
|
||
{
|
||
const TFixed_string n(name);
|
||
_tab = n.mid(4,3);
|
||
_tab.upper();
|
||
}
|
||
|
||
void TTIP_handlers_mask::mask2prof(TTipo_documento & tipo)
|
||
{
|
||
TFilename profname;
|
||
|
||
tipo.profile_name(profname);
|
||
profname.custom_path();
|
||
if (profname.find("custom") < 0)
|
||
{
|
||
TFilename srcname(profname);
|
||
|
||
profname = prefix().get_studio();
|
||
profname << SLASH << "custom" << SLASH << srcname;
|
||
fcopy(srcname, profname);
|
||
}
|
||
|
||
TConfig profile(profname, "MAIN");
|
||
|
||
profile.set("MODULE", get(F_MODULE));
|
||
profile.set("TIPOCR", get(F_TIPOCR));
|
||
profile.set("CONTROLLO_PREZZI", get(F_CNTPRZ));
|
||
profile.set(RDOC_PREZZO, get(F_PREZZO));
|
||
profile.set(RDOC_QTA, get(F_QTA));
|
||
profile.set(RDOC_QTAEVASA, get(F_QTAEVASA));
|
||
profile.set("QTA_MAG", get(F_QTAMAG));
|
||
profile.set("QTAEVASA_MAG", get(F_QTAEVASAMAG));
|
||
profile.set("TOTALECONT", get(F_TOTALECONT));
|
||
profile.set("CHECK_QTA", get(F_CHECK_QTA));
|
||
profile.set("LOAD_CONT", get(F_LOAD_CONT));
|
||
profile.set("DESCRIZIONE_DOC", get(F_DESCDOC));
|
||
profile.set("DESCRIZIONE_RDOC", get(F_DESCRDOC));
|
||
profile.set("NASCONDI_RIGHE_EVASE", get(F_HIDEEVASE));
|
||
profile.set("NON_EVADERE", get(F_NOTEVADI));
|
||
|
||
profile.remove_array("Title");
|
||
TSheet_field & sl = sfield(F_LABELS);
|
||
|
||
FOR_EACH_SHEET_ROW(sl, rl, rowl)
|
||
profile.set("Title", rowl->get(0), NULL, true, rl + 1);
|
||
profile.set_paragraph("HANDLERS");
|
||
profile.remove_array("Handler");
|
||
for (int i = 0 ; i < 10; i++)
|
||
profile.remove(format("%d", i));
|
||
|
||
TSheet_field & sh = sfield(F_HANDLERS);
|
||
|
||
FOR_EACH_SHEET_ROW(sh, r, row)
|
||
{
|
||
const short id = row->get_int(1);
|
||
|
||
profile.set("Handler", row->get_int(0), NULL, true, id);
|
||
}
|
||
|
||
profile.set_paragraph("DEFAULT");
|
||
profile.remove_array("Default");
|
||
|
||
TSheet_field & sd = sfield(F_DEFAULTS);
|
||
|
||
FOR_EACH_SHEET_ROW(sd, dr, drow)
|
||
{
|
||
const short id = drow->get_int(0);
|
||
|
||
profile.set("Default", drow->get(), NULL, true, id);
|
||
}
|
||
}
|
||
|
||
void TTIP_handlers_mask::prof2mask(TTipo_documento & tipo)
|
||
{
|
||
TFilename profname;
|
||
|
||
tipo.profile_name(profname);
|
||
|
||
TConfig profile(profname, "MAIN");
|
||
|
||
profile.write_protect();
|
||
set(F_MODULE, profile.get("MODULE"));
|
||
set(F_TIPOCR, profile.get("TIPOCR"));
|
||
set(F_CNTPRZ, profile.get("CONTROLLO_PREZZI"));
|
||
set(F_PREZZO, profile.get(RDOC_PREZZO));
|
||
set(F_QTA, profile.get(RDOC_QTA));
|
||
set(F_QTAEVASA, profile.get(RDOC_QTAEVASA));
|
||
set(F_QTAMAG, profile.get("QTA_MAG"));
|
||
set(F_QTAEVASAMAG, profile.get("QTAEVASA_MAG"));
|
||
set(F_TOTALECONT, profile.get("TOTALECONT"));
|
||
set(F_CHECK_QTA, profile.get("CHECK_QTA"));
|
||
set(F_LOAD_CONT, profile.get("LOAD_CONT"));
|
||
set(F_DESCDOC, profile.get("DESCRIZIONE_DOC"));
|
||
set(F_DESCRDOC, profile.get("DESCRIZIONE_RDOC"));
|
||
set(F_HIDEEVASE, profile.get("NASCONDI_RIGHE_EVASE"));
|
||
set(F_NOTEVADI, profile.get("NON_EVADERE"));
|
||
|
||
TSheet_field & sl = sfield(F_LABELS);
|
||
int npages = 1;
|
||
for (; _docmask->page_win(npages) != NULL_WIN; npages++);
|
||
|
||
if (_docmask->id2pos(F_CDC1) >= 0)
|
||
npages--;
|
||
sl.destroy();
|
||
for (int i = 1 ; i <= npages; i++)
|
||
{
|
||
TToken_string & row = sl.row(i - 1);
|
||
|
||
row = profile.get("Title", NULL, i, "");
|
||
}
|
||
profile.set_paragraph("HANDLERS");
|
||
TAssoc_array& handlers = profile.list_variables();
|
||
TSheet_field & sh = sfield(F_HANDLERS);
|
||
|
||
sh.destroy();
|
||
FOR_EACH_ASSOC_STRING(handlers, obj, key, str)
|
||
{
|
||
TToken_string & row = sh.row(-1);
|
||
int id = 0, hd = 0;
|
||
if (*key == 'H' && strchr(str, '|') == NULL) // Provo a gestire il caso Handler(105) = 3
|
||
{
|
||
row.add(atoi(str));
|
||
|
||
const TFixed_string k(key);
|
||
|
||
row.add(atoi(k.after('(')));
|
||
}
|
||
else // Provo a gestire il caso 1 = 105|3
|
||
{
|
||
TToken_string riga = str;
|
||
|
||
row.add(riga.get_int(1));
|
||
row.add(riga.get_int(0));
|
||
}
|
||
sh.check_row(sh.items() - 1);
|
||
}
|
||
profile.set_paragraph("DEFAULT");
|
||
TSheet_field & sd = sfield(F_DEFAULTS);
|
||
|
||
sd.destroy();
|
||
TAssoc_array& defaults = profile.list_variables();
|
||
|
||
FOR_EACH_ASSOC_STRING(defaults, obj, dkey, dstr)
|
||
{
|
||
TToken_string & row = sd.row(-1);
|
||
if (strchr(dstr, '|') == NULL) // Provo a gestire il caso Default(105) = 3
|
||
{
|
||
const TFixed_string k(dkey);
|
||
|
||
row.add(atoi(k.after('(')));
|
||
row.add(dstr);
|
||
}
|
||
else // Provo a gestire il caso Default(0) = 105|3
|
||
row = dstr;
|
||
}
|
||
}
|
||
|
||
void TTIP_handlers_mask::add_mask_items(TList_field& l)
|
||
{
|
||
TToken_string codes;
|
||
TToken_string descrs;
|
||
|
||
FOR_EACH_MASK_FIELD(*_docmask, i, f)
|
||
{
|
||
const short id = f->dlg();
|
||
|
||
if (f->is_editable() && f->enabled_default() && f->shown_default())
|
||
{
|
||
TString descr;
|
||
|
||
codes.add(id);
|
||
descr << id << " - " << f->prompt();
|
||
const TFieldref * fld = f->field();
|
||
if (fld != NULL)
|
||
descr << " - " << fld->name();
|
||
descr.strip(":!");
|
||
descr.strip_double_spaces();
|
||
descrs.add(descr);
|
||
}
|
||
}
|
||
l.replace_items(codes, descrs);
|
||
}
|
||
|
||
void TTIP_handlers_mask::build_items(TEdit_field& e, const char * flist)
|
||
{
|
||
TList_sheet * l = e.sheet();
|
||
|
||
if (l != NULL)
|
||
{
|
||
TString_array & data = l->rows_array();
|
||
|
||
data.destroy();
|
||
if (flist && *flist)
|
||
{
|
||
TToken_string tok(flist);
|
||
FOR_EACH_TOKEN(tok, sid)
|
||
{
|
||
short id = atoi(sid);
|
||
const int pos = _docmask->id2pos(id);
|
||
|
||
if (pos >= 0)
|
||
{
|
||
TString descr(_docmask->fld(pos).prompt());
|
||
TToken_string r;
|
||
|
||
r.add(id);
|
||
descr.strip(":-!");
|
||
descr.strip_double_spaces();
|
||
r.add(descr);
|
||
data.add(r);
|
||
}
|
||
}
|
||
}
|
||
FOR_EACH_MASK_FIELD(*_docmask, i, f)
|
||
{
|
||
const short id = f->dlg();
|
||
|
||
if (id >= F_USERFLD && id < BASE_PIEDE)
|
||
{
|
||
TString descr(f->prompt());
|
||
|
||
if (descr.full())
|
||
{
|
||
TToken_string r;
|
||
|
||
r.add(id);
|
||
descr.strip(":-!");
|
||
descr.strip_double_spaces();
|
||
r.add(descr);
|
||
data.add(r);
|
||
}
|
||
}
|
||
}
|
||
if (data.items() == 0)
|
||
data.add("|Non utilizzabile");
|
||
}
|
||
}
|
||
|
||
bool TTIP_handlers_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||
{
|
||
switch (o.dlg())
|
||
{
|
||
case FH_HANDLER:
|
||
if ((o.mask().get_sheet()->dlg() == F_HANDLERS) && (e == fe_init || e == fe_modify))
|
||
{
|
||
const int hnum = (int) o.get_long();
|
||
switch (hnum)
|
||
{
|
||
case 1:
|
||
build_items(o.mask().efield(FH_FIELD), TOSTRING(F_ORAPART));
|
||
break;
|
||
case 2:
|
||
build_items(o.mask().efield(FH_FIELD), "");
|
||
break;
|
||
case 3:
|
||
build_items(o.mask().efield(FH_FIELD), TOSTRING(F_NUMDOCRIF));
|
||
break;
|
||
case 4:
|
||
build_items(o.mask().efield(FH_FIELD), "");
|
||
break;
|
||
case 6:
|
||
build_items(o.mask().efield(FH_FIELD), "");
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
TTIP_handlers_mask::TTIP_handlers_mask(const char * tipodoc) : TAutomask("vehntip")
|
||
{
|
||
_docmask = new TDocumento_mask(tipodoc);
|
||
add_frr_list(efield(F_PREZZO));
|
||
add_frd_list(efield(F_TOTALECONT));
|
||
add_frr_list(efield(F_QTA));
|
||
add_frr_list(efield(F_QTAEVASA));
|
||
add_frr_list(efield(F_QTAMAG));
|
||
add_frr_list(efield(F_QTAEVASAMAG));
|
||
add_mask_items(sfield(F_DEFAULTS).sheet_mask().lfield(FD_FIELD));
|
||
}
|
||
|
||
void TTRI_handlers_mask::add_mask_items(TList_field& l)
|
||
{
|
||
TToken_string codes;
|
||
TToken_string descrs;
|
||
|
||
FOR_EACH_MASK_FIELD(*_rigamask, i, f)
|
||
{
|
||
const short id = f->dlg();
|
||
|
||
if (f->is_editable() && f->enabled_default() && f->shown_default() && id < FR_END)
|
||
{
|
||
TString descr;
|
||
TString fldname;
|
||
|
||
codes.add(id);
|
||
descr << id << " - " << f->prompt();
|
||
switch (id)
|
||
{
|
||
case FR_TIPORIGA :
|
||
fldname = RDOC_TIPORIGA;
|
||
break;
|
||
case FR_CODMAG :
|
||
case FR_CODDEP :
|
||
fldname = RDOC_CODMAG;
|
||
break;
|
||
case FR_CODART :
|
||
fldname = RDOC_CODART;
|
||
break;
|
||
case FR_LIV1 :
|
||
case FR_LIV2 :
|
||
case FR_LIV3 :
|
||
case FR_LIV4 :
|
||
fldname = RDOC_LIVELLO;
|
||
break;
|
||
case FR_DESCR :
|
||
fldname = RDOC_DESCR;
|
||
break;
|
||
case FR_UMQTA :
|
||
fldname = RDOC_UMQTA;
|
||
break;
|
||
case FR_PREZZO :
|
||
fldname = RDOC_PREZZO;
|
||
break;
|
||
case FR_CODIVA :
|
||
fldname = RDOC_CODIVA;
|
||
break;
|
||
case FR_QTA :
|
||
fldname = RDOC_QTA;
|
||
break;
|
||
case FR_QTAEVASA :
|
||
fldname = RDOC_QTAEVASA;
|
||
break;
|
||
case FR_RIGAEVASA :
|
||
fldname = RDOC_RIGAEVASA;
|
||
break;
|
||
case FR_TARA :
|
||
fldname = RDOC_TARA;
|
||
break;
|
||
case FR_PNETTO :
|
||
fldname = RDOC_PNETTO;
|
||
break;
|
||
case FR_NCOLLI :
|
||
fldname = RDOC_NCOLLI;
|
||
break;
|
||
case FR_DAEVADERE :
|
||
fldname = RDOC_DAEVADERE;
|
||
break;
|
||
case FR_SCONTO :
|
||
fldname = RDOC_SCONTO;
|
||
break;
|
||
case FR_PERCPROV :
|
||
fldname = RDOC_PERCPROV;
|
||
break;
|
||
case FR_IMPFISUN :
|
||
fldname = RDOC_IMPFISUN;
|
||
break;
|
||
case FR_IMPFISSO :
|
||
fldname = RDOC_IMPFISSO;
|
||
break;
|
||
case FR_ADDIVA :
|
||
fldname = RDOC_ADDIVA;
|
||
break;
|
||
case FR_ASPBENI :
|
||
fldname = RDOC_ASPBENI;
|
||
break;
|
||
case FR_CAUS :
|
||
fldname = RDOC_CAUSMAG;
|
||
break;
|
||
case FR_CODMAGC :
|
||
case FR_CODDEPC :
|
||
fldname = RDOC_CODMAGC;
|
||
break;
|
||
case FR_DATACONS :
|
||
fldname = RDOC_DATACONS;
|
||
break;
|
||
case FR_CODARTMAG :
|
||
fldname = RDOC_CODARTMAG;
|
||
break;
|
||
case FR_CHECKED :
|
||
fldname = RDOC_CHECKED;
|
||
break;
|
||
case FR_QTAGG1 :
|
||
fldname = RDOC_QTAGG1;
|
||
break;
|
||
case FR_QTAGG2 :
|
||
fldname = RDOC_QTAGG2;
|
||
break;
|
||
case FR_QTAGG3 :
|
||
fldname = RDOC_QTAGG3;
|
||
break;
|
||
case FR_QTAGG4 :
|
||
fldname = RDOC_QTAGG4;
|
||
break;
|
||
case FR_QTAGG5 :
|
||
fldname = RDOC_QTAGG5;
|
||
break;
|
||
case FR_IMPIANTO :
|
||
fldname = RDOC_IMPIANTO;
|
||
break;
|
||
case FR_LINEA :
|
||
fldname = RDOC_LINEA;
|
||
break;
|
||
case FR_CODAGG1 :
|
||
fldname = RDOC_CODAGG1;
|
||
break;
|
||
case FR_CODAGG2 :
|
||
fldname = RDOC_CODAGG2;
|
||
break;
|
||
case FR_RIDPREZZO :
|
||
fldname = RDOC_RIDPREZZO;
|
||
break;
|
||
case FR_PERCPROV1 :
|
||
fldname = RDOC_PERCPROV1;
|
||
break;
|
||
case FR_TIPODET :
|
||
fldname = RDOC_TIPODET;
|
||
break;
|
||
default:
|
||
const TFieldref * fld = f->field();
|
||
if (fld != NULL)
|
||
fldname = fld->name();
|
||
break;
|
||
}
|
||
if (fldname.full())
|
||
descr << " - " << fldname;
|
||
descr.strip(":!");
|
||
descr.strip_double_spaces();
|
||
descrs.add(descr);
|
||
}
|
||
}
|
||
l.replace_items(codes, descrs);
|
||
}
|
||
|
||
void TTRI_handlers_mask::build_items(TEdit_field& e, const char * flist)
|
||
{
|
||
TList_sheet * l = e.sheet();
|
||
|
||
if (l != NULL)
|
||
{
|
||
TString_array & data = l->rows_array();
|
||
|
||
data.destroy();
|
||
if (flist && *flist)
|
||
{
|
||
TToken_string tok(flist);
|
||
|
||
FOR_EACH_TOKEN(tok, sid)
|
||
{
|
||
short id = atoi(sid);
|
||
const int pos = _rigamask->id2pos(id);
|
||
|
||
if (pos >= 0)
|
||
{
|
||
TString descr(_rigamask->fld(pos).prompt());
|
||
TToken_string r;
|
||
|
||
r.add(id);
|
||
descr.strip(":_-!");
|
||
descr.strip_double_spaces();
|
||
r.add(descr);
|
||
data.add(r);
|
||
}
|
||
}
|
||
}
|
||
FOR_EACH_MASK_FIELD(*_rigamask, i, f)
|
||
{
|
||
const short id = f->dlg();
|
||
|
||
if (((id >= FR_JOLLY1 && id <= FR_JOLLY10) ||
|
||
(id >= FR_CODAGG1 && id <= FR_CODAGG2)))
|
||
{
|
||
TString descr(f->prompt());
|
||
|
||
if (descr.full())
|
||
{
|
||
TToken_string r;
|
||
|
||
r.add(id);
|
||
descr.strip(":-!");
|
||
descr.strip_double_spaces();
|
||
r.add(descr);
|
||
data.add(r);
|
||
}
|
||
}
|
||
}
|
||
if (data.items() == 0)
|
||
data.add("|Non utilizzabile");
|
||
}
|
||
}
|
||
|
||
bool TTRI_handlers_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||
{
|
||
switch (o.dlg())
|
||
{
|
||
case FH_HANDLERR:
|
||
if ((o.mask().get_sheet()->dlg() == F_HANDLERSR) && (e == fe_init || e == fe_modify))
|
||
{
|
||
const int hnum = (int) o.get_long();
|
||
switch (hnum)
|
||
{
|
||
case 1:
|
||
build_items(o.mask().efield(FH_FIELDR), TOSTRING(FR_PREZZO));
|
||
break;
|
||
case 3:
|
||
build_items(o.mask().efield(FH_FIELDR), TOSTRING(FR_CODART));
|
||
break;
|
||
case 4:
|
||
build_items(o.mask().efield(FH_FIELDR), TOSTRING(FR_CODART));
|
||
break;
|
||
case 5:
|
||
build_items(o.mask().efield(FH_FIELDR), TOSTRING(FR_CODART));
|
||
break;
|
||
case 6:
|
||
build_items(o.mask().efield(FH_FIELDR), TOSTRING(FR_CODART));
|
||
break;
|
||
case 7:
|
||
build_items(o.mask().efield(FH_FIELDR), TOSTRING(FR_CODART));
|
||
break;
|
||
case 8:
|
||
build_items(o.mask().efield(FH_FIELDR), TOSTRING(FR_LIV1) "|" TOSTRING(FR_LIV2) "|" TOSTRING(FR_LIV3) "|" TOSTRING(FR_LIV4));
|
||
break;
|
||
default:
|
||
build_items(o.mask().efield(FH_FIELDR),"\"" "\"");
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
void TTRI_handlers_mask::mask2prof(TTipo_riga_documento & tipo)
|
||
{
|
||
TFilename profname("verig");
|
||
|
||
profname << tipo.codice();
|
||
profname.ext("ini");
|
||
profname.custom_path();
|
||
if (profname.find("custom") < 0)
|
||
{
|
||
TFilename srcname(profname);
|
||
|
||
profname = prefix().get_studio();
|
||
profname << SLASH << "custom" << SLASH << srcname;
|
||
fcopy(srcname, profname);
|
||
}
|
||
|
||
TConfig profile(profname, "MAIN");
|
||
|
||
profile.set("NODESC", get(F_NODESC));
|
||
profile.set("VARP+", get(F_VARP));
|
||
profile.set("VARP-", get(F_VARN));
|
||
profile.set(RDOC_PREZZO, get(F_PREZZO));
|
||
profile.set(RDOC_QTA, get(F_QTAR));
|
||
profile.set(RDOC_QTAEVASA, get(F_QTAEVASAR));
|
||
profile.set("QTA_MAG", get(F_QTAMAGR));
|
||
profile.set("QTAEVASA_MAG", get(F_QTAEVASAMAGR));
|
||
profile.set("LIVGEN", get(F_LIVGEN1), NULL, true, 1);
|
||
profile.set("LIVGEN", get(F_LIVGEN2), NULL, true, 2);
|
||
profile.set("LIVGEN", get(F_LIVGEN3), NULL, true, 3);
|
||
profile.set("LIVGEN", get(F_LIVGEN4), NULL, true, 4);
|
||
profile.set("SEARCNUMS", get(F_SEARCNUMS));
|
||
profile.set("MAXROWSART", get(F_MAXROWSART));
|
||
profile.set("SEARCHACTDOCS", get(F_SEARCHACTDOCS));
|
||
profile.set("SELCLIFO", get(F_SELCLIFO));
|
||
profile.set("FIELDSTOUPDATE", get(F_FIELDSTOUPDATE));
|
||
profile.set_paragraph("HANDLERS");
|
||
profile.remove_array("Handler");
|
||
profile.remove("NHANDLERS");
|
||
for (int i = 0 ; i < 10; i++)
|
||
profile.remove(format("%d", i));
|
||
|
||
TSheet_field& sh = sfield(F_HANDLERSR);
|
||
FOR_EACH_SHEET_ROW(sh, r, row)
|
||
{
|
||
const short id = row->get_int(1);
|
||
profile.set("Handler", row->get_int(0), NULL, true, id);
|
||
}
|
||
profile.set_paragraph("DEFAULT");
|
||
profile.remove_array("Default");
|
||
|
||
TSheet_field& sd = sfield(F_DEFAULTSR);
|
||
FOR_EACH_SHEET_ROW(sd, dr, drow)
|
||
{
|
||
const short id = drow->get_int(0);
|
||
profile.set("Default", drow->get(), NULL, true, id);
|
||
}
|
||
}
|
||
|
||
void TTRI_handlers_mask::prof2mask(TTipo_riga_documento & tipo)
|
||
{
|
||
TFilename profname;
|
||
|
||
tipo.profile_name(profname);
|
||
|
||
TConfig profile(profname, "MAIN");
|
||
|
||
profile.write_protect(); // Altrimenti non si distrugge!!!
|
||
set(F_NODESC, profile.get("NODESC"));
|
||
set(F_VARP, profile.get("VARP+"));
|
||
set(F_VARN, profile.get("VARP-"));
|
||
set(F_PREZZO, profile.get(RDOC_PREZZO));
|
||
set(F_QTAR, profile.get(RDOC_QTA));
|
||
set(F_QTAEVASAR, profile.get(RDOC_QTAEVASA));
|
||
set(F_QTAMAGR, profile.get("QTA_MAG"));
|
||
set(F_QTAEVASAMAGR, profile.get("QTAEVASA_MAG"));
|
||
set(F_LIVGEN1, profile.get("LIVGEN", NULL, 1));
|
||
set(F_LIVGEN2, profile.get("LIVGEN", NULL, 2));
|
||
set(F_LIVGEN3, profile.get("LIVGEN", NULL, 3));
|
||
set(F_LIVGEN4, profile.get("LIVGEN", NULL, 4));
|
||
set(F_SERCHYEARS, profile.get("SERCHYEARS"));
|
||
set(F_SEARCNUMS, profile.get("SEARCNUMS"));
|
||
set(F_MAXROWSART, profile.get("MAXROWSART"));
|
||
set(F_SEARCHACTDOCS, profile.get("SEARCHACTDOCS"));
|
||
set(F_SELCLIFO, profile.get("SELCLIFO"));
|
||
set(F_FIELDSTOUPDATE, profile.get("FIELDSTOUPDATE"));
|
||
|
||
profile.set_paragraph("HANDLERS");
|
||
|
||
TAssoc_array& handlers = profile.list_variables();
|
||
TSheet_field & sh = sfield(F_HANDLERSR);
|
||
|
||
sh.destroy();
|
||
FOR_EACH_ASSOC_STRING(handlers, obj, key, str)
|
||
{
|
||
int id = 0, hd = 0;
|
||
if (*key == 'H' && strchr(str, '|') == NULL) // Provo a gestire il caso Handler(105) = 3
|
||
{
|
||
const TFixed_string k(key);
|
||
id = atoi(k.after('('));
|
||
hd = atoi(str);
|
||
}
|
||
else // Provo a gestire il caso 1 = 105|3
|
||
if (*key != 'N')
|
||
{
|
||
const TToken_string riga = str;
|
||
riga.get(0, id);
|
||
riga.get(1, hd);
|
||
}
|
||
if (hd > 0)
|
||
{
|
||
TToken_string & row = sh.row(-1);
|
||
row.add(hd);
|
||
row.add(id);
|
||
sh.check_row(sh.items() - 1);
|
||
}
|
||
}
|
||
profile.set_paragraph("DEFAULT");
|
||
TSheet_field & sd = sfield(F_DEFAULTSR);
|
||
|
||
sd.destroy();
|
||
TAssoc_array& defaults = profile.list_variables();
|
||
|
||
FOR_EACH_ASSOC_STRING(defaults, obj, dkey, s)
|
||
{
|
||
TToken_string & row = sd.row(-1);
|
||
if (strchr(s, '|') == NULL) // Provo a gestire il caso Default(105) = 3
|
||
{
|
||
const TFixed_string k(dkey);
|
||
|
||
row.add(atoi(k.after('(')));
|
||
row.add(s);
|
||
}
|
||
else // Provo a gestire il caso Default(0) = 105|3
|
||
row = s;
|
||
}
|
||
}
|
||
|
||
TTRI_handlers_mask::TTRI_handlers_mask(const TTipo_riga_documento & tiporiga) : TAutomask("vehntri")
|
||
{
|
||
TString name;
|
||
|
||
|
||
tiporiga.mask_name(name);
|
||
_rigamask = new TMask(name);
|
||
add_frd_list(efield(F_TOTALECONT));
|
||
add_frr_list(efield(F_QTAR));
|
||
add_frr_list(efield(F_QTAEVASAR));
|
||
add_frr_list(efield(F_QTAMAGR));
|
||
add_frr_list(efield(F_QTAEVASAMAGR));
|
||
for (int i = 0 ; i < 4; i++)
|
||
{
|
||
const short id = F_LIVGEN1 + i;
|
||
TEdit_field & e = efield(id);
|
||
|
||
add_fld_list(e, LF_ANAMAG);
|
||
add_fld_list(e, LF_DOC);
|
||
add_fld_list(e, LF_RIGHEDOC);
|
||
}
|
||
add_mask_items(sfield(F_DEFAULTSR).sheet_mask().lfield(FD_FIELDR));
|
||
}
|
||
|
||
///////////////////////////////////////////////////////////
|
||
// TVendite_tabapp
|
||
///////////////////////////////////////////////////////////
|
||
|
||
class TVendite_tabapp : public TTable_application
|
||
{
|
||
protected:
|
||
virtual const char* extra_modules() const {return "dt";}
|
||
virtual TMask* set_mask(TMask* m);
|
||
virtual void add_anal_fields(TVendite_mask& vm);
|
||
virtual void init_query_mode(TMask& m);
|
||
virtual int read(TMask& m);
|
||
virtual int write(const TMask& m);
|
||
virtual int rewrite(const TMask& m);
|
||
virtual bool user_create();
|
||
virtual bool get_next_key(TToken_string& key);
|
||
void write_gmc(const TMask& m, TRectype& curr);
|
||
static bool codgmc_handler(TMask_field& f, KEY k);
|
||
|
||
bool is_table(const char* tab) const { return get_tabname() == tab; }
|
||
|
||
public:
|
||
};
|
||
|
||
void TVendite_tabapp::add_anal_fields(TVendite_mask& vm)
|
||
{
|
||
int y = 4;
|
||
short dlg = F_ANAL1;
|
||
int nfields = 0;
|
||
const TMultilevel_code_info& fasinfo = ca_multilevel_code_info(LF_FASI);
|
||
const TMultilevel_code_info& cominfo = ca_multilevel_code_info(LF_COMMESSE);
|
||
const TMultilevel_code_info& cdcinfo = ca_multilevel_code_info(LF_CDC);
|
||
int fasi_fields = fasinfo.levels();
|
||
const int cdc_fields = cdcinfo.levels();
|
||
const int com_fields = cominfo.levels();
|
||
const bool use_fsc = fasi_fields > 0;
|
||
|
||
if (use_fsc && fasinfo.parent() == LF_CDC)
|
||
{
|
||
nfields = ca_create_fields(vm, 1, LF_FASI, 2, y, dlg, dlg+50, 0x0, "S1", 20);
|
||
|
||
const int dlgf = dlg + com_fields;
|
||
fasi_fields -= com_fields;
|
||
const int offset = 61 - vm.field(dlgf).field()->from();
|
||
|
||
for (short i = 0 ; i< fasi_fields; i++)
|
||
{
|
||
TFieldref * fr = (TFieldref *) vm.field(dlgf + i).field();
|
||
|
||
if (fr != NULL)
|
||
{
|
||
TEdit_field & fld = vm.efield(dlgf + i);
|
||
TString16 str;
|
||
|
||
str.format("S1[%d,%d]", fr->from() + offset + 1, fr->to() + offset);
|
||
fld.set_field(str);
|
||
}
|
||
}
|
||
}
|
||
else
|
||
nfields = ca_create_fields(vm, 1, LF_CDC, 2, y, dlg, dlg+50, 0x0, "S1", 20);
|
||
dlg += nfields;
|
||
y += nfields;
|
||
if (use_fsc && fasinfo.parent() == LF_COMMESSE)
|
||
{
|
||
nfields = ca_create_fields(vm, 1, LF_FASI, 2, y, dlg, dlg+50, 0x0, "S1", 40);
|
||
const int dlgf = dlg + com_fields;
|
||
fasi_fields -= com_fields;
|
||
const int offset = 60 - vm.field(dlgf).field()->from();
|
||
|
||
for (short i = 0 ; i < fasi_fields; i++)
|
||
{
|
||
TFieldref * fr = (TFieldref *) vm.field(dlgf + i).field();
|
||
|
||
if (fr != NULL)
|
||
{
|
||
TEdit_field & fld = vm.efield(dlgf + i);
|
||
TString16 str;
|
||
|
||
str.format("S1[%d,%d]", fr->from() + offset + 1, fr->to() + offset);
|
||
fld.set_field(str);
|
||
}
|
||
}
|
||
}
|
||
else
|
||
nfields = ca_create_fields(vm, 1, LF_COMMESSE, 2, y, dlg, dlg+50, 0x0, "S1", 40);
|
||
dlg += nfields;
|
||
y += nfields;
|
||
if (use_fsc && fasinfo.parent() <= 0)
|
||
nfields = ca_create_fields(vm, 1, LF_FASI, 2, y, dlg, dlg+50, 0x0, "S1", 60);
|
||
|
||
}
|
||
|
||
TMask* TVendite_tabapp::set_mask(TMask* m)
|
||
{
|
||
if (m == NULL)
|
||
{
|
||
TFilename mn; get_mask_name(mn);
|
||
TVendite_mask* vm = new TVendite_mask(mn);
|
||
|
||
if (ca_config().get_int("Authorizations") != 0)
|
||
{
|
||
// Crea i campi per i conti analitici (vendite e acquisti)
|
||
if (vm->table_code() == "SPP")
|
||
{
|
||
ca_create_fields(*vm, 0, LF_PCONANA, 2, 11, SPP_CDC_V1, SPP_CDC_V1+50, 0x0, "S1");
|
||
ca_create_fields(*vm, 0, LF_PCONANA, 2, 16, SPP_CDC_A1, SPP_CDC_A1+50, 0x0, "S2");
|
||
add_anal_fields(*vm);
|
||
} else
|
||
if (vm->table_code() == "PRS")
|
||
{
|
||
ca_create_fields(*vm, 0, LF_PCONANA, 2, 12, PRS_CDC_V1, PRS_CDC_V1+10, 0x0, "S1");
|
||
ca_create_fields(*vm, 0, LF_PCONANA, 2, 18, PRS_CDC_A1, PRS_CDC_A1+10, 0x0, "S2");
|
||
add_anal_fields(*vm);
|
||
} else
|
||
if (vm->table_code() == "RSS")
|
||
{
|
||
ca_create_fields(*vm, 0, LF_PCONANA, 2, 16, RSS_CDC_V1, RSS_CDC_V1+10, 0x0, "S1");
|
||
add_anal_fields(*vm);
|
||
} else
|
||
if (vm->table_code() == "ATR")
|
||
{
|
||
ca_create_fields(*vm, 0, LF_PCONANA, 2, 12, ATR_CDC_V1, ATR_CDC_V1+10, 0x0, "S1");
|
||
add_anal_fields(*vm);
|
||
}
|
||
}
|
||
m = vm;
|
||
}
|
||
return TTable_application::set_mask(m);
|
||
}
|
||
|
||
void TVendite_tabapp::init_query_mode(TMask& m)
|
||
{
|
||
if (is_table("RSS"))
|
||
{
|
||
m.enable(RSS_RAGSOC);
|
||
}
|
||
}
|
||
|
||
bool TVendite_tabapp::get_next_key(TToken_string& key)
|
||
{
|
||
if (is_table("NAR"))
|
||
{
|
||
long n = 1;
|
||
TEdit_field& codice = curr_mask().efield(101);
|
||
TCursor& cur = *codice.browse()->cursor();
|
||
if (cur.items() > 0)
|
||
{
|
||
cur = cur.items()-1;
|
||
n += cur.curr().get_long("CODTAB");
|
||
}
|
||
key.format("101|%6ld", n);
|
||
return true;
|
||
}
|
||
return TTable_application::get_next_key(key);
|
||
}
|
||
|
||
int TVendite_tabapp::read(TMask& m)
|
||
{
|
||
int err = Tab_application::read(m);
|
||
if (err == NOERR)
|
||
{
|
||
const TRectype& curr = get_relation()->curr();
|
||
|
||
if (curr.exist("R10") && curr.get_real("R10").is_zero())
|
||
{
|
||
const TString& r0 = curr.get("R0");
|
||
if (is_table("SPP"))
|
||
m.set(SPP_PREZZO, r0); else
|
||
if (is_table("PRS"))
|
||
m.set(PRS_PREZZO, r0); else
|
||
if (is_table("RSS"))
|
||
m.set(RSS_PREZZO, r0); else
|
||
if (is_table("ATR"))
|
||
m.set(ATR_PREZZO, r0);
|
||
}
|
||
|
||
//in caso dei grmerc sono cazzi, perch<63> lo sheet va riempito usando il contenuto di S1 ed S2, che sono tokenstring..
|
||
//..di tokenstrings!
|
||
if (is_table("GMC"))
|
||
{
|
||
//intanto deve controllare da configurazione se enablare o meno la colonna CATVEN
|
||
|
||
TSheet_field& listini = m.sfield(F_RIGHE_LIS);
|
||
listini.enable_column(S_CATVEN, ini_get_bool(CONFIG_DITTA, "ve", "GESLISCV"));
|
||
|
||
TToken_string stringona(140, ';');
|
||
TString s = curr.get("S1");
|
||
if (s.full())
|
||
{
|
||
stringona.add(s);
|
||
s = curr.get("S2");
|
||
if (s.full())
|
||
stringona.add(s);
|
||
}
|
||
|
||
listini.destroy();
|
||
//questo serve per settare il separatore in modo che non mandi in confusione l'editor degli archivi..
|
||
//..separator <20> definito nella maschera
|
||
TToken_string stringhina(16, listini.separator());
|
||
FOR_EACH_TOKEN(stringona, str)
|
||
{
|
||
stringhina = str;
|
||
if (stringhina.find('|') >= 0) //converte eventuali pipe standard in broken pipe
|
||
stringhina.replace('|', stringhina.separator());
|
||
listini.row(-1) = stringhina;
|
||
listini.check_row(listini.items() - 1);
|
||
}
|
||
listini.force_update();
|
||
}
|
||
}
|
||
return err;
|
||
}
|
||
|
||
bool TVendite_tabapp::codgmc_handler(TMask_field& f, KEY k)
|
||
{
|
||
TMask& m = f.mask();
|
||
if (m.query_mode() && k == K_ENTER)
|
||
{
|
||
const TString& codice = m.get(f.dlg()); //stringa immessa nella maschera
|
||
const TString& codtab = cache().get("GMC", codice, "CODTAB"); //stringa cercata nella tabella
|
||
if (codtab.empty()) //se non trovi la stringa in tabella (in codice magazzino non esiste->se in insert mode)
|
||
{
|
||
const int lungh = codice.len();
|
||
if (lungh > 0 && lungh < 3)
|
||
return f.error_box("Il codice del gruppo merceologico deve avere obbligatoriamente lunghezza 3");
|
||
}
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
void TVendite_tabapp::write_gmc(const TMask& m, TRectype& curr)
|
||
{
|
||
//la tabella gmc <20> + incasinata causa la presenza di uno sheet che va salvato come tokenstring(;separated)..
|
||
//di tokenstrings(|separated) in uno o due campi alfanumerici
|
||
TSheet_field& listini = m.sfield(F_RIGHE_LIS);
|
||
TToken_string s1(70, ';'), s2(70, ';');
|
||
FOR_EACH_SHEET_ROW (listini, r, riga)
|
||
{
|
||
TToken_string mini_string(12, SAFE_PIPE_CHR); //separatore broken_pipe !!!
|
||
mini_string.add(riga->get(0)); //catven
|
||
mini_string.add(riga->get()); //codlis
|
||
mini_string.add(riga->get()); //ricarico
|
||
mini_string.trim();
|
||
if (!mini_string.empty_items())
|
||
{
|
||
if (s1.len() + mini_string.len() < 70)
|
||
s1.add(mini_string);
|
||
else
|
||
{
|
||
if (s2.len() + mini_string.len() < 70)
|
||
s2.add(mini_string);
|
||
}
|
||
}
|
||
}
|
||
curr.put("S1", s1);
|
||
curr.put("S2", s2);
|
||
}
|
||
|
||
int TVendite_tabapp::write(const TMask& m)
|
||
{
|
||
TRectype& curr = get_relation()->curr();
|
||
if (is_table("SPP"))
|
||
curr.put("R0", m.get(SPP_PREZZO)); else
|
||
if (is_table("PRS"))
|
||
curr.put("R0", m.get(PRS_PREZZO)); else
|
||
if (is_table("RSS"))
|
||
curr.put("R0", m.get(RSS_PREZZO)); else
|
||
if (is_table("ATR"))
|
||
curr.put("R0", m.get(ATR_PREZZO));
|
||
if (is_table("GMC"))
|
||
write_gmc(m ,curr);
|
||
|
||
return Tab_application::write(m);
|
||
}
|
||
|
||
int TVendite_tabapp::rewrite(const TMask& m)
|
||
{
|
||
TRectype& curr = get_relation()->curr();
|
||
|
||
if (is_table("SPP"))
|
||
curr.put("R0", m.get(SPP_PREZZO)); else
|
||
if (is_table("PRS"))
|
||
curr.put("R0", m.get(PRS_PREZZO)); else
|
||
if (is_table("RSS"))
|
||
curr.put("R0", m.get(RSS_PREZZO)); else
|
||
if (is_table("ATR"))
|
||
curr.put("R0", m.get(ATR_PREZZO));
|
||
if (is_table("GMC"))
|
||
write_gmc(m ,curr);
|
||
|
||
return Tab_application::rewrite(m);
|
||
}
|
||
|
||
|
||
bool TVendite_tabapp::user_create()
|
||
{
|
||
bool ok = TTable_application::user_create();
|
||
if (ok)
|
||
{
|
||
const TString& name = get_tabname();
|
||
if (name == TAB_GRMERC)
|
||
{
|
||
TMask& mask = *get_mask();
|
||
mask.set_handler(201, codgmc_handler);
|
||
}
|
||
}
|
||
return ok;
|
||
}
|
||
|
||
|
||
int ve0400(int argc, char* argv[])
|
||
{
|
||
TVendite_tabapp vta;
|
||
vta.run(argc, argv, TR("Tabella Vendite"));
|
||
return 0;
|
||
}
|