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;
|
TGestione_listini_semplice_mask *_mask;
|
||||||
TRelation* _rel;
|
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:
|
protected:
|
||||||
virtual bool user_create();
|
virtual bool user_create();
|
||||||
virtual bool user_destroy();
|
virtual bool user_destroy();
|
||||||
@ -105,8 +110,8 @@ protected:
|
|||||||
|
|
||||||
virtual int read(TMask& m);
|
virtual int read(TMask& m);
|
||||||
// virtual bool remove();
|
// virtual bool remove();
|
||||||
// virtual int write(const TMask& m);
|
virtual int write(const TMask& m);
|
||||||
// virtual int rewrite(const TMask& m);
|
virtual int rewrite(const TMask& m);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual TRelation *get_relation() const { return _rel; }
|
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)
|
bool TGestione_listini_semplice::protected_record(TRectype& rec)
|
||||||
{
|
{
|
||||||
//non deve consentire l'eliminazione di un listino se ha dei figli da mantenere!
|
//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;
|
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)
|
int TGestione_listini_semplice::read(TMask& m)
|
||||||
{
|
{
|
||||||
//eseguo la read() standard
|
//eseguo la read() standard
|
||||||
@ -139,11 +233,7 @@ int TGestione_listini_semplice::read(TMask& m)
|
|||||||
if (err == NOERR)
|
if (err == NOERR)
|
||||||
{
|
{
|
||||||
//instanzio un TISAM_recordset sulle righe listino (RCONDV)
|
//instanzio un TISAM_recordset sulle righe listino (RCONDV)
|
||||||
TString query;
|
TISAM_recordset righelist(build_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);
|
|
||||||
righelist.set_var("#CATVEN", m.get(F_L_CATVEN));
|
righelist.set_var("#CATVEN", m.get(F_L_CATVEN));
|
||||||
righelist.set_var("#COD", m.get(F_L_COD));
|
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();
|
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
|
//recupero sheet e realtiva mashera di riga
|
||||||
TSheet_field& sf_righe = m.sfield(F_RIGHE);
|
TSheet_field& sf_righe = m.sfield(F_RIGHE);
|
||||||
TMask& msk = sf_righe.sheet_mask();
|
TMask& msk = sf_righe.sheet_mask();
|
||||||
@ -171,7 +252,7 @@ int TGestione_listini_semplice::read(TMask& m)
|
|||||||
{
|
{
|
||||||
++pos;
|
++pos;
|
||||||
TToken_string& row = sf_righe.row(-1);
|
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
|
//il valore di quei campi che hanno un field
|
||||||
FOR_EACH_MASK_FIELD(msk,i,f)
|
FOR_EACH_MASK_FIELD(msk,i,f)
|
||||||
{
|
{
|
||||||
@ -187,12 +268,32 @@ int TGestione_listini_semplice::read(TMask& m)
|
|||||||
return err;
|
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()
|
bool TGestione_listini_semplice::user_create()
|
||||||
{
|
{
|
||||||
_rel = new TRelation(LF_CONDV);
|
_rel = new TRelation(LF_CONDV);
|
||||||
|
|
||||||
//attenzione!! questo è il parametro per avere la lunghezza del numero riga
|
//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;
|
_mask = new TGestione_listini_semplice_mask;
|
||||||
return true;
|
return true;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user