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:
parent
5e1edf2a5e
commit
9e8bad6ed9
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user