Files correlati : tc9.exe Ricompilazione Demo : [ ] Commento : Invio sispac 0.01 git-svn-id: svn://10.65.10.50/trunk@17957 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			386 lines
		
	
	
		
			9.7 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			386 lines
		
	
	
		
			9.7 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| #include <applicat.h>
 | ||
| #include <automask.h>
 | ||
| #include <filetext.h>
 | ||
| 
 | ||
| #include "tc0.h"
 | ||
| #include "tc9200a.h"
 | ||
| 
 | ||
| #include <clifo.h>
 | ||
| #include <mov.h>
 | ||
| #include <rmov.h>
 | ||
| #include <rmoviva.h>
 | ||
| 
 | ||
| #define ALIAS_REG		100
 | ||
|  
 | ||
| class TInvioW_file: public TFile_text
 | ||
| {
 | ||
| protected:
 | ||
|   virtual void validate(TCursor& cur,TRecord_text &rec, TToken_string &val, TString& str);
 | ||
| 
 | ||
| public:
 | ||
|   TInvioW_file(const TString& file_name);
 | ||
|   virtual ~TInvioW_file() { }
 | ||
| };
 | ||
| 
 | ||
| TInvioW_file::TInvioW_file(const TString& file_name)
 | ||
|           : TFile_text(file_name, "tc9200a.ini")
 | ||
| {
 | ||
| }
 | ||
| 
 | ||
| class TInvioW_mask : public TAutomask
 | ||
| {
 | ||
| protected:
 | ||
|   bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | ||
| public:
 | ||
| 
 | ||
|   TInvioW_mask();
 | ||
|   
 | ||
|   virtual ~TInvioW_mask(){};
 | ||
| };
 | ||
|   
 | ||
| TInvioW_mask::TInvioW_mask() :TAutomask ("tc9200a")
 | ||
| {
 | ||
| }  
 | ||
|   
 | ||
| bool TInvioW_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
 | ||
| { 
 | ||
| 	switch (o.dlg())
 | ||
| 	{
 | ||
| 	case F_CODDITTA:                               
 | ||
| 		if (e==fe_init && o.empty())
 | ||
| 		{
 | ||
| 			set(F_CODDITTA, main_app().get_firm());
 | ||
| 			((TEdit_field&) o).check();
 | ||
| 			disable(F_CODDITTA);
 | ||
| 		}	
 | ||
| 		break;
 | ||
| 	default:
 | ||
| 		break;	
 | ||
| 	}
 | ||
|   return TRUE;
 | ||
| }
 | ||
| 
 | ||
| class TInvioW : public TSkeleton_application
 | ||
| {                     
 | ||
| 	TCursor*				   _cur;
 | ||
|   TInvioW_mask* 		 _msk;
 | ||
|   TInvioW_file*			 _trasfile;
 | ||
| 	TConfig*					 _configfile;
 | ||
|   TDate							 _dataini, _datafin;
 | ||
|   
 | ||
| protected:
 | ||
|   virtual bool create(void);
 | ||
|   virtual bool destroy(void);
 | ||
|   virtual void main_loop() ;
 | ||
|   void invio_whatis();
 | ||
|   long i_whatis_clifor(const char* tipocf, const bool invio = TRUE);
 | ||
|   long i_whatis_movcont(const bool invio = TRUE);
 | ||
|   long i_whatis_moviva(const bool invio = TRUE);
 | ||
| 
 | ||
| public:
 | ||
| 	TInvioW_file* apri_file(const char* nome);
 | ||
| 	void chiudi_file(TInvioW_file* trasfile);
 | ||
| 	TConfig& config() {return *_configfile;};
 | ||
|   TInvioW() {} ;
 | ||
|   virtual ~TInvioW() {} ;
 | ||
| };  
 | ||
| 
 | ||
| // restituisce un riferimento all' applicazione
 | ||
| inline TInvioW& app() { return (TInvioW&) main_app();}
 | ||
