Patch level :10.0

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :
personalizzazione adolfica in dirittura! manca veramente poco


git-svn-id: svn://10.65.10.50/trunk@20457 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2010-05-17 13:11:45 +00:00
parent c9aa12f2b3
commit 78a0c98a3e
2 changed files with 81 additions and 22 deletions

View File

@ -116,8 +116,8 @@ protected:
void set_status(bool edit);
int load(); //(costruttore e on_field) carica i dati per riempire lo sheet
int load_rmovana(const TString& cms, const bool include_cms_supp, TSheet_field& sf_righe); //(load()) carica le righe analitiche di preventivo
int load_saldana(const TString& cms, TSheet_field& sf_righe); //(load()) carica le righe di saldo consuntivo
long load_rmovana(const TString& cms, const bool include_cms_supp, TSheet_field& sf_righe); //(load()) carica le righe analitiche di preventivo
int load_saldana(const TString& cms, const long max_numreg, TSheet_field& sf_righe); //(load()) carica le righe di saldo consuntivo
TToken_string& add_rmovana(const TRectype& movana, const TRectype& rmovana, TSheet_field& sf_righe); //(load_rmovana()) metodo di basso livello..
//..per caricare fisicamente le righe sullo sheet
@ -544,10 +544,14 @@ int TVariazione_budget_mask::modifica_movana(const long numreg, TSheet_field& sf
//giro di controllo sulle date; le righe sheet, eventualmente modificate, devono avere un intervallo date..
//..compatibile con quello del movimento
const TDate datacomp = movana.get_date(MOVANA_DATACOMP);
TDate datafcomp = movana.get_date(MOVANA_DATAFCOMP);
const bool autofcomp = movana.get_bool(MOVANA_AUTOFCOMP);
if (!datafcomp.ok() && !autofcomp)
datafcomp = datacomp;
TDate datafcomp;
if (!autofcomp)
{
datafcomp = movana.get_date(MOVANA_DATAFCOMP);
if (!datafcomp.ok())
datafcomp = datacomp;
}
//controlla le righe sorelle dello sheet; se le date non rientrano in quelle della testata -> le righe..
//..vanno considerate nuove, e quindi va messo a 0 il loro numreg/numrig
@ -555,11 +559,15 @@ int TVariazione_budget_mask::modifica_movana(const long numreg, TSheet_field& sf
for (int i = last; i >= first; i--)
{
//date testata
const bool r_autofcomp = *sf_righe.cell(i, _pos_autofcomp) > ' ';
const TDate r_datacomp = sf_righe.cell(i, _pos_datacomp);
TDate r_datafcomp = sf_righe.cell(i, _pos_datafcomp);
if (!r_datafcomp.ok() && !r_autofcomp)
r_datafcomp = r_datacomp;
const bool r_autofcomp = *sf_righe.cell(i, _pos_autofcomp) > ' ';
TDate r_datafcomp;
if (!r_autofcomp)
{
r_datafcomp = sf_righe.cell(i, _pos_datafcomp);
if (!r_datafcomp.ok())
r_datafcomp = r_datacomp;
}
//importo riga: se nullo la riga verrà eliminata in quanto inutile all'umanità
const int r_numrig = atoi(sf_righe.cell(i, _pos_numrig));
@ -573,17 +581,31 @@ int TVariazione_budget_mask::modifica_movana(const long numreg, TSheet_field& sf
sf_righe.row(i).add("", _pos_numreg);
sf_righe.row(i).add("", _pos_numrig);
}
//elimina la riga dal movana
row_modified |= movana.destroy_row(r_numrig, true);
//elimina la riga dal movana (solo se appartiene al movana, ovvero numrig > 0)
if (r_numrig > 0)
row_modified |= movana.destroy_row(r_numrig, true);
}
else //qui invece ci vanno le righe modificate che sono solo da riscrivere (importo e/o descr modificate)
{
TRectype& rmovana = movana.body()[r_numrig];
//se la riga non esiste va creata, sennò è proprio lei!
TRectype& rmovana = r_numrig > 0 ? movana.body()[r_numrig] : movana.new_row();
//se la riga del movimento è nuova vanno riempiti tutti i campi
if (r_numrig <= 0)
{
rmovana.put(RMOVANA_CODCMS, sf_righe.cell(i, _pos_cms));
rmovana.put(RMOVANA_CODFASE, sf_righe.cell(i, _pos_fase));
rmovana.put(RMOVANA_CODCCOSTO, sf_righe.cell(i, _pos_cdc));
rmovana.put(RMOVANA_CODCONTO, sf_righe.cell(i, _pos_conto));
rmovana.put(RMOVANA_DATACOMP, sf_righe.cell(i, _pos_datacomp));
}
//importo
const real importo = rmovana.get_real(RMOVANA_IMPORTO);
if (importo != r_importo)
{
rmovana.put(RMOVANA_IMPORTO, r_importo);
const char r_sezione = sf_righe.cell(i, _pos_cosric)[0] == 'C' ? 'D' : 'A';
rmovana.put(RMOVANA_SEZIONE, r_sezione);
row_modified = true;
}
//descrizione
@ -892,7 +914,7 @@ TToken_string& TVariazione_budget_mask::add_rmovana(const TRectype& movana, cons
}
int TVariazione_budget_mask::load_rmovana(const TString& cms, const bool include_cms_supp, TSheet_field& sf_righe)
long TVariazione_budget_mask::load_rmovana(const TString& cms, const bool include_cms_supp, TSheet_field& sf_righe)
{
TString query;
query << "USE RMOVANA KEY 4\n";
@ -913,6 +935,7 @@ int TVariazione_budget_mask::load_rmovana(const TString& cms, const bool include
trova_cms_supporto(cms);
TAssoc_array numreg_cms;
long max_numreg = 0L;
//per ogni riga del recordset va ad aggiornare lo sheet sulla maschera (aggiunge la riga)
const TRectype& movana = recset.cursor()->curr(LF_MOVANA);
@ -923,7 +946,11 @@ int TVariazione_budget_mask::load_rmovana(const TString& cms, const bool include
break;
TToken_string& row = add_rmovana(movana, rmovana, sf_righe);
numreg_cms.add(row.get(_pos_numreg));
const char* str_numreg = row.get(_pos_numreg);
numreg_cms.add(str_numreg);
const long numreg = atol(str_numreg);
if (numreg > max_numreg)
max_numreg = numreg;
} //for(bool ok.move....
@ -960,11 +987,11 @@ int TVariazione_budget_mask::load_rmovana(const TString& cms, const bool include
if (str_saldo_prev.blank())
aggiorna_saldi_preventivi(sf_righe, i);
}
return sf_righe.items();
return max_numreg;
}
int TVariazione_budget_mask::load_saldana(const TString& cms, TSheet_field& sf_righe)
int TVariazione_budget_mask::load_saldana(const TString& cms, const long max_numreg, TSheet_field& sf_righe)
{
//caricamento di tutti i saldi consuntivi che riguardano la commessa
//chiave 2 per averli ordinati per conto
@ -1012,6 +1039,29 @@ int TVariazione_budget_mask::load_saldana(const TString& cms, TSheet_field& sf_r
}
}
//ricava le date da mettere nelle righe generate da saldana e l'eventuale autofcomp
TDate datacomp(TODAY), datafcomp(TODAY);
bool autofcomp = false;
if (max_numreg > 0)
{
FOR_EACH_SHEET_ROW(sf_righe, r, riga)
{
const long curr_numreg = riga->get_long(_pos_numreg);
if (curr_numreg == max_numreg)
{
const int curr_numrig = riga->get_int(_pos_numrig);
if (curr_numrig > 0)
{
datacomp = riga->get(_pos_datacomp);
datafcomp = riga->get(_pos_datafcomp);
autofcomp = riga->get_char(_pos_autofcomp) > ' ';
break;
}
}
}
}
//per ogni riga dell'assoc_array con conto/cdc/cms/fase/saldo va ad aggiornare lo sheet sulla maschera (aggiunge la riga)
FOR_EACH_ASSOC_OBJECT(chiavi_saldana, obj, key, itm)
{
@ -1032,9 +1082,11 @@ int TVariazione_budget_mask::load_saldana(const TString& cms, TSheet_field& sf_r
row.add(fase, _pos_fase);
row.add(conto, _pos_conto);
const TDate oggi(TODAY);
row.add(oggi, _pos_datacomp);
row.add(oggi, _pos_datafcomp);
row.add(datacomp, _pos_datacomp);
row.add(autofcomp ? "X" : "", _pos_autofcomp);
row.add(datafcomp, _pos_datafcomp);
if (autofcomp)
sf_righe.disable_cell(sf_righe.items() - 1, _pos_datafcomp);
//costo o ricavo? all'indbil l'ardua sentenza!
TAnal_bill bill(conto, cdc, cms, fase);
@ -1049,6 +1101,8 @@ int TVariazione_budget_mask::load_saldana(const TString& cms, TSheet_field& sf_r
//aggiunge una descrizione civetta
row.add("Riga da saldo", _pos_descr);
//ci mette il max_numreg
row.add(max_numreg, _pos_numreg);
//segna il tipo riga come saldo
row.add("P", _pos_tipomov);
}
@ -1073,10 +1127,10 @@ int TVariazione_budget_mask::load()
sf_righe.destroy();
//carica le righe dei movimenti preventivi
const int righe_rmovana = load_rmovana(cms, include_cms_supp, sf_righe);
const long max_numreg = load_rmovana(cms, include_cms_supp, sf_righe);
//carica le righe dei saldi consuntivi
const int righe_saldana = load_saldana(cms, sf_righe);
const int righe_saldana = load_saldana(cms, max_numreg, sf_righe);
//e poi aggiorna il video!
sf_righe.force_update();

View File

@ -233,7 +233,12 @@ END
TEXT DLG_NULL
BEGIN
PROMPT 1 10 "_ Il pulsante Tutti spunta le righe, una per ogni chiave Sede/Fase/Conto"
PROMPT 1 10 "_ In fase di registrazione le righe provenienti da saldi consuntivi vengono assegnate all'ultimo movimento di preventivo"
END
TEXT DLG_NULL
BEGIN
PROMPT 1 11 "_ Il pulsante Tutti spunta le righe, una per ogni chiave Sede/Fase/Conto"
END
ENDPAGE