Files correlati : Ricompilazione Demo : [ ] Commento : Riportata la versione 3.1 patch 650 git-svn-id: svn://10.65.10.50/trunk@14148 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			293 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			293 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| 
 | |
| #include <applicat.h>
 | |
| #include <automask.h>
 | |
| #include <config.h>
 | |
| #include <execp.h>
 | |
| #include <filetext.h>
 | |
| #include <progind.h>
 | |
| #include <printer.h>
 | |
| #include <recarray.h>
 | |
| #include <strings.h>
 | |
| #include <utility.h>
 | |
| 
 | |
| #include "pd1579.h"
 | |
| #include "pd1579100a.h"
 | |
| 
 | |
| #include "clifo.h"
 | |
| #include "comuni.h"
 | |
| 
 | |
| // TAutomask
 | |
| 
 | |
| class TImpClienti_mask : public TAutomask
 | |
| {
 | |
| protected:
 | |
|   bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | |
| public:
 | |
|   TImpClienti_mask();
 | |
|   virtual ~TImpClienti_mask(){};
 | |
| };
 | |
|   
 | |
| TImpClienti_mask::TImpClienti_mask() :TAutomask ("pd1579100a")
 | |
| {
 | |
| }  
 | |
| 
 | |
| bool TImpClienti_mask::on_field_event(TOperable_field& f, TField_event e, long jolly)
 | |
| { 
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| // TFile_text
 | |
| 
 | |
| class TImpClienti_file: public TFile_text
 | |
| { 
 | |
| protected:
 | |
|   virtual void validate(TCursor& cur,TRecord_text &rec, TToken_string &val, TString& str);
 | |
| 
 | |
| public:
 | |
|   TImpClienti_file(const TString& file_name);
 | |
|   virtual ~TImpClienti_file() { }
 | |
| };
 | |
| 
 | |
| TImpClienti_file::TImpClienti_file(const TString& file_name)
 | |
|           : TFile_text(file_name, "pd1579100a.ini")
 | |
| {
 | |
| }
 | |
| 
 | |
| void TImpClienti_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TString& str)
 | |
| {
 | |
|   const TString code(s.get(0));
 | |
|   TString valore = str;
 | |
|   if (code == "_UPPERCASE")
 | |
|   {
 | |
|     valore.upper(); 
 | |
|   }
 | |
|   else NFCHECK("Macro non definita: %s", (const char *)code);
 | |
|   str = valore;
 | |
| } 
 | |
| 
 | |
| // TSkeleton_application
 | |
| 
 | |
| class TImpClienti : public TSkeleton_application
 | |
| {
 | |
| 	TImpClienti_mask*	_msk;
 | |
| 	TImpClienti_file* _trasfile;
 | |
| 	TLocalisamfile* _clienti;
 | |
| 	TConfig*		    _configfile;
 | |
|   TRelation*      _rel;
 | |
|   TCursor*        _cur;
 | |
|   TProgind*       _prog;  
 | |
| 
 | |
|   long    _numreg;
 | |
| 
 | |
| 	virtual const char * extra_modules() const {return "ba";}
 | |
| 
 | |
| public:           
 | |
|   bool print_header();
 | |
|   void print_line(const TString& rigastampa = "");
 | |
|   void print_footer();
 | |
| 	virtual bool create();
 | |
|   virtual bool destroy();
 | |
|   virtual void main_loop();
 | |
| 	bool transfer();
 | |
| 	const long get_nextcodcf();
 | |
|   TImpClienti() {}
 | |
| };
 | |
| 
 | |
| TImpClienti& app() { return (TImpClienti&) main_app(); }
 | |
| 
 | |
| bool TImpClienti::print_header()
 | |
