campo-sirio/cg/cg1310.cpp
guy c8e2f83670 Corretto programma conversione da CFVEN->IBAN a CFBAN->IBAN
git-svn-id: svn://10.65.10.50/branches/R_10_00@22640 c028cbd2-c16b-5b4b-a496-9718f37d4682
2012-04-13 15:08:46 +00:00

140 lines
3.4 KiB
C++

#include <applicat.h>
#include <automask.h>
#include <progind.h>
#include <recarray.h>
#include <recset.h>
#include <relation.h>
#include <reputils.h>
#include <clifo.h>
#include "cfban.h"
///////////////////////////////////////////////////////////
// TIBAN_mask
///////////////////////////////////////////////////////////
class TIBAN_mask : public TAutomask
{
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TIBAN_mask() : TAutomask("cg1310") { }
};
bool TIBAN_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
return true;
}
///////////////////////////////////////////////////////////
// TIBAN_app
///////////////////////////////////////////////////////////
class TIBAN_app : public TSkeleton_application
{
protected:
void update(TRecord_array& a, TLog_report& log) const;
void elabora() const;
public:
virtual void main_loop();
};
void TIBAN_app::update(TRecord_array& a, TLog_report& log) const
{
const TRectype& row = a.row(a.last_row());
TString msg;
msg << TR("Aggiornamento banca del ")
<< row.get(CFBAN_TIPOCF) << '/' << row.get_long(CFBAN_CODCF)
<< " : " << row.get(CFBAN_ABI) << '/' << row.get(CFBAN_CAB)
<< " " << row.get(CFBAN_IBAN);
log.log(0, msg);
const int err = a.rewrite();
if (err != NOERR)
{
msg.format(FR("Errore %d durante l'aggiornamento del file delle banche"), err);
log.log(2, msg);
}
}
void TIBAN_app::elabora() const
{
TLog_report log;
TISAM_recordset clifo("USE CLIFO");
TProgind pi(clifo.items(), clifo.cursor()->file(0).description());
TRectype& curr = clifo.cursor()->curr();
for (bool ok = clifo.move_first(); ok; ok = clifo.move_next())
{
if (!pi.addstatus(1))
break;
const TString80 iban = curr.get(CLI_IBAN);
const TString8 abi = curr.get(CLI_CODABI);
const TString8 cab = curr.get(CLI_CODCAB);
if (iban.len() > 15 || atoi(cab) >= 1000)
{
TString16 key; key.format("%c|%ld|V", curr.get_char(CLI_TIPOCF), curr.get_long(CLI_CODCF));
TRecord_array cfban(key, LF_CFBAN);
if (iban.len() > 15)
{
int r = -1;
for (r = cfban.last_row(); r > 0; r = cfban.pred_row(r))
{
const TRectype& row = cfban.row(r);
if (row.get(CFBAN_IBAN) == iban)
break;
}
if (r <= 0)
{
TRectype& row = cfban.row(-1, true);
row.put(CFBAN_IBAN, iban);
if (iban.starts_with("IT"))
{
row.put(CFBAN_ABI, iban.mid(5, 5));
row.put(CFBAN_CAB, iban.mid(10, 5));
row.put(CFBAN_NUMCC, iban.mid(15));
}
update(cfban, log);
}
}
else
{
int r = -1;
for (r = cfban.last_row(); r > 0; r = cfban.pred_row(r))
{
const TRectype& row = cfban.row(r);
if (row.get(CFBAN_ABI) == abi && row.get(CFBAN_CAB) == cab)
break;
}
if (r <= 0)
{
TRectype& row = cfban.row(-1, true);
row.put(CFBAN_ABI, abi);
row.put(CFBAN_CAB, cab);
row.put(CFBAN_NUMCC, curr.get(CLI_NUMCC));
update(cfban, log);
}
}
}
}
log.preview();
}
void TIBAN_app::main_loop()
{
TIBAN_mask m;
if (m.run() == K_ENTER)
elabora();
}
void agg_iban(int argc, char* argv[])
{
TIBAN_app a;
a.run(argc, argv, TR("Allineamento IBAN"));
}