213 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			213 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#include <relapp.h>
 | 
						|
#include <msksheet.h>
 | 
						|
#include <sheet.h>
 | 
						|
#include <utility.h>
 | 
						|
#include <lffiles.h>
 | 
						|
#include <clifo.h>
 | 
						|
#include "effetti.h"
 | 
						|
#include "cession.h"
 | 
						|
#include "ef0.h"
 | 
						|
#include "ef0100.h"
 | 
						|
#include "ef0101.h"
 | 
						|
 | 
						|
class Variazione_Effetti: public TRelation_application
 | 
						|
{
 | 
						|
  TMask* _msk;
 | 
						|
  TEffObb  *_rel; 
 | 
						|
 | 
						|
  virtual const char* get_next_key();
 | 
						|
  TSheet_field& obb_sheet() const;
 | 
						|
  void obb_pack();
 | 
						|
  void common_f(const TMask& m);
 | 
						|
  virtual int read(TMask& m);
 | 
						|
  virtual int rewrite(const TMask& m);
 | 
						|
  virtual int write(const TMask& m);
 | 
						|
  bool user_create();
 | 
						|
  bool user_destroy();
 | 
						|
  virtual TMask* get_mask(int mode)     {return _msk;}
 | 
						|
  virtual bool changing_mask(int mode)  {return FALSE;}
 | 
						|
public:
 | 
						|
  static bool codcf_handler(TMask_field& f, KEY k);
 | 
						|
  static bool effcomp_handler(TMask_field& f, KEY k);
 | 
						|
  virtual TRelation* get_relation() const {return _rel;}
 | 
						|
  Variazione_Effetti() {}
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
const char* Variazione_Effetti::get_next_key()
 | 
						|
{
 | 
						|
  TLocalisamfile& effetti=_rel->lfile();
 | 
						|
  long nprogtr=1L;
 | 
						|
  
 | 
						|
  if (!effetti.empty())
 | 
						|
  {
 | 
						|
    effetti.zero();
 | 
						|
    effetti.setkey(1);
 | 
						|
    effetti.last();
 | 
						|
    if (effetti.good())
 | 
						|
      nprogtr+=effetti.get_long(EFF_NPROGTR);
 | 
						|
  }
 | 
						|
  return format("%d|%ld",F_NPROGTR,nprogtr);
 | 
						|
}
 | 
						|
 | 
						|
TSheet_field& Variazione_Effetti::obb_sheet() const
 | 
						|
{
 | 
						|
  TSheet_field& o_sheet=(TSheet_field&) _msk->field(F_SHEET_EFF);
 | 
						|
  return o_sheet;
 | 
						|
}
 | 
						|
 | 
						|
void Variazione_Effetti::obb_pack()
 | 
						|
{
 | 
						|
  TArray& rows=obb_sheet().rows_array();
 | 
						|
  int nr=rows.items();
 | 
						|
 | 
						|
  for (int i=0;i<nr;i++)
 | 
						|
  {
 | 
						|
    TToken_string& riga=(TToken_string&)rows[i];
 | 
						|
    if (riga.empty_items())
 | 
						|
      rows.destroy(i,FALSE);
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
void Variazione_Effetti::common_f(const TMask& m)
 | 
						|
{
 | 
						|
  long nprogtr=m.get_long(F_NPROGTR);
 | 
						|
 | 
						|
  _rel->lfile().zero();
 | 
						|
  m.autosave(*_rel);
 | 
						|
  //  LF_CESS SAVER!
 | 
						|
  _rel->destroy_rows();
 | 
						|
  obb_pack();
 | 
						|
  TArray& rows=obb_sheet().rows_array();
 | 
						|
  for (int i=0; i<rows.items();i++)
 | 
						|
  {
 | 
						|
    TToken_string& row=(TToken_string&)rows[i];
 | 
						|
    TRectype& rec=_rel->obbligato(i);
 | 
						|
    row.restart();
 | 
						|
    rec.zero();
 | 
						|
    rec.put(CES_NPROGTR,nprogtr);
 | 
						|
    rec.put(CES_NRIGA,i+1);
 | 
						|
    rec.put(CES_RAGSOC,row.get());
 | 
						|
    rec.put(CES_LOCALITA,row.get());
 | 
						|
    rec.put(CES_STATO,row.get_int());
 | 
						|
    rec.put(CES_COM,row.get());
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
int Variazione_Effetti::read(TMask& m)
 | 
						|
{
 | 
						|
  m.autoload(*_rel);
 | 
						|
  // LF_CESS loader!
 | 
						|
  TToken_string riga(80);
 | 
						|
  obb_sheet().reset();
 | 
						|
  for (int i=0; i<_rel->obbligati_items();i++)
 | 
						|
  {
 | 
						|
    TRectype& rec=_rel->obbligato(i);
 | 
						|
    riga.cut(0);
 | 
						|
    riga.add(rec.get(CES_RAGSOC));
 | 
						|
    riga.add(rec.get(CES_LOCALITA));
 | 
						|
    riga.add(rec.get(CES_STATO));
 | 
						|
    riga.add(rec.get(CES_COM));
 | 
						|
    obb_sheet().row(i)=riga;
 | 
						|
  }
 | 
						|
  return _rel->status();
 | 
						|
}
 | 
						|
 | 
						|
int Variazione_Effetti::rewrite(const TMask& m)
 | 
						|
{
 | 
						|
  common_f(m);
 | 
						|
  return _rel->rewrite(TRUE);
 | 
						|
}
 | 
						|
 | 
						|
int Variazione_Effetti::write(const TMask& m)
 | 
						|
{
 | 
						|
  common_f(m);
 | 
						|
  return _rel->write(TRUE);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
bool Variazione_Effetti::user_create()
 | 
						|
{
 | 
						|
  _msk = new TMask("ef0100a") ;
 | 
						|
  _rel = new TEffObb;  
 | 
						|
 | 
						|
  _msk->set_handler(F_CODCF,codcf_handler);
 | 
						|
  _msk->set_handler(F_EFFCOMP,effcomp_handler);
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool Variazione_Effetti::user_destroy()
 | 
						|
{
 | 
						|
  delete _msk;
 | 
						|
  delete _rel;
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool Variazione_Effetti::codcf_handler(TMask_field& f, KEY k)
 | 
						|
{
 | 
						|
  long codcf = atol(f.get()), n = 0;
 | 
						|
  TString ragsoc(50);
 | 
						|
  TToken_string line;   
 | 
						|
  TLocalisamfile clifo(LF_CLIFO);
 | 
						|
  TArray_sheet cli(-1,-1,59,20,"Clienti","Codice|Ragione sociale@50|Sospeso|Codice fiscale@18");
 | 
						|
  
 | 
						|
  switch (k)
 | 
						|
  {
 | 
						|
  case K_TAB:                                   
 | 
						|
    if (f.focusdirty()) // When changing focus put customer's name
 | 
						|
    {
 | 
						|
      clifo.zero();
 | 
						|
      clifo.setkey(1);
 | 
						|
      clifo.put(CLI_TIPOCF,"C");
 | 
						|
      clifo.put(CLI_CODCF,codcf);
 | 
						|
      clifo.read();
 | 
						|
      if (clifo.good())
 | 
						|
      {
 | 
						|
        ragsoc=clifo.get(CLI_RAGSOC);
 | 
						|
        f.mask().set(F_CFRAGSOC,(const char*)ragsoc);
 | 
						|
      } else
 | 
						|
        return FALSE;
 | 
						|
    }
 | 
						|
    break;
 | 
						|
  case K_F8:          // If F8 was pressed perform customer's search
 | 
						|
    clifo.setkey(1);
 | 
						|
    clifo.first();
 | 
						|
    while (clifo.good() && clifo.get(CLI_TIPOCF)=="C")
 | 
						|
    {
 | 
						|
      line.cut(0);
 | 
						|
      if (codcf == clifo.get_long(CLI_CODCF)) n=cli.items();
 | 
						|
      line.add(clifo.get(CLI_CODCF));
 | 
						|
      line.add(clifo.get(CLI_RAGSOC));
 | 
						|
      line.add(clifo.get(CLI_SOSPESO));
 | 
						|
      line.add(clifo.get(CLI_COFI));
 | 
						|
      cli.add(line);
 | 
						|
      clifo.next();
 | 
						|
    }
 | 
						|
    cli.select(n);
 | 
						|
    if (cli.run()==K_ENTER)
 | 
						|
    {
 | 
						|
      line=cli.row(-1);
 | 
						|
      f.set(line.get(0));
 | 
						|
      f.mask().set(F_CFRAGSOC,line.get(1));
 | 
						|
    }
 | 
						|
    break;
 | 
						|
  default:
 | 
						|
    break;
 | 
						|
  }
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool Variazione_Effetti::effcomp_handler(TMask_field& f, KEY k)
 | 
						|
{
 | 
						|
  if (!f.mask().get(F_NRATA).empty())   
 | 
						|
    f.set("X");
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
int ef0100(int argc, char* argv[])
 | 
						|
{
 | 
						|
  Variazione_Effetti a ;
 | 
						|
  a.run(argc, argv, "Gestione effetti");
 | 
						|
  return 0;
 | 
						|
}
 |