1305 lines
		
	
	
		
			33 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			1305 lines
		
	
	
		
			33 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#include <automask.h>
 | 
						||
#include <defmask.h>
 | 
						||
#include <modaut.h>
 | 
						||
#include <printer.h>
 | 
						||
#include <recset.h>
 | 
						||
#include <tabapp.h>
 | 
						||
#include <utility.h>
 | 
						||
 | 
						||
#include "velib.h"
 | 
						||
#include "../ca/calib01.h"
 | 
						||
#include "veuml.h"
 | 
						||
#include "veini.h"
 | 
						||
#include "verig.h"
 | 
						||
 | 
						||
#include "vetbatr.h"
 | 
						||
#include "vetbgmc.h"
 | 
						||
#include "vetbnum.h"
 | 
						||
#include "vetbprs.h"
 | 
						||
#include "vetbrss.h"
 | 
						||
#include "vetbspp.h"
 | 
						||
#include "vehntip.h"
 | 
						||
#include "vehntri.h"
 | 
						||
#include "vetbtip.h"
 | 
						||
#include "vetbtri.h"
 | 
						||
 | 
						||
#define TAB_GRMERC      "GMC"
 | 
						||
 | 
						||
HIDDEN void add_frr_list(TEdit_field & e)
 | 
						||
{
 | 
						||
	TList_sheet * sh = e.sheet();
 | 
						||
	
 | 
						||
	if (sh != NULL)
 | 
						||
	{
 | 
						||
		TString_array & items = sh->rows_array();
 | 
						||
		TISAM_recordset r("USE %FRR");
 | 
						||
 | 
						||
	  for (bool ok = r.move_first(); ok; ok = r.move_next())
 | 
						||
		{
 | 
						||
			TToken_string data(r.get("CODTAB").as_string());
 | 
						||
 | 
						||
			data.add(r.get("S0").as_string());
 | 
						||
			items.add(data);
 | 
						||
		}
 | 
						||
	}
 | 
						||
}
 | 
						||
 | 
						||
HIDDEN void add_frd_list(TEdit_field & e)
 | 
						||
{
 | 
						||
	TList_sheet * sh = e.sheet();
 | 
						||
	
 | 
						||
	if (sh != NULL)
 | 
						||
	{
 | 
						||
		TString_array & items = sh->rows_array();
 | 
						||
		TISAM_recordset r("USE %FRD");
 | 
						||
 | 
						||
	  for (bool ok = r.move_first(); ok; ok = r.move_next())
 | 
						||
		{
 | 
						||
			TToken_string data(r.get("CODTAB").as_string());
 | 
						||
 | 
						||
			data.add(r.get("S0").as_string());
 | 
						||
			items.add(data);
 | 
						||
		}
 | 
						||
  }
 | 
						||
}
 | 
						||
 | 
						||
HIDDEN void add_fld_list(TEdit_field & e, int logicnum)
 | 
						||
{
 | 
						||
	TList_sheet* sh = e.sheet();
 | 
						||
	if (sh != NULL)
 | 
						||
	{
 | 
						||
		TString_array& items = sh->rows_array();
 | 
						||
    TRelation rel(logicnum);
 | 
						||
    TRelation_description reldes(rel);
 | 
						||
 | 
						||
    const RecDes& rd = prefix().get_recdes(logicnum);
 | 
						||
    for (int i = 0; i < rd.NFields; i++)
 | 
						||
    {
 | 
						||
      const RecFieldDes& fd = rd.Fd[i];
 | 
						||
			TToken_string data;
 | 
						||
 | 
						||
			data << logicnum << '.' << fd.Name;
 | 
						||
			data.add(reldes.get_field_description(fd.Name));
 | 
						||
			items.add(data);
 | 
						||
    }
 | 
						||
  }
 | 
						||
}
 | 
						||
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
// TVendite_mask
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
 | 
						||
class TVendite_mask : public TAutomask
 | 
						||
{
 | 
						||
  TString4 _tab;  // Voglio la tabella sempre sotto mano
 | 
						||
 | 
						||
protected:
 | 
						||
  virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | 
						||
 | 
						||
  bool is_table(const char* tab) const { return _tab == tab; }
 | 
						||
  
 | 
						||
  void get_printer_config(TString& name) const;
 | 
						||
  bool get_printer_name(TString& name) const;
 | 
						||
  void reset_printer_config() const;
 | 
						||
 | 
						||
  bool on_tri_event(TOperable_field& o, TField_event e, long jolly);
 | 
						||
  bool on_tip_event(TOperable_field& o, TField_event e, long jolly);
 | 
						||
  bool on_num_event(TOperable_field& o, TField_event e, long jolly);
 | 
						||
 | 
						||
public:
 | 
						||
  const TString& table_code() const { return _tab; }
 | 
						||
 | 
						||
  TVendite_mask(const char* name);
 | 
						||
  virtual ~TVendite_mask() { }
 | 
						||
};
 | 
						||
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
// TTIP_handlers_mask
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
 | 
						||
class TTIP_handlers_mask : public TAutomask
 | 
						||
{
 | 
						||
	TDocumento_mask * _docmask;
 | 
						||
 | 
						||
protected:
 | 
						||
	void add_mask_items(TList_field& l);
 | 
						||
	void build_items(TEdit_field& e, const char * flist);
 | 
						||
  virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | 
						||
 | 
						||
public:
 | 
						||
	void mask2prof(TTipo_documento & tipo);
 | 
						||
	void prof2mask(TTipo_documento & tipo);
 | 
						||
 | 
						||
	TTIP_handlers_mask(const char * tipodoc);
 | 
						||
  virtual ~TTIP_handlers_mask() { delete _docmask; }
 | 
						||
};
 | 
						||
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
// TTRI_handlers_mask
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
 | 
						||
class TTRI_handlers_mask : public TAutomask
 | 
						||
{
 | 
						||
	TMask* _rigamask;
 | 
						||
 | 
						||
protected:
 | 
						||
	void add_mask_items(TList_field& l);
 | 
						||
	void build_items(TEdit_field& e, const char * flist);
 | 
						||
  virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | 
						||
 | 
						||
public:
 | 
						||
	void mask2prof(TTipo_riga_documento & tipo);
 | 
						||
	void prof2mask(TTipo_riga_documento & tipo);
 | 
						||
 | 
						||
	TTRI_handlers_mask(const TTipo_riga_documento & tiporiga);
 | 
						||
  virtual ~TTRI_handlers_mask() { delete _rigamask; }
 | 
						||
};
 | 
						||
 | 
						||
void TVendite_mask::get_printer_config(TString& config) const
 | 
						||
{
 | 
						||
  config = _tab;  
 | 
						||
  for (TEditable_field* f = get_key_field(1, true); f; f = get_key_field(1, false)) 
 | 
						||
  {
 | 
						||
    if (f->shown())
 | 
						||
      config << f->get();
 | 
						||
  }
 | 
						||
}
 | 
						||
 | 
						||
bool TVendite_mask::get_printer_name(TString& name) const
 | 
						||
{
 | 
						||
  TString parag; get_printer_config(parag);  
 | 
						||
  TConfig ini(CONFIG_STAMPE, parag);              
 | 
						||
  name = ini.get("Name");
 | 
						||
  return name.full();
 | 
						||
}
 | 
						||
 | 
						||
void TVendite_mask::reset_printer_config() const
 | 
						||
{
 | 
						||
  TString parag; get_printer_config(parag);  
 | 
						||
  TConfig ini(CONFIG_STAMPE, parag);              
 | 
						||
  ini.remove_all();
 | 
						||
}
 | 
						||
 | 
						||
static TString4 __tab_codnum;
 | 
						||
 | 
						||
