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
|
||||
PROMPT 2 4 "Data inizio "
|
||||
FIELD DATAINIZIO
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
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
|
||||
long TPrint_saldana_recordset::durata_commessa(const TRectype& rec_commesse, const TDate& datafinesc,
|
||||
TDate& dataini, TDate& datafine) const
|
||||
long TPrint_saldana_recordset::durata_commessa(const TRectype& rec_commesse, TDate& dataini, TDate& datafine) const
|
||||
{
|
||||
//data iniziale commessa
|
||||
dataini = rec_commesse.get(COMMESSE_DATAINIZIO);
|
||||
//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) && rec_commesse.get(COMMESSE_DATAPROR).ok())
|
||||
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())
|
||||
if (rec_commesse.get_bool(COMMESSE_PROROGA))
|
||||
{
|
||||
datafine = datafinesc;
|
||||
datafine.addyear(1);
|
||||
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..
|
||||
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;
|
||||
}
|
||||
|
||||
@ -910,7 +941,7 @@ int TPrint_saldana_recordset::ricava_sezione_di_stampa(const TRectype& rec_comme
|
||||
|
||||
//data iniziale commessa
|
||||
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..
|
||||
//..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
|
||||
{
|
||||
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())
|
||||
{
|
||||
TDate dataini, datafine;
|
||||
durata_commessa(recset.cursor()->curr(), datafinesc, dataini, datafine);
|
||||
durata_commessa(rec_commessa, dataini, datafine);
|
||||
if (datafine >= datainiesc && dataini < data_min_comp)
|
||||
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
|
||||
TString query;
|
||||
query << "USE RMOVANA KEY 3\nJOIN MOVANA INTO NUMREG==NUMREG\n";
|
||||
query << "USE RMOVANA KEY 3\n";
|
||||
|
||||
switch (_tipostampa)
|
||||
{
|
||||
case 1:
|
||||
case 4:
|
||||
if (_fase.full())
|
||||
query << " SELECT CODFASE=\"" << _fase << "\"\n";
|
||||
query << "SELECT CODFASE=\"" << _fase << "\"\n";
|
||||
break;
|
||||
case 2:
|
||||
case 8:
|
||||
if (_cdc.full())
|
||||
query << " SELECT CODCCOSTO=\"" << _cdc << "\"\n";
|
||||
query << "SELECT CODCCOSTO=\"" << _cdc << "\"\n";
|
||||
break;
|
||||
case 3:
|
||||
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
|
||||
{
|
||||
if (_fase.full())
|
||||
query << " SELECT CODFASE=\"" << _fase << "\"\n";
|
||||
query << "SELECT CODFASE=\"" << _fase << "\"\n";
|
||||
else
|
||||
query << " SELECT CODCCOSTO=\"" << _cdc << "\"\n";
|
||||
query << "SELECT CODCCOSTO=\"" << _cdc << "\"\n";
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
query << "FROM DATACOMP=#MINDATACOMP\nTO DATACOMP=#DATACALCOLO";
|
||||
query << "JOIN MOVANA INTO NUMREG==NUMREG\nFROM DATACOMP=#MINDATACOMP\nTO DATACOMP=#DATACALCOLO";
|
||||
TISAM_recordset recset(query);
|
||||
recset.set_var("#DATACALCOLO", _datacalcolo);
|
||||
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...
|
||||
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
|
||||
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!
|
||||
//si aggiunge 1 perchè se un movimento ha datacomp=datafcomp (come in generale accade) in realtà..
|
||||
//..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;
|
||||
real calcola_avanzamento_tempo() const;
|
||||
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;
|
||||
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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user