| 
 | ||
| // gestione dei messaggi estesi nei campi
 | ||
| void TInvioW_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TString& str)
 | ||
| {
 | ||
|   const TString code(s.get(0));
 | ||
|   TString valore;
 | ||
|   if (code == "_FISSO")
 | ||
|   {
 | ||
|     // gestione dei campi fissi per i record delle riba
 | ||
|     // sintassi: _FISSO,!<valore>
 | ||
|     // dove: <valore> <20> la stringa fissa da emettere
 | ||
|     TString in(s.get());
 | ||
|     CHECK(in[0]=='!',"Macro _FISSO senza carattere '!'");
 | ||
|     in.ltrim(1);
 | ||
|     in.trim();
 | ||
|     valore = in;
 | ||
|   } 
 | ||
|   else if (code == "_TIPORIGA")
 | ||
|   {
 | ||
| 		valore = str.empty() ? " " : "S";
 | ||
|   } 
 | ||
|   else if (code == "_CODPAG")
 | ||
|   {
 | ||
|  		valore = app().config().get(str, "PAGAMENTI");
 | ||
|   } 
 | ||
|   else if (code == "_OPZIONI")
 | ||
|   {
 | ||
|  		TString in(s.get()); 	
 | ||
|  		valore = app().config().get(in, "OPZIONI");
 | ||
|   }
 | ||
|   else if (code == "_IMPORTO")
 | ||
|   { 
 | ||
| 		real importo(str);
 | ||
| 		valore = importo.string(0,2);
 | ||
|   	valore.strip("-");
 | ||
|   	valore.strip("+");
 | ||
|   	valore.strip(".");
 | ||
|   }
 | ||
|   else if (code == "_IMPORTORIGAIVA")
 | ||
|   { 
 | ||
| 		real imponibile = cur.curr(LF_RMOVIVA).get_real(RMI_IMPONIBILE);;
 | ||
| 		real imposta = cur.curr(LF_RMOVIVA).get_real(RMI_IMPOSTA);;
 | ||
| 		imponibile += imposta;
 | ||
| 		valore = imposta.string(0,2);
 | ||
|   	valore.strip("-");
 | ||
|   	valore.strip("+");
 | ||
|   	valore.strip(".");
 | ||
|   }
 | ||
| 	else if (code == "_INDIR")
 | ||
| 	{
 | ||
| 		valore = cur.curr(LF_CLIFO).get(CLI_INDCF);
 | ||
| 		valore << ' ' << cur.curr(LF_CLIFO).get(CLI_CIVCF);
 | ||
| 		valore.cut(40);
 | ||
| 	}
 | ||
| 	else if (code == "_GIUFIS")
 | ||
| 	{
 | ||
| 		const char c = str[0];
 | ||
| 		valore = (c == 'F') ? "S" : "N";
 | ||
| 	}
 | ||
| 	else if (code == "_TITOLARE")
 | ||
| 	{
 | ||
| 		valore = (str.empty() ? "N" : "S");
 | ||
| 	}
 | ||
| 	else if (code == "_TIPODET")
 | ||
| 	{
 | ||
| 		valore = (str.empty() ? " " : "100");
 | ||
| 	}
 | ||
| 	else if (code == "_CONTO")
 | ||
| 	{
 | ||
| 		int gruppo = cur.curr(LF_CLIFO).get_int(CLI_GRUPPO);
 | ||
| 		if (gruppo == 10)
 | ||
| 			gruppo = 0;
 | ||
| 		int conto = cur.curr(LF_CLIFO).get_int(CLI_CONTO);
 | ||
| 		long codice = cur.curr(LF_CLIFO).get_int(CLI_CODCF);
 | ||
| 		valore.format("%03d%03d%06ld", gruppo, conto, codice);
 | ||
| 	}
 | ||
| 	else if (code == "_CONTOMOV")
 | ||
| 	{
 | ||
| 		int gruppo = cur.curr(LF_RMOV).get_int(RMV_GRUPPO);
 | ||
| 		if (gruppo == 10)
 | ||
| 			gruppo = 0;
 | ||
| 		int conto = cur.curr(LF_RMOV).get_int(RMV_CONTO);
 | ||
| 		long codice = cur.curr(LF_RMOV).get_int(RMV_SOTTOCONTO);
 | ||
| 		valore.format("%03d%03d%06ld", gruppo, conto, codice);
 | ||
| 	}
 | ||
| 	else if (code == "_CONTOMOVIVA")
 | ||
| 	{
 | ||
| 		int gruppo = cur.curr(LF_RMOVIVA).get_int(RMI_GRUPPO);
 | ||
| 		if (gruppo == 10)
 | ||
| 			gruppo = 0;
 | ||
| 		int conto = cur.curr(LF_RMOVIVA).get_int(RMI_CONTO);
 | ||
| 		long codice = cur.curr(LF_RMOVIVA).get_int(RMI_SOTTOCONTO);
 | ||
| 		valore.format("%03d%03d%06ld", gruppo, conto, codice);
 | ||
| 	}
 | ||
|   else NFCHECK("Macro non definita: %s", (const char *)code);
 | ||
|   str = valore;
 | ||
| }
 | ||