static bool tab_tip_filter(const TRelation* r)
 | 
						||
{
 | 
						||
	if (__tab_codnum.blank())
 | 
						||
		return true;
 | 
						||
	
 | 
						||
	const TString4 tipo = r->curr().get("CODTAB");
 | 
						||
  const TCodice_numerazione& cod_num = cached_numerazione(__tab_codnum);
 | 
						||
	for (int i = 0; i < cod_num.ntipi_doc(); i++ )
 | 
						||
	{
 | 
						||
		const TString& curtipo = cod_num.tipo_doc(i);
 | 
						||
		if (curtipo == tipo) 
 | 
						||
      return true;
 | 
						||
	}
 | 
						||
 | 
						||
  return false;
 | 
						||
}
 | 
						||
 | 
						||
bool TVendite_mask::on_tip_event(TOperable_field& o, TField_event e, long jolly)
 | 
						||
{
 | 
						||
	switch (o.dlg())
 | 
						||
	{
 | 
						||
  case F_PROFILO:
 | 
						||
    if (e == fe_init || e == fe_modify)
 | 
						||
      enable(DLG_CONFIG, !o.empty());
 | 
						||
    break;
 | 
						||
	case DLG_CONFIG:
 | 
						||
		if (e == fe_button && get(F_PROFILO).full())
 | 
						||
		{
 | 
						||
			TTipo_documento t(get(F_CODTAB));
 | 
						||
			TTIP_handlers_mask m(get(F_CODTAB));
 | 
						||
 | 
						||
			m.set(F_NAMETIP, get(F_PROFILO));
 | 
						||
			m.prof2mask(t);
 | 
						||
			if (m.run() == K_ENTER)
 | 
						||
				m.mask2prof(t);
 | 
						||
		}
 | 
						||
    break;
 | 
						||
  default: break;
 | 
						||
	}
 | 
						||
	return true;
 | 
						||
}
 | 
						||
 | 
						||
bool TVendite_mask::on_tri_event(TOperable_field& o, TField_event e, long jolly)
 | 
						||
{
 | 
						||
	switch (o.dlg())
 | 
						||
	{
 | 
						||
  case F_CODTAB:
 | 
						||
    if (e == fe_init || e == fe_modify)
 | 
						||
      enable(DLG_CONFIG, !o.empty());
 | 
						||
    break;
 | 
						||
	case DLG_CONFIG:
 | 
						||
		if (e == fe_button)
 | 
						||
		{
 | 
						||
			TTipo_riga_documento t(get(F_CODTAB));
 | 
						||
			TTRI_handlers_mask m(t);
 | 
						||
			TString name("verig");
 | 
						||
 | 
						||
			name << t.codice();
 | 
						||
			m.set(F_NAMETRI, name);
 | 
						||
			m.prof2mask(t);
 | 
						||
			if (m.run() == K_ENTER)
 | 
						||
				m.mask2prof(t);
 | 
						||
		}
 | 
						||
    break;
 | 
						||
  default: break;
 | 
						||
	}
 | 
						||
	return true;
 | 
						||
}
 | 
						||
 | 
						||
bool TVendite_mask::on_num_event(TOperable_field& o, TField_event e, long jolly)
 | 
						||
{
 | 
						||
	switch (o.dlg())
 | 
						||
	{
 | 
						||
		case FN_CODNUM:
 | 
						||
			if (e == fe_init || e == fe_modify)
 | 
						||
      {
 | 
						||
				__tab_codnum = o.get();
 | 
						||
        efield(FN_TIPODOC).browse()->cursor()->set_filterfunction(tab_tip_filter);
 | 
						||
      }
 | 
						||
			break;
 | 
						||
		default:
 | 
						||
			break;
 | 
						||
	}
 | 
						||
	return true;	//metodo che gestiva la stampante per le numerazioni documenti
 | 
						||
}
 | 
						||
 | 
						||
bool TVendite_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
 | 
						||
{
 | 
						||
  if (is_table("NUM"))
 | 
						||
    return on_num_event(o, e, jolly);
 | 
						||
  if (is_table("TIP"))
 | 
						||
    return on_tip_event(o, e, jolly);
 | 
						||
  if (is_table("TRI"))
 | 
						||
    return on_tri_event(o, e, jolly);
 | 
						||
  return true;
 | 
						||
}
 | 
						||
 | 
						||
TVendite_mask::TVendite_mask(const char* name) : TAutomask(name) 
 | 
						||
{ 
 | 
						||
  const TFixed_string n(name);
 | 
						||
  _tab = n.mid(4,3);
 | 
						||
  _tab.upper();
 | 
						||
}
 | 
						||
 | 
						||
void TTIP_handlers_mask::mask2prof(TTipo_documento & tipo)
 | 
						||
{
 | 
						||
	TFilename profname;
 | 
						||
	
 | 
						||
	tipo.profile_name(profname);
 | 
						||
	profname.custom_path();
 | 
						||
	if (profname.find("custom") < 0)
 | 
						||
	{
 | 
						||
		TFilename srcname(profname);
 | 
						||
 | 
						||
		profname = prefix().get_studio();
 | 
						||
		profname << SLASH << "custom" << SLASH << srcname;
 | 
						||
		fcopy(srcname, profname);
 | 
						||
	}
 | 
						||
 | 
						||
	TConfig profile(profname, "MAIN");
 | 
						||
 | 
						||
  profile.set("MODULE", get(F_MODULE)); 
 | 
						||
	profile.set("TIPOCR", get(F_TIPOCR));
 | 
						||
  profile.set("CONTROLLO_PREZZI", get(F_CNTPRZ));
 | 
						||
	profile.set(RDOC_PREZZO, get(F_PREZZO));
 | 
						||
	profile.set(RDOC_QTA, get(F_QTA));
 | 
						||
	profile.set(RDOC_QTAEVASA, get(F_QTAEVASA));
 | 
						||
	profile.set("QTA_MAG", get(F_QTAMAG));
 | 
						||
	profile.set("QTAEVASA_MAG", get(F_QTAEVASAMAG));
 | 
						||
	profile.set("TOTALECONT", get(F_TOTALECONT));
 | 
						||
  profile.set("CHECK_QTA", get(F_CHECK_QTA));
 | 
						||
  profile.set("LOAD_CONT", get(F_LOAD_CONT));
 | 
						||
  profile.set("DESCRIZIONE_DOC", get(F_DESCDOC));
 | 
						||
  profile.set("DESCRIZIONE_RDOC", get(F_DESCRDOC));
 | 
						||
  profile.set("NASCONDI_RIGHE_EVASE", get(F_HIDEEVASE));
 | 
						||
  profile.set("NON_EVADERE", get(F_NOTEVADI)); 
 | 
						||
 | 
						||
	profile.remove_array("Title");
 | 
						||
	TSheet_field & sl = sfield(F_LABELS);
 | 
						||
 | 
						||
	FOR_EACH_SHEET_ROW(sl, rl, rowl)
 | 
						||
		profile.set("Title", rowl->get(0), NULL, true, rl + 1);
 | 
						||
	profile.set_paragraph("HANDLERS");
 | 
						||
	profile.remove_array("Handler");
 | 
						||
	for (int i = 0 ; i < 10; i++)
 | 
						||
		profile.remove(format("%d", i));
 | 
						||
 | 
						||
	TSheet_field & sh = sfield(F_HANDLERS);
 | 
						||
 | 
						||
	FOR_EACH_SHEET_ROW(sh, r, row)
 | 
						||
	{
 | 
						||
		const short id = row->get_int(1);
 | 
						||
 | 
						||
		profile.set("Handler", row->get_int(0), NULL, true, id);
 | 
						||
	}
 | 
						||
 | 
						||
	profile.set_paragraph("DEFAULT");
 | 
						||
	profile.remove_array("Default");
 | 
						||
 | 
						||
	TSheet_field & sd = sfield(F_DEFAULTS);
 | 
						||
 | 
						||
	FOR_EACH_SHEET_ROW(sd, dr, drow)
 | 
						||
	{
 | 
						||
		const short id = drow->get_int(0);
 | 
						||
 | 
						||
		profile.set("Default", drow->get(), NULL, true, id);
 | 
						||
	}
 | 
						||
}
 | 
						||
 | 
						||
