Files correlati : co0.exe co1.exe Ricompilazione Demo : [ ] Commento : aggiunta stampa progressivi conferimenti Varie stampe dei vongolari. stampa per data licenza Modificato il tracciato dell'importazione conferimenti Non genera piu' documenti se il totale documento campione e' 0 Prima prova di filtro per stampa soci INAIL Creazione report , stampa soci inail Acconto 8% sui progressivi piu' modifiche alle stampe 8% e stampa progressivi Filtro sulla stampa co2200a per data licenza Totale sulla stampa progressivi Progressivi modificabili con shift f12 aggiunta stampa registro carico scarico Dalla versione 3.2 git-svn-id: svn://10.65.10.50/trunk@20584 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			440 lines
		
	
	
		
			9.6 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			440 lines
		
	
	
		
			9.6 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 <recset.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 "socicoop.h"
 | |
| #include "co0700b.h"
 | |
| 
 | |
| #include <user.h>
 | |
| 
 | |
| #include "colib.h"
 | |
| 
 | |
| 
 | |
| // Definizione della classe dell'applicazione motore
 | |
| class TConferimenti_application : public TMotore_application
 | |
| {
 | |
| 	TAssoc_array _masks; // assoc_array delle maschere da utilizzare
 | |
| 	TString4 _tipodoc; 
 | |
| 	real	_ritprezzo;
 | |
| 	real	_ritqta;
 | |
| 	TString_array _speserit;
 | |
| 
 | |
| protected:
 | |
|   virtual TMask* get_mask( int mode );
 | |
| 	virtual void on_firm_change();
 | |
|   virtual int read( TMask& m );
 | |
| 	int write( const TMask& m );
 | |
| 	int rewrite( const TMask& m );
 | |
| 	real get_perc_socio(const long codsocio, const TString& codcomp) const;
 | |
| 
 | |
| public:
 | |
|   virtual TMask & query_mask();
 | |
|   virtual TDocumento_mask & edit_mask() const;
 | |
| 	real ritprezzo() {return _ritprezzo;};
 | |
| 	real ritqta() {return _ritqta;};
 | |
| 	TString_array& speserit() {return _speserit;};
 | |
| 
 | |
| 	TConferimenti_application() {}
 | |
| };
 | |
| 
 | |
| inline TConferimenti_application& cfapp() { return (TConferimenti_application &) main_app(); };
 | |
| 
 | |
| // maschera di ricerca
 | |
| class TConferimenti_query_mask : public TAutomask
 | |
| {
 | |
| protected:
 | |
| public:
 | |
|   virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | |
| 
 | |
|   TConferimenti_query_mask() : TAutomask("co0700a") {}
 | |
|   virtual ~TConferimenti_query_mask() {}
 | |
| };
 | |
| 
 | |
| // maschera di edit
 | |
| class TConferimenti_mask : public TDocumento_mask
 | |
| {
 | |
| 	bool _rigaspesa;
 | |
| 
 | |
| protected:
 | |
| 
 | |
| public:
 | |
|   virtual TVariable_mask* riga_mask(int numriga);
 | |
|   TConferimenti_mask(const char* tipodoc);
 | |
|   virtual ~TConferimenti_mask() {}
 | |
| };
 | |
| 
 | |
| bool genera_handler(TMask_field& f, KEY key)
 | |
