Patch level :10.0 374

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :
migliorato il calcolo al volo del saldo di un rmovana (considera anche la ca_durata_commessa)


git-svn-id: svn://10.65.10.50/trunk@19112 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2009-07-15 11:02:50 +00:00
parent 5e1edf2a5e
commit 9e8bad6ed9
4 changed files with 75 additions and 64 deletions

View File

@ -373,7 +373,7 @@ real TPrint_saldana_recordset::calcola_avanzamento_tempo() const
const TString& codcms = get("CODCMS").as_string();
const TRectype& rec_commesse = cache().get(LF_COMMESSE, codcms);
durata_commessa(rec_commesse, dataini, datafine);
ca_durata_commessa(rec_commesse, dataini, datafine);
}
//Si prende SOLO la Fine Esercizio come riferimento di avanzamento (in realta' si..
@ -440,60 +440,6 @@ void TPrint_saldana_recordset::aggiorna_importi(TAssoc_array& riga_array,
}
}
//calcola la durata di una commessa e le sue date di inizio e fine
long TPrint_saldana_recordset::durata_commessa(const TRectype& rec_commesse, TDate& dataini, TDate& datafine) const
{
//date iniziale e finale commessa
dataini = rec_commesse.get_date(COMMESSE_DATAINIZIO);
datafine = rec_commesse.get_date(COMMESSE_DATAFINE);
//per la data fine deve tener conto di eventuali proroghe..
if (rec_commesse.get_bool(COMMESSE_PROROGA))
{
const TDate datapror = rec_commesse.get_date(COMMESSE_DATAPROR);
if (datapror.ok())
datafine = datapror;
}
//se almeno una delle due date risultasse incompleta..
if (!dataini.ok() || !datafine.ok())
{
//prende l'anno
TEsercizi_contabili esc;
int anno = rec_commesse.get_int(COMMESSE_ANNO);
//se non trova un anno valido (non sono ammesse commesse prima del XX secolo!)
if (anno <= 1900)
{
//prova con dataini, se è buona...
if (dataini.ok())
anno = esc.date2esc(dataini);
else
{
//allora prova con datafine, se è buona...
if (datafine.ok())
anno = esc.date2esc(datafine);
else
anno = esc.first(); //se nessuna data è buona mette l'anno = al primo esercizio
}
}
//se entrambe le date fossero vuote, visto che comunque adesso l'anno ce l'ha, le può ricavare..
if (!dataini.ok() && !datafine.ok())
esc.code2range(anno, dataini, datafine);
else //solo una data o nessuna data non buona
{
TDate dummy;
//dataini viene messa = ad inizio anno commessa
if (!dataini.ok())
esc.code2range(anno, dataini, dummy);
//datafine viene messa = alla data di scadenza dell'ultimo esercizio valido + 1 anno (mantiene corrette le sezioni di stampa)
if (!datafine.ok())
esc.code2range(esc.last() + 1, dummy, datafine);
}
} //if (!dataini.ok() || !datafine.ok())
return datafine - dataini + 1;
}
//trova la sezione del report in cui ricade in base alle date
int TPrint_saldana_recordset::ricava_sezione_di_stampa(const TRectype& rec_commesse,
@ -503,7 +449,7 @@ int TPrint_saldana_recordset::ricava_sezione_di_stampa(const TRectype& rec_comme
//data iniziale commessa
TDate dataini, datafine;
durata_commessa(rec_commesse, dataini, datafine);
ca_durata_commessa(rec_commesse, dataini, datafine);
//Le commesse vengono suddivise in varie sezioni in base alle loro date di inizio/fine/proroga..
//..e al fatto che possono essere di appoggio (Adolf rikiesten!) secondo lo schema:
@ -575,7 +521,7 @@ const TDate TPrint_saldana_recordset::calcola_min_datacomp(const TDate& datainie
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
{
TDate dataini, datafine;
durata_commessa(rec_commessa, dataini, datafine);
ca_durata_commessa(rec_commessa, dataini, datafine);
if (datafine >= datainiesc && dataini < data_min_comp)
data_min_comp = dataini;
}
@ -876,7 +822,7 @@ void TPrint_saldana_recordset::elabora_rmovana(TAssoc_array* cms, const TDate& d
{
//data del cazzo che serve per non rovinare datacomp, che è la data sulla riga, non quella iniziale di cms
TDate datainicms;
durata_commessa(rec_commesse, datainicms, datafcomp);
ca_durata_commessa(rec_commesse, datainicms, datafcomp);
}
//se siamo in presenza di un movimento senza datafcomp (inserito precdentemente alla nascita di datafcomp..
//..per tutti i movimenti, come nel gestore dei movana mette datafcomp = datacomp;

View File

@ -114,7 +114,6 @@ protected:
void aggiorna_importo(TAssoc_array& riga_array, const TString& livello, const int indbil,
const TRectype& saldana, const bool inverti = false, const bool cms_detraz = false) const;
real calcola_avanzamento_tempo() const;
long durata_commessa(const TRectype& rec_commesse, TDate& dataini, TDate& datafine) const;
const TDate calcola_min_datacomp(const TDate& datainiesc, const TDate& datafinesc) const;
int ricava_sezione_di_stampa(const TRectype& rec_commesse, const TDate& datainiesc, const TDate& datafinesc) const;
TString ricava_chiave_cdc_fase(const TString& codcms, const TString& fase, const TString& cdc) const;

View File

@ -1291,9 +1291,19 @@ void TAnal_mov::saldo_set_reset(const TRectype& row, bool reset)
annies.add(esc_iniziale);
const char tipomov = get_char(MOVANA_TIPOMOV);
// i movimenti analitici possono avere una data di scadenza come la mozzarella
// i movimenti analitici possono avere una data di scadenza come la mozzarella
const TDate datacomp = get_date(MOVANA_DATACOMP);
const TDate datafcomp = get_date(MOVANA_DATAFCOMP);
TDate datafcomp = get_date(MOVANA_DATAFCOMP);
//caso cazzuto della scadenza con la fine della commessa (come nella stampa bilancio commessa)
if (get_bool(MOVANA_AUTOFCOMP))
{
const TString& codcms = row.get(RMOVANA_CODCMS);
const TRectype& rec_commesse = cache().get(LF_COMMESSE, codcms);
//data del cazzo che serve per non rovinare datacomp, che è la data sulla riga, non quella iniziale di cms
TDate datainicms;
ca_durata_commessa(rec_commesse, datainicms, datafcomp);
}
if (datafcomp.ok() && datafcomp > datacomp)
{
TEsercizi_contabili esc;
@ -1320,9 +1330,6 @@ void TAnal_mov::saldo_set_reset(const TRectype& row, bool reset)
TToken_string giorni_annies; //lista dei giorni di saldo per annoes
TEsercizi_contabili esc;
const TDate datacomp = get_date(MOVANA_DATACOMP);
const TDate datafcomp = get_date(MOVANA_DATAFCOMP);
TDate inizio_esc_iniziale, fine_esc_iniziale;
esc.code2range(esc_iniziale, inizio_esc_iniziale, fine_esc_iniziale);
giorni_annies.add(fine_esc_iniziale - datacomp + 1); //primo esercizio
@ -2088,3 +2095,60 @@ bool ca_extract_sheet_field(const TSheet_field& sheet, const int row, const int
}
return codice.full();
}
///////////////////////////////////////////////////////////////////////////////////////
//calcola la durata di una commessa e le sue date di inizio e fine
///////////////////////////////////////////////////////////////////////////////////////
long ca_durata_commessa(const TRectype& rec_commesse, TDate& dataini, TDate& datafine)
{
//date iniziale e finale commessa
dataini = rec_commesse.get_date(COMMESSE_DATAINIZIO);
datafine = rec_commesse.get_date(COMMESSE_DATAFINE);
//per la data fine deve tener conto di eventuali proroghe..
if (rec_commesse.get_bool(COMMESSE_PROROGA))
{
const TDate datapror = rec_commesse.get_date(COMMESSE_DATAPROR);
if (datapror.ok())
datafine = datapror;
}
//se almeno una delle due date risultasse incompleta..
if (!dataini.ok() || !datafine.ok())
{
//prende l'anno
TEsercizi_contabili esc;
int anno = rec_commesse.get_int(COMMESSE_ANNO);
//se non trova un anno valido (non sono ammesse commesse prima del XX secolo!)
if (anno <= 1900)
{
//prova con dataini, se è buona...
if (dataini.ok())
anno = esc.date2esc(dataini);
else
{
//allora prova con datafine, se è buona...
if (datafine.ok())
anno = esc.date2esc(datafine);
else
anno = esc.first(); //se nessuna data è buona mette l'anno = al primo esercizio
}
}
//se entrambe le date fossero vuote, visto che comunque adesso l'anno ce l'ha, le può ricavare..
if (!dataini.ok() && !datafine.ok())
esc.code2range(anno, dataini, datafine);
else //solo una data o nessuna data non buona
{
TDate dummy;
//dataini viene messa = ad inizio anno commessa
if (!dataini.ok())
esc.code2range(anno, dataini, dummy);
//datafine viene messa = alla data di scadenza dell'ultimo esercizio valido + 1 anno (mantiene corrette le sezioni di stampa)
if (!datafine.ok())
esc.code2range(esc.last() + 1, dummy, datafine);
}
} //if (!dataini.ok() || !datafine.ok())
return datafine - dataini + 1;
}

View File

@ -227,4 +227,6 @@ void ca_copia_campo(const TRectype& src, const char* campo_src, TRectype& dst, c
//metodo per ricavare la stringa dei codici dai campi dello sheet
bool ca_extract_sheet_field(const TSheet_field& sheet, const int row, const int logicnum, TString& codice);
//metodo per ricavare la durata di una commessa
long ca_durata_commessa(const TRectype& rec_commesse, TDate& dataini, TDate& datafine);
#endif