git-svn-id: svn://10.65.10.50/branches/R_10_00@22727 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			367 lines
		
	
	
		
			9.4 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			367 lines
		
	
	
		
			9.4 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| #include <automask.h>
 | |
| #include <defmask.h>
 | |
| #include <msksheet.h>
 | |
| #include <mask.h>
 | |
| #include <recarray.h>
 | |
| #include <recset.h>
 | |
| #include <tabapp.h>
 | |
| 
 | |
| #include <multirel.h>
 | |
| #include "../mg/anamag.h"
 | |
| #include "ps0430100a.h"
 | |
| 
 | |
| #define FILE_KEY "ACM"
 | |
| 
 | |
| ///////////////////////////////////////////////////////////
 | |
| // TArt_mask maschera
 | |
| ///////////////////////////////////////////////////////////
 | |
| 
 | |
| class TArt_mask : public TAutomask
 | |
| {
 | |
| 	TString _query;
 | |
| 	TISAM_recordset _recset;
 | |
| 	bool _filter_changed;
 | |
| 
 | |
| 	virtual void next_page(int p);
 | |
| 	
 | |
| public:
 | |
| 	void update_sheet();
 | |
|   virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | |
|   TArt_mask();
 | |
| };
 | |
| 
 | |
| TArt_mask::TArt_mask() : TAutomask("ps0430100a"), _recset("USE ANAMAG")
 | |
