campo-sirio/pr/pr1300.cpp

119 lines
2.9 KiB
C++
Raw Normal View History

#include <mask.h>
#include <applicat.h>
#include <form.h>
#include <printer.h>
#include <progind.h>
#include "provv.h"
#include "pr1300a.h"
class TStampa_schedeprovv : public TSkeleton_application
{
TMask * _m;
void riporta_pagamenti(TCursor &cur);
protected:
virtual bool create();
virtual bool destroy();
virtual void main_loop();
};
bool TStampa_schedeprovv::create()
{
_m= new TMask ("pr1300a");
return TSkeleton_application::create();
}
bool TStampa_schedeprovv::destroy()
{
delete _m;
return TSkeleton_application::destroy();
}
void TStampa_schedeprovv::riporta_pagamenti(TCursor &cur)
{
if (cur.items()==0) return;
const TRelation * r=cur.relation();
TProgind barra(cur.items(),"Registro le provvigioni pagate");
for (int c=0; c<cur.items(); c++)
{
cur=c;
barra.setstatus(c);
// stampa definitiva: riporta le provvigioni maturate sulle provv. pagate
real val;
val=r->lfile().get_real(PROV_PROVVMAT);
if (!val.is_zero() &&
!r->lfile().get_bool(PROV_SALDATA)) // this should never happen!
{
r->lfile().reread(_lock);
val+=r->lfile().get_real(PROV_PROVVPAG);
r->lfile().put(PROV_PROVVPAG,val);
r->lfile().put(PROV_PROVVMAT,0);
if (val>=r->lfile().get_real(PROV_IMPPROVV))
r->lfile().put(PROV_SALDATA,"X");
r->lfile().rewrite();
}
}
}
void TStampa_schedeprovv::main_loop()
{
TForm frm("pr1300a");
const int hh = 7;
const int fh = 1;
const int fl = printer().formlen();
int rows[4]; // Righe orizzontali
rows[0] = hh-3;
rows[1] = hh;
rows[2] = fl-1;
rows[3] = 0;
frm.genera_intestazioni(odd_page, hh-2);
frm.genera_fincatura(odd_page, hh-3, fl-1, rows);
while (_m->run()!=K_QUIT)
{
// filtro e regione
if (_m->get(F_FILTRO).not_empty())
{
TString filter(PROV_SALDATA);
if (_m->get(F_FILTRO)[0]=='P')
filter << "==\"X\"" ;
else
filter << "!=\"X\"" ;
frm.cursor()->setfilter(filter);
} else
frm.cursor()->setfilter("");
TRectype start(LF_PROVV),end(LF_PROVV);
if (_m->get(F_DAAGE).not_empty())
start.put(PROV_CODAGE,_m->get(F_DAAGE));
if (_m->get(F_AAGE).not_empty())
end.put(PROV_CODAGE,_m->get(F_AAGE));
frm.cursor()->setregion(start,end);
// abilita le sezioni dei totali
frm.find_field('B',odd_page,"CLIENTI").show(!_m->get_bool(F_RAGGCLI));
frm.find_field('B',odd_page,"HCLIENTI").show(!_m->get_bool(F_RAGGDOC));
frm.find_field('B',odd_page,"DOCUMENTI").show(!_m->get_bool(F_RAGGDOC));
frm.find_field('B',odd_page,"HDOCUMENTI").show(!_m->get_bool(F_RAGGRATE));
frm.find_field('B',odd_page,"RATEDOC").show(!_m->get_bool(F_RAGGRATE));
frm.print();
if (_m->get(F_DEFINITIVA)[0]=='D')
{
riporta_pagamenti(*frm.cursor());
}
}
}
int pr1300(int argc, char** argv)
{
TStampa_schedeprovv a;
a.run(argc,argv,"Stampa schede di provvigione");
return 0;
}