Patch level :10.0
Files correlati : Ricompilazione Demo : [ ] Commento : prosegue la nuova gestione movimenti di budget git-svn-id: svn://10.65.10.50/trunk@20446 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
24d509402e
commit
a6de1757cc
378
ps/ps1001300.cpp
378
ps/ps1001300.cpp
@ -10,6 +10,7 @@
|
||||
#include "../ca/commesse.h"
|
||||
#include "../ca/movana.h"
|
||||
#include "../ca/rmovana.h"
|
||||
#include "../ca/saldana.h"
|
||||
|
||||
#include "ps1001.h"
|
||||
#include "ps1001300a.h"
|
||||
@ -64,21 +65,31 @@ static int compare_by_numrig(TSheet_field& s, int r1, int r2)
|
||||
}
|
||||
|
||||
//nota: nelle ststic non si possono usare i _pos_quel, perchè sono di maschera
|
||||
//ordina le righe per sede/fase/conto (string+string+string)
|
||||
//ordina le righe per cms/sede/fase/conto (string+string+string)
|
||||
static int compare_by_fase(TSheet_field & s, int r1, int r2)
|
||||
{
|
||||
TToken_string& s1 = s.row(r1);
|
||||
TToken_string& s2 = s.row(r2);
|
||||
|
||||
const int tipo_pos = s.cid2index(S_TIPOMOV);
|
||||
const int cms_pos = s.cid2index(S_CMS);
|
||||
const int cdc_pos = s.cid2index(S_CDC);
|
||||
const int fase_pos = s.cid2index(S_FASE);
|
||||
const int conto_pos = s.cid2index(S_CONTO);
|
||||
|
||||
TToken_string c1;
|
||||
c1.add(s1.get(1));
|
||||
c1.add(s1.get(2));
|
||||
c1.add(s1.get(3));
|
||||
c1.add(s1.get(tipo_pos));
|
||||
c1.add(s1.get(cms_pos));
|
||||
c1.add(s1.get(cdc_pos));
|
||||
c1.add(s1.get(fase_pos));
|
||||
c1.add(s1.get(conto_pos));
|
||||
|
||||
TToken_string c2;
|
||||
c2.add(s2.get(1));
|
||||
c2.add(s2.get(2));
|
||||
c2.add(s2.get(3));
|
||||
c2.add(s2.get(tipo_pos));
|
||||
c2.add(s2.get(cms_pos));
|
||||
c2.add(s2.get(cdc_pos));
|
||||
c2.add(s2.get(fase_pos));
|
||||
c2.add(s2.get(conto_pos));
|
||||
|
||||
int cmp = c1.compare(c2);
|
||||
|
||||
@ -95,14 +106,20 @@ class TVariazione_budget_mask : public TAutomask
|
||||
{
|
||||
bool _dirty;
|
||||
//posizioni dei vari campi dello sheet: vengono assegnati nel costruttore
|
||||
int _pos_check, _pos_cdc, _pos_fase, _pos_conto, _pos_datacomp, _pos_autofcomp, _pos_datafcomp,
|
||||
int _pos_cms, _pos_check, _pos_cdc, _pos_fase, _pos_conto, _pos_datacomp, _pos_autofcomp, _pos_datafcomp,
|
||||
_pos_cosric, _pos_imp, _pos_prev, _pos_mat, _pos_descr, _pos_numreg, _pos_numrig, _pos_tipomov;
|
||||
|
||||
TToken_string _cms_supporto;
|
||||
|
||||
protected:
|
||||
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||
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
|
||||
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
|
||||
|
||||
bool one_checked() const; //(on_field) controlla se nella colonna dei check ce ne è almeno 1 checkato
|
||||
void check_all(const bool checked); //(on_field) checka-dechecka la colonna dei check
|
||||
@ -113,6 +130,7 @@ protected:
|
||||
|
||||
void sistema_date_cms(TDate& datainicms, TDate& datafinecms);
|
||||
|
||||
void trova_cms_supporto(const TString& codcms); //(load(),on_field()) riempie la lista con le commesse di supporto valide
|
||||
void aggiorna_saldi_preventivi(TSheet_field& sf_righe, const int curr_riga); //(load()) crea i saldi preventivi in base agli importi
|
||||
|
||||
bool save_commessa(); //(save()) salva i cambiamenti di date della commessa esaminata
|
||||
@ -131,10 +149,12 @@ TVariazione_budget_mask::TVariazione_budget_mask() : TAutomask ("ps1001300a")
|
||||
//carica la causale che trova nel ditta.ini
|
||||
TConfig ditta_ini(CONFIG_DITTA, "ps1001");
|
||||
set(F_CODCAUS, ditta_ini.get("CodCaus"), 0x3);
|
||||
set(F_INCLUDESUPP, ditta_ini.get_bool("InclSupp"));
|
||||
|
||||
//setta le posizioni dei campi dello sheet
|
||||
TSheet_field& sf_righe = sfield(F_RIGHE);
|
||||
_pos_check = sf_righe.cid2index(S_CHECK);
|
||||
_pos_cms = sf_righe.cid2index(S_CMS);
|
||||
_pos_cdc = sf_righe.cid2index(S_CDC);
|
||||
_pos_fase = sf_righe.cid2index(S_FASE);
|
||||
_pos_conto = sf_righe.cid2index(S_CONTO);
|
||||
@ -156,6 +176,7 @@ TVariazione_budget_mask::~TVariazione_budget_mask()
|
||||
//salva nel ditta.ini la causale sulla maschera
|
||||
TConfig ditta_ini(CONFIG_DITTA, "ps1001");
|
||||
ditta_ini.set("CodCaus", get(F_CODCAUS));
|
||||
ditta_ini.set("InclSupp", get_bool(F_INCLUDESUPP));
|
||||
}
|
||||
|
||||
//crea la chiave cdc/fase/conto
|
||||
@ -275,6 +296,13 @@ bool TVariazione_budget_mask::on_field_event(TOperable_field& o, TField_event e,
|
||||
{
|
||||
case se_query_add: return field(DLG_CANCEL).enabled();
|
||||
case se_query_del: return false;
|
||||
case se_notify_add:
|
||||
{
|
||||
const TString& codcms = get(F_CODCMS);
|
||||
TMask& sheet_mask = sfield(F_RIGHE).sheet_mask();
|
||||
sheet_mask.set(S_CMS, codcms);
|
||||
}
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
break;
|
||||
@ -334,7 +362,7 @@ bool TVariazione_budget_mask::on_field_event(TOperable_field& o, TField_event e,
|
||||
case S_SO:
|
||||
if (e == fe_init)
|
||||
{
|
||||
TMask& m = o.mask(); //mascehra di riga
|
||||
TMask& m = o.mask(); //maschera di riga
|
||||
const TString& contone = m.get(S_CONTO);
|
||||
m.set(S_GR, contone.left(3));
|
||||
m.set(S_CO, contone.mid(3,3));
|
||||
@ -342,7 +370,7 @@ bool TVariazione_budget_mask::on_field_event(TOperable_field& o, TField_event e,
|
||||
}
|
||||
if (e == fe_modify || e == fe_close)
|
||||
{
|
||||
TMask& m = o.mask(); //mascehra di riga
|
||||
TMask& m = o.mask(); //maschera di riga
|
||||
TString16 contone;
|
||||
contone << m.get(S_GR) << m.get(S_CO) << m.get(S_SO);
|
||||
m.set(S_CONTO, contone);
|
||||
@ -757,8 +785,114 @@ void TVariazione_budget_mask::aggiorna_saldi_preventivi(TSheet_field& sf_righe,
|
||||
}
|
||||
}
|
||||
|
||||
//in base alla commessa parametro, trova tutte le commesse di supporto
|
||||
void TVariazione_budget_mask::trova_cms_supporto(const TString& codcms)
|
||||
{
|
||||
const TRectype& rec_cms = cache().get(LF_COMMESSE, codcms);
|
||||
const bool is_cms_supporto = rec_cms.get_bool(COMMESSE_APPOGGIO);
|
||||
|
||||
//comunque la commessa selezionata ci va
|
||||
_cms_supporto = codcms;
|
||||
|
||||
int TVariazione_budget_mask::load()
|
||||
//tutto il casino vale solo per le commesse normali; se viene selezionata una commessa di supporto..
|
||||
//..si può agire solo su di lei!
|
||||
if (!is_cms_supporto)
|
||||
{
|
||||
const TDate cms_dataini = rec_cms.get_date(COMMESSE_DATAINIZIO);
|
||||
TDate cms_datafine;
|
||||
const bool pro = rec_cms.get_bool(COMMESSE_PROROGA);
|
||||
if (pro)
|
||||
cms_datafine = rec_cms.get_date(COMMESSE_DATAPROR);
|
||||
if (!pro || !cms_datafine.ok())
|
||||
cms_datafine = rec_cms.get_date(COMMESSE_DATAFINE);
|
||||
|
||||
TString query;
|
||||
query << "USE COMMESSE\n";
|
||||
query << "SELECT ((APPOGGIO=\"X\")&&((NUM(ANSI(DATAINIZIO)<=ANSI(#DATAFINECMS)))&&(NUM(ANSI(DATAFINE)>=ANSI(#DATAINIZIOCMS)))))\n";
|
||||
TISAM_recordset commesse(query);
|
||||
commesse.set_var("#DATAFINECMS", cms_datafine);
|
||||
commesse.set_var("#DATAINIZIOCMS", cms_dataini);
|
||||
|
||||
const int items = commesse.items();
|
||||
for(bool ok = commesse.move_first(); ok; ok = commesse.move_next())
|
||||
_cms_supporto.add(commesse.get(COMMESSE_CODCMS).as_string());
|
||||
}
|
||||
|
||||
//alla fine assegna al campo lista S_CMS della maschera di riga i valori possibili della lista
|
||||
TMask& sheet_mask = sfield(F_RIGHE).sheet_mask();
|
||||
TList_field& cms_list = sheet_mask.lfield(S_CMS);
|
||||
cms_list.replace_items(_cms_supporto, _cms_supporto);
|
||||
sheet_mask.reset();
|
||||
|
||||
}
|
||||
|
||||
|
||||
TToken_string& TVariazione_budget_mask::add_rmovana(const TRectype& movana, const TRectype& rmovana, TSheet_field& sf_righe)
|
||||
{
|
||||
TToken_string& row = sf_righe.row(-1);
|
||||
|
||||
//chiave iniziale di riga
|
||||
const TString& cms = rmovana.get(RMOVANA_CODCMS);
|
||||
row.add(cms, _pos_cms);
|
||||
const TString& cdc = rmovana.get(RMOVANA_CODCCOSTO);
|
||||
row.add(cdc, _pos_cdc);
|
||||
const TString& fase = rmovana.get(RMOVANA_CODFASE);
|
||||
row.add(fase, _pos_fase);
|
||||
const TString& conto = rmovana.get(RMOVANA_CODCONTO);
|
||||
row.add(conto, _pos_conto);
|
||||
|
||||
//date competenza iniziale e finale
|
||||
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;
|
||||
|
||||
row.add(datacomp, _pos_datacomp);
|
||||
row.add(autofcomp ? "X" : "", _pos_autofcomp);
|
||||
//se c'è l'auto fine competenza la cella con la data fine competenza va svuotata..
|
||||
//..e disabilitata senno' ci va messa e basta
|
||||
if (!autofcomp)
|
||||
row.add(datafcomp, _pos_datafcomp);
|
||||
else
|
||||
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);
|
||||
const int indbil = bill.indicatore_bilancio();
|
||||
const char* str_indbil = indbil == 3 ? "C" : "R";
|
||||
row.add(str_indbil, _pos_cosric);
|
||||
|
||||
real valore = rmovana.get_real(RMOVANA_IMPORTO);
|
||||
const char sezione = rmovana.get_char(RMOVANA_SEZIONE);
|
||||
TImporto importo(sezione, valore);
|
||||
importo.normalize(indbil == 3 ? 'D' : 'A');
|
||||
valore = importo.valore();
|
||||
row.add(valore.string(), _pos_imp);
|
||||
|
||||
const TDate dataini, datafin;
|
||||
//recupera il saldo finale consuntivo! in base alla chiave cms/cdc/fase/conto e lo mette nel campo consuntivo
|
||||
const TSaldanal& saldanal_cons = ca_saldo(bill, dataini, datafin, _saldanal_consuntivo | _saldanal_ultima_imm);
|
||||
TImporto saldo_cons = saldanal_cons._fin;
|
||||
saldo_cons.normalize(indbil == 3 ? 'D' : 'A');
|
||||
const real saldo_cons_valore = saldo_cons.valore();
|
||||
row.add(saldo_cons_valore.string(), _pos_mat);
|
||||
|
||||
//completa la riga
|
||||
row.add(rmovana.get(RMOVANA_DESCR), _pos_descr);
|
||||
//il numreg lo deve ricordare per le righe di appoggio
|
||||
const long numreg = rmovana.get_long(RMOVANA_NUMREG);
|
||||
row.add(numreg, _pos_numreg);
|
||||
|
||||
row.add(rmovana.get_int(RMOVANA_NUMRIG), _pos_numrig);
|
||||
const TString& tipomov = movana.get(MOVANA_TIPOMOV);
|
||||
row.add(tipomov, _pos_tipomov);
|
||||
|
||||
return row;
|
||||
}
|
||||
|
||||
|
||||
int 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";
|
||||
@ -767,80 +901,55 @@ int TVariazione_budget_mask::load()
|
||||
query << "FROM CODCMS=#CODCMS\n";
|
||||
query << "TO CODCMS=#CODCMS\n";
|
||||
//instanzio un TISAM_recordset sulle rmovana
|
||||
TISAM_recordset rmovana(query);
|
||||
const TString& cms = get(F_CODCMS);
|
||||
rmovana.set_var("#CODCMS", cms);
|
||||
TISAM_recordset recset(query);
|
||||
recset.set_var("#CODCMS", cms);
|
||||
|
||||
const long rmovana_items = rmovana.items();
|
||||
TProgind pi(rmovana_items, TR("Caricamento righe..."), true, true);
|
||||
const long recset_items = recset.items();
|
||||
TProgind pi(recset_items, TR("Caricamento righe..."), true, true);
|
||||
|
||||
//recupero sheet e realtiva mashera di riga
|
||||
TSheet_field& sf_righe = sfield(F_RIGHE);
|
||||
TMask& msk = sf_righe.sheet_mask();
|
||||
sf_righe.destroy();
|
||||
//riempie lo string_array _cms_supporto in base ai parametri della commessa scelta..
|
||||
//..e al fatto che l'utente lo voglia o meno...
|
||||
if (include_cms_supp)
|
||||
trova_cms_supporto(cms);
|
||||
|
||||
TAssoc_array numreg_cms;
|
||||
|
||||
//per ogni riga del recordset va ad aggiornare lo sheet sulla maschera (aggiunge la riga)
|
||||
for (bool ok = rmovana.move_first(); ok; ok = rmovana.move_next())
|
||||
const TRectype& movana = recset.cursor()->curr(LF_MOVANA);
|
||||
const TRectype& rmovana = recset.cursor()->curr(LF_RMOVANA);
|
||||
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
|
||||
{
|
||||
if (!pi.addstatus(1))
|
||||
break;
|
||||
|
||||
TToken_string& row = sf_righe.row(-1);
|
||||
|
||||
//chiave iniziale di riga
|
||||
const TString& cdc = rmovana.get(RMOVANA_CODCCOSTO).as_string();
|
||||
row.add(cdc, _pos_cdc);
|
||||
const TString& fase = rmovana.get(RMOVANA_CODFASE).as_string();
|
||||
row.add(fase, _pos_fase);
|
||||
const TString& conto = rmovana.get(RMOVANA_CODCONTO).as_string();
|
||||
row.add(conto, _pos_conto);
|
||||
|
||||
//date competenza iniziale e finale
|
||||
const TDate datacomp = rmovana.get("MOVANA."MOVANA_DATACOMP).as_date();
|
||||
TDate datafcomp = rmovana.get("MOVANA."MOVANA_DATAFCOMP).as_date();
|
||||
const bool autofcomp = rmovana.get("MOVANA."MOVANA_AUTOFCOMP).as_bool();
|
||||
if (!datafcomp.ok() && !autofcomp)
|
||||
datafcomp = datacomp;
|
||||
|
||||
row.add(datacomp, _pos_datacomp);
|
||||
row.add(autofcomp ? "X" : "", _pos_autofcomp);
|
||||
//se c'è l'auto fine competenza la cella con la data fine competenza va svuotata..
|
||||
//..e disabilitata senno' ci va messa e basta
|
||||
if (!autofcomp)
|
||||
row.add(datafcomp, _pos_datafcomp);
|
||||
else
|
||||
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);
|
||||
const int indbil = bill.indicatore_bilancio();
|
||||
const char* str_indbil = indbil == 3 ? "C" : "R";
|
||||
row.add(str_indbil, _pos_cosric);
|
||||
|
||||
real valore = rmovana.get(RMOVANA_IMPORTO).as_real();
|
||||
const char sezione = rmovana.get(RMOVANA_SEZIONE).as_string()[0];
|
||||
TImporto importo(sezione, valore);
|
||||
importo.normalize(indbil == 3 ? 'D' : 'A');
|
||||
valore = importo.valore();
|
||||
row.add(valore.string(), _pos_imp);
|
||||
|
||||
const TDate dataini, datafin;
|
||||
//recupera il saldo finale consuntivo! in base alla chiave cms/cdc/fase/conto e lo mette nel campo consuntivo
|
||||
const TSaldanal& saldanal_cons = ca_saldo(bill, dataini, datafin, _saldanal_consuntivo | _saldanal_ultima_imm);
|
||||
TImporto saldo_cons = saldanal_cons._fin;
|
||||
saldo_cons.normalize(indbil == 3 ? 'D' : 'A');
|
||||
const real saldo_cons_valore = saldo_cons.valore();
|
||||
row.add(saldo_cons_valore.string(), _pos_mat);
|
||||
|
||||
//completa la riga
|
||||
row.add(rmovana.get(RMOVANA_DESCR).as_string(), _pos_descr);
|
||||
row.add(rmovana.get(RMOVANA_NUMREG).as_int(), _pos_numreg);
|
||||
row.add(rmovana.get(RMOVANA_NUMRIG).as_int(), _pos_numrig);
|
||||
const TString& tipomov = rmovana.get("MOVANA."MOVANA_TIPOMOV).as_string();
|
||||
row.add(tipomov, _pos_tipomov);
|
||||
TToken_string& row = add_rmovana(movana, rmovana, sf_righe);
|
||||
numreg_cms.add(row.get(_pos_numreg));
|
||||
} //for(bool ok.move....
|
||||
|
||||
//prima di riempire lo sheet a video ordina le righe per sede/fase/numreg/numrig
|
||||
|
||||
//panegirico per trovare le righe delle commesse di supporto
|
||||
//ovviamente ce ne deve essere almeno 1, quindi..
|
||||
if (_cms_supporto.items() > 1 && include_cms_supp)
|
||||
{
|
||||
FOR_EACH_ASSOC_OBJECT(numreg_cms, obj, key, itm)
|
||||
{
|
||||
TAnal_mov movana(atol(key));
|
||||
const int righe_movana = movana.rows();
|
||||
for (int r = 1; r <= righe_movana; r++)
|
||||
{
|
||||
const TRectype& rec_rmovana = movana.body()[r];
|
||||
const TString& curr_cms = rec_rmovana.get(RMOVANA_CODCMS);
|
||||
if (_cms_supporto.get_pos(curr_cms) > 0) // NON >= o ci metterebbe anche la commessa standard!!!!
|
||||
{
|
||||
TToken_string& row = add_rmovana(movana, rec_rmovana, sf_righe);
|
||||
row.add("S", _pos_tipomov); //è una riga di 'S'upporto
|
||||
}
|
||||
}
|
||||
}
|
||||
} //if (_cms_supporto.items() > 1)
|
||||
|
||||
|
||||
//prima di riempire lo sheet a video ordina le righe per tipo/cms/sede/fase/numreg/numrig
|
||||
sf_righe.sort(compare_by_fase);
|
||||
|
||||
//in base alle righe caricate ricava i saldi preventivi
|
||||
@ -851,7 +960,124 @@ int TVariazione_budget_mask::load()
|
||||
if (str_saldo_prev.blank())
|
||||
aggiorna_saldi_preventivi(sf_righe, i);
|
||||
}
|
||||
|
||||
return sf_righe.items();
|
||||
}
|
||||
|
||||
|
||||
int TVariazione_budget_mask::load_saldana(const TString& cms, TSheet_field& sf_righe)
|
||||
{
|
||||
//caricamento di tutti i saldi consuntivi che riguardano la commessa
|
||||
//chiave 2 per averli ordinati per conto
|
||||
TString query;
|
||||
query << "USE SALDANA KEY 2\n";
|
||||
query << "SELECT (COMMESSA=#CODCMS)\n";
|
||||
|
||||
//instanzio un TISAM_recordset sui saldana
|
||||
TISAM_recordset saldana(query);
|
||||
saldana.set_var("#CODCMS", cms);
|
||||
|
||||
const long saldana_items = saldana.items();
|
||||
TProgind pi(saldana_items, TR("Caricamento saldi consuntivi..."), true, true);
|
||||
|
||||
TAssoc_array chiavi_saldana;
|
||||
TToken_string chiave;
|
||||
//riempie l'assoc_array conto/cdc/cms/fase/saldo
|
||||
for (bool ok = saldana.move_first(); ok; ok = saldana.move_next())
|
||||
{
|
||||
const TString& conto = saldana.get(SALDANA_CONTO).as_string();
|
||||
const TString& cdc = saldana.get(SALDANA_COSTO).as_string();
|
||||
const TString& fase = saldana.get(SALDANA_FASE).as_string();
|
||||
const real saldop = saldana.get(SALDANA_SALDOP).as_real();
|
||||
const real saldo = saldana.get(SALDANA_SALDO).as_real();
|
||||
//solo i record senza saldop vanno considerati!!! Quelli con con saldop != 0 vengono fuori in load_rmovana
|
||||
if (saldop.is_zero() && saldo != ZERO)
|
||||
{
|
||||
chiave.cut(0);
|
||||
chiave.add(conto);
|
||||
chiave.add(cdc);
|
||||
chiave.add(cms);
|
||||
chiave.add(fase);
|
||||
|
||||
//se non trova la chiave la aggiunge
|
||||
TImporto* s = (TImporto*)chiavi_saldana.objptr(chiave);
|
||||
if (s == NULL)
|
||||
{
|
||||
s = new TImporto;
|
||||
chiavi_saldana.add(chiave, s);
|
||||
}
|
||||
//poi somma il saldo (come importo!)
|
||||
const char sez = saldana.get(SALDANA_SEZIONE).as_string()[0];
|
||||
TImporto imp_saldo_curr(sez, saldo);
|
||||
*s += imp_saldo_curr;
|
||||
}
|
||||
}
|
||||
|
||||
//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)
|
||||
{
|
||||
if (!pi.addstatus(1))
|
||||
break;
|
||||
|
||||
TToken_string& row = sf_righe.row(-1);
|
||||
|
||||
//estrae l'elemento dell'assoc_array
|
||||
TToken_string key_bill(key);
|
||||
const TString80 conto = key_bill.get(0);
|
||||
const TString80 cdc = key_bill.get(1);
|
||||
const TString80 cms = key_bill.get(2);
|
||||
const TString16 fase = key_bill.get(3);
|
||||
|
||||
row.add(cms, _pos_cms);
|
||||
row.add(cdc, _pos_cdc);
|
||||
row.add(fase, _pos_fase);
|
||||
row.add(conto, _pos_conto);
|
||||
|
||||
const TDate oggi(TODAY);
|
||||
row.add(oggi, _pos_datacomp);
|
||||
row.add(oggi, _pos_datafcomp);
|
||||
|
||||
//costo o ricavo? all'indbil l'ardua sentenza!
|
||||
TAnal_bill bill(conto, cdc, cms, fase);
|
||||
const int indbil = bill.indicatore_bilancio();
|
||||
const char* str_indbil = indbil == 3 ? "C" : "R";
|
||||
row.add(str_indbil, _pos_cosric);
|
||||
|
||||
TImporto& saldo_cons = *(TImporto*)itm;
|
||||
saldo_cons.normalize(indbil == 3 ? 'D' : 'A');
|
||||
const real saldo_cons_valore = saldo_cons.valore();
|
||||
row.add(saldo_cons_valore.string(), _pos_mat);
|
||||
|
||||
//aggiunge una descrizione civetta
|
||||
row.add("Riga da saldo", _pos_descr);
|
||||
//segna il tipo riga come saldo
|
||||
row.add("P", _pos_tipomov);
|
||||
}
|
||||
|
||||
//prima di riempire lo sheet a video ordina le righe per tipo/cms/sede/fase/numreg/numrig
|
||||
sf_righe.sort(compare_by_fase);
|
||||
|
||||
return sf_righe.items();
|
||||
}
|
||||
|
||||
|
||||
int TVariazione_budget_mask::load()
|
||||
{
|
||||
//commessa in esame
|
||||
const TString& cms = get(F_CODCMS);
|
||||
//deve includere anche le righe con commesse di supporto?
|
||||
const bool include_cms_supp = get_bool(F_INCLUDESUPP);
|
||||
|
||||
//recupero sheet e realtiva mashera di riga
|
||||
TSheet_field& sf_righe = sfield(F_RIGHE);
|
||||
TMask& msk = sf_righe.sheet_mask();
|
||||
sf_righe.destroy();
|
||||
|
||||
//carica le righe dei movimenti preventivi
|
||||
const int righe_rmovana = load_rmovana(cms, include_cms_supp, sf_righe);
|
||||
|
||||
//carica le righe dei saldi consuntivi
|
||||
const int righe_saldana = load_saldana(cms, sf_righe);
|
||||
|
||||
//e poi aggiorna il video!
|
||||
sf_righe.force_update();
|
||||
|
||||
|
@ -5,9 +5,10 @@
|
||||
#define F_DATAFINECMS 204
|
||||
#define F_PROROGATA 205
|
||||
#define F_DATAPRORCMS 206
|
||||
#define F_DATAREG 207
|
||||
#define F_CODCAUS 208
|
||||
#define F_DESCAUS 209
|
||||
#define F_INCLUDESUPP 207
|
||||
#define F_DATAREG 208
|
||||
#define F_CODCAUS 209
|
||||
#define F_DESCAUS 210
|
||||
|
||||
#define F_RIGHE 220
|
||||
|
||||
@ -20,25 +21,27 @@
|
||||
|
||||
//campi dello sheet
|
||||
#define S_CHECK 101
|
||||
#define S_CDC 102
|
||||
#define S_FASE 103
|
||||
#define S_CONTO 104
|
||||
#define S_DATACOMP 105
|
||||
#define S_AUTOFCOMP 106
|
||||
#define S_DATAFCOMP 107
|
||||
#define S_COSRIC 108
|
||||
#define S_IMPORTO 109
|
||||
#define S_PREVENTIVO 110
|
||||
#define S_MATURATO 111
|
||||
#define S_DESCR 112
|
||||
#define S_NUMREG 113
|
||||
#define S_NUMRIG 114
|
||||
#define S_TIPOMOV 115
|
||||
#define S_CMS 102
|
||||
#define S_CDC 103
|
||||
#define S_FASE 104
|
||||
#define S_CONTO 105
|
||||
#define S_DATACOMP 106
|
||||
#define S_AUTOFCOMP 107
|
||||
#define S_DATAFCOMP 108
|
||||
#define S_COSRIC 109
|
||||
#define S_IMPORTO 110
|
||||
#define S_PREVENTIVO 111
|
||||
#define S_MATURATO 112
|
||||
#define S_DESCR 113
|
||||
#define S_NUMREG 114
|
||||
#define S_NUMRIG 115
|
||||
#define S_TIPOMOV 116
|
||||
|
||||
#define S_CDC_DESCR 142
|
||||
#define S_FASE_DESCR 143
|
||||
#define S_GR 144
|
||||
#define S_CO 145
|
||||
#define S_SO 146
|
||||
#define S_CONTO_DESCR 147
|
||||
#define S_CMS_DESCR 142
|
||||
#define S_CDC_DESCR 143
|
||||
#define S_FASE_DESCR 144
|
||||
#define S_GR 145
|
||||
#define S_CO 146
|
||||
#define S_SO 147
|
||||
#define S_CONTO_DESCR 148
|
||||
|
||||
|
@ -55,7 +55,7 @@ ENDPAGE
|
||||
|
||||
PAGE "Gestione Budget" 0 2 0 0
|
||||
|
||||
GROUPBOX DLG_NULL 78 4
|
||||
GROUPBOX DLG_NULL 78 5
|
||||
BEGIN
|
||||
PROMPT 0 0 "@bCommessa"
|
||||
END
|
||||
@ -114,21 +114,26 @@ BEGIN
|
||||
GROUP 3
|
||||
END
|
||||
|
||||
BOOLEAN F_INCLUDESUPP
|
||||
BEGIN
|
||||
PROMPT 1 3 "Includere le righe con commesse di supporto"
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 78 3
|
||||
BEGIN
|
||||
PROMPT 0 4 "@bParametri movimenti analitici da generare"
|
||||
PROMPT 0 5 "@bParametri movimenti analitici da generare"
|
||||
END
|
||||
|
||||
DATE F_DATAREG
|
||||
BEGIN
|
||||
PROMPT 1 5 "Data reg. "
|
||||
PROMPT 1 6 "Data reg. "
|
||||
CHECKTYPE REQUIRED
|
||||
FLAGS "A"
|
||||
END
|
||||
|
||||
STRINGA F_CODCAUS 3
|
||||
BEGIN
|
||||
PROMPT 24 5 "Causale "
|
||||
PROMPT 24 6 "Causale "
|
||||
USE LF_CAUSALI SELECT MOVIND!=""
|
||||
INPUT CODCAUS F_CODCAUS
|
||||
DISPLAY "Codice" CODCAUS
|
||||
@ -141,7 +146,7 @@ END
|
||||
|
||||
STRINGA F_DESCAUS 50 37
|
||||
BEGIN
|
||||
PROMPT 38 5 ""
|
||||
PROMPT 38 6 ""
|
||||
USE LF_CAUSALI KEY 2 SELECT MOVIND!=''
|
||||
INPUT DESCR F_DESCAUS
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
@ -152,13 +157,14 @@ END
|
||||
|
||||
TEXT DLG_NULL
|
||||
BEGIN
|
||||
PROMPT -11 7 "@bRighe movimenti di budget"
|
||||
PROMPT -11 8 "@bRighe movimenti di budget e saldi consuntivi"
|
||||
END
|
||||
|
||||
SPREADSHEET F_RIGHE
|
||||
BEGIN
|
||||
PROMPT 1 8 "Righe"
|
||||
PROMPT 1 9 "Righe"
|
||||
ITEM "@1C"
|
||||
ITEM "Commessa@20"
|
||||
ITEM "Sede@4"
|
||||
ITEM "Fase@5"
|
||||
ITEM "Conto@12"
|
||||
@ -237,11 +243,18 @@ ENDMASK
|
||||
|
||||
/////////////////////////////////////////
|
||||
//maschera di riga
|
||||
PAGE "Riga analitica" -1 -1 74 18
|
||||
PAGE "Riga analitica" -1 -1 74 20
|
||||
|
||||
BOOLEAN S_CHECK
|
||||
BEGIN
|
||||
PROMPT 1 1 "Applica"
|
||||
PROMPT 1 0 "Applica"
|
||||
END
|
||||
|
||||
LIST S_CMS 20
|
||||
BEGIN
|
||||
PROMPT 1 1 "Commessa "
|
||||
FLAGS "D"
|
||||
GROUP 1
|
||||
END
|
||||
|
||||
STRING S_CDC 4
|
||||
|
Loading…
x
Reference in New Issue
Block a user