Patch level :10.0
Files correlati : Ricompilazione Demo : [ ] Commento : ma 'sti cazzo di listini non finiscono mai???!!! git-svn-id: svn://10.65.10.50/trunk@19414 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
c98dffca3b
commit
609a8d508f
@ -1396,7 +1396,7 @@ void TStampaDoc_application::print_selected(KEY k)
|
||||
pr.set_printtype(screenvis);
|
||||
else
|
||||
{
|
||||
if (pr.printtype() != acrobatprinter)
|
||||
//if (pr.printtype() != acrobatprinter)
|
||||
pr.set_printtype(winprinter);
|
||||
}
|
||||
}
|
||||
|
165
ve/ve2700.cpp
165
ve/ve2700.cpp
@ -24,6 +24,7 @@ class TAggiorna_listini_edit_mask : public TAutomask
|
||||
TMask* _query_mask; //puntatore alla maschera di query
|
||||
TString8 _curr_grmerc; //iniziale grmerc-sotgrmerc
|
||||
bool _ges_um; //gestione unità di misura del listino padre
|
||||
bool _ask_save; //chiede di salvare al cambio grmerc se effettuati cambiamenti nello sheet
|
||||
|
||||
protected:
|
||||
//Metodi dello sheet listini figli
|
||||
@ -42,6 +43,7 @@ protected:
|
||||
void check_all(const bool checked); //checka-dechecka la colonna dei check (on_field)
|
||||
void add_art(); //aggiunge un articolo ai listini (on_field)
|
||||
void save_listini(); //salva tutte le righe listini (padre e figli) così come sono sullo sheet (on_field)
|
||||
real get_price(TSheet_field& sf, const int row, const int col) const;
|
||||
|
||||
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||
|
||||
@ -180,6 +182,19 @@ void TAggiorna_listini_edit_mask::save_children_list()
|
||||
|
||||
|
||||
//metodi F_MULTILISTINI
|
||||
|
||||
real TAggiorna_listini_edit_mask::get_price(TSheet_field& sf, const int row, const int col) const
|
||||
{
|
||||
if (col == sf.cid2index(F_PREZZO))
|
||||
{
|
||||
TString16 str_prezzo = sf.cell(row, col);
|
||||
str_prezzo.strip(".");
|
||||
str_prezzo.replace(',', '.');
|
||||
return real(str_prezzo);
|
||||
}
|
||||
return real(sf.cell(row, col));
|
||||
}
|
||||
|
||||
//cerca nello sheet la coppia codart+um che gli viene passata restituendo la posizione della riga ALTA..
|
||||
//della coppia di righe sheet interessate (è la riga disabilitata);
|
||||
int TAggiorna_listini_edit_mask::find_codart(TSheet_field& sf, const TString& codart, const TString& codum) const
|
||||
@ -307,12 +322,28 @@ void TAggiorna_listini_edit_mask::fill_multilistini_sheet()
|
||||
//cerca se esiste o se deve aggiungerla: la find_cor_add_odart restituisce il numero della riga alta..
|
||||
//..(descrizione/um) del codart in questione (che starà la riga sotto, ovvero riga_alta+1)
|
||||
const int riga_alta = find_or_add_codart(sf_multilistini, codart, um);
|
||||
const int riga_bassa = riga_alta + 1;
|
||||
|
||||
//mette il prezzo al posto giusto (padre e figlio)
|
||||
if (pos <= 0)
|
||||
sf_multilistini.row(riga_alta + 1).add(prezzo.string(), prezzo_pos);
|
||||
if (pos <= 0) //padre
|
||||
{
|
||||
const TPrice prezzo_base(prezzo);
|
||||
sf_multilistini.row(riga_bassa).add(prezzo_base.string(true), prezzo_pos);
|
||||
}
|
||||
else
|
||||
{
|
||||
sf_multilistini.row(riga_alta).add(prezzo.string(), prezzo_pos + pos);
|
||||
sf_multilistini.row(riga_bassa).add(prezzo.string(), prezzo_pos + pos);
|
||||
real fath_prezzo = get_price(sf_multilistini, riga_bassa, prezzo_pos);
|
||||
//se il figlio ha un prezzo ma il padre no, ricalcola il valore dell'articolo nel padre usando il ricarico
|
||||
if (fath_prezzo.is_zero())
|
||||
{
|
||||
TSheet_field& listini_figli = sfield(F_LISTINI_FIGLI);
|
||||
const real ricarico = listini_figli.cell(pos - 1, listini_figli.cid2index(F_RICARICO));
|
||||
const TPrice prezzo_base(prezzo * CENTO / (CENTO + ricarico));
|
||||
sf_multilistini.row(riga_bassa).add(prezzo_base.string(true), prezzo_pos);
|
||||
}
|
||||
}
|
||||
} //for(bool ok..
|
||||
} //FOR_EACH_TOKEN..
|
||||
|
||||
@ -339,7 +370,7 @@ void TAggiorna_listini_edit_mask::update_sons_prices()
|
||||
const real old_son_prezzo = sf_listini.cell(i - 1, son_prezzo_pos);
|
||||
if (old_son_prezzo > ZERO)
|
||||
{
|
||||
const real fath_prezzo = riga->get(fath_prezzo_pos);
|
||||
const real fath_prezzo = get_price(sf_listini, i, fath_prezzo_pos);
|
||||
const TPrice son_prezzo = fath_prezzo * (CENTO + ricarico) / CENTO;
|
||||
riga->add(son_prezzo.get_num().string(), son_prezzo_pos);
|
||||
}
|
||||
@ -434,7 +465,10 @@ void TAggiorna_listini_edit_mask::add_art()
|
||||
um = riga->get(2); um.trim();
|
||||
const int numriga = find_or_add_codart(sf_listini, codart, um);
|
||||
if (numriga >= 0)
|
||||
sf_listini.row(numriga + 1).add(riga->get(3), prezzo_pos);
|
||||
{
|
||||
const TPrice prezzo(real(riga->get(3)));
|
||||
sf_listini.row(numriga + 1).add(prezzo.string(true), prezzo_pos);
|
||||
}
|
||||
}
|
||||
sf_listini.force_update();
|
||||
}
|
||||
@ -479,49 +513,69 @@ void TAggiorna_listini_edit_mask::save_listini()
|
||||
recset_rows.set_var("#COD", cod);
|
||||
const long recset_rows_items = recset_rows.items();
|
||||
|
||||
TLocalisamfile& file = recset_rows.cursor()->file();
|
||||
|
||||
//eliminatore di articoli cancellati dallo sheet
|
||||
for (bool ok = recset_rows.move_first(); ok; ok = recset_rows.move_next())
|
||||
{
|
||||
TLocalisamfile& file = recset_rows.cursor()->file();
|
||||
|
||||
//prende codart e um dal record su file rcondv
|
||||
const TString& codart = recset_rows.get(RCONDV_CODRIGA).as_string();
|
||||
const TString& um = recset_rows.get(RCONDV_UM).as_string();
|
||||
//cerca sullo sheet la coppia codart+um
|
||||
const int riga_alta = find_codart(sf_listini, codart, um);
|
||||
const real prezzo = sf_listini.row(riga_alta + 1).get(prezzo_pos + pos);
|
||||
const real prezzo = get_price(sf_listini, riga_alta + 1, prezzo_pos + pos);
|
||||
//se non la trova o se il prezzo è 0 elimina la riga dal file
|
||||
if (riga_alta < 0 || prezzo == ZERO)
|
||||
{
|
||||
file.remove();
|
||||
continue;
|
||||
}
|
||||
|
||||
//alla fine della storia registra tutto lo sheet sul file
|
||||
FOR_EACH_SHEET_ROW(sf_listini, r, riga)
|
||||
{
|
||||
//file.zero(); //achtung! se l'articolo è nuovo ci può stare, ma se c'era già no
|
||||
file.put(RCONDV_TIPO, "L");
|
||||
file.put(RCONDV_CATVEN, catven);
|
||||
file.put(RCONDV_COD, cod);
|
||||
|
||||
file.put(RCONDV_TIPORIGA, "A");
|
||||
file.put(RCONDV_CODRIGA, codart);
|
||||
file.put(RCONDV_UM, um);
|
||||
file.put(RCONDV_PREZZO, prezzo);
|
||||
|
||||
}
|
||||
|
||||
file.setkey(1);
|
||||
const int nuovo_articolo = file.read();
|
||||
|
||||
//alla fine della fiera deve salvare su file veramente!
|
||||
//se è in inserimento deve fare un write, se in modifica la rewrite
|
||||
if (nuovo_articolo > 0)
|
||||
file.rewrite_write();
|
||||
else
|
||||
file.write_rewrite();
|
||||
}
|
||||
}
|
||||
|
||||
TRectype key_rec(LF_RCONDV);
|
||||
|
||||
//alla fine della storia registra tutto lo sheet sul file
|
||||
FOR_EACH_SHEET_ROW(sf_listini, r, riga) if (r & 1)
|
||||
{
|
||||
const real prezzo = get_price(sf_listini, r, prezzo_pos + pos);
|
||||
if (prezzo > ZERO)
|
||||
{
|
||||
const TString codart = riga->get(1);
|
||||
const TString4 um = _ges_um ? sf_listini.row(r - 1).get(2) : "";
|
||||
//si costruisce un record con la chiave che trova sullo sheet in modo da poterlo cercare..
|
||||
//..sul file rcondv
|
||||
key_rec.zero();
|
||||
key_rec.put(RCONDV_TIPO, "L");
|
||||
key_rec.put(RCONDV_CATVEN, catven);
|
||||
key_rec.put(RCONDV_COD, cod);
|
||||
|
||||
key_rec.put(RCONDV_TIPORIGA, "A");
|
||||
key_rec.put(RCONDV_CODRIGA, codart);
|
||||
if (_ges_um)
|
||||
key_rec.put(RCONDV_UM, um);
|
||||
|
||||
//c'e' l'articolo nel listino?
|
||||
file.curr() = key_rec;
|
||||
int err = file.read();
|
||||
|
||||
//alla fine della fiera deve salvare su file veramente!
|
||||
//se è in inserimento deve fare un write, se in modifica la rewrite
|
||||
if (err == NOERR) //lo trova già esistente -> aggiorna il prezzo
|
||||
{
|
||||
file.put(RCONDV_PREZZO, prezzo);
|
||||
err = file.rewrite_write();
|
||||
}
|
||||
else //non lo trova quindi lo aggiunge
|
||||
{
|
||||
if (err == _isreinsert)
|
||||
{
|
||||
file.curr() = key_rec;
|
||||
file.put(RCONDV_PREZZO, prezzo);
|
||||
err = file.write_rewrite();
|
||||
}
|
||||
} //if(err==NOERR..
|
||||
if (err != NOERR)
|
||||
error_box(FR("Errore %d durante l'aggiornamento dell'articolo %s nel listino %s"), err, (const char*)codart, (const char*)cod);
|
||||
}
|
||||
} //FOR_EACH_SHEET_ROW...
|
||||
} //FOR_EACH_TOKEN...
|
||||
}
|
||||
|
||||
|
||||
@ -553,18 +607,42 @@ bool TAggiorna_listini_edit_mask::on_field_event(TOperable_field& o, TField_even
|
||||
grmerc.format("%-3s%-2s", (const char*)get(F_GRMERC),(const char*)get(F_SOTGRMERC));
|
||||
if (grmerc != _curr_grmerc)
|
||||
{
|
||||
if (_ask_save)
|
||||
{
|
||||
if (yesno_box(TR("Registrare le modifiche effettuate?")))
|
||||
save_listini();
|
||||
}
|
||||
fill_ricarichi_children_list();
|
||||
fill_multilistini_sheet();
|
||||
_ask_save = false;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case F_PREZZO:
|
||||
if (e == fe_modify && real::is_null(o.get()))
|
||||
if (e == fe_modify)
|
||||
{
|
||||
TSheet_field& sf_listini = sfield(F_MULTILISTINI);
|
||||
TMask& rowmask = sf_listini.sheet_mask();
|
||||
rowmask.field(DLG_USER).on_hit();
|
||||
if (real::is_null(o.get()))
|
||||
{
|
||||
TMask& rowmask = o.mask();
|
||||
rowmask.field(DLG_USER).on_hit();
|
||||
}
|
||||
_ask_save = true;
|
||||
}
|
||||
break;
|
||||
case F_LIST1:
|
||||
case F_LIST2:
|
||||
case F_LIST3:
|
||||
case F_LIST4:
|
||||
case F_LIST5:
|
||||
case F_LIST6:
|
||||
case F_LIST7:
|
||||
case F_LIST8:
|
||||
case F_LIST9:
|
||||
case F_LIST10:
|
||||
if (e == fe_modify)
|
||||
{
|
||||
_ask_save = true;
|
||||
}
|
||||
break;
|
||||
case DLG_USER:
|
||||
@ -583,8 +661,8 @@ bool TAggiorna_listini_edit_mask::on_field_event(TOperable_field& o, TField_even
|
||||
case DLG_APPLICA:
|
||||
if (e == fe_button)
|
||||
{
|
||||
update_sons_prices();
|
||||
save_children_list();
|
||||
update_sons_prices();
|
||||
_ask_save = true;
|
||||
}
|
||||
break;
|
||||
case DLG_CHECKALL:
|
||||
@ -604,6 +682,7 @@ bool TAggiorna_listini_edit_mask::on_field_event(TOperable_field& o, TField_even
|
||||
case DLG_SAVEREC:
|
||||
if (e == fe_button)
|
||||
{
|
||||
save_children_list();
|
||||
save_listini();
|
||||
}
|
||||
break;
|
||||
@ -714,6 +793,8 @@ TAggiorna_listini_edit_mask::TAggiorna_listini_edit_mask(TMask* query_mask)
|
||||
const TRectype& rec_padre = cache().get(LF_CONDV, chiave);
|
||||
_ges_um = rec_padre.get_bool(CONDV_GESTUM);
|
||||
|
||||
_ask_save = false;
|
||||
|
||||
//popola lo sheet dei listini figli
|
||||
fill_children_list();
|
||||
//e poi setta le intestazioni dello sheet multilistini
|
||||
|
Loading…
x
Reference in New Issue
Block a user