void TTIP_handlers_mask::prof2mask(TTipo_documento & tipo)
 | 
						||
{
 | 
						||
	TFilename profname;
 | 
						||
 | 
						||
	tipo.profile_name(profname);
 | 
						||
  
 | 
						||
	TConfig profile(profname, "MAIN");
 | 
						||
  
 | 
						||
  profile.write_protect();
 | 
						||
	set(F_MODULE, profile.get("MODULE")); 
 | 
						||
	set(F_TIPOCR, profile.get("TIPOCR"));
 | 
						||
	set(F_CNTPRZ, profile.get("CONTROLLO_PREZZI"));
 | 
						||
	set(F_PREZZO, profile.get(RDOC_PREZZO));
 | 
						||
	set(F_QTA, profile.get(RDOC_QTA));
 | 
						||
	set(F_QTAEVASA, profile.get(RDOC_QTAEVASA));
 | 
						||
	set(F_QTAMAG, profile.get("QTA_MAG"));
 | 
						||
	set(F_QTAEVASAMAG, profile.get("QTAEVASA_MAG"));
 | 
						||
	set(F_TOTALECONT, profile.get("TOTALECONT"));
 | 
						||
  set(F_CHECK_QTA, profile.get("CHECK_QTA"));
 | 
						||
  set(F_LOAD_CONT, profile.get("LOAD_CONT"));
 | 
						||
  set(F_DESCDOC, profile.get("DESCRIZIONE_DOC"));
 | 
						||
  set(F_DESCRDOC, profile.get("DESCRIZIONE_RDOC"));
 | 
						||
  set(F_HIDEEVASE, profile.get("NASCONDI_RIGHE_EVASE"));
 | 
						||
  set(F_NOTEVADI, profile.get("NON_EVADERE")); 
 | 
						||
 | 
						||
	TSheet_field & sl = sfield(F_LABELS);
 | 
						||
	int npages = 1;
 | 
						||
	for (; _docmask->page_win(npages) != NULL_WIN; npages++);
 | 
						||
 | 
						||
	if (_docmask->id2pos(F_CDC1) >= 0)
 | 
						||
		npages--;
 | 
						||
	sl.destroy();
 | 
						||
	for (int i = 1 ; i <= npages; i++)
 | 
						||
	{
 | 
						||
		TToken_string & row = sl.row(i - 1);
 | 
						||
 | 
						||
		row = profile.get("Title", NULL, i, "");
 | 
						||
	}
 | 
						||
	profile.set_paragraph("HANDLERS");
 | 
						||
	TAssoc_array& handlers = profile.list_variables();
 | 
						||
	TSheet_field & sh = sfield(F_HANDLERS);
 | 
						||
 | 
						||
	sh.destroy();
 | 
						||
	FOR_EACH_ASSOC_STRING(handlers, obj, key, str)
 | 
						||
  {
 | 
						||
		TToken_string & row = sh.row(-1);
 | 
						||
    int id = 0, hd = 0;
 | 
						||
    if (*key == 'H' && strchr(str, '|') == NULL)  // Provo a gestire il caso Handler(105) = 3
 | 
						||
    {
 | 
						||
      row.add(atoi(str));
 | 
						||
 | 
						||
			const TFixed_string k(key);
 | 
						||
 | 
						||
      row.add(atoi(k.after('(')));
 | 
						||
    }
 | 
						||
    else                                          // Provo a gestire il caso 1 = 105|3
 | 
						||
    {
 | 
						||
      TToken_string riga = str;
 | 
						||
 | 
						||
			row.add(riga.get_int(1));
 | 
						||
      row.add(riga.get_int(0));
 | 
						||
    }
 | 
						||
		sh.check_row(sh.items() - 1);
 | 
						||
	}
 | 
						||
	profile.set_paragraph("DEFAULT");
 | 
						||
	TSheet_field & sd = sfield(F_DEFAULTS);
 | 
						||
 | 
						||
	sd.destroy();
 | 
						||
	TAssoc_array& defaults = profile.list_variables();
 | 
						||
 | 
						||
  FOR_EACH_ASSOC_STRING(defaults, obj, dkey, dstr)
 | 
						||
  {
 | 
						||
		TToken_string & row = sd.row(-1);
 | 
						||
    if (strchr(dstr, '|') == NULL)  // Provo a gestire il caso Default(105) = 3
 | 
						||
    {
 | 
						||
      const TFixed_string k(dkey);
 | 
						||
      
 | 
						||
			row.add(atoi(k.after('(')));
 | 
						||
			row.add(dstr);
 | 
						||
    }
 | 
						||
    else   // Provo a gestire il caso Default(0) = 105|3
 | 
						||
			row = dstr; 
 | 
						||
	}
 | 
						||
}
 | 
						||
 | 
						||
void TTIP_handlers_mask::add_mask_items(TList_field& l)
 | 
						||
{
 | 
						||
	TToken_string codes;
 | 
						||
	TToken_string descrs;
 | 
						||
 | 
						||
	FOR_EACH_MASK_FIELD(*_docmask, i, f)
 | 
						||
	{
 | 
						||
		const short id = f->dlg();
 | 
						||
		
 | 
						||
		if (f->is_editable() && f->enabled_default() && f->shown_default())
 | 
						||
		{
 | 
						||
				TString descr;
 | 
						||
 | 
						||
				codes.add(id);
 | 
						||
				descr << id << " - " << f->prompt();
 | 
						||
				const TFieldref * fld = f->field();
 | 
						||
				if (fld != NULL)
 | 
						||
					descr << " - " << fld->name();
 | 
						||
				descr.strip(":!");
 | 
						||
				descr.strip_double_spaces();
 | 
						||
				descrs.add(descr);
 | 
						||
		}
 | 
						||
	}
 | 
						||
	l.replace_items(codes, descrs);
 | 
						||
}
 | 
						||
 | 
						||
void TTIP_handlers_mask::build_items(TEdit_field& e, const char * flist)
 | 
						||
{
 | 
						||
	TList_sheet * l = e.sheet();
 | 
						||
 | 
						||
	if (l != NULL)
 | 
						||
	{
 | 
						||
		TString_array & data = l->rows_array();
 | 
						||
 | 
						||
		data.destroy();
 | 
						||
		if (flist && *flist)
 | 
						||
		{
 | 
						||
			TToken_string tok(flist);
 | 
						||
			FOR_EACH_TOKEN(tok, sid)
 | 
						||
			{
 | 
						||
				short id = atoi(sid);
 | 
						||
				const int pos = _docmask->id2pos(id);
 | 
						||
 | 
						||
				if (pos >= 0)
 | 
						||
				{
 | 
						||
						TString descr(_docmask->fld(pos).prompt());
 | 
						||
						TToken_string r;
 | 
						||
 | 
						||
						r.add(id);
 | 
						||
						descr.strip(":-!");
 | 
						||
						descr.strip_double_spaces();
 | 
						||
						r.add(descr);
 | 
						||
						data.add(r);
 | 
						||
				}
 | 
						||
			}
 | 
						||
		}
 | 
						||
		FOR_EACH_MASK_FIELD(*_docmask, i, f)
 | 
						||
		{
 | 
						||
			const short id = f->dlg();
 | 
						||
			
 | 
						||
			if (id >= F_USERFLD && id < BASE_PIEDE)
 | 
						||
			{
 | 
						||
				TString descr(f->prompt());
 | 
						||
 | 
						||
				if (descr.full())
 | 
						||
				{
 | 
						||
					TToken_string r;
 | 
						||
 | 
						||
					r.add(id);
 | 
						||
					descr.strip(":-!");
 | 
						||
					descr.strip_double_spaces();
 | 
						||
					r.add(descr);
 | 
						||
					data.add(r);
 | 
						||
				}
 | 
						||
			}
 | 
						||
		}
 | 
						||
		if (data.items() == 0)
 | 
						||
			data.add("|Non utilizzabile");
 | 
						||
	}
 | 
						||
}
 | 
						||
 | 
						||
