Files correlati : Ricompilazione Demo : [ ] Commento : Eliminati include inutili git-svn-id: svn://10.65.10.50/trunk@18504 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			295 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			295 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#include <automask.h>
 | 
						||
#include <execp.h>
 | 
						||
#include <relapp.h>
 | 
						||
 | 
						||
#include "lvlib.h"
 | 
						||
 | 
						||
#include "lvpasplan.h"
 | 
						||
#include "lvperisop.h"
 | 
						||
 | 
						||
#include "lv0500a.h"
 | 
						||
 | 
						||
////////////////
 | 
						||
//  MASCHERA  //
 | 
						||
////////////////
 | 
						||
class TPass_plan_contr_mask : public TAutomask
 | 
						||
{
 | 
						||
private:  
 | 
						||
  void proponi_orario();
 | 
						||
  void sistema_data(TOperable_field& o);
 | 
						||
 | 
						||
protected:
 | 
						||
  virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | 
						||
 | 
						||
public:
 | 
						||
  TPass_plan_contr_mask();
 | 
						||
};
 | 
						||
 | 
						||
void TPass_plan_contr_mask::proponi_orario()
 | 
						||
{
 | 
						||
  TSheet_field& sheet = sfield(F_PASPLAN);  
 | 
						||
  TToken_string& rigamodificata = sheet.row(sheet.items()-1);
 | 
						||
  rigamodificata.add("00:00",sheet.cid2index(F_S_ORA));
 | 
						||
}
 | 
						||
 | 
						||
//SISTEMA_DATA: metodo che aggiunge un separatore tra giorno e mese quando necessario
 | 
						||
void TPass_plan_contr_mask::sistema_data(TOperable_field& o)
 | 
						||
{
 | 
						||
  TString8 data = o.get();
 | 
						||
  if (data.len() < 5)
 | 
						||
  {
 | 
						||
    data.insert("-", 2);
 | 
						||
    o.set(data);
 | 
						||
  }
 | 
						||
}
 | 
						||
 | 
						||
bool TPass_plan_contr_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
 | 
						||
{  
 | 
						||
  switch (o.dlg())
 | 
						||
  {
 | 
						||
  case F_PASPLAN:
 | 
						||
    switch (e)
 | 
						||
    {
 | 
						||
    case se_notify_add:
 | 
						||
      proponi_orario();
 | 
						||
      break;
 | 
						||
    default: break;
 | 
						||
    }
 | 
						||
    break;
 | 
						||
  case F_S_DASTAG:
 | 
						||
  case F_S_ASTAG:
 | 
						||
    if (e == fe_modify)
 | 
						||
      sistema_data(o);
 | 
						||
    break;  
 | 
						||
  default: 
 | 
						||
    break;
 | 
						||
  }  
 | 
						||
  return true;  
 | 
						||
}
 | 
						||
 | 
						||
TPass_plan_contr_mask::TPass_plan_contr_mask() 
 | 
						||
                      :TAutomask("lv0500a") {}
 | 
						||
 | 
						||
 | 
						||
////////////////////
 | 
						||
//  Applicazione  //
 | 
						||
////////////////////
 | 
						||
class TPass_plan_contr : public TRelation_application
 | 
						||
{ 
 | 
						||
  TPass_plan_contr_mask* _mask;
 | 
						||
  TRelation*             _rel;
 | 
						||
  long                   _codcli;
 | 
						||
  long                   _codcont;
 | 
						||
 | 
						||
private:
 | 
						||
  void genera_giri(const long codli);   //richiama la generazione giri in automatico
 | 
						||
  void kill_duplicates(const TMask& m); //uccide i duplicati e le righe vuote sullo sheet
 | 
						||
 | 
						||
protected:
 | 
						||
  virtual void init_query_mode(TMask& m);
 | 
						||
  virtual bool user_create();
 | 
						||
  virtual bool user_destroy();
 | 
						||
  virtual int read(TMask& m);
 | 
						||
  virtual int write(const TMask& m);
 | 
						||
  virtual int rewrite(const TMask& m);
 | 
						||
  virtual bool remove();
 | 
						||
  virtual TMask* get_mask(int mode) { return _mask; }
 | 
						||
  virtual bool changing_mask(int mode) { return false; }
 | 
						||
	
 | 
						||
public:
 | 
						||
  virtual TRelation* get_relation() const {return (TRelation*)_rel;}
 | 
						||
};
 | 
						||
 | 
						||
///////////////////////////////////////////
 | 
						||
////         FUNZIONI PER READ         ////
 | 
						||
///////////////////////////////////////////
 | 
						||
 | 
						||
