Files correlati : pc0001.exe Ricompilazione Demo : [ ] Commento : Gestione Commesse GAM git-svn-id: svn://10.65.10.50/trunk@17024 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			260 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			260 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#include "../ve/velib.h"
 | 
						|
#include "../ve/sconti.h"
 | 
						|
#include "../mg/mglib.h"
 | 
						|
 | 
						|
#include "../ve/vepriv.h"
 | 
						|
#include "../ve/veuml.h"
 | 
						|
 | 
						|
#include <automask.h>
 | 
						|
#include <defmask.h>
 | 
						|
#include <execp.h>
 | 
						|
#include <agasys.h>
 | 
						|
#include <tabutil.h>
 | 
						|
#include <utility.h>
 | 
						|
 | 
						|
#include "../mg/anamag.h"
 | 
						|
#include "../ve/ve0100.h"
 | 
						|
#include "../ve/veini.h"
 | 
						|
#include "../ve/veuml.h"
 | 
						|
#include "../ve/veuml1.h"
 | 
						|
#include "../ve/verig.h"
 | 
						|
 | 
						|
#include <clifo.h>
 | 
						|
#include "pc0001.h"
 | 
						|
 | 
						|
class TCommesse_mask : public TDocumento_mask
 | 
						|
{
 | 
						|
	TBit_array	_modified_rows;
 | 
						|
	TBit_array	_deleted_rows;
 | 
						|
	int _last_row;
 | 
						|
 | 
						|
protected:
 | 
						|
	static bool cc_notify(TSheet_field& ss, int r, KEY key);
 | 
						|
 | 
						|
 | 
						|
public:
 | 
						|
	TBit_array & modified_rows() { return  _modified_rows;}
 | 
						|
	TBit_array & deleted_rows() {return _deleted_rows;}
 | 
						|
	void reset_last_row() { _last_row = -1;}
 | 
						|
	void set_last_row(int r) { _last_row = r;}
 | 
						|
	int last_row() const { return _last_row;}
 | 
						|
	bool modified(long idriga) const{ return _modified_rows[(int)idriga];}
 | 
						|
	bool deleted(long idriga) const {return _deleted_rows[(int)idriga];}
 | 
						|
  TCommesse_mask(const char* tipodoc);
 | 
						|
  virtual ~TCommesse_mask() {}
 | 
						|
};
 | 
						|
 | 
						|