bool TTIP_handlers_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
 | 
						||
{
 | 
						||
	switch (o.dlg())
 | 
						||
	{
 | 
						||
		case FH_HANDLER:
 | 
						||
			if ((o.mask().get_sheet()->dlg() == F_HANDLERS) && (e == fe_init || e == fe_modify))
 | 
						||
      {
 | 
						||
				const int hnum = (int) o.get_long();
 | 
						||
				switch (hnum)
 | 
						||
				{
 | 
						||
					case 1:
 | 
						||
						build_items(o.mask().efield(FH_FIELD), TOSTRING(F_ORAPART));
 | 
						||
						break;
 | 
						||
					case 2:
 | 
						||
						build_items(o.mask().efield(FH_FIELD), "");
 | 
						||
						break;
 | 
						||
					case 3:
 | 
						||
						build_items(o.mask().efield(FH_FIELD), TOSTRING(F_NUMDOCRIF));
 | 
						||
						break;
 | 
						||
					case 4:
 | 
						||
						build_items(o.mask().efield(FH_FIELD), "");
 | 
						||
						break;
 | 
						||
					case 6:
 | 
						||
						build_items(o.mask().efield(FH_FIELD), "");
 | 
						||
						break;
 | 
						||
					default: 
 | 
						||
						break;
 | 
						||
				} 
 | 
						||
      }
 | 
						||
			break;
 | 
						||
		default:
 | 
						||
			break;
 | 
						||
	}
 | 
						||
  return true;
 | 
						||
}
 | 
						||
 | 
						||
TTIP_handlers_mask::TTIP_handlers_mask(const char * tipodoc) : TAutomask("vehntip")
 | 
						||
{
 | 
						||
	_docmask = new TDocumento_mask(tipodoc);
 | 
						||
	add_frr_list(efield(F_PREZZO));
 | 
						||
	add_frd_list(efield(F_TOTALECONT));
 | 
						||
	add_frr_list(efield(F_QTA));
 | 
						||
	add_frr_list(efield(F_QTAEVASA));
 | 
						||
	add_frr_list(efield(F_QTAMAG));
 | 
						||
	add_frr_list(efield(F_QTAEVASAMAG));
 | 
						||
	add_mask_items(sfield(F_DEFAULTS).sheet_mask().lfield(FD_FIELD));
 | 
						||
}
 | 
						||
 | 
						||
void TTRI_handlers_mask::add_mask_items(TList_field& l)
 | 
						||
{
 | 
						||
	TToken_string codes;
 | 
						||
	TToken_string descrs;
 | 
						||
 | 
						||
	FOR_EACH_MASK_FIELD(*_rigamask, i, f)
 | 
						||
	{
 | 
						||
		const short id = f->dlg();
 | 
						||
		
 | 
						||
		if (f->is_editable() && f->enabled_default() && f->shown_default() && id < FR_END)
 | 
						||
		{
 | 
						||
				TString descr;
 | 
						||
				TString fldname;
 | 
						||
 | 
						||
				codes.add(id);
 | 
						||
				descr << id << " - " << f->prompt();
 | 
						||
				switch (id)
 | 
						||
				{
 | 
						||
					case FR_TIPORIGA :
 | 
						||
						fldname = RDOC_TIPORIGA;
 | 
						||
						break;
 | 
						||
					case FR_CODMAG :
 | 
						||
					case FR_CODDEP :
 | 
						||
						fldname = RDOC_CODMAG;
 | 
						||
						break;
 | 
						||
					case FR_CODART :
 | 
						||
						fldname = RDOC_CODART;
 | 
						||
						break;
 | 
						||
					case FR_LIV1 :
 | 
						||
					case FR_LIV2 :
 | 
						||
					case FR_LIV3 :
 | 
						||
					case FR_LIV4 :
 | 
						||
						fldname = RDOC_LIVELLO;
 | 
						||
						break;
 | 
						||
				case FR_DESCR :
 | 
						||
						fldname = RDOC_DESCR;
 | 
						||
						break;
 | 
						||
				case FR_UMQTA :
 | 
						||
						fldname = RDOC_UMQTA;
 | 
						||
						break;
 | 
						||
				case FR_PREZZO :
 | 
						||
						fldname = RDOC_PREZZO;
 | 
						||
						break;
 | 
						||
				case FR_CODIVA :
 | 
						||
						fldname = RDOC_CODIVA;
 | 
						||
						break;
 | 
						||
				case FR_QTA :
 | 
						||
						fldname = RDOC_QTA;
 | 
						||
						break;
 | 
						||
				case FR_QTAEVASA :
 | 
						||
						fldname = RDOC_QTAEVASA;
 | 
						||
						break;
 | 
						||
				case FR_RIGAEVASA :
 | 
						||
						fldname = RDOC_RIGAEVASA;
 | 
						||
						break;
 | 
						||
				case FR_TARA :
 | 
						||
						fldname = RDOC_TARA;
 | 
						||
						break;
 | 
						||
				case FR_PNETTO :
 | 
						||
						fldname = RDOC_PNETTO;
 | 
						||
						break;
 | 
						||
				case FR_NCOLLI :
 | 
						||
						fldname = RDOC_NCOLLI;
 | 
						||
						break;
 | 
						||
				case FR_DAEVADERE :
 | 
						||
						fldname = RDOC_DAEVADERE;
 | 
						||
						break;
 | 
						||
				case FR_SCONTO :
 | 
						||
						fldname = RDOC_SCONTO;
 | 
						||
						break;
 | 
						||
				case FR_PERCPROV :
 | 
						||
						fldname = RDOC_PERCPROV;
 | 
						||
						break;
 | 
						||
				case FR_IMPFISUN :
 | 
						||
						fldname = RDOC_IMPFISUN;
 | 
						||
						break;
 | 
						||
				case FR_IMPFISSO :
 | 
						||
						fldname = RDOC_IMPFISSO;
 | 
						||
						break;
 | 
						||
				case FR_ADDIVA :
 | 
						||
						fldname = RDOC_ADDIVA;
 | 
						||
						break;
 | 
						||
				case FR_ASPBENI :
 | 
						||
						fldname = RDOC_ASPBENI;
 | 
						||
						break;
 | 
						||
				case FR_CAUS :
 | 
						||
						fldname = RDOC_CAUSMAG;
 | 
						||
						break;
 | 
						||
				case FR_CODMAGC :
 | 
						||
				case FR_CODDEPC :
 | 
						||
						fldname = RDOC_CODMAGC;
 | 
						||
						break;
 | 
						||
				case FR_DATACONS :
 | 
						||
						fldname = RDOC_DATACONS;
 | 
						||
						break;
 | 
						||
				case FR_CODARTMAG :
 | 
						||
						fldname = RDOC_CODARTMAG;
 | 
						||
						break;
 | 
						||
				case FR_CHECKED :
 | 
						||
						fldname = RDOC_CHECKED;
 | 
						||
						break;
 | 
						||
				case FR_QTAGG1 :
 | 
						||
						fldname = RDOC_QTAGG1;
 | 
						||
						break;
 | 
						||
				case FR_QTAGG2 :
 | 
						||
						fldname = RDOC_QTAGG2;
 | 
						||
						break;
 | 
						||
				case FR_QTAGG3 :
 | 
						||
						fldname = RDOC_QTAGG3;
 | 
						||
						break;
 | 
						||
				case FR_QTAGG4 :
 | 
						||
						fldname = RDOC_QTAGG4;
 | 
						||
						break;
 | 
						||
				case FR_QTAGG5 :
 | 
						||
						fldname = RDOC_QTAGG5;
 | 
						||
						break;
 | 
						||
				case FR_IMPIANTO :
 | 
						||
						fldname = RDOC_IMPIANTO;
 | 
						||
						break;
 | 
						||
				case FR_LINEA :
 | 
						||
						fldname = RDOC_LINEA;
 | 
						||
						break;
 | 
						||
				case FR_CODAGG1 :
 | 
						||
						fldname = RDOC_CODAGG1;
 | 
						||
						break;
 | 
						||
				case FR_CODAGG2 :
 | 
						||
						fldname = RDOC_CODAGG2;
 | 
						||
						break;
 | 
						||
				case FR_RIDPREZZO :
 | 
						||
						fldname = RDOC_RIDPREZZO;
 | 
						||
						break;
 | 
						||
				case FR_PERCPROV1 :
 | 
						||
						fldname = RDOC_PERCPROV1;
 | 
						||
						break;
 | 
						||
				case FR_TIPODET :
 | 
						||
						fldname = RDOC_TIPODET;
 | 
						||
						break;
 | 
						||
				default:
 | 
						||
						const TFieldref * fld = f->field();
 | 
						||
						if (fld != NULL)
 | 
						||
							fldname = fld->name();
 | 
						||
					break;
 | 
						||
				}
 | 
						||
				if (fldname.full())
 | 
						||
					descr << " - " << fldname;
 | 
						||
  			descr.strip(":!");
 | 
						||
				descr.strip_double_spaces();
 | 
						||
				descrs.add(descr);
 | 
						||
		}
 | 
						||
	}
 | 
						||
	l.replace_items(codes, descrs);
 | 
						||
}
 | 
						||
 | 
						||
