Patch level : 10.0 109

Files correlati     :
Ricompilazione Demo : [ ]
Commento           :

Riportata la versione 3.2 1208


git-svn-id: svn://10.65.10.50/trunk@17106 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2008-08-27 12:33:16 +00:00
parent 83b1c93d8d
commit 45b73d97fe
10 changed files with 318 additions and 29 deletions

View File

@ -22,3 +22,4 @@
#define TRN_LNDOC "LNDOC"
#define TRN_NUMSCONTR "NUMSCONTR"
#define TRN_CHIUSO "CHIUSO"

View File

@ -27,28 +27,28 @@ ENDPAGE
PAGE "Parametri ditta" 0 0 0 0
STRING FD_FILIALE 2
STRING FD_NEGOZIO 2
BEGIN
PROMPT 2 2 "Filiale "
FIELD FILIALE
PROMPT 2 2 "Negozio "
FIELD NEGOZIO
USE FLD
INPUT CODTAB FD_FILIALE
INPUT CODTAB FD_NEGOZIO
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT FD_FILIALE CODTAB
OUTPUT FD_DESFIL S0
OUTPUT FD_NEGOZIO CODTAB
OUTPUT FD_DESNEG S0
CHECKTYPE REQUIRED
FLAG "UZ"
END
STRING FD_DESFIL 50 40
STRING FD_DESNEG 50 40
BEGIN
PROMPT 30 2 ""
USE FLD KEY 2
INPUT S0 FD_DESFIL
INPUT S0 FD_DESNEG
DISPLAY "Descrizione@50" S0
DISPLAY "Codice" CODTAB
COPY OUTPUT FD_FILIALE
COPY OUTPUT FD_NEGOZIO
END
STRING FD_CODNUM 4
@ -183,6 +183,12 @@ BEGIN
FIELD CODPVAR
END
STRING FD_QTACHAR 1
BEGIN
PROMPT 2 18 "Carattere sep.qta "
FIELD QTACHAR
END
ENDPAGE
PAGE "Pagamenti" 1 1 60 14

View File

