Patch level :

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :


git-svn-id: svn://10.65.10.50/trunk@19397 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2009-10-07 10:28:12 +00:00
parent 760f634c89
commit 211728c14b

View File

@ -183,7 +183,7 @@ int TAggiorna_listini_edit_mask::find_codart(TSheet_field& sf, const TString& co
for (int i = 1; i < sf.items(); i += 2) for (int i = 1; i < sf.items(); i += 2)
{ {
const char* art = sf.cell(i, codart_pos); const char* art = sf.cell(i, codart_pos);
TString4 um = sf.cell(i, codum_pos); TString4 um = sf.cell(i - 1, codum_pos);
um.trim(); um.trim();
if (codart == art && codum == um) if (codart == art && codum == um)
return i - 1; return i - 1;
@ -212,64 +212,75 @@ void TAggiorna_listini_edit_mask::fill_multilistini_sheet()
//..viene aggiunta al padre medesimo (i padri devono sapere tutto dei figli, sennò che genitori sono?) //..viene aggiunta al padre medesimo (i padri devono sapere tutto dei figli, sennò che genitori sono?)
//se invece la riga appartiene al padre e non a uno o più figli questi ultimi saranno lasciati nella.. //se invece la riga appartiene al padre e non a uno o più figli questi ultimi saranno lasciati nella..
//..loro ignoranza di tale riga (un padre qualche vantaggio dovrà pur averlo, no?) //..loro ignoranza di tale riga (un padre qualche vantaggio dovrà pur averlo, no?)
TString query;
query << "USE RCONDV\n"; TToken_string keys_listini(140, ';');
query << "SELECT (TIPORIGA=\"A\")&&(ANAMAG.GRMERC=#GRMERC)&&(((CATVEN=#FATHCATVEN)&&(COD=#FATHCOD))"; TToken_string key;
//giro su tutti i figli nello sheet dei figli
key.add(get(F_FATHCATVEN));
key.add(get(F_FATHCODLIS));
key.trim();
keys_listini.add(key);
TSheet_field& sf_figli = sfield(F_LISTINI_FIGLI); TSheet_field& sf_figli = sfield(F_LISTINI_FIGLI);
TToken_string keys_figli(140, ';');
FOR_EACH_SHEET_ROW(sf_figli, r, riga) FOR_EACH_SHEET_ROW(sf_figli, r, riga)
{ {
TToken_string key; key.cut(0);
key.add(riga->get(0)); key.add(riga->get(0));
key.add(riga->get(1)); key.add(riga->get(1));
key.trim(); key.trim();
keys_figli.add(key); keys_listini.add(key);
//prosegue la select
query << "||((CATVEN=\"" << key.get(0) << "\")&&(COD=\"" << key.get(1) << "\"))";
} }
query << ")\n";
query << "JOIN ANAMAG INTO CODART==CODRIGA\n";
query << "FROM TIPO=L\n";
query << "TO TIPO=L\n";
TISAM_recordset recset_rows(query);
TString8 grmerc;
grmerc.format("%-3s%-2s", (const char*)get(F_GRMERC),(const char*)get(F_SOTGRMERC));
recset_rows.set_var("#GRMERC", grmerc);
recset_rows.set_var("#FATHCATVEN", get(F_FATHCATVEN));
recset_rows.set_var("#FATHCOD", get(F_FATHCODLIS));
const long recset_rows_items = recset_rows.items();
TProgind pi(recset_rows_items, TR("Creazione righe listini..."), true, true);
TProgind pi(keys_listini.items(), TR("Creazione righe listini..."), true, true);
TSheet_field& sf_multilistini = sfield(F_MULTILISTINI); TSheet_field& sf_multilistini = sfield(F_MULTILISTINI);
sf_multilistini.destroy();
const int prezzo_pos = sf_multilistini.cid2index(F_PREZZO); const int prezzo_pos = sf_multilistini.cid2index(F_PREZZO);
//per ogni riga del recordset va ad aggiornare lo sheet sulla maschera (aggiunge la riga) FOR_EACH_TOKEN(keys_listini, tok)
for (bool ok = recset_rows.move_first(); ok; ok = recset_rows.move_next())
{ {
if (!pi.addstatus(1)) if (!pi.addstatus(1))
break; break;
//dati riga corrente key = tok;
const TString& codart = recset_rows.get(RCONDV_CODRIGA).as_string(); TString query;
const TString& um = recset_rows.get(RCONDV_UM).as_string(); query << "USE RCONDV\n";
const real prezzo = recset_rows.get(RCONDV_PREZZO).as_real(); query << "SELECT ANAMAG.GRMERC=#GRMERC\n";
//cerca se esiste o se deve aggiungerla: la find_codart restituisce il numero della riga alta.. //giro su tutti i figli nello sheet dei figli
//..(descrizione/um) del codart in questione (che starà la riga sotto, ovvero riga_alta+1) query << "JOIN ANAMAG INTO CODART==CODRIGA\n";
const int riga_alta = find_codart(sf_multilistini, codart, um); query << "FROM TIPO=L CATVEN=#CATVEN COD=#COD TIPORIGA=A\n";
query << "TO TIPO=L CATVEN=#CATVEN COD=#COD TIPORIGA=A\n";
TToken_string riga_key; TISAM_recordset recset_rows(query);
riga_key.add(recset_rows.get(RCONDV_CATVEN).as_string()); TString8 grmerc;
riga_key.add(recset_rows.get(RCONDV_COD).as_string()); grmerc.format("%-3s%-2s", (const char*)get(F_GRMERC),(const char*)get(F_SOTGRMERC));
riga_key.trim(); recset_rows.set_var("#GRMERC", grmerc);
//mette il prezzo al posto giusto (padre e figlio) recset_rows.set_var("#CATVEN", key.get(0));
const int pos = keys_figli.get_pos(riga_key); recset_rows.set_var("#COD", key.get(1));
if (pos < 0) const long recset_rows_items = recset_rows.items();
sf_multilistini.row(riga_alta + 1).add(prezzo.string(), prezzo_pos);
else //posizione dell'attuale prezzo
sf_multilistini.row(riga_alta).add(prezzo.string(), prezzo_pos + 1 + pos); const int pos = keys_listini.get_pos(key);
}
//per ogni riga del recordset va ad aggiornare lo sheet sulla maschera (aggiunge la riga)
for (bool ok = recset_rows.move_first(); ok; ok = recset_rows.move_next())
{
//dati riga corrente
const TString& codart = recset_rows.get(RCONDV_CODRIGA).as_string();
const TString& um = recset_rows.get(RCONDV_UM).as_string();
const real prezzo = recset_rows.get(RCONDV_PREZZO).as_real();
//cerca se esiste o se deve aggiungerla: la find_codart 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_codart(sf_multilistini, codart, um);
//mette il prezzo al posto giusto (padre e figlio)
if (pos <= 0)
sf_multilistini.row(riga_alta + 1).add(prezzo.string(), prezzo_pos);
else
sf_multilistini.row(riga_alta).add(prezzo.string(), prezzo_pos + pos);
} //for(bool ok..
} //FOR_EACH_TOKEN..
//aggiorna i prezzi nuovi dei listini figli //aggiorna i prezzi nuovi dei listini figli
update_sons_prices(); update_sons_prices();
@ -291,7 +302,7 @@ void TAggiorna_listini_edit_mask::update_sons_prices()
const int son_prezzo_pos = fath_prezzo_pos + 1 + r; const int son_prezzo_pos = fath_prezzo_pos + 1 + r;
FOR_EACH_SHEET_ROW(sf_listini, i, riga) if (riga->get_char(0) > ' ') //è come dire checked (ignoranti!) FOR_EACH_SHEET_ROW(sf_listini, i, riga) if (riga->get_char(0) > ' ') //è come dire checked (ignoranti!)
{ {
const real old_son_prezzo = sf_listini.cell(r - 1, son_prezzo_pos); const real old_son_prezzo = sf_listini.cell(i - 1, son_prezzo_pos);
if (old_son_prezzo > ZERO) if (old_son_prezzo > ZERO)
{ {
const real fath_prezzo = riga->get(fath_prezzo_pos); const real fath_prezzo = riga->get(fath_prezzo_pos);