Files correlati : lv0.exe, lvtbcau.msk Ricompilazione Demo : [ ] Commento : Aggiunta la gestione delle causali di magazzino (solo campi di lavanderia) nelle causali di lavanderia git-svn-id: svn://10.65.10.50/trunk@18208 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			155 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			155 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
// gestione tabelle lavanderie
 | 
						|
 | 
						|
#include <automask.h>
 | 
						|
#include <modtbapp.h>
 | 
						|
#include <tabutil.h>
 | 
						|
 | 
						|
#include "lvtbcau.h"
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// Maschera generica di gestione tabelle lavanderie 
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
 | 
						|
class TLV_table_mask : public TAutomask
 | 
						|
{
 | 
						|
protected:
 | 
						|
	virtual bool on_field_event(TOperable_field &o, TField_event e, long jolly);
 | 
						|
 | 
						|
public:
 | 
						|
	TLV_table_mask(const char* name) : TAutomask(name) {}
 | 
						|
};
 | 
						|
 | 
						|
bool TLV_table_mask::on_field_event(TOperable_field &o, TField_event e, long jolly)
 | 
						|
{
 | 
						|
  return true;
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// Applicazione generica di gestione tabelle lavanderie 
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
 | 
						|
// applicazione per la gestione delle tabelle di lavanderia
 | 
						|
class TLV_table_app : public TTable_module_application
 | 
						|
{
 | 
						|
protected:  // TRelation_application 
 | 
						|
  virtual TMask* user_create_mask();
 | 
						|
  virtual int write(const TMask& m);
 | 
						|
  virtual int rewrite(const TMask& m);
 | 
						|
  virtual bool get_next_key(TToken_string& key);
 | 
						|
 | 
						|
  void cambia_segni(const TMask& m, const bool ritirato);
 | 
						|
  
 | 
						|
public:
 | 
						|
};
 | 
						|
 | 
						|
// Ridefinire questo metodo per le eventuali maschere speciali
 | 
						|
// che abbiano controlli speciali da effettuare nella on_field_evebt
 | 
						|
TMask* TLV_table_app::user_create_mask()
 | 
						|
{
 | 
						|
  const TString4 name = get_relation()->file(0).name();
 | 
						|
  if (name == "???")
 | 
						|
    return new TLV_table_mask("???");
 | 
						|
  // Le maschere normali sono gia' gestite dalla TTable_module_application
 | 
						|
  return TTable_module_application::user_create_mask();
 | 
						|
}
 | 
						|
 | 
						|
void TLV_table_app::cambia_segni(const TMask& m, const bool ritirato)
 | 
						|
{
 | 
						|
  //instanzio una TTable sulla ytabella delle causali di magazzino
 | 
						|
  TTable cau("%CAU");
 | 
						|
  const TString16 causale = m.get(ritirato ? F_CAUSALE_RITIRO : F_CAUSALE_CONSEGNA);
 | 
						|
  cau.put("CODTAB", causale);
 | 
						|
  //se trovo la causale
 | 
						|
  if (cau.read(_isequal, _lock) == NOERR)
 | 
						|
  {
 | 
						|
    TString s2 = cau.get("S2");
 | 
						|
    TString16 sgn = "";
 | 
						|
    int min = ritirato ? F_SGNDOTIN_R : F_SGNDOTIN_C;
 | 
						|
    int max = ritirato ? F_SGNCONMN_R : F_SGNCONMN_C;
 | 
						|
    //mi costruisco la stringa dei segni delle movimentazioni riportata in maschera
 | 
						|
    for (short i = min; i <= max; i++)
 | 
						|
    {
 | 
						|
      TString4 tmp;
 | 
						|
      switch (m.get_int(i))
 | 
						|
      {
 | 
						|
      case 0: tmp << "0 "; break;
 | 
						|
      case 1: tmp << "+1"; break;
 | 
						|
      case -1: tmp << "-1"; break;      
 | 
						|
      default:  break;
 | 
						|
      }      
 | 
						|
      sgn << tmp;
 | 
						|
    }
 | 
						|
    
 | 
						|
    //estraggo la sottostringa che mi interessa dalla tabella delle causali e la porto a lunghezza 10
 | 
						|
    TString16 str = s2.mid(28,10);
 | 
						|
    if(str.len() < 10)
 | 
						|
      str << " ";
 | 
						|
 | 
						|
    //chiedo se volglio proprio modificare i segni della movimentazione di magazzino
 | 
						|
    if (str != sgn && yesno_box(TR("Si desidera veramente modificare i segni delle causali?")))
 | 
						|
    {
 | 
						|
      s2.overwrite(sgn,28,10);
 | 
						|
      cau.put("S2", s2);
 | 
						|
      cau.rewrite();
 | 
						|
    }
 | 
						|
  }
 | 
						|
  else
 | 
						|
    cau.unlock();
 | 
						|
}
 | 
						|
 | 
						|
// Ridefinizione del metodo write
 | 
						|
int TLV_table_app::write(const TMask& m)
 | 
						|
{
 | 
						|
  const TString4 name = get_relation()->file(0).name();
 | 
						|
  if (name == "CAU")
 | 
						|
  {
 | 
						|
    if(m.get_bool(F_RITIRATO))
 | 
						|
      cambia_segni(m, true);
 | 
						|
    
 | 
						|
    if(m.get_bool(F_CONSEGNATO))
 | 
						|
      cambia_segni(m, false);    
 | 
						|
  }
 | 
						|
  return TTable_module_application::write(m);      
 | 
						|
}
 | 
						|
 | 
						|
// Ridefinizione del metodo rewrite
 | 
						|
int TLV_table_app::rewrite(const TMask& m)
 | 
						|
{
 | 
						|
  const TString4 name = get_relation()->file(0).name();
 | 
						|
  if (name == "CAU")
 | 
						|
  {
 | 
						|
    if(m.get_bool(F_RITIRATO))
 | 
						|
      cambia_segni(m, true);
 | 
						|
    
 | 
						|
    if(m.get_bool(F_CONSEGNATO))
 | 
						|
      cambia_segni(m, false);    
 | 
						|
  }
 | 
						|
  return TTable_module_application::rewrite(m);      
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
// Cerca di generare automaticamente la prossima chiave numerica di una tabella
 | 
						|
bool TLV_table_app::get_next_key(TToken_string& key)
 | 
						|
{
 | 
						|
  // Controlla se il campo COTDAB e' numerico
 | 
						|
  TMask& msk = curr_mask();
 | 
						|
  TMask_field* keyfield = msk.find_by_fieldname("CODTAB");
 | 
						|
  if (keyfield != NULL && keyfield->is_kind_of(CLASS_REAL_FIELD))
 | 
						|
  {
 | 
						|
    long num = 1;
 | 
						|
    TLocalisamfile& tab = get_relation()->lfile();
 | 
						|
    if (tab.last() == NOERR) // Cerca l'eventuale ultimo record della tabella
 | 
						|
      num += tab.get_long("CODTAB");
 | 
						|
    // Costrusci la chiave formattata alla giusta lunghezza del campo, es: "101|0003"
 | 
						|
    key.format("%d|%0*ld", keyfield->dlg(), keyfield->size(), num);
 | 
						|
  }
 | 
						|
  return key.full(); // Ritorna true se la procedura e' riuscita
 | 
						|
}
 | 
						|
 | 
						|
int lv0100(int argc, char* argv[])
 | 
						|
{
 | 
						|
  TLV_table_app a;
 | 
						|
  a.run(argc, argv, TR("Tabella Lavanderie"));
 | 
						|
  return 0;
 | 
						|
}
 |