void TTRI_handlers_mask::build_items(TEdit_field& e, const char * flist)
 | 
						||
{
 | 
						||
	TList_sheet * l = e.sheet();
 | 
						||
 | 
						||
	if (l != NULL)
 | 
						||
	{
 | 
						||
		TString_array & data = l->rows_array();
 | 
						||
 | 
						||
		data.destroy();
 | 
						||
		if (flist && *flist)
 | 
						||
		{
 | 
						||
			TToken_string tok(flist);
 | 
						||
 | 
						||
			FOR_EACH_TOKEN(tok, sid)
 | 
						||
			{
 | 
						||
				short id = atoi(sid);
 | 
						||
				const int pos = _rigamask->id2pos(id);
 | 
						||
 | 
						||
				if (pos >= 0)
 | 
						||
				{
 | 
						||
						TString descr(_rigamask->fld(pos).prompt());
 | 
						||
						TToken_string r;
 | 
						||
 | 
						||
						r.add(id);
 | 
						||
						descr.strip(":_-!");
 | 
						||
						descr.strip_double_spaces();
 | 
						||
						r.add(descr);
 | 
						||
						data.add(r);
 | 
						||
				}
 | 
						||
			}
 | 
						||
		}
 | 
						||
		FOR_EACH_MASK_FIELD(*_rigamask, i, f)
 | 
						||
		{
 | 
						||
			const short id = f->dlg();
 | 
						||
 | 
						||
			if 	(((id >= FR_JOLLY1 && id <= FR_JOLLY10) ||
 | 
						||
					 (id >= FR_CODAGG1 && id <= FR_CODAGG2)))
 | 
						||
			{
 | 
						||
				TString descr(f->prompt());
 | 
						||
 | 
						||
				if (descr.full())
 | 
						||
				{
 | 
						||
					TToken_string r;
 | 
						||
 | 
						||
					r.add(id);
 | 
						||
					descr.strip(":-!");
 | 
						||
					descr.strip_double_spaces();
 | 
						||
					r.add(descr);
 | 
						||
					data.add(r);
 | 
						||
				}
 | 
						||
			}
 | 
						||
		}
 | 
						||
		if (data.items() == 0)
 | 
						||
			data.add("|Non utilizzabile");
 | 
						||
	}
 | 
						||
}
 | 
						||
 | 
						||
bool TTRI_handlers_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
 | 
						||
{
 | 
						||
	switch (o.dlg())
 | 
						||
	{
 | 
						||
		case FH_HANDLERR:
 | 
						||
			if ((o.mask().get_sheet()->dlg() == F_HANDLERSR) && (e == fe_init || e == fe_modify))
 | 
						||
      {
 | 
						||
				const int hnum = (int) o.get_long();
 | 
						||
				switch (hnum)
 | 
						||
				{
 | 
						||
					case 1:
 | 
						||
						build_items(o.mask().efield(FH_FIELDR), TOSTRING(FR_PREZZO));
 | 
						||
						break;
 | 
						||
					case 3:
 | 
						||
						build_items(o.mask().efield(FH_FIELDR), TOSTRING(FR_CODART));
 | 
						||
						break;
 | 
						||
					case 4:
 | 
						||
						build_items(o.mask().efield(FH_FIELDR), TOSTRING(FR_CODART));
 | 
						||
						break;
 | 
						||
					case 5:
 | 
						||
						build_items(o.mask().efield(FH_FIELDR), TOSTRING(FR_CODART));
 | 
						||
						break;
 | 
						||
					case 6:
 | 
						||
						build_items(o.mask().efield(FH_FIELDR), TOSTRING(FR_CODART));
 | 
						||
						break;
 | 
						||
					case 7:
 | 
						||
						build_items(o.mask().efield(FH_FIELDR), TOSTRING(FR_CODART));
 | 
						||
						break;
 | 
						||
					case 8:
 | 
						||
						build_items(o.mask().efield(FH_FIELDR), TOSTRING(FR_LIV1) "|" TOSTRING(FR_LIV2) "|" TOSTRING(FR_LIV3) "|" TOSTRING(FR_LIV4));
 | 
						||
						break;
 | 
						||
					default:
 | 
						||
						build_items(o.mask().efield(FH_FIELDR),"\"" "\"");
 | 
						||
						break;
 | 
						||
				}
 | 
						||
      }
 | 
						||
			break;
 | 
						||
		default:
 | 
						||
			break;
 | 
						||
	}
 | 
						||
  return true;
 | 
						||
}
 | 
						||
 | 
						||
void TTRI_handlers_mask::mask2prof(TTipo_riga_documento & tipo)
 | 
						||
{
 | 
						||
	TFilename profname("verig");
 | 
						||
 | 
						||
	profname << tipo.codice();
 | 
						||
	profname.ext("ini");
 | 
						||
	profname.custom_path();
 | 
						||
	if (profname.find("custom") < 0)
 | 
						||
	{
 | 
						||
		TFilename srcname(profname);
 | 
						||
 | 
						||
		profname = prefix().get_studio();
 | 
						||
		profname << SLASH << "custom" << SLASH << srcname;
 | 
						||
		fcopy(srcname, profname);
 | 
						||
	}
 | 
						||
 | 
						||
	TConfig profile(profname, "MAIN");
 | 
						||
 | 
						||
  profile.set("NODESC", get(F_NODESC)); 
 | 
						||
	profile.set("VARP+", get(F_VARP));
 | 
						||
	profile.set("VARP-", get(F_VARN));
 | 
						||
	profile.set(RDOC_PREZZO, get(F_PREZZO));
 | 
						||
	profile.set(RDOC_QTA, get(F_QTAR));
 | 
						||
	profile.set(RDOC_QTAEVASA, get(F_QTAEVASAR));
 | 
						||
	profile.set("QTA_MAG", get(F_QTAMAGR));
 | 
						||
	profile.set("QTAEVASA_MAG", get(F_QTAEVASAMAGR));
 | 
						||
	profile.set("LIVGEN", get(F_LIVGEN1), NULL, true,  1);
 | 
						||
	profile.set("LIVGEN", get(F_LIVGEN2), NULL, true, 2);
 | 
						||
	profile.set("LIVGEN", get(F_LIVGEN3), NULL, true, 3);
 | 
						||
	profile.set("LIVGEN", get(F_LIVGEN4), NULL, true, 4);
 | 
						||
	profile.set("SEARCNUMS", get(F_SEARCNUMS));
 | 
						||
	profile.set("MAXROWSART", get(F_MAXROWSART));
 | 
						||
	profile.set("SEARCHACTDOCS", get(F_SEARCHACTDOCS));
 | 
						||
	profile.set("SELCLIFO", get(F_SELCLIFO));
 | 
						||
	profile.set("FIELDSTOUPDATE", get(F_FIELDSTOUPDATE));
 | 
						||
	profile.set_paragraph("HANDLERS");
 | 
						||
	profile.remove_array("Handler");
 | 
						||
	profile.remove("NHANDLERS");
 | 
						||
	for (int i = 0 ; i < 10; i++)
 | 
						||
		profile.remove(format("%d", i));
 | 
						||
 | 
						||
 | 
						||
	TSheet_field & sh = sfield(F_HANDLERSR);
 | 
						||
 | 
						||
	FOR_EACH_SHEET_ROW(sh, r, row)
 | 
						||
	{
 | 
						||
		const short id = row->get_int(1);
 | 
						||
 | 
						||
		profile.set("Handler", row->get_int(0), NULL, true, id);
 | 
						||
	}
 | 
						||
	profile.set_paragraph("DEFAULT");
 | 
						||
	profile.remove_array("Default");
 | 
						||
 | 
						||
	TSheet_field & sd = sfield(F_DEFAULTSR);
 | 
						||
 | 
						||
	FOR_EACH_SHEET_ROW(sd, dr, drow)
 | 
						||
	{
 | 
						||
		const short id = drow->get_int(0);
 | 
						||
 | 
						||
		profile.set("Default", drow->get(), NULL, true, id);
 | 
						||
	}
 | 
						||
}
 | 
						||
 | 
						||
