175 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			175 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#include <xvt.h>
 | 
						|
 | 
						|
#include <applicat.h>
 | 
						|
#include <isam.h>
 | 
						|
#include <mailbox.h>
 | 
						|
#include <progind.h>
 | 
						|
#include <prefix.h>
 | 
						|
#include <urldefid.h>
 | 
						|
#include <utility.h>
 | 
						|
 | 
						|
#include <rmov.h>
 | 
						|
 | 
						|
#define usage "Errore - uso : bacnv 1 ditta"
 | 
						|
 | 
						|
class TConversione_archivi : public TApplication
 | 
						|
{
 | 
						|
  int _nconv;
 | 
						|
  long _codditta;
 | 
						|
  long _oldditta;
 | 
						|
  int _error;
 | 
						|
 | 
						|
protected:
 | 
						|
  virtual bool create() ;                         
 | 
						|
  virtual bool destroy() ;                        
 | 
						|
  virtual bool menu(MENU_TAG);
 | 
						|
  
 | 
						|
  bool convert_rmov(TLocalisamfile & rmov, TArray & recs, int nrecs);
 | 
						|
  void contropartita_rmov();
 | 
						|
 | 
						|
public:
 | 
						|
  TConversione_archivi() : _oldditta(0), _codditta(0), _error(0) {}
 | 
						|
};
 | 
						|
 | 
						|
bool TConversione_archivi::create()
 | 
						|
{
 | 
						|
  TApplication::create();
 | 
						|
 | 
						|
  if (argc() < 3)
 | 
						|
  {
 | 
						|
    _error = 101;
 | 
						|
    TMessage msg("ba1100", 0, format("%d", _error));
 | 
						|
 | 
						|
    msg.send();
 | 
						|
    return FALSE;
 | 
						|
  }
 | 
						|
  else
 | 
						|
  {
 | 
						|
    _oldditta = get_firm();
 | 
						|
    _codditta = atol(argv(argc() - 1));
 | 
						|
    _nconv = atoi(argv(1));
 | 
						|
    if (_codditta != _oldditta) 
 | 
						|
    {
 | 
						|
      if (_codditta == 0) prefhndl->set("com");
 | 
						|
      else set_firm(_codditta);
 | 
						|
    }
 | 
						|
    dispatch_e_menu(MENU_ITEM(1));
 | 
						|
    return TRUE;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
bool TConversione_archivi::destroy()
 | 
						|
{
 | 
						|
  if (_codditta != _oldditta)
 | 
						|
  {
 | 
						|
    if (_oldditta == 0) prefhndl->set("com");
 | 
						|
    else set_firm(_oldditta);
 | 
						|
  }
 | 
						|
  if (_error > 0)
 | 
						|
  {
 | 
						|
    TMessage msg("ba1100", 0, format("%d", _error));
 | 
						|
    msg.send();
 | 
						|
  }
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TConversione_archivi::menu(MENU_TAG)
 | 
						|
{
 | 
						|
  switch (_nconv)
 | 
						|
  {
 | 
						|
  case 1:
 | 
						|
    contropartita_rmov(); break;
 | 
						|
  default:
 | 
						|
    break;  
 | 
						|
  }
 | 
						|
  return FALSE;
 | 
						|
}
 | 
						|
 | 
						|
bool TConversione_archivi::convert_rmov(TLocalisamfile & rmov, TArray & recs, int nrecs)
 | 
						|
{
 | 
						|
  const TRecnotype pos = rmov.recno();
 | 
						|
 | 
						|
  for (int i = 0; i < nrecs; i++)
 | 
						|
  {
 | 
						|
    TRectype & r0 = (TRectype &) recs[i];
 | 
						|
    const int rcontr = r0.get_int(RMV_RCONTR) - 1;
 | 
						|
 | 
						|
    if (rcontr >= 0 && rcontr < nrecs)
 | 
						|
    {
 | 
						|
      const TRectype & r1 = (const TRectype &) recs[rcontr];
 | 
						|
 | 
						|
      r0.put(RMV_TIPOCC, r1.get(RMV_TIPOC));
 | 
						|
      r0.put(RMV_GRUPPOC, r1.get_int(RMV_GRUPPO));
 | 
						|
      r0.put(RMV_CONTOC, r1.get_int(RMV_CONTO));
 | 
						|
      r0.put(RMV_SOTTOCONTOC, r1.get_long(RMV_SOTTOCONTO));
 | 
						|
    }
 | 
						|
    r0.zero(RMV_RCONTR);
 | 
						|
    if (rmov.rewrite(r0) != NOERR)
 | 
						|
    {
 | 
						|
      const long reg = r0.get_long(RMV_NUMREG);
 | 
						|
      error_box("Non riesco ad aggiornare la riga contabile %ld / %d\nErrore n. %d", reg, i + 1, rmov.status());
 | 
						|
      rmov.readat(pos);
 | 
						|
      _error = 102;
 | 
						|
      return FALSE;
 | 
						|
    }
 | 
						|
  }
 | 
						|
  rmov.readat(pos);
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
void TConversione_archivi::contropartita_rmov()
 | 
						|
{
 | 
						|
  TDir d;
 | 
						|
  d.get(LF_RMOV);
 | 
						|
  if (d.eox() == 0) return;
 | 
						|
 | 
						|
  TLocalisamfile rmov(LF_RMOV);
 | 
						|
  const TRecnotype nitems = rmov.items();
 | 
						|
  TArray recs;
 | 
						|
  long oldreg = -1;
 | 
						|
  long reg = -1;
 | 
						|
  int nrow = 0;
 | 
						|
  TProgind p(nitems ? nitems : 1,
 | 
						|
             format("Conversione righe di movimento della ditta %ld", get_firm()),
 | 
						|
             TRUE, TRUE, 70);
 | 
						|
  for (rmov.first(); rmov.good(); rmov.next())
 | 
						|
  {
 | 
						|
    p.addstatus(1);
 | 
						|
    reg = rmov.get_long(RMV_NUMREG);
 | 
						|
    if (oldreg != reg)
 | 
						|
    {
 | 
						|
      if (oldreg > 0)
 | 
						|
        if (convert_rmov(rmov, recs, nrow) == FALSE)
 | 
						|
          return;
 | 
						|
      oldreg = reg;
 | 
						|
      nrow = 0;
 | 
						|
    }
 | 
						|
    recs.add(rmov.curr(), nrow++);
 | 
						|
    CHECKD(nrow == rmov.get_int(RMV_NUMRIG), "Missed row ", nrow); 
 | 
						|
  } 
 | 
						|
  if (oldreg > 0)
 | 
						|
    if (convert_rmov(rmov, recs, nrow) == FALSE)
 | 
						|
      return;
 | 
						|
}
 | 
						|
 | 
						|
HIDDEN void bacnv(int argc, char** argv)
 | 
						|
{
 | 
						|
  TConversione_archivi a ;
 | 
						|
  a.run(argc, argv, "Conversione archivi");
 | 
						|
}
 | 
						|
 | 
						|
int main(int argc,char** argv)
 | 
						|
{
 | 
						|
  const int r = (argc > 1) ? atoi(argv[1]) : 0;
 | 
						|
  
 | 
						|
  if (r <= 0 || r > 1)
 | 
						|
  {
 | 
						|
    error_box(usage);
 | 
						|
    return 100;
 | 
						|
  }
 | 
						|
  
 | 
						|
  bacnv(argc, argv);
 | 
						|
  return 0;
 | 
						|
}
 | 
						|
 |