| {
 | |
| 	if (printer().open())
 | |
| 	{
 | |
| 		TDate oggi(TODAY);
 | |
| 		TPrintrow row;
 | |
| 		TString256 rigastampa;
 | |
| 		rigastampa = "IMPORTAZIONE CLIENTI";
 | |
| 		rigastampa.center_just(80);
 | |
| 		row.put(rigastampa);
 | |
|   	row.put("@>", 1);
 | |
|   	row.put("Pag. @#", 65);
 | |
|   	printer().setheaderline(2, row);
 | |
| 		rigastampa = "";
 | |
| 		rigastampa.fill('-',80);
 | |
| 		row.reset();
 | |
| 		row.put(rigastampa);
 | |
| 		printer().setheaderline(3, row);
 | |
| 		return TRUE;
 | |
| 	}
 | |
| 	else
 | |
| 		return error_box("Errore in apertura stampante.");	
 | |
| }		
 | |
| 
 | |
| void TImpClienti::print_line(const TString& rigastampa)
 | |
| {                        
 | |
| 	TPrintrow row;
 | |
| 	row.reset();
 | |
| 	if (rigastampa.not_empty())
 | |
| 	{                    
 | |
| 		row.put((const char*) rigastampa);
 | |
| 		printer().print(row);			
 | |
| 	}
 | |
| }
 | |
| 
 | |
| void TImpClienti::print_footer()
 | |
| {                     
 | |
| 	printer().formfeed();
 | |
| 	printer().close();
 | |
| }
 | |
| 
 | |
|                                    
 | |
| bool TImpClienti::create()
 | |
| {
 | |
|   open_files(LF_CLIFO, 0);
 | |
| 	TFilename configname = "pd1579100.ini";
 | |
| 	configname.custom_path();
 | |
|   _configfile = new TConfig(configname);
 | |
|   _msk = new TImpClienti_mask();
 | |
| 	_clienti = new TLocalisamfile(LF_CLIFO);       
 | |
|   return TSkeleton_application::create();
 | |
| }
 | |
| 
 | |
| bool TImpClienti::destroy()
 | |
| {
 | |
| 	delete _clienti;
 | |
| 	delete _msk;
 | |
| 	delete _configfile;
 | |
|   return TApplication::destroy();
 | |
| }
 | |
| 
 | |
| void TImpClienti::main_loop()
 | |
| {  
 | |
| 	KEY	tasto;
 | |
|   _msk->set(F_PERCORSO,	_configfile->get("PERCORSO", "OPZIONI"));
 | |
|   tasto = _msk->run();
 | |
|   if (tasto == K_ENTER)
 | |
|   {
 | |
| 		if (print_header())
 | |
| 		{
 | |
| 			if (transfer())
 | |
| 			{
 | |
| 				_configfile->set("PERCORSO", _msk->get(F_PERCORSO), "OPZIONI");
 | |
| 
 | |
| 				message_box(TR("Importazione clienti completata"));
 | |
| 			}
 | |
| 			print_footer();
 | |
| 		}
 | |
| 		else
 | |
| 			error_box("Errore in apertura stampante.");	
 | |
|   }   
 | |
| }
 | |
| 
 | |
| const long TImpClienti::get_nextcodcf()
 | |
| {
 | |
| 	TLocalisamfile& clifo = *_clienti;
 | |
|   long  codcf = 1L ;
 | |
|   if (!clifo.empty())
 | |
|   {
 | |
| 		clifo.zero() ;
 | |
|     clifo.setkey(1) ;
 | |
|     clifo.put(CLI_TIPOCF, 'F');
 | |
|     clifo.read(_isgteq) ;
 | |
|     if (clifo.good())
 | |
|       clifo.prev() ;
 | |
|     clifo.setstatus(NOERR);
 | |
| 	}
 | |
|   else clifo.last();
 | |
|   if (clifo.good())
 | |
| 	{
 | |
| 		const TFixed_string tipocf(clifo.get(CLI_TIPOCF)); 
 | |
|     if ( tipocf == "C")
 | |
| 		{
 | |
| 			codcf = clifo.get_long(CLI_CODCF);
 | |
| 			if (codcf == 999999)
 | |
| 				clifo.prev();
 | |
| 			codcf = clifo.get_long(CLI_CODCF)+1;
 | |
| 		}
 | |
|   }               
 | |
| 	return codcf;
 | |
| }
 | |
