Patch level : 12.0 nopatch

Files correlati     :

Commento:
Modificata get_mask in _get_mask
This commit is contained in:
Alessandro Bonazzi 2022-10-02 21:30:05 +02:00
parent 289079d833
commit 6a161e705f

View File

@ -230,7 +230,7 @@ protected:
virtual bool user_destroy(); virtual bool user_destroy();
virtual TRelation* get_relation() const { return _therel; } virtual TRelation* get_relation() const { return _therel; }
virtual bool changing_mask(int mode); virtual bool changing_mask(int mode);
virtual TMask* get_mask(int mode); virtual TMask* _get_mask(int mode);
virtual void init_query_mode(TMask& m); virtual void init_query_mode(TMask& m);
virtual int read(TMask& m); virtual int read(TMask& m);
virtual int write(const TMask& m); virtual int write(const TMask& m);
@ -972,7 +972,7 @@ private:
protected: protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
bool test_row(const TToken_string& row); bool test_row(int nrow);
void load_um(); void load_um();
static void sheetrighe_get(TSheet_field &fld_righe, int item); static void sheetrighe_get(TSheet_field &fld_righe, int item);
@ -1071,12 +1071,13 @@ void TDistinta_mask::load_um()
} }
bool TDistinta_mask::test_row(const TToken_string& row) bool TDistinta_mask::test_row(int nrow)
{ {
TSheet_field& sheet = sfield(F_SHEET);
const TCodice_articolo father = get(F_CODICE); const TCodice_articolo father = get(F_CODICE);
TCodice_articolo code = sheet.get_str_row_cell(nrow, F_CODART);
TCodice_articolo code; row.get(1, code);
bool ok = code != father; bool ok = code != father;
if (ok && _tree.find_node(father) > 0) if (ok && _tree.find_node(father) > 0)
{ {
TToken_string path; _tree.curr_id(path); TToken_string path; _tree.curr_id(path);
@ -1088,12 +1089,9 @@ bool TDistinta_mask::test_row(const TToken_string& row)
"in quanto la distinta risulterebbe ciclica."), (const char*)code); "in quanto la distinta risulterebbe ciclica."), (const char*)code);
// Se e' una lavorazione // Se e' una lavorazione
if (get(F_TIPO)[0] == 'L') if ((get(F_TIPO) == "L") &&
{ !(sheet.get_str_row_cell(nrow, F_TIPOCOMP) == "L" && _tree.is_lav(code)))
ok = row[0] == 'L' && _tree.is_lav(code); return error_box(FR("Il codice '%s' non e' una lavorazione"), (const char*)code);
if (!ok)
error_box(FR("Il codice '%s' non e' una lavorazione"), (const char*)code);
}
return ok; return ok;
} }
@ -1170,41 +1168,47 @@ bool TDistinta_mask::on_unitsheet_event(TOperable_field& o, TField_event e, long
bool TDistinta_mask::on_distsheet_event(TOperable_field& o, TField_event e, long jolly) bool TDistinta_mask::on_distsheet_event(TOperable_field& o, TField_event e, long jolly)
{ {
const short id = o.dlg(); const short id = o.dlg();
switch (id) switch (id)
{ {
case F_SHEET: case F_SHEET:
if (e == se_notify_add || e == se_notify_modify || e == fe_close) if (e == se_notify_add || e == se_notify_modify || e == fe_close)
{ {
TSheet_field& sheet = (TSheet_field&)o;
const int nrig = int(jolly);
TToken_string& row = sheet.row(nrig);
switch(e) switch(e)
{ {
case se_notify_add: case se_notify_add:
row.add("A", F_TIPOCOMP-FIRST_FIELD); // Forza il listbox ad articolo {
row.add("", F_EXPR-FIRST_FIELD); // Forza la quantita' ad 1 TSheet_field& sheet = (TSheet_field&)o;
row.add(nrig+1, F_SORT0-FIRST_FIELD); // Inizializza numero riga const int nrig = int(jolly);
sheet.set_row_cell(F_TIPOCOMP, "A", nrig); // Forza il listbox ad articolo
sheet.set_row_cell(F_EXPR, 1, nrig); // Forza la quantita' ad 1
sheet.set_row_cell(F_SORT0, nrig + 1, nrig); // Inizializza numero riga
sheet.select(nrig); sheet.select(nrig);
sheet.force_update(nrig);
}
break; break;
case se_notify_modify: case se_notify_modify:
return test_row(row); return test_row(int(jolly));
break;
case fe_close: case fe_close:
{ {
TSheet_field& sheet = (TSheet_field&)o;
const int nrig = int(jolly);
TString80 code; TString80 code;
TString80 code1;
for (int n = sheet.items()-1; n >= 0; n--) for (int n = sheet.items()-1; n >= 0; n--)
{ {
const TToken_string& row = sheet.row(n); code = sheet.get_str_row_cell(n, F_CODART);
row.get(F_CODART-FIRST_FIELD, code); if (code.full())
if (!code.blank())
{ {
if (!test_row(row)) if (!test_row(nrig))
return false; return false;
for (int m = n - 1; m >= 0; m--) for (int m = n - 1; m >= 0; m--)
{ {
const TToken_string& row = sheet.row(m); if (code == sheet.get_str_row_cell(m, F_CODART))
row.get(F_CODART-FIRST_FIELD, code1);
if (code == code1)
{ {
int k = noyesall_box("Il codice %s e' ripetuto alla riga %d,\ncontinuare ugualmente ?", (const char *) code, n + 1); int k = noyesall_box("Il codice %s e' ripetuto alla riga %d,\ncontinuare ugualmente ?", (const char *) code, n + 1);
if (k == K_NO) if (k == K_NO)
@ -1219,7 +1223,7 @@ bool TDistinta_mask::on_distsheet_event(TOperable_field& o, TField_event e, long
sheet.destroy(n); sheet.destroy(n);
} }
} }
if (sheet.items() == 0) if (((TSheet_field&)o).items() == 0)
message_box(TR("E' necessario inserire almeno una riga nella distinta")); message_box(TR("E' necessario inserire almeno una riga nella distinta"));
break; break;
default: default:
@ -1740,7 +1744,7 @@ bool TDistinta_app::changing_mask(int mode)
return was_query != is_query; return was_query != is_query;
} }
TMask* TDistinta_app::get_mask(int mode) TMask* TDistinta_app::_get_mask(int mode)
{ {
const bool is_query = mode == MODE_QUERY || mode == MODE_QUERYINS; const bool is_query = mode == MODE_QUERY || mode == MODE_QUERYINS;
_mode = mode; _mode = mode;