2008-08-27 13:08:36 +00:00
|
|
|
#include <automask.h>
|
|
|
|
#include <defmask.h>
|
|
|
|
#include <progind.h>
|
|
|
|
#include "../ve/velib.h"
|
|
|
|
|
|
|
|
#include <doc.h>
|
2009-02-14 17:13:09 +00:00
|
|
|
#include <rdoc.h>
|
2008-08-27 13:08:36 +00:00
|
|
|
|
|
|
|
#include "pt0003.h"
|
|
|
|
#include "pt0003100a.h"
|
|
|
|
|
|
|
|
|
|
|
|
class TMaskPt00031 : public TAutomask
|
|
|
|
{
|
|
|
|
TCursor * _cur;
|
|
|
|
|
|
|
|
protected:
|
|
|
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
|
|
|
bool on_sheet_event(TOperable_field& o, TField_event e, long jolly);
|
|
|
|
void update_sheet();
|
|
|
|
void update_pagato(real & totale);
|
|
|
|
void update_total();
|
|
|
|
|
|
|
|
public:
|
|
|
|
TCursor & cursor() const { return *_cur;}
|
|
|
|
TMaskPt00031();
|
|
|
|
virtual ~TMaskPt00031();
|
|
|
|
};
|
|
|
|
|
|
|
|
TMaskPt00031::TMaskPt00031()
|
|
|
|
: TAutomask("pt0003100a")
|
|
|
|
{
|
|
|
|
TRelation * r = new TRelation(LF_DOC);
|
|
|
|
r->file().set_curr(new TDocumento);
|
|
|
|
_cur = new TCursor(r, "", 2);
|
|
|
|
((TButton_field&) field(DLG_SAVEREC)).set_exit_key(K_ENTER);
|
|
|
|
}
|
|
|
|
|
|
|
|
TMaskPt00031::~TMaskPt00031()
|
|
|
|
{
|
|
|
|
delete _cur;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool TMaskPt00031::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
|
|
|
{
|
|
|
|
const int id = o.dlg();
|
|
|
|
switch (id)
|
|
|
|
{
|
|
|
|
case F_TOTPAGATO:
|
|
|
|
if (e == fe_modify )
|
|
|
|
{
|
|
|
|
real totpagato = o.mask().get_real(F_TOTPAGATO);
|
|
|
|
|
|
|
|
update_pagato(totpagato);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case F_NUM:
|
|
|
|
if (e == fe_modify || e == fe_init)
|
|
|
|
update_sheet();
|
|
|
|
break;
|
|
|
|
case F_ANNO:
|
|
|
|
case F_CODCLI:
|
|
|
|
if (e == fe_modify)
|
|
|
|
update_sheet();
|
|
|
|
break;
|
|
|
|
case F_SHEET:
|
|
|
|
return on_sheet_event(o, e, jolly);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
if (jolly > 0)
|
|
|
|
return on_sheet_event(o, e, jolly);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void TMaskPt00031::update_total()
|
|
|
|
{
|
|
|
|
real tot;
|
|
|
|
TSheet_field& s = sfield(F_SHEET);
|
|
|
|
const int postot = s.cid2index(F_PAGATO);
|
|
|
|
FOR_EACH_SHEET_ROW_BACK(s, r, row)
|
|
|
|
tot += real(row->get(postot));
|
|
|
|
set(F_TOTPAGATO, tot);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool TMaskPt00031::on_sheet_event(TOperable_field& o, TField_event e, long jolly)
|
|
|
|
{
|
|
|
|
TMask& m = o.mask();
|
|
|
|
switch (o.dlg())
|
|
|
|
{
|
|
|
|
case F_PAGATO:
|
|
|
|
if (e == fe_modify)
|
|
|
|
update_total();
|
|
|
|
break;
|
|
|
|
case F_PAGA:
|
|
|
|
if (e == fe_button)
|
|
|
|
{
|
|
|
|
TMask& m = o.mask();
|
|
|
|
if (m.get_real(F_PAGATO).is_zero())
|
|
|
|
m.set(F_PAGATO, m.get(F_DAPAGARE));
|
|
|
|
else
|
|
|
|
m.reset(F_PAGATO);
|
|
|
|
TSheet_field & s = *m.get_sheet();
|
|
|
|
|
|
|
|
const int r = s.selected();
|
|
|
|
|
|
|
|
s.row(r).add(m.get(F_PAGATO), 0);
|
|
|
|
s.force_update(r);
|
|
|
|
|
|
|
|
update_total();
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case F_SHEET:
|
|
|
|
switch(e)
|
|
|
|
{
|
|
|
|
case se_query_add:
|
|
|
|
return false;
|
|
|
|
case se_notify_modify:
|
|
|
|
update_total();
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
void TMaskPt00031::update_sheet()
|
|
|
|
{
|
|
|
|
TSheet_field& sheet = sfield(F_SHEET);
|
|
|
|
const int olditems = sheet.items();
|
|
|
|
|
|
|
|
sheet.destroy();
|
|
|
|
reset(F_TOTPAGATO);
|
|
|
|
TRectype from(_cur->relation()->curr());
|
|
|
|
const long codcli = get_long(F_CODCLI);
|
|
|
|
|
|
|
|
from.put(DOC_TIPOCF, "C");
|
|
|
|
from.put(DOC_CODCF, codcli);
|
|
|
|
from.put(DOC_ANNO, get(F_ANNO));
|
|
|
|
from.put(DOC_PROVV, "D");
|
|
|
|
|
|
|
|
TRectype to(from);
|
|
|
|
TString filter;
|
|
|
|
filter << "(CODNUM==\"" << get(F_NUM) << "\")&&(G1:TOTDOC>IMPPAGATO)";
|
|
|
|
_cur->setfilter(filter);
|
|
|
|
_cur->setregion(from, to);
|
|
|
|
TDocumento & doc = (TDocumento &)_cur->curr();
|
|
|
|
|
|
|
|
const long items = _cur->items();
|
2009-02-14 17:13:09 +00:00
|
|
|
|
2008-08-27 13:08:36 +00:00
|
|
|
TProgind pi(items, "Caricamento fatture", true, true);
|
|
|
|
|
|
|
|
for ((*_cur) = 0L; _cur->pos() < items; ++(*_cur))
|
|
|
|
{
|
2009-02-14 17:13:09 +00:00
|
|
|
if (!pi.addstatus(1))
|
2008-08-27 13:08:36 +00:00
|
|
|
break;
|
|
|
|
if (sheet.items() > 900) // Anche troppe righe
|
|
|
|
break;
|
|
|
|
|
|
|
|
TToken_string & row = sheet.row(-1);
|
|
|
|
const real totdoc = doc.totale_doc();
|
|
|
|
const real acconto = doc.get_real(DOC_IMPPAGATO);
|
|
|
|
const real da_pagare = totdoc - acconto;
|
|
|
|
|
|
|
|
row.cut(0);
|
|
|
|
row.add("");
|
|
|
|
row.add(da_pagare.string());
|
|
|
|
row.add(totdoc.string());
|
|
|
|
row.add(doc.get(DOC_NDOC));
|
|
|
|
row.add(doc.get(DOC_DATADOC));
|
|
|
|
}
|
2009-02-14 17:13:09 +00:00
|
|
|
|
|
|
|
if (olditems == 0 && items == 0)
|
|
|
|
return;
|
2008-08-27 13:08:36 +00:00
|
|
|
sheet.force_update();
|
|
|
|
}
|
|
|
|
|
|
|
|
void TMaskPt00031::update_pagato(real & totpagato)
|
|
|
|
{
|
|
|
|
TSheet_field& sheet = sfield(F_SHEET);
|
|
|
|
const long items = sheet.items();
|
|
|
|
int pospagato = sheet.cid2index(F_PAGATO);
|
|
|
|
int posda_pagare = sheet.cid2index(F_DAPAGARE);
|
|
|
|
|
|
|
|
for (int r = 0; r < items; r++)
|
|
|
|
{
|
|
|
|
TToken_string & row = sheet.row(r);
|
|
|
|
const real da_pagare(row.get(posda_pagare));
|
|
|
|
real pagato;
|
|
|
|
|
|
|
|
if (totpagato > ZERO)
|
|
|
|
{
|
|
|
|
if (totpagato > da_pagare)
|
|
|
|
pagato = da_pagare;
|
|
|
|
else
|
|
|
|
pagato = totpagato;
|
|
|
|
totpagato -= pagato;
|
|
|
|
}
|
|
|
|
const TString s(pagato.string());
|
|
|
|
|
|
|
|
row.add(s, pospagato);
|
|
|
|
}
|
|
|
|
sheet.force_update();
|
|
|
|
}
|
|
|
|
|
|
|
|
class TIncassoFatture0003 : public TSkeleton_application
|
|
|
|
{
|
|
|
|
virtual bool check_autorization() const { return false; }
|
|
|
|
virtual const char * extra_modules() const {return "ve";}
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
virtual void main_loop();
|
|
|
|
|
|
|
|
public:
|
|
|
|
virtual ~TIncassoFatture0003() {}
|
|
|
|
};
|
|
|
|
|
|
|
|
void TIncassoFatture0003::main_loop()
|
|
|
|
{
|
2009-02-14 17:13:09 +00:00
|
|
|
open_files(LF_DOC, LF_RIGHEDOC, 0);
|
2008-08-27 13:08:36 +00:00
|
|
|
TMaskPt00031 m;
|
|
|
|
|
|
|
|
while (m.run() == K_ENTER)
|
|
|
|
{
|
|
|
|
TSheet_field & s = m.sfield(F_SHEET);
|
|
|
|
TCursor & c = m.cursor();
|
|
|
|
|
|
|
|
const long items = c.items();
|
|
|
|
int pospagato = s.cid2index(F_PAGATO);
|
|
|
|
|
|
|
|
for (long pos = 0L; pos < items; pos++)
|
|
|
|
{
|
|
|
|
TToken_string row = s.row(pos);
|
|
|
|
real val(row.get(pospagato));
|
|
|
|
|
|
|
|
if (val != ZERO)
|
|
|
|
{
|
|
|
|
c = pos;
|
|
|
|
TDocumento doc((TDocumento &)c.curr());
|
|
|
|
real pagato = doc.get(DOC_IMPPAGATO);
|
|
|
|
real val(row.get(pospagato));
|
|
|
|
|
|
|
|
pagato += val;
|
|
|
|
doc.put(DOC_IMPPAGATO, pagato);
|
|
|
|
doc.rewrite();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
TIncassoFatture0003 & app() { return (TIncassoFatture0003&) main_app();}
|
|
|
|
|
|
|
|
int pt0003100(int argc, char* argv[])
|
|
|
|
{
|
|
|
|
TIncassoFatture0003 a;
|
2008-11-14 00:40:30 +00:00
|
|
|
a.run(argc, argv, "Incasso fatture");
|
2008-08-27 13:08:36 +00:00
|
|
|
return 0;
|
|
|
|
}
|