Files correlati : Ricompilazione Demo : [ ] Commento : Riportate le patch fino alla 172 git-svn-id: svn://10.65.10.50/trunk@12526 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			279 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			279 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
// Programma di gestione percentuali di provvigione
 | 
						|
 | 
						|
#include <relapp.h>
 | 
						|
#include <tabutil.h>
 | 
						|
 | 
						|
#include "percprov.h"
 | 
						|
#include "pr0600a.h"
 | 
						|
#include "pr0.h"
 | 
						|
 | 
						|
typedef short order[4];
 | 
						|
 | 
						|
class TGestione_percprovv_app:public TRelation_application
 | 
						|
{
 | 
						|
  TMask      *_msk;
 | 
						|
  TRelation  *_rel;
 | 
						|
  order      _ordinamento;
 | 
						|
  
 | 
						|
protected:
 | 
						|
  virtual bool user_create();
 | 
						|
  virtual bool user_destroy();
 | 
						|
  virtual TMask* get_mask(int mode)       {return _msk;}
 | 
						|
  virtual bool changing_mask(int mode)    {return FALSE;}
 | 
						|
  virtual TRelation* get_relation() const {return _rel;}
 | 
						|
  virtual void init_query_mode(TMask& m); 
 | 
						|
  virtual void init_query_insert_mode(TMask& m);
 | 
						|
  virtual void init_modify_mode(TMask& m);
 | 
						|
  static bool codpr_handler(TMask_field& f, KEY k);
 | 
						|
  static bool complete_key_handler(TMask_field& f, KEY k);
 | 
						|
  static bool output_key_handler(TMask_field& f, KEY k);
 | 
						|
  static bool tipo_handler(TMask_field& f, KEY k);
 | 
						|
  static void set_order_fields(TString16& ord, TMask& m);
 | 
						|
public:
 | 
						|
  TGestione_percprovv_app()   {};
 | 
						|
  ~TGestione_percprovv_app()  {};
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
static inline TGestione_percprovv_app& app() { return (TGestione_percprovv_app&) main_app(); }
 | 
						|
 | 
						|
bool TGestione_percprovv_app::output_key_handler(TMask_field& f, KEY k)
 | 
						|
{
 | 
						|
  if (k == K_TAB) // Viene passato solo quando entra in modifica, visto che e' disabled
 | 
						|
  {
 | 
						|
    order&  kd = app()._ordinamento;
 | 
						|
    TMask&  m = f.mask();
 | 
						|
    TString codpr = m.get(F_CODPR_QUERY);
 | 
						|
    TString key   = f.get();
 | 
						|
    TString16 ord;
 | 
						|
    int from = 0;
 | 
						|
    TTable apr("APR");
 | 
						|
 | 
						|
    apr.put("CODTAB",codpr);
 | 
						|
    if (apr.read() == NOERR)
 | 
						|
      ord = apr.get("S3");
 | 
						|
    set_order_fields(ord,m);
 | 
						|
    for (int i = 0; i < 4; i++)
 | 
						|
    {
 | 
						|
      if (kd[i] == 0)
 | 
						|
        break;
 | 
						|
      TMask_field& fld = m.field(kd[i]);
 | 
						|
      const word size  = fld.size();
 | 
						|
      fld.set(key.mid(from,size));
 | 
						|
      from += size;
 | 
						|
    }
 | 
						|
    ((TEditable_field&)f).test_key_complete(FALSE);
 | 
						|
  }
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TGestione_percprovv_app::tipo_handler(TMask_field& f, KEY k)
 | 
						|
{
 | 
						|
  if (f.to_check(k))
 | 
						|
  {
 | 
						|
    const char v = f.get()[0];
 | 
						|
    if (v == 'I' || v == 'V')
 | 
						|
    {
 | 
						|
      order& kd = app()._ordinamento;
 | 
						|
      bool found = FALSE;
 | 
						|
      for (int i = 0; i < 4 && !found; i++)
 | 
						|
        if (kd[i] == F_CODART)
 | 
						|
          found = TRUE;
 | 
						|
      if (!found)
 | 
						|
        return f.error_box(TR("Impossibile settare il tipo di provvigione ad importo unitario o valore se non e' presente la ricerca per codice articolo."));
 | 
						|
    }
 | 
						|
  }
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TGestione_percprovv_app::complete_key_handler(TMask_field& f, KEY k)
 | 
						|
{
 | 
						|
  if (f.to_check(k))
 | 
						|
  {
 | 
						|
    TMask& m = f.mask();
 | 
						|
    TString v,k,fmt;
 | 
						|
    order& kd = app()._ordinamento;
 | 
						|
    for (int i = 0; i < 4; i++)
 | 
						|
    { 
 | 
						|
      if (kd[i] == 0)
 | 
						|
        break;
 | 
						|
      TMask_field& f = m.field(kd[i]);
 | 
						|
      if (kd[i] != F_CLIENTE)
 | 
						|
        fmt.format("%%-%us",f.size());
 | 
						|
      else
 | 
						|
        fmt.format("%%%us",f.size());
 | 
						|
      v.format(fmt,(const char*)f.get());
 | 
						|
      k << v;
 | 
						|
    }
 | 
						|
    m.set(F_KEYORD,k);
 | 
						|
  }
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
void TGestione_percprovv_app::set_order_fields(TString16& ord, TMask& m)
 | 
						|
{
 | 
						|
  order& kd = app()._ordinamento;
 | 
						|
 | 
						|
  m.hide(-G_CAMPICHIAVE);
 | 
						|
  for (int i = 0; i < 4; i++)
 | 
						|
    switch (ord[i])
 | 
						|
    {
 | 
						|
      case 'C':
 | 
						|
        m.show(-G_CLI);
 | 
						|
        m.field(F_CLIENTE).check_type(CHECK_REQUIRED);
 | 
						|
        kd[i] = F_CLIENTE;
 | 
						|
        break;
 | 
						|
      case 'V':
 | 
						|
        m.show(-G_CATV);
 | 
						|
        m.field(F_CATVEN).check_type(CHECK_REQUIRED);
 | 
						|
        kd[i] = F_CATVEN;
 | 
						|
        break;
 | 
						|
      case 'A':
 | 
						|
        m.show(-G_AGE);
 | 
						|
        m.field(F_CODAGE).check_type(CHECK_REQUIRED);
 | 
						|
        kd[i] = F_CODAGE;
 | 
						|
        break;
 | 
						|
      case 'P':
 | 
						|
        m.show(-G_PAG);
 | 
						|
        m.field(F_CODPAG).check_type(CHECK_REQUIRED);
 | 
						|
        kd[i] = F_CODPAG;
 | 
						|
        break;
 | 
						|
      case 'S':
 | 
						|
        m.show(-G_SCONTO);
 | 
						|
        m.field(F_CODSCONTO).check_type(CHECK_REQUIRED);
 | 
						|
        kd[i] = F_CODSCONTO;
 | 
						|
        break;
 | 
						|
      case 'Z':
 | 
						|
        m.show(-G_ZONA);
 | 
						|
        m.field(F_CODZONA).check_type(CHECK_REQUIRED);
 | 
						|
        kd[i] = F_CODZONA;
 | 
						|
        break;
 | 
						|
      case 'M':
 | 
						|
        m.show(-G_ART);
 | 
						|
        m.field(F_CODART).check_type(CHECK_REQUIRED);
 | 
						|
        kd[i] = F_CODART;
 | 
						|
        break;
 | 
						|
      case 'E':
 | 
						|
        m.show(-G_GMC);
 | 
						|
        m.field(F_CODGMC).check_type(CHECK_REQUIRED);
 | 
						|
        kd[i] = F_CODGMC;
 | 
						|
        break;
 | 
						|
      case 'R':
 | 
						|
        m.show(-G_SMC);
 | 
						|
        m.field(F_CODSMC).check_type(CHECK_REQUIRED);
 | 
						|
        kd[i] = F_CODSMC;
 | 
						|
        break;
 | 
						|
      case 'F':
 | 
						|
        m.show(-G_RFA);
 | 
						|
        m.field(F_CODRFA).check_type(CHECK_REQUIRED);
 | 
						|
        kd[i] = F_CODRFA;
 | 
						|
        break;
 | 
						|
      default:
 | 
						|
        kd[i] = 0;
 | 
						|
        break;
 | 
						|
    }      
 | 
						|
}
 | 
						|
 | 
						|
bool TGestione_percprovv_app::codpr_handler(TMask_field& f, KEY k)
 | 
						|
{
 | 
						|
  if (f.to_check(k))
 | 
						|
  {
 | 
						|
    TTable apr("APR");
 | 
						|
    TString s(f.get());
 | 
						|
    apr.put("CODTAB",s);
 | 
						|
    if (apr.read() == NOERR)
 | 
						|
    { 
 | 
						|
      TString16 ord;
 | 
						|
      TMask& m = f.mask();
 | 
						|
 | 
						|
      ord = apr.get("S3");
 | 
						|
      m.set(F_DESCR,apr.get("S0"));
 | 
						|
      m.show(F_TIPO);
 | 
						|
      m.show(F_PERCPROVV);
 | 
						|
      set_order_fields(ord,m);
 | 
						|
    }
 | 
						|
    else
 | 
						|
      return f.error_box(TR("Codice archivio non presente"));
 | 
						|
  }
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
void TGestione_percprovv_app::init_query_mode(TMask& m)
 | 
						|
{
 | 
						|
  m.hide(F_CODPR_NEW);
 | 
						|
  m.show(F_CODPR_QUERY);
 | 
						|
  set_search_field(F_CODPR_QUERY);
 | 
						|
  m.hide(-G_CAMPICHIAVE);
 | 
						|
  for (short i = F_CLIENTE; i<=F_CODRFA; i+=2)
 | 
						|
    m.field(i).check_type(CHECK_NONE); // Il flag di forced rimane  a TRUE
 | 
						|
}
 | 
						|
 | 
						|
void TGestione_percprovv_app::init_query_insert_mode(TMask& m)
 | 
						|
{
 | 
						|
  m.hide(F_CODPR_QUERY);
 | 
						|
  m.show(F_CODPR_NEW);
 | 
						|
  set_search_field(F_CODPR_NEW);
 | 
						|
  m.hide(-G_CAMPICHIAVE);
 | 
						|
  for (short i = F_CLIENTE; i<=F_CODRFA; i+=2)
 | 
						|
    m.field(i).check_type(CHECK_NONE); // Il flag di forced rimane  a TRUE
 | 
						|
}
 | 
						|
 | 
						|
void TGestione_percprovv_app::init_modify_mode(TMask& m)
 | 
						|
{
 | 
						|
  order&  kd = _ordinamento;
 | 
						|
  TString codpr = m.get(F_CODPR_QUERY);
 | 
						|
  TString key   = m.get(F_KEYORD);
 | 
						|
  TString16 ord;
 | 
						|
  int from = 0;
 | 
						|
  TTable apr("APR");
 | 
						|
 | 
						|
  apr.put("CODTAB",codpr);
 | 
						|
  if (apr.read() == NOERR)
 | 
						|
    ord = apr.get("S3");
 | 
						|
  set_order_fields(ord,m);
 | 
						|
  for (int i = 0; i < 4; i++)
 | 
						|
  {
 | 
						|
    if (kd[i] == 0)
 | 
						|
      break;
 | 
						|
    TMask_field& fld = m.field(kd[i]);
 | 
						|
    const word size  = fld.size();
 | 
						|
    fld.set(key.mid(from,size));
 | 
						|
    from += size;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
bool TGestione_percprovv_app::user_create()
 | 
						|
{
 | 
						|
  _msk = new TMask("pr0600a") ;
 | 
						|
  _msk->set_handler(F_CODPR_QUERY,codpr_handler);
 | 
						|
  _msk->set_handler(F_CODPR_NEW,codpr_handler);
 | 
						|
  _msk->set_handler(F_CLIENTE,complete_key_handler);
 | 
						|
  _msk->set_handler(F_CATVEN,complete_key_handler);
 | 
						|
  _msk->set_handler(F_CODAGE,complete_key_handler);
 | 
						|
  _msk->set_handler(F_CODPAG,complete_key_handler);
 | 
						|
  _msk->set_handler(F_CODSCONTO,complete_key_handler);
 | 
						|
  _msk->set_handler(F_CODZONA,complete_key_handler);
 | 
						|
  _msk->set_handler(F_CODART,complete_key_handler);
 | 
						|
  _msk->set_handler(F_CODGMC,complete_key_handler);
 | 
						|
  _msk->set_handler(F_CODSMC,complete_key_handler);
 | 
						|
  _msk->set_handler(F_CODRFA,complete_key_handler);
 | 
						|
  _msk->set_handler(F_KEYORD,output_key_handler);
 | 
						|
  _msk->set_handler(F_TIPO,tipo_handler);
 | 
						|
  _rel = new TRelation(LF_PERCPROV);
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TGestione_percprovv_app::user_destroy()
 | 
						|
{
 | 
						|
  delete _msk;
 | 
						|
  delete _rel;
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
int pr0600(int argc, char** argv)
 | 
						|
{
 | 
						|
  TGestione_percprovv_app  a;
 | 
						|
  a.run(argc,argv,TR("Gestione percentuali provvigione"));
 | 
						|
  return 0;
 | 
						|
}
 |