git-svn-id: svn://10.65.10.50/branches/R_10_00@22640 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			140 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			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"));
 | 
						|
}
 |