| {
 | |
| 	TConfig c(CONFIG_DITTA);
 | |
| 	TSheet_field & sh = sfield(F_ARTICLES);
 | |
| 	TMask & sh_mask = sh.sheet_mask();
 | |
| 	TString80 prompt;
 | |
| 
 | |
| 	for (int i = 1; i	<= 10; i++)
 | |
|   {                  
 | |
|     const int col = sh.cid2index(F_USER1 + i -1);
 | |
|     TEditable_field & f = sh_mask.efield(F_USER1 + i - 1);            
 | |
| 		
 | |
| 		if (c.get_bool("CHK_USER", "ve", i)	&& c.get_bool("USERDEF", "or", i))
 | |
|     {  
 | |
|       prompt = c.get("PROMPT_USER", "ve", i);
 | |
|       prompt.rpad(20);              
 | |
| 			f.set_prompt(prompt);
 | |
| 			sh.set_column_header(col, prompt);
 | |
|     }
 | |
| 		else
 | |
| 		{
 | |
| 			f.hide();
 | |
| 			sh.delete_column(col);
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| void TArt_mask::update_sheet()
 | |
| {
 | |
|   const bool active_only = get_bool(F_ACTIVEONLY);
 | |
| 	TSheet_field& sf = sfield(F_ARTICLES);
 | |
| 	
 | |
|   TString query("USE ANAMAG KEY ");
 | |
| 
 | |
|   TString select;
 | |
| 	TLocalisamfile multirel(LF_MULTIREL);
 | |
| 	const TString user(get(F_USER));
 | |
| 
 | |
| 	const TString & codart = get(F_SCODART);
 | |
| 
 | |
| 	if (codart.full())
 | |
| 		select << "(UPPER(" << ANAMAG_CODART << ")?=UPPER(\"" << codart << "\"))";
 | |
| 
 | |
| 	const TString & desart = get(F_SDESART);
 | |
| 
 | |
| 	if (desart.full())
 | |
| 	{
 | |
| 		if (select.full())
 | |
| 			select << "&&";
 | |
| 		select << "(UPPER(" << ANAMAG_DESCR << ")?=UPPER(\"" << desart << "\"))";
 | |
| 	}
 | |
| 
 | |
| 	const TString & desagg = get(F_SDESAGG);
 | |
| 
 | |
| 	if (desagg.full())
 | |
| 	{
 | |
| 		if (select.full())
 | |
| 			select << "&&";
 | |
| 		select << "(UPPER(" << ANAMAG_DESCRAGG << ")?=UPPER(\"" << desagg << "\"))";
 | |
| 	}
 | |
| 
 | |
| 	const TString & codforn = get(F_SCODFOR);
 | |
| 
 | |
| 	if (codforn.full())
 | |
| 	{
 | |
| 		if (select.full())
 | |
| 			select << "&&";
 | |
| 		select << "(" << ANAMAG_CODFORN << "==\"" << codforn << "\")";
 | |
| 	}
 | |
| 
 | |
| 	const TString & ragsoc = get(F_SRAGSOC);
 | |
| 
 | |
| 	if (ragsoc.full())
 | |
| 	{
 | |
| 		if (select.full())
 | |
| 			select << "&&";
 | |
| 		select << "(UPPER(CLIFO.RAGSOC)?=UPPER(\"" <<  ragsoc << "\"))";
 | |
| 	}
 | |
| 
 | |
| 	TString16 grmerc(get(F_GRMERC));
 | |
| 	if (grmerc.full())
 | |
| 		query << '3';
 | |
| 	else
 | |
| 		query << '1';
 | |
| 
 | |
| 	if (select.full())
 | |
| 		query << "\nSELECT " << select;
 | |
| 
 | |
| 	grmerc.left_just(3);
 | |
| 	grmerc << get(F_SGRMERC);
 | |
| 	grmerc.trim();
 | |
| 
 | |
| 	if (grmerc.full())
 | |
| 		query << "\nJOIN CLIFO INTO TIPOCF==\"F\" CODCF==CODFORN\nFROM GRMERC=#GRMERC\nTO GRMERC=#GRMERC";
 | |
| 	else
 | |
| 		query << "\nJOIN CLIFO INTO TIPOCF==\"F\" CODCF==CODFORN\n";
 | |
| 	
 | |
| 	_recset.set(query);
 | |
| 
 | |
| 	TVariant var ;
 | |
| 
 | |
| 	var = grmerc;
 | |
| 	_recset.set_var("#GRMERC", var);
 | |
| 	
 | |
| 	int i = 0;
 | |
| 
 | |
| 	sf.destroy();
 | |
| 
 | |
|    for (bool ok = _recset.move_first(); ok; ok = _recset.move_next())
 | |
|   {
 | |
| 		const TString& codart = _recset.get(ANAMAG_CODART).as_string();
 | |
| 
 | |
|  		multirel.put(MULTI_COD, FILE_KEY);
 | |
| 		multirel.put(MULTI_FIRST, user);
 | |
| 		multirel.put(MULTI_SECOND, codart);
 | |
|     const bool act = multirel.read(_isequal) == NOERR;
 | |
| 
 | |
|     if (active_only && !act)
 | |
|       continue;
 | |
| 
 | |
| 		TToken_string & row = sf.row(i++);
 | |
| 		row.add(codart, sf.cid2index(F_CODART));
 | |
| 		row.add(_recset.get(ANAMAG_DESCR).as_string(), sf.cid2index(F_DESCR));
 | |
|   	row.add(act ? "X" : " ", sf.cid2index(F_ATTIVO));
 | |
| 		row.add(_recset.get(ANAMAG_CODFORN).as_string(), sf.cid2index(F_CODFORN));
 | |
| 		row.add(_recset.get("CLIFO.RAGSOC").as_string(), sf.cid2index(F_RAGSOC));
 | |
| 		row.add(_recset.get(ANAMAG_GIORNIRIOR).as_string(), sf.cid2index(F_LEADTIME));
 | |
| 		row.add(_recset.get(ANAMAG_LOTTORIOR).as_string(), sf.cid2index(F_LOTTOMIN));
 | |
| 		row.add(_recset.get(ANAMAG_DESCRAGG).as_string().left(50), sf.cid2index(F_DESCRAGG));
 | |
| 		row.add(_recset.get(ANAMAG_PPCONF).as_string(), sf.cid2index(F_PPCONF));
 | |
| 		row.add(_recset.get(ANAMAG_VALSTATUN).as_string(), sf.cid2index(F_VALSTATUN));
 | |
| 		row.add(_recset.get(ANAMAG_ULTCOS1).as_string(), sf.cid2index(F_ULTCOS1));
 | |
| 		row.add(_recset.get(ANAMAG_USER1).as_string(), sf.cid2index(F_USER1));
 | |
| 		row.add(_recset.get(ANAMAG_USER2).as_string(), sf.cid2index(F_USER2));
 | |
| 		row.add(_recset.get(ANAMAG_USER3).as_string(), sf.cid2index(F_USER3));
 | |
| 		row.add(_recset.get(ANAMAG_USER4).as_string(), sf.cid2index(F_USER4));
 | |
| 		row.add(_recset.get(ANAMAG_USER5).as_string(), sf.cid2index(F_USER5));
 | |
| 		row.add(_recset.get(ANAMAG_USER6).as_string(), sf.cid2index(F_USER6));
 | |
| 		row.add(_recset.get(ANAMAG_USER7).as_string(), sf.cid2index(F_USER7));
 | |
| 		row.add(_recset.get(ANAMAG_USER8).as_string(), sf.cid2index(F_USER8));
 | |
| 		row.add(_recset.get(ANAMAG_USER9).as_string(), sf.cid2index(F_USER9));
 | |
| 		row.add(_recset.get(ANAMAG_USER10).as_string(), sf.cid2index(F_USER10));
 | |
| 	}
 | |
| }
 | |
| 
 | |
| void TArt_mask::next_page(int p)
 | |
| {
 | |
| 	TAutomask::next_page(p);
 | |
| 	if (_filter_changed)
 | |
| 	{
 | |
| 		TSheet_field & sf = sfield(F_ARTICLES);
 | |
| 		if (curr_win() == sf.parent())
 | |
| 		{
 | |
| 			update_sheet();
 | |
| 			sf.force_update();
 | |
| 			_filter_changed = false;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| }
 | |
| bool TArt_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
 | |
| {
 | |
| 	switch (o.dlg())
 | |
| 	{
 | |
| 		case F_GRMERC:
 | |
| 		case F_SGRMERC:
 | |
| 		case F_SCODART:
 | |
| 		case F_SDESART:
 | |
| 		case F_SDESAGG:
 | |
| 		case F_SCODFOR:
 | |
| 		case F_SRAGSOC:
 | |
| 			if (e == fe_modify)
 | |
| 				_filter_changed = true;
 | |
| 			break;
 | |
| 		case F_SET:
 | |
| 			if (e == fe_button)
 | |
| 			{
 | |
| 				TSheet_field& sf = sfield(F_ARTICLES);
 | |
| 				const int items = sf.items();
 | |
| 				bool select = true;
 | |
| 				const int cid = sf.cid2index(F_ATTIVO);
 | |
| 				int i ;
 | |
| 
 | |
| 				for (i = 0; select && i < items; i++)
 | |
| 					select  = *sf.row (i).get(cid) <= ' ';
 | |
| 
 | |
| 				const TString4 val(select ? "X" : " ");
 | |
| 				
 | |
| 				for (i = 0; i < items; i++)
 | |
| 					sf.row(i).add(val, cid);
 | |
| 				sf.force_update();
 | |
| 			}
 | |
| 			break;
 | |
| 		case F_ACTIVEONLY:
 | |
| 			if (e == fe_modify)
 | |
| 			{
 | |
|         if (!field(F_USER).empty())
 | |
|         {
 | |
|     			update_sheet();
 | |
| 		    	sfield(F_ARTICLES).force_update();
 | |
|         }
 | |
| 			}
 | |
| 			break;
 | |
| 		default:
 | |
| 			break;
 | |
| 	}
 | |
|   return true;
 | |
| }
 | |
| 
 | |
| class TRelArticoli_multirel_app : public TMultirel_application
 | |
| {
 | |
| 	TArt_mask * _mask;
 | |
| 
 | |
| protected:
 | |
| 	virtual void get_mask_name(TString& tabname) const;
 | |
| 	//magico metodo per impedire la navigazione su tabelle diverse da quella corrente del cursore
 | |
| 	virtual bool has_filtered_cursor() const { return true; }
 | |
|   virtual bool user_create();
 | |
|   virtual bool user_destroy() ;
 | |
| 	virtual int read(TMask& m);
 | |
|   virtual int rewrite(const TMask& m);
 | |
|   virtual int write(const TMask& m) { return rewrite(m);}
 | |
|   virtual bool remove();
 | |
|   virtual void  init_insert_mode(TMask& m) { read(m); }
 | |
|   virtual bool find(word key = 0);
 | |
| 	virtual TMask* get_mask(int mode = MODE_QUERY) { return (TMask *) _mask;}
 | |
|   
 | |
| public:
 | |
| 
 | |
|   virtual const char * extra_modules() const {return "ba";}
 | |
| 
 | |
|   TRelArticoli_multirel_app() {}
 | |
|   virtual ~TRelArticoli_multirel_app() {}
 | |
| };
 | |
| 
 | |
| void TRelArticoli_multirel_app::get_mask_name(TString& tabname) const
 | |
| {
 | |
| 	tabname = "ps0430100a";
 | |
| }
 | |
| 
 | |
| bool TRelArticoli_multirel_app::user_create()
 | |
| {
 | |
| 	bool ok = TMultirel_application::user_create();
 | |
| 	_mask = new TArt_mask;
 | |
| 	return ok;
 | |
| }
 | |
| 
 | |
| bool TRelArticoli_multirel_app::user_destroy()
 | |
| {
 | |
| 	delete _mask;
 | |
| 	return true;
 | |
| }
 | |
| 
 | |
| int TRelArticoli_multirel_app::read(TMask& m)
 | |
| {
 | |
| 	const TRectype & curr = get_relation()->lfile().curr();
 | |
| 	TArt_mask & mask = (TArt_mask &) m;
 | |
| 	
 | |
| 	mask.update_sheet();
 | |
|   return NOERR;
 | |
| }
 | |
| 
 | |
| int TRelArticoli_multirel_app::rewrite(const TMask& m)
 | |
| {
 | |
| 	int err = NOERR;
 | |
| 	TSheet_field & sf = m.sfield(F_ARTICLES);
 | |
| 	TLocalisamfile multirel(LF_MULTIREL);
 | |
| 	const TString user(m.get(F_USER));
 | |
| 	
 | |
|   for (int i = 0; i < sf.items(); i++)
 | |
|   {
 | |
| 		TToken_string & row = sf.row(i);
 | |
| 		bool selected = *row.get(sf.cid2index(F_ATTIVO)) > ' ';
 | |
| 
 | |
| 		multirel.zero();
 | |
| 		multirel.put(MULTI_COD, FILE_KEY);
 | |
| 		multirel.put(MULTI_FIRST, user);
 | |
| 		multirel.put(MULTI_SECOND, row.get(sf.cid2index(F_CODART)));
 | |
| 		bool exist = multirel.read(_isequal) == NOERR;
 | |
| 
 | |
| 		if (exist && !selected)
 | |
| 			err = multirel.remove();
 | |
| 		else
 | |
| 			if (!exist && selected)
 | |
| 			{
 | |
| 				multirel.zero();
 | |
| 				multirel.put(MULTI_COD, FILE_KEY);
 | |
| 				multirel.put(MULTI_FIRST, user);
 | |
| 				multirel.put(MULTI_SECOND, row.get(sf.cid2index(F_CODART)));
 | |
| 				err = multirel.write();
 | |
| 			}
 | |
| 	}
 | |
| 	get_relation()->read(_isgteq);
 | |
| 	return err;
 | |
| }
 | |
| 
 | |
| bool TRelArticoli_multirel_app::remove()
 | |
| {
 | |
| 	int err;
 | |
| 	TLocalisamfile multirel(LF_MULTIREL);
 | |
| 	const TString user(get_mask(MODE_MOD)->get(F_USER));
 | |
| 
 | |
| 	multirel.put(MULTI_COD, FILE_KEY);
 | |
| 	multirel.put(MULTI_FIRST, user);
 | |
| 
 | |
|   for (err = multirel.read(_isgteq); err == NOERR && user == multirel.get(MULTI_FIRST); multirel.next())
 | |
| 		err = multirel.remove();
 | |
| 	return err == NOERR || err == _iseof;
 | |
| }
 | |
| 
 | |
| bool TRelArticoli_multirel_app::find(word key)
 | |
| {
 | |
| 	bool ok = false;
 | |
| 	const TString& user = get_mask(MODE_QUERY)->get(F_USER);
 | |
| 	
 | |
| 	if (user.full())
 | |
| 	{
 | |
| 		TLocalisamfile multirel(LF_MULTIREL);
 | |
| 
 | |
| 		multirel.put(MULTI_COD, FILE_KEY);
 | |
| 		multirel.put(MULTI_FIRST, user);
 | |
| 		ok = (multirel.read(_isgteq) == NOERR) && (user == multirel.get(MULTI_FIRST));
 | |
| 	}
 | |
| 	if (ok)
 | |
| 		get_relation()->read(_isgteq);
 | |
| 	return ok;
 | |
| }
 | |
| 
 | |
| int ps0430100(int argc, char* argv[])
 | |
| {
 | |
|   TRelArticoli_multirel_app a;
 | |
|   a.run(argc, argv, TR("Tabella"));
 | |
|   return 0;
 | |
| }
 |