From f6e12165662a8864a02d5f76bf4545fe6a8539ad Mon Sep 17 00:00:00 2001 From: luca Date: Thu, 10 Apr 2008 15:25:28 +0000 Subject: [PATCH] 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 --- ce/ce0500.cpp | 161 +++++++++++++++++++++++++++++++++++++++++++++---- ce/ce0500a.h | 4 ++ ce/ce0500b.uml | 48 ++++++++++++++- ce/ce1100.cpp | 21 +++---- ce/ce1301b.uml | 2 +- 5 files changed, 208 insertions(+), 28 deletions(-) diff --git a/ce/ce0500.cpp b/ce/ce0500.cpp index 2a0af6a41..25fe3b970 100755 --- a/ce/ce0500.cpp +++ b/ce/ce0500.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include #include @@ -11,6 +12,7 @@ #include "ce0500a.h" #include "../cg/cglib01.h" +#include #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(); diff --git a/ce/ce0500a.h b/ce/ce0500a.h index b645981d3..33351dbe6 100755 --- a/ce/ce0500a.h +++ b/ce/ce0500a.h @@ -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 diff --git a/ce/ce0500b.uml b/ce/ce0500b.uml index 1aed6d8b0..20fd565db 100755 --- a/ce/ce0500b.uml +++ b/ce/ce0500b.uml @@ -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 + diff --git a/ce/ce1100.cpp b/ce/ce1100.cpp index 6b8d1f022..3eac34d73 100755 --- a/ce/ce1100.cpp +++ b/ce/ce1100.cpp @@ -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; } diff --git a/ce/ce1301b.uml b/ce/ce1301b.uml index 6ac550028..ef20f6d2e 100755 --- a/ce/ce1301b.uml +++ b/ce/ce1301b.uml @@ -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