Patch level : 4.0 451
Files correlati : Ricompilazione Demo : [ ] Commento : Riportata la versione 3.1 650 git-svn-id: svn://10.65.10.50/trunk@14160 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
ab43b2cf08
commit
53330f618f
988
ve/velib.h
988
ve/velib.h
File diff suppressed because it is too large
Load Diff
@ -47,29 +47,6 @@ bool TOriginal_row_mask::on_key(KEY key)
|
||||
}
|
||||
|
||||
|
||||
class TOriginal_row_mask : public TAutomask
|
||||
{
|
||||
|
||||
protected:
|
||||
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||
virtual bool on_key(KEY key);
|
||||
|
||||
public:
|
||||
TOriginal_row_mask() : TAutomask("ve0100c") { }
|
||||
};
|
||||
|
||||
bool TOriginal_row_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TOriginal_row_mask::on_key(KEY key)
|
||||
{
|
||||
if (key == K_SHIFT + K_F12)
|
||||
enable(-1);
|
||||
return TAutomask::on_key(key);
|
||||
}
|
||||
|
||||
TDocumento_mask::TDocumento_mask(const char* td)
|
||||
: TVariable_mask(), _progs_page(-1),
|
||||
_condv(NULL), _smartcard(NULL),
|
||||
|
337
ve/velib06a.cpp
337
ve/velib06a.cpp
@ -348,7 +348,6 @@ bool data_hndl( TMask_field& field, KEY key )
|
||||
return field.error_box("Data documento inferiore alla data del documento precedente");
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -709,342 +708,6 @@ bool pricerange_handler(TMask_field& f, KEY key )
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
static bool __in_handler = false;
|
||||
|
||||
int sort_sheet(const TObject** a, const TObject** b)
|
||||
{
|
||||
TToken_string * t1 = (TToken_string *) *a;
|
||||
TToken_string * t2 = (TToken_string *) *b;
|
||||
const char * a1 = t1->get(1);
|
||||
const char * a2 = t2->get(1);
|
||||
int cmp = strcmp(a1, a2);
|
||||
|
||||
if (cmp == 0)
|
||||
{
|
||||
TDate d1(t1->get(2));
|
||||
TDate d2(t2->get(2));
|
||||
|
||||
cmp = d2 - d1;
|
||||
if (cmp == 0)
|
||||
return t2->get_int(8) - t1->get_int(8);
|
||||
}
|
||||
return cmp;
|
||||
}
|
||||
|
||||
void search_price(TMask_field& f, KEY key )
|
||||
{
|
||||
TMask& row_mask = f.mask();
|
||||
TSheet_field& sh = *row_mask.get_sheet();
|
||||
TDocumento_mask& mask = (TDocumento_mask &)sh.mask();
|
||||
TArray_sheet sheet(0, 3, -1, 16, "Ricerca Prezzi",
|
||||
"N.ro doc.|Codice articolo@20|Data@10|Prezzo@18P|Quantità|Sconto@10|Numerazione@18|Tipo Documento@18", 0, 1);
|
||||
TString_array & el = sheet.rows_array();
|
||||
TString form;
|
||||
TRelation * rel = new TRelation(LF_DOC);
|
||||
TRectype from(rel->curr());
|
||||
TRectype to(rel->curr());
|
||||
TDate datadoc = mask.get_date(F_DATADOC);
|
||||
const long codcf = mask.get_long(F_CODCF);
|
||||
const TString16 numdoc(mask.get(F_NDOC));
|
||||
const int last_anno = mask.get_int(F_ANNO);
|
||||
const int current_doc_row = sh.selected() + 1;
|
||||
const int first_anno = last_anno - ((TTipo_riga_documento&)mask.doc()[current_doc_row].tipo()).search_years();
|
||||
TToken_string nums(((TTipo_riga_documento&)mask.doc()[current_doc_row].tipo()).search_nums());
|
||||
const TString& tipocf = mask.get(F_TIPOCF);
|
||||
|
||||
from.put(DOC_TIPOCF, tipocf);
|
||||
to.put(DOC_TIPOCF, tipocf);
|
||||
from.put(DOC_CODCF, codcf);
|
||||
to.put(DOC_CODCF, codcf);
|
||||
from.put(DOC_PROVV, "D");
|
||||
to.put(DOC_PROVV, "D");
|
||||
from.put(DOC_ANNO, first_anno);
|
||||
to.put(DOC_ANNO, last_anno);
|
||||
to.put(DOC_DATADOC, datadoc);
|
||||
|
||||
|
||||
if (nums.empty())
|
||||
nums = mask.get(F_CODNUM);
|
||||
|
||||
TString8 first_num(nums.get(0));
|
||||
TString8 last_num(first_num);;
|
||||
|
||||
form << "((CODNUM==\"" << first_num << "\")";
|
||||
for (const char * s = nums.get(); s && *s; s = nums.get())
|
||||
{
|
||||
if (first_num > s)
|
||||
first_num = s;
|
||||
if (last_num < s)
|
||||
last_num = s;
|
||||
form << "||(CODNUM==\"" << s << "\")";
|
||||
}
|
||||
form << ")";
|
||||
|
||||
TCursor cur(rel, form, 2, &from, &to);
|
||||
const int items = cur.items();
|
||||
cur.freeze();
|
||||
TRecord_array r(LF_RIGHEDOC, RDOC_NRIGA);
|
||||
TRectype rec(LF_RIGHEDOC);
|
||||
|
||||
for(cur = 0L; cur.pos() < items; ++cur)
|
||||
{
|
||||
const TString16 data(cur.curr().get(DOC_DATADOC));
|
||||
const TString80 num(cache().get("%NUM", cur.curr().get(DOC_CODNUM), "S0"));
|
||||
const TString80 tipo(cache().get("%TIP", cur.curr().get(DOC_TIPODOC), "S0"));
|
||||
|
||||
rec.zero();
|
||||
rec.put(RDOC_PROVV, cur.curr().get(DOC_PROVV));
|
||||
rec.put(RDOC_ANNO, cur.curr().get(DOC_ANNO));
|
||||
rec.put(RDOC_CODNUM, cur.curr().get(DOC_CODNUM));
|
||||
rec.put(RDOC_NDOC, cur.curr().get(DOC_NDOC));
|
||||
r.read(rec);
|
||||
|
||||
int last_row = r.last_row();
|
||||
|
||||
for (int i = r.first_row(); i <= last_row; i = r.succ_row(i))
|
||||
{
|
||||
const TRectype & rdoc = r.row(i);
|
||||
const TString & codart = rdoc.get(RDOC_CODART);
|
||||
|
||||
if (codart.not_empty())
|
||||
{
|
||||
TToken_string row;
|
||||
|
||||
row.add(rdoc.get(RDOC_NDOC));
|
||||
row.add(codart);
|
||||
row.add(data);
|
||||
row.add(rdoc.get(RDOC_PREZZO));
|
||||
row.add(rdoc.get(RDOC_QTA));
|
||||
row.add(rdoc.get(RDOC_SCONTO));
|
||||
row.add(num);
|
||||
row.add(tipo);
|
||||
row.add(rdoc.get(RDOC_NRIGA));
|
||||
el.add(row);
|
||||
}
|
||||
}
|
||||
}
|
||||
el.TArray::sort(sort_sheet);
|
||||
|
||||
const int max_rows = ((TTipo_riga_documento&)mask.doc()[current_doc_row].tipo()).max_rows_art();
|
||||
|
||||
if (max_rows > 0)
|
||||
{
|
||||
const int items = el.items();
|
||||
TString80 last_cod;
|
||||
long last_doc = 0L;
|
||||
real last_price(ZERO);
|
||||
int count = 0;
|
||||
for (int i = 0 ; i < items; i++)
|
||||
{
|
||||
const TString & codart = el.row(i).get(1);
|
||||
long ndoc = el.row(i).get_long(0);
|
||||
real price(el.row(i).get(3));
|
||||
|
||||
if (codart != last_cod)
|
||||
{
|
||||
last_cod = codart;
|
||||
last_doc = ndoc;
|
||||
last_price = price;
|
||||
count = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ndoc == last_doc && price == last_price)
|
||||
{
|
||||
el.destroy(i);
|
||||
}
|
||||
else
|
||||
{
|
||||
last_doc = ndoc;
|
||||
last_price = price;
|
||||
count++;
|
||||
if (count > max_rows)
|
||||
el.destroy(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
el.pack();
|
||||
}
|
||||
|
||||
if (sheet.run() == K_ENTER)
|
||||
{
|
||||
__in_handler = true;
|
||||
const TString & xx = sheet.row(-1).get(3);
|
||||
row_mask.set(FR_PREZZO, xx);
|
||||
const TString & codart_sel = sheet.row(-1).get(1);
|
||||
row_mask.set(FR_CODART, codart_sel, 3);
|
||||
row_mask.field(FR_CODART).set_dirty(false);
|
||||
const TString & prezzo = sheet.row(-1).get(3);
|
||||
row_mask.set(FR_PREZZO, prezzo);
|
||||
const TString & sconto = sheet.row(-1).get(5);
|
||||
row_mask.set(FR_SCONTO, sconto);
|
||||
__in_handler = false;
|
||||
}
|
||||
}
|
||||
|
||||
void search_price_article(TMask_field& f, KEY key )
|
||||
{
|
||||
TMask& row_mask = f.mask();
|
||||
TSheet_field& sh = *row_mask.get_sheet();
|
||||
TDocumento_mask& mask = (TDocumento_mask &)sh.mask();
|
||||
const int current_doc_row = sh.selected() + 1;
|
||||
const TString16 numdoc(mask.get(F_NDOC));
|
||||
const TString80 codart(row_mask.get(FR_CODART));
|
||||
TDate datadoc = mask.get_date(F_DATADOC);
|
||||
const char tipocf = mask.get(F_TIPOCF)[0];
|
||||
const TString16 codcf = mask.get(F_CODCF);
|
||||
|
||||
TToken_string nums(((TTipo_riga_documento&)mask.doc()[current_doc_row].tipo()).search_nums());
|
||||
|
||||
if (nums.empty())
|
||||
nums = mask.get(F_CODNUM);
|
||||
|
||||
TString8 first_num(nums.get(0));
|
||||
TString8 last_num(first_num);;
|
||||
TString form;
|
||||
|
||||
form << "(33->TIPOCF==\"" << tipocf << "\")&&(33->CODCF==\"" << (const char *)codcf << "\")&&(ANSI(33->DATADOC)<=\"" << datadoc.string(ANSI) << "\")" << "&&((CODNUM==\"" << first_num << "\")";
|
||||
for (const char * s = nums.get(); s && *s; s = nums.get())
|
||||
{
|
||||
if (first_num > s)
|
||||
first_num = s;
|
||||
if (last_num < s)
|
||||
last_num = s;
|
||||
form << "||(CODNUM==\"" << s << "\")";
|
||||
}
|
||||
form << ")";
|
||||
|
||||
TRelation rel(LF_RIGHEDOC);
|
||||
TRectype from(rel.curr());
|
||||
TRectype to(rel.curr());
|
||||
rel.add(LF_DOC, "PROVV==PROVV|ANNO=ANNO|CODNUM==CODNUM|NDOC==NDOC");
|
||||
|
||||
const int last_anno = mask.get_int(F_ANNO);
|
||||
const int first_anno = last_anno - ((TTipo_riga_documento&)mask.doc()[current_doc_row].tipo()).search_years();
|
||||
|
||||
from.put(RDOC_CODART, codart);
|
||||
from.put(RDOC_CODNUM, first_num);
|
||||
from.put(RDOC_ANNO, first_anno);
|
||||
from.put(RDOC_PROVV, "D");
|
||||
to.put(RDOC_CODART, codart);
|
||||
to.put(RDOC_CODNUM, last_num);
|
||||
to.put(RDOC_ANNO, last_anno);
|
||||
to.put(RDOC_PROVV, "D");
|
||||
TSorted_cursor cur(&rel, "33->DATADOC-|CODNUM|NDOC-", form, 5, &from, &to);
|
||||
cur.items();
|
||||
cur.freeze();
|
||||
cur.relation()->add("%NUM", "CODTAB==CODNUM", 1, 0, 201);
|
||||
cur.relation()->add("%TIP", "CODTAB==TIPODOC", 1, LF_DOC, 202);
|
||||
|
||||
TCursor_sheet sheet(&cur, "NDOC|CODART|33->DATADOC|PREZZO|QTA|SCONTO|-201->S0|-202->S0",
|
||||
"Ricerca Prezzi",
|
||||
"N.ro doc.|Codice articolo@20|Data@10|Prezzo@18P|Quantità|Sconto@10|Numerazione@18|Tipo Documento@18",
|
||||
0, 4);
|
||||
|
||||
sheet.add_string (101, 0, "Codice Articolo ", 2, 1, 20, "D");
|
||||
sheet.add_string (102, 0, "Descrizione ", 2, 3, 50, "D");
|
||||
sheet.set(101, codart);
|
||||
sheet.set(102, cache().get(LF_ANAMAG, codart, "DESCR"));
|
||||
if (sheet.run() == K_ENTER)
|
||||
{
|
||||
__in_handler = true;
|
||||
row_mask.set(FR_CODART, codart, 3);
|
||||
row_mask.field(FR_CODART).set_dirty(false);
|
||||
__in_handler = false;
|
||||
const TString & prezzo = sheet.row(-1).get(3);
|
||||
row_mask.set(FR_PREZZO, prezzo);
|
||||
const TString & sconto = sheet.row(-1).get(5);
|
||||
row_mask.set(FR_SCONTO, sconto);
|
||||
}
|
||||
}
|
||||
|
||||
bool search_price_handler(TMask_field& f, KEY key )
|
||||
{
|
||||
TMask& row_mask = f.mask();
|
||||
TSheet_field& sh = *row_mask.get_sheet();
|
||||
|
||||
if (key == K_F8 && !sh.sheet_mask().is_running())
|
||||
{
|
||||
const TString & codart = row_mask.get(FR_CODART);
|
||||
if (codart.empty())
|
||||
search_price(f, key);
|
||||
else
|
||||
search_price_article(f,key);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
if ((key == K_TAB && f.focusdirty()))
|
||||
{
|
||||
TDocumento_mask& mask = (TDocumento_mask &)sh.mask();
|
||||
|
||||
const TString80 codart(row_mask.get(FR_CODART));
|
||||
|
||||
if (!__in_handler && codart.not_empty() && row_mask.get(FR_PREZZO).empty())
|
||||
{
|
||||
TDate datadoc = mask.get_date(F_DATADOC);
|
||||
const char tipocf = mask.get(F_TIPOCF)[0];
|
||||
const TString16 codcf = mask.get(F_CODCF);
|
||||
const int current_doc_row = sh.selected() + 1;
|
||||
|
||||
TToken_string nums(((TTipo_riga_documento&)mask.doc()[current_doc_row].tipo()).search_nums());
|
||||
|
||||
if (nums.empty())
|
||||
nums = mask.get(F_CODNUM);
|
||||
|
||||
TString8 first_num(nums.get(0));
|
||||
TString8 last_num(first_num);;
|
||||
|
||||
TString form;
|
||||
form << "(33->TIPOCF==\"" << tipocf << "\")&&(33->CODCF==\"" << (const char *)codcf << "\")&&(ANSI(33->DATADOC)<=\"" << datadoc.string(ANSI) << "\")" << "&&((CODNUM==\"" << first_num << "\")";
|
||||
for (const char * s = nums.get(); s && *s; s = nums.get())
|
||||
{
|
||||
if (first_num > s)
|
||||
first_num = s;
|
||||
if (last_num < s)
|
||||
last_num = s;
|
||||
form << "||(CODNUM==\"" << s << "\")";
|
||||
}
|
||||
form << ")";
|
||||
|
||||
TRelation rel(LF_RIGHEDOC);
|
||||
TRectype from(rel.curr());
|
||||
TRectype to(rel.curr());
|
||||
rel.add(LF_DOC, "PROVV==PROVV|ANNO=ANNO|CODNUM==CODNUM|NDOC==NDOC");
|
||||
|
||||
const int last_anno = mask.get_int(F_ANNO);
|
||||
const int first_anno = last_anno - ((TTipo_riga_documento&)mask.doc()[current_doc_row].tipo()).search_years();
|
||||
|
||||
from.put(RDOC_CODART, codart);
|
||||
from.put(RDOC_CODNUM, first_num);
|
||||
from.put(RDOC_ANNO, first_anno);
|
||||
from.put(RDOC_PROVV, "D");
|
||||
to.put(RDOC_CODART, codart);
|
||||
to.put(RDOC_CODNUM, last_num);
|
||||
to.put(RDOC_ANNO, last_anno);
|
||||
to.put(RDOC_PROVV, "D");
|
||||
|
||||
TSorted_cursor cur(&rel, "33->DATADOC-|CODNUM|NDOC-", "", 5, &from, &to);
|
||||
cur.setfilter(form, true);
|
||||
if (cur.items() > 0L)
|
||||
{
|
||||
cur = 0L;
|
||||
__in_handler = true;
|
||||
row_mask.set(FR_CODART, codart, 3);
|
||||
row_mask.field(FR_CODART).set_dirty(false);
|
||||
__in_handler = false;
|
||||
const TString & prezzo = cur.curr().get(RDOC_PREZZO);
|
||||
row_mask.set(FR_PREZZO, prezzo);
|
||||
const TString & sconto = cur.curr().get(RDOC_SCONTO);
|
||||
row_mask.set(FR_SCONTO, sconto);
|
||||
}
|
||||
}
|
||||
}
|
||||
return codart_handler( f, key);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static bool __in_handler = false;
|
||||
|
||||
int sort_sheet(const TObject** a, const TObject** b)
|
||||
|
Loading…
x
Reference in New Issue
Block a user