campo-sirio/ps/ps0430100.cpp
luca ab57d73bc0 Patch level :4.0/10.0
Files correlati     :
Ricompilazione Demo : [ ]
Commento            :aggiunti sorgenti di programmi personalizzati sul main_trunk


git-svn-id: svn://10.65.10.50/trunk@15931 c028cbd2-c16b-5b4b-a496-9718f37d4682
2007-12-20 11:21:38 +00:00

228 lines
5.6 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 "ps0430100a.h"
#define FILE_KEY "ACM"
///////////////////////////////////////////////////////////
// TArt_mask maschera
///////////////////////////////////////////////////////////
class TArt_mask : public TAutomask
{
public:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
TArt_mask() : TAutomask("ps0430100a") {}
~TArt_mask() {}
};
bool TArt_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F_SET:
if (e == fe_button)
{
TSheet_field & sf = sfield(F_ARTICLES);
const long items = sf.items();
bool select = true;
const int cid = sf.cid2index(F_ATTIVO);
int i ;
for (i = 0; select && i < items; i++)
select = *sf.row (i).get(cid) <= ' ';
const TString4 val(select ? "X" : " ");
for (i = 0; i < items; i++)
sf.row(i).add(val, cid);
sf.force_update();
}
break;
case F_RESET:
if (e == fe_button)
{
TSheet_field & sf = sfield(F_ARTICLES);
const long items = sf.items();
for (int i = 0; i < items; i++)
{
TToken_string & row = sf.row(i);
row.add(" ", sf.cid2index(F_ATTIVO));
}
sf.force_update();
}
break;
default:
break;
}
return true;
}
class TRelArticoli_multirel_app : public TMultirel_application
{
TISAM_recordset _recset;
TArt_mask * _mask;
protected:
virtual void get_mask_name(TString& tabname) const;
//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;}
public:
virtual const char * extra_modules() const {return "ba";}
TRelArticoli_multirel_app() : _recset("USE ANAMAG KEY 1") {}
virtual ~TRelArticoli_multirel_app() {}
};
void TRelArticoli_multirel_app::get_mask_name(TString& tabname) const
{
tabname = "ps0430100a";
}
bool TRelArticoli_multirel_app::user_create()
{
bool ok = TMultirel_application::user_create();
_mask = new TArt_mask;
return ok;
}
bool TRelArticoli_multirel_app::user_destroy()
{
/* prefix().close_closeable_isamfiles();
TSystemisamfile multirel(LF_MULTIREL);
multirel.pack(); */
delete _mask;
return true;
}
int TRelArticoli_multirel_app::read(TMask& m)
{
const TRectype & curr = get_relation()->lfile().curr();
TSheet_field & sf = m.sfield(F_ARTICLES);
TLocalisamfile multirel(LF_MULTIREL);
const TString user(m.get(F_USER));
int i = 0;
sf.destroy();
for (bool ok = _recset.move_first(); ok; ok = _recset.move_next())
{
TToken_string & row = sf.row(i++);
const TString & codart = _recset.get(ANAMAG_CODART).as_string();
row.add(codart, sf.cid2index(F_CODART));
row.add(_recset.get(ANAMAG_DESCR).as_string(), sf.cid2index(F_DESCR));
row.add(_recset.get(ANAMAG_DESCRAGG).as_string(), sf.cid2index(F_DESCRAGG));
row.add(_recset.get(ANAMAG_CODFORN).as_string(), sf.cid2index(F_CODFORN));
TToken_string key; key.format("F|%ld", _recset.get(ANAMAG_CODFORN).as_int());
row.add(cache().get(LF_CLIFO, key, "RAGSOC"), sf.cid2index(F_RAGSOC));
multirel.put(MULTI_COD, FILE_KEY);
multirel.put(MULTI_FIRST, user);
multirel.put(MULTI_SECOND, codart);
if (multirel.read(_isequal) == NOERR)
row.add("X", sf.cid2index(F_ATTIVO));
else
row.add(" ", sf.cid2index(F_ATTIVO));
}
return NOERR;
}
int TRelArticoli_multirel_app::rewrite(const TMask& m)
{
int err = NOERR;
TSheet_field & sf = m.sfield(F_ARTICLES);
int i = 0;
TLocalisamfile multirel(LF_MULTIREL);
const TString user(m.get(F_USER));
for (bool ok = _recset.move_first(); err == NOERR && ok; ok = _recset.move_next())
{
TToken_string & row = sf.row(i++);
bool selected = *row.get(sf.cid2index(F_ATTIVO)) > ' ';
multirel.zero();
multirel.put(MULTI_COD, FILE_KEY);
multirel.put(MULTI_FIRST, user);
multirel.put(MULTI_SECOND, row.get(sf.cid2index(F_CODART)));
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, user);
multirel.put(MULTI_SECOND, row.get(sf.cid2index(F_CODART)));
err = multirel.write();
}
}
get_relation()->read(_isgteq);
return err;
}
bool TRelArticoli_multirel_app::remove()
{
int err;
TLocalisamfile multirel(LF_MULTIREL);
const TString user(get_mask(MODE_MOD)->get(F_USER));
multirel.put(MULTI_COD, FILE_KEY);
multirel.put(MULTI_FIRST, user);
for (err = multirel.read(_isgteq); err == NOERR && user == multirel.get(MULTI_FIRST); multirel.next())
err = multirel.remove();
return err == NOERR || err == _iseof;
}
bool TRelArticoli_multirel_app::find(word key)
{
bool ok = false;
const TString& user = get_mask(MODE_QUERY)->get(F_USER);
if (user.full())
{
TLocalisamfile multirel(LF_MULTIREL);
multirel.put(MULTI_COD, FILE_KEY);
multirel.put(MULTI_FIRST, user);
ok = (multirel.read(_isgteq) == NOERR) && (user == multirel.get(MULTI_FIRST));
}
if (ok)
get_relation()->read(_isgteq);
return ok;
}
int ps0430100(int argc, char* argv[])
{
TRelArticoli_multirel_app a;
a.run(argc, argv, TR("Tabella"));
return 0;
}