195 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			195 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#include <applicat.h>
 | 
						|
#include <isam.h>
 | 
						|
#include <relation.h>
 | 
						|
#include <mask.h>    
 | 
						|
#include <progind.h>
 | 
						|
#include <urldefid.h>
 | 
						|
#include <scadenze.h>
 | 
						|
#include <partite.h>  
 | 
						|
#include <lffiles.h>  
 | 
						|
#include <assoc.h>
 | 
						|
 | 
						|
#include "sc1100.h"
 | 
						|
 | 
						|
class _BoolObj : public TObject
 | 
						|
{
 | 
						|
public:
 | 
						|
  
 | 
						|
  bool _val;
 | 
						|
  int  _count;
 | 
						|
  
 | 
						|
  _BoolObj() { _val = FALSE; _count = 0; }
 | 
						|
  virtual ~_BoolObj() {}
 | 
						|
};
 | 
						|
 | 
						|
class TDeletepart_app : public TApplication
 | 
						|
{                                     
 | 
						|
  TDate _datalimite;
 | 
						|
 | 
						|
protected:
 | 
						|
 | 
						|
  virtual bool create();
 | 
						|
  virtual bool destroy();
 | 
						|
  virtual bool menu(MENU_TAG m);  
 | 
						|
  static bool partchiuseal(const TRelation *r);
 | 
						|
  static TDeletepart_app& app() { return (TDeletepart_app&)main_app(); }
 | 
						|
  
 | 
						|
public:
 | 
						|
 | 
						|
  TDate& datalimite() { return _datalimite; }
 | 
						|
 | 
						|
  TDeletepart_app() {};  
 | 
						|
  ~TDeletepart_app() {};  
 | 
						|
};
 | 
						|
 | 
						|
bool TDeletepart_app::create()
 | 
						|
{
 | 
						|
  TApplication::create();
 | 
						|
  dispatch_e_menu(BAR_ITEM(1));
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TDeletepart_app::destroy()
 | 
						|
{
 | 
						|
  return TApplication::destroy();
 | 
						|
}
 | 
						|
 | 
						|
bool TDeletepart_app::partchiuseal(const TRelation *r)
 | 
						|
{                                                
 | 
						|
  return (/* r->lfile().get_bool(PART_CHIUSA) &&   */
 | 
						|
    (app().datalimite() >= r->lfile().get_date(PART_DATAREG)));
 | 
						|
}                                                                                           
 | 
						|
 | 
						|
bool TDeletepart_app::menu(MENU_TAG)
 | 
						|
{
 | 
						|
  TMask m("sc1100a");
 | 
						|
  TRelation partite(LF_PARTITE);
 | 
						|
  TCursor cur(&partite);
 | 
						|
  TLocalisamfile scadenze(LF_SCADENZE);
 | 
						|
  TAssoc_array to_zap;
 | 
						|
  
 | 
						|
  while (m.run() != K_QUIT) 
 | 
						|
  {                 
 | 
						|
    _datalimite = m.get(F_DATE);
 | 
						|
    cur.set_filterfunction(partchiuseal);    
 | 
						|
    
 | 
						|
    TRecnotype last = cur.items()-1;  
 | 
						|
    const TRecnotype first = cur.read();
 | 
						|
    TRecnotype total = 0;   
 | 
						|
    int lastanno = -1;
 | 
						|
    TString16 lastpart = "";
 | 
						|
    TToken_string id(12);
 | 
						|
    
 | 
						|
    for (cur = 0; cur.pos() <= last; ++cur)
 | 
						|
    {                                      
 | 
						|
      // build key
 | 
						|
      id = cur.curr().get(PART_ANNO);
 | 
						|
      id.add(cur.curr().get(PART_NUMPART));
 | 
						|
      
 | 
						|
      if (!to_zap.is_key(id))
 | 
						|
        to_zap.add(id, new _BoolObj);
 | 
						|
      
 | 
						|
      _BoolObj& bobj = (_BoolObj&)to_zap[id];
 | 
						|
 | 
						|
      bobj._count ++;
 | 
						|
      if (cur.curr().get_bool(PART_CHIUSA))
 | 
						|
        bobj._val = TRUE;
 | 
						|
      
 | 
						|
      if (lastanno != cur.curr().get_int(PART_ANNO) ||
 | 
						|
          lastpart != cur.curr().get(PART_NUMPART));
 | 
						|
    {               
 | 
						|
      total++;
 | 
						|
      lastanno = cur.curr().get_int(PART_ANNO);
 | 
						|
      lastpart = cur.curr().get(PART_NUMPART); 
 | 
						|
    }
 | 
						|
    }
 | 
						|
    
 | 
						|
    if (total == 0)
 | 
						|
    {
 | 
						|
      warning_box("Nessuna partita da cancellare");
 | 
						|
      return FALSE;
 | 
						|
    }
 | 
						|
    
 | 
						|
    TString80 caption("Cancellazione di ");
 | 
						|
    
 | 
						|
    caption.add_plural(total, "partita");
 | 
						|
    if (!yesno_box(caption) || total < 1)
 | 
						|
      continue;
 | 
						|
    
 | 
						|
    TProgind pi(total, caption, FALSE, TRUE, 24);
 | 
						|
    
 | 
						|
    cur.freeze();  
 | 
						|
    lastanno = -1; 
 | 
						|
    int err = NOERR;     
 | 
						|
    
 | 
						|
    for (cur = 0; cur.pos() <= last; ++cur)
 | 
						|
    {
 | 
						|
      const int anno = cur.curr().get_int(PART_ANNO);
 | 
						|
      const TString16 partita = cur.curr().get(PART_NUMPART);
 | 
						|
 | 
						|
      id = cur.curr().get(PART_ANNO);
 | 
						|
      id.add(cur.curr().get(PART_NUMPART));
 | 
						|
      
 | 
						|
      _BoolObj& bobj = (_BoolObj&)to_zap[id];
 | 
						|
 | 
						|
      err = cur.lock();
 | 
						|
      if (err == NOERR && bobj._val == TRUE);
 | 
						|
    { 
 | 
						|
      for (int rig = 1; err == NOERR; rig++)
 | 
						|
      {    
 | 
						|
        scadenze.zero();
 | 
						|
        scadenze.put(SCAD_ANNO, anno);
 | 
						|
        scadenze.put(SCAD_NUMPART, partita);
 | 
						|
        scadenze.put(SCAD_NRATA, rig);
 | 
						|
        if ((err = scadenze.read(_isequal, _lock)) == NOERR)
 | 
						|
          if (scadenze.remove() != NOERR)
 | 
						|
          {
 | 
						|
            caption.format("riga scadenza %d", rig);   
 | 
						|
            break;
 | 
						|
          }
 | 
						|
      }  
 | 
						|
      pi.addstatus(1);
 | 
						|
 | 
						|
      err = cur.file().remove(); 
 | 
						|
      if (err != NOERR)
 | 
						|
        caption = "riga partite";
 | 
						|
    }  
 | 
						|
    } // eliminate partite e scadenze scelte
 | 
						|
    
 | 
						|
    // cerca scadenze senza partita                  
 | 
						|
    TLocalisamfile& part = cur.file();   
 | 
						|
    
 | 
						|
    for (scadenze.first(); !scadenze.eof() && err == NOERR; scadenze.next())
 | 
						|
    {             
 | 
						|
      part.zero();
 | 
						|
      part.put(PART_ANNO,    scadenze.get(SCAD_ANNO));
 | 
						|
      part.put(PART_NUMPART, scadenze.get(SCAD_NUMPART));
 | 
						|
      
 | 
						|
      // se non c'e'
 | 
						|
      if (part.read(_isgteq) != NOERR)
 | 
						|
        err = scadenze.remove();      
 | 
						|
      if (err != NOERR)
 | 
						|
        caption = "riga scadenze";
 | 
						|
    }  
 | 
						|
    
 | 
						|
    if (err != NOERR)
 | 
						|
    {
 | 
						|
      error_box("Errore %d nella cancellazione della %s della partita %d/%s", 
 | 
						|
                err, (const char*)caption, lastanno, lastpart);
 | 
						|
      break;
 | 
						|
    }  
 | 
						|
 | 
						|
    cur.freeze(FALSE);                    
 | 
						|
  }
 | 
						|
  
 | 
						|
  return FALSE;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
int sc1100(int argc, char** argv)
 | 
						|
{
 | 
						|
  TDeletepart_app a;
 | 
						|
  a.run(argc, argv, "Eliminazione partite chiuse");
 | 
						|
  return 0;
 | 
						|
}
 |