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
This commit is contained in:
luca 2007-02-08 10:05:15 +00:00
parent 9706c72afe
commit 372df3ec60
2 changed files with 58 additions and 22 deletions

View File

@ -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);

View File

@ -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();
}