Patch level : 10.0 332

Files correlati     : pe0.exe
Ricompilazione Demo : [ ]
Commento

Preventivazione gestione k


git-svn-id: svn://10.65.10.50/trunk@19035 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2009-06-16 13:10:32 +00:00
parent 13f128d254
commit f4c9155fcc

View File

@ -62,7 +62,7 @@ public:
virtual void user_set_row_handler(TMask& rm, short field, int index);
void update_prezzo_vendita(TMask & row_mask);
void update_costi_ricavi(int row = -1, bool update_sheet = false);
virtual TVariable_mask * riga_mask(int numriga);
virtual void doc2mask(bool reload_clifo = true, bool force_load = false, bool update = true);
@ -127,6 +127,88 @@ void TGestione_preventivo_msk:: on_idle()
//magico metodo per settare, al cambio riga dello sheet, il focus sul campo desiderato (il campo in questione è..
//..definito nella on_idle(); ricordarsi la set_notify() nel costruttore della maschera senno' viene eseguito l'ss_notify()..
//..standard e non questo qui ridefinito. Allah!
void TGestione_preventivo_msk::update_costi_ricavi(int nrow, bool update_sheet)
{
TDocumento & d = doc();
const int rows = d.physical_rows();
TArray valori;
TArray costi;
TSheet_field & sh = sfield(F_SHEET);
bool all = nrow < 0;
if (all)
nrow = rows;
else
d[nrow].autosave(sh);
const int cur_level = d[nrow].get_int(RDOC_LEVEL);
while (nrow < rows && cur_level <= d[nrow + 1].get_int(RDOC_LEVEL))
nrow++;
for (int i = nrow; i > 0; i--)
{
TRiga_documento & row = (TRiga_documento &)d[i];
const int level = row.get_int(RDOC_LEVEL);
if (i == rows || level >= doc()[i + 1].get_int(RDOC_LEVEL))
{
const real importo = row.importo(true, false);
row.put(RDOC_VALV, importo);
for (int i = level - 1; i >= 0; i--)
{
real * r = (real *) valori.objptr(i);
if (r == NULL)
{
r = new real;
valori.add(r, i);
}
*r += importo;
}
const real costo = row.get_real(RDOC_QTA) * row.get_real(RDOC_COSTO);
row.put(RDOC_VALC, costo);
for (int i = level - 1; i >= 0; i--)
{
real * r = (real *) costi.objptr(i);
if (r == NULL)
{
r = new real;
costi.add(r, i);
}
*r += costo;
}
}
else
{
real * r = (real *) valori.objptr(level);
if (r != NULL)
{
row.put(RDOC_VALV, *r);
*r = ZERO;
}
r = (real *) costi.objptr(level);
if (r != NULL)
{
row.put(RDOC_VALC, *r);
*r = ZERO;
}
}
if (update_sheet)
{
row.autoload(sh);
sh.check_row(i - 1);
sh.force_update(i - 1);
}
if (!all && level <= 0)
break;
}
}
bool TGestione_preventivo_msk::ss_notify(TSheet_field& ss, int r, KEY key)
{
TGestione_preventivo_msk& mask = (TGestione_preventivo_msk&) ss.mask();
@ -230,6 +312,11 @@ bool TGestione_preventivo_msk::ss_notify(TSheet_field& ss, int r, KEY key)
}
}
break;
case K_CTRL + K_DEL: // Cancellazione
mask.update_costi_ricavi(-1, true);
break;
case K_ENTER: // Uscita con modifiche
mask.update_costi_ricavi(r + 1, true);
default:
break;
}
@ -873,82 +960,30 @@ TMask* TGestione_preventivo_app::get_mask( int mode )
//ridefinisco il metodo write delle TMotore_application
int TGestione_preventivo_app::write( const TMask& m )
{
TDocumento& doc = ((TDocumento_mask&) m).doc();
TGestione_preventivo_msk & mask = (TGestione_preventivo_msk &) m;
TDocumento& doc = mask.doc();
const int rows = doc.physical_rows();
const TString k = doc.get(DOC_K);
int max_level = 0;
const int rows = doc.physical_rows();
TArray valori;
TArray costi;
for (int r = 1; r <= rows; r++)
{
const int level = doc[r].get_int(RDOC_LEVEL);
if (max_level < level)
max_level = level;
}
for (int i = rows ; i > 0; i--)
{
TRiga_documento & row = (TRiga_documento &)doc[i];
const int level = row.get_int(RDOC_LEVEL);
if (level == max_level && row.get(RDOC_K).blank())
row.put(RDOC_K, k);
if (i == rows || level >= doc[i + 1].get_int(RDOC_LEVEL))
{
const real importo = row.importo(true, false);
row.put(RDOC_VALV, importo);
for (int i = level - 1; i >= 0; i--)
{
real * r = (real *) valori.objptr(i);
if (r == NULL)
{
r = new real;
valori.add(r, i);
}
*r += importo;
}
const real costo = row.get_real(RDOC_QTA) * row.get_real(RDOC_COSTO);
row.put(RDOC_VALC, costo);
for (int i = level - 1; i >= 0; i--)
{
real * r = (real *) costi.objptr(i);
if (r == NULL)
{
r = new real;
costi.add(r, i);
}
*r += costo;
}
}
else
{
real * r = (real *) valori.objptr(level);
if (r != NULL)
{
row.put(RDOC_VALV, *r);
*r = ZERO;
}
r = (real *) costi.objptr(level);
if (r != NULL)
{
row.put(RDOC_VALC, *r);
*r = ZERO;
}
}
row.put(RDOC_K, k);
}
mask.update_costi_ricavi();
return TMotore_application::write(m);
}
//ridefinisco il metodo rewrite delle TMotore_application
int TGestione_preventivo_app::rewrite( const TMask& m )
{
TGestione_preventivo_msk & mask = (TGestione_preventivo_msk &) m;
TDocumento& doc = ((TDocumento_mask&) m).doc();
const TString k = doc.get(DOC_K);
int max_level = 0;
@ -956,69 +991,15 @@ int TGestione_preventivo_app::rewrite( const TMask& m )
TArray valori;
TArray costi;
for (int r = 1; r <= rows; r++)
{
const int level = doc[r].get_int(RDOC_LEVEL);
if (max_level < level)
max_level = level;
}
for (int i = rows ; i > 0; i--)
{
TRiga_documento & row = (TRiga_documento &)doc[i];
const int level = row.get_int(RDOC_LEVEL);
if (level == max_level && row.get(RDOC_K).blank())
row.put(RDOC_K, k);
if (i == rows || level >= doc[i + 1].get_int(RDOC_LEVEL))
{
const real importo = row.importo(true, false);
row.put(RDOC_VALV, importo);
for (int i = level - 1; i >= 0; i--)
{
real * r = (real *) valori.objptr(i);
if (r == NULL)
{
r = new real;
valori.add(r, i);
}
*r += importo;
}
const real costo = row.get_real(RDOC_QTA) * row.get_real(RDOC_COSTO);
row.put(RDOC_VALC, costo);
for (int i = level - 1; i >= 0; i--)
{
real * r = (real *) costi.objptr(i);
if (r == NULL)
{
r = new real;
costi.add(r, i);
}
*r += costo;
}
}
else
{
real * r = (real *) valori.objptr(level);
if (r != NULL)
{
row.put(RDOC_VALV, *r);
*r = ZERO;
}
r = (real *) costi.objptr(level);
if (r != NULL)
{
row.put(RDOC_VALC, *r);
*r = ZERO;
}
}
row.put(RDOC_K, k);
}
mask.update_costi_ricavi();
return TMotore_application::rewrite(m);
}