bool TCommesse_mask::cc_notify( TSheet_field& ss, int r, KEY key )
 | 
						|
{
 | 
						|
  TCommesse_mask& m = (TCommesse_mask&)ss.mask();
 | 
						|
  TDocumento& doc = m.doc();
 | 
						|
 | 
						|
  if ( key == K_ENTER )
 | 
						|
  {
 | 
						|
    TRiga_documento& riga = doc[r + 1];
 | 
						|
		const long idriga = riga.get_long(RDOC_IDRIGA);
 | 
						|
 | 
						|
		m.modified_rows().set(idriga);
 | 
						|
  }
 | 
						|
	else
 | 
						|
		if ( key == K_TAB && m.is_running() && m.last_row() != r)
 | 
						|
		{
 | 
						|
			m.set_last_row(r);
 | 
						|
			TRiga_documento& riga = doc[r + 1];
 | 
						|
			const long idriga = riga.get_long(RDOC_IDRIGA);
 | 
						|
 | 
						|
			if (!m.modified(idriga))
 | 
						|
			{
 | 
						|
				TToken_string key;
 | 
						|
				key.add(riga.get(RDOC_CODNUM));
 | 
						|
				key.add(riga.get(RDOC_ANNO));
 | 
						|
				key.add(riga.get(RDOC_PROVV));
 | 
						|
				key.add(riga.get(RDOC_NDOC));
 | 
						|
				for (int i = 1; ; i++)
 | 
						|
				{
 | 
						|
					key.add(i, 4);
 | 
						|
 | 
						|
					const TRectype& rec = cache().get(LF_RIGHEDOC, key);
 | 
						|
 | 
						|
					if (rec.empty()) break;
 | 
						|
					if (rec.get_long(RDOC_IDRIGA) == idriga)
 | 
						|
					{
 | 
						|
						TDocumento::copy_data(riga, rec);
 | 
						|
						riga.autoload(ss);
 | 
						|
						ss.check_row(r, 0x2);
 | 
						|
						ss.force_update(r);
 | 
						|
						break;
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		else
 | 
						|
			if ( key == K_DEL ) // Cancellazione
 | 
						|
			{
 | 
						|
				TRiga_documento& riga = doc[r + 1];
 | 
						|
				const long idriga = riga.get_long(RDOC_IDRIGA);
 | 
						|
 | 
						|
				m.deleted_rows().set(idriga);
 | 
						|
				m.modified_rows().set(idriga, false);
 | 
						|
			}
 | 
						|
			else
 | 
						|
				if (key == K_CTRL + K_INS)
 | 
						|
				{
 | 
						|
					doc.set_row_ids();
 | 
						|
					TRiga_documento & riga = doc[r + 1];
 | 
						|
					const long idriga = riga.get_long(RDOC_IDRIGA);
 | 
						|
 | 
						|
					m.modified_rows().set(idriga);
 | 
						|
				}
 | 
						|
	return TDocumento_mask::ss_notify(ss, r,key);
 | 
						|
}
 | 
						|
 | 
						|
TCommesse_mask::TCommesse_mask(const char* tipodoc):
 | 
						|
										TDocumento_mask(tipodoc), _last_row(-1)
 | 
						|
{
 | 
						|
  sfield(F_SHEET).set_notify( cc_notify );
 | 
						|
}
 | 
						|
 | 
						|
// Definizione della classe dell'applicazione motore
 | 
						|
class TCommesse_application : public TMotore_application
 | 
						|
{
 | 
						|
	TAssoc_array _masks; // assoc_array delle maschere da utilizzare
 | 
						|
	TString4 _tipodoc; 
 | 
						|
	TBit_array	_modified;
 | 
						|
 | 
						|
protected:
 | 
						|
  virtual TMask* get_mask( int mode );
 | 
						|
  virtual int read( TMask& m );
 | 
						|
  virtual int rewrite( const TMask& m );
 | 
						|
 | 
						|
public:
 | 
						|
  virtual TMask & query_mask();
 | 
						|
  virtual TDocumento_mask & edit_mask() const;
 | 
						|
 | 
						|
	TCommesse_application() {}
 | 
						|
};
 | 
						|
 | 
						|
inline TCommesse_application& pcapp() { return (TCommesse_application &) main_app(); };
 | 
						|
 | 
						|
TMask& TCommesse_application::query_mask()
 | 
						|
{
 | 
						|
	TMask* m = (TMask*) _masks.objptr("pc0001100a");
 | 
						|
	if (m == NULL)
 | 
						|
	{
 | 
						|
		m = new TMask("pc0001100a");
 | 
						|
		_masks.add("pc0001100a", m);
 | 
						|
	}
 | 
						|
	return *m;
 | 
						|
}
 | 
						|
 | 
						|
TDocumento_mask& TCommesse_application::edit_mask() const
 | 
						|
{
 | 
						|
	TDocumento_mask* m = (TDocumento_mask*) _masks.objptr(_tipodoc);
 | 
						|
	if (m == NULL)
 | 
						|
	{
 | 
						|
		m = new TCommesse_mask(_tipodoc);
 | 
						|
		((TAssoc_array&)_masks).add(_tipodoc, m);
 | 
						|
	}
 | 
						|
	return *m;
 | 
						|
}
 | 
						|
 | 
						|
TMask* TCommesse_application::get_mask( int mode )
 | 
						|
{
 | 
						|
	TMask* m = NULL;
 | 
						|
	if (mode == MODE_MOD || mode == MODE_INS)
 | 
						|
	{
 | 
						|
		_tipodoc = query_mask().get(F_TIPODOC);
 | 
						|
		m = &edit_mask();
 | 
						|
	}
 | 
						|
	else
 | 
						|
		m = &query_mask();
 | 
						|
	return m;
 | 
						|
}
 | 
						|
 | 
						|
// maschera di ricerca
 | 
						|
// maschera di edit
 | 
						|
int TCommesse_application::read(TMask& m )  
 | 
						|
{          
 | 
						|
	TCommesse_mask & mask = (TCommesse_mask &) m;
 | 
						|
	mask.modified_rows().reset();
 | 
						|
	mask.deleted_rows().reset();
 | 
						|
	mask.reset_last_row();
 | 
						|
 | 
						|
	const int err = TMotore_application::read(m);
 | 
						|
	if (err == NOERR)
 | 
						|
		((TDocumento_mask &) m).doc().read(_isequal, _unlock);
 | 
						|
	return err;
 | 
						|
}
 | 
						|
 | 
						|
int TCommesse_application::rewrite( const TMask& m )  
 | 
						|
{          
 | 
						|
	int err = NOERR;
 | 
						|
	const TCommesse_mask & mask = (const TCommesse_mask &) m;
 | 
						|
	const TDocumento & maskdoc = mask.doc();
 | 
						|
	TDocumento outdoc = maskdoc;
 | 
						|
	while ((err = outdoc.read(_isequal, _testandlock)) == _islocked)
 | 
						|
		xvt_sys_sleep (500);
 | 
						|
	if (err == NOERR)
 | 
						|
	{
 | 
						|
	  for (int p = mask.fields()-1; p >= 0; p--)
 | 
						|
		{
 | 
						|
			TMask_field& f = mask.fld(p);
 | 
						|
			const TFieldref* fr = f.field();
 | 
						|
			if (fr != NULL)
 | 
						|
				fr->write(f.get(), outdoc);
 | 
						|
	  }
 | 
						|
 | 
						|
		int outrows = outdoc.physical_rows();
 | 
						|
		
 | 
						|
		for (int j = outrows; j > 1; j--)
 | 
						|
		{
 | 
						|
			TRiga_documento & outrow = outdoc[j];
 | 
						|
			const long idriga = outrow.get_long(RDOC_IDRIGA);
 | 
						|
 | 
						|
			if (mask.deleted(idriga))
 | 
						|
				outdoc.destroy_row(j, true);
 | 
						|
		}
 | 
						|
		outrows = outdoc.physical_rows();
 | 
						|
		const int rows = maskdoc.physical_rows();
 | 
						|
		for (int i = 1; i <= rows; i++)
 | 
						|
		{
 | 
						|
			const TRiga_documento & row = maskdoc[i];
 | 
						|
			const long idriga = row.get_long(RDOC_IDRIGA);
 | 
						|
 | 
						|
			if (mask.modified(idriga))
 | 
						|
			{
 | 
						|
				bool newrow = true;
 | 
						|
 | 
						|
				for (int j = 1; newrow && j <= outrows; j++)
 | 
						|
				{
 | 
						|
					TRiga_documento & outrow = outdoc[j];
 | 
						|
					
 | 
						|
					if (idriga == outrow.get_int(RDOC_IDRIGA))
 | 
						|
					{
 | 
						|
						TDocumento::copy_data(outrow, row);
 | 
						|
						newrow = false;
 | 
						|
					}
 | 
						|
				}
 | 
						|
				if (newrow)
 | 
						|
				{
 | 
						|
					outdoc.insert_row(i);
 | 
						|
					
 | 
						|
					TRiga_documento & outrow = outdoc[i];
 | 
						|
					
 | 
						|
					TDocumento::copy_data(outrow, row);
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		err = outdoc.rewrite();
 | 
						|
	}
 | 
						|
	return err;
 | 
						|
}
 | 
						|
										
 | 
						|
int pc0001100( int argc, char* argv[])
 | 
						|
{
 | 
						|
  TCommesse_application a;
 | 
						|
 | 
						|
  a.run( argc, argv, TR("Commesse GAM"));
 | 
						|
  return 0;
 | 
						|
}
 |