Patch level : 10.0 505

Files correlati     : ve2
Ricompilazione Demo : [ ]
Commento            :
Corretta eliminazione articoli a prezzo nullo


git-svn-id: svn://10.65.10.50/trunk@19590 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2009-11-09 10:20:47 +00:00
parent bd8b758e6f
commit 668c6227c4

View File

@ -42,6 +42,7 @@ protected:
bool one_checked() const; //controlla se nella colonna dei check ce ne è almeno 1 checkato (on_field)
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 kill_priceless_articles(const TString& catven, const TString& codlist, int pos);
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 short dlg_id) const;
@ -219,14 +220,13 @@ real TAggiorna_listini_edit_mask::get_price(TMask_field& fld) const
real TAggiorna_listini_edit_mask::get_price(TSheet_field& sf, const int row, const short dlg_id) const
{
const int col = sf.cid2index(dlg_id);
TString16 str_prezzo = sf.cell(row, col);
if (dlg_id == S2_PREZZO)
{
TString16 str_prezzo = sf.cell(row, col);
str_prezzo.strip(".");
str_prezzo.replace(',', '.');
return real(str_prezzo);
}
return real(sf.cell(row, col));
return real(str_prezzo);
}
bool TAggiorna_listini_edit_mask::arrotonda(const short dlg_id, real& price)
@ -274,7 +274,6 @@ void TAggiorna_listini_edit_mask::set_price(TSheet_field& sf, const int row, con
sf.row(row).add(price.string(), prezzo_pos);
}
void TAggiorna_listini_edit_mask::set_price(TMask_field& fld, real& price)
{
const bool is_father_list = arrotonda(fld.dlg(), price);
@ -292,14 +291,21 @@ int TAggiorna_listini_edit_mask::find_codart(TSheet_field& sf, const TString& co
//cerca la riga tra quelle esistenti
const int codart_pos = sf.cid2index(S2_CODRIGA);
const int codum_pos = codart_pos + 1;
for (int i = 1; i < sf.items(); i += 2)
const int sf_items = sf.items();
for (int i = 1; i < sf_items; i += 2)
{
const char* art = sf.cell(i, codart_pos);
TString4 um = sf.cell(i - 1, codum_pos);
um.trim();
if (codart == art && (!_ges_um || codum == um))
if (codart == art)
{
if (_ges_um) // Controllo anche l'unita' di misura solo se necessario
{
TString4 um = sf.cell(i - 1, codum_pos);
um.trim();
if (codum != um)
continue;
}
return i - 1;
}
}
return -1;
}
@ -603,6 +609,51 @@ void TAggiorna_listini_edit_mask::add_art()
}
}
void TAggiorna_listini_edit_mask::kill_priceless_articles(const TString& catven, const TString& codlist, int pos)
{
TSheet_field& sf_listini = sfield(F_MULTILISTINI);
TString query;
query << "USE RCONDV\n";
query << "SELECT ANAMAG.GRMERC?=#GRMERC\n";
query << "JOIN ANAMAG INTO CODART==CODRIGA\n";
query << "FROM TIPO=L CATVEN=#CATVEN COD=#COD TIPORIGA=A\n";
query << "TO TIPO=L CATVEN=#CATVEN COD=#COD TIPORIGA=A\n";
TISAM_recordset recset_rows(query);
TString8 grmerc; get_correct_grmerc(grmerc, true);
recset_rows.set_var("#GRMERC", grmerc);
recset_rows.set_var("#CATVEN", catven);
recset_rows.set_var("#COD", codlist);
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())
{
//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 = riga_alta >= 0 ? get_price(sf_listini, riga_alta + 1, S2_PREZZO + pos) : ZERO;
//se non la trova o se il prezzo è 0 elimina la riga dal file
if (prezzo.is_zero())
{
const int err = file.remove();
if (err != NOERR)
{
TString80 msg;
msg.format(FR("Errore %d in cancellazione dell'articolo %s dal listino %s"),
err, (const char*)codart, file.curr().build_key());
xvtil_popup_error(msg);
}
}
}
}
//salva i listini così come li trova sulle righe dello sheet multilistini
void TAggiorna_listini_edit_mask::save_listini()
{
@ -624,41 +675,11 @@ void TAggiorna_listini_edit_mask::save_listini()
key = tok; //assegnamento necessario causa tipo (se usasse tok direttamente non funzionerebbe)
const int pos = keys_listini.get_pos(key);
const TString4 catven = key.get(0);
const TString4 codlist = key.get(1);
kill_priceless_articles(catven, codlist, pos);
TString query;
query << "USE RCONDV\n";
query << "SELECT ANAMAG.GRMERC?=#GRMERC\n";
query << "JOIN ANAMAG INTO CODART==CODRIGA\n";
query << "FROM TIPO=L CATVEN=#CATVEN COD=#COD TIPORIGA=A\n";
query << "TO TIPO=L CATVEN=#CATVEN COD=#COD TIPORIGA=A\n";
TISAM_recordset recset_rows(query);
TString8 grmerc;
get_correct_grmerc(grmerc, false);
recset_rows.set_var("#GRMERC", grmerc);
const TString4 catven = key.get(0);
recset_rows.set_var("#CATVEN", catven);
const TString4 cod = key.get(1);
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())
{
//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 = get_price(sf_listini, riga_alta + 1, S2_PREZZO + pos);
//se non la trova o se il prezzo è 0 elimina la riga dal file
if (riga_alta < 0 || prezzo == ZERO)
file.remove();
}
TLocalisamfile file(LF_RCONDV);
TRectype key_rec(LF_RCONDV);
//alla fine della storia registra tutto lo sheet sul file
@ -674,8 +695,7 @@ void TAggiorna_listini_edit_mask::save_listini()
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_COD, codlist);
key_rec.put(RCONDV_TIPORIGA, "A");
key_rec.put(RCONDV_CODRIGA, codart);
if (_ges_um)
@ -702,7 +722,8 @@ void TAggiorna_listini_edit_mask::save_listini()
}
} //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);
error_box(FR("Errore %d durante l'aggiornamento dell'articolo %s nel listino %s"),
err, (const char*)codart, (const char*)codlist);
}
} //FOR_EACH_SHEET_ROW...
} //FOR_EACH_TOKEN...