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:
luca 2009-09-24 10:32:09 +00:00
parent 76d5da7cff
commit cb7292758d

View File

@ -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;