campo-sirio/ve/ve8100.cpp
guy f3d54d4fe9 Aggiunto strumento per controllare e correggere IBAN su documenti
git-svn-id: svn://10.65.10.50/branches/R_10_00@22867 c028cbd2-c16b-5b4b-a496-9718f37d4682
2013-05-27 12:09:24 +00:00

158 lines
3.9 KiB
C++
Executable File

#include <applicat.h>
#include <automask.h>
#include <execp.h>
#include <progind.h>
#include <tabutil.h>
#include "velib07.h"
#include "ve8.h"
#include "ve8100a.h"
#include "../gv/gvlib.h"
#include <nditte.h>
////////////////////////////////////////////////////////
// MASCHERA
////////////////////////////////////////////////////////
class TListaRitFisc_mask : public TAutomask
{
protected:
bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TListaRitFisc_mask();
virtual ~TListaRitFisc_mask() {}
};
bool TListaRitFisc_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
bool ok = true;
/*
switch (o.dlg())
{
case :
if (e == fe_init || e == fe_modify)
{
}
break;
default: break;
}
*/
return ok;
}
TListaRitFisc_mask::TListaRitFisc_mask():TAutomask("ve8100")
{
}
////////////////////////////////////////////////////////
// APPLICAZIONE
////////////////////////////////////////////////////////
class TListaRitFisc : public TSkeleton_application
{
protected:
virtual void main_loop();
public:
bool crea_righe(const TListaRitFisc_mask& m) const;
};
bool TListaRitFisc::crea_righe(const TListaRitFisc_mask& m) const
{
// cerca abi e cab della ditta
const TString& abi = m.get(F_CODABI);
const TString& cab = m.get(F_CODCAB);
const TDate datascad = m.get(F_DATASCAD);
int err=NOERR;
TLocalisamfile righe(LF_RIGHEF24);
TDocument_recordset rdoc("USE RDOC\nSELECT (TIPORIGA=='04')&&(110@->S10!='')&&(33.NDOC>=#DANUM)&&(33.NDOC<=#ANUM)\n"
"JOIN SPP ALIAS 110 INTO CODTAB=CODART\n"
"JOIN DOC INTO PROVV=PROVV ANNO=ANNO CODNUM=CODNUM NDOC=NDOC\n"
"FROM CODNUM=#NUM\nTO CODNUM=#NUM");
TVariant var;
var = m.get(F_NUMINI);
rdoc.set_var("#DANUM", var);
var = m.get(F_NUMFIN);
rdoc.set_var("#ANUM", var);
var = m.get(F_CODNUM);
rdoc.set_var("#NUM", var);
// calcolo importo e chiedo conferma all'operatore
const TRecordset& curr = rdoc;
real totale = ZERO;
for (bool ok = rdoc.move_first(); ok; ok = rdoc.move_next())
totale += curr.get("RDOC.RITENUTA").as_real();
err = NOERR;
if (yesno_box("Verranno generate %d righe per un importo di %s euro.\n"
"Si desidera proseguire?", rdoc.items(), totale.string()))
{
long cont = get_next_progr_f24();
long numf24 = get_next_f24();
// trucco per poter usare la get (nei TDocument_recordset la get ha 2 par. ed e' protected!)
for (bool ok1 = rdoc.move_first(); ok1; ok1 = rdoc.move_next())
{
righe.zero();
righe.put("PROGR", cont++);
righe.put("F24", numf24++);
righe.put("TRIBUTO", curr.get("SPP.S10").as_string());
righe.put("TIPOINTEST", 'C');
righe.put("INTEST", curr.get("DOC.CODCF").as_int());
righe.put("DESCR", "Riga generata");
righe.put("IMPORTODEB", curr.get("RDOC.RITENUTA").as_real());
righe.put("ABI", abi);
righe.put("CAB", cab);
righe.put("DATASCAD", datascad);
err = righe.write();
}
}
return (err==NOERR);
}
void TListaRitFisc::main_loop()
{
TListaRitFisc_mask m;
// cerca abi e cab della ditta
const TString& abi = prefix().firm().get(NDT_ABIBAN);
const TString& cab = prefix().firm().get(NDT_CABBAN);
m.set(F_CODABI, abi);
m.set(F_CODCAB, cab);
KEY key = K_ENTER;
while (key != K_QUIT)
{
key = m.run();
switch (key)
{
case K_SAVE:
crea_righe(m);
break;
case K_QUIT:
break;
case K_ENTER:
{
TDocument_report rep;
rep.load("ve8100a");
TRecordset * r = rep.recordset();
if (r != NULL)
{
TVariant var = m.get(F_NUMINI);
r->set_var("#DANUM", var);
var = m.get(F_NUMFIN);
r->set_var("#ANUM", var);
var = m.get(F_CODNUM);
r->set_var("#NUM", var);
}
rep.print_or_preview(); //stampa il book dei report
}
break;
}
}
}
int ve8100(int argc, char* argv[])
{
TListaRitFisc a;
a.run(argc, argv, TR("Lista ritenute per F24"));
return 0;
}