Patch level :10.0 300
Files correlati : Ricompilazione Demo : [ ] Commento : prima stesura semifunzionante del bilancio di commessa con i movimenti oltre che i saldi git-svn-id: svn://10.65.10.50/trunk@18851 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
0ff63214f1
commit
ae6f813700
@ -212,6 +212,7 @@ DATE F_CMS_DATAINIZIO
|
|||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 4 "Data inizio "
|
PROMPT 2 4 "Data inizio "
|
||||||
FIELD DATAINIZIO
|
FIELD DATAINIZIO
|
||||||
|
CHECKTYPE REQUIRED
|
||||||
END
|
END
|
||||||
|
|
||||||
DATE F_CMS_DATAFINE
|
DATE F_CMS_DATAFINE
|
||||||
|
@ -879,26 +879,57 @@ void TPrint_saldana_recordset::aggiorna_importi(TAssoc_array& riga_array,
|
|||||||
}
|
}
|
||||||
|
|
||||||
//calcola la durata di una commessa e le sue date di inizio e fine
|
//calcola la durata di una commessa e le sue date di inizio e fine
|
||||||
long TPrint_saldana_recordset::durata_commessa(const TRectype& rec_commesse, const TDate& datafinesc,
|
long TPrint_saldana_recordset::durata_commessa(const TRectype& rec_commesse, TDate& dataini, TDate& datafine) const
|
||||||
TDate& dataini, TDate& datafine) const
|
|
||||||
{
|
{
|
||||||
//data iniziale commessa
|
//date iniziale e finale commessa
|
||||||
dataini = rec_commesse.get(COMMESSE_DATAINIZIO);
|
dataini = rec_commesse.get_date(COMMESSE_DATAINIZIO);
|
||||||
|
datafine = rec_commesse.get_date(COMMESSE_DATAFINE);
|
||||||
|
|
||||||
//per la data fine deve tener conto di eventuali proroghe..
|
//per la data fine deve tener conto di eventuali proroghe..
|
||||||
if (rec_commesse.get_bool(COMMESSE_PROROGA) && rec_commesse.get(COMMESSE_DATAPROR).ok())
|
if (rec_commesse.get_bool(COMMESSE_PROROGA))
|
||||||
datafine = rec_commesse.get(COMMESSE_DATAPROR);
|
|
||||||
else
|
|
||||||
datafine = rec_commesse.get(COMMESSE_DATAFINE);
|
|
||||||
|
|
||||||
//datafine.ok() va messo per gli utonti che mettono le commesse all'infinito senza specificare la datafine
|
|
||||||
//in questo modo la commessa e' come se terminasse l'anno dopo e viene stampata nella sezione 2 (vedi sotto)
|
|
||||||
if (!datafine.ok())
|
|
||||||
{
|
{
|
||||||
datafine = datafinesc;
|
const TDate datapror = rec_commesse.get_date(COMMESSE_DATAPROR);
|
||||||
datafine.addyear(1);
|
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..
|
||||||
|
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;
|
return datafine - dataini + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -910,7 +941,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, datafinesc, dataini, datafine);
|
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:
|
||||||
@ -977,11 +1008,12 @@ TString TPrint_saldana_recordset::ricava_chiave_cdc_fase(const TString& codcms,
|
|||||||
const TDate TPrint_saldana_recordset::calcola_min_datacomp(const TDate& datainiesc, const TDate& datafinesc) const
|
const TDate TPrint_saldana_recordset::calcola_min_datacomp(const TDate& datainiesc, const TDate& datafinesc) const
|
||||||
{
|
{
|
||||||
TDate data_min_comp = datainiesc;
|
TDate data_min_comp = datainiesc;
|
||||||
TISAM_recordset recset("USE COMMESSE"); //\nSELECT BETWEEN(DATAFINE,#DATAINIESC,0)||BETWEEN(DATAPROR,#DATAINIESC,0)||(DATAFINE='')");
|
TISAM_recordset recset("USE COMMESSE");
|
||||||
|
const TRectype& rec_commessa = recset.cursor()->curr();
|
||||||
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(recset.cursor()->curr(), datafinesc, dataini, datafine);
|
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;
|
||||||
}
|
}
|
||||||
@ -1113,42 +1145,42 @@ void TPrint_saldana_recordset::parse_rmovana(TAssoc_array* cms, const TDate& dat
|
|||||||
|
|
||||||
//cerca tutte le rmovana che soddisfano gli innumerevoli parametri
|
//cerca tutte le rmovana che soddisfano gli innumerevoli parametri
|
||||||
TString query;
|
TString query;
|
||||||
query << "USE RMOVANA KEY 3\nJOIN MOVANA INTO NUMREG==NUMREG\n";
|
query << "USE RMOVANA KEY 3\n";
|
||||||
|
|
||||||
switch (_tipostampa)
|
switch (_tipostampa)
|
||||||
{
|
{
|
||||||
case 1:
|
case 1:
|
||||||
case 4:
|
case 4:
|
||||||
if (_fase.full())
|
if (_fase.full())
|
||||||
query << " SELECT CODFASE=\"" << _fase << "\"\n";
|
query << "SELECT CODFASE=\"" << _fase << "\"\n";
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
case 8:
|
case 8:
|
||||||
if (_cdc.full())
|
if (_cdc.full())
|
||||||
query << " SELECT CODCCOSTO=\"" << _cdc << "\"\n";
|
query << "SELECT CODCCOSTO=\"" << _cdc << "\"\n";
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
if (_fase.full() || _cdc.full())
|
if (_fase.full() || _cdc.full())
|
||||||
{
|
{
|
||||||
if (_fase.full() && _cdc.full())
|
if (_fase.full() && _cdc.full())
|
||||||
query << " SELECT (CODFASE=\"" << _fase << "\")&&(CODCCOSTO=\"" << _cdc << "\")\n";
|
query << "SELECT (CODFASE=\"" << _fase << "\")&&(CODCCOSTO=\"" << _cdc << "\")\n";
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (_fase.full())
|
if (_fase.full())
|
||||||
query << " SELECT CODFASE=\"" << _fase << "\"\n";
|
query << "SELECT CODFASE=\"" << _fase << "\"\n";
|
||||||
else
|
else
|
||||||
query << " SELECT CODCCOSTO=\"" << _cdc << "\"\n";
|
query << "SELECT CODCCOSTO=\"" << _cdc << "\"\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
query << "FROM DATACOMP=#MINDATACOMP\nTO DATACOMP=#DATACALCOLO";
|
query << "JOIN MOVANA INTO NUMREG==NUMREG\nFROM DATACOMP=#MINDATACOMP\nTO DATACOMP=#DATACALCOLO";
|
||||||
TISAM_recordset recset(query);
|
TISAM_recordset recset(query);
|
||||||
recset.set_var("#DATACALCOLO", _datacalcolo);
|
recset.set_var("#DATACALCOLO", _datacalcolo);
|
||||||
recset.set_var("#MINDATACOMP", min_datacomp);
|
recset.set_var("#MINDATACOMP", min_datacomp);
|
||||||
|
|
||||||
const long recset_items = recset.items();
|
const TRecnotype recset_items = recset.items();
|
||||||
//se ci sono movana che non expirano prima dell'inizio esercizio e la cui datacomp è anteriore a datacalcolo...
|
//se ci sono movana che non expirano prima dell'inizio esercizio e la cui datacomp è anteriore a datacalcolo...
|
||||||
if (recset_items > 0)
|
if (recset_items > 0)
|
||||||
{
|
{
|
||||||
@ -1193,8 +1225,12 @@ void TPrint_saldana_recordset::parse_rmovana(TAssoc_array* cms, const TDate& dat
|
|||||||
{
|
{
|
||||||
//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, datafinesc, datainicms, datafcomp);
|
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;
|
||||||
|
if (!datafcomp.ok())
|
||||||
|
datafcomp = datacomp;
|
||||||
//finalmente la tanto agognata vita della riga di movana!
|
//finalmente la tanto agognata vita della riga di movana!
|
||||||
//si aggiunge 1 perchè se un movimento ha datacomp=datafcomp (come in generale accade) in realtà..
|
//si aggiunge 1 perchè se un movimento ha datacomp=datafcomp (come in generale accade) in realtà..
|
||||||
//..il poveretto vive un giorno, non 0
|
//..il poveretto vive un giorno, non 0
|
||||||
|
@ -101,7 +101,7 @@ protected:
|
|||||||
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;
|
||||||
void create_lines_to_print(const TString& query);
|
void create_lines_to_print(const TString& query);
|
||||||
long durata_commessa(const TRectype& rec_commesse, const TDate& datafinesc, TDate& dataini, TDate& datafine) 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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user