Patch level : 10.0

Files correlati     : ve0.exe ve0100b.msk ve0100d.msk
Ricompilazione Demo : [ ]
Commento            :
X Euroforesi
Corretta e migliorata gestione filtro per articoli in evasione ordini.
Aggiunta possibilita' di de/selezionare tutti i documenti
Riportata unità di misura in maschera evasione


git-svn-id: svn://10.65.10.50/branches/R_10_00@21397 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2011-01-05 13:33:02 +00:00
parent d46e00e5dd
commit d2db578b36
6 changed files with 199 additions and 144 deletions

View File

@ -1,6 +1,13 @@
#include "ve0100b1.h" #include "ve0100b1.h"
TOOLBAR "topbar" 0 0 0 2 TOOLBAR "topbar" 0 0 0 2
BUTTON DLG_SELECT 2 2
BEGIN
PROMPT 1 1 "Tutti"
PICTURE TOOL_MULTISEL
END
#include <elabar.h> #include <elabar.h>
ENDPAGE ENDPAGE
@ -231,7 +238,7 @@ END
NUMBER F_QTA 13 5 NUMBER F_QTA 13 5
BEGIN BEGIN
PROMPT 51 8 "Qta' " PROMPT 52 8 "Quantità "
GROUP GRP_ART GROUP GRP_ART
END END

View File