| 
 | |
| bool TImpClienti::transfer()
 | |
| {
 | |
| // cache per i comuni
 | |
| 	TRecord_cache cache_comuni(LF_COMUNI, 2);
 | |
| 
 | |
|   _trasfile = new TImpClienti_file(_msk->get(F_PERCORSO));
 | |
|   _trasfile->open(_msk->get(F_PERCORSO),'r');
 | |
| 
 | |
| 	const long dimension = fsize(_msk->get(F_PERCORSO));
 | |
|   TProgind pi(dimension,"Importazione in corso...");
 | |
| 
 | |
|   TRelation rel(LF_CLIFO);
 | |
|   TRectype& reccli = rel.curr();
 | |
| 
 | |
| 	TLocalisamfile& clifo = rel.lfile();
 | |
|   rel.lfile().setkey(2);
 | |
| 
 | |
| 	TString80 stampa;
 | |
| 	int err = NOERR;
 | |
|   TRecord_text curr;
 | |
|   while (_trasfile->read(curr) == NOERR && !pi.iscancelled() && err == NOERR) 
 | |
|   {
 | |
|     pi.setstatus(_trasfile->read_file()->tellg());
 | |
| 		TString80 ragsoc = curr.get(0);
 | |
| 		ragsoc.trim();
 | |
| 		ragsoc.upper();
 | |
| 		reccli.zero();
 | |
| 		reccli.put(CLI_TIPOCF, 'C');
 | |
| 		reccli.put(CLI_RAGSOC, ragsoc);
 | |
| 		if (reccli.read(rel.lfile())!=NOERR)
 | |
| 	  {
 | |
| 			reccli.zero();
 | |
| 			const long codcf = get_nextcodcf();
 | |
| 			reccli.put(CLI_TIPOCF, 'C');
 | |
| 	    reccli.put(CLI_CODCF, codcf);
 | |
| 			reccli.put(CLI_RAGSOC, ragsoc);
 | |
| 	    err = reccli.write(rel.lfile());
 | |
| 			if (err != NOERR)
 | |
| 				message_box("Errore in scrittura clienti %d", err);
 | |
| 	  }  
 | |
|     _trasfile->autosave(rel, curr);
 | |
| 		// indirizzo
 | |
| 		TString80 str = curr.get(4);
 | |
| 		str << " " << curr.get(5);
 | |
| 		reccli.put(CLI_INDCF, str);
 | |
| 		// comune
 | |
| 
 | |
| 		str = curr.get(11);
 | |
| 		str.trim();
 | |
| 		str.upper();
 | |
| 		if (str == "ITALIA")
 | |
| 		{
 | |
| 			TString80 dencom = curr.get(9);
 | |
| 			dencom.trim();
 | |
| 			dencom.upper();
 | |
| 			TRectype reccom = cache_comuni.get(dencom);
 | |
| 			str = reccom.get(COM_DENCOM);
 | |
| 			str.trim();
 | |
| 			if (str == dencom)
 | |
| 				reccli.put(CLI_COMCF, reccom.get(COM_COM));
 | |
| 			else
 | |
| 			{
 | |
| 				reccli.put(CLI_COMCF, " ");
 | |
| 				reccli.put(CLI_LOCCF, dencom);
 | |
| 				stampa = "Cliente ";
 | |
| 				stampa << reccli.get(CLI_CODCF);
 | |
| 				stampa << " - comune " << dencom << " non trovato";
 | |
| 				print_line(stampa);
 | |
| 			}
 | |
| 		}
 | |
| 		rel.rewrite();
 | |
| 	}
 | |
|   _trasfile->close();
 | |
| 	delete _trasfile;
 | |
| 	return TRUE;
 | |
| }
 | |
| 
 | |
| int pd1579100 (int argc, char* argv[])
 | |
| {
 | |
|   TImpClienti main_app;
 | |
|   main_app.run(argc, argv, TR("Importazione clienti"));
 | |
|   return TRUE;
 | |
| }
 |