//READ: ridefinizione metodo read() delle TRelation
 | 
						||
int TPass_plan_contr::read(TMask& m)
 | 
						||
{  
 | 
						||
  //riempio gli sheet
 | 
						||
  const int err = TRelation_application::read(m);
 | 
						||
  if (err == NOERR)
 | 
						||
  {
 | 
						||
    TSheet_field& pc = m.sfield(F_PASPLAN);
 | 
						||
   
 | 
						||
    if (pc.items() == 0)
 | 
						||
    {
 | 
						||
      //questo ciclo crea le sette righe vuote
 | 
						||
      TString ora = "00:00";
 | 
						||
      for (int i = 1; i<=7; ++i)
 | 
						||
      {
 | 
						||
        TToken_string& row = pc.row(-1);     //crea una nuova riga dello sheet
 | 
						||
        row.add(i,pc.cid2index(F_S_GGCONS)); //aggiunge al posto giusto il numero del giorno della settimana
 | 
						||
        row.add(ora,pc.cid2index(F_S_ORA));  //propone l'ora di arrivo in automatico
 | 
						||
        pc.check_row(pc.items()-1);       //forza la maschera a fare la decodifica dei codici
 | 
						||
      }
 | 
						||
      pc.force_update();  //forza l'update dello sheet, in modo da rendere visibili i cambiamenti fatti
 | 
						||
    }
 | 
						||
  }
 | 
						||
  return err;
 | 
						||
}
 | 
						||
 | 
						||
///////////////////////////////////////////
 | 
						||
////   FUNZIONI PER WRITE E REWRITE    ////
 | 
						||
///////////////////////////////////////////
 | 
						||
 | 
						||
//GENERA_GIRI: questa funzione richiama la generazione giri in automatico...
 | 
						||
//..se questa possibilit<69> <20> prevista in configurazione
 | 
						||
void TPass_plan_contr::genera_giri(const long codcli)
 | 
						||
{
 | 
						||
  //la scrittura automatica dei giri viene fatta solo se <20> settato l'apposito flag...
 | 
						||
  //...nella configurazione di modulo
 | 
						||
  TConfig* configlv = new TConfig(CONFIG_DITTA,"lv");
 | 
						||
  if (configlv->get("Autgiri") == "X")
 | 
						||
  {
 | 
						||
    //richiamo il programma lv2100.cpp per generare i giri in autmatico dalla data odierna...
 | 
						||
    //...alla data dell'ultimo giro gi<67> generato
 | 
						||
    TFilename fname;
 | 
						||
    fname.tempdir();
 | 
						||
    fname.add("autogiri.ini");
 | 
						||
 | 
						||
    TConfig ini(fname,"main");
 | 
						||
    ini.set("transaction", "update");
 | 
						||
    ini.set_paragraph("167");
 | 
						||
    ini.set("CODCF", codcli);
 | 
						||
    ini.set_paragraph("main");
 | 
						||
 | 
						||
    TString str;
 | 
						||
    str << "lv2 -0 -i" << fname;
 | 
						||
 | 
						||
    TExternal_app app(str);
 | 
						||
    app.run();
 | 
						||
    fname.fremove();        
 | 
						||
  }
 | 
						||
}
 | 
						||
 | 
						||
//KILL_DUPLICATES: questa funzione elimina dallo sheet tutte le righe che non contengono dati di interesse...
 | 
						||
//...e/o le righe duplicate sullo sheet
 | 
						||
void TPass_plan_contr::kill_duplicates(const TMask& m)
 | 
						||
{
 | 
						||
  TSheet_field& pc = m.sfield(F_PASPLAN);
 | 
						||
 | 
						||
  //ciclo che elimina le righe che non contengono dati di interesse dallo sheet
 | 
						||
  FOR_EACH_SHEET_ROW_BACK (pc, r, row)
 | 
						||
    if (row->get_int(2) == 0)
 | 
						||
      pc.destroy(r, false);
 | 
						||
 | 
						||
  //ciclo che elimina tutti i duplicati dallo sheet
 | 
						||
  FOR_EACH_SHEET_ROW_BACK (pc, r1, row1)
 | 
						||
    if (pc.rows_array().find(*row1) < r1)
 | 
						||
      pc.destroy(r1,false);
 | 
						||
}
 | 
						||
 | 
						||
//WRITE: ridefinizione metodo write delle TRelation
 | 
						||
