campo-sirio/ef/ef0100.cpp
alex 02572a9f98 Sistemazioni per iniziare il lavoro
git-svn-id: svn://10.65.10.50/trunk@3820 c028cbd2-c16b-5b4b-a496-9718f37d4682
1996-10-23 17:18:20 +00:00

213 lines
4.7 KiB
C++
Executable File

#include <relapp.h>
#include <msksheet.h>
#include <sheet.h>
#include <utility.h>
#include <lffiles.h>
#include <clifo.h>
#include "effetti.h"
#include "cession.h"
#include "ef0.h"
#include "ef0100.h"
#include "ef0101.h"
class Variazione_Effetti: public TRelation_application
{
TMask* _msk;
TEffObb *_rel;
virtual const char* get_next_key();
TSheet_field& obb_sheet() const;
void obb_pack();
void common_f(const TMask& m);
virtual int read(TMask& m);
virtual int rewrite(const TMask& m);
virtual int write(const TMask& m);
bool user_create();
bool user_destroy();
virtual TMask* get_mask(int mode) {return _msk;}
virtual bool changing_mask(int mode) {return FALSE;}
public:
static bool codcf_handler(TMask_field& f, KEY k);
static bool effcomp_handler(TMask_field& f, KEY k);
virtual TRelation* get_relation() const {return _rel;}
Variazione_Effetti() {}
};
const char* Variazione_Effetti::get_next_key()
{
TLocalisamfile& effetti=_rel->lfile();
long nprogtr=1L;
if (!effetti.empty())
{
effetti.zero();
effetti.setkey(1);
effetti.last();
if (effetti.good())
nprogtr+=effetti.get_long(EFF_NPROGTR);
}
return format("%d|%ld",F_NPROGTR,nprogtr);
}
TSheet_field& Variazione_Effetti::obb_sheet() const
{
TSheet_field& o_sheet=(TSheet_field&) _msk->field(F_SHEET_EFF);
return o_sheet;
}
void Variazione_Effetti::obb_pack()
{
TArray& rows=obb_sheet().rows_array();
int nr=rows.items();
for (int i=0;i<nr;i++)
{
TToken_string& riga=(TToken_string&)rows[i];
if (riga.empty_items())
rows.destroy(i,FALSE);
}
}
void Variazione_Effetti::common_f(const TMask& m)
{
long nprogtr=m.get_long(F_NPROGTR);
_rel->lfile().zero();
m.autosave(*_rel);
// LF_CESS SAVER!
_rel->destroy_rows();
obb_pack();
TArray& rows=obb_sheet().rows_array();
for (int i=0; i<rows.items();i++)
{
TToken_string& row=(TToken_string&)rows[i];
TRectype& rec=_rel->obbligato(i);
row.restart();
rec.zero();
rec.put(CES_NPROGTR,nprogtr);
rec.put(CES_NRIGA,i+1);
rec.put(CES_RAGSOC,row.get());
rec.put(CES_LOCALITA,row.get());
rec.put(CES_STATO,row.get_int());
rec.put(CES_COM,row.get());
}
}
int Variazione_Effetti::read(TMask& m)
{
m.autoload(*_rel);
// LF_CESS loader!
TToken_string riga(80);
obb_sheet().reset();
for (int i=0; i<_rel->obbligati_items();i++)
{
TRectype& rec=_rel->obbligato(i);
riga.cut(0);
riga.add(rec.get(CES_RAGSOC));
riga.add(rec.get(CES_LOCALITA));
riga.add(rec.get(CES_STATO));
riga.add(rec.get(CES_COM));
obb_sheet().row(i)=riga;
}
return _rel->status();
}
int Variazione_Effetti::rewrite(const TMask& m)
{
common_f(m);
return _rel->rewrite(TRUE);
}
int Variazione_Effetti::write(const TMask& m)
{
common_f(m);
return _rel->write(TRUE);
}
bool Variazione_Effetti::user_create()
{
_msk = new TMask("ef0100a") ;
_rel = new TEffObb;
_msk->set_handler(F_CODCF,codcf_handler);
_msk->set_handler(F_EFFCOMP,effcomp_handler);
return TRUE;
}
bool Variazione_Effetti::user_destroy()
{
delete _msk;
delete _rel;
return TRUE;
}
bool Variazione_Effetti::codcf_handler(TMask_field& f, KEY k)
{
long codcf = atol(f.get()), n = 0;
TString ragsoc(50);
TToken_string line;
TLocalisamfile clifo(LF_CLIFO);
TArray_sheet cli(-1,-1,59,20,"Clienti","Codice|Ragione sociale@50|Sospeso|Codice fiscale@18");
switch (k)
{
case K_TAB:
if (f.focusdirty()) // When changing focus put customer's name
{
clifo.zero();
clifo.setkey(1);
clifo.put(CLI_TIPOCF,"C");
clifo.put(CLI_CODCF,codcf);
clifo.read();
if (clifo.good())
{
ragsoc=clifo.get(CLI_RAGSOC);
f.mask().set(F_CFRAGSOC,(const char*)ragsoc);
} else
return FALSE;
}
break;
case K_F8: // If F8 was pressed perform customer's search
clifo.setkey(1);
clifo.first();
while (clifo.good() && clifo.get(CLI_TIPOCF)=="C")
{
line.cut(0);
if (codcf == clifo.get_long(CLI_CODCF)) n=cli.items();
line.add(clifo.get(CLI_CODCF));
line.add(clifo.get(CLI_RAGSOC));
line.add(clifo.get(CLI_SOSPESO));
line.add(clifo.get(CLI_COFI));
cli.add(line);
clifo.next();
}
cli.select(n);
if (cli.run()==K_ENTER)
{
line=cli.row(-1);
f.set(line.get(0));
f.mask().set(F_CFRAGSOC,line.get(1));
}
break;
default:
break;
}
return TRUE;
}
bool Variazione_Effetti::effcomp_handler(TMask_field& f, KEY k)
{
if (!f.mask().get(F_NRATA).empty())
f.set("X");
return TRUE;
}
int ef0100(int argc, char* argv[])
{
Variazione_Effetti a ;
a.run(argc, argv, "Gestione effetti");
return 0;
}