void TTRI_handlers_mask::prof2mask(TTipo_riga_documento & tipo)
 | 
						||
{
 | 
						||
	TFilename profname;
 | 
						||
 | 
						||
	tipo.profile_name(profname);
 | 
						||
  
 | 
						||
	TConfig profile(profname, "MAIN");
 | 
						||
  
 | 
						||
  profile.write_protect();  // Altrimenti non si distrugge!!!
 | 
						||
	set(F_NODESC, profile.get("NODESC")); 
 | 
						||
	set(F_VARP, profile.get("VARP+"));
 | 
						||
	set(F_VARN, profile.get("VARP-"));
 | 
						||
	set(F_PREZZO, profile.get(RDOC_PREZZO));
 | 
						||
	set(F_QTAR, profile.get(RDOC_QTA));
 | 
						||
	set(F_QTAEVASAR, profile.get(RDOC_QTAEVASA));
 | 
						||
	set(F_QTAMAGR, profile.get("QTA_MAG"));
 | 
						||
	set(F_QTAEVASAMAGR, profile.get("QTAEVASA_MAG"));
 | 
						||
	set(F_LIVGEN1, profile.get("LIVGEN", NULL, 1));
 | 
						||
	set(F_LIVGEN2, profile.get("LIVGEN", NULL, 2));
 | 
						||
	set(F_LIVGEN3, profile.get("LIVGEN", NULL, 3));
 | 
						||
	set(F_LIVGEN4, profile.get("LIVGEN", NULL, 4));
 | 
						||
	set(F_SERCHYEARS, profile.get("SERCHYEARS"));
 | 
						||
	set(F_SEARCNUMS, profile.get("SEARCNUMS"));
 | 
						||
	set(F_MAXROWSART, profile.get("MAXROWSART"));
 | 
						||
	set(F_SEARCHACTDOCS, profile.get("SEARCHACTDOCS"));
 | 
						||
	set(F_SELCLIFO, profile.get("SELCLIFO"));
 | 
						||
	set(F_FIELDSTOUPDATE, profile.get("FIELDSTOUPDATE"));
 | 
						||
 | 
						||
	profile.set_paragraph("HANDLERS");
 | 
						||
 | 
						||
	TAssoc_array& handlers = profile.list_variables();
 | 
						||
	TSheet_field & sh = sfield(F_HANDLERSR);
 | 
						||
 | 
						||
	sh.destroy();
 | 
						||
	FOR_EACH_ASSOC_STRING(handlers, obj, key, str)
 | 
						||
  {
 | 
						||
    int id = 0, hd = 0;
 | 
						||
    if (*key == 'H' && strchr(str, '|') == NULL)  // Provo a gestire il caso Handler(105) = 3
 | 
						||
    {
 | 
						||
      const TFixed_string k(key);
 | 
						||
      id = atoi(k.after('('));
 | 
						||
      hd = atoi(str);
 | 
						||
    }
 | 
						||
    else                                          // Provo a gestire il caso 1 = 105|3
 | 
						||
			if (*key != 'N')
 | 
						||
			{
 | 
						||
				const TToken_string riga = str;
 | 
						||
				riga.get(0, id); 
 | 
						||
				riga.get(1, hd);
 | 
						||
			}
 | 
						||
		if (hd > 0)
 | 
						||
		{
 | 
						||
			TToken_string & row = sh.row(-1);
 | 
						||
			row.add(hd);
 | 
						||
			row.add(id);
 | 
						||
			sh.check_row(sh.items() - 1);
 | 
						||
		}
 | 
						||
	}
 | 
						||
	profile.set_paragraph("DEFAULT");
 | 
						||
	TSheet_field & sd = sfield(F_DEFAULTSR);
 | 
						||
 | 
						||
	sd.destroy();
 | 
						||
	TAssoc_array& defaults = profile.list_variables();
 | 
						||
 | 
						||
  FOR_EACH_ASSOC_STRING(defaults, obj, dkey, s)
 | 
						||
  {
 | 
						||
		TToken_string & row = sd.row(-1);
 | 
						||
    if (strchr(s, '|') == NULL)  // Provo a gestire il caso Default(105) = 3
 | 
						||
    {
 | 
						||
      const TFixed_string k(dkey);
 | 
						||
      
 | 
						||
			row.add(atoi(k.after('(')));
 | 
						||
			row.add(s);
 | 
						||
    }
 | 
						||
    else   // Provo a gestire il caso Default(0) = 105|3
 | 
						||
			row = s;
 | 
						||
	}
 | 
						||
}
 | 
						||
 | 
						||
TTRI_handlers_mask::TTRI_handlers_mask(const TTipo_riga_documento & tiporiga) : TAutomask("vehntri")
 | 
						||
{
 | 
						||
	TString name;
 | 
						||
	
 | 
						||
 | 
						||
	tiporiga.mask_name(name);
 | 
						||
	_rigamask = new TMask(name);
 | 
						||
	add_frd_list(efield(F_TOTALECONT));
 | 
						||
	add_frr_list(efield(F_QTAR));
 | 
						||
	add_frr_list(efield(F_QTAEVASAR));
 | 
						||
	add_frr_list(efield(F_QTAMAGR));
 | 
						||
	add_frr_list(efield(F_QTAEVASAMAGR));
 | 
						||
	for (int i = 0 ; i < 4; i++)
 | 
						||
	{
 | 
						||
		const short id = F_LIVGEN1 + i;
 | 
						||
		TEdit_field & e = efield(id);
 | 
						||
 | 
						||
		add_fld_list(e, LF_ANAMAG);
 | 
						||
		add_fld_list(e, LF_DOC);
 | 
						||
		add_fld_list(e, LF_RIGHEDOC);
 | 
						||
	}
 | 
						||
	add_mask_items(sfield(F_DEFAULTSR).sheet_mask().lfield(FD_FIELDR));
 | 
						||
}
 | 
						||
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
// TVendite_tabapp
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
 | 
						||
class TVendite_tabapp : public TTable_application
 | 
						||
{
 | 
						||
protected:
 | 
						||
	virtual const char* extra_modules() const {return "dt";}
 | 
						||
  virtual TMask* set_mask(TMask* m);
 | 
						||
  virtual void add_anal_fields(TVendite_mask& vm);
 | 
						||
  virtual void init_query_mode(TMask& m);
 | 
						||
  virtual int read(TMask& m);
 | 
						||
  virtual int write(const TMask& m);
 | 
						||
  virtual int rewrite(const TMask& m);
 | 
						||
  virtual bool user_create();
 | 
						||
  virtual bool get_next_key(TToken_string& key);
 | 
						||
  void write_gmc(const TMask& m, TRectype& curr);
 | 
						||
  static bool codgmc_handler(TMask_field& f, KEY k);
 | 
						||
 | 
						||
  bool is_table(const char* tab) const { return get_tabname() == tab; }
 | 
						||
 | 
						||
public:
 | 
						||
};
 | 
						||
 | 
						||
