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:
parent
fd43b6d1c1
commit
f6e1216566
161
ce/ce0500.cpp
161
ce/ce0500.cpp
@ -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();
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user