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 <recarray.h>
|
||||
#include <recset.h>
|
||||
#include <relapp.h>
|
||||
#include <sheet.h>
|
||||
#include <utility.h>
|
||||
@ -11,6 +12,7 @@
|
||||
#include "ce0500a.h"
|
||||
#include "../cg/cglib01.h"
|
||||
|
||||
#include <multirel.h>
|
||||
#include "cespi.h"
|
||||
#include "salce.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) << ')';
|
||||
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;
|
||||
case F_FPRIVATO:
|
||||
@ -607,6 +601,48 @@ bool TEdit_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
}
|
||||
}
|
||||
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:
|
||||
break;
|
||||
}
|
||||
@ -648,7 +684,7 @@ bool TEdit_mask::test_ammissibilita_dati()
|
||||
{
|
||||
const char* msg = insert_mode() ? TR("Inserimento") : TR("Modifica");
|
||||
xvtil_statbar_set(msg, true);
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
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")
|
||||
{
|
||||
create_fields(1, 1, F_USER, 1);
|
||||
create_fields(1, 13, F_USER, 1);
|
||||
}
|
||||
//--------------------------------------------------------------
|
||||
// APPLICAZIONE
|
||||
@ -804,6 +840,7 @@ class TAnacespi : public TRelation_application
|
||||
{
|
||||
TRelation* _cespiti;
|
||||
int _rel_year;
|
||||
TAssoc_array _matricole_iniziali;
|
||||
|
||||
TQuery_mask* _qmask;
|
||||
TEdit_mask* _emask;
|
||||
@ -829,7 +866,10 @@ protected:
|
||||
virtual void init_insert_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 rewrite(const TMask& m);
|
||||
virtual int write(const TMask& m);
|
||||
virtual bool remove();
|
||||
};
|
||||
@ -926,6 +966,7 @@ void TAnacespi::init_insert_mode(TMask& m)
|
||||
{
|
||||
m.set(F_SPEMAN, 1);
|
||||
m.disable(F_SPEMAN);
|
||||
|
||||
TDitta_cespiti& dc = ditta_cespiti();
|
||||
const TRectype& cac = dc.categoria(0, NULL, m.get_int(F_CATEGORIA));
|
||||
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
|
||||
m.set(F_VEICOLO, 1);
|
||||
m.set(F_USOPROM, 1);
|
||||
|
||||
//svuota l'assoc_array delle matricole antiche
|
||||
_matricole_iniziali.destroy();
|
||||
}
|
||||
|
||||
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());
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
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)
|
||||
@ -1057,6 +1180,11 @@ int TAnacespi::write(const TMask& m)
|
||||
}
|
||||
|
||||
int err = TRelation_application::write(m);
|
||||
|
||||
//gestione matricole
|
||||
if (err == NOERR)
|
||||
aggiorna_matricole(m);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
@ -1064,7 +1192,14 @@ bool TAnacespi::kill_cespite(const TString& idcespite, int lfile, int key)
|
||||
{
|
||||
TRelation rel(lfile);
|
||||
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);
|
||||
const TRecnotype items = cur.items();
|
||||
if (items > 0)
|
||||
@ -1099,7 +1234,7 @@ bool TAnacespi::remove()
|
||||
|
||||
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_AMMCE))
|
||||
kill_cespite(idcespite, LF_AMMCE) && kill_cespite(idcespite, LF_MULTIREL))
|
||||
{
|
||||
rel->write_enable(0, false); // Disabilito la cancellazione dei saldi (gia' cancellati prima)
|
||||
yes = TRelation_application::remove();
|
||||
|
@ -36,6 +36,7 @@
|
||||
#define F_VEICOLO 151
|
||||
#define F_DESC_VEICOLO 152
|
||||
#define F_USOPROM 153
|
||||
#define F_MATRICOLE 154
|
||||
#define F_ANNIRIC 155
|
||||
|
||||
#define F_USER 160
|
||||
@ -75,3 +76,6 @@
|
||||
|
||||
#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
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
//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
|
||||
BEGIN
|
||||
@ -754,3 +766,37 @@ ENDPAGE
|
||||
|
||||
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_PRIVATO:
|
||||
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)
|
||||
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;
|
||||
case F_AMMNOR_C: // controlla che residuoc sia < della somma dei campi quota civilistici
|
||||
case F_AMMACC_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)
|
||||
return error_box(TR("Attenzione: l'ammortamento richiesto supera il residuo civilistico del cespite"));
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
break;
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
|
@ -394,7 +394,7 @@ BEGIN
|
||||
FIELD FRINGEBEN
|
||||
FLAGS "G"
|
||||
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
|
||||
END
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user