939858122c
Files correlati : Ricompilazione Demo : [ ] Commento : git-svn-id: svn://10.65.10.50/trunk@17112 c028cbd2-c16b-5b4b-a496-9718f37d4682
215 lines
4.7 KiB
C++
Executable File
215 lines
4.7 KiB
C++
Executable File
#include <msksheet.h>
|
|
#include <relapp.h>
|
|
#include <recset.h>
|
|
|
|
#include "lv0400.h"
|
|
|
|
class TContratti_app: public TRelation_application
|
|
{
|
|
TMask* _amsk;
|
|
TMask* _bmsk;
|
|
TRelation* _rel;
|
|
bool _unicont;
|
|
|
|
private:
|
|
void save_rows(const TMask& m);
|
|
void build_query(const TMask& m,TString& query) const;
|
|
int find_art(TSheet_field& s,const TString& art) const;
|
|
|
|
protected:
|
|
virtual bool changing_mask (int mode) { return true;}
|
|
virtual TMask* get_mask (int mode) {return mode==MODE_QUERY?_amsk:_bmsk; }
|
|
virtual TRelation* get_relation() const {return _rel;}
|
|
|
|
virtual bool user_create();
|
|
virtual bool user_destroy();
|
|
virtual void on_config_change();
|
|
virtual bool get_next_key(TToken_string& key);
|
|
virtual int read(TMask& m);
|
|
virtual int write(const TMask& m);
|
|
virtual int rewrite(const TMask& m);
|
|
virtual bool remove();
|
|
|
|
};
|
|
|
|
bool TContratti_app:: user_create()
|
|
{
|
|
_rel=new TRelation (LF_LVCONDV);
|
|
_amsk= new TMask ("lv0400a");
|
|
_bmsk= new TMask ("lv0400b");
|
|
return true;
|
|
}
|
|
|
|
bool TContratti_app:: user_destroy()
|
|
{
|
|
delete _bmsk;
|
|
delete _amsk;
|
|
delete _rel;
|
|
return true;
|
|
}
|
|
|
|
void TContratti_app:: on_config_change()
|
|
{
|
|
TConfig ini(CONFIG_DITTA);
|
|
_unicont=ini.get_bool("UniCont");
|
|
}
|
|
|
|
bool TContratti_app:: get_next_key(TToken_string& key)
|
|
{
|
|
const long cliente=_amsk->get_long(F_CODCF);
|
|
if (cliente<=0) return false;
|
|
key.add(F_CODCF);
|
|
key.add(cliente);
|
|
key.add(F_CODCONT);
|
|
|
|
long codcont=0;
|
|
if (_unicont)
|
|
{
|
|
TISAM_recordset recset ("USE LVCONDV");
|
|
for (bool ok=recset.move_first(); ok; ok=recset.move_next())
|
|
{
|
|
const long codice=recset.get("CODCONT").as_int();
|
|
if (codice>codcont)
|
|
codcont=codice;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
TString query;
|
|
query<<"USE LVCONDV \n"
|
|
<<"FROM CODCF=#CLIENTE\n"
|
|
<<"TO CODCF=#CLIENTE\n";
|
|
TISAM_recordset recset (query);
|
|
recset.set_var("#CLIENTE",cliente);
|
|
if (recset.move_last())
|
|
codcont=recset.get("CODCONT").as_int();
|
|
|
|
}
|
|
codcont++;
|
|
key.add(codcont);
|
|
|
|
return true;
|
|
}
|
|
|
|
void TContratti_app:: build_query(const TMask& m,TString& query) const
|
|
{
|
|
query="";
|
|
query << "USE LVRCONDV\n"
|
|
<< "FROM CODCF="<<m.get(F_CODCF)<<" CODCONT="<<m.get(F_CODCONT)<<"\n"
|
|
<< "TO CODCF="<<m.get(F_CODCF)<<" CODCONT="<<m.get(F_CODCONT);
|
|
|
|
}
|
|
|
|
int TContratti_app:: read(TMask& m)
|
|
{
|
|
int err=TRelation_application::read(m);
|
|
if(err==NOERR)
|
|
{
|
|
TString query;
|
|
build_query(m,query);
|
|
TISAM_recordset righeset(query);
|
|
const TRectype& rec=righeset.cursor()->curr();
|
|
|
|
TSheet_field& righe=m.sfield(F_RIGHE);
|
|
TMask& msk=righe.sheet_mask();
|
|
righe.destroy();
|
|
|
|
for (bool ok=righeset.move_first(); ok; ok=righeset.move_next())
|
|
{
|
|
TToken_string& row=righe.row(-1);
|
|
FOR_EACH_MASK_FIELD(msk,i,f)
|
|
{
|
|
const TFieldref*fr=f->field();
|
|
if (fr!= NULL)
|
|
row.add(fr->read(rec),righe.cid2index(f->dlg()));
|
|
}
|
|
righe.check_row(righe.items()-1,3);
|
|
}
|
|
righe.force_update();
|
|
}
|
|
return err;
|
|
}
|
|
|
|
int TContratti_app::find_art(TSheet_field& s,const TString& art) const
|
|
{
|
|
int r=-1;
|
|
for (r=s.items()-1;r>=0;r--)
|
|
{
|
|
const char* codart= s.row(r).get(0);
|
|
if (art==codart)
|
|
break;
|
|
}
|
|
return r;
|
|
|
|
}
|
|
void TContratti_app::save_rows(const TMask& m)
|
|
{
|
|
TString query;
|
|
TSheet_field& righe=m.sfield(F_RIGHE);
|
|
build_query(m,query);
|
|
TISAM_recordset righeset(query);
|
|
TLocalisamfile& file=righeset.cursor()->file();
|
|
for (bool ok=righeset.move_first(); ok; ok=righeset.move_next())
|
|
{
|
|
const TString& art=righeset.get("CODART").as_string();
|
|
if (find_art(righe,art)<0)
|
|
file.remove();
|
|
}
|
|
|
|
TMask& msk=righe.sheet_mask();
|
|
FOR_EACH_SHEET_ROW(righe,r,row)
|
|
{
|
|
file.zero();
|
|
file.put("CODCF",m.get(F_CODCF));
|
|
file.put("CODCONT",m.get(F_CODCONT));
|
|
FOR_EACH_MASK_FIELD(msk,i,f)
|
|
{
|
|
const TFieldref*fr=f->field();
|
|
if (fr!= NULL)
|
|
{
|
|
const int pos=righe.cid2index(f->dlg());
|
|
fr->write(row->get(pos),file.curr());
|
|
}
|
|
}
|
|
file.rewrite_write();
|
|
}
|
|
|
|
}
|
|
|
|
int TContratti_app::write(const TMask& m)
|
|
{
|
|
int err=TRelation_application::write(m);
|
|
if(err==NOERR) save_rows(m);
|
|
return err;
|
|
}
|
|
int TContratti_app::rewrite(const TMask& m)
|
|
{
|
|
int err=TRelation_application::rewrite(m);
|
|
if(err==NOERR) save_rows(m);
|
|
return err;
|
|
}
|
|
bool TContratti_app::remove()
|
|
{
|
|
bool ok=TRelation_application::remove();
|
|
if(ok)
|
|
{
|
|
TString query;
|
|
build_query(*_bmsk,query);
|
|
TISAM_recordset righeset(query);
|
|
TLocalisamfile& file=righeset.cursor()->file();
|
|
for (bool ok=righeset.move_first(); ok; ok=righeset.move_next())
|
|
{
|
|
file.remove();
|
|
}
|
|
|
|
}
|
|
return ok;
|
|
}
|
|
|
|
int lv0400(int argc, char* argv[])
|
|
{
|
|
TContratti_app app;
|
|
app.run (argc,argv,TR("Gestione contratti"));
|
|
return 0;
|
|
}
|