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 TString& codcms = get("CODCMS").as_string();
|
||||||
const TRectype& rec_commesse = cache().get(LF_COMMESSE, codcms);
|
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..
|
//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
|
//trova la sezione del report in cui ricade in base alle date
|
||||||
int TPrint_saldana_recordset::ricava_sezione_di_stampa(const TRectype& rec_commesse,
|
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
|
//data iniziale commessa
|
||||||
TDate dataini, datafine;
|
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..
|
//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:
|
//..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())
|
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
|
||||||
{
|
{
|
||||||
TDate dataini, datafine;
|
TDate dataini, datafine;
|
||||||
durata_commessa(rec_commessa, dataini, datafine);
|
ca_durata_commessa(rec_commessa, dataini, datafine);
|
||||||
if (datafine >= datainiesc && dataini < data_min_comp)
|
if (datafine >= datainiesc && dataini < data_min_comp)
|
||||||
data_min_comp = dataini;
|
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
|
//data del cazzo che serve per non rovinare datacomp, che è la data sulla riga, non quella iniziale di cms
|
||||||
TDate datainicms;
|
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..
|
//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;
|
//..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,
|
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;
|
const TRectype& saldana, const bool inverti = false, const bool cms_detraz = false) const;
|
||||||
real calcola_avanzamento_tempo() 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;
|
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;
|
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;
|
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);
|
annies.add(esc_iniziale);
|
||||||
|
|
||||||
const char tipomov = get_char(MOVANA_TIPOMOV);
|
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 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)
|
if (datafcomp.ok() && datafcomp > datacomp)
|
||||||
{
|
{
|
||||||
TEsercizi_contabili esc;
|
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
|
TToken_string giorni_annies; //lista dei giorni di saldo per annoes
|
||||||
TEsercizi_contabili esc;
|
TEsercizi_contabili esc;
|
||||||
|
|
||||||
const TDate datacomp = get_date(MOVANA_DATACOMP);
|
|
||||||
const TDate datafcomp = get_date(MOVANA_DATAFCOMP);
|
|
||||||
|
|
||||||
TDate inizio_esc_iniziale, fine_esc_iniziale;
|
TDate inizio_esc_iniziale, fine_esc_iniziale;
|
||||||
esc.code2range(esc_iniziale, 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
|
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();
|
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
|
//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);
|
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
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user