Files correlati : ve6.exe Ricompilazione Demo : [ ] Commento : Riportata la versione 3.1 patch 979 git-svn-id: svn://10.65.10.50/trunk@15623 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			271 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			271 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| #include "velib.h"
 | |
| #include "ve6700a.h"
 | |
| 
 | |
| #include <applicat.h>     
 | |
| #include <automask.h>     
 | |
| #include <config.h>     
 | |
| #include <defmask.h>
 | |
| #include <execp.h>
 | |
| #include <incstr.h>
 | |
| #include <golem.h>     
 | |
| #include <prefix.h>
 | |
|                     
 | |
| #include <clifo.h>                    
 | |
| #include <doc.h>                    
 | |
| #include <rdoc.h>                    
 | |
|                     
 | |
| #include "ve6700a.h"
 | |
| #include "velib04.h"
 | |
| #include "../mg/mglib.h"
 | |
| 
 | |
| ///////////////////////////////////////////////////////////
 | |
| // Maschera principale
 | |
| ///////////////////////////////////////////////////////////
 | |
| 
 | |
| class TCopia_interattiva_mask : public TAutomask
 | |
| {
 | |
| protected:
 | |
|   virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | |
| 
 | |
| public:                         
 | |
|   TCopia_interattiva_mask() : TAutomask("ve6700a") {}
 | |
|   virtual ~TCopia_interattiva_mask() {}
 | |
| };
 | |
| 
 | |
| bool TCopia_interattiva_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
 | |
