Corretta gestione provvigioni
git-svn-id: svn://10.65.10.50/branches/R_10_00@22925 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
b9ff83214a
commit
f4f1cbfb84
@ -241,7 +241,7 @@ bool TGestione_provv_app::rate_sheet_notify(TSheet_field& ds, int r, KEY key)
|
|||||||
{
|
{
|
||||||
TProvvigioni_agente* pa = app()._prag;
|
TProvvigioni_agente* pa = app()._prag;
|
||||||
if (__current_key.empty() || pa->items() == 0)
|
if (__current_key.empty() || pa->items() == 0)
|
||||||
return TRUE;
|
return true;
|
||||||
|
|
||||||
TRate_doc& rd = pa->rate(__current_key);
|
TRate_doc& rd = pa->rate(__current_key);
|
||||||
|
|
||||||
@ -252,25 +252,25 @@ bool TGestione_provv_app::rate_sheet_notify(TSheet_field& ds, int r, KEY key)
|
|||||||
TRata* rt = new TRata;
|
TRata* rt = new TRata;
|
||||||
// Nuova rata: va segnalata come inserita (generata = blank)
|
// Nuova rata: va segnalata come inserita (generata = blank)
|
||||||
rd.add_rata(rt);
|
rd.add_rata(rt);
|
||||||
app()._dirty = TRUE;
|
app()._dirty = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case K_ENTER: // Notifica dell'avvenuta modifica di una rata
|
case K_ENTER: // Notifica dell'avvenuta modifica di una rata
|
||||||
{
|
{
|
||||||
TRata& rt = rd[r]; // Sostituisce i valori della riga corrente
|
TRata& rt = rd[r]; // Sostituisce i valori della riga corrente
|
||||||
rt.set(ds.row(r));
|
rt.set(ds.row(r));
|
||||||
app()._dirty = TRUE;
|
app()._dirty = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case K_DEL: // Notifica della cancellazione di una riga
|
case K_DEL: // Notifica della cancellazione di una riga
|
||||||
rd.remove_rata(r);
|
rd.remove_rata(r);
|
||||||
rd.pack_rate(); // Effettua anche il pack degli elementi (corrispondenza 1 a 1 tra sheet ed array)
|
rd.pack_rate(); // Effettua anche il pack degli elementi (corrispondenza 1 a 1 tra sheet ed array)
|
||||||
app()._dirty = TRUE;
|
app()._dirty = true;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TGestione_provv_app::doc_sheet_notify(TSheet_field& ds, int r, KEY key)
|
bool TGestione_provv_app::doc_sheet_notify(TSheet_field& ds, int r, KEY key)
|
||||||
@ -374,7 +374,7 @@ bool TGestione_provv_app::doc_sheet_notify(TSheet_field& ds, int r, KEY key)
|
|||||||
__current_key.cut(0);
|
__current_key.cut(0);
|
||||||
if (pa->items() == 0)
|
if (pa->items() == 0)
|
||||||
{
|
{
|
||||||
TSheet_field& rs = (TSheet_field&) ds.mask().field(F_RATE_SHEET);
|
TSheet_field& rs = ds.mask().sfield(F_RATE_SHEET);
|
||||||
if (rs.items() > 0) // Resetta lo spreadsheet se vi sono delle righe
|
if (rs.items() > 0) // Resetta lo spreadsheet se vi sono delle righe
|
||||||
rs.reset();
|
rs.reset();
|
||||||
}
|
}
|
||||||
@ -394,10 +394,10 @@ bool TGestione_provv_app::create()
|
|||||||
|
|
||||||
_msk = new TMask("pr0700b") ;
|
_msk = new TMask("pr0700b") ;
|
||||||
_prag = new TProvvigioni_agente;
|
_prag = new TProvvigioni_agente;
|
||||||
TSheet_field & sf = (TSheet_field&)_msk->field(F_DOC_SHEET);
|
TSheet_field & sf = _msk->sfield(F_DOC_SHEET);
|
||||||
sf.set_notify(doc_sheet_notify);
|
sf.set_notify(doc_sheet_notify);
|
||||||
sf.sheet_mask().set_handler(F_NDOC,ndoc_handler);
|
sf.sheet_mask().set_handler(F_NDOC,ndoc_handler);
|
||||||
TSheet_field & rs = (TSheet_field&)_msk->field(F_RATE_SHEET);
|
TSheet_field & rs = _msk->sfield(F_RATE_SHEET);
|
||||||
rs.set_notify(rate_sheet_notify);
|
rs.set_notify(rate_sheet_notify);
|
||||||
TMask& sm = rs.sheet_mask();
|
TMask& sm = rs.sheet_mask();
|
||||||
sm.set_handler(F_RATA,nrata_handler);
|
sm.set_handler(F_RATA,nrata_handler);
|
||||||
@ -421,8 +421,8 @@ void TGestione_provv_app::fill_sheet_doc()
|
|||||||
TString_array kl;
|
TString_array kl;
|
||||||
const int items = _prag->documenti(kl);
|
const int items = _prag->documenti(kl);
|
||||||
kl.sort(); // Cosi' i documenti sono in ordine
|
kl.sort(); // Cosi' i documenti sono in ordine
|
||||||
TSheet_field & sf = (TSheet_field&)_msk->field(F_DOC_SHEET);
|
TSheet_field& sf = _msk->sfield(F_DOC_SHEET);
|
||||||
TSheet_field & rs = (TSheet_field&)_msk->field(F_RATE_SHEET);
|
TSheet_field& rs = _msk->sfield(F_RATE_SHEET);
|
||||||
|
|
||||||
__current_key = "";
|
__current_key = "";
|
||||||
rs.reset();
|
rs.reset();
|
||||||
@ -502,20 +502,20 @@ void TGestione_provv_app::load_provvigioni(TMask* m)
|
|||||||
const char* msg = _prag->items() == 0 ? TR("Registrare i dati inseriti") : TR("Registrare le modifiche") ;
|
const char* msg = _prag->items() == 0 ? TR("Registrare i dati inseriti") : TR("Registrare le modifiche") ;
|
||||||
fill_sheet_doc(); // Inizializza lo sheet dei documenti
|
fill_sheet_doc(); // Inizializza lo sheet dei documenti
|
||||||
|
|
||||||
_dirty = FALSE;
|
_dirty = false;
|
||||||
int err = NOERR;
|
int err = NOERR;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
k = _msk->run();
|
k = _msk->run();
|
||||||
bool to_write = k == K_ENTER;
|
bool to_write = k == K_ENTER;
|
||||||
repeat = FALSE;
|
repeat = false;
|
||||||
if (k == K_ESC && _dirty)
|
if (k == K_ESC && _dirty)
|
||||||
{
|
{
|
||||||
k = yesnocancel_box(msg);
|
k = yesnocancel_box(msg);
|
||||||
if (k == K_ESC)
|
if (k == K_ESC)
|
||||||
repeat = TRUE;
|
repeat = true;
|
||||||
else if (k == K_YES)
|
else if (k == K_YES)
|
||||||
to_write = TRUE;
|
to_write = true;
|
||||||
}
|
}
|
||||||
if (to_write)
|
if (to_write)
|
||||||
{
|
{
|
||||||
@ -525,7 +525,7 @@ void TGestione_provv_app::load_provvigioni(TMask* m)
|
|||||||
err = _prag->write();
|
err = _prag->write();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
repeat = TRUE;
|
repeat = true;
|
||||||
}
|
}
|
||||||
} while (repeat);
|
} while (repeat);
|
||||||
if (err != NOERR)
|
if (err != NOERR)
|
||||||
@ -535,12 +535,11 @@ void TGestione_provv_app::load_provvigioni(TMask* m)
|
|||||||
|
|
||||||
void TGestione_provv_app::main_loop()
|
void TGestione_provv_app::main_loop()
|
||||||
{
|
{
|
||||||
bool ok = TRUE;
|
|
||||||
TMask* m = new TMask("pr0700a");
|
TMask* m = new TMask("pr0700a");
|
||||||
|
bool ok = true;
|
||||||
while (ok)
|
while (ok)
|
||||||
{
|
{
|
||||||
xvtil_statbar_set(TR("Ricerca"), TRUE);
|
xvtil_statbar_set(TR("Ricerca"), true);
|
||||||
m->reset();
|
|
||||||
ok = m->run() == K_ENTER;
|
ok = m->run() == K_ENTER;
|
||||||
if (ok)
|
if (ok)
|
||||||
load_provvigioni(m);
|
load_provvigioni(m);
|
||||||
@ -551,6 +550,6 @@ void TGestione_provv_app::main_loop()
|
|||||||
int pr0700(int argc, char** argv)
|
int pr0700(int argc, char** argv)
|
||||||
{
|
{
|
||||||
TGestione_provv_app a;
|
TGestione_provv_app a;
|
||||||
a.run(argc,argv,TR("Gestione provvigioni"));
|
a.run(argc, argv, TR("Gestione provvigioni"));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,8 @@ class TStampa_schedeprovv_form : public TForm
|
|||||||
TPagamento _pagamento;
|
TPagamento _pagamento;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
void init_pagamento();
|
||||||
|
|
||||||
virtual bool validate(TForm_item &, TToken_string &);
|
virtual bool validate(TForm_item &, TToken_string &);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -29,36 +31,37 @@ public:
|
|||||||
TStampa_schedeprovv_form::TStampa_schedeprovv_form(const char* name) : TForm(name)
|
TStampa_schedeprovv_form::TStampa_schedeprovv_form(const char* name) : TForm(name)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
void TStampa_schedeprovv_form::init_pagamento()
|
||||||
|
{
|
||||||
|
TDocumento doc(TForm::cursor()->curr(LF_DOC));
|
||||||
|
_pagamento = doc.pagamento();
|
||||||
|
real importo = doc.get(_basecalcolo);
|
||||||
|
if (doc.is_nota_credito())
|
||||||
|
importo = -importo;
|
||||||
|
_pagamento.set_total(importo,ZERO,ZERO);
|
||||||
|
_pagamento.set_rate_auto();
|
||||||
|
}
|
||||||
|
|
||||||
bool TStampa_schedeprovv_form::validate(TForm_item &cf, TToken_string &s)
|
bool TStampa_schedeprovv_form::validate(TForm_item &cf, TToken_string &s)
|
||||||
{
|
{
|
||||||
const TFixed_string code(s.get(0));
|
const TFixed_string code(s.get(0));
|
||||||
if (code == "_BASECALCOLO")
|
if (code == "_BASECALCOLO")
|
||||||
{
|
{
|
||||||
|
const TRectype& curr = TForm::cursor()->curr();
|
||||||
real valore;
|
real valore;
|
||||||
if (_basecalcolo.empty())
|
if (_basecalcolo.empty())
|
||||||
{
|
{
|
||||||
const real cambio = TForm::find_field('B', odd_page, 666).get();
|
const real cambio = TForm::find_field('B', odd_page, 666).get();
|
||||||
valore = TForm::cursor()->curr().get_real(PROV_IMPRATA)*cambio;
|
valore = curr.get_real(PROV_IMPRATA)*cambio;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
const int nriga = TForm::cursor()->curr().get_int(PROV_NRIGA);
|
const int nriga = curr.get_int(PROV_NRIGA);
|
||||||
if (nriga == 1)
|
if (nriga == 1)
|
||||||
{
|
init_pagamento();
|
||||||
TDocumento doc(TForm::cursor()->curr(LF_DOC));
|
const int nrata = curr.get_int(PROV_NRATA);
|
||||||
_pagamento = doc.pagamento();
|
|
||||||
real importo = doc.get(_basecalcolo);
|
|
||||||
if (doc.tipo().nota_credito())
|
|
||||||
importo = -importo;
|
|
||||||
const TCurrency zero;
|
|
||||||
_pagamento.set_total(importo,zero,zero);
|
|
||||||
_pagamento.set_rate_auto();
|
|
||||||
}
|
|
||||||
const int nrata = TForm::cursor()->curr().get_int(PROV_NRATA);
|
|
||||||
if (nrata > 0 && nrata <= _pagamento.n_rate())
|
if (nrata > 0 && nrata <= _pagamento.n_rate())
|
||||||
valore = _pagamento.importo_rata(nrata-1);
|
valore = _pagamento.importo_rata(nrata-1);
|
||||||
else
|
|
||||||
valore = ZERO;
|
|
||||||
}
|
}
|
||||||
cf.set(valore.string());
|
cf.set(valore.string());
|
||||||
}
|
}
|
||||||
@ -197,25 +200,26 @@ void TStampa_schedeprovv::print_or_preview(bool paper)
|
|||||||
}
|
}
|
||||||
if (_m->get_bool(F_NOZERO))
|
if (_m->get_bool(F_NOZERO))
|
||||||
{
|
{
|
||||||
bool not_empty = filter.not_empty();
|
const bool not_empty = filter.not_empty();
|
||||||
if (not_empty)
|
if (not_empty)
|
||||||
{
|
{
|
||||||
filter.insert("(");
|
filter.insert("(");
|
||||||
filter << ") && (";
|
filter << ") && (";
|
||||||
}
|
}
|
||||||
filter << "(" << PROV_IMPPRDOC << "!= 0)";
|
filter << "STR(" << PROV_IMPPROVV << ">0)"; // It was (PROV_IMPPRDOC!=0)
|
||||||
if (not_empty)
|
if (not_empty)
|
||||||
filter << ")";
|
filter << ")";
|
||||||
}
|
}
|
||||||
if (_m->get(F_DADATA).not_empty() || _m->get(F_ADATA).not_empty())
|
if (_m->get(F_DADATA).not_empty() || _m->get(F_ADATA).not_empty())
|
||||||
{
|
{
|
||||||
TDate datam;
|
const bool not_empty = filter.not_empty();
|
||||||
bool not_empty = filter.not_empty();
|
|
||||||
if (not_empty)
|
if (not_empty)
|
||||||
{
|
{
|
||||||
filter.insert("(");
|
filter.insert("(");
|
||||||
filter << ") && (";
|
filter << ") && (";
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
TDate datam;
|
||||||
if (_m->get(F_DADATA).not_empty())
|
if (_m->get(F_DADATA).not_empty())
|
||||||
{
|
{
|
||||||
datam = _m->get_date(F_DADATA);
|
datam = _m->get_date(F_DADATA);
|
||||||
@ -228,6 +232,14 @@ void TStampa_schedeprovv::print_or_preview(bool paper)
|
|||||||
datam = _m->get_date(F_ADATA);
|
datam = _m->get_date(F_ADATA);
|
||||||
filter << "(ANSI(" << PROV_DATADOC << ")<=\"" << datam.string(ANSI) << "\")";
|
filter << "(ANSI(" << PROV_DATADOC << ")<=\"" << datam.string(ANSI) << "\")";
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
if (!_m->field(F_DADATA).empty() || !_m->field(F_ADATA).empty())
|
||||||
|
{
|
||||||
|
filter << "BETWEEN(" << PROV_DATADOC
|
||||||
|
<< ',' << _m->get_date(F_DADATA).date2ansi()
|
||||||
|
<< ',' << _m->get_date(F_ADATA).date2ansi()
|
||||||
|
<< ")";
|
||||||
|
}
|
||||||
if (not_empty)
|
if (not_empty)
|
||||||
filter << ")";
|
filter << ")";
|
||||||
}
|
}
|
||||||
@ -258,11 +270,10 @@ void TStampa_schedeprovv::print_or_preview(bool paper)
|
|||||||
frm.cursor()->setfilter(filter);
|
frm.cursor()->setfilter(filter);
|
||||||
|
|
||||||
TRectype start(LF_PROVV),end(LF_PROVV);
|
TRectype start(LF_PROVV),end(LF_PROVV);
|
||||||
if (_m->get(F_DAAGE).not_empty())
|
start.put(PROV_CODAGE, _m->get(F_DAAGE));
|
||||||
start.put(PROV_CODAGE,_m->get(F_DAAGE));
|
end.put(PROV_CODAGE, _m->get(F_AAGE));
|
||||||
if (_m->get(F_AAGE).not_empty())
|
frm.cursor()->setregion(start, end);
|
||||||
end.put(PROV_CODAGE,_m->get(F_AAGE));
|
frm.cursor()->freeze(true);
|
||||||
frm.cursor()->setregion(start,end);
|
|
||||||
|
|
||||||
frm.set_basecalcolo(_m->get(F_FORMULA));
|
frm.set_basecalcolo(_m->get(F_FORMULA));
|
||||||
|
|
||||||
@ -274,9 +285,10 @@ void TStampa_schedeprovv::print_or_preview(bool paper)
|
|||||||
frm.find_field('B',odd_page,"RATEDOC").show(!_m->get_bool(F_RAGGRATE));
|
frm.find_field('B',odd_page,"RATEDOC").show(!_m->get_bool(F_RAGGRATE));
|
||||||
frm.print();
|
frm.print();
|
||||||
if (_m->get(F_DEFINITIVA)[0]=='D')
|
if (_m->get(F_DEFINITIVA)[0]=='D')
|
||||||
{
|
|
||||||
riporta_pagamenti(*frm.cursor());
|
riporta_pagamenti(*frm.cursor());
|
||||||
}
|
|
||||||
|
frm.cursor()->freeze(false);
|
||||||
|
|
||||||
|
|
||||||
printer().set_printtype(pt); // Restore printer mode
|
printer().set_printtype(pt); // Restore printer mode
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
#define G_TOTCLI 20
|
#define G_TOTCLI 20
|
||||||
#define G_TOTDOC 30
|
#define G_TOTDOC 30
|
||||||
|
|
||||||
USE LF_PROVV BY CODAGE CODCLI CODNUM NDOC NRATA
|
USE LF_PROVV BY CODAGE CODCLI CODNUM DATADOC NRATA
|
||||||
|
|
||||||
JOIN LF_CLIFO INTO TIPOCF="C"|CODCF=CODCLI
|
JOIN LF_CLIFO INTO TIPOCF="C"|CODCF=CODCLI
|
||||||
JOIN LF_COMUNI TO LF_CLIFO INTO STATO==STATOCF|COM==COMCF
|
JOIN LF_COMUNI TO LF_CLIFO INTO STATO==STATOCF|COM==COMCF
|
||||||
|
@ -308,9 +308,9 @@ void TRate_doc::set(TToken_string& t)
|
|||||||
_codnum = t.get(1);
|
_codnum = t.get(1);
|
||||||
_ndoc = t.get_long(2);
|
_ndoc = t.get_long(2);
|
||||||
_datadoc = t.get(3);
|
_datadoc = t.get(3);
|
||||||
_impdoc = real::ita2eng(t.get(4));
|
_impdoc = t.get(4);
|
||||||
_impprdoc = real::ita2eng(t.get(5));
|
_impprdoc = t.get(5);
|
||||||
_impnetdoc = real::ita2eng(t.get(6));
|
_impnetdoc = t.get(6);
|
||||||
_codcf = t.get_long(7);
|
_codcf = t.get_long(7);
|
||||||
_codval = t.get(8);
|
_codval = t.get(8);
|
||||||
_cambio = t.get(9);
|
_cambio = t.get(9);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user