@ -12,6 +12,7 @@
#include "../mg/anamag.h"
#include <clifo.h>
#include "../ve/vepriv.h"
#include "../ve/ve0100.h"
#include "../ve/veini.h"
#include "../ve/veuml.h"
@ -109,7 +110,7 @@ class TScontrino_application : public TMotore_application
TTurno_vendita *_turno;
TOperatore * _cassiere;
TOperatore * _responsabile;
TString8 _filiale;
TString8 _negozio;
TString8 _numdoc;
TString8 _tipodoc;
TString8 _codlist;
@ -126,6 +127,7 @@ class TScontrino_application : public TMotore_application
bool _chk_doc;
bool _barcode_peso_var;
bool _peso_var;
char _qta_char;
int _npag;
int _ncassa;
int _cassetto;
@ -160,12 +162,14 @@ public:
virtual void print();
int ncassa() const { return _ncassa;}
int def_qta() const { return _def_qta;}
char qta_char() const { return _qta_char ;}
const TString & numdoc() const { return _numdoc;}
const TString & codlist() const { return _codlist;}
const TString & numdocf() const { return _numdocf;}
const TString & tipodocf() const { return _tipodocf;}
const TString & codmag() const { return _codmag;}
const TString & codmagc() const { return _codmagc;}
const TString & negozio() const { return _negozio;}
const TString_array & tv_cmds() const {return _tv_cmds;}
const TString_array & tv_labels() const {return _tv_labels;}
const TOperatore & curr_user() const { return _responsabile != NULL ? *_responsabile : *_cassiere;}
@ -183,7 +187,13 @@ inline TScontrino_application& sapp() { return (TScontrino_application &) main_a
class TScontrino_mask : public TDocumento_mask
{
int _row_to_remove;
TToken_string _deleted_rows;
protected:
static bool scodart_handler( TMask_field& f, KEY key );
static bool sqta_handler( TMask_field& f, KEY key );
static bool sprezzo_handler( TMask_field& f, KEY key );
static bool turno_handler( TMask_field& f, KEY key );
static bool chiudi_handler( TMask_field& f, KEY key );
static bool sospendi_handler( TMask_field& f, KEY key );
@ -193,16 +203,25 @@ protected:
static bool perms_handler( TMask_field& f, KEY key );
static bool ss_notify(TSheet_field& ss, int r, KEY key);
static bool check_perms(TDocumento & doc, TSheet_field & s, TDocumento_mask & m, int nrow);
static bool search_art_handler( TMask_field& f, KEY key );
public:
void set_row_to_remove(int r) { _row_to_remove = r;}
virtual void on_idle();
void show_giacenza();
virtual TVariable_mask * riga_mask(int numriga);
virtual bool is_omaggio_enabled() { return sapp().curr_user().can_change_omaggi();}
TToken_string & deleted_rows() { return _deleted_rows;}
TScontrino_mask(const char* tipodoc);
virtual ~TScontrino_mask() {}
};
TScontrino_mask::TScontrino_mask(const char* tipodoc)
:TDocumento_mask(tipodoc)
:TDocumento_mask(tipodoc), _row_to_remove(0),
_deleted_rows("", '£')
{
set_handler(DLG_TURNO, turno_handler);
set_handler(DLG_CHIUDI, chiudi_handler);
@ -210,6 +229,7 @@ TScontrino_mask::TScontrino_mask(const char* tipodoc)
set_handler(DLG_RICSOSP, search_sospesi_handler);
set_handler(DLG_RICCHIUSI, search_chiusi_handler);
set_handler(DLG_PERMS, perms_handler);
set_handler(F_CODSEARCH, search_art_handler);
if (id2pos(F_CODLIST) < 0)
add_string(F_CODLIST, 0, "Listino", 60, 60, 4, "HP");
for (short id = F_FUNC1; id <= F_FUNC8; id++)
@ -231,6 +251,7 @@ TScontrino_mask::TScontrino_mask(const char* tipodoc)
hide(id);
}
sfield(F_SHEET).set_notify( ss_notify );
sfield(F_SHEET).set_auto_append();
}
bool TScontrino_mask::check_perms(TDocumento & doc, TSheet_field & s, TDocumento_mask & m, int nrow)
@ -283,9 +304,26 @@ bool TScontrino_mask::check_perms(TDocumento & doc, TSheet_field & s, TDocumento
return ok;
}
void TScontrino_mask::show_giacenza()
{
TString codart = get(F_CODSEARCH);
real giac, disp;
if (codart.full())
{
const TString& annoes = get(F_ANNO);
TArticolo_giacenza art(codart);
giac = art.disponibilita(annoes, sapp().codmag(), "", true);
disp = art.disponibilita(annoes, sapp().codmag(), "", false);
}
set(F_CURGIAC, giac.string());
set(F_CURDISP, disp.string());
}
bool TScontrino_mask::ss_notify( TSheet_field& ss, int r, KEY key )
{
TDocumento_mask& m = (TDocumento_mask&)ss.mask();
TScontrino_mask& m = (TScontrino_mask&)ss.mask();
CHECK(&m == &app().curr_mask(), "Cast dal cas");
TDocumento& doc = m.doc();
@ -298,6 +336,12 @@ bool TScontrino_mask::ss_notify( TSheet_field& ss, int r, KEY key )
if (riga.is_omaggio() && !sapp().curr_user().can_change_omaggi())
return false;
TString row = ss.row(r);
row.replace('|', '!'),
m.deleted_rows().add(row);
}
break;
case K_CTRL + K_DEL:
@ -337,11 +381,49 @@ bool TScontrino_mask::ss_notify( TSheet_field& ss, int r, KEY key )
}
}
break;
case K_CTRL + K_TAB:
if (r > 0)
{
TRiga_documento& riga_prec = doc[r];
TRiga_documento& riga = doc[r + 1];
if (riga.get(RDOC_CODART).full())
{
if (riga_prec.get(RDOC_CODART) == riga.get(RDOC_CODART) &&
riga_prec.get(RDOC_LIVELLO) == riga.get(RDOC_LIVELLO) &&
riga_prec.get(RDOC_UMQTA) == riga.get(RDOC_UMQTA) &&
riga_prec.get_real(RDOC_PREZZO) == riga.get_real(RDOC_PREZZO) &&
riga_prec.get(RDOC_SCONTO) == riga.get(RDOC_SCONTO))
{
m.set_row_to_remove(r);
}
else
if (r < ss.items() - 1)
{
TRiga_documento& riga_succ = doc[r + 2];
if (riga_succ.get(RDOC_CODART) == riga.get(RDOC_CODART) &&
riga_prec.get(RDOC_LIVELLO) == riga.get(RDOC_LIVELLO) &&
riga_succ.get(RDOC_UMQTA) == riga.get(RDOC_UMQTA) &&
riga_succ.get_real(RDOC_PREZZO) == riga.get_real(RDOC_PREZZO) &&
riga_succ.get(RDOC_SCONTO) == riga.get(RDOC_SCONTO))
m.set_row_to_remove(r + 1);
}
}
}
break;
case K_ENTER:
case K_INS:
{
if (!check_perms(doc, ss, m, r + 1))
return false;
if (ss.items() == 0)
{
const long ora = daytime();
doc.put(TRN_INIZIO, ora);
m.deleted_rows().cut(0);
}
}
break;
default:
@ -358,6 +440,165 @@ bool TScontrino_mask::turno_handler( TMask_field& f, KEY key )
return true;
}
void TScontrino_mask::on_idle()
{
if (_row_to_remove > 0)
{
TSheet_field & ss = sfield(F_SHEET);
int selected = ss.selected();
TDocumento& d = doc();
TRiga_documento& riga_prec = d[_row_to_remove];
TRiga_documento& riga = d[_row_to_remove + 1];
real qta = riga_prec.get_real(RDOC_QTA);
qta += riga.get_real(RDOC_QTA);
riga_prec.put(RDOC_QTA, qta);
riga_prec.autoload(ss);
ss.update_mask(_row_to_remove - 1);
ss.destroy(_row_to_remove);
d.destroy_row(_row_to_remove + 1, true);
ss.force_update();
if (selected >= _row_to_remove)
selected--;
if (selected >= ss.items())
selected = ss.items() -1 ;
ss.select(selected);
_row_to_remove = 0;
}
TDocumento_mask::on_idle();
}
TVariable_mask * TScontrino_mask::riga_mask(int numriga)
{
const TRiga_documento& riga = doc()[numriga + 1];
const TTipo_riga_documento& tiporiga = riga.tipo();
TString16 name; tiporiga.mask_name(name);
TVariable_mask* m = (TVariable_mask *) maskrighe().objptr(name);
if (m == NULL)
{
m = TDocumento_mask::riga_mask(numriga);
if ( m != NULL)
{
const int pos = m->id2pos(FR_CODART);
if (pos >= 0)
{
const TMask_field & f = m->field(FR_CODART);
if (f.is_edit())
{
TBrowse * browse = ((TEdit_field &) f).browse();
const char tipo_r = tiporiga.tipo();
if (browse )
{
const TCursor* cur = browse->cursor();
if (cur)
{
const int num = cur->file().num();
if (num == LF_ANAMAG || num == LF_CODCORR)
m->set_handler( FR_CODART, scodart_handler );
}
}
}
}
if ( int pos = m->id2pos(FR_QTA) >= 0)
m->set_handler(FR_QTA, sqta_handler);
if ( int pos = m->id2pos(FR_PREZZO) >= 0)
m->set_handler(FR_PREZZO, sprezzo_handler);
}
}
return m;
}
bool TScontrino_mask::search_art_handler( TMask_field& f, KEY key )
{
if (f.to_check(key))
{
TScontrino_mask & mask = (TScontrino_mask &) f.mask();
mask.show_giacenza();
}
return true;
}
bool TScontrino_mask::scodart_handler(TMask_field& f, KEY key )
{
if (f.to_check(key))
{
const TString & val = f.get();
const int pos = val.find(sapp().qta_char());
if (pos >= 0)
{
TMask& row_mask = f.mask();
const TString80 qta = val.left(pos);
const TString80 cod = val.mid(pos + 1);
row_mask.set(FR_CODART, cod, 0x3);
row_mask.set(FR_QTA, qta, 0x3);
return true;
}
}
const bool ok = ::codart_handler(f, key);
if (ok && f.to_check(key, false))
{
TMask& row_mask = f.mask();
TSheet_field& s = *row_mask.get_sheet();
TDocumento_mask & mask = (TDocumento_mask &) s.mask();
const int srow = s.selected();
const int drow = srow + 1;
s.update_row(srow);
mask.doc()[drow].autosave(s);
mask.update_progs();
}
return ok;
}
bool TScontrino_mask::sqta_handler(TMask_field& f, KEY key )
{
if (f.to_check(key, false))
{
TMask& row_mask = f.mask();
TSheet_field& s = *row_mask.get_sheet();
TDocumento_mask & mask = (TDocumento_mask &) s.mask();
const int srow = s.selected();
const int drow = srow + 1;
s.update_row(srow);
mask.doc()[drow].autosave(s);
mask.update_progs();
}
return ::qta_handler(f, key);
}
bool TScontrino_mask::sprezzo_handler(TMask_field& f, KEY key )
{
if (f.to_check(key, false))
{
TMask& row_mask = f.mask();
TSheet_field& s = *row_mask.get_sheet();
TDocumento_mask & mask = (TDocumento_mask &) s.mask();
const int srow = s.selected();
const int drow = srow + 1;
s.update_row(srow);
mask.doc()[drow].autosave(s);
mask.update_progs();
}
return true;
}
bool TScontrino_mask::chiudi_handler( TMask_field& f, KEY key )
{
if (key == K_SPACE)
@ -489,7 +730,7 @@ bool TScontrino_mask::search_chiusi_handler(TMask_field& f, KEY key)
rel.lfile().set_curr(new TDocumento);
TCursor cur(&rel, "", 1, &filtrec, &filtrec);
TSorted_cursor cur(&rel, "NDOC-", "", 1, &filtrec, &filtrec);
TString80 filt; filt.format("(STATO>=\"%c\")&&(TIPODOC==\"%s\")&&(CODCF==\"\")", m.doc().tipo().stato_chiuso(), (const char *) m.get(F_TIPODOC));
cur.setfilter(filt);
@ -661,8 +902,14 @@ void TChiusura_scontrino_mask::update_doc(TScontrino_mask & m, const TTurno_vend
doc.put(TRN_PROGR, t.nturno());
doc.put(TRN_USERNAME, t.user());
doc.put("TEMPUSERNAME", t.superuser());
TToken_string del(doc.get("DELETED_ROWS"), '£');
del.add(m.deleted_rows());
doc.put("DELETED_ROWS", del);
if (chiudi)
{
const long ora = daytime();
doc.stato(stato);
m.set(F_STATO, doc.get(DOC_STATO));
doc.put(TRN_INC01, get(F_INC01));
@ -674,6 +921,8 @@ void TChiusura_scontrino_mask::update_doc(TScontrino_mask & m, const TTurno_vend
doc.put(TRN_INC07, get(F_INC07));
doc.put(TRN_INC08, get(F_INC08));
doc.put(TRN_RESTI, get(F_RESTO));
doc.put(TRN_FINE, ora);
doc.put("NEGOZIO", sapp().negozio());
const long codcf = get_long(F_CODCFC);
if (codcf > 0L)
@ -820,7 +1069,7 @@ bool TScontrino_application::user_create( )
_turno = new TTurno_vendita;
_chiusura = new TChiusura_scontrino_mask;
_filiale = d.get("FILIALE");
_negozio = d.get("NEGOZIO");
_numdoc = d.get("CODNUM");
_tipodoc = d.get("TIPODOC");
_codlist = d.get("CODLIST");
@ -829,7 +1078,8 @@ bool TScontrino_application::user_create( )
_chk_doc = d.get_bool("CHECKDOC");
_barcode_peso_var = d.get_bool("BARPVAR");
_peso_var = d.get_bool("CODPVAR");
_qta_char = d.get_char("QTACHAR", NULL, -1, ')');
_chiusura->init(d);
@ -860,7 +1110,7 @@ bool TScontrino_application::user_create( )
_tv_cmds.add(w.get("TVCMD", "", i));
}
_bye_bye = w.get("BYEBYE");
_doppio_zero = w.get_bool("DoppioZero", NULL, -1, true);
_doppio_zero = w.get_bool("DoppioZero", NULL, -1, false);
_sc_mask = new TScontrino_mask(_tipodoc);
@ -1046,7 +1296,7 @@ void TScontrino_application::print_wincor()
TParagraph_string para("", text_len);
const int rows = doc.physical_rows();
for (int r = 1; r < rows; r++)
for (int r = 1; r <= rows; r++)
{
const TRiga_documento& riga = doc[r];

View File

@ -17,5 +17,6 @@
#define F_CODCFC 122
#define F_RAGSOCC 123
#define F_DAFATT 124
#define F_CODSEARCH 205
#define DLG_FATT 200

View File

@ -16,13 +16,13 @@ END
CURRENCY F_TOTDOC 18
BEGIN
PROMPT 2 3 "Totale scontrino "
PROMPT 2 3 "@bTotale scontrino "
FLAGS "D"
END
CURRENCY F_CASSAINI 18
BEGIN
PROMPT 42 3 "Cassa "
PROMPT 46 3 "Cassa "
FLAGS "D"
END
@ -76,13 +76,13 @@ END
CURRENCY F_RESTO 18
BEGIN
PROMPT 2 13 "Resto "
PROMPT 2 13 "@bResto "
FLAGS "D"
END
CURRENCY F_SALDO 18
BEGIN
PROMPT 42 13 "Saldo "
PROMPT 46 13 "Saldo "
FLAGS "D"
GROUP 1
END

View File

@ -1,11 +1,12 @@
#define FD_FILIALE 101
#define FD_NEGOZIO 101
#define FD_CODNUM 102
#define FD_TIPODOC 103
#define FD_CODLIST 106
#define FD_CHECKDOC 107
#define FD_BARPVAR 108
#define FD_CODPVAR 109
#define FD_QTACHAR 110
#define ROW_INC 10
#define FD_CODPAG01 111
@ -36,7 +37,7 @@
#define FD_DESLIST 202
#define FD_DESNUM 204
#define FD_DESTIPODOC 205
#define FD_DESFIL 206
#define FD_DESNEG 206
#define FD_CODNUMF 207
#define FD_DESNUMF 208

View File

@ -470,5 +470,35 @@ TTurno_vendita::TTurno_vendita() : _rec(LF_TURNI)
TOperatore::TOperatore(const char * user) : _rec(LF_TAB)
{
_rec = cache().get("OPD", user);
const TString & gruppo = cache().get(LF_USER, user, USR_GROUPNAME);
if (gruppo.full())
{
const TRectype & recgr = cache().get("OPD", gruppo);
if(!recgr.empty())
{
if (max_scontrino() <= ZERO)
_rec.put("R0", recgr.get_real("R0"));
if (max_abbuono() <= ZERO)
_rec.put("R1", recgr.get_real("R1"));
if (!can_change_price())
_rec.put("B0", recgr.get_bool("B0"));
if (!can_sotto_costo())
_rec.put("B1", recgr.get_bool("B1"));
if (!can_change_omaggi())
_rec.put("B2", recgr.get_bool("B2"));
if (!can_change_sconti())
_rec.put("B3", recgr.get_bool("B3"));
if (!can_resi())
_rec.put("B4", recgr.get_bool("B4"));
if (!can_invoice())
_rec.put("B5", recgr.get_bool("B5"));
if (max_sconto() <= ZERO)
_rec.put("R2", recgr.get_real("R2"));
if (provvigione() <= ZERO)
_rec.put("R3", recgr.get_real("R3"));
}
}
}

View File

@ -22,7 +22,7 @@ Item_01 = "Statistiche personalizzate", "vd0 -0 %TDT"
Item_02 = "Stagioni", "vd0 -0 %STG"
Item_03 = "Reparti", "vd0 -0 RPD", "F"
Item_04 = "Operatori", "vd0 -0 OPD", "F"
Item_05 = "Filiali", "vd0 -0 FLD", "F"
Item_05 = "Negozi", "vd0 -0 FLD", "F"
Item_06 = "Casse", "vd0 -0 CAS", "F"
[VDMENU_020]
@ -34,7 +34,7 @@ Item_01 = "Statistiche personalizzate", "vd0 -1 %TDT"
Item_02 = "Stagioni", "vd0 -1 %STG"
Item_03 = "Reparti", "vd0 -1 RPD", "F"
Item_04 = "Operatori", "vd0 -1 OPD", "F"
Item_05 = "Filiali", "vd0 -1 FLD", "F"
Item_05 = "Negozi", "vd0 -1 FLD", "F"
Item_06 = "Casse", "vd0 -1 CAS", "F"
[VDMENU_030]

View File

@ -1,6 +1,6 @@
#include "../ba/ba3200.h"
PAGE "Stampa filiali" -1 -1 50 8
PAGE "Stampa Negozi" -1 -1 50 8
STRING F_INIZIO1 2
BEGIN

View File

@ -6,7 +6,7 @@ TOOLBAR "Toolbar" 0 0 0 2
ENDPAGE
PAGE "Filiali" -1 -1 78 8
PAGE "Negozio" -1 -1 78 8
GROUPBOX DLG_NULL 75 5
BEGIN
@ -17,7 +17,7 @@ END
STRING F_CODICE 2
BEGIN
PROMPT 4 2 "Codice "
HELP "Codice filiale"
HELP "Codice negozio"
FIELD CODTAB
FLAGS "UZ"
KEY 1
@ -33,7 +33,7 @@ END
STRING F_DESCR 70 50
BEGIN
PROMPT 4 4 "Descrizione "
HELP "Descrizione filiale"
HELP "Descrizione negozio"
FIELD S0
KEY 2
USE FLD KEY 2