Patch level :10.0

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :riportate matricole e gestione fringeben dalla 3.2


git-svn-id: svn://10.65.10.50/trunk@16494 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2008-04-10 15:25:28 +00:00
parent fd43b6d1c1
commit f6e1216566
5 changed files with 208 additions and 28 deletions

View File

@ -1,5 +1,6 @@
#include <defmask.h> #include <defmask.h>
#include <recarray.h> #include <recarray.h>
#include <recset.h>
#include <relapp.h> #include <relapp.h>
#include <sheet.h> #include <sheet.h>
#include <utility.h> #include <utility.h>
@ -11,6 +12,7 @@
#include "ce0500a.h" #include "ce0500a.h"
#include "../cg/cglib01.h" #include "../cg/cglib01.h"
#include <multirel.h>
#include "cespi.h" #include "cespi.h"
#include "salce.h" #include "salce.h"
#include "ammce.h" #include "ammce.h"
@ -571,14 +573,6 @@ bool TEdit_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
msg << TR("non puo' superare il valore da ammortizzare (") << val_amm.string(true) << ')'; msg << TR("non puo' superare il valore da ammortizzare (") << val_amm.string(true) << ')';
return error_box(msg); return error_box(msg);
} }
if (field(F_FRINGEBEN).active())
{
const short ff[] = { F_NORMALE, F_ACCELERATO, F_ANTICIPATO, 0};
const TCurrency fringe_amm = sum_fields(ff);
TCurrency fringe_ben; get_currency(F_FRINGEBEN, fringe_ben);
if (fringe_amm > fringe_ben)
return error_box(TR("Il fondo ammortamento fiscale non puo' superare il valore di fringe benefit"));
}
} }
break; break;
case F_FPRIVATO: case F_FPRIVATO:
@ -607,6 +601,48 @@ bool TEdit_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
} }
} }
break; break;
case F_VEIDIP:
case F_VEICOLO:
//testa se e' un veicolo promiscuo in uso a dipendente
if (e == fe_init || e == fe_modify)
{
const bool veicolodipendente = get_bool(F_VEIDIP);
//navi,aerei,astronavi etc. non possono godere del fringe benefit
const int tipoveicolo = get_int(F_VEICOLO);
enable(F_FRINGEBEN, veicolodipendente && tipoveicolo > 1 && tipoveicolo < 5);
}
break;
case F_MATRICOLE:
if (e == se_notify_modify)
{
TSheet_field& sf = sfield(F_MATRICOLE);
const TString80 matricola = sf.cell(jolly, 0);
if (matricola.blank())
return error_box(TR("Matricola nulla!"));
TISAM_recordset multirel("USE MULTIREL KEY 2\nSELECT FIRST!=#IDCESPITE\nFROM COD=CEMAT SECOND=#MATRICOLA\nTO COD=CEMAT SECOND=#MATRICOLA");
multirel.set_var("#MATRICOLA", TVariant(matricola));
multirel.set_var("#IDCESPITE", TVariant(get(F_IDCESPITE)));
const TRecnotype items = multirel.items();
if (items > 0)
{
TString msg;
msg << TR("Matricola gia' utilizzata nel cespite ") << multirel.get(MULTI_FIRST);
return error_box(msg);
}
FOR_EACH_SHEET_ROW(sf, i, row) if(i != jolly)
{
if (matricola == row->get(0))
{
TString msg;
msg << TR("Matricola gia' utilizzata alla riga ") << (i+1);
return error_box(msg);
}
}
}
break;
default: default:
break; break;
} }
@ -648,7 +684,7 @@ bool TEdit_mask::test_ammissibilita_dati()
{ {
const char* msg = insert_mode() ? TR("Inserimento") : TR("Modifica"); const char* msg = insert_mode() ? TR("Inserimento") : TR("Modifica");
xvtil_statbar_set(msg, true); xvtil_statbar_set(msg, true);
return FALSE; return false;
} }
bool TEdit_mask::test_ammissibilita_saldi() bool TEdit_mask::test_ammissibilita_saldi()
@ -795,7 +831,7 @@ bool TEdit_mask::on_key(KEY k)
TEdit_mask::TEdit_mask() : TBasic_cespi_mask("ce0500b") TEdit_mask::TEdit_mask() : TBasic_cespi_mask("ce0500b")
{ {
create_fields(1, 1, F_USER, 1); create_fields(1, 13, F_USER, 1);
} }
//-------------------------------------------------------------- //--------------------------------------------------------------
// APPLICAZIONE // APPLICAZIONE
@ -804,6 +840,7 @@ class TAnacespi : public TRelation_application
{ {
TRelation* _cespiti; TRelation* _cespiti;
int _rel_year; int _rel_year;
TAssoc_array _matricole_iniziali;
TQuery_mask* _qmask; TQuery_mask* _qmask;
TEdit_mask* _emask; TEdit_mask* _emask;
@ -829,7 +866,10 @@ protected:
virtual void init_insert_mode(TMask& m); virtual void init_insert_mode(TMask& m);
virtual void init_modify_mode(TMask& m); virtual void init_modify_mode(TMask& m);
void leggi_matricole(TMask& m);
void aggiorna_matricole(const TMask& m);
virtual int read(TMask& m); virtual int read(TMask& m);
virtual int rewrite(const TMask& m);
virtual int write(const TMask& m); virtual int write(const TMask& m);
virtual bool remove(); virtual bool remove();
}; };
@ -926,6 +966,7 @@ void TAnacespi::init_insert_mode(TMask& m)
{ {
m.set(F_SPEMAN, 1); m.set(F_SPEMAN, 1);
m.disable(F_SPEMAN); m.disable(F_SPEMAN);
TDitta_cespiti& dc = ditta_cespiti(); TDitta_cespiti& dc = ditta_cespiti();
const TRectype& cac = dc.categoria(0, NULL, m.get_int(F_CATEGORIA)); const TRectype& cac = dc.categoria(0, NULL, m.get_int(F_CATEGORIA));
m.set(F_ANNIRIC, cac.get("I3")); m.set(F_ANNIRIC, cac.get("I3"));
@ -935,6 +976,9 @@ void TAnacespi::init_insert_mode(TMask& m)
// Extra: non richiesti da analisi, ma obbligatori // Extra: non richiesti da analisi, ma obbligatori
m.set(F_VEICOLO, 1); m.set(F_VEICOLO, 1);
m.set(F_USOPROM, 1); m.set(F_USOPROM, 1);
//svuota l'assoc_array delle matricole antiche
_matricole_iniziali.destroy();
} }
void TAnacespi::init_modify_mode(TMask& m) void TAnacespi::init_modify_mode(TMask& m)
@ -995,9 +1039,88 @@ const char* TAnacespi::get_next_key()
return format("%d|%s", F_IDCESPITE, num.string()); return format("%d|%s", F_IDCESPITE, num.string());
} }
void TAnacespi::leggi_matricole(TMask& m)
{
TSheet_field& sf = m.sfield(F_MATRICOLE);
sf.destroy();
//svuota l'assoc_array delle matricole antiche
_matricole_iniziali.destroy();
TISAM_recordset cemat("USE MULTIREL\nFROM COD=CEMAT FIRST=#IDCESPITE\nTO COD=CEMAT FIRST=#IDCESPITE");
cemat.set_var("#IDCESPITE", TVariant(m.get(F_IDCESPITE)));
for (bool ok = cemat.move_first(); ok; ok = cemat.move_next())
{
TToken_string& riga = sf.row(-1);
riga = cemat.get(MULTI_SECOND).as_string();
_matricole_iniziali.add(riga); //aggiorna le matricole iniziali
riga.add(cemat.get(MULTI_DATA).as_string());
}
sf.force_update();
}
int TAnacespi::read(TMask& m) int TAnacespi::read(TMask& m)
{ {
return TRelation_application::read(m); int err = TRelation_application::read(m);
//gestione matricole
if (err == NOERR)
leggi_matricole(m);
return err;
}
void TAnacespi::aggiorna_matricole(const TMask& m)
{
//aggiorna le matricole confrontando quelle iniziali con quelle rilevate
TAssoc_array matricole_attuali;
TSheet_field& sf = m.sfield(F_MATRICOLE);
FOR_EACH_SHEET_ROW(sf, i, row)
matricole_attuali.add(row->get(0));
TLocalisamfile multirel(LF_MULTIREL);
FOR_EACH_ASSOC_OBJECT(_matricole_iniziali, h, key, obj)
{
if (!matricole_attuali.is_key(key))
{
multirel.put(MULTI_COD, "CEMAT");
multirel.put(MULTI_FIRST, m.get(F_IDCESPITE));
multirel.put(MULTI_SECOND, key);
multirel.remove();
}
}
FOR_EACH_SHEET_ROW(sf, j, riga)
{
const TString80 matricola = riga->get(0);
if (matricola.full())
{
multirel.put(MULTI_COD, "CEMAT");
multirel.put(MULTI_FIRST, m.get(F_IDCESPITE));
multirel.put(MULTI_SECOND, matricola);
multirel.put(MULTI_DATA, riga->get(1));
if (_matricole_iniziali.is_key(matricola))
multirel.rewrite();
else
multirel.write();
}
}
}
int TAnacespi::rewrite(const TMask& m)
{
int err = TRelation_application::rewrite(m);
if (err == NOERR)
aggiorna_matricole(m);
return err;
} }
int TAnacespi::write(const TMask& m) int TAnacespi::write(const TMask& m)
@ -1057,6 +1180,11 @@ int TAnacespi::write(const TMask& m)
} }
int err = TRelation_application::write(m); int err = TRelation_application::write(m);
//gestione matricole
if (err == NOERR)
aggiorna_matricole(m);
return err; return err;
} }
@ -1064,7 +1192,14 @@ bool TAnacespi::kill_cespite(const TString& idcespite, int lfile, int key)
{ {
TRelation rel(lfile); TRelation rel(lfile);
TRectype& filter = rel.curr(); TRectype& filter = rel.curr();
filter.put(CESPI_IDCESPITE, idcespite); if (lfile == LF_MULTIREL)
{
filter.put(MULTI_COD, "CEMAT");
filter.put(MULTI_FIRST, idcespite);
}
else
filter.put("IDCESPITE", idcespite);
TCursor cur(&rel, "", key, &filter, &filter); TCursor cur(&rel, "", key, &filter, &filter);
const TRecnotype items = cur.items(); const TRecnotype items = cur.items();
if (items > 0) if (items > 0)
@ -1099,7 +1234,7 @@ bool TAnacespi::remove()
if (kill_cespite(idcespite, LF_SALCE) && kill_cespite(idcespite, LF_MOVCE, 2) && if (kill_cespite(idcespite, LF_SALCE) && kill_cespite(idcespite, LF_MOVCE, 2) &&
kill_cespite(idcespite, LF_MOVAM) && kill_cespite(idcespite, LF_AMMMV) && kill_cespite(idcespite, LF_MOVAM) && kill_cespite(idcespite, LF_AMMMV) &&
kill_cespite(idcespite, LF_AMMCE)) kill_cespite(idcespite, LF_AMMCE) && kill_cespite(idcespite, LF_MULTIREL))
{ {
rel->write_enable(0, false); // Disabilito la cancellazione dei saldi (gia' cancellati prima) rel->write_enable(0, false); // Disabilito la cancellazione dei saldi (gia' cancellati prima)
yes = TRelation_application::remove(); yes = TRelation_application::remove();

View File

@ -36,6 +36,7 @@
#define F_VEICOLO 151 #define F_VEICOLO 151
#define F_DESC_VEICOLO 152 #define F_DESC_VEICOLO 152
#define F_USOPROM 153 #define F_USOPROM 153
#define F_MATRICOLE 154
#define F_ANNIRIC 155 #define F_ANNIRIC 155
#define F_USER 160 #define F_USER 160
@ -75,3 +76,6 @@
#define F_QUADRATURA 320 #define F_QUADRATURA 320
//sheet matricole
#define S_MATRICOLA 101
#define S_DESCRIZIONE 102

View File

@ -298,6 +298,18 @@ ENDPAGE
PAGE "Personalizzazioni" -1 -1 78 18 PAGE "Personalizzazioni" -1 -1 78 18
TEXT DLG_NULL
BEGIN
PROMPT 1 0 "Matricole"
END
SPREADSHEET F_MATRICOLE 79 10
BEGIN
PROMPT 1 1 ""
ITEM "Matricola"
ITEM "Descrizione@50"
END
ENDPAGE ENDPAGE
PAGE "Saldi" -1 -1 78 18 PAGE "Saldi" -1 -1 78 18
@ -619,7 +631,7 @@ END
//quelli che seguono hidati sono i campi chiave del record di ammce che non si devono vedere //quelli che seguono hidati sono i campi chiave del record di ammce che non si devono vedere
//a video ma che ci devono essere per avere una riscrittura completa del record in caso di //a video ma che ci devono essere per avere una riscrittura completa del record in caso di
//registrazione (altrimenti nascono antipatici record con chiave incopleta!) //registrazione (altrimenti nascono antipatici record con chiave incompleta!)
LIST DLG_NULL 1 1 LIST DLG_NULL 1 1
BEGIN BEGIN
@ -754,3 +766,37 @@ ENDPAGE
ENDMASK ENDMASK
//maschera di riga dello sheet
PAGE "Riga" -1 -1 68 4
STRING S_MATRICOLA 20
BEGIN
PROMPT 1 1 "Matricola "
CHECKTYPE REQUIRED
FLAGS "U"
END
STRING S_DESCRIZIONE 50
BEGIN
PROMPT 1 2 "Descrizione "
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -13 -1 ""
END
BUTTON DLG_DELREC 10 2
BEGIN
PROMPT -23 -1 ""
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -33 -1 ""
END
ENDPAGE
ENDMASK

View File

@ -297,33 +297,28 @@ bool TForce_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
case F_QUOTE_PERSE: case F_QUOTE_PERSE:
case F_PRIVATO: case F_PRIVATO:
case F_QUOTE_PRIV: case F_QUOTE_PRIV:
if (e==fe_close || e==fe_modify) if (e == fe_close || e == fe_modify)
{ {
real sumf = get_real(F_AMMNOR_F)+get_real(F_AMMACC_F)+get_real(F_AMMANT_F)+get_real(F_QUOTE_PERSE)+get_real(F_PRIVATO)+get_real(F_QUOTE_PRIV); real sumf = get_real(F_AMMNOR_F) + get_real(F_AMMACC_F) + get_real(F_AMMANT_F) + get_real(F_QUOTE_PERSE)
+ get_real(F_PRIVATO) + get_real(F_QUOTE_PRIV);
if (sumf > _residuof_ini) if (sumf > _residuof_ini)
return error_box(TR("Attenzione: l'ammortamento richiesto supera il residuo fiscale del cespite")); return error_box(TR("Attenzione: l'ammortamento richiesto supera il residuo fiscale del cespite"));
if (e == fe_close && field(F_FRINGEBEN).active())
{
const real fringe_amm = get_real(F_AMMNOR_F)+get_real(F_AMMACC_F)+get_real(F_AMMANT_F);
const real fringe_ben = get_real(F_FRINGEBEN);
if (fringe_amm > fringe_ben)
return error_box(TR("Il fondo ammortamento fiscale non puo' superare il valore di fringe benefit"));
}
} }
break; break;
case F_AMMNOR_C: // controlla che residuoc sia < della somma dei campi quota civilistici case F_AMMNOR_C: // controlla che residuoc sia < della somma dei campi quota civilistici
case F_AMMACC_C: case F_AMMACC_C:
case F_AMMANT_C: case F_AMMANT_C:
if (e==fe_close||e==fe_modify) if (e == fe_close || e == fe_modify)
{ {
real sumc = get_real(F_AMMNOR_C)+get_real(F_AMMACC_C)+get_real(F_AMMANT_C); real sumc = get_real(F_AMMNOR_C) + get_real(F_AMMACC_C) + get_real(F_AMMANT_C);
if (sumc > _residuoc_ini) if (sumc > _residuoc_ini)
return error_box(TR("Attenzione: l'ammortamento richiesto supera il residuo civilistico del cespite")); return error_box(TR("Attenzione: l'ammortamento richiesto supera il residuo civilistico del cespite"));
} }
break; break;
default: default:
break; break;
} }
return ok; return ok;
} }

View File

@ -394,7 +394,7 @@ BEGIN
FIELD FRINGEBEN FIELD FRINGEBEN
FLAGS "G" FLAGS "G"
MESSAGE FALSE COPY,F_FRINGEBEN2|COPY,F_FRINGEBEN3 MESSAGE FALSE COPY,F_FRINGEBEN2|COPY,F_FRINGEBEN3
MESSAGE TRUE COPY,,F_FRINGEBEN2|COPY,F_FRINGEBEN3 MESSAGE TRUE COPY,F_FRINGEBEN2|COPY,F_FRINGEBEN3
GROUP 1 GROUP 1
END END