Patch level :10.0
Files correlati : Ricompilazione Demo : [ ] Commento : adesso scrive pure! 2 carabinieri git-svn-id: svn://10.65.10.50/trunk@19328 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
76d5da7cff
commit
cb7292758d
137
ve/ve2500.cpp
137
ve/ve2500.cpp
@ -92,6 +92,11 @@ class TGestione_listini_semplice : public TRelation_application
|
||||
TGestione_listini_semplice_mask *_mask;
|
||||
TRelation* _rel;
|
||||
|
||||
private:
|
||||
void save_rows(const TMask& m);
|
||||
TString build_query() const;
|
||||
int find_art(TSheet_field& s, const char tipo, const TString& art) const;
|
||||
|
||||
protected:
|
||||
virtual bool user_create();
|
||||
virtual bool user_destroy();
|
||||
@ -105,8 +110,8 @@ protected:
|
||||
|
||||
virtual int read(TMask& m);
|
||||
// virtual bool remove();
|
||||
// virtual int write(const TMask& m);
|
||||
// virtual int rewrite(const TMask& m);
|
||||
virtual int write(const TMask& m);
|
||||
virtual int rewrite(const TMask& m);
|
||||
|
||||
public:
|
||||
virtual TRelation *get_relation() const { return _rel; }
|
||||
@ -116,6 +121,85 @@ public:
|
||||
};
|
||||
|
||||
|
||||
//FIND_ART: metodo che restituisce l'indice della riga dello sheet che contiene
|
||||
//la coppia tipo-articolo desiderata (-1 se non lo trova)
|
||||
int TGestione_listini_semplice::find_art(TSheet_field& s, const char tipo, const TString& art) const
|
||||
{
|
||||
int r = -1;
|
||||
//scorro le righe dello sheet partendo dall'ultima
|
||||
for (r = s.items() - 1; r >= 0; r--)
|
||||
{
|
||||
const char* tiporiga = s.row(r).get(0);
|
||||
const char* codart = s.row(r).get(1);
|
||||
|
||||
if (tipo == tiporiga[0] && art == codart)
|
||||
break;
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
void TGestione_listini_semplice::save_rows(const TMask& m)
|
||||
{
|
||||
//instanzio un TISAM_recordset sulle righe listino e un localisamfile
|
||||
TISAM_recordset righelist(build_query());
|
||||
righelist.set_var("#CATVEN", m.get(F_L_CATVEN));
|
||||
righelist.set_var("#COD", m.get(F_L_COD));
|
||||
|
||||
const long righelist_items = righelist.items();
|
||||
|
||||
TLocalisamfile& file = righelist.cursor()->file();
|
||||
|
||||
//sheet righe listino da salvare! (righe panda?)
|
||||
TSheet_field& righe = m.sfield(F_RIGHE);
|
||||
|
||||
//scorro tutte le righe listino ed elimino tutte quelle che non ci sono più sullo sheet (modifiche utonto)
|
||||
for (bool ok = righelist.move_first(); ok; ok = righelist.move_next())
|
||||
{
|
||||
const char tiporiga = righelist.get("TIPORIGA").as_string()[0];
|
||||
|
||||
const TString& art = righelist.get("CODRIGA").as_string();
|
||||
if (find_art(righe, tiporiga, art) < 0)
|
||||
file.remove();
|
||||
}
|
||||
|
||||
//procede al salvataggio di testata e righe
|
||||
//-----------------------------------------
|
||||
|
||||
//per prima cosa servono i dati di testata utili per riempire la chiave di riga listino
|
||||
const TString& catven = m.get(F_L_CATVEN);
|
||||
const TString& cod = m.get(F_L_COD);
|
||||
|
||||
//recupero la maschera di riga
|
||||
TMask& msk = righe.sheet_mask();
|
||||
|
||||
//per ogni riga dello sheet
|
||||
FOR_EACH_SHEET_ROW(righe, r, row)
|
||||
{
|
||||
file.zero();
|
||||
file.put(RCONDV_TIPO, "L");
|
||||
file.put(RCONDV_CATVEN, catven);
|
||||
file.put(RCONDV_COD, cod);
|
||||
|
||||
//per ogni campo della maschera setta all'interno del record corrente di file
|
||||
//il valore di quei campi che hanno un field
|
||||
FOR_EACH_MASK_FIELD(msk, i, f)
|
||||
{
|
||||
const TFieldref* fr = f->field();
|
||||
if (fr != NULL && f->dlg() < 200)
|
||||
{
|
||||
const int pos = righe.cid2index(f->dlg());
|
||||
fr->write(row->get(pos), file.curr());
|
||||
}
|
||||
}
|
||||
//se è in inserimento deve fare un write, se in modifica la rewrite
|
||||
if (m.insert_mode())
|
||||
file.write_rewrite();
|
||||
else
|
||||
file.rewrite_write();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool TGestione_listini_semplice::protected_record(TRectype& rec)
|
||||
{
|
||||
//non deve consentire l'eliminazione di un listino se ha dei figli da mantenere!
|
||||
@ -131,6 +215,16 @@ bool TGestione_listini_semplice::protected_record(TRectype& rec)
|
||||
return figli.items() > 0;
|
||||
}
|
||||
|
||||
TString TGestione_listini_semplice::build_query() const
|
||||
{
|
||||
TString query;
|
||||
query << "USE RCONDV\n";
|
||||
query << "FROM TIPO=L CATVEN=#CATVEN COD=#COD\n";
|
||||
query << "TO TIPO=L CATVEN=#CATVEN COD=#COD\n";
|
||||
|
||||
return query;
|
||||
}
|
||||
|
||||
int TGestione_listini_semplice::read(TMask& m)
|
||||
{
|
||||
//eseguo la read() standard
|
||||
@ -139,11 +233,7 @@ int TGestione_listini_semplice::read(TMask& m)
|
||||
if (err == NOERR)
|
||||
{
|
||||
//instanzio un TISAM_recordset sulle righe listino (RCONDV)
|
||||
TString query;
|
||||
query << "USE RCONDV\n";
|
||||
query << "FROM TIPO=L CATVEN=#CATVEN COD=#COD\n";
|
||||
query << "TO TIPO=L CATVEN=#CATVEN COD=#COD\n";
|
||||
TISAM_recordset righelist(query);
|
||||
TISAM_recordset righelist(build_query());
|
||||
righelist.set_var("#CATVEN", m.get(F_L_CATVEN));
|
||||
righelist.set_var("#COD", m.get(F_L_COD));
|
||||
|
||||
@ -151,15 +241,6 @@ int TGestione_listini_semplice::read(TMask& m)
|
||||
|
||||
const TRectype& rec = righelist.cursor()->curr();
|
||||
|
||||
/* //instanzio un TLcalisamfile su LF_CLIFOGIAC
|
||||
TLocalisamfile magcli(LF_CLIFOGIAC);
|
||||
//setto alcune variabili di interesse
|
||||
const TDate oggi(TODAY);
|
||||
const int year = oggi.year();
|
||||
const long clifo = m.get_long(F_CODCF);
|
||||
const int indsp = m.get_int(F_INDSPED);*/
|
||||
|
||||
|
||||
//recupero sheet e realtiva mashera di riga
|
||||
TSheet_field& sf_righe = m.sfield(F_RIGHE);
|
||||
TMask& msk = sf_righe.sheet_mask();
|
||||
@ -171,7 +252,7 @@ int TGestione_listini_semplice::read(TMask& m)
|
||||
{
|
||||
++pos;
|
||||
TToken_string& row = sf_righe.row(-1);
|
||||
//per ogni campo della maschera scrivi setta all'interno del record corrente di file
|
||||
//per ogni campo della maschera setta all'interno del record corrente di file
|
||||
//il valore di quei campi che hanno un field
|
||||
FOR_EACH_MASK_FIELD(msk,i,f)
|
||||
{
|
||||
@ -187,12 +268,32 @@ int TGestione_listini_semplice::read(TMask& m)
|
||||
return err;
|
||||
}
|
||||
|
||||
int TGestione_listini_semplice::rewrite(const TMask& m)
|
||||
{
|
||||
int err = TRelation_application::rewrite(m);
|
||||
|
||||
if(err == NOERR)
|
||||
save_rows(m);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
int TGestione_listini_semplice::write(const TMask& m)
|
||||
{
|
||||
int err = TRelation_application::write(m);
|
||||
|
||||
if(err == NOERR)
|
||||
save_rows(m);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
bool TGestione_listini_semplice::user_create()
|
||||
{
|
||||
_rel = new TRelation(LF_CONDV);
|
||||
|
||||
//attenzione!! questo è il parametro per avere la lunghezza del numero riga
|
||||
TSheet_field::set_line_number_width(4);
|
||||
TSheet_field::set_line_number_width(5);
|
||||
|
||||
_mask = new TGestione_listini_semplice_mask;
|
||||
return true;
|
||||
|
Loading…
x
Reference in New Issue
Block a user