void TVendite_tabapp::add_anal_fields(TVendite_mask& vm)
 | 
						||
{
 | 
						||
	int y = 4;
 | 
						||
	short dlg = F_ANAL1;
 | 
						||
	int nfields = 0;
 | 
						||
	const TMultilevel_code_info& fasinfo = ca_multilevel_code_info(LF_FASI);
 | 
						||
	const TMultilevel_code_info& cominfo = ca_multilevel_code_info(LF_COMMESSE);
 | 
						||
	const TMultilevel_code_info& cdcinfo = ca_multilevel_code_info(LF_CDC);
 | 
						||
	int fasi_fields = fasinfo.levels();
 | 
						||
	const int cdc_fields = cdcinfo.levels();
 | 
						||
	const int com_fields = cominfo.levels();
 | 
						||
	const bool use_fsc = fasi_fields > 0;
 | 
						||
 | 
						||
	if (use_fsc && fasinfo.parent() == LF_CDC)
 | 
						||
	{
 | 
						||
		nfields = ca_create_fields(vm, 1, LF_FASI, 2, y, dlg, dlg+50, 0x0, "S1", 20);
 | 
						||
 | 
						||
		const int dlgf = dlg + com_fields;
 | 
						||
		fasi_fields -= com_fields;
 | 
						||
		const int offset = 61 - vm.field(dlgf).field()->from();
 | 
						||
 | 
						||
		for (short i = 0 ; i< fasi_fields; i++)
 | 
						||
		{
 | 
						||
			TFieldref * fr = (TFieldref *) vm.field(dlgf + i).field();
 | 
						||
 | 
						||
			if (fr != NULL)
 | 
						||
			{
 | 
						||
				TEdit_field & fld = vm.efield(dlgf + i);
 | 
						||
        TString16 str;
 | 
						||
				
 | 
						||
				str.format("S1[%d,%d]", fr->from() + offset + 1, fr->to() + offset);
 | 
						||
        fld.set_field(str);
 | 
						||
			}
 | 
						||
		}
 | 
						||
	}
 | 
						||
	else
 | 
						||
		nfields = ca_create_fields(vm, 1, LF_CDC, 2, y, dlg, dlg+50, 0x0, "S1", 20);
 | 
						||
	dlg += nfields;
 | 
						||
	y += nfields;
 | 
						||
	if (use_fsc && fasinfo.parent() == LF_COMMESSE)
 | 
						||
	{
 | 
						||
		nfields = ca_create_fields(vm, 1, LF_FASI, 2, y, dlg, dlg+50, 0x0, "S1", 40);
 | 
						||
		const int dlgf = dlg + com_fields;
 | 
						||
		fasi_fields -= com_fields;
 | 
						||
		const int offset = 60 - vm.field(dlgf).field()->from();
 | 
						||
 | 
						||
		for (short i = 0 ; i < fasi_fields; i++)
 | 
						||
		{
 | 
						||
			TFieldref * fr = (TFieldref *) vm.field(dlgf + i).field();
 | 
						||
 | 
						||
			if (fr != NULL)
 | 
						||
			{
 | 
						||
				TEdit_field & fld = vm.efield(dlgf + i);
 | 
						||
        TString16 str;
 | 
						||
				
 | 
						||
				str.format("S1[%d,%d]", fr->from() + offset + 1, fr->to() + offset);
 | 
						||
        fld.set_field(str);
 | 
						||
			}
 | 
						||
		}
 | 
						||
	}
 | 
						||
	else
 | 
						||
		nfields = ca_create_fields(vm, 1, LF_COMMESSE, 2, y, dlg, dlg+50, 0x0, "S1", 40);
 | 
						||
	dlg += nfields;
 | 
						||
	y += nfields;
 | 
						||
	if (use_fsc && fasinfo.parent() <= 0)
 | 
						||
		nfields = ca_create_fields(vm, 1, LF_FASI, 2, y, dlg, dlg+50, 0x0, "S1", 60);
 | 
						||
 | 
						||
}
 | 
						||
 | 
						||
TMask* TVendite_tabapp::set_mask(TMask* m)
 | 
						||
{
 | 
						||
  if (m == NULL)
 | 
						||
  {
 | 
						||
    TFilename mn; get_mask_name(mn);
 | 
						||
    TVendite_mask* vm = new TVendite_mask(mn);
 | 
						||
 | 
						||
    if (ca_config().get_int("Authorizations") != 0)
 | 
						||
    {
 | 
						||
       // Crea i campi per i conti analitici (vendite e acquisti)
 | 
						||
      if (vm->table_code() == "SPP")
 | 
						||
      {
 | 
						||
        ca_create_fields(*vm, 0, LF_PCONANA, 2, 11, SPP_CDC_V1, SPP_CDC_V1+50, 0x0, "S1");
 | 
						||
        ca_create_fields(*vm, 0, LF_PCONANA, 2, 16, SPP_CDC_A1, SPP_CDC_A1+50, 0x0, "S2");
 | 
						||
				add_anal_fields(*vm);
 | 
						||
      } else
 | 
						||
      if (vm->table_code() == "PRS")
 | 
						||
      {
 | 
						||
        ca_create_fields(*vm, 0, LF_PCONANA, 2, 12, PRS_CDC_V1, PRS_CDC_V1+10, 0x0, "S1");
 | 
						||
				ca_create_fields(*vm, 0, LF_PCONANA, 2, 18, PRS_CDC_A1, PRS_CDC_A1+10, 0x0, "S2");
 | 
						||
				add_anal_fields(*vm);
 | 
						||
      } else
 | 
						||
      if (vm->table_code() == "RSS")
 | 
						||
      {
 | 
						||
        ca_create_fields(*vm, 0, LF_PCONANA, 2, 16, RSS_CDC_V1, RSS_CDC_V1+10, 0x0, "S1");
 | 
						||
				add_anal_fields(*vm);
 | 
						||
      } else
 | 
						||
      if (vm->table_code() == "ATR")
 | 
						||
      {
 | 
						||
        ca_create_fields(*vm, 0, LF_PCONANA, 2, 12, ATR_CDC_V1, ATR_CDC_V1+10, 0x0, "S1");
 | 
						||
				add_anal_fields(*vm);
 | 
						||
      }
 | 
						||
    }
 | 
						||
    m = vm;
 | 
						||
  }
 | 
						||
  return TTable_application::set_mask(m);
 | 
						||
}
 | 
						||
 | 
						||
void TVendite_tabapp::init_query_mode(TMask& m)
 | 
						||
{
 | 
						||
  if (is_table("RSS"))
 | 
						||
  {
 | 
						||
    m.enable(RSS_RAGSOC);
 | 
						||
  }
 | 
						||
}
 | 
						||
 | 
						||
bool TVendite_tabapp::get_next_key(TToken_string& key)
 | 
						||
{
 | 
						||
  if (is_table("NAR"))
 | 
						||
  {
 | 
						||
    long n = 1;
 | 
						||
    TEdit_field& codice = curr_mask().efield(101);
 | 
						||
    TCursor& cur = *codice.browse()->cursor();
 | 
						||
    if (cur.items() > 0)
 | 
						||
    {
 | 
						||
      cur = cur.items()-1;
 | 
						||
      n += cur.curr().get_long("CODTAB");
 | 
						||
    }
 | 
						||
    key.format("101|%6ld", n);
 | 
						||
    return true;
 | 
						||
  }
 | 
						||
  return TTable_application::get_next_key(key);
 | 
						||
}
 | 
						||
 | 
						||
