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:
luca 2009-05-11 13:54:00 +00:00
parent 0ff63214f1
commit ae6f813700
3 changed files with 64 additions and 27 deletions

View File

@ -212,6 +212,7 @@ DATE F_CMS_DATAINIZIO
BEGIN
PROMPT 2 4 "Data inizio "
FIELD DATAINIZIO
CHECKTYPE REQUIRED
END
DATE F_CMS_DATAFINE

View File

@ -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

View File

@ -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;