9be3a61cee
Files correlati : pe0.exe Ricompilazione Demo : [ ] Commento scelta costi sui preventivi bisognao cambiare le posizione dello sheet da 9 a 10 sui profili personalizzati git-svn-id: svn://10.65.10.50/trunk@20358 c028cbd2-c16b-5b4b-a496-9718f37d4682
279 lines
7.3 KiB
C++
Executable File
279 lines
7.3 KiB
C++
Executable File
#include <automask.h>
|
|
#include <defmask.h>
|
|
#include <msksheet.h>
|
|
#include <mask.h>
|
|
#include <recarray.h>
|
|
#include <recset.h>
|
|
#include <tabapp.h>
|
|
|
|
#include <multirel.h>
|
|
#include "../mg/anamag.h"
|
|
#include "../mg/mglib.h"
|
|
#include "ve2600a.h"
|
|
|
|
#define FILE_KEY "ARTLV"
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// TArtgiac_mask maschera
|
|
///////////////////////////////////////////////////////////
|
|
|
|
class TArtgiac_mask : public TAutomask
|
|
{
|
|
TString _query;
|
|
bool _filter_changed;
|
|
TCodgiac_livelli * _livelli_giac;
|
|
|
|
public:
|
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
|
TCodgiac_livelli & livelli_giac() const { return *_livelli_giac;}
|
|
|
|
TArtgiac_mask();
|
|
~TArtgiac_mask() { delete _livelli_giac; }
|
|
};
|
|
|
|
TArtgiac_mask::TArtgiac_mask() : TAutomask("ve2600a")
|
|
{
|
|
_livelli_giac = new TCodgiac_livelli() ;
|
|
TSheet_field & sh = sfield(F_LIVGIAC);
|
|
TMask & sh_mask = sh.sheet_mask();
|
|
TString80 prompt;
|
|
|
|
for (int i=0; i < 4; i++)
|
|
{
|
|
_livelli_giac->set_sheetcolumn(sh,F_LIV1+i,i+1);
|
|
if (_livelli_giac->autoinsert(i+1))
|
|
{
|
|
// codice autoinseribile
|
|
TMask_field & campo_liv = sh.sheet_mask().field(F_LIV1+i);
|
|
|
|
campo_liv.check_type(CHECK_SEARCH);
|
|
}
|
|
}
|
|
}
|
|
|
|
bool TArtgiac_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
|
{
|
|
switch (o.dlg())
|
|
{
|
|
case F_LIV1:
|
|
case F_LIV2:
|
|
case F_LIV3:
|
|
case F_LIV4:
|
|
if (e == fe_modify && !o.empty())
|
|
{
|
|
|
|
const int levnum = o.dlg()-F_LIV1+1;
|
|
return _livelli_giac->autoinsert(levnum, o);
|
|
}
|
|
break;
|
|
case F_LIVGIAC:
|
|
if (e == se_notify_add)
|
|
{
|
|
TSheet_field & sf = (TSheet_field &) o;
|
|
TMask & m = sf.sheet_mask();
|
|
const int nrow = sf.selected() + 1;
|
|
TToken_string & row = sf.row(nrow);
|
|
|
|
row.add("X", sf.cid2index(F_ATTIVO));
|
|
sf.check_row(nrow);
|
|
sf.force_update(nrow);
|
|
}
|
|
else
|
|
if (e == se_query_del)
|
|
{
|
|
TSheet_field & sf = (TSheet_field &) o;
|
|
TMask & m = sf.sheet_mask();
|
|
TString80 codgiac;
|
|
|
|
livelli_giac().pack_grpcode(codgiac, m.get(F_LIV1), 1);
|
|
livelli_giac().pack_grpcode(codgiac, m.get(F_LIV2), 2);
|
|
livelli_giac().pack_grpcode(codgiac, m.get(F_LIV3), 3);
|
|
livelli_giac().pack_grpcode(codgiac, m.get(F_LIV4), 4);
|
|
return codgiac.blank();
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
class TRelArticoligiac_multirel_app : public TMultirel_application
|
|
{
|
|
TArtgiac_mask * _mask;
|
|
TRelation * _rel;
|
|
|
|
protected:
|
|
virtual void get_mask_name(TString& tabname) const { tabname = "ve2600a";}
|
|
|
|
//magico metodo per impedire la navigazione su tabelle diverse da quella corrente del cursore
|
|
virtual bool has_filtered_cursor() const { return true; }
|
|
virtual bool user_create();
|
|
virtual bool user_destroy() ;
|
|
virtual int read(TMask& m);
|
|
virtual int rewrite(const TMask& m);
|
|
virtual int write(const TMask& m) { return rewrite(m);}
|
|
virtual bool remove();
|
|
virtual void init_insert_mode(TMask& m) { read(m); }
|
|
virtual bool find(word key = 0);
|
|
virtual TMask* get_mask(int mode = MODE_QUERY) { return (TMask *) _mask;}
|
|
virtual TRelation* get_relation() const { return _rel;}
|
|
|
|
public:
|
|
TRelArticoligiac_multirel_app() {}
|
|
virtual ~TRelArticoligiac_multirel_app() {}
|
|
};
|
|
|
|
bool TRelArticoligiac_multirel_app::user_create()
|
|
{
|
|
TMultirel_application::user_create();
|
|
_mask = new TArtgiac_mask;
|
|
|
|
if (!_mask->livelli_giac().enabled())
|
|
return warning_box("gestione livelli di giacenza non abilitata");
|
|
_rel = new TRelation(LF_ANAMAG);
|
|
set_search_field(F_CODART);
|
|
|
|
return true;
|
|
}
|
|
|
|
bool TRelArticoligiac_multirel_app::user_destroy()
|
|
{
|
|
delete _mask;
|
|
delete _rel;
|
|
return TMultirel_application::user_destroy();
|
|
}
|
|
|
|
int TRelArticoligiac_multirel_app::read(TMask& m)
|
|
{
|
|
TLocalisamfile multirel(LF_MULTIREL);
|
|
TArtgiac_mask & mask = (TArtgiac_mask &) m;
|
|
TString80 codart(m.get(F_CODART));
|
|
const TString & cod = get_relation()->lfile().get(ANAMAG_CODART);
|
|
TSheet_field & sf = m.sfield(F_LIVGIAC);
|
|
const int col_lev1 = sf.cid2index(F_LIV1);
|
|
const int col_lev2 = sf.cid2index(F_LIV2);
|
|
const int col_lev3 = sf.cid2index(F_LIV3);
|
|
const int col_lev4 = sf.cid2index(F_LIV4);
|
|
const int col_attivo = sf.cid2index(F_ATTIVO);
|
|
int i = 0;
|
|
|
|
if (cod.full() && cod != codart)
|
|
{
|
|
codart = cod;
|
|
m.set(F_CODART, codart, 0x2);
|
|
}
|
|
sf.destroy();
|
|
multirel.zero();
|
|
multirel.put(MULTI_COD, FILE_KEY);
|
|
multirel.put(MULTI_FIRST, codart);
|
|
for ( int err = multirel.read(_isgteq); err == NOERR && codart == multirel.get(MULTI_FIRST); err = multirel.next())
|
|
{
|
|
TToken_string & row = sf.row(i++);
|
|
const TString & codgiac = multirel.get(MULTI_SECOND);
|
|
|
|
row.add(mask.livelli_giac().unpack_grpcode(codgiac, 1), col_lev1);
|
|
row.add(mask.livelli_giac().unpack_grpcode(codgiac, 2), col_lev2);
|
|
row.add(mask.livelli_giac().unpack_grpcode(codgiac, 3), col_lev3);
|
|
row.add(mask.livelli_giac().unpack_grpcode(codgiac, 4), col_lev4);
|
|
row.add("X", col_attivo);
|
|
sf.check_row(i - 1);
|
|
}
|
|
|
|
return NOERR;
|
|
}
|
|
|
|
int TRelArticoligiac_multirel_app::rewrite(const TMask& m)
|
|
{
|
|
int err = NOERR;
|
|
TLocalisamfile multirel(LF_MULTIREL);
|
|
TSheet_field & sf = m.sfield(F_LIVGIAC);
|
|
const TString& codart = m.get(F_CODART);
|
|
TArtgiac_mask & mask = (TArtgiac_mask &) m;
|
|
const int col_lev1 = sf.cid2index(F_LIV1);
|
|
const int col_lev2 = sf.cid2index(F_LIV2);
|
|
const int col_lev3 = sf.cid2index(F_LIV3);
|
|
const int col_lev4 = sf.cid2index(F_LIV4);
|
|
TString80 codgiac;
|
|
|
|
for (int i = 0; i < sf.items(); i++)
|
|
{
|
|
TToken_string & row = sf.row(i);
|
|
bool selected = *row.get(sf.cid2index(F_ATTIVO)) > ' ';
|
|
|
|
mask.livelli_giac().pack_grpcode(codgiac, row.get(col_lev1), 1);
|
|
mask.livelli_giac().pack_grpcode(codgiac, row.get(col_lev2), 2);
|
|
mask.livelli_giac().pack_grpcode(codgiac, row.get(col_lev3), 3);
|
|
mask.livelli_giac().pack_grpcode(codgiac, row.get(col_lev4), 4);
|
|
if (codgiac.full())
|
|
{
|
|
multirel.zero();
|
|
multirel.put(MULTI_COD, FILE_KEY);
|
|
multirel.put(MULTI_FIRST, codart);
|
|
multirel.put(MULTI_SECOND, codgiac);
|
|
|
|
bool exist = multirel.read(_isequal) == NOERR;
|
|
|
|
if (exist && !selected)
|
|
err = multirel.remove();
|
|
else
|
|
if (!exist && selected)
|
|
{
|
|
multirel.zero();
|
|
multirel.put(MULTI_COD, FILE_KEY);
|
|
multirel.put(MULTI_FIRST, codart);
|
|
multirel.put(MULTI_SECOND, codgiac);
|
|
err = multirel.write();
|
|
}
|
|
}
|
|
}
|
|
TRelation & r = *get_relation();
|
|
|
|
r.lfile().put(ANAMAG_CODART, codart);
|
|
r.read(_isequal);
|
|
return err;
|
|
}
|
|
|
|
bool TRelArticoligiac_multirel_app::remove()
|
|
{
|
|
int err;
|
|
TLocalisamfile multirel(LF_MULTIREL);
|
|
const TString& codart = _mask->get(F_CODART);
|
|
|
|
multirel.put(MULTI_COD, FILE_KEY);
|
|
multirel.put(MULTI_FIRST, codart);
|
|
|
|
for (err = multirel.read(_isgteq); err == NOERR && codart == multirel.get(MULTI_FIRST); err = multirel.next())
|
|
err = multirel.remove();
|
|
return err == NOERR || err == _iseof;
|
|
}
|
|
|
|
bool TRelArticoligiac_multirel_app::find(word key)
|
|
{
|
|
bool ok = false;
|
|
const TString& codart = _mask->get(F_CODART);
|
|
|
|
if (codart.full())
|
|
{
|
|
TLocalisamfile multirel(LF_MULTIREL);
|
|
|
|
multirel.put(MULTI_COD, FILE_KEY);
|
|
multirel.put(MULTI_FIRST, codart);
|
|
ok = (multirel.read(_isgteq) == NOERR) && (codart == multirel.get(MULTI_FIRST));
|
|
if (ok)
|
|
{
|
|
TRelation & r = *get_relation();
|
|
|
|
r.lfile().put(ANAMAG_CODART, codart);
|
|
r.read(_isequal);
|
|
}
|
|
}
|
|
return ok;
|
|
}
|
|
|
|
int ve2600(int argc, char* argv[])
|
|
{
|
|
TRelArticoligiac_multirel_app a;
|
|
a.run(argc, argv, TR("Relazioni articoli livelli di giacenza"));
|
|
return 0;
|
|
}
|