| {
 | |
| 	if (key == K_SPACE)
 | |
| 	{
 | |
| 		TConferimenti_mask& m =	(TConferimenti_mask&) f.mask();
 | |
| 		TMask select_mask("co0700b");
 | |
| 		TDocumento campione(m.doc());
 | |
| 
 | |
| 		if (campione.totale_doc() != ZERO)
 | |
| 		{
 | |
| 			const TDate datadoc = campione.get_date(DOC_DATADOC);
 | |
| 			long codsocio = campione.get_long(DOC_CODCF);
 | |
| 
 | |
| 			campione.zero(DOC_NDOC);
 | |
| 
 | |
| 			if (select_mask.run() == K_ENTER)
 | |
| 			{
 | |
| 				TISAM_recordset recset("USE SOCICOOP\nFROM CODCF=#DASOCIO\nTO CODCF=#ASOCIO");
 | |
| 
 | |
| 				recset.set_var("#DASOCIO", select_mask.get_long(F_DASOCIO));
 | |
| 				recset.set_var("#ASOCIO", select_mask.get_long(F_ASOCIO));
 | |
| 				for (bool ok = recset.move_first(); ok; ok = recset.move_next())
 | |
| 				{
 | |
| 					const long socio = recset.get(SC_CODCF).as_int();
 | |
| 
 | |
| 					if (socio != codsocio)
 | |
| 					{
 | |
| 						const TDate dataass = recset.get(SC_DATAASS).as_date();
 | |
| 						const TDate datarec = recset.get(SC_DATAREC).as_date();
 | |
| 						const bool ok = (!dataass.ok() || dataass <= datadoc) && (!datarec.ok() || datarec >= datadoc);
 | |
| 
 | |
| 						if (ok)
 | |
| 						{
 | |
| 							TDocumento d(campione);
 | |
| 
 | |
| 							d.put(DOC_CODCF, socio);
 | |
| 							d.write();
 | |
| 						}
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	return true;
 | |
| }
 | |
| 
 | |
| TConferimenti_mask::TConferimenti_mask(const char* tipodoc):
 | |
| 										TDocumento_mask(tipodoc)
 | |
| {
 | |
| 	const int pos = id2pos(499);
 | |
| 
 | |
| 	if (pos >= 0)
 | |
| 		set_handler(499, genera_handler);
 | |
| }
 | |
| 
 | |
| int TConferimenti_application::rewrite( const TMask& m )  
 | |
| {          
 | |
| 	int err = NOERR;
 | |
| 	const TTipo_documento tipodoc(m.get(172));
 | |
| 	TDocumento & doc = ((TConferimenti_mask & )m).doc();
 | |
| 
 | |
| 	if (tipodoc.tipo() == 5)
 | |
| 	{
 | |
| 		const long codmercato = m.get_long(343);
 | |
| 
 | |
| 		doc.put("SPESEUPD", false);
 | |
| 		doc.put("RAGGR", true);
 | |
| 		update_spese_doc(codmercato, doc);
 | |
| 	}
 | |
| 	
 | |
| 	const int nrows = doc.physical_rows();
 | |
| 
 | |
| 	if (tipodoc.tipo() == 6)
 | |
| 		for (int r = nrows; r >= 1; r--)
 | |
| 		{
 | |
| 			TRiga_documento & row = doc[r];
 | |
| 
 | |
| 			if (row.is_spese())
 | |
| 			{
 | |
| 				const TSpesa_prest & s = row.spesa();
 | |
| 
 | |
| 				if (s.get("S11") == "D")
 | |
| 				{
 | |
| 					real val = row.get_real(RDOC_PREZZO);
 | |
| 
 | |
| 					val = -val;
 | |
| 					row.put(RDOC_PREZZO, val);
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 	err = TMotore_application::rewrite(m);
 | |
| 	return err;
 | |
| }
 | |
| 										
 | |
| int TConferimenti_application::read( TMask& m )
 | |
| {
 | |
| 	int	err = TMotore_application::read(m);
 | |
| 	TDocumento & doc = ((TConferimenti_mask & )m).doc();
 | |
| 	TSheet_field & sf = ((TConferimenti_mask & )m).sfield(F_SHEET);
 | |
| 	const int nrows = doc.physical_rows();
 | |
| 	const TTipo_documento tipodoc(m.get(172));
 | |
| 
 | |
| 	if (err == NOERR && tipodoc.tipo() == 6)
 | |
| 	{
 | |
| 		for (int r = nrows; r >= 1; r--)
 | |
| 		{
 | |
| 			TRiga_documento & row = doc[r];
 | |
| 
 | |
| 			if (row.is_spese())
 | |
| 			{
 | |
| 				const TSpesa_prest & s = row.spesa();
 | |
| 
 | |
| 				if (s.get("S11") == "D")
 | |
| 				{
 | |
| 					real val = row.get_real(RDOC_PREZZO);
 | |
| 
 | |
| 					val = -val;
 | |
| 					row.put(RDOC_PREZZO, val);
 | |
| 					row.autoload(sf);;
 | |
| 				}
 | |
| 			}
 | |
| 			sf.force_update();
 | |
| 		}
 | |
| 	} 
 | |
| 	return err;
 | |
| }
 | |
| 
 | |
| int TConferimenti_application::write( const TMask& m )  
 | |
| {          
 | |
| 	int err = NOERR;
 | |
| 	TDocumento & doc = ((TConferimenti_mask & )m).doc();
 | |
| 	const int nrows = doc.physical_rows();
 | |
| 	bool zero_doc = true;
 | |
| 	const TTipo_documento tipodoc(m.get(172));
 | |
| 
 | |
| 	for (int r = nrows; r >= 1; r--)
 | |
| 	{
 | |
| 		TRiga_documento & row = doc[r];
 | |
| 
 | |
| 		if (row.imponibile() != ZERO)
 | |
| 		{
 | |
| 			zero_doc = false;
 | |
| 			if (tipodoc.tipo() == 6	&& row.is_spese())
 | |
| 			{
 | |
| 			  const TSpesa_prest & s = row.spesa();
 | |
| 
 | |
| 				if (s.get("S11") == "D")
 | |
| 				{
 | |
| 					real val = row.get_real(RDOC_PREZZO);
 | |
| 
 | |
| 					val = -val;
 | |
| 					row.put(RDOC_PREZZO, val);
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	if (zero_doc)
 | |
| 		return false;
 | |
| 
 | |
| 	if (tipodoc.tipo() == 5)
 | |
| 	{
 | |
| 		const char confda = m.get(401)[0];
 | |
| 		const long codmercato = m.get_long(343);
 | |
| 		if (confda=='S') // conferimento da socio
 | |
| 		{
 | |
| 			TDocumento & doc = ((TConferimenti_mask & )m).doc();
 | |
| 			doc.put("SPESEUPD", false);
 | |
| 			doc.put("RAGGR", true);
 | |
| 			update_spese_doc(codmercato, doc);
 | |
| 			err = TMotore_application::write(m);
 | |
| 		}
 | |
| 		else	// conferimento da compagnia
 | |
| 		{
 | |
| 			TDocumento& doc = ((TConferimenti_mask&) m).doc();
 | |
| 			if (doc.physical_rows() > 0)
 | |
| 			{
 | |
| 				const long nfasta	= m.get_long(345);
 | |
| 				const TString8 codcomp = m.get(344);
 | |
| 				TLista_documenti listadoc;
 | |
| 				if (compagnia2soci(doc, codcomp, codmercato, nfasta, listadoc) > 0)
 | |
| 					err = listadoc.write();
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	else
 | |
| 		err = TMotore_application::write(m);
 | |
| 	return err;
 | |
| }
 | |
| 
 | |
| void TConferimenti_application::on_firm_change()
 | |
| {
 | |
| 	TConfig d(CONFIG_DITTA, "co");
 | |
| 	_ritprezzo = real(d.get("RitPrezzo"));
 | |
| 	_ritqta = real(d.get("RitQta"));
 | |
| }
 | |
| 
 | |
| TMask& TConferimenti_application::query_mask()
 | |
| {
 | |
| 	TMask* m = (TMask*) _masks.objptr("co0700a");
 | |
| 	if (m == NULL)
 | |
| 	{
 | |
| 		m = new TConferimenti_query_mask();
 | |
| 		_masks.add("co0700a", m);
 | |
| 	}
 | |
| 	return *m;
 | |
| }
 | |
| 
 | |
| TDocumento_mask& TConferimenti_application::edit_mask() const
 | |
| {
 | |
| 	TDocumento_mask* m = (TDocumento_mask*) _masks.objptr(_tipodoc);
 | |
| 	if (m == NULL)
 | |
| 	{
 | |
| 		m = new TConferimenti_mask(_tipodoc);
 | |
| 		((TAssoc_array&)_masks).add(_tipodoc, m);
 | |
| 	}
 | |
| 	return *m;
 | |
| }
 | |
| 
 | |
| TMask* TConferimenti_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;
 | |
| }
 | |
| 
 | |
| bool TConferimenti_query_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
 | |
| {
 | |
| 	switch (o.dlg())
 | |
| 	{
 | |
| 		case F_ANNO:
 | |
| 			if (e == fe_modify)
 | |
| 				app().update_navigation_bar();
 | |
| 			break;
 | |
| 		case F_CODNUM:
 | |
| 			if (e == fe_modify)
 | |
| 			{
 | |
| 				TMask& m = o.mask();
 | |
|     
 | |
| 				TTable & tabnum  = ((TTable &) ((TEdit_field &)o).browse()->cursor()->file());
 | |
| 				if ( tabnum.good())
 | |
| 				{
 | |
| 					TCodice_numerazione cod_num(tabnum.curr());
 | |
| 					m.set( F_DESNUM, cod_num.descrizione());
 | |
| 					// Propone il primo tipo di documento come default
 | |
| 					if (m.field(F_TIPODOC).empty() || o.focusdirty())
 | |
| 					{
 | |
| 						m.set( F_TIPODOC, cod_num.tipo_doc(0));
 | |
| 						m.send_key( K_TAB, F_TIPODOC );
 | |
| 					}
 | |
| 						// Setta la numerazione a definitiva
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					m.set( F_DESNUM, "" );
 | |
| 					m.set( F_TIPODOC, "" );
 | |
| 				}
 | |
| 
 | |
| 				app().update_navigation_bar();
 | |
| 			}
 | |
| 			break;
 | |
| 		case F_TIPODOC:
 | |
| 			if (e == fe_modify)
 | |
| 			{
 | |
| 				TMask& m = o.mask();
 | |
| 
 | |
| 				if (m.get(F_TIPODOC).full())
 | |
| 				{
 | |
| 					TCodice_numerazione cod_num(m.get(F_CODNUM));
 | |
| 					const TString& tipo = o.get();
 | |
| 					int last = cod_num.ntipi_doc();
 | |
| 					for (int i = 0; i < last; i++ )
 | |
| 					{
 | |
| 						const TString& curtipo = cod_num.tipo_doc(i);
 | |
| 						if (curtipo == tipo)
 | |
| 							return TRUE;
 | |
| 					}
 | |
| 					return o.error_box(TR("Tipo non valido per la numerazione selezionata!"));
 | |
| 				}
 | |
| 			}
 | |
| 			break;
 | |
| 		case F_NUMDOCRIF:
 | |
| 			if (e == fe_button)
 | |
| 				TDocumento_mask::numdocrif_search_handler(o, K_F9);
 | |
| 			break;
 | |
| 		case F_RAGSOCSEARCH:
 | |
| 			if (e == fe_button)
 | |
| 				TDocumento_mask::ragsoc_search_handler(o, K_F9);
 | |
| 			break;
 | |
| 
 | |
| 		default:
 | |
| 			break;
 | |
| 	}
 | |
| 
 | |
|   return true;
 | |
| }
 | |
| 
 | |
| bool confer_codart_handler(TMask_field& f, KEY key)
 | |
| {
 | |
| 	bool ok = codart_handler(f, key);
 | |
|   TMask& row_mask = f.mask();   
 | |
| 
 | |
| 	if (ok && f.to_check(key))
 | |
| 	{
 | |
|     row_mask.set(FR_SCONTO, cfapp().ritprezzo(), true);
 | |
| 
 | |
| 		const TString & cod = row_mask.get(FR_CODARTMAG);
 | |
| 		
 | |
| 		if (cod.full())
 | |
| 		{
 | |
| 			const TString & codiva = cache().get(LF_ANAMAG, cod, ANAMAG_CODIVA);
 | |
| 			if (codiva.full())
 | |
| 				row_mask.set(FR_CODIVA, codiva);		
 | |
| 		}
 | |
| 	}
 | |
| 	return ok;
 | |
| }
 | |
| 
 | |
| bool confer_qtagg1_handler(TMask_field& f, KEY key)
 | |
| {
 | |
| 	if (f.to_check(key))
 | |
| 	{
 | |
| 	  TMask& row_mask = f.mask();   
 | |
| 		real qtagg1 = f.get();
 | |
| 		real qta = qtagg1*cfapp().ritqta()/CENTO;
 | |
|     row_mask.set(FR_QTA, qtagg1-qta, true);
 | |
| 	}
 | |
| 	return true;
 | |
| }
 | |
| 
 | |
| TVariable_mask* TConferimenti_mask::riga_mask(int numriga)
 | |
| {
 | |
| 	TVariable_mask* m = TDocumento_mask::riga_mask(numriga);
 | |
|   const TRiga_documento& riga = doc()[numriga + 1];
 | |
|   const TTipo_riga_documento& tiporiga = riga.tipo();
 | |
| 	if (tiporiga.tipo() == 'M') // riga merce
 | |
| 	{
 | |
| 		m->set_handler(FR_CODART, confer_codart_handler);
 | |
| 		m->set_handler(FR_QTAGG1, confer_qtagg1_handler);
 | |
| 	}
 | |
|   return m;
 | |
| }
 | |
| 
 | |
| int co0700( int argc, char* argv[])
 | |
| {
 | |
|   TConferimenti_application a;
 | |
| 
 | |
|   a.run( argc, argv, TR("Conferimenti cooperative"));
 | |
|   return 0;
 | |
| }
 |