@ -5,15 +5,10 @@
#include "velib.h" #include "velib.h"
#endif #endif
#ifndef __CG2101_H
#include "../cg/cg2101.h"
#endif
#ifndef __CALIB01_H #ifndef __CALIB01_H
#include "../ca/calib01.h" #include "../ca/calib01.h"
#endif #endif
class TLista_documenti : public TObject // velib04 class TLista_documenti : public TObject // velib04
{ {
TArray _documenti; TArray _documenti;

View File

@ -229,25 +229,25 @@ TConsegna_mask::TConsegna_mask(TConfig & c, int header_code, bool per_codice, bo
if (header_code == 1) if (header_code == 1)
{ {
TString h; TString h;
h = "Quantita'\nconsegnata"; h = HR("Quantita'\nconsegnata");
s.set_column_header(S_QTARESIDUA, h); s.set_column_header(S_QTARESIDUA, h);
s.sheet_mask().field(S_QTARESIDUA).set_prompt("Q.ta' consegnata"); s.sheet_mask().field(S_QTARESIDUA).set_prompt(PR("Q.ta' consegnata"));
h = "Quantita'\nda fatturare"; h = HR("Quantita'\nda fatturare");
s.set_column_header(S_QTADAEVADERE, h); s.set_column_header(S_QTADAEVADERE, h);
s.sheet_mask().field(S_QTADAEVADERE).set_prompt("Q.ta' da fatturare"); s.sheet_mask().field(S_QTADAEVADERE).set_prompt(PR("Q.ta' da fatturare"));
} }
else else
if (header_code == 2) if (header_code == 2)
{ {
TString h; TString h;
h = "Residuo"; h = HR("Residuo");
s.set_column_header(S_QTARESIDUA, h); s.set_column_header(S_QTARESIDUA, h);
s.sheet_mask().field(S_QTARESIDUA).set_prompt("Residuo "); s.sheet_mask().field(S_QTARESIDUA).set_prompt(PR("Residuo "));
h = "Da evadere"; h = HR("Da evadere");
s.set_column_header(S_QTADAEVADERE, h); s.set_column_header(S_QTADAEVADERE, h);
s.sheet_mask().field(S_QTADAEVADERE).set_prompt("Da evadere "); s.sheet_mask().field(S_QTADAEVADERE).set_prompt(PR("Da evadere "));
} }
if (c.exist("CODAGG1")) if (c.exist("CODAGG1"))
@ -345,11 +345,16 @@ bool TConsegna_ordini::elabora(TLista_documenti& doc_in, TLista_documenti& doc_o
// params().set("QUANTITA", ZERO); // params().set("QUANTITA", ZERO);
if (articolo.full()) if (articolo.full())
{ {
m.show(F_UMQTA);
m.set(F_UMQTA, params().get("UM"));
m.show(F_QTA); m.show(F_QTA);
m.set(F_QTA, params().get("QUANTITA")); m.set(F_QTA, params().get("QUANTITA"));
} }
else else
{
m.hide(F_UMQTA);
m.hide(F_QTA); m.hide(F_QTA);
}
ok = m.run() == K_ENTER; ok = m.run() == K_ENTER;
if (ok) if (ok)
@ -561,7 +566,6 @@ bool TConsegna_ordini::elabora(TLista_documenti& doc_in, TLista_documenti& doc_o
{ {
const TString4 um(inrec.get(RDOC_UMQTA)); const TString4 um(inrec.get(RDOC_UMQTA));
const real qta = inrec.articolo().convert_to_um(daeva, params().get("UM"), um); const real qta = inrec.articolo().convert_to_um(daeva, params().get("UM"), um);
params().set("QUANTITA", params().get_real("QUANTITA") - qta); params().set("QUANTITA", params().get_real("QUANTITA") - qta);
} }

View File

@ -33,5 +33,6 @@
#define F_RAGFOR 214 #define F_RAGFOR 214
#define F_CODVAL 215 #define F_CODVAL 215
#define F_CAMBIO 216 #define F_CAMBIO 216
#define F_QTA 217 #define F_UMQTA 217
#define F_QTA 218
#define F_ROWS 250 #define F_ROWS 250

View File

@ -152,6 +152,12 @@ BEGIN
FLAGS "D" FLAGS "D"
END END
STRING F_UMQTA 2
BEGIN
PROMPT 40 7 "U.M. "
FLAG "DU"
END
NUMBER F_CAMBIO 15 5 NUMBER F_CAMBIO 15 5
BEGIN BEGIN
PROMPT 52 6 "Cambio " PROMPT 52 6 "Cambio "
@ -161,7 +167,7 @@ END
NUMBER F_QTA 13 5 NUMBER F_QTA 13 5
BEGIN BEGIN
PROMPT 52 7 "Qta' " PROMPT 52 7 "Quantità "
FLAGS "D" FLAGS "D"
END END

View File

@ -2,6 +2,8 @@
#include <dongle.h> #include <dongle.h>
#include <execp.h> #include <execp.h>
#include <modaut.h> #include <modaut.h>
#include <multirel.h>
#include <occas.h>
#include <postman.h> #include <postman.h>
#include <recset.h> #include <recset.h>
#include <smartcard.h> #include <smartcard.h>
@ -22,10 +24,8 @@
#include "veuml1.h" #include "veuml1.h"
#include "veini.h" #include "veini.h"
#include <multirel.h>
#include "../cg/cfban.h" #include "../cg/cfban.h"
#include "../ca/cfcms.h" #include "../ca/cfcms.h"
#include <occas.h>
#include "rcondv.h" #include "rcondv.h"
#include "sconti.h" #include "sconti.h"
@ -44,9 +44,7 @@ public:
}; };
bool TOriginal_row_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) bool TOriginal_row_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{ { return true; }
return true;
}
bool TOriginal_row_mask::on_key(KEY key) bool TOriginal_row_mask::on_key(KEY key)
{ {
@ -175,7 +173,7 @@ TDocumento_mask::TDocumento_mask(const char* td)
const short pos = _sheet->cid2index(FR_LIV1 + i -1); const short pos = _sheet->cid2index(FR_LIV1 + i -1);
if (_livelli_giac->enabled(i)) if (_livelli_giac->enabled(i))
{ {
const TString & header = _livelli_giac->name(i); const TString& header = _livelli_giac->name(i);
const int len = header.len() + 1; const int len = header.len() + 1;
const int f_len = _livelli_giac->code_length(i); const int f_len = _livelli_giac->code_length(i);
_sheet->set_column_header(pos, header); _sheet->set_column_header(pos, header);
@ -2343,6 +2341,46 @@ TLista_elaborazioni::~TLista_elaborazioni()
delete _elab; delete _elab;
} }
///////////////////////////////////////////////////////////
// Filtro per articolo
///////////////////////////////////////////////////////////
static TCodice_articolo _art_filter;
static bool rdoc_article_filter(const TRectype& rdoc)
{
bool good = rdoc.get(RDOC_CODART) == _art_filter;
if (good)
good = !rdoc.get_bool(RDOC_RIGAEVASA);
return good;
}
static bool doc_article_filter(const TRelation* rel)
{
bool yes = false;
const TRectype& doc = rel->curr();
TLocalisamfile rdoc(LF_RIGHEDOC); rdoc.setkey(5);
rdoc.put(RDOC_CODART, _art_filter);
rdoc.put(RDOC_CODNUM, doc.get(DOC_CODNUM));
rdoc.put(RDOC_ANNO, doc.get(DOC_ANNO));
rdoc.put(RDOC_PROVV, doc.get(DOC_PROVV));
rdoc.put(RDOC_NDOC, doc.get(DOC_NDOC));
for (int err = rdoc.read(); err == NOERR; err = rdoc.next())
{
const TString& codart = rdoc.get(RDOC_CODART);
if (codart != _art_filter || rdoc.get(RDOC_NDOC) != doc.get(DOC_NDOC))
break;
if (rdoc_article_filter(rdoc.curr()))
{
yes = true;
break;
}
}
return yes;
}
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// TDocument_tree // TDocument_tree
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
@ -2355,7 +2393,6 @@ class TDocument_tree : public TBidirectional_tree
bool _multiple_selection; bool _multiple_selection;
TAssoc_array _selected_docs; TAssoc_array _selected_docs;
TString _selected; TString _selected;
protected: protected:
virtual void node2id(const TObject* node, TString& id) const; virtual void node2id(const TObject* node, TString& id) const;
@ -2370,6 +2407,8 @@ public:
bool multiple_selection() const { return _multiple_selection;} bool multiple_selection() const { return _multiple_selection;}
bool node_selected(const TObject* node = NULL) const; bool node_selected(const TObject* node = NULL) const;
void select_node(const TObject* node = NULL, bool on = true); void select_node(const TObject* node = NULL, bool on = true);
bool toggle_all_nodes();
real select_doc(long numdoc); real select_doc(long numdoc);
void build_doc_list(TLista_documenti & docs); void build_doc_list(TLista_documenti & docs);
void unselect_node(const TObject* node) { select_node(node, false);} void unselect_node(const TObject* node) { select_node(node, false);}
@ -2377,6 +2416,7 @@ public:
virtual bool goto_firstson(); virtual bool goto_firstson();
virtual bool goto_rbrother(); virtual bool goto_rbrother();
virtual bool goto_node(const TString &id); virtual bool goto_node(const TString &id);
virtual bool could_have_son() const;
virtual bool has_son() const; virtual bool has_son() const;
virtual bool has_rbrother() const; virtual bool has_rbrother() const;
virtual bool has_father() const; virtual bool has_father() const;
@ -2395,7 +2435,7 @@ public:
const TRectype& record() const; const TRectype& record() const;
const real totale_doc() const { TDocumento d(testata()); return d.totale_doc();} const real totale_doc() const { TDocumento d(testata()); return d.totale_doc();}
void set_cursor(char tipocf, long codcf, int anno, const char* filter, FILTERFUNCTION ff = NULL); void set_cursor(char tipocf, long codcf, int anno, const char* filter);
TCursor* get_cursor() { return _cursor; } TCursor* get_cursor() { return _cursor; }
TDocument_tree(); TDocument_tree();
@ -2468,11 +2508,10 @@ bool TDocument_tree::node_selected(const TObject* node) const
void TDocument_tree::select_node(const TObject* node, bool on) void TDocument_tree::select_node(const TObject* node, bool on)
{ {
TToken_string id;
if (node == NULL) if (node == NULL)
node = curr_node(); node = curr_node();
TToken_string id;
node2id(node, id); node2id(node, id);
id = id.get(0); id = id.get(0);
if (on) if (on)
@ -2482,10 +2521,23 @@ void TDocument_tree::select_node(const TObject* node, bool on)
select(id); select(id);
} }
bool find_doc(TTree& tree, void* jolly, word flags) bool TDocument_tree::toggle_all_nodes()
{ {
TDocument_tree & t = (TDocument_tree &) tree; bool on = _selected_docs.empty() && _multiple_selection;
if (!t.node_selected() && t.testata().get_long(DOC_NDOC) == *((long *) jolly)) _selected_docs.destroy();
if (on)
{
for (bool ok = goto_root(); ok; ok = goto_rbrother())
select_node(NULL, on);
on = !_selected_docs.empty();
}
return on;
}
static bool find_doc(TTree& tree, void* jolly, word flags)
{
TDocument_tree& t = (TDocument_tree&)tree;
if (!t.node_selected() && t.testata().get_long(DOC_NDOC) == *((long*)jolly))
{ {
t.select_node(); t.select_node();
return true; return true;
@ -2496,13 +2548,12 @@ bool find_doc(TTree& tree, void* jolly, word flags)
real TDocument_tree::select_doc(long numdoc) real TDocument_tree::select_doc(long numdoc)
{ {
real val; real val;
if (goto_root()) if (goto_root() && scan_depth_first(find_doc, &numdoc, SCAN_PRE_ORDER | SCAN_IGNORING_LEAVES))
if (scan_depth_first(find_doc, (void *) &numdoc, SCAN_PRE_ORDER | SCAN_IGNORING_LEAVES)) val = totale_doc();
val = totale_doc();
return val; return val;
} }
bool add_to_list(TTree& tree, void* jolly, word flags) static bool add_to_list(TTree& tree, void* jolly, word flags)
{ {
TDocument_tree & t = (TDocument_tree &) tree; TDocument_tree & t = (TDocument_tree &) tree;
if (t.node_selected()) if (t.node_selected())
@ -2514,10 +2565,9 @@ bool add_to_list(TTree& tree, void* jolly, word flags)
} }
void TDocument_tree::build_doc_list(TLista_documenti & docs) void TDocument_tree::build_doc_list(TLista_documenti & docs)
{ {
if (goto_root()) if (goto_root())
scan_depth_first(add_to_list, (void *) &docs, SCAN_PRE_ORDER | SCAN_IGNORING_LEAVES); scan_depth_first(add_to_list, &docs, SCAN_PRE_ORDER | SCAN_IGNORING_LEAVES);
} }
bool TDocument_tree::goto_root() bool TDocument_tree::goto_root()
@ -2528,14 +2578,24 @@ bool TDocument_tree::goto_root()
return ok; return ok;
} }
// Fundamental method working also when _art_filter.full()
bool TDocument_tree::goto_firstson() bool TDocument_tree::goto_firstson()
{ {
bool ok = has_son(); bool ok = has_son();
if (ok) if (ok)
_curnode.add(1,1); {
int nriga = 1;
if (_art_filter.full())
{
const TRectype& rec = _relation->curr(LF_RIGHEDOC);
nriga = rec.get_int(RDOC_NRIGA);
}
_curnode.add(nriga,1);
}
return ok; return ok;
} }
// Fundamental method working also when _art_filter.full()
bool TDocument_tree::goto_rbrother() bool TDocument_tree::goto_rbrother()
{ {
bool ok = has_rbrother(); bool ok = has_rbrother();
@ -2558,60 +2618,78 @@ bool TDocument_tree::goto_rbrother()
bool TDocument_tree::goto_node(const TString &id) bool TDocument_tree::goto_node(const TString &id)
{ {
_curnode = id; _curnode = id;
return TRUE; return true;
} }
// Drawing speedup
bool TDocument_tree::could_have_son() const
{ return on_head(); }
// Fundamental method working also when _art_filter.full()
bool TDocument_tree::has_son() const bool TDocument_tree::has_son() const
{ {
bool ok = on_head(); bool ok = could_have_son();
if (ok) if (ok)
{ {
testata(); testata();
const TRectype& rec = _relation->curr(LF_RIGHEDOC); const TRectype& rec = _relation->curr(LF_RIGHEDOC);
ok = rec.get_int(RDOC_NRIGA) > 0; ok = rec.get_int(RDOC_NRIGA) > 0;
if (_art_filter.full())
{
ok = rdoc_article_filter(rec);
while (!ok && _relation->next_match(LF_RIGHEDOC))
ok = rdoc_article_filter(rec);
}
} }
return ok; return ok;
} }
// Fundamental method working also when _art_filter.full()
bool TDocument_tree::has_rbrother() const bool TDocument_tree::has_rbrother() const
{ {
bool ok = FALSE; bool ok = false;
if (on_head()) if (on_head())
{ {
TDocument_tree& me = (TDocument_tree&)*this; long pos = 0; _curnode.get(0, pos);
const long pos = me._curnode.get_long(0);
ok = pos < _cursor->items()-1; ok = pos < _cursor->items()-1;
} }
else else
{ {
riga(); // Posizionati sulla riga corrente riga(); // Posizionati sulla riga corrente
ok = _relation->next_match(LF_RIGHEDOC); if (_art_filter.full())
{
const TRectype& rec = _relation->curr(LF_RIGHEDOC);
while (!ok && _relation->next_match(LF_RIGHEDOC))
ok = rdoc_article_filter(rec);
}
else
ok = _relation->next_match(LF_RIGHEDOC);
} }
return ok; return ok;
} }
// Pleonastic method working also when _art_filter.full()
bool TDocument_tree::has_father() const bool TDocument_tree::has_father() const
{ { return on_row(); }
return on_row();
}
// Pleonastic method not working when _art_filter.full()
bool TDocument_tree::has_lbrother() const bool TDocument_tree::has_lbrother() const
{ {
bool ok = FALSE; bool ok = false;
TDocument_tree& me = (TDocument_tree&)*this;
if (on_head()) if (on_head())
{ {
const long pos = me._curnode.get_long(0); long pos = 0; _curnode.get(0, pos);
ok = pos > 0L; ok = pos > 0L;
} }
else else
{ {
const int nriga = me._curnode.get_int(1); int nriga = 0; _curnode.get(1, nriga);
ok = nriga > 1; ok = nriga > 1;
} }
return ok; return ok;
} }
// Pleonastic method not working when _art_filter.full()
bool TDocument_tree::goto_father() bool TDocument_tree::goto_father()
{ {
bool ok = on_row(); bool ok = on_row();
@ -2620,6 +2698,7 @@ bool TDocument_tree::goto_father()
return ok; return ok;
} }
// Pleonastic method not working when _art_filter.full()
bool TDocument_tree::goto_lbrother() bool TDocument_tree::goto_lbrother()
{ {
bool ok = has_lbrother(); bool ok = has_lbrother();
@ -2755,10 +2834,10 @@ bool TDocument_tree::get_description(TString& str) const
append_custom_fields(tipo, rec, str); append_custom_fields(tipo, rec, str);
} }
} }
return TRUE; return true;
} }
void TDocument_tree::set_cursor(char tipocf, long codcf, int anno, const char* filter, FILTERFUNCTION ff) void TDocument_tree::set_cursor(char tipocf, long codcf, int anno, const char* filter)
{ {
if (_relation == NULL) if (_relation == NULL)
{ {
@ -2779,20 +2858,23 @@ void TDocument_tree::set_cursor(char tipocf, long codcf, int anno, const char* f
_cursor->setfilter(""); // Force cursor rebuild _cursor->setfilter(""); // Force cursor rebuild
_cursor->setfilter(filter); _cursor->setfilter(filter);
_cursor->setregion(rec, rec); _cursor->setregion(rec, rec);
_cursor->set_filterfunction(ff);
const long items = _cursor->items(); if (_art_filter.full())
_cursor->set_filterfunction(doc_article_filter);
else
_cursor->set_filterfunction(NULL);
const long items = _cursor->items();
_cursor->freeze(true); _cursor->freeze(true);
goto_root(); goto_root();
if (items <= 3) if (items == 1)
expand_all(); expand_all();
} }
TDocument_tree::TDocument_tree() TDocument_tree::TDocument_tree()
: _relation(NULL), _cursor(NULL), _multiple_selection(false) : _relation(NULL), _cursor(NULL), _multiple_selection(false)
{ }
{
}
TDocument_tree::~TDocument_tree() TDocument_tree::~TDocument_tree()
{ {
@ -2817,10 +2899,6 @@ class TElabora_mask : public TAutomask
// @access Protected Member // @access Protected Member
protected: protected:
TString _art_filter, _liv_filter;
static TElabora_mask* _myself;
static bool article_filter(const TRelation* rel);
void add_valuta_filter(TString& filter) const; void add_valuta_filter(TString& filter) const;
void docrif_search(); void docrif_search();
@ -2840,8 +2918,6 @@ public:
virtual ~TElabora_mask() {} virtual ~TElabora_mask() {}
}; };
TElabora_mask* TElabora_mask::_myself = NULL;
bool TElabora_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) bool TElabora_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{ {
switch (o.dlg()) switch (o.dlg())
@ -2862,14 +2938,15 @@ bool TElabora_mask::on_field_event(TOperable_field& o, TField_event e, long joll
if (ne == 0) if (ne == 0)
set(F_TYPE, ""); set(F_TYPE, "");
} }
update_ndoc_filter(TRUE); update_ndoc_filter(true);
const bool add_to_doc = o.get().not_empty(); const bool add_to_doc = o.get().not_empty();
TElaborazione * e = curr_elab(); TElaborazione * e = curr_elab();
const bool external = e != NULL && e->tipo() == _esterna; const bool external = e != NULL && e->tipo() == _esterna;
const bool is_search = o.get().empty() || field(F_CODCF_ELAB).empty() || external || add_to_doc; const bool is_search = o.get().empty() || field(F_CODCF_ELAB).empty() || external || add_to_doc;
o.mask().field(F_NDOC_ELAB).check_type(is_search ? CHECK_SEARCH : CHECK_NORMAL); o.mask().field(F_NDOC_ELAB).check_type(is_search ? CHECK_SEARCH : CHECK_NORMAL);
_tree.multiple_selection(add_to_doc); _tree.multiple_selection(add_to_doc);
bool check_tot = false; bool check_tot = false;
if (add_to_doc) if (add_to_doc)
{ {
@ -2906,7 +2983,7 @@ bool TElabora_mask::on_field_event(TOperable_field& o, TField_event e, long joll
break; break;
case F_ELAB: case F_ELAB:
if (e == fe_modify) if (e == fe_modify)
update_ndoc_filter(TRUE); update_ndoc_filter(true);
break; break;
case F_ANNO_ELAB: case F_ANNO_ELAB:
if (e == fe_modify) if (e == fe_modify)
@ -2941,7 +3018,7 @@ bool TElabora_mask::on_field_event(TOperable_field& o, TField_event e, long joll
if (ndoc > 0L) if (ndoc > 0L)
{ {
real val = _tree.select_doc(ndoc); real val = _tree.select_doc(ndoc);
if (val != ZERO) if (!val.is_zero())
{ {
val += o.mask().get_real(F_TOTSEL); val += o.mask().get_real(F_TOTSEL);
o.mask().set(F_TOTSEL, val); o.mask().set(F_TOTSEL, val);
@ -2950,10 +3027,9 @@ bool TElabora_mask::on_field_event(TOperable_field& o, TField_event e, long joll
} }
break; break;
case F_ROWS: case F_ROWS:
if (e == fe_modify && is_running()) if (e == fe_modify && is_running())
{ {
TString id; TString id;
_tree.curr_id(id); _tree.curr_id(id);
_tree.select(id); _tree.select(id);
if (is_running() && !_tree.multiple_selection()) if (is_running() && !_tree.multiple_selection())
@ -3001,13 +3077,10 @@ bool TElabora_mask::on_field_event(TOperable_field& o, TField_event e, long joll
if (!rec.empty()) if (!rec.empty())
{ {
TFilename tempfile; TFilename tempfile;
tempfile.temp("ve0"); tempfile.temp("ve0");
tempfile.ext("ini"); tempfile.ext("ini");
{ {
TConfig configfile(tempfile); TConfig configfile(tempfile);
configfile.set("Action", "Modify", "Transaction"); configfile.set("Action", "Modify", "Transaction");
configfile.set("NDOC", rec.get(DOC_NDOC), "33"); configfile.set("NDOC", rec.get(DOC_NDOC), "33");
configfile.set(DOC_PROVV, rec.get(DOC_PROVV), "33"); configfile.set(DOC_PROVV, rec.get(DOC_PROVV), "33");
@ -3026,10 +3099,30 @@ bool TElabora_mask::on_field_event(TOperable_field& o, TField_event e, long joll
} }
} }
break; break;
case DLG_SELECT:
if (e == fe_button)
{
TTree_field& tf = tfield(F_ROWS);
if (tf.active() && _tree.multiple_selection())
{
TWait_cursor hourglass;
const bool sel = _tree.toggle_all_nodes();
if (_check_fld > DLG_NULL)
{
real tot;
for (bool ok = _tree.goto_root(); ok && sel; ok = _tree.goto_rbrother())
tot += _tree.totale_doc();
set(_check_fld, tot.string());
}
tf.win().force_update();
}
return false;
}
break;
default: default:
break; break;
} }
return TRUE; return true;
} }
int TElabora_mask::update_list() int TElabora_mask::update_list()
@ -3162,7 +3255,6 @@ bool TElabora_mask::elabora()
} }
} }
delete newdoc; delete newdoc;
} }
else else
{ {
@ -3216,22 +3308,6 @@ bool TElabora_mask::elabora()
set(F_NUMDOCRIF_ELAB, ""); set(F_NUMDOCRIF_ELAB, "");
((TDocumento_mask *)_main)->set_focus_field(F_SHEET); ((TDocumento_mask *)_main)->set_focus_field(F_SHEET);
} }
/* if (e->tipo() == _consegna_ordini)
{
TParametri_elaborazione& p = e->params();
if (p.get("ARTICOLO").not_empty())
{
real qta = get_real(F_QTA);
if (qta > ZERO)
{
const real qta_evasa = p.get_real("QUANTITA");
qta -= qta_evasa;
set(F_QTA, qta);
}
}
} */
// delete newdoc;
// Azzera l'anno in caso di ordini // Azzera l'anno in caso di ordini
if (in.items() > 0 && in[0].is_ordine()) if (in.items() > 0 && in[0].is_ordine())
@ -3252,34 +3328,6 @@ TElaborazione * TElabora_mask::curr_elab()
return cod_elab.not_empty() ? &_elab[cod_elab] : NULL; return cod_elab.not_empty() ? &_elab[cod_elab] : NULL;
} }
bool TElabora_mask::article_filter(const TRelation* rel)
{
bool yes = false;
TElabora_mask& m = *_myself;
TLocalisamfile rdoc(LF_RIGHEDOC);
rdoc.put(RDOC_CODNUM, rel->curr().get(DOC_CODNUM));
rdoc.put(RDOC_ANNO, rel->curr().get(DOC_ANNO));
rdoc.put(RDOC_PROVV, rel->curr().get(DOC_PROVV));
rdoc.put(RDOC_NDOC, rel->curr().get(DOC_NDOC));
rdoc.put(RDOC_NRIGA, 1);
int next_riga = 1;
for (int err = rdoc.read(); err == NOERR; err = rdoc.next())
{
const int nriga = rdoc.get_int(RDOC_NRIGA);
if (nriga != next_riga)
break;
next_riga++;
const bool evasa= rdoc.get_bool(RDOC_RIGAEVASA);
const TString& codart = rdoc.get(RDOC_CODART);
if (!evasa && codart == m._art_filter)
{
yes = true;
break;
}
}
return yes;
}
void TElabora_mask::add_valuta_filter(TString& filter) const void TElabora_mask::add_valuta_filter(TString& filter) const
{ {
TString16 valuta = get(F_CODVAL_ELAB); TString16 valuta = get(F_CODVAL_ELAB);
@ -3313,6 +3361,8 @@ void TElabora_mask::update_ndoc_filter(bool is_tipo_elaborazione)
const bool enable_group_doc = e != NULL && e->tipo() != _generazione_effetti && e->tipo() != _contabilizzazione; const bool enable_group_doc = e != NULL && e->tipo() != _generazione_effetti && e->tipo() != _contabilizzazione;
show(-GRP_DOC, enable_group_doc); show(-GRP_DOC, enable_group_doc);
enable(DLG_SELECT, aggiungi_doc_att && enable_group_doc); // Attiva la selezione multipla se possibile
if (e != NULL) if (e != NULL)
{ {
if (aggiungi_doc_att) if (aggiungi_doc_att)
@ -3332,16 +3382,16 @@ void TElabora_mask::update_ndoc_filter(bool is_tipo_elaborazione)
const TString8 num_in = e->codice_numerazione_iniziale(); const TString8 num_in = e->codice_numerazione_iniziale();
if (elab_changed) if (elab_changed)
{ {
const TString16 tipo_in(e->tipo_iniziale(0)); const TString4 tipo_in(e->tipo_iniziale(0));
const char stato_in = e->stato_iniziale(0); const char stato_in = e->stato_iniziale(0);
set(F_CODNUM_ELAB, num_in); set(F_CODNUM_ELAB, num_in, 0x2);
field(F_CODNUM_ELAB).check(); //field(F_CODNUM_ELAB).check(); // sostituito da 0x2
set(F_TIPODOC_ELAB , tipo_in); set(F_TIPODOC_ELAB , tipo_in, 0x2);
field(F_TIPODOC_ELAB).check(); //field(F_TIPODOC_ELAB).check(); // sostituito da 0x2
TString8 si; si << stato_in; TString8 si; si << stato_in;
set(F_STATODOC_ELAB, si); set(F_STATODOC_ELAB, si, 0x2);
field(F_STATODOC_ELAB).check(); //field(F_STATODOC_ELAB).check(); // sostituito da 0x2
// Azzero anno di elaaborazione quando ho a che fare con degli ordini // Azzero anno di elaaborazione quando ho a che fare con degli ordini
const TTipo_documento& tipodocin = cached_tipodoc(tipo_in); const TTipo_documento& tipodocin = cached_tipodoc(tipo_in);
@ -3351,7 +3401,7 @@ void TElabora_mask::update_ndoc_filter(bool is_tipo_elaborazione)
if (!field(F_TIPODOC_ELAB).empty()) if (!field(F_TIPODOC_ELAB).empty())
{ {
const TString16 tipo(get(F_TIPODOC_ELAB)); const TString4 tipo(get(F_TIPODOC_ELAB));
TString80 td; td.format("&&(TIPODOC==\"%s\")", (const char *)tipo); TString80 td; td.format("&&(TIPODOC==\"%s\")", (const char *)tipo);
filter << td; filter << td;
const TString& stato = get(F_STATODOC_ELAB); const TString& stato = get(F_STATODOC_ELAB);
@ -3361,11 +3411,11 @@ void TElabora_mask::update_ndoc_filter(bool is_tipo_elaborazione)
} }
else else
{ {
bool almost_one = FALSE; bool almost_one = false;
for (int i = 0; i < TElaborazione::_max_tipi_doc_elab; i++) for (int i = 0; i < TElaborazione::_max_tipi_doc_elab; i++)
{ {
const TString16 tipo_in(e->tipo_iniziale(i)); const TString4 tipo_in(e->tipo_iniziale(i));
const char stato_in = e->stato_iniziale(i); const char stato_in = e->stato_iniziale(i);
if (tipo == tipo_in && stato_in > '0') if (tipo == tipo_in && stato_in > '0')
@ -3445,20 +3495,19 @@ void TElabora_mask::update_ndoc_filter(bool is_tipo_elaborazione)
brew.set_filter(filter); brew.set_filter(filter);
_art_filter = get(F_CODART); _art_filter = get(F_CODART);
if (!aggiungi_doc_att || _art_filter.blank())
_art_filter.cut(0);
TCursor* cursor = brew.cursor(); TCursor* cursor = brew.cursor();
if (_art_filter.not_empty() && aggiungi_doc_att) if (_art_filter.full() && aggiungi_doc_att)
cursor->set_filterfunction(article_filter); cursor->set_filterfunction(doc_article_filter);
else else
cursor->set_filterfunction(NULL); cursor->set_filterfunction(NULL);
TTree_field& tf = tfield(F_ROWS); TTree_field& tf = tfield(F_ROWS);
if (!field(F_TIPODOC_ELAB).empty() && e != NULL) if (!field(F_TIPODOC_ELAB).empty() && e != NULL)
{ {
if (aggiungi_doc_att && _art_filter.not_empty()) _tree.set_cursor(get(F_TIPOCF_ELAB)[0], get_long(F_CODCF_ELAB), get_int(F_ANNO_ELAB), filter);
_tree.set_cursor(get(F_TIPOCF_ELAB)[0], get_long(F_CODCF_ELAB), get_int(F_ANNO_ELAB), filter, article_filter);
else
_tree.set_cursor(get(F_TIPOCF_ELAB)[0], get_long(F_CODCF_ELAB), get_int(F_ANNO_ELAB), filter);
tf.set_tree(&_tree); tf.set_tree(&_tree);
TToken_string header(256, '\n'); TToken_string header(256, '\n');
@ -3469,13 +3518,8 @@ void TElabora_mask::update_ndoc_filter(bool is_tipo_elaborazione)
else else
header << " Quantità"; header << " Quantità";
tf.set_header(header); tf.set_header(header);
if (aggiungi_doc_att && _art_filter.full()) if (aggiungi_doc_att) // GF20059
_tree.set_cursor(get(F_TIPOCF_ELAB)[0], get_long(F_CODCF_ELAB), get_int(F_ANNO_ELAB), filter, article_filter);
else
_tree.set_cursor(get(F_TIPOCF_ELAB)[0], get_long(F_CODCF_ELAB), get_int(F_ANNO_ELAB), filter);
if (aggiungi_doc_att) // GF20059
{ {
TCursor& cur = *_tree.get_cursor(); TCursor& cur = *_tree.get_cursor();
if (cur.items() == 1) // Propone l'unico documento possibile if (cur.items() == 1) // Propone l'unico documento possibile
@ -3542,8 +3586,6 @@ void TElabora_mask::docrif_search()
TElabora_mask::TElabora_mask(TDocumento_mask& main_mask) TElabora_mask::TElabora_mask(TDocumento_mask& main_mask)
: TAutomask("ve0100b"), _main(&main_mask), _last_elab(NULL), _check_fld(-883) : TAutomask("ve0100b"), _main(&main_mask), _last_elab(NULL), _check_fld(-883)
{ {
_myself = this;
const TDate oggi(TODAY); const TDate oggi(TODAY);
set(F_ANNO_ELAB, oggi.year()); //anno della datadoc proposta (risolve bug 0000331) set(F_ANNO_ELAB, oggi.year()); //anno della datadoc proposta (risolve bug 0000331)
set(F_TIPOCF_ELAB, _main->get(F_TIPOCF)); set(F_TIPOCF_ELAB, _main->get(F_TIPOCF));