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:
parent
bd8b758e6f
commit
668c6227c4
113
ve/ve2700.cpp
113
ve/ve2700.cpp
@ -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...
|
||||
|
Loading…
x
Reference in New Issue
Block a user