Corretta gestione occasionali.

Corretta gestione valori di default in sede di cambio tipo riga

git-svn-id: svn://10.65.10.50/branches/R_10_00@22718 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2012-08-09 14:31:57 +00:00
parent 5bfd248c7b
commit 6b39ab9e24
10 changed files with 280 additions and 67 deletions

View File

@ -1,10 +1,9 @@
#include <applicat.h> #include <applicat.h>
#include <modaut.h> #include <modaut.h>
#include <relation.h>
#include "clifor.h"
#include "condv.h"
#include "velib.h" #include "velib.h"
#include "condv.h"
#include "../li/letint.h" #include "../li/letint.h"
#include "../cg/cfban.h" #include "../cg/cfban.h"
@ -51,7 +50,7 @@ TRectype& TCli_for::vendite() const
const char t = tipo(); const char t = tipo();
const long c = codice(); const long c = codice();
if (_ven_rec.empty() || t != *(const char *) (*_ven_tipo) || c != (long) *_ven_codice) if (_ven_rec.empty() || t != *(const char*)(*_ven_tipo) || c != (long)*_ven_codice)
{ {
TLocalisamfile v(LF_CFVEN); TLocalisamfile v(LF_CFVEN);
TRectype& vr = ((TCli_for *)this)->_ven_rec; // fool const TRectype& vr = ((TCli_for *)this)->_ven_rec; // fool const

View File

@ -50,8 +50,6 @@ class TCli_for : public TMultiple_rectype
bool _extended; bool _extended;
bool _lettera_found; bool _lettera_found;
protected: protected:
virtual int write_rewrite(TBaseisamfile& f, bool re = FALSE) const; virtual int write_rewrite(TBaseisamfile& f, bool re = FALSE) const;
void init(); void init();

View File

@ -14,10 +14,10 @@
#include "veuml1.h" #include "veuml1.h"
#include "verig.h" #include "verig.h"
#include "velib04.h" #include "velib04.h"
#include "../mg/mglib.h"
#include "sconti.h" #include "sconti.h"
#include "../mg/anamag.h" #include <occas.h>
#include "../mg/mglib.h"
TCursor& TMotore_application::get_filtered_cursor() const TCursor& TMotore_application::get_filtered_cursor() const
{ {
@ -752,8 +752,8 @@ void TMotore_application::sheet2ini(TSheet_field &sheet,TConfig& ini)
for (r = 1; r <= sheet.items(); r++) for (r = 1; r <= sheet.items(); r++)
{ {
defpar.format("%d,%d",LF_RIGHEDOC,r); defpar.format("%d,%d",LF_RIGHEDOC,r);
const TMask * sm = m.riga_mask(r-1); const TMask* sm = m.riga_mask(r-1);
const TToken_string rigar = sheet.row(r-1); const TToken_string& rigar = sheet.row(r-1);
for (int sf = 0; sf < sm->fields(); sf++) for (int sf = 0; sf < sm->fields(); sf++)
{ {
TMask_field& campo = sm->fld(sf); TMask_field& campo = sm->fld(sf);
@ -765,8 +765,7 @@ void TMotore_application::sheet2ini(TSheet_field &sheet,TConfig& ini)
if (str.empty()) if (str.empty())
str = " "; str = " ";
const word field_class = campo.class_id(); const word field_class = campo.class_id();
if (field_class == CLASS_MEMO_FIELD || if (field_class == CLASS_MEMO_FIELD || field_class == CLASS_ZOOM_FIELD)
field_class == CLASS_ZOOM_FIELD)
{ {
int p; int p;
while ((p = str.find('\n', 0)) >= 0) while ((p = str.find('\n', 0)) >= 0)
@ -777,7 +776,7 @@ void TMotore_application::sheet2ini(TSheet_field &sheet,TConfig& ini)
} }
if (campo.field()->name() == RDOC_PREZZO) if (campo.field()->name() == RDOC_PREZZO)
{ {
TCodiceIVA c(sm->get(FR_CODIVA)); const TCodiceIVA c(sm->get(FR_CODIVA));
TFieldref l; TFieldref l;
real prezzo(str); real prezzo(str);
real prezzol; real prezzol;
@ -838,21 +837,41 @@ void TMotore_application::ini2mask(TConfig& ini, TMask& msk, bool query)
key.add(msk.get(F_NDOC)); key.add(msk.get(F_NDOC));
str = cache().get(LF_DOC, key, DOC_TIPODOC); str = cache().get(LF_DOC, key, DOC_TIPODOC);
} }
campo.set(str); campo.set(str);
} }
else else
{ {
TDocumento & d = doc(); TDocumento& d = doc();
d.put(DOC_TIPOCF, msk.get(F_TIPOCF)); d.put(DOC_TIPOCF, msk.get(F_TIPOCF));
d.put(DOC_CODCF, msk.get(F_CODCF)); d.put(DOC_CODCF, msk.get(F_CODCF));
const TCli_for& c = d.clifor();
const TCli_for & c = d.clifor(); // Compilo dati occasionale se presenti
const TRectype & ven_rec = c.vendite(); if (c.occasionale() && ini.set_paragraph("18")) // LF_OCCAS
{
ini.set_paragraph("33"); const TString& ocfpi = ini.get(OCC_CFPI);
if (ocfpi.full())
{
TLocalisamfile occas(LF_OCCAS);
TRectype& rec = occas.curr();
rec.put(OCC_CFPI, ocfpi);
if (occas.read(_isequal, _lock) != NOERR)
rec.zero();
TAssoc_array& vars = ini.list_variables();
FOR_EACH_ASSOC_STRING(vars, obj, key, str)
{
if (rec.exist(key))
rec.put(key, str);
}
if (occas.write_rewrite() == NOERR)
{
doc().put(DOC_OCFPI, ocfpi);
doc().occas() = rec;
}
}
}
ini.set_paragraph("33");
if (!ini.exist(DOC_CODVAL)) if (!ini.exist(DOC_CODVAL))
{ {
const TString4 codval = c.get(CLI_CODVAL); // Attenzione: Non usare TString& qui! const TString4 codval = c.get(CLI_CODVAL); // Attenzione: Non usare TString& qui!
@ -885,7 +904,10 @@ void TMotore_application::ini2mask(TConfig& ini, TMask& msk, bool query)
msk.set(F_BBAN_CONTO, iban.mid(15,12)); msk.set(F_BBAN_CONTO, iban.mid(15,12));
} }
} }
// Setta i campi che appartengono al file LF_CFVEN // Setta i campi che appartengono al file LF_CFVEN
const TRectype& ven_rec = c.vendite();
if (!ini.exist(DOC_CODABIP)) if (!ini.exist(DOC_CODABIP))
msk.set(F_CODABIP, ven_rec.get(CFV_CODABIPR), true); msk.set(F_CODABIP, ven_rec.get(CFV_CODABIPR), true);
if (!ini.exist(DOC_CODCABP)) if (!ini.exist(DOC_CODCABP))
@ -925,8 +947,8 @@ void TMotore_application::ini2mask(TConfig& ini, TMask& msk, bool query)
if (!ini.exist(DOC_ZONA)) if (!ini.exist(DOC_ZONA))
msk.set(F_CODZON, ven_rec.get(CFV_CODZONA), true); msk.set(F_CODZON, ven_rec.get(CFV_CODZONA), true);
if (!ini.exist(DOC_CODLIST)) if (!ini.exist(DOC_CODLIST))
msk.set(F_CODLIST, ven_rec.get(CFV_CODLIST), true); msk.set(F_CODLIST, ven_rec.get(CFV_CODLIST), true);
TSheet_field& f = msk.sfield(F_SHEET); TSheet_field& f = msk.sfield(F_SHEET);
TTipo_riga_documento tr; TTipo_riga_documento tr;
@ -1038,7 +1060,7 @@ void TMotore_application::ini2mask(TConfig& ini, TMask& msk, bool query)
if (!checked) //se non e' checked, il record viene autosalvato (in modo che sia salvato completamente) if (!checked) //se non e' checked, il record viene autosalvato (in modo che sia salvato completamente)
{ {
const TString & prezzo = ini.get(RDOC_PREZZO); const TString& prezzo = ini.get(RDOC_PREZZO);
if (prezzo.full()) if (prezzo.full())
f.row(f.items() - 1).add(prezzo, f.cid2index(FR_PREZZO)); f.row(f.items() - 1).add(prezzo, f.cid2index(FR_PREZZO));
rec.autosave(f); rec.autosave(f);
@ -1051,15 +1073,20 @@ void TMotore_application::ini2mask(TConfig& ini, TMask& msk, bool query)
bool TMotore_application::save_and_print(bool savedoc, TPrtype mode) bool TMotore_application::save_and_print(bool savedoc, TPrtype mode)
{ {
static bool already_printing = false;
if (already_printing)
return false;
already_printing = true;
if (savedoc) if (savedoc)
{ {
if (save(false)) if (save(false))
edit_mask().update_father_rows(false); edit_mask().update_father_rows(false);
else else
return false; return already_printing = false;
} }
TDocumento& doc = (TDocumento&)get_relation()->curr(); const TDocumento& doc = (const TDocumento&)get_relation()->curr();
const TTipo_documento& tipo = doc.tipo(); const TTipo_documento& tipo = doc.tipo();
TFilename rep; TFilename rep;
@ -1117,9 +1144,11 @@ bool TMotore_application::save_and_print(bool savedoc, TPrtype mode)
else else
{ {
rep.ext(""); rep.ext("");
return error_box("Il profilo %s non esiste", (const char*)rep); error_box("Il profilo %s non esiste", (const char*)rep);
return already_printing = false;
} }
already_printing = false;
return true; return true;
} }

View File

@ -54,7 +54,6 @@ END
STRING O_STATOPAIV 2 STRING O_STATOPAIV 2
BEGIN BEGIN
PROMPT 37 2 "Partita IVA " PROMPT 37 2 "Partita IVA "
FIELD STATOPAIV
HELP "Codice ISO dello stato" HELP "Codice ISO dello stato"
FLAGS "U" FLAGS "U"
USE %SCE USE %SCE
@ -148,7 +147,6 @@ BEGIN
PROMPT 2 9 "Sesso " PROMPT 2 9 "Sesso "
ITEM "M|Maschio" ITEM "M|Maschio"
ITEM "F|Femmina" ITEM "F|Femmina"
FIELD SESSO
END END
DATE O_DATANAS DATE O_DATANAS

View File

@ -22,6 +22,7 @@ class TRicarico_listini_mask : public TAutomask
TBit_array _dirty; TBit_array _dirty;
bool _loading; bool _loading;
TString4 _curlis; TString4 _curlis;
TString _codart; // Nuovo articolo
protected: protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
@ -220,10 +221,16 @@ void TRicarico_listini_mask::load()
} }
} }
} }
s.force_update();
if (get(F_SORT) != "A")
send_key(K_SPACE, F_SORT);
else
s.force_update();
_dirty.reset(); _dirty.reset();
disable(DLG_SAVEREC); disable(DLG_SAVEREC);
enable(DLG_RECALC); enable(DLG_RECALC);
set(F_RECORDS, s.items());
_loading = false; _loading = false;
} }
@ -268,14 +275,13 @@ bool TRicarico_listini_mask::import()
rcondv.put(RCONDV_COD, _curlis); rcondv.put(RCONDV_COD, _curlis);
rcondv.put(RCONDV_TIPORIGA, "A"); rcondv.put(RCONDV_TIPORIGA, "A");
rcondv.put(RCONDV_CODRIGA, codart); rcondv.put(RCONDV_CODRIGA, codart);
if (rcondv.write() != NOERR) if (rcondv.write() == NOERR)
{ {
msg = codart; msg = codart;
msg << TR(" articolo già a listino"); msg << TR(" articolo inserito a listino");
log.log(1, msg); log.log(1, msg);
}
else
n++; n++;
}
} }
else else
{ {
@ -294,6 +300,41 @@ bool TRicarico_listini_mask::import()
return n > 0; return n > 0;
} }
static int sort_by_artic(const TSortable& r1, const TSortable& r2, void* jolly)
{
const TToken_string& row1 = (const TToken_string&)r1;
const TToken_string& row2 = (const TToken_string&)r2;
return xvt_str_compare_ignoring_case(row1, row2);
}
static int sort_by_delta(const TSortable& r1, const TSortable& r2, void* jolly)
{
const TSheet_field& s = *(TSheet_field*)jolly;
const int i = s.cid2index(F_DELTAPRICE);
const TToken_string& row1 = (const TToken_string&)r1;
const TToken_string& row2 = (const TToken_string&)r2;
real d1, d2;
row1.get(i, d1);
row2.get(i, d2);
if (d1 == d2)
return sort_by_artic(r1, r2, jolly);
return d1 > d2 ? +1 : -1;
}
static int sort_by_price(const TSortable& r1, const TSortable& r2, void* jolly)
{
const TSheet_field& s = *(TSheet_field*)jolly;
const int i = s.cid2index(F_OLDPRICE);
const TToken_string& row1 = (const TToken_string&)r1;
const TToken_string& row2 = (const TToken_string&)r2;
real p1, p2;
row1.get(i, p1);
row2.get(i, p2);
if (p1 == p2)
return sort_by_artic(r1, r2, jolly);
return p1 > p2 ? +1 : -1;
}
bool TRicarico_listini_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) bool TRicarico_listini_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{ {
switch (o.dlg()) switch (o.dlg())
@ -349,13 +390,15 @@ bool TRicarico_listini_mask::on_field_event(TOperable_field& o, TField_event e,
real scontato = prezzo * (CENTO - sconto) / CENTO; real scontato = prezzo * (CENTO - sconto) / CENTO;
scontato.round(2); scontato.round(2);
real margine = (scontato > ZERO) ? CENTO * (scontato - costo) / scontato : ZERO; real margine = (scontato > ZERO) ? CENTO * (scontato - costo) / scontato : ZERO;
margine.round(0);
sm.set(o.dlg() + (F_NEWMARGIN-F_NEWPRICE), margine, 0x3); sm.set(o.dlg() + (F_NEWMARGIN-F_NEWPRICE), margine, 0x3);
const real oldprice = sm.get(F_OLDPRICE); const real oldprice = sm.get(F_OLDPRICE);
if (oldprice> ZERO) if (oldprice> ZERO)
{ {
const real newprice = sm.get(F_NEWPRICE); const real newprice = sm.get(F_NEWPRICE);
const real delta = (newprice - oldprice) * CENTO / oldprice; real delta = (newprice - oldprice) * CENTO / oldprice;
delta.round(0);
sm.set(F_DELTAPRICE, delta); sm.set(F_DELTAPRICE, delta);
} }
const real deltam = sm.get_real(F_NEWMARGIN) - sm.get_real(F_OLDMARGIN); const real deltam = sm.get_real(F_NEWMARGIN) - sm.get_real(F_OLDMARGIN);
@ -369,23 +412,66 @@ bool TRicarico_listini_mask::on_field_event(TOperable_field& o, TField_event e,
set_dirty(); set_dirty();
break; break;
case se_query_add: case se_query_add:
send_key(K_SPACE, DLG_NEWREC, &o); if (_curlis.full())
{
TMask m("ve2800b");
m.set(F_CODLIS, _curlis, 0x3);
if (m.run() == K_ENTER)
{
_codart = m.get(F_FROMCOD);
return _codart.full();
}
}
return false;
case se_notify_add:
if (_codart.full())
{
TSheet_field& s = sfield(F_LISTINO);
TToken_string& r = s.row(jolly);
r = _codart;
TMask& m = s.sheet_mask();
const TRectype& anamag = cache().get(LF_ANAMAG, _codart);
FOR_EACH_MASK_FIELD(m, i, f)
{
const TFieldref* fld = f->field();
if (fld != NULL && fld->file() == LF_ANAMAG)
r.add(anamag.get(fld->name()), s.cid2index(f->dlg()));
}
_codart.cut(0);
return true;
}
return false;
case se_query_del: case se_query_del:
return false; return false;
default: default:
break; break;
} }
break; break;
case F_SORT:
if (e == fe_modify)
{
TWait_cursor hourglass;
TSheet_field& s = sfield(F_LISTINO);
TArray& r = s.rows_array();
switch (o.get()[0])
{
case 'D': r.sort(sort_by_delta, &s); break;
case 'P': r.sort(sort_by_price, &s); break;
default : r.sort(sort_by_artic, &s); break;
}
s.force_update();
}
break;
case DLG_EDIT: case DLG_EDIT:
if (e == fe_button && jolly == 1) if (e == fe_button && jolly == 1)
{ {
TMask& msk = o.mask(); TMask& msk = o.mask();
msk.reset(F_SCONTO); msk.reset(F_SCONTO);
msk.reset(F_COSTO); msk.reset(F_COSTO);
msk.reset(F_RICARICO); msk.reset(F_RICARICO);
msk.reset(F_OLDPRICE); msk.reset(F_OLDPRICE);
} }
break; break;
case DLG_EXPORT: case DLG_EXPORT:
if (e == fe_button && jolly == 0) if (e == fe_button && jolly == 0)
{ {
@ -471,7 +557,7 @@ bool TRicarico_listini::create()
{ {
Tdninst dninst; Tdninst dninst;
if (!dninst.can_I_run(true)) if (!dninst.can_I_run(true))
return error_box(TR("Programma non autorizzato!")); return error_box(TR("Programma personalizzato non autorizzato!"));
TSheet_field::set_line_number_width(4); TSheet_field::set_line_number_width(4);
return TSkeleton_application::create(); return TSkeleton_application::create();
} }

View File

@ -6,6 +6,8 @@
#define F_FROMDES 206 #define F_FROMDES 206
#define F_TOCOD 207 #define F_TOCOD 207
#define F_TODES 208 #define F_TODES 208
#define F_SORT 209
#define F_RECORDS 210
#define F_LISTINO 300 #define F_LISTINO 300
@ -22,4 +24,5 @@
#define F_DELTAMARGIN 111 #define F_DELTAMARGIN 111
#define F_DESCFRA 112 #define F_DESCFRA 112
#define F_DESCENG 113 #define F_DESCENG 113
#define F_DESCDEU 114 #define F_DESCDEU 114
#define F_CODARTALT 115

View File

@ -101,6 +101,7 @@ BEGIN
DISPLAY "Descrizione@20" DESCR DISPLAY "Descrizione@20" DESCR
DISPLAY "Costo" ULTCOS1 DISPLAY "Costo" ULTCOS1
DISPLAY "Ricarico" USER3 DISPLAY "Ricarico" USER3
DISPLAY "Replaced by@20" CODARTALT
OUTPUT F_FROMCOD CODART OUTPUT F_FROMCOD CODART
OUTPUT F_FROMDES DESCR OUTPUT F_FROMDES DESCR
CHECKTYPE SEARCH CHECKTYPE SEARCH
@ -116,6 +117,7 @@ BEGIN
DISPLAY "Codice@20" CODART DISPLAY "Codice@20" CODART
DISPLAY "Costo" ULTCOS1 DISPLAY "Costo" ULTCOS1
DISPLAY "Ricarico" USER3 DISPLAY "Ricarico" USER3
DISPLAY "Replaced by@20" CODARTALT
COPY OUTPUT F_FROMCOD COPY OUTPUT F_FROMCOD
CHECKTYPE SEARCH CHECKTYPE SEARCH
END END
@ -142,10 +144,23 @@ BEGIN
CHECKTYPE SEARCH CHECKTYPE SEARCH
END END
LIST F_SORT 1 10
BEGIN
PROMPT 1 6 "Ordinamento "
ITEM "A|Articolo"
ITEM "D|Delta"
ITEM "P|Prezzo"
END
NUMBER F_RECORDS 6
BEGIN
PROMPT 47 6 "Righe di listino "
FLAGS "D"
END
SPREADSHEET F_LISTINO SPREADSHEET F_LISTINO
BEGIN BEGIN
PROMPT 0 6 "Listino" PROMPT 0 7 "Listino"
ITEM "Articolo@20" ITEM "Articolo@20"
ITEM "Descrizione@30" ITEM "Descrizione@30"
ITEM "Sconto" ITEM "Sconto"
@ -160,6 +175,7 @@ BEGIN
ITEM "Descrizione\nFrancese@30" ITEM "Descrizione\nFrancese@30"
ITEM "Descrizione\nInglese@30" ITEM "Descrizione\nInglese@30"
ITEM "Descrizione\nTedesco@30" ITEM "Descrizione\nTedesco@30"
ITEM "Replaced by@20"
END END
ENDPAGE ENDPAGE
@ -176,6 +192,13 @@ BEGIN
FIELD CODRIGA FIELD CODRIGA
END END
STRING F_CODARTALT 20
BEGIN
PROMPT 35 1 "Rep. by "
FLAGS "D"
FIELD LF_ANAMAG->CODARTALT
END
STRING F_DESCART 50 STRING F_DESCART 50
BEGIN BEGIN
PROMPT 1 2 "Descrizione " PROMPT 1 2 "Descrizione "
@ -212,6 +235,7 @@ BEGIN
OUTPUT F_RICARICO CODTAB OUTPUT F_RICARICO CODTAB
CHEKTYPE NORMAL CHEKTYPE NORMAL
FIELD LF_ANAMAG->USER3 FIELD LF_ANAMAG->USER3
FLAGS "U"
END END
TEXT DLG_NULL TEXT DLG_NULL
@ -242,25 +266,25 @@ BEGIN
FLAGS "DUG" FLAGS "DUG"
END END
NUMBER F_DELTAPRICE 6 2 NUMBER F_DELTAPRICE 4
BEGIN BEGIN
PROMPT 50 6 "" PROMPT 50 6 ""
FLAGS "D" FLAGS "D"
END END
NUMBER F_OLDMARGIN 6 2 NUMBER F_OLDMARGIN 4
BEGIN BEGIN
PROMPT 2 7 "@bMargine " PROMPT 2 7 "@bMargine "
FLAGS "D" FLAGS "D"
END END
NUMBER F_NEWMARGIN 6 2 NUMBER F_NEWMARGIN 4
BEGIN BEGIN
PROMPT 32 7 "" PROMPT 32 7 ""
FLAGS "D" FLAGS "D"
END END
NUMBER F_DELTAMARGIN 6 2 NUMBER F_DELTAMARGIN 4
BEGIN BEGIN
PROMPT 50 7 "" PROMPT 50 7 ""
FLAGS "D" FLAGS "D"

76
ve/ve2800b.uml Normal file
View File

@ -0,0 +1,76 @@
#include "ve2800.h"
PAGE "Nuovo articolo" -1 -1 54 6
STRING F_CODLIS 3
BEGIN
PROMPT 1 1 "Listino "
USE LF_CONDV
INPUT TIPO "L"
INPUT COD F_CODLIS
DISPLAY "Codice" COD
DISPLAY "Descrizione@50" DESCR
DISPLAY "Valuta" CODVAL
OUTPUT F_CODLIS COD
OUTPUT F_DESLIS COD
CHECKTYPE REQUIRED
FLAGS "DUG"
END
STRING F_DESLIS 50
BEGIN
PROMPT 1 2 ""
FLAGS "D"
END
STRING F_FROMCOD 20
BEGIN
PROMPT 1 3 "Articolo "
USE ANAMAG SELECT LF_RCONDV->CODRIGA=""
JOIN LF_RCONDV INTO TIPO="L" COD=#F_CODLIS TIPORIGA="A" CODRIGA=CODART
INPUT CODART F_FROMCOD
DISPLAY "Codice@20" CODART
DISPLAY "Descrizione@20" DESCR
DISPLAY "Costo" ULTCOS1
DISPLAY "Ricarico" USER3
DISPLAY "Replaced by@20" CODARTALT
OUTPUT F_FROMCOD CODART
OUTPUT F_FROMDES DESCR
CHECKTYPE SEARCH
FLAGS "U"
END
STRING F_FROMDES 50
BEGIN
PROMPT 1 4 ""
USE ANAMAG KEY 2 SELECT LF_RCONDV->CODRIGA=""
JOIN LF_RCONDV INTO TIPO="L" COD=#F_CODLIS TIPORIGA="A" CODRIGA=CODART
INPUT DESCR F_FROMDES
DISPLAY "Descrizione@20" DESCR
DISPLAY "Codice@20" CODART
DISPLAY "Costo" ULTCOS1
DISPLAY "Ricarico" USER3
DISPLAY "Replaced by@20" CODARTALT
COPY OUTPUT F_FROMCOD
CHECKTYPE SEARCH
END
ENDPAGE
TOOLBAR "Toolbar" 0 0 0 2
BUTTON DLG_OK 2 2
BEGIN
PROMPT 1 1 ""
END
BUTTON DLG_CANCEL 2 2
BEGIN
PROMPT 2 1 ""
END
#include <helpbar.h>
ENDPAGE
ENDMASK

View File

@ -2576,23 +2576,18 @@ TOccasionale& TDocumento::occas() const
{ {
const TString16 occ_code = cod_occas(); // Codice occasionale in testata const TString16 occ_code = cod_occas(); // Codice occasionale in testata
if (occ_code != _occas.codice()) TOccasionale& rec = (TOccasionale&)_occas;
if (occ_code != rec.codice())
{ {
/* Antidiluvian mode
TLocalisamfile o(LF_OCCAS); TLocalisamfile o(LF_OCCAS);
((TDocumento *) this)->_occas.zero(); rec.put(OCC_CFPI, occ_code);
((TDocumento *) this)->_occas.put(OCC_CFPI, occ_code); if (rec.read(o) != NOERR)
TRectype oc(_occas); {
if (((TDocumento *) this)->_occas.read(o) != NOERR) rec.zero();
((TDocumento *) this)->_occas = oc; rec.put(OCC_CFPI, occ_code);
*/ }
// Postdiluvian mode
TRectype& o = (TRectype&)_occas; // Inganna const (una volta sola, non 4)
o = cache().get(LF_OCCAS, occ_code); // Ricerca tramite cache
if (o.empty()) // Occasionale cancellato per errore
o.put(OCC_CFPI, occ_code); // Ripristina almeno il codice
} }
return (TOccasionale&)_occas; return rec;
} }
const TAgente & TDocumento::agente(bool first) const const TAgente & TDocumento::agente(bool first) const

View File

@ -2032,10 +2032,15 @@ bool TDocumento_mask::occas_handler( TMask_field& f, KEY key )
if (c) if (c)
f.set(c->read(occ)); f.set(c->read(occ));
} }
const TString& cf = occas_mask.get(O_COFI);
if (cf.full() && atoi(cf.mid(9, 2)) > 40)
occas_mask.set(O_SESSO, "F");
if (occas_mask.run() != K_ESC) if (occas_mask.run() != K_ESC)
{ {
const TString ocfpi(occas_mask.get(O_CODICE)); const TString ocfpi(occas_mask.get(O_CODICE));
doc.put("OCFPI", ocfpi); doc.put(DOC_OCFPI, ocfpi);
m.set(F_OCFPI, ocfpi); m.set(F_OCFPI, ocfpi);
for (int i = occas_mask.fields() - 1; i >= 0; i--) for (int i = occas_mask.fields() - 1; i >= 0; i--)