int TVendite_tabapp::read(TMask& m)
 | 
						||
{
 | 
						||
	int err = Tab_application::read(m);
 | 
						||
  if (err == NOERR)
 | 
						||
  {
 | 
						||
    const TRectype& curr = get_relation()->curr();
 | 
						||
 | 
						||
    if (curr.exist("R10") && curr.get_real("R10").is_zero())
 | 
						||
    {
 | 
						||
      const TString& r0 = curr.get("R0");
 | 
						||
		  if (is_table("SPP"))
 | 
						||
			  m.set(SPP_PREZZO, r0); else
 | 
						||
			if (is_table("PRS"))
 | 
						||
			  m.set(PRS_PREZZO, r0); else
 | 
						||
			if (is_table("RSS"))
 | 
						||
				m.set(RSS_PREZZO, r0); else
 | 
						||
			if (is_table("ATR"))
 | 
						||
			  m.set(ATR_PREZZO, r0);
 | 
						||
    }
 | 
						||
 | 
						||
    //in caso dei grmerc sono cazzi, perch<63> lo sheet va riempito usando il contenuto di S1 ed S2, che sono tokenstring..
 | 
						||
    //..di tokenstrings!
 | 
						||
    if (is_table("GMC"))
 | 
						||
    {
 | 
						||
      //intanto deve controllare da configurazione se enablare o meno la colonna CATVEN
 | 
						||
 | 
						||
      TSheet_field& listini = m.sfield(F_RIGHE_LIS);
 | 
						||
      listini.enable_column(S_CATVEN, ini_get_bool(CONFIG_DITTA, "ve", "GESLISCV"));
 | 
						||
 | 
						||
      TToken_string stringona(140, ';');
 | 
						||
      TString s = curr.get("S1");
 | 
						||
      if (s.full())
 | 
						||
      {
 | 
						||
        stringona.add(s);
 | 
						||
        s = curr.get("S2");
 | 
						||
        if (s.full())
 | 
						||
          stringona.add(s);
 | 
						||
      }
 | 
						||
                 
 | 
						||
      listini.destroy();
 | 
						||
      //questo serve per settare il separatore in modo che non mandi in confusione l'editor degli archivi..
 | 
						||
      //..separator <20> definito nella maschera
 | 
						||
      TToken_string stringhina(16, listini.separator());
 | 
						||
      FOR_EACH_TOKEN(stringona, str)
 | 
						||
      {
 | 
						||
        stringhina = str;
 | 
						||
        if (stringhina.find('|') >= 0)    //converte eventuali pipe standard in broken pipe
 | 
						||
          stringhina.replace('|', stringhina.separator());
 | 
						||
        listini.row(-1) = stringhina;
 | 
						||
        listini.check_row(listini.items() - 1);
 | 
						||
      }
 | 
						||
      listini.force_update();
 | 
						||
    }
 | 
						||
  }
 | 
						||
  return err;
 | 
						||
}
 | 
						||
 | 
						||
bool TVendite_tabapp::codgmc_handler(TMask_field& f, KEY k)
 | 
						||
{
 | 
						||
  TMask& m = f.mask();
 | 
						||
  if (m.query_mode() && k == K_ENTER)
 | 
						||
  {
 | 
						||
    const TString& codice = m.get(f.dlg()); //stringa immessa nella maschera
 | 
						||
    const TString& codtab = cache().get("GMC", codice, "CODTAB"); //stringa cercata nella tabella
 | 
						||
    if (codtab.empty()) //se non trovi la stringa in tabella (in codice magazzino non esiste->se in insert mode)
 | 
						||
    {
 | 
						||
      const int lungh = codice.len();
 | 
						||
      if (lungh > 0 && lungh < 3)
 | 
						||
        return f.error_box("Il codice del gruppo merceologico deve avere obbligatoriamente lunghezza 3");
 | 
						||
    }
 | 
						||
  }
 | 
						||
 | 
						||
  return true;
 | 
						||
}
 | 
						||
 | 
						||
void TVendite_tabapp::write_gmc(const TMask& m, TRectype& curr)
 | 
						||
{
 | 
						||
  //la tabella gmc <20> + incasinata causa la presenza di uno sheet che va salvato come tokenstring(;separated)..
 | 
						||
  //di tokenstrings(|separated) in uno o due campi alfanumerici
 | 
						||
  TSheet_field& listini = m.sfield(F_RIGHE_LIS);
 | 
						||
  TToken_string s1(70, ';'), s2(70, ';');
 | 
						||
  FOR_EACH_SHEET_ROW (listini, r, riga)
 | 
						||
  {
 | 
						||
    TToken_string mini_string(12, SAFE_PIPE_CHR);   //separatore broken_pipe !!!
 | 
						||
    mini_string.add(riga->get(0));      //catven
 | 
						||
    mini_string.add(riga->get());       //codlis
 | 
						||
    mini_string.add(riga->get());       //ricarico
 | 
						||
    mini_string.trim();
 | 
						||
    if (!mini_string.empty_items())
 | 
						||
    {
 | 
						||
      if (s1.len() + mini_string.len() < 70)
 | 
						||
        s1.add(mini_string);
 | 
						||
      else
 | 
						||
      {
 | 
						||
        if (s2.len() + mini_string.len() < 70)
 | 
						||
          s2.add(mini_string);
 | 
						||
      }
 | 
						||
    }
 | 
						||
  }
 | 
						||
  curr.put("S1", s1);
 | 
						||
  curr.put("S2", s2);
 | 
						||
}
 | 
						||
 | 
						||
int TVendite_tabapp::write(const TMask& m)
 | 
						||
{
 | 
						||
  TRectype& curr = get_relation()->curr();
 | 
						||
	if (is_table("SPP"))
 | 
						||
		curr.put("R0",	m.get(SPP_PREZZO)); else
 | 
						||
	if (is_table("PRS"))
 | 
						||
		curr.put("R0",	m.get(PRS_PREZZO));	else
 | 
						||
	if (is_table("RSS"))
 | 
						||
		curr.put("R0",	m.get(RSS_PREZZO));	else
 | 
						||
	if (is_table("ATR"))
 | 
						||
		curr.put("R0",	m.get(ATR_PREZZO));
 | 
						||
  if (is_table("GMC"))
 | 
						||
    write_gmc(m ,curr);
 | 
						||
 | 
						||
  return Tab_application::write(m);
 | 
						||
}
 | 
						||
 | 
						||
int TVendite_tabapp::rewrite(const TMask& m)
 | 
						||
{
 | 
						||
  TRectype& curr = get_relation()->curr();
 | 
						||
 | 
						||
	if (is_table("SPP"))
 | 
						||
		curr.put("R0",	m.get(SPP_PREZZO)); else
 | 
						||
	if (is_table("PRS"))
 | 
						||
		curr.put("R0",	m.get(PRS_PREZZO));	else
 | 
						||
	if (is_table("RSS"))
 | 
						||
		curr.put("R0",	m.get(RSS_PREZZO));	else
 | 
						||
	if (is_table("ATR"))
 | 
						||
		curr.put("R0",	m.get(ATR_PREZZO));
 | 
						||
  if (is_table("GMC"))
 | 
						||
    write_gmc(m ,curr);
 | 
						||
 | 
						||
	return Tab_application::rewrite(m);
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
bool TVendite_tabapp::user_create()
 | 
						||
{
 | 
						||
  bool ok = TTable_application::user_create();
 | 
						||
  if (ok) 
 | 
						||
  {
 | 
						||
    const TString& name = get_tabname();
 | 
						||
    if (name == TAB_GRMERC)
 | 
						||
    {
 | 
						||
      TMask& mask = *get_mask();
 | 
						||
      mask.set_handler(201, codgmc_handler);
 | 
						||
    }
 | 
						||
  }
 | 
						||
  return ok;
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
int ve0400(int argc, char* argv[])
 | 
						||
{
 | 
						||
  TVendite_tabapp vta;
 | 
						||
  vta.run(argc, argv, TR("Tabella Vendite"));
 | 
						||
  return 0;
 | 
						||
}
 |