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:
parent
d46e00e5dd
commit
d2db578b36
@ -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
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
296
ve/velib06.cpp
296
ve/velib06.cpp
@ -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));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user