From 372df3ec60ed27c3fba22b4ff359ea48587e2848 Mon Sep 17 00:00:00 2001 From: luca Date: Thu, 8 Feb 2007 10:05:15 +0000 Subject: [PATCH] Patch level :4.0 608 Files correlati : Ricompilazione Demo : [ ] Commento :stampa bilancio di commessa un po' piu' funzionante!Sistemato il problema del RICAVI-COSTI impazzito! git-svn-id: svn://10.65.10.50/trunk@14858 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ca/ca3800.cpp | 76 +++++++++++++++++++++++++++++++++++++-------------- ca/ca3883.cpp | 4 ++- 2 files changed, 58 insertions(+), 22 deletions(-) diff --git a/ca/ca3800.cpp b/ca/ca3800.cpp index df0f2096e..edc875366 100755 --- a/ca/ca3800.cpp +++ b/ca/ca3800.cpp @@ -11,6 +11,7 @@ #include "calib01.h" #include "calib02.h" #include "commesse.h" +#include "fasi.h" #include "panapdc.h" #include "pconana.h" #include "saldana.h" @@ -179,7 +180,8 @@ protected: TImporto& saldo, TImporto& saldop) const; void aggiorna_importo(TAssoc_array& riga_array, const TString& livello, const int indbil, const TRecordset& saldana, const bool inverti = false) const; - TAssoc_array& get_row(TAssoc_array& cms, const char* chiave, + real calcola_avanzamento_tempo() const; + TAssoc_array& get_row(TAssoc_array& cms, const char* chiave, const int indice, const TString& codcms, const TString& fase, const TString& descrizione); @@ -293,6 +295,12 @@ TAssoc_array& TPrint_bilancio_cms_recordset::get_row(TAssoc_array& cms, const ch riga_array->add("CODCMS", codcms); riga_array->add("FASE", fase); riga_array->add("DESCRIZ", descrizione); + //inizializza i campi importo sicuramente presenti (modifica DECISIVA) + //senza questa inizializzazione, nel caso trovasse campi nulli (in realta' 0), il bastardo.. + //..anziche' considerarli 0 ci mette l'ultimo valore != che ha in memoria nella stessa posizione.. + //..facendo sballare tutti i conti! + riga_array->add("RICAVI", EMPTY_STRING); + riga_array->add("COSTI", EMPTY_STRING); //aggiunge la riga all'array-one cms.add(chiave, riga_array); @@ -455,6 +463,44 @@ const TVariant& TPrint_bilancio_cms_recordset::get(unsigned int column) const return NULL_VARIANT; } +real TPrint_bilancio_cms_recordset::calcola_avanzamento_tempo() const +{ + real avanzamento; + + const TDate& datafinesc = _esc[_anno].fine(); + TDate dataini, datafine; + const TString& codfase = get("FASE").as_string(); + if (codfase.empty()) + { + const TString& codcms = get("CODCMS").as_string(); + const TRectype& rec_commesse = cache().get(LF_COMMESSE, codcms); + + dataini = rec_commesse.get(COMMESSE_DATAINIZIO); + datafine = rec_commesse.get(COMMESSE_DATAFINE); + } + else + { + const TRectype& rec_fasi = cache().get(LF_FASI, codfase); + + dataini = rec_fasi.get(FASI_DATAINIZIO); + datafine = rec_fasi.get(FASI_DATAFINE); + } + //Si prende SOLO la Fine Esercizio come riferimento di avanzamento (in realta' si.. + //..potrebbe usare today al posto di datafinesc se si volesse la situazione ad oggi,.. + //..ma i calcoli degli importi sarebbero da rivedere). Quindi: + //se la commessa finisce prima della fine dell'esercizio + if (datafine < datafinesc) + avanzamento = CENTO; + //se invece prosegue anche dopo la fine dell'esercizio... + else + { + const long time_gone = datafinesc - dataini; + const long durata = datafine - dataini; + avanzamento = ((real)(time_gone * CENTO) / durata); + } + return avanzamento; +} + const TVariant& TPrint_bilancio_cms_recordset::get(const char* column_name) const { if (_curr >= 0 && _curr < items()) @@ -489,27 +535,9 @@ const TVariant& TPrint_bilancio_cms_recordset::get(const char* column_name) cons real avanzamento; if (_tipostima == 'T') { - const TDate& datafinesc = _esc[_anno].fine(); - const TString& codcms = get("CODCMS").as_string(); - const TRectype& rec_commesse = cache().get(LF_COMMESSE, codcms); - - const TDate dataini = rec_commesse.get(COMMESSE_DATAINIZIO); - const TDate datafine = rec_commesse.get(COMMESSE_DATAFINE); - //Si prende SOLO la Fine Esercizio come riferimento di avanzamento (in realta' si.. - //..potrebbe usare today al posto di datafinesc se si volesse la situazione ad oggi,.. - //..ma i calcoli degli importi sarebbero da rivedere). Quindi: - //se la commessa finisce prima della fine dell'esercizio - if (datafine < datafinesc) - avanzamento = CENTO; - //se invece prosegue anche dopo la fine dell'esercizio... - else - { - const long time_gone = datafinesc - dataini; - const long durata_cms = datafine - dataini; - avanzamento = ((real)(time_gone * CENTO) / durata_cms); - } + avanzamento = calcola_avanzamento_tempo(); } - else //if(_tipostima=T... + else //se stima e' di tipo Costi... { } @@ -518,6 +546,12 @@ const TVariant& TPrint_bilancio_cms_recordset::get(const char* column_name) cons else //if(strcmp(column_name,AVANZAMENTO... { TAssoc_array& riga = (TAssoc_array&)_righe[_curr]; +#ifdef DBG + const TString& cazzo = *(TString*)riga.objptr("CODCMS"); + const TString& culo = *(TString*)riga.objptr("FASE"); + if (cazzo == "FP05FSE041197" && culo == "SP01ED01") + int a = 0; +#endif const TString* val = (TString*)riga.objptr(column_name); if (val) var.set(*val); diff --git a/ca/ca3883.cpp b/ca/ca3883.cpp index 1903dfa0f..760c447b9 100755 --- a/ca/ca3883.cpp +++ b/ca/ca3883.cpp @@ -156,7 +156,7 @@ void TCRPA_report::analize_pconana_structure (const TString& prefix, const int d if (codici_c.items() == 1) { codici_c.destroy(); - testate_c.destroy();; + testate_c.destroy(); } codici_c.add("#COSTI"); testate_c.add(TR("COSTI")); @@ -239,6 +239,8 @@ void TCRPA_report::offset_and_fill_columns(TReport_section& rep_sect, TReport_field& campo = (TReport_field&)campi_a_destra[k]; campo.offset(offset); } + + rep_sect.sort(); }