| 
 | ||
| TInvioW_file* TInvioW::apri_file(const char* nome)
 | ||
| {
 | ||
| 	TFilename filename = _msk->get(F_DESTINAZIONE);
 | ||
| 	filename.add(nome);
 | ||
| 	filename.ext("txt");
 | ||
| 	if (filename.exist())
 | ||
| 		remove(filename);
 | ||
| 	TInvioW_file* trasfile = new TInvioW_file(filename);
 | ||
| 	trasfile->open(filename,'w');
 | ||
| 	trasfile->force_record_separator();
 | ||
| 	return trasfile;
 | ||
| }
 | ||
| 
 | ||
| void TInvioW::chiudi_file(TInvioW_file* trasfile)
 | ||
| {
 | ||
| 	trasfile->close();
 | ||
| 	delete trasfile;
 | ||
| }
 | ||
| 
 | ||
| long TInvioW::i_whatis_movcont(const bool invio)
 | ||
| {
 | ||
|   TRectype da(LF_MOV);
 | ||
|   TRectype a(LF_MOV);
 | ||
| 	TDate dataini = _msk->get_date(F_DATAINI);
 | ||
| 	TDate datafin = _msk->get_date(F_DATAFIN);
 | ||
| 	if (dataini.ok())
 | ||
| 		da.put(MOV_DATAREG, dataini);
 | ||
| 	if (datafin.ok())
 | ||
| 		a.put(MOV_DATAREG, datafin);
 | ||
|   TRelation rel(LF_MOV);
 | ||
|   rel.add(LF_RMOV, "NUMREG==NUMREG", 1);
 | ||
|   rel.add(LF_CLIFO, "TIPOCF==TIPO|CODCF==CODCF", 1);
 | ||
|   TCursor cur(&rel, "", 2, &da, &a);
 | ||
|   const long cur_items = cur.items();
 | ||
|   if (cur_items != 0) 
 | ||
|   {               
 | ||
| 	  cur.freeze();
 | ||
|     TRectype& cur_rec = cur.curr();
 | ||
|     for (cur = 0; cur.pos() < cur_items; ++(cur))
 | ||
|     {                                                    
 | ||
| 			const long numreg = cur.curr().get_long(MOV_NUMREG);
 | ||
|  			bool continua = TRUE;
 | ||
|  			while (continua)
 | ||
|  			{                                                   
 | ||
|  				const long numregrig = cur.curr(LF_RMOV).get_long(RMV_NUMREG);
 | ||
|  				if (numreg == numregrig)
 | ||
|  				{      
 | ||
|  					if (invio)
 | ||
|  					{
 | ||
| 			    	TRectype& cur_rec_righe = cur.curr(LF_RMOV);
 | ||
| 						TRecord_text recrighe;
 | ||
| 						recrighe.set_type("R");
 | ||
| 						_trasfile->autoload(recrighe, cur); 
 | ||
| 						_trasfile->write(recrighe);
 | ||
| 					}
 | ||
|  				}
 | ||
| 		  	continua = cur.next_match(LF_RMOV, "NUMREG");
 | ||
|  			}	
 | ||
|     }	
 | ||
|   }                  
 | ||
|   return 0;
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| long TInvioW::i_whatis_moviva(const bool invio)
 | ||
| {
 | ||
|   TRectype da(LF_MOV);
 | ||
|   TRectype a(LF_MOV);
 | ||
|   da.put(MOV_DATAREG, _dataini);
 | ||
|   a.put(MOV_DATAREG, _datafin);
 | ||
|   TRelation rel(LF_MOV);
 | ||
|   rel.add(LF_RMOVIVA, "NUMREG==NUMREG", 1);
 | ||
|   rel.add("REG", "CODTAB[1,4]==ANNOIVA|CODTAB[5,7]==REG", 1);
 | ||
|   rel.add(LF_CLIFO, "TIPOCF==TIPO|CODCF==CODCF", 1);
 | ||
|   TCursor cur(&rel, "", 2, &da, &a);
 | ||
|   const long cur_items = cur.items();
 | ||
|   if (cur_items != 0) 
 | ||
| 
 | ||
|   {               
 | ||
| 	  cur.freeze();
 | ||
|     TRectype& cur_rec = cur.curr();
 | ||
|     for (cur = 0; cur.pos() < cur_items; ++(cur))
 | ||
|     {                                                    
 | ||
| 			const long numreg = cur.curr().get_long(MOV_NUMREG);
 | ||
|  			bool continua = TRUE;
 | ||
|  			while (continua)
 | ||
|  			{                                                   
 | ||
|  				const long numregrig = cur.curr(LF_RMOVIVA).get_long(RMI_NUMREG);
 | ||
|  				if (numreg == numregrig)
 | ||
|  				{      
 | ||
|  					if (invio)
 | ||
|  					{
 | ||
| 			    	TRectype& cur_rec_righe = cur.curr(LF_RMOVIVA);
 | ||
| 						TRecord_text recrighe;
 | ||
| 						recrighe.set_type("I");
 | ||
| 						_trasfile->autoload(recrighe, cur); 
 | ||
| 						_trasfile->write(recrighe);
 | ||
| 					}
 | ||
|  				}
 | ||
| 		  	continua = cur.next_match(LF_RMOVIVA, "NUMREG");
 | ||
|  			}	
 | ||
|     }	
 | ||
|   }                  
 | ||
|   return 0;
 | ||
| }
 | ||
| 
 | ||
| long TInvioW::i_whatis_clifor(const char* tipocf, const bool invio)
 | ||
| {
 | ||
| 	TString80 nomefile = "FILE";
 | ||
| 	nomefile << tipocf;
 | ||
| 	TInvioW_file* trasfilecf = apri_file(_configfile->get(nomefile, "OPZIONI"));
 | ||
|   TRelation rel(LF_CLIFO);
 | ||
|   rel.add(LF_COMUNI, "STATO==STATOCF|COM==COMCF", 1);
 | ||
|   rel.add(LF_ANAGFIS,"CODANAGR==CODANAGPER", 1);
 | ||
|   rel.add(LF_ANAG,"TIPOA==TIPOPERS|CODANAGR==CODANAGPER", 1);
 | ||
| 	TString80 filtro;
 | ||
| 	filtro = "20->TIPOCF == \"";
 | ||
| 	filtro << tipocf;
 | ||
| 	filtro << "\"";
 | ||
|   TCursor cur(&rel);
 | ||
| 	cur.setfilter(filtro, TRUE);
 | ||
|   const long cur_items = cur.items();
 | ||
|   if (cur_items != 0 && invio) 
 | ||
|   {
 | ||
| 	  cur.freeze();
 | ||
|     TRectype& cur_rec = cur.curr();
 | ||
|     for (cur = 0; cur.pos() < cur_items; ++(cur))
 | ||
|     {
 | ||
| 			TRecord_text rec;
 | ||
| 			rec.set_type(tipocf);
 | ||
| 			trasfilecf->autoload(rec, cur); 
 | ||
| 			trasfilecf->write(rec);
 | ||
|     }	
 | ||
|   } 
 | ||
| 	chiudi_file(trasfilecf);
 | ||
|   return 0;
 | ||
| }
 | ||
| 
 | ||
| //metodone globale che chiama, come un menu, i vari sottometodi in base alle scelte sulla maschera
 | ||
| void TInvioW::invio_whatis()
 | ||
| {
 | ||
| 	if (_msk->get_bool(F_CLIFOR))
 | ||
| 	{
 | ||
| 		i_whatis_clifor("C");
 | ||
| 		i_whatis_clifor("F");
 | ||
| 	}
 | ||
| 	if (_msk->get_bool(F_MOVCONT))
 | ||
| 	{
 | ||
| 		TString80 filename = _configfile->get("FILEM", "OPZIONI");
 | ||
| 		_trasfile = apri_file(filename);
 | ||
| 		i_whatis_movcont();
 | ||
| 		i_whatis_moviva();
 | ||
| 		chiudi_file(_trasfile);
 | ||
| 	}	
 | ||
| }
 | ||
| 
 | ||
| bool TInvioW::create()
 | ||
| {
 | ||
|   _msk = new TInvioW_mask();
 | ||
| 	TFilename configname = "tc9200conf.ini";
 | ||
| 	configname.custom_path();
 | ||
| 	_configfile = new TConfig(configname);
 | ||
|   return TSkeleton_application::create();
 | ||
| }
 | ||
| 
 | ||
| bool TInvioW::destroy()
 | ||
| { 
 | ||
| 	delete _configfile;
 | ||
| 	delete _msk;
 | ||
|   return TSkeleton_application::destroy();
 | ||
| }
 | ||
| 
 | ||
| void TInvioW::main_loop()
 | ||
| {
 | ||
| 	_msk->set(F_NUMEROINVIO, _configfile->get_int("NUMEROINVIO","OPZIONI")+1);
 | ||
| 	_msk->set(F_DATAINI, _configfile->get("DATA","OPZIONI"));
 | ||
| 	_msk->set(F_DESTINAZIONE, _configfile->get("PERCORSO","OPZIONI"));
 | ||
|   while (_msk->run() != K_QUIT)
 | ||
|   {                                  
 | ||
|   	_configfile->set("NUMEROINVIO", _msk->get(F_NUMEROINVIO),"OPZIONI");
 | ||
|   	_configfile->set("DATA", _msk->get_date(F_DATAFIN),"OPZIONI");
 | ||
|   	_configfile->set("PERCORSO", _msk->get(F_DESTINAZIONE),"OPZIONI");
 | ||
|   	_configfile->set_paragraph("PAGAMENTI");
 | ||
|   	_dataini = _msk->get_date(F_DATAINI);
 | ||
|   	_datafin = _msk->get_date(F_DATAFIN);
 | ||
| 		const char tipoinvio = _msk->get(F_TIPOINVIO)[0];
 | ||
| 		if (tipoinvio == 'S')
 | ||
| 			invio_whatis();
 | ||
| 	}	
 | ||
| }
 | ||
| 
 | ||
| int tc9200(int argc, char **argv) 
 | ||
| {
 | ||
|   TInvioW a;
 | ||
|   a.run(argc, argv, "Invio dati contabilit<69> whatis");
 | ||
|   return 0;
 | ||
| }
 | ||
| 
 |