From 053fcd1ea5b0b95dcaee53710658e8eea9be62e0 Mon Sep 17 00:00:00 2001 From: luca Date: Tue, 1 Jun 2010 14:59:53 +0000 Subject: [PATCH] Patch level :10.0 Files correlati : Ricompilazione Demo : [ ] Commento : cespiti per analitica in corso git-svn-id: svn://10.65.10.50/trunk@20535 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ce/ce0100.cpp | 41 ++++++- ce/ce3300.cpp | 9 ++ ce/ce3300a.h | 7 ++ ce/ce3300a.uml | 111 +++++++++++++++--- ce/ce4100.cpp | 297 +++++++++++++++++++++++++++++++++++++++++++------ ce/ce4100a.h | 19 +++- ce/ce4100a.uml | 103 ++++++++++++----- ce/celib.cpp | 26 ++++- ce/cetbcce.h | 8 ++ ce/cetbcce.uml | 105 +++++++++++++++++ ce/f145.dir | 2 +- ce/f145.trr | 4 +- 12 files changed, 650 insertions(+), 82 deletions(-) diff --git a/ce/ce0100.cpp b/ce/ce0100.cpp index 4994cafc6..04d7c2c1b 100755 --- a/ce/ce0100.cpp +++ b/ce/ce0100.cpp @@ -1,6 +1,8 @@ #include +#include #include #include +#include #include #include @@ -12,6 +14,9 @@ #include "cetbcce.h" #include "cetbccb.h" #include "cetbccc.h" + +#include "../ca/calib01.h" + #define MIN_CAT_COM 40 #ifndef TTable_application @@ -174,10 +179,44 @@ protected: public: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); - TCCE_mask() : TAutomask("cetbcce") { } + TCCE_mask(); virtual ~TCCE_mask() { } }; +//costruttore; gestisce apparizioni e sparizioni!! (è come il mago Oronzo) +TCCE_mask::TCCE_mask() : TAutomask("cetbcce") +{ + //i campi di analitica li vede solo chi ha l'analitica + const bool has_ca = dongle().active(CAAUT); + //se la chiave ha CA mostra i campi gruppo 1 (analitica).. + if (has_ca) + { + enable_page(1, true); + //se ha l'analitica gli tocca pure controllare la configurazione per sapere.. + //..quali campi diventano obbligatori! + TConfig& cfg = ca_config(); + + if (cfg.get_bool("CmsRequired")) + { + TEdit_field& e_cms = efield(F_CODCMS); + e_cms.check_type(CHECK_REQUIRED); + } + if (cfg.get_bool("CdcRequired")) + { + TEdit_field& e_cdc = efield(F_CODCDC); + e_cdc.check_type(CHECK_REQUIRED); + } + if (cfg.get_bool("FscRequired")) + { + TEdit_field& e_fase = efield(F_CODFASE); + e_fase.check_type(CHECK_REQUIRED); + } + } + else + enable_page(1, false); + +} + bool TCCE_mask::is_leap(int year) const { TDate d(28,2,year); diff --git a/ce/ce3300.cpp b/ce/ce3300.cpp index cafee2d55..69fcc409b 100755 --- a/ce/ce3300.cpp +++ b/ce/ce3300.cpp @@ -1,4 +1,6 @@ #include +#include +#include #include #include @@ -64,6 +66,13 @@ public: TStampaprospetto_mask::TStampaprospetto_mask() :TAutomask ("ce3300a") { ditta_cespiti().init_mask(* this); + + const bool has_ca = dongle().active(CAAUT); + //se la chiave ha CA mostra i campi gruppo 2 (analitica).. + if (has_ca) + show(-1); + else + hide(-1); } bool TStampaprospetto_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) diff --git a/ce/ce3300a.h b/ce/ce3300a.h index 41e8071cb..5499b362c 100755 --- a/ce/ce3300a.h +++ b/ce/ce3300a.h @@ -15,3 +15,10 @@ #define F_SITGEST 122 #define F_ORDINA 123 #define F_EXCLUDE_ALIENS 124 + +#define F_CODCDC 130 +#define F_DESCDC 131 +#define F_CODCMS 132 +#define F_DESCMS 133 +#define F_CODFASE 134 +#define F_DESFASE 135 diff --git a/ce/ce3300a.uml b/ce/ce3300a.uml index bb0111b23..62488eea7 100755 --- a/ce/ce3300a.uml +++ b/ce/ce3300a.uml @@ -6,7 +6,7 @@ ENDPAGE PAGE "Selezione stampa prospetto cespiti" 0 2 0 0 -GROUPBOX DLG_NULL 80 6 +GROUPBOX DLG_NULL 78 6 BEGIN PROMPT 1 1 "@bParametri ditta" FLAGS "R" @@ -73,8 +73,8 @@ END STRING F_D_GRUPPO 60 58 BEGIN - PROMPT 20 4 "" - FLAGS "D" + PROMPT 20 4 "" + FLAGS "D" END STRING F_SPECIE 4 @@ -100,37 +100,122 @@ BEGIN FLAGS "D" END -GROUPBOX DLG_NULL 80 5 +GROUPBOX DLG_NULL 78 3 BEGIN - PROMPT 1 7 "@BSelezione" - FLAGS "R" + PROMPT 1 7 "@bSituazione" END BOOLEAN F_SITFISC BEGIN - PROMPT 2 8 "Situazione fiscale" + PROMPT 2 8 "Fiscale" END BOOLEAN F_SITCIV BEGIN - PROMPT 2 9 "Situazione civilistica " + PROMPT 22 8 "Civilistica" END BOOLEAN F_SITGEST BEGIN - PROMPT 2 10 "Situazione gestionale " + PROMPT 42 8 "Gestionale" END -RADIOBUTTON F_ORDINA 80 +RADIOBUTTON F_ORDINA 78 BEGIN - PROMPT 1 12 "@BOrdinamento" + PROMPT 1 10 "@bOrdinamento" ITEM "0|Ordinato per Categoria" - ITEM "1|Ordinato per Impianto" + ITEM "1|Ordinato per Impianto" + FLAGS "Z" +END + +GROUPBOX DLG_NULL 78 3 +BEGIN + PROMPT 1 13 "@bEsclusioni" END BOOLEAN F_EXCLUDE_ALIENS BEGIN - PROMPT 2 16 "Escludere cespiti alienati" + PROMPT 2 14 "Cespiti alienati" +END + +GROUPBOX DLG_NULL 78 5 +BEGIN + PROMPT 1 16 "@bAnalitica" + GROUP 1 +END + +STRING F_CODCDC 20 +BEGIN + PROMPT 2 17 "C.d.costo " + USE LF_CDC + INPUT CODCOSTO F_CODCDC + DISPLAY "Codice@20" CODCOSTO + DISPLAY "Descrizione@50" DESCRIZ + OUTPUT F_CODCDC CODCOSTO + OUTPUT F_DESCDC DESCRIZ + CHECKTYPE NORMAL + FLAGS "U" + FIELD CODCDC + GROUP 1 +END + +STRING F_DESCDC 50 39 +BEGIN + PROMPT 35 17 "" + USE LF_CDC KEY 2 + INPUT DESCRIZ F_DESCDC + DISPLAY "Descrizione@50" DESCRIZ + DISPLAY "Codice@20" CODCOSTO + COPY OUTPUT F_CODCDC + GROUP 1 +END + +STRING F_CODCMS 20 +BEGIN + PROMPT 2 18 "Commessa " + USE LF_COMMESSE + INPUT CODCMS F_CODCMS + DISPLAY "Codice@20" CODCMS + DISPLAY "Descrizione@50" DESCRIZ + OUTPUT F_CODCMS CODCMS + OUTPUT F_DESCMS DESCRIZ + CHECKTYPE NORMAL + FLAGS "U" + GROUP 1 + FIELD CODCMS +END + +STRING F_DESCMS 50 39 +BEGIN + PROMPT 35 18 "" + USE LF_COMMESSE KEY 2 + INPUT DESCRIZ F_DESCMS + DISPLAY "Descrizione@50" DESCRIZ + DISPLAY "Codice@20" CODCMS + COPY OUTPUT F_CODCMS + GROUP 1 +END + +STRING F_CODFASE 10 +BEGIN + PROMPT 2 19 "Fase " + USE LF_FASI + INPUT CODCMSFAS F_CODCMS SELECT + INPUT CODFASE F_CODFASE + DISPLAY "Fase@10" CODFASE + DISPLAY "Descrizione@50" DESCRIZ + OUTPUT F_CODFASE CODFASE + OUTPUT F_DESFASE DESCRIZ + CHECKTYPE NORMAL + FLAGS "U" + GROUP 1 + FIELD CODFASE +END + +STRING F_DESFASE 50 39 +BEGIN + PROMPT 35 19 "" + GROUP 1 END ENDPAGE diff --git a/ce/ce4100.cpp b/ce/ce4100.cpp index 0c900d0cf..d53d0a00f 100755 --- a/ce/ce4100.cpp +++ b/ce/ce4100.cpp @@ -1,36 +1,73 @@ -#include -#include +#include +#include +#include + +#include "../ca/commesse.h" +#include "../ca/calib01.h" +#include "../cg/cglib01.h" #include "ce4100a.h" +#include "cespi.h" + +struct date_commessa : public TObject +{ + TDate _dataini_cms, _datafine_cms; +}; + //============================================================================================= //maschera -class TCesp_per_cms_mask: public TAutomask +class TCesp_anal_mask: public TAutomask { - int _pos_cms, _pos_fase, _pos_cdc, _pos_util, _pos_cop, _pos_fondo; + int _pos_cms, _pos_fase, _pos_cdc, _pos_dtiniuse, _pos_dtfinuse, _pos_util; + +protected: + int calc_durata_esercizio_cespitizzata(TDate& dtinies, TDate& dtfines); + void calc_date_limite(const TString& codcms, TDate& dtini, TDate& dtfine); public: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); - real TCesp_per_cms_mask::somma_perc() const; + real TCesp_anal_mask::somma_perc() const; - TCesp_per_cms_mask(); + TCesp_anal_mask(); }; -TCesp_per_cms_mask::TCesp_per_cms_mask() : TAutomask ("ce4100a") +TCesp_anal_mask::TCesp_anal_mask() : TAutomask ("ce4100a") { //setta le posizioni dei campi dello sheet TSheet_field& sf_righe = sfield(F_RIGHE); _pos_cms = sf_righe.cid2index(S_CODCMS); _pos_fase = sf_righe.cid2index(S_CODFASE); _pos_cdc = sf_righe.cid2index(S_CODCDC); + _pos_dtiniuse = sf_righe.cid2index(S_DTINIUSE); + _pos_dtfinuse = sf_righe.cid2index(S_DTFINUSE); _pos_util = sf_righe.cid2index(S_PERCUTIL); - _pos_cop = sf_righe.cid2index(S_PERCCOPE); - _pos_fondo = sf_righe.cid2index(S_FONDO); + + //mette i checktype sui campi dello sheet in base alla configurazione.. + //..analitica della ditta + TConfig& cfg = ca_config(); + TMask& sf_righe_msk = sf_righe.sheet_mask(); + + if (cfg.get_bool("CmsRequired")) + { + TEdit_field& e_cms = sf_righe_msk.efield(S_CODCMS); + e_cms.check_type(CHECK_REQUIRED); + } + if (cfg.get_bool("CdcRequired")) + { + TEdit_field& e_cdc = sf_righe_msk.efield(S_CODCDC); + e_cdc.check_type(CHECK_REQUIRED); + } + if (cfg.get_bool("FscRequired")) + { + TEdit_field& e_fase = sf_righe_msk.efield(S_CODFASE); + e_fase.check_type(CHECK_REQUIRED); + } } -real TCesp_per_cms_mask::somma_perc() const +real TCesp_anal_mask::somma_perc() const { TSheet_field& ss = sfield(F_RIGHE); real tot_perc; @@ -39,14 +76,91 @@ real TCesp_per_cms_mask::somma_perc() const return tot_perc; } -bool TCesp_per_cms_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) +int TCesp_anal_mask::calc_durata_esercizio_cespitizzata(TDate& dtinies, TDate& dtfines) +{ + const int anno = get_int(F_ESERCIZIO); + TEsercizi_contabili esc; + esc.code2range(anno, dtinies, dtfines); + + //vita cespite + const TString& cespite = get(F_IDCESPITE); + const TRectype& rec_cespi = cache().get(LF_CESPI, cespite); + const TDate& dtcomp = rec_cespi.get_date(CESPI_DTCOMP); + const TDate& dtalien = rec_cespi.get_date(CESPI_DTALIEN); + //cespite acquistato durante l'esercizio + if (dtcomp.ok() && dtcomp > dtinies) + dtinies = dtcomp; + //cespite alienato durante l'esercizio + if (dtalien.ok() && dtalien < dtfines) + dtfines = dtalien; + + //durata "cespitizzata" dell'esercizio + const int durata = dtfines - dtinies + 1; + return durata; +} + +void TCesp_anal_mask::calc_date_limite(const TString& codcms, TDate& dtini, TDate& dtfine) +{ + //date limite coincidenti con date vita cespite nell'esercizio (caso standard, senza commessa) + const TDate dtinicesp = get_date(F_INIZIO_CES); + const TDate dtfincesp = get_date(F_FINE_CES); + //se invece la commessa viene aggiunta, le sue date limite influenzano il limite di uso! + if (codcms.full()) + { + const TRectype& rec_cms = cache().get(LF_COMMESSE, codcms); + ca_durata_commessa(rec_cms, dtini, dtfine); + //se le date di commessa sforano l'esercizio selezionato, vengono ricondotte alle date.. + //..dell'esercizio stesso + if (dtfine.ok() && (dtfine > dtfincesp)) + dtfine = dtfincesp; + + if ((dtini.ok()) && (dtini < dtinicesp)) + dtini = dtinicesp; + } + else + { + dtfine = dtfincesp; + dtini = dtinicesp; + } +} + +bool TCesp_anal_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { switch (o.dlg()) { + + //maschera principale + //------------------- + case F_IDCESPITE: + case F_ESERCIZIO: + if (e == fe_modify) + { + //nel caso vengano cambiati il cespite e/o l'esercizio, deve controllare la vita del cespite.. + //..nell'esercizio + TDate dtinies = get_date(F_INIZIO_ES); + TDate dtfines = get_date(F_FINE_ES); + calc_durata_esercizio_cespitizzata(dtinies, dtfines); + set(F_INIZIO_CES, dtinies); + set(F_FINE_CES, dtfines); + } + break; + case F_RIGHE: - if (e == se_notify_add) + if (e == se_notify_add) //quando si aggiunge una riga... { TSheet_field& ss = (TSheet_field&)o; + + //propone come date iniziale e finale di uso quelle dell'esercizio selezionato! + const int anno = get_int(F_ESERCIZIO); + TDate dtinies, dtfines; + TEsercizi_contabili esc; + esc.code2range(anno, dtinies, dtfines); + calc_durata_esercizio_cespitizzata(dtinies, dtfines); + TToken_string& new_row = ss.row(jolly); + new_row.add(dtinies, _pos_dtiniuse); + new_row.add(dtfines, _pos_dtfinuse); + + //mette nel campo %util il valore max possibile al momento real residuo = CENTO - somma_perc(); if (residuo > 0) { @@ -56,7 +170,7 @@ bool TCesp_per_cms_mask::on_field_event(TOperable_field& o, TField_event e, long } if (e == fe_close && (insert_mode() || edit_mode())) { -//controllo sulle percentuali totali di un cespite + //controllo sulle percentuali totali di un cespite if (somma_perc() != CENTO) return noyes_box("La percentuale complessiva di utilizzo del cespite e' diversa da 100" "\nSi desidera proseguire ugualmente?"); @@ -66,14 +180,14 @@ bool TCesp_per_cms_mask::on_field_event(TOperable_field& o, TField_event e, long TSheet_field& ss = sfield(F_RIGHE); FOR_EACH_SHEET_ROW(ss,i,r) { -//controllo di esistenza codici commessa e cdc + //controllo di esistenza codici commessa e cdc const TString& cms = r->get(_pos_cms); if (cms.blank()) return error_box("Specificare la commessa sulla riga %d", i+1); const TString& cdc = r->get(_pos_cdc); if (cdc.blank()) return error_box("Specificare il centro di costo sulla riga %d", i+1); -//controllo di duplicazione chiave della riga (cms/fase/cdc) + //controllo di duplicazione chiave della riga (cms/fase/cdc) TToken_string row_key; row_key.add(cms); const TString& fase = r->get(_pos_fase); @@ -86,16 +200,140 @@ bool TCesp_per_cms_mask::on_field_event(TOperable_field& o, TField_event e, long } } break; - default: break; + + //maschera di riga sheet + //---------------------- + //controllo sulle date limite di utilizzo: se c'è la commessa le date lim uso devono ricadere.. + //..all'interno della vita della commessa, se invece la commessa non c'è le date lim uso devono.. + //..ricadere all'interno della vita utile del cespite nell'esercizio + case S_DTINIUSE: + if (e == fe_modify || e == fe_close) + { + TDate dtini, dtfine; + const TString& codcms = get(S_CODCMS); + calc_date_limite(codcms, dtini, dtfine); + if (o.get() < dtini) + return error_box("La data inizio uso non può essere antecedente alla data inizio commessa!"); + } + break; + case S_DTFINUSE: + if (e == fe_modify || e == fe_close) + { + TDate dtini, dtfine; + const TString& codcms = get(S_CODCMS); + calc_date_limite(codcms, dtini, dtfine); + if (o.get() > dtfine) + return error_box("La data fine uso non può essere successiva alla data fine commessa!"); + } + break; + + //bottoni + //------- + case DLG_CALCPERC: + if (e == fe_button) + { + //ripartisce in automatico le percentuali di utilizzo analizzando le durate e le compresenze.. + //..delle commesse sullo sheet nell'anno selezionato, oltre che ovviamente la durata del cespite.. + //..nell'anno selezionato + + // 1) stabilisce la durata dell'esercizio per il cespite: infatti può essere stato comprato o venduto.. + //..nel corso dell'esercizio stesso + TDate dtini, dtfine; + //durata "cespitizzata" dell'esercizio + const int durata = calc_durata_esercizio_cespitizzata(dtini, dtfine); + + // 2) chiave generale su cui mettere le quote che non appartengono ad alcuna.. + //..commessa! La si trova nella configurazione esercizio cespiti (tanto per incasinarci.. + //..la vita), ovvero tabella CCE + const TString& anno = get(F_ESERCIZIO); + const TRectype& rec_cce = cache().get("CCE", anno); + + //trova per l'anno sulla maschera quali sono i valori standard; + TToken_string key_genspa; + key_genspa.add(rec_cce.get("S2"), _pos_cdc); + key_genspa.add(rec_cce.get("S3"), _pos_cms); + key_genspa.add(rec_cce.get("S4"), _pos_fase); + + //conatore dei giorni cui casca la chiave genspa + long giorni_genspa = 0L; + + TSheet_field& sf_righe = sfield(F_RIGHE); + TPointer_array giorni_commessa; + int riga_genspa = -1; + + // 3) giro su tutti i giorni inclusi tra le date limite in modo da trovare i giorni utili.. + //..di ciascuna commessa e gli eventuali giorni vuoti da scaricare in genspa + for (TDate data = dtini; data <= dtfine; ++data) + { + bool almeno_una = false; + FOR_EACH_SHEET_ROW(sf_righe, r, row) + { + TToken_string key_riga; + key_riga.add(row->get(_pos_cms)); + key_riga.add(row->get(_pos_fase)); + key_riga.add(row->get(_pos_cdc)); + + //la commessa genspa non va calcolata qui! + if (key_riga != key_genspa) + { + const TDate dt_ini_use = row->get(_pos_dtiniuse); + const TDate dt_fin_use = row->get(_pos_dtfinuse); + //se la data in esame appartiene allintrvallo date di utilizzo sulla riga + if (data >= dt_ini_use && data <= dt_fin_use) + { + const long giorni = giorni_commessa.get_long(r) + 1; + giorni_commessa.add_long(giorni, r); + almeno_una = true; + } + } + else + riga_genspa = r; + } //FOR_EACH_SHEET_ROW... + //se la data in questione non appartiene all'intervallo di utilizzo di nessuna riga.. + //..->la data è scoperta e va a finire nel calderone del genspa + if (!almeno_una) + giorni_genspa ++; + + } //for(TDate... + + // 4) attenzione alla commesse generica di riempimento (cms_genspa!) se non esiste va aggiunta + //se invece la cms_genspa ha già la sua riga -> deve solo aggiornare la %util (lo fa dopo.. + //..assieme alle commesse normali) + if (riga_genspa < 0) + { + TToken_string& row_genspa = sf_righe.row(-1); + row_genspa = key_genspa; + //aggiunge la commessa genspa all'array dei giorni_commessa, in modo che venga poi considerata.. + //..nel riproporzionamento successivo con il distrib + riga_genspa = sf_righe.items() - 1; + } + giorni_commessa.add_long(giorni_genspa, riga_genspa); + + // 5) procede a caricare un distrib con i valori di giorni_commessa + TGeneric_distrib tamoil(CENTO, 2); + for (int i = 0 ; i < sf_righe.items(); i++) + tamoil.add(giorni_commessa.get_long(i)); + + // 6) adesso scarica il distrib, mettendo la % di ogni commessa nel campo di %di utilizzo + FOR_EACH_SHEET_ROW(sf_righe, gg, linea) + linea->add(tamoil.get().string(), _pos_util); + + //..e alla fine vediamo che succede! + sf_righe.force_update(); + } + break; + + default: + break; } return true; } //=============================================================================================== //Applicazione -class TCesp_per_cms: public TRelation_application +class TCesp_anal: public TRelation_application { - TCesp_per_cms_mask *_msk; // maschera principale + TCesp_anal_mask *_msk; // maschera principale TRelation *_rel; // relazione principale //metodi virtuali obbligatori per gli oggetti TRelation_application @@ -112,57 +350,54 @@ protected: virtual TRelation* get_relation() const { return _rel; } public: - virtual ~TCesp_per_cms() {} + virtual ~TCesp_anal() {} }; //metodi per la maschera //abilita i campi per inserimento nuovo cespite,attivando i campi del gruppo 2 (che fanno riferimento al file LF_CESPI) -void TCesp_per_cms::init_query_insert_mode(TMask& m) +void TCesp_anal::init_query_insert_mode(TMask& m) { m.enable(-2); m.show(-2); m.hide(-1); } //abilita i campi per ricercare un cespite gia' inserito,attivando i campi del gruppo 1(LF_SALCECMS) -void TCesp_per_cms::init_query_mode(TMask& m) +void TCesp_anal::init_query_mode(TMask& m) { m.show(-1); m.hide(-2); m.set(F_DESC,""); } -void TCesp_per_cms::init_insert_mode(TMask& m) +void TCesp_anal::init_insert_mode(TMask& m) { m.hide(-1); m.disable(-2); } -void TCesp_per_cms::init_modify_mode(TMask& m) +void TCesp_anal::init_modify_mode(TMask& m) { m.hide(-2); } -bool TCesp_per_cms::user_create() +bool TCesp_anal::user_create() { _rel = new TRelation(LF_SALCECMS); - _msk = new TCesp_per_cms_mask; + _msk = new TCesp_anal_mask; return true; } - -bool TCesp_per_cms::user_destroy() +bool TCesp_anal::user_destroy() { delete _rel; delete _msk; return true; } - - int ce4100(int argc, char* argv[]) { - TCesp_per_cms a; - a.run(argc,argv,TR("Distribuzione analitica cespiti")); + TCesp_anal a; + a.run(argc,argv,TR("Ripartizione analitica cespiti")); return 0; } diff --git a/ce/ce4100a.h b/ce/ce4100a.h index 52a9fc90f..96472110a 100755 --- a/ce/ce4100a.h +++ b/ce/ce4100a.h @@ -1,4 +1,4 @@ -//definizioni campi per la maschera ce4100a.uml (anagrafica cespiti per cdc/cms/fase) +//definizioni campi per la maschera ce4100a.uml (anagrafica cespiti per analitica) #define F_DITTA 201 #define F_RAGSOC 202 #define F_ESERCIZIO 203 @@ -9,15 +9,24 @@ #define F_IDCESPITE_N 208 #define F_DESC_N 209 #define F_NRIGA 210 +#define F_INIZIO_CES 211 +#define F_FINE_CES 212 -#define F_RIGHE 211 +#define F_RIGHE 215 +//bottone speciale sulla toolbar +#define DLG_CALCPERC 301 + +//maschera di riga dello sheet #define S_CODCMS 101 #define S_CODFASE 102 #define S_CODCDC 103 -#define S_PERCUTIL 104 -#define S_PERCCOPE 105 -#define S_FONDO 106 +#define S_DTINIUSE 104 +#define S_DTFINUSE 105 +#define S_PERCUTIL 106 +#define S_DTINICMS 107 +#define S_DTFINCMS 108 +#define S_DTPRORCMS 109 #define S_DESCDC 111 #define S_DESCMS 112 diff --git a/ce/ce4100a.uml b/ce/ce4100a.uml index d79903d33..42b0bb4ba 100755 --- a/ce/ce4100a.uml +++ b/ce/ce4100a.uml @@ -1,12 +1,19 @@ #include "ce4100a.h" TOOLBAR "topbar" 0 0 0 2 + +BUTTON DLG_CALCPERC 2 2 +BEGIN + PROMPT 1 1 "~Calcola" + PICTURE TOOL_RECALC +END + #include ENDPAGE -PAGE "Distribuzione analitica cespiti" 0 2 0 0 +PAGE "Ripartizione analitica cespiti" 0 2 0 0 -GROUPBOX DLG_NULL 78 5 +GROUPBOX DLG_NULL 78 6 BEGIN PROMPT 0 1 "@bParametri cespite" END @@ -82,7 +89,6 @@ BEGIN DISPLAY "Centro di costo@20" CODCDC DISPLAY "Data Acq.@10" LF_CESPI->DTCOMP DISPLAY "Data Ali.@10" LF_CESPI->DTALIEN - OUTPUT F_ESERCIZIO CODES OUTPUT F_IDCESPITE IDCESPITE OUTPUT F_IDCESPITE_N IDCESPITE OUTPUT F_DESC LF_CESPI->DESC @@ -94,7 +100,7 @@ END STRING F_DESC 60 50 BEGIN - PROMPT 24 4 "" + PROMPT 26 4 "" FLAGS "DPG" GROUP 1 END @@ -125,7 +131,7 @@ END STRING F_DESC_N 60 50 BEGIN - PROMPT 24 4 "" + PROMPT 24 6 "" USE LF_CESPI KEY 3 INPUT DESC F_DESC_N DISPLAY "Descrizione@50" DESC @@ -142,15 +148,35 @@ BEGIN KEY 2 //chiave civetta per provocare l'entrata in modalita' INSERIMENTO in caso di ricerca per descrizione END -SPREADSHEET F_RIGHE +TEXT DLG_NULL BEGIN - PROMPT 2 6 "" + PROMPT 1 5 "Date limite di uso del cespite nell'esercizio" +END + +DATE F_INIZIO_CES +BEGIN + PROMPT 40 5 "Inizio " + FLAGS "D" +END + +DATE F_FINE_CES +BEGIN + PROMPT 61 5 "Fine " + FLAGS "D" +END + +SPREADSHEET F_RIGHE -1 -1 +BEGIN + PROMPT 1 8 "@bRipartizione cespite" ITEM "Commessa@20" ITEM "Fase@10" ITEM "Centro di costo@20" + ITEM "Inizio Uso" + ITEM "Fine Uso@10" ITEM "% Utilizzo" - ITEM "% Copertura" - ITEM "Valore fondo" + ITEM "Inizio Cms" + ITEM "Fine Cms@10" + ITEM "Proroga Cms" USE LF_SALCECMS KEY NRIGA INPUT CODES F_ESERCIZIO INPUT IDCESPITE F_IDCESPITE @@ -162,7 +188,7 @@ ENDPAGE ENDMASK //maschera di riga dello sheet -PAGE "Riga" -1 -1 76 15 +PAGE "Riga" -1 -1 76 8 STRING S_CODCMS 20 BEGIN @@ -173,7 +199,10 @@ BEGIN DISPLAY "Descrizione@50" DESCRIZ OUTPUT S_CODCMS CODCMS OUTPUT S_DESCMS DESCRIZ - CHECKTYPE REQUIRED + OUTPUT S_DTINICMS DATAINIZIO + OUTPUT S_DTFINCMS DATAFINE + OUTPUT S_DTPRORCMS DATAPROR + CHECKTYPE NORMAL FIELD CODCMS FLAGS "U" END @@ -190,7 +219,7 @@ END STRING S_CODFASE 10 BEGIN - PROMPT 1 2 "Fase " + PROMPT 1 3 "Fase " USE LF_FASI INPUT CODCMSFAS S_CODCMS SELECT INPUT CODFASE S_CODFASE @@ -205,26 +234,26 @@ END STRING S_DESFASE 50 37 BEGIN - PROMPT 35 2 "" + PROMPT 35 3 "" END STRING S_CODCDC 20 BEGIN - PROMPT 1 3 "C.d.costo " + PROMPT 1 4 "C.d.costo " USE LF_CDC INPUT CODCOSTO S_CODCDC DISPLAY "Codice@20" CODCOSTO DISPLAY "Descrizione@50" DESCRIZ OUTPUT S_CODCDC CODCOSTO OUTPUT S_DESCDC DESCRIZ - CHECKTYPE REQUIRED + CHECKTYPE NORMAL FIELD CODCDC FLAGS "U" END STRING S_DESCDC 50 37 BEGIN - PROMPT 35 3 "" + PROMPT 35 4 "" USE LF_CDC KEY 2 INPUT DESCRIZ S_DESCDC DISPLAY "Descrizione@50" DESCRIZ @@ -232,27 +261,51 @@ BEGIN COPY OUTPUT S_CODCDC END +GROUPBOX DLG_NULL 72 4 +BEGIN + PROMPT 1 5 "Uso cespite" +END + +DATE S_DTINIUSE +BEGIN + PROMPT 2 6 "Inizio " + FIELD DTINIUSE + CHECKTYPE REQUIRED +END + +DATE S_DTFINUSE +BEGIN + PROMPT 24 6 "Fine " + FIELD DTFINUSE + CHECKTYPE REQUIRED +END + NUMBER S_PERCUTIL 6 2 BEGIN - PROMPT 1 4 "% utilizzo " - CHECKTYPE REQUIRED + PROMPT 2 7 "% uso " FLAGS "U" FIELD PERCUTIL + CHECKTYPE REQUIRED END -NUMBER S_PERCCOPE 6 2 +DATE S_DTINICMS BEGIN - PROMPT 1 5 "% copertura " - FLAGS "U" - FIELD PERCCOPE + PROMPT 1 2 "Inizio " + FLAGS "D" END -CURRENCY S_FONDO 18 +DATE S_DTFINCMS BEGIN - PROMPT 1 6 "Valore fondo " - FIELD FONDO + PROMPT 22 2 "Fine " + FLAGS "D" END +DATE S_DTPRORCMS +BEGIN + PROMPT 44 2 "Proroga " + FLAGS "D" +END + ENDPAGE TOOLBAR "bottombar" 0 0 0 2 diff --git a/ce/celib.cpp b/ce/celib.cpp index 7d3e6e64c..8adf64fba 100755 --- a/ce/celib.cpp +++ b/ce/celib.cpp @@ -443,12 +443,14 @@ real ceca_perc_util(const TString& cespite, const int anno, { //controllo su date inizio e fine del periodo di utilizzo del cespite nell'esercizio selezionato const TRectype& cespi = cache().get(LF_CESPI, cespite); - const int codcat = cespi.get_int(CESPI_CODCAT); + //const int codcat = cespi.get_int(CESPI_CODCAT); TDate dtinies, dtfines; TEsercizi_contabili esc; esc.code2range(anno, dtinies, dtfines); + //controlli sulle date esercizio - cespite; il cespite potrebbe essere entrato in funzione.. + //..o essere stato alienato durante l'esercizio selezionato TDate dtfine = dtfines; const TDate dtalien = cespi.get_date(CESPI_DTALIEN); if (dtalien.ok() && (dtalien < dtfines)) @@ -458,13 +460,18 @@ real ceca_perc_util(const TString& cespite, const int anno, const TDate dtfunz = cespi.get_date(CESPI_DTFUNZ); if (dtfunz.ok() && (dtfunz > dtinies)) dtini = dtfunz; + //..a questo punto dtini e dtfine rappresentano il periodo di utilizzo del cespite //nell'esercizio selezionato //quindi il periodo di utilizzo del cespite nell'esercizio,in giorni,sara'... const long delta_cesp = dtfine - dtini + 1; - - //Adesso si controlla la durata di ogni commessa (alla quale il cespite ha partecipato) durante - //l'esercizio delezionato + //se il delta viene negativo il cespite è tutto nel passato o nel futuro, quindi la sua % di utilizzo.. + //..sarà ZERO!!! e il calcolo si chiuderà qui! + if (delta_cesp <= 0) + return ZERO; + + //token_string con le coppie cespite/anno, per poter avere poi le varie % di utilizzo di tale cespite, + //..in quell'anno, suddivise per cms/cdc/fase (stesso principio di funzionamento dei SALDANA) TToken_string key; key.add(cespite); key.add(anno); @@ -478,7 +485,16 @@ real ceca_perc_util(const TString& cespite, const int anno, { // for (int i = 1; i <= salcecms.last_row(); i++) - perc = ceca_calc_perc_util_cesp(salcecms[i], dtini, dtfine); + { + if (cms.full() && cms != salcecms[i].get(SALCECMS_CODCMS)) + continue; + if (cdc.full() && cdc != salcecms[i].get(SALCECMS_CODCDC)) + continue; + if (fase.full() && fase != salcecms[i].get(SALCECMS_CODFASE)) + continue; + + perc += ceca_calc_perc_util_cesp(salcecms[i], dtini, dtfine); + } } return perc; } diff --git a/ce/cetbcce.h b/ce/cetbcce.h index 4ed94d5c5..b04ab3ed7 100755 --- a/ce/cetbcce.h +++ b/ce/cetbcce.h @@ -24,3 +24,11 @@ #define F_AMMCIV2008 132 #define F_AMMGES2008 133 #define F_AMMAUT2008 134 + +//campi pagina Analitica +#define F_CODCDC 201 +#define F_DESCDC 202 +#define F_CODCMS 203 +#define F_DESCMS 204 +#define F_CODFASE 205 +#define F_DESFASE 206 \ No newline at end of file diff --git a/ce/cetbcce.uml b/ce/cetbcce.uml index 673d666bc..d7e21db68 100755 --- a/ce/cetbcce.uml +++ b/ce/cetbcce.uml @@ -171,4 +171,109 @@ BEGIN END ENDPAGE + +PAGE "Analitica" 0 2 0 0 + +GROUPBOX DLG_NULL 76 5 +BEGIN + PROMPT 1 1 "@bCdC - Commessa - Fase standard per ripartizione fondi" +END + +STRING F_CODCDC 20 +BEGIN + PROMPT 2 2 "C.d.costo " + USE LF_CDC + INPUT CODCOSTO F_CODCDC + DISPLAY "Codice@20" CODCOSTO + DISPLAY "Descrizione@50" DESCRIZ + OUTPUT F_CODCDC CODCOSTO + OUTPUT F_DESCDC DESCRIZ + CHECKTYPE NORMAL + FLAGS "U" + FIELD S2 +END + +STRING F_DESCDC 50 39 +BEGIN + PROMPT 35 2 "" + USE LF_CDC KEY 2 + INPUT DESCRIZ F_DESCDC + DISPLAY "Descrizione@50" DESCRIZ + DISPLAY "Codice@20" CODCOSTO + COPY OUTPUT F_CODCDC +END + +STRING F_CODCMS 20 +BEGIN + PROMPT 2 3 "Commessa " + USE LF_COMMESSE + INPUT CODCMS F_CODCMS + DISPLAY "Codice@20" CODCMS + DISPLAY "Descrizione@50" DESCRIZ + OUTPUT F_CODCMS CODCMS + OUTPUT F_DESCMS DESCRIZ + CHECKTYPE NORMAL + FLAGS "U" + FIELD S3 +END + +STRING F_DESCMS 50 39 +BEGIN + PROMPT 35 3 "" + USE LF_COMMESSE KEY 2 + INPUT DESCRIZ F_DESCMS + DISPLAY "Descrizione@50" DESCRIZ + DISPLAY "Codice@20" CODCMS + COPY OUTPUT F_CODCMS +END + +STRING F_CODFASE 10 +BEGIN + PROMPT 2 4 "Fase " + USE LF_FASI + INPUT CODCMSFAS F_CODCMS SELECT + INPUT CODFASE F_CODFASE + DISPLAY "Fase@10" CODFASE + DISPLAY "Descrizione@50" DESCRIZ + OUTPUT F_CODFASE CODFASE + OUTPUT F_DESFASE DESCRIZ + CHECKTYPE NORMAL + FLAGS "U" + FIELD S4 +END + +STRING F_DESFASE 50 39 +BEGIN + PROMPT 35 4 "" + GROUP 1 +END + +GROUPBOX DLG_NULL 76 7 +BEGIN + PROMPT 1 6 "@bIstruzioni" + GROUP 1 +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 7 "_ Per ogni esercizio cespiti vanno indicati il CdC, la Commessa e la Fase standard per le" +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 8 " eventuali ripartizioni delle quote ammortamento del cespite tra i vari CdC e Commesse;" +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 9 " su questi CdC/Commessa/Fase standard finiranno le quote non specificatamente assegnate" +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 10 " agli altri CdC/commesse/Fasi." +END + +ENDPAGE + ENDMASK \ No newline at end of file diff --git a/ce/f145.dir b/ce/f145.dir index 4293d38d3..98535b38a 100755 --- a/ce/f145.dir +++ b/ce/f145.dir @@ -1,3 +1,3 @@ 145 0 -$salcecms|0|0|73|0|Cespiti per analitica||| +$salcecms|0|0|89|0|Cespiti per analitica||| diff --git a/ce/f145.trr b/ce/f145.trr index 546b263b3..d55d79d3c 100755 --- a/ce/f145.trr +++ b/ce/f145.trr @@ -1,5 +1,5 @@ 145 -7 +9 IDCESPITE|1|10|0|Codice cespite CODES|2|4|0|Codice esercizio NRIGA|2|3|0|N. riga @@ -7,6 +7,8 @@ CODCDC|1|20|0|Codice centro di costo CODCMS|1|20|0|Codice commessa CODFASE|1|10|0|Codice fase PERCUTIL|4|6|2|Percentuale di utilizzo +DTINIUSE|5|8|0|Data inizio utilizzo cespite +DTFINUSE|5|8|0|Data fine utilizzo cespite 2 IDCESPITE+CODES+NRIGA| CODES+IDCESPITE+NRIGA|