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)
{
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();
if (codart == art && codum == um)
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?)
//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?)
TString query;
query << "USE RCONDV\n";
query << "SELECT (TIPORIGA=\"A\")&&(ANAMAG.GRMERC=#GRMERC)&&(((CATVEN=#FATHCATVEN)&&(COD=#FATHCOD))";
//giro su tutti i figli nello sheet dei figli
TToken_string keys_listini(140, ';');
TToken_string key;
key.add(get(F_FATHCATVEN));
key.add(get(F_FATHCODLIS));
key.trim();
keys_listini.add(key);
TSheet_field& sf_figli = sfield(F_LISTINI_FIGLI);
TToken_string keys_figli(140, ';');
FOR_EACH_SHEET_ROW(sf_figli, r, riga)
{
TToken_string key;
key.cut(0);
key.add(riga->get(0));
key.add(riga->get(1));
key.trim();
keys_figli.add(key);
//prosegue la select
query << "||((CATVEN=\"" << key.get(0) << "\")&&(COD=\"" << key.get(1) << "\"))";
keys_listini.add(key);
}
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);
sf_multilistini.destroy();
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 (bool ok = recset_rows.move_first(); ok; ok = recset_rows.move_next())
FOR_EACH_TOKEN(keys_listini, tok)
{
if (!pi.addstatus(1))
break;
//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);
key = tok;
TString query;
query << "USE RCONDV\n";
query << "SELECT ANAMAG.GRMERC=#GRMERC\n";
//giro su tutti i figli nello sheet dei figli
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";
TToken_string riga_key;
riga_key.add(recset_rows.get(RCONDV_CATVEN).as_string());
riga_key.add(recset_rows.get(RCONDV_COD).as_string());
riga_key.trim();
//mette il prezzo al posto giusto (padre e figlio)
const int pos = keys_figli.get_pos(riga_key);
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 + 1 + pos);
}
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("#CATVEN", key.get(0));
recset_rows.set_var("#COD", key.get(1));
const long recset_rows_items = recset_rows.items();
//posizione dell'attuale prezzo
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
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;
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)
{
const real fath_prezzo = riga->get(fath_prezzo_pos);