| {
 | |
|   switch (o.dlg())
 | |
|   {
 | |
|   case DLG_SAVEREC:
 | |
|     if (e == fe_button)
 | |
| 	    stop_run(K_AUTO_ENTER);
 | |
|     break;  
 | |
|   default:
 | |
|     break;
 | |
|   }
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| ///////////////////////////////////////////////////////////
 | |
| // Applicazione principale
 | |
| ///////////////////////////////////////////////////////////
 | |
| 
 | |
| class TCopia_interattiva : public TSkeleton_application
 | |
| { 
 | |
| 	TDocumento  * _outdoc;
 | |
| 	TDocumento  * _indoc;
 | |
| 	TFilename _ini_name;
 | |
| 	TArray _arts;
 | |
| 	TString4 _num_in, _stato_in, _tipo_doc;
 | |
| 	long _firm;
 | |
| 	char _stato_fin;
 | |
| 	bool _copy_header;
 | |
| 
 | |
| public:
 | |
| 	bool load();
 | |
| 	bool load_indoc(const TMask & m);
 | |
| 	bool aggiorna_in();
 | |
| 	void copia_doc();
 | |
|   virtual void main_loop();
 | |
| };        
 | |
| 
 | |
| bool TCopia_interattiva::load()
 | |
| { 
 | |
| 	bool ok = false;
 | |
| 
 | |
|   if (argc() > 2)
 | |
| 	{
 | |
| 		const TString& arg = argv(2);
 | |
| 		if ((arg[0] != '-' && arg[0] != '/') || (arg[1] != 'i' && arg[1] != 'I'))
 | |
| 			return false;
 | |
|     
 | |
| 		_ini_name = arg.mid(2);
 | |
| 		if (_ini_name.blank() && argc() > 3)  
 | |
| 			_ini_name = argv(3);
 | |
|     
 | |
| 		if (_ini_name.exist())  
 | |
| 		{
 | |
| 			TConfig ini(_ini_name, "Transaction");
 | |
| 			const char provv = ini.get_char("ProvvOut");
 | |
| 			const int anno = ini.get_int("AnnoOut");
 | |
| 			const TString16 codnum(ini.get("CodNumOut"));
 | |
| 			const long numdoc = ini.get_long("NDocOut");
 | |
| 
 | |
| 	    const TElaborazione_esterna ee(ini.get("Action"));
 | |
| 			_num_in = ee.codice_numerazione_iniziale();
 | |
| 			_stato_in << ee.stato_iniziale(0);
 | |
| 			_stato_fin = ee.stato_finale_doc_iniziale()[0];
 | |
| 			_copy_header = ee.aggiorna_testata_se_vuoto();
 | |
|  
 | |
| 			ok = _outdoc->read(provv, anno, codnum, numdoc) == NOERR;
 | |
| 
 | |
| 			const int i = _outdoc->physical_rows();
 | |
| 
 | |
| 			TString16 para;	para.format("%d", LF_DOC);
 | |
| 			_tipo_doc = ini.get(DOC_TIPODOC, para);
 | |
| 			_firm = -1;
 | |
| 
 | |
| 			if (ok)
 | |
| 			{
 | |
| 				TFilename c("ve6700.ini");
 | |
| 				if (c.custom_path())
 | |
| 				{
 | |
| 					TConfig val(c);
 | |
| 				
 | |
| 					_firm = val.get_long("Firm", "Main", -1, -1L);
 | |
| 
 | |
|   				TString16 para;
 | |
| 					TString tmp;
 | |
| 					
 | |
| 					para.format("%d", LF_DOC);
 | |
| 					val.set_paragraph(para);
 | |
| 					TAssoc_array& vars = val.list_variables();
 | |
| 					FOR_EACH_ASSOC_STRING(vars, obj, key, str)
 | |
| 					{
 | |
| 						if (*str == '"')
 | |
| 						{
 | |
| 							tmp = str;
 | |
| 							tmp.strip("\"");
 | |
| 							str = tmp;
 | |
| 						}
 | |
| 						_outdoc->put(key, str);
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
|   return ok;
 | |
| }
 | |
| 
 | |
| bool TCopia_interattiva::load_indoc(const TMask& m)
 | |
| { 
 | |
|   // Uso avanzatissimo: m.get(NOME_CAMPO) invece di m.get(IDENTIFICATORE_CAMPO)
 | |
| 	const char provv      = m.get(DOC_PROVV)[0];
 | |
| 	const int anno        = atoi(m.get(DOC_ANNO));
 | |
| 	const TString4 codnum = m.get(DOC_CODNUM);
 | |
| 	const long numdoc     = atol(m.get(DOC_NDOC));
 | |
| 
 | |
|   const bool ok = numdoc > 0 && _indoc->read(provv, anno, codnum, numdoc) == NOERR;
 | |
| 	if (ok)
 | |
| 	{
 | |
|   	const int rows = _indoc->physical_rows();
 | |
| 		for (int i = 1; i <= rows; i++)
 | |
| 		{
 | |
| 			const TRiga_documento& r = (*_indoc)[i];
 | |
| 			if (r.is_articolo())
 | |
| 			{
 | |
|         const TString& codice = r.get(RDOC_CODARTMAG);
 | |
| 				TArticolo* art = new TArticolo(codice);
 | |
| 			  art->um();
 | |
| 				art->deslin();
 | |
| 				art->codcorr();
 | |
| 				_arts.add(art);
 | |
| 			}
 | |
| 			const TString & memo = r.get(RDOC_DESCEST); // Forza lettura memo!
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	return ok;
 | |
| }
 | |
| 
 | |
| bool TCopia_interattiva::aggiorna_in()
 | |
| { 
 | |
| 	_indoc->stato(_stato_fin);
 | |
| 	const int err = _indoc->rewrite();
 | |
| 
 | |
| 	if (err != NOERR)
 | |
| 		return error_box(FR("Errore %d di riscrittura del documento sorgente"), err);
 | |
| 
 | |
| 	const int rows = _indoc->physical_rows();
 | |
| 
 | |
| 	for (int j = 1; j <= rows; j++)
 | |
| 	{
 | |
|     const TRiga_documento& rin = (*_indoc)[j]; 
 | |
|     TRiga_documento& rout = _outdoc->new_row(); // ... crea una riga nuova e 
 | |
| 
 | |
|     _outdoc->copy_data(rout, rin);              // copiaci tutti i campi della riga sorgente.
 | |
|     rout.reset_original_rdoc_key();             // cancella riferimenti inutili
 | |
| 	}
 | |
| 	
 | |
| 	return err == NOERR;
 | |
| }
 | |
| 
 | |
| void TCopia_interattiva::copia_doc()
 | |
| { 
 | |
| 	_outdoc->reset_memo();
 | |
| 
 | |
| 	const int rows = _outdoc->physical_rows();
 | |
| 	for (int j = 1; j <= rows; j++)
 | |
| 	{
 | |
| 		TRiga_documento& r = (*_outdoc)[j];
 | |
| 		r.reset_memo();
 | |
| 	}
 | |
| 	
 | |
| 	const int err = _outdoc->rewrite();
 | |
| 	if (err != NOERR)
 | |
| 	{
 | |
| 		error_box(FR("Errore %d di riscrittura del documento destinazione"), err);
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
|   TLocalisamfile anamag(LF_ANAMAG);
 | |
| 	FOR_EACH_ARRAY_ITEM(_arts, i, o)
 | |
| 	{
 | |
| 		TArticolo* art = (TArticolo *) o;
 | |
| 
 | |
| 		anamag.put(ANAMAG_CODART, art->codice());
 | |
| 		if (anamag.read() != NOERR)
 | |
| 		{
 | |
| 			const int err = art->write(anamag);
 | |
| 			if (err != NOERR)
 | |
| 				error_box(FR("Errore %d nella scrittura dell'articolo %s"), 
 | |
|                   err, (const char*)art->codice());
 | |
| 		}
 | |
| 	}
 | |
| 	TConfig ini(_ini_name, "Main");
 | |
| 	ini.set("Result", "OUTDOC");
 | |
| }
 | |
| 
 | |
| void TCopia_interattiva::main_loop()
 | |
| {                
 | |
|   open_files(LF_TAB, LF_TABCOM, LF_DOC, LF_RIGHEDOC, LF_MOVMAG, NULL);
 | |
|   open_files(LF_ANAMAG, LF_CLIFO, LF_CFVEN, LF_OCCAS, LF_RMOVMAG, NULL);
 | |
| 	
 | |
|   _outdoc = new TDocumento; // _outdoc serve nella load
 | |
|   if (load())
 | |
| 	{
 | |
| 		const long the_firm = get_firm();
 | |
| 		int err = safely_close_closeable_isamfiles();
 | |
| 
 | |
| 		set_firm(_firm);
 | |
| 		_indoc = new TDocumento();
 | |
| 
 | |
|     TCopia_interattiva_mask m;
 | |
| 		m.set(F_CODDITTA, _firm, true);
 | |
| 		m.set(F_CODNUM, _num_in);
 | |
| 		m.set(F_STATO, _stato_in);
 | |
| 		m.set(F_TIPODOC, _tipo_doc);
 | |
| 		
 | |
| 		KEY k = m.run();
 | |
| 		
 | |
| 		bool ok = true;
 | |
| 
 | |
| 		ok = load_indoc(m);
 | |
| 		if (ok)
 | |
| 			ok = aggiorna_in();
 | |
| 		delete _indoc;
 | |
| 		err = safely_close_closeable_isamfiles();
 | |
| 		set_firm(the_firm);
 | |
| 		copia_doc();
 | |
| 	}
 | |
| 	delete _outdoc;
 | |
| }
 | |
| 
 | |
| int ve6700(int argc, char** argv)
 | |
| {
 | |
|   TCopia_interattiva app;
 | |
| 
 | |
| 	app.run(argc, argv, TR("Trasferimento documenti"));
 | |
|   return 0;
 | |
| }
 |