Files correlati : sc1.exe sc1300a.msk Ricompilazione Demo : [ ] Commento : Riallineamento partite in base ai parametri ditta git-svn-id: svn://10.65.10.50/branches/R_10_00@21131 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			187 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			187 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#include <applicat.h>
 | 
						|
#include <mask.h>
 | 
						|
#include <config.h>
 | 
						|
#include <progind.h>
 | 
						|
#include <recset.h>
 | 
						|
#include <relation.h>
 | 
						|
#include <reputils.h>
 | 
						|
 | 
						|
#include "sc1300.h"
 | 
						|
 | 
						|
#include "partite.h"
 | 
						|
 | 
						|
class TAllinea_partite : public TSkeleton_application
 | 
						|
{ 
 | 
						|
  char _cli_align, _for_align;
 | 
						|
 | 
						|
protected:  // Applicat
 | 
						|
  virtual void on_config_change();
 | 
						|
  virtual void main_loop();  
 | 
						|
 | 
						|
public:
 | 
						|
  void allinea(int logicnum, TLog_report& log, bool& can_write);
 | 
						|
  void compatta(int logicnum, TLog_report& log, bool& can_write);
 | 
						|
  void allinea_e_compatta(int logicnum, TLog_report& log, bool& can_write);
 | 
						|
};
 | 
						|
 | 
						|
void TAllinea_partite::on_config_change()
 | 
						|
{
 | 
						|
  TConfig cd(CONFIG_DITTA, "cg");
 | 
						|
  _cli_align = cd.get_bool("NrCliDx") ? 'R' : 'L';
 | 
						|
  _for_align = cd.get_bool("NrForDx") ? 'R' : 'L';
 | 
						|
  xvtil_statbar_set("", true);
 | 
						|
}
 | 
						|
 | 
						|
void TAllinea_partite::allinea(int logicnum, TLog_report& log, bool& can_write)
 | 
						|
{
 | 
						|
  TString query;
 | 
						|
  query << "USE " << logicnum;
 | 
						|
  TISAM_recordset recset(query);
 | 
						|
  TLocalisamfile& file = recset.cursor()->file();
 | 
						|
  TRectype& curr = file.curr();
 | 
						|
 | 
						|
  TString8 last;
 | 
						|
 | 
						|
  TString msg; 
 | 
						|
  msg = can_write ? TR("Allineamento") : TR("Controllo");
 | 
						|
  msg << ' ' << file.description() << " : " << recset.items() << ' ' << TR("righe");
 | 
						|
  log.log(0, "");
 | 
						|
  log.log(1, msg);
 | 
						|
  log.log(0, "");
 | 
						|
 | 
						|
  const int partlen = curr.length(PART_NUMPART);
 | 
						|
 | 
						|
  TRecnotype nl = 0, na = 0;
 | 
						|
 | 
						|
  TProgind pi(recset.items(), msg);
 | 
						|
  for (bool go = recset.move_first(); go; go = recset.move_next())
 | 
						|
  {
 | 
						|
    if (!pi.addstatus(1))
 | 
						|
    {
 | 
						|
      log.log(1, TR("Elaborazione interrotta dall'utente"));
 | 
						|
      can_write = false;
 | 
						|
      break;
 | 
						|
    }
 | 
						|
    nl++;
 | 
						|
    
 | 
						|
    const TString8 numpart = curr.get(PART_NUMPART);
 | 
						|
    // Codice partita allineabile in quanto piu' corto della lunghezza massima
 | 
						|
    if (numpart[0] == ' ' || numpart.len() < partlen) 
 | 
						|
    {
 | 
						|
      const char tipocf = curr.get_char(PART_TIPOCF);
 | 
						|
      const char richiesto = tipocf == 'F' ? _for_align : _cli_align;
 | 
						|
      const char attuale = numpart[0] > ' ' ? 'L' : 'R';
 | 
						|
      if (attuale == richiesto)
 | 
						|
        continue;
 | 
						|
 | 
						|
      TString8 newpart = numpart;
 | 
						|
      if (richiesto == 'R')
 | 
						|
        newpart.right_just(partlen);
 | 
						|
      else
 | 
						|
        newpart.trim();
 | 
						|
 | 
						|
      if (numpart != last)
 | 
						|
      {
 | 
						|
        msg.cut(0);
 | 
						|
        if (tipocf > ' ')
 | 
						|
          msg << tipocf;
 | 
						|
        else
 | 
						|
          msg << curr.get(PART_GRUPPO) << ' ' << curr.get(PART_CONTO);
 | 
						|
        msg << ' ' << curr.get(PART_SOTTOCONTO) << ' ' << curr.get(PART_ANNO) 
 | 
						|
            << " '" << numpart << "' => '"  << newpart << "'";
 | 
						|
        log.log(0, msg);
 | 
						|
        last = numpart;
 | 
						|
      }
 | 
						|
 | 
						|
      if (can_write)
 | 
						|
      {
 | 
						|
        const char richiesto = tipocf == 'F' ? _for_align : _cli_align;
 | 
						|
        const char attuale = numpart.len() < partlen ? 'L' : 'R';
 | 
						|
        if (attuale != richiesto)
 | 
						|
        {
 | 
						|
          TString8 newpart = curr.get(PART_NUMPART);
 | 
						|
          if (richiesto == 'R')
 | 
						|
            newpart.right_just(partlen);
 | 
						|
          else
 | 
						|
            newpart.trim();
 | 
						|
          curr.put(PART_NUMPART, newpart);
 | 
						|
          
 | 
						|
          const TRecnotype recno = file.recno();
 | 
						|
          const int err = file.rewriteat(curr, recno);
 | 
						|
          if (err == NOERR)
 | 
						|
            na++;
 | 
						|
          else
 | 
						|
          {
 | 
						|
            msg = TR("Errore di aggiornamento del file ");
 | 
						|
            msg << file.description() << " : " << err;
 | 
						|
            log.log(2, msg);
 | 
						|
            can_write = false;
 | 
						|
          }
 | 
						|
        }
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  if (nl > 0)
 | 
						|
  {
 | 
						|
    msg.cut(0) << TR("Righe lette") << " : " << nl;
 | 
						|
    log.log(1, msg);
 | 
						|
  }
 | 
						|
  if (na > 0)
 | 
						|
  {
 | 
						|
    msg.cut(0) << TR("Righe aggiornate") << " : " << na;
 | 
						|
    log.log(1, msg);
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
void TAllinea_partite::compatta(int logicnum, TLog_report& log, bool& can_write)
 | 
						|
{
 | 
						|
  if (can_write)
 | 
						|
  {
 | 
						|
    safely_close_closeable_isamfiles();
 | 
						|
    TSystemisamfile sysfile(logicnum);
 | 
						|
 | 
						|
    TString msg;
 | 
						|
    msg << TR("Compattamento") << ' ' << sysfile.description();
 | 
						|
    log.log(1, msg);
 | 
						|
    int err = sysfile.pack(true);
 | 
						|
    if (err != NOERR)
 | 
						|
    {
 | 
						|
      msg = TR("Errore di compattamento del file ");
 | 
						|
      msg << sysfile.description() << " : " << err;
 | 
						|
      log.log(2, msg);
 | 
						|
      can_write = false;
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
void TAllinea_partite::allinea_e_compatta(int logicnum, TLog_report& log, bool& can_write)
 | 
						|
{
 | 
						|
  allinea(logicnum, log, can_write);
 | 
						|
  compatta(logicnum, log, can_write);
 | 
						|
}
 | 
						|
 | 
						|
void TAllinea_partite::main_loop()
 | 
						|
{
 | 
						|
  TMask msk("sc1300a");
 | 
						|
  msk.set(F_ALLINEAMENTO_CLI, _cli_align == 'R' ? "R" : "L");
 | 
						|
  msk.set(F_ALLINEAMENTO_FOR, _for_align == 'R' ? "R" : "L");
 | 
						|
  msk.set(F_ALLINEAMENTO_CON, _cli_align == 'R' ? "R" : "L");
 | 
						|
  while (msk.run() == K_ENTER)
 | 
						|
  {
 | 
						|
    bool can_write = msk.get_bool(F_SCRITTURA);
 | 
						|
    TLog_report log(title());
 | 
						|
    allinea_e_compatta(LF_PARTITE,  log, can_write);
 | 
						|
    allinea_e_compatta(LF_SCADENZE, log, can_write);
 | 
						|
    allinea_e_compatta(LF_PAGSCA,   log, can_write);
 | 
						|
    log.preview();
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
int sc1300(int argc, char** argv)
 | 
						|
{
 | 
						|
  TAllinea_partite a;
 | 
						|
  a.run(argc, argv, TR("Allineamento partite"));
 | 
						|
  return 0;
 | 
						|
}
 |