int TPass_plan_contr::write(const TMask& m)
 | 
						||
{
 | 
						||
  if (_mask->field(F_CODCF).empty() || _mask->field(F_CODCONT).empty())
 | 
						||
    return _isnocurkey;  
 | 
						||
  
 | 
						||
  kill_duplicates(m);
 | 
						||
 | 
						||
  const int err = TRelation_application::write(m);
 | 
						||
 | 
						||
  TSheet_field& pc = m.sfield(F_PASPLAN);
 | 
						||
  
 | 
						||
  if (err == NOERR && pc.items() > 0)
 | 
						||
  {
 | 
						||
    const long codcli = _mask->get_long(F_CODCF);
 | 
						||
    
 | 
						||
    genera_giri(codcli);
 | 
						||
  }
 | 
						||
  return err;
 | 
						||
}
 | 
						||
 | 
						||
//ridefinizione metodo rewrite delle TRelation
 | 
						||
int TPass_plan_contr::rewrite(const TMask& m)
 | 
						||
{
 | 
						||
  if (_mask->field(F_CODCF).empty() || _mask->field(F_CODCONT).empty())
 | 
						||
    return _isnocurkey;
 | 
						||
 | 
						||
  kill_duplicates(m);
 | 
						||
 | 
						||
  const int err = TRelation_application::rewrite(m);
 | 
						||
 | 
						||
  TSheet_field& pc = m.sfield(F_PASPLAN);
 | 
						||
  
 | 
						||
  if (err == NOERR && pc.items() > 0)
 | 
						||
  {
 | 
						||
    const long codcli = _mask->get_long(F_CODCF);
 | 
						||
    
 | 
						||
    genera_giri(codcli);
 | 
						||
  }
 | 
						||
  return err;
 | 
						||
}
 | 
						||
 | 
						||
///////////////////////////////////////////
 | 
						||
////        FUNZIONI PER REMOVE        ////
 | 
						||
///////////////////////////////////////////
 | 
						||
 | 
						||
//REMOVE: ridefinizione del metodo remove delle TRelation
 | 
						||
bool TPass_plan_contr::remove()
 | 
						||
{
 | 
						||
  TSheet_field& ps = _mask->sfield(F_PERSOSP);
 | 
						||
  ps.autosave(*_rel);
 | 
						||
  ps.record()->remove();
 | 
						||
 | 
						||
  TSheet_field& pc = _mask->sfield(F_PASPLAN);
 | 
						||
  pc.autosave(*_rel);
 | 
						||
  pc.record()->remove();
 | 
						||
 | 
						||
  return true;
 | 
						||
}
 | 
						||
 | 
						||
///////////////////////////////////////////
 | 
						||
////           METODI PRIVATI          ////
 | 
						||
///////////////////////////////////////////
 | 
						||
 | 
						||
//questa funzione forza i campi F_CODCF e F_CODCONT quando...
 | 
						||
//...vengono passati come parametri al programma
 | 
						||
void TPass_plan_contr::init_query_mode(TMask& m) 
 | 
						||
{
 | 
						||
  if (_codcli > 0)
 | 
						||
  {
 | 
						||
    m.set(F_CODCF,_codcli);
 | 
						||
    m.set(F_CODCONT,_codcont,0x2);
 | 
						||
    if (find(0))
 | 
						||
      modify_mode();
 | 
						||
  }
 | 
						||
}
 | 
						||
 | 
						||
//costruttore
 | 
						||
bool TPass_plan_contr::user_create()
 | 
						||
{ 
 | 
						||
  _rel = new TRelation(LF_LVCONDV);
 | 
						||
  _mask = new TPass_plan_contr_mask;
 | 
						||
 | 
						||
  //se gli sono stati passati pi<70> parametri, allora setto le variabili globali _codcli e _codcont...
 | 
						||
  //...con i parametri desiderati, se no li setto a zero
 | 
						||
  if (argc() > 2)
 | 
						||
  {
 | 
						||
    _codcli = atol(argv(2));
 | 
						||
    _codcont = atol(argv(3));
 | 
						||
  }
 | 
						||
  else
 | 
						||
  {
 | 
						||
    _codcli = 0;
 | 
						||
    _codcont = 0; 
 | 
						||
  }
 | 
						||
  return true;
 | 
						||
}
 | 
						||
 | 
						||
//distruttore
 | 
						||
bool TPass_plan_contr::user_destroy()
 | 
						||
{             
 | 
						||
  delete _mask;
 | 
						||
  return true;
 | 
						||
}
 | 
						||
 | 
						||
int lv0500(int argc, char* argv[])
 | 
						||
{
 | 
						||
  TPass_plan_contr a;
 | 
						||
  a.run(argc, argv, TR("Archivi Lavanderie"));
 | 
						||
  return 0;
 | 
						||
}
 |