Files correlati : tc1.exe Ricompilazione Demo : [ ] Commento : RIcodifica clienti e fornitori per invio a zucchetti git-svn-id: svn://10.65.10.50/branches/R_10_00@21983 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			1122 lines
		
	
	
		
			27 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			1122 lines
		
	
	
		
			27 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| #include <applicat.h>
 | ||
| #include <automask.h>
 | ||
| #include <filetext.h>
 | ||
| #include <progind.h>
 | ||
| #include <recarray.h>
 | ||
| #include <reprint.h>
 | ||
| #include <reputils.h>
 | ||
| #include <utility.h>
 | ||
| 
 | ||
| #include "tc1.h"
 | ||
| #include "tc1100a.h"
 | ||
| 
 | ||
| #include <clifo.h>
 | ||
| #include <causali.h>
 | ||
| #include <pconti.h>
 | ||
| #include <mov.h>
 | ||
| #include <rmov.h>
 | ||
| #include <rmoviva.h>
 | ||
| #include <multirel.h>
 | ||
| 
 | ||
| #define ALIAS_REG		100
 | ||
| // restituisce un riferimento all' applicazione
 | ||
| 
 | ||
| ///////////////////////////////////////////////////////////
 | ||
| // TRiclassifica_cache
 | ||
| ///////////////////////////////////////////////////////////
 | ||
| 
 | ||
| class TRiclassifica_cache : public TCache
 | ||
| {
 | ||
| 	TLocalisamfile _multirel;
 | ||
| protected:
 | ||
|   virtual TObject* key2obj(const char* key);
 | ||
| 
 | ||
| public:
 | ||
| 	const char* sdecode(const char* tab, const TString& cod);
 | ||
| 	long decode(const char* tab, const TString& cod);
 | ||
| 	TRiclassifica_cache() : _multirel(LF_MULTIREL) {}
 | ||
| };
 | ||
| 
 | ||
| TObject* TRiclassifica_cache::key2obj(const char* key)
 | ||
| {
 | ||
| 	TToken_string tok(key);
 | ||
| 	TString8 tab, cod;
 | ||
| 	tok.get(0,tab);
 | ||
| 	tok.get(1, cod);
 | ||
| 	_multirel.put(MULTI_COD, tab);
 | ||
| 	_multirel.put(MULTI_FIRST, cod);
 | ||
| 	int err = _multirel.read(_isgteq);
 | ||
| 	if (err == NOERR && _multirel.get(MULTI_FIRST) == cod)
 | ||
| 		return new TString16(_multirel.get(MULTI_DATA));
 | ||
| 	return NULL;
 | ||
| }
 | ||
| 
 | ||
| long TRiclassifica_cache::decode(const char* tab, const TString& cod)
 | ||
| {
 | ||
| 	TToken_string tok;
 | ||
| 	tok.add(tab);
 | ||
| 	tok.add(cod);
 | ||
| 	const TString* ric = (const TString*) objptr(tok);
 | ||
| 	return (ric ? atol(*ric) : 0);
 | ||
| }
 | ||
| 
 | ||
| class TInvio;
 | ||
| 
 | ||
| inline TInvio& app() { return (TInvio&) main_app();}
 | ||
| 
 | ||
| class TInvio_file: public TFile_text
 | ||
| {
 | ||
| 	bool _recodeclifo;
 | ||
| 
 | ||
| protected:
 | ||
|   virtual void validate(TCursor& cur,TRecord_text &rec, TToken_string &val, TString& str);
 | ||
| 
 | ||
| public:
 | ||
| 	void set_recode_clifo(bool on) { _recodeclifo = on; }
 | ||
| 	const TString& bill2ricl(const char t, int gr, int co, long so, bool completo);
 | ||
|   TInvio_file(const TString& file_name);
 | ||
|   virtual ~TInvio_file() { }
 | ||
| };
 | ||
| 
 | ||
| TInvio_file::TInvio_file(const TString& file_name)
 | ||
|           : TFile_text(file_name, "tc1100a.ini")
 | ||
| {
 | ||
| }
 | ||
| 
 | ||
| class TInvio_mask : public TAutomask
 | ||
| {
 | ||
| protected:
 | ||
|   bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | ||
| public:
 | ||
| 
 | ||
|   TInvio_mask();
 | ||
|   
 | ||
|   virtual ~TInvio_mask(){};
 | ||
| };
 | ||
|   
 | ||
| TInvio_mask::TInvio_mask() :TAutomask ("tc1100a")
 | ||
| {
 | ||
| }  
 | ||
|   
 | ||
| bool TInvio_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 TInvio : public TSkeleton_application
 | ||
| {                     
 | ||
| 	TCursor*				   _cur;
 | ||
|   TInvio_mask* 			 _msk;
 | ||
|   TInvio_file*			 _trasfile;
 | ||
| 	TLog_report *      _log;
 | ||
| 	TRiclassifica_cache * _tabelle;
 | ||
| 	TRecord_cache*		 _conti;
 | ||
| 	long 							 _nrecords, _nrecscorr, _nrecsfattvend, _nrecsfattacqu, _nrecsmocontab;
 | ||
|   int								 _nfiles;
 | ||
|   long							 _nrecsdettaglio;
 | ||
|   TString16					 _descrdettaglio;
 | ||
|   TDate							 _dataini, _datafin;
 | ||
|   bool							 _totale, _finemov;
 | ||
| 	bool							 _trcau, _trcon, _triva, _trban;
 | ||
|   
 | ||
| protected:
 | ||
|   virtual bool create(void);
 | ||
|   virtual bool destroy(void);
 | ||
|   virtual void main_loop() ;
 | ||
|   void invio_zucchetti();
 | ||
|   long i_zucchetti_causali(const bool invio = TRUE);
 | ||
|   long i_zucchetti_clifor(const bool invio = TRUE);
 | ||
|   long i_zucchetti_conti(const bool invio = TRUE);
 | ||
|   long i_zucchetti_movcont(const bool invio = TRUE);
 | ||
|   long i_zucchetti_moviva(const char acqven, const bool invio = TRUE);
 | ||
|   void i_zucchetti_testa_dettaglio(const TString16& descr, const long nrecs);
 | ||
|   void i_zucchetti_coda_dettaglio(const TString16& descr, const long nrecs);
 | ||
|   void i_zucchetti_testa();
 | ||
|   void i_zucchetti_coda();
 | ||
| public:
 | ||
|   int get_nfiles() {return _nfiles;}
 | ||
|   long get_nrecords() {return _nrecords;}
 | ||
|   long get_nrecsdettaglio() {return _nrecsdettaglio;}
 | ||
|   TString16& get_descrdettaglio() {return _descrdettaglio;}
 | ||
|   const bool totale() {return _totale;}
 | ||
|   const bool finemov() {return _finemov;}
 | ||
| 	TRecord_cache& conti() {return *_conti;}
 | ||
| 	TRiclassifica_cache & tabelle() {	return * _tabelle;}
 | ||
| 	void log(int sev, const char* msg);
 | ||
| 	bool trcau() const { return _trcau; }
 | ||
| 	bool triva() const { return _triva; }
 | ||
| 	bool trcon() const { return _trcon; }
 | ||
| 	bool trban() const { return _trban; }
 | ||
| 
 | ||
|   TInvio() {} ;
 | ||
|   virtual ~TInvio() {} ;
 | ||
| };  
 | ||
| 
 | ||
| const char * TRiclassifica_cache::sdecode(const char* tab, const TString& cod)
 | ||
| {
 | ||
| 	const TString* ric = NULL;
 | ||
| 
 | ||
| 	if (cod.full())
 | ||
| 	{
 | ||
| 		TToken_string tok;
 | ||
| 
 | ||
| 		tok.add(tab);
 | ||
| 		tok.add(cod);
 | ||
| 		ric = (const TString*) objptr(tok);
 | ||
| 
 | ||
| 		if (ric == NULL || ric->blank())
 | ||
| 		{
 | ||
| 			TString msg;
 | ||
| 
 | ||
| 			msg << TR("Tabella") << " "<< &(tab[2])  << " " << TR("Codice") << " " << cod  << " :" << TR("Non presente in tabella");
 | ||
| 			app().log(2, msg);
 | ||
| 		}
 | ||
| 	}
 | ||
| 	else 
 | ||
| 		int i = 1;
 | ||
| 	return ric ? (const char *) *ric : "";
 | ||
| 	
 | ||
| }
 | ||
|  
 | ||
| void TInvio::log(int sev, const char* msg)
 | ||
| { 
 | ||
| 	if (_log != NULL)
 | ||
| 	{
 | ||
| 		if (sev > 0)
 | ||
| 		{
 | ||
| 			TString m;
 | ||
| 			m << TR(" Errore : ") << msg;
 | ||
| 			_log->log(sev, m); 
 | ||
| 		}
 | ||
| 		else
 | ||
| 			_log->log(sev, msg);
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| const TString& TInvio_file::bill2ricl(const char t, int gr, int co, long so, bool completo)
 | ||
| {
 | ||
|   TString & codricl = get_tmp_string();
 | ||
| 
 | ||
| 	if (gr > 0&& co >0 && so > 0)
 | ||
| 	{
 | ||
| 		if (!app().trcon())
 | ||
| 		{
 | ||
| 			if (completo && t <= ' ')
 | ||
| 				codricl.format("%02d%03d", co, so);
 | ||
| 			else
 | ||
| 				if (_recodeclifo && t == 'C')
 | ||
| 					codricl = "18000";
 | ||
| 				else
 | ||
| 					if (_recodeclifo && t == 'F')
 | ||
| 						codricl = "36000";
 | ||
| 					else
 | ||
| 						codricl.format("%05d",so);
 | ||
| 		}
 | ||
| 		else
 | ||
| 		{
 | ||
| 			TToken_string cod("ZUCONTI");
 | ||
| 			cod.add(gr);
 | ||
| 			cod.add(co);
 | ||
| 			cod.add(t <= ' ' ? so : 0);
 | ||
| 
 | ||
| 			// Provo il sottoconto ma se non riesco provo con conto e poi anche gruppo
 | ||
| 			for (int c = t == ' ' ? 3 : 2; c > 0 && codricl.blank(); c--)
 | ||
| 			{
 | ||
| 				const TRectype & rec = app().conti().get(cod);
 | ||
| 
 | ||
| 				codricl = rec.get("CODICE");
 | ||
| 				cod.add(0, c);
 | ||
| 			}
 | ||
| 			if (codricl.blank())
 | ||
| 			{
 | ||
| 				TString msg;
 | ||
| 				msg << TR("Conto") << " " << gr << " " << co << " " << so  << " :" << TR("Non presente in tabella");
 | ||
| 				app().log(2, msg);
 | ||
| 			}
 | ||
| 		}
 | ||
| 	}
 | ||
| 	return codricl;
 | ||
| }
 | ||
| // gestione dei messaggi estesi nei campi
 | ||
| void TInvio_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 == "_ANNO")
 | ||
|   {
 | ||
|     TDate data(str);
 | ||
|     int anno = data.year();
 | ||
|     valore.format("%ld", anno);
 | ||
|   } 
 | ||
|   else if (code == "_MESE")
 | ||
|   {
 | ||
|     TDate data(str);
 | ||
|     int mese = data.month();
 | ||
|     valore.format("%ld", mese);
 | ||
|   } 
 | ||
|   else if (code.starts_with("_SEZIONE"))
 | ||
|   {
 | ||
| 		const TRectype & rmov = cur.curr(LF_RMOV);
 | ||
| 		const char sezione = s.get()[0];  	
 | ||
| 		const char sezriga = rmov.get_char(RMV_SEZIONE);		
 | ||
| 	  const bool completo = code.starts_with("_SEZIONEC");
 | ||
| 
 | ||
| 		valore = str;
 | ||
| 		if (sezione != sezriga)
 | ||
| 			valore = "";
 | ||
| 		else
 | ||
| 		{
 | ||
| 			const int gr = rmov.get_int(RMV_GRUPPO);
 | ||
| 			const int co = rmov.get_int(RMV_CONTO);
 | ||
| 			const long so = rmov.get_long(RMV_SOTTOCONTO);
 | ||
| 			const char t = rmov.get_char(RMV_TIPOC);
 | ||
| 			valore = bill2ricl(t, gr, co, so, completo);
 | ||
| 		}
 | ||
|   }
 | ||
|   else if (code == "_CAUSALE")
 | ||
|   {
 | ||
| 		const TRectype & mov = cur.curr(LF_MOV);
 | ||
| 		const bool prima_nota = mov.get(MOV_REG).blank();
 | ||
| 
 | ||
| 		if (prima_nota && valore.blank())
 | ||
| 			valore = "999";
 | ||
| 		else
 | ||
| 		{
 | ||
| 			if (app().trcau())
 | ||
| 				valore = app().tabelle().sdecode("ZUCAU", str);
 | ||
| 			else
 | ||
| 			{
 | ||
| 				if (valore.blank())
 | ||
| 				{
 | ||
| 					if (!prima_nota)
 | ||
| 						valore = str;
 | ||
| 					else
 | ||
| 						valore = "999";
 | ||
| 				}
 | ||
| 			}
 | ||
| 		}
 | ||
|   } 
 | ||
|   else if (code == "_TIPOSOG")
 | ||
| 	{
 | ||
| 		if (cur.curr().get_int(CLI_ALLEG) == 6)
 | ||
| 			valore = "P";
 | ||
| 		else
 | ||
| 			valore = "S";
 | ||
| 
 | ||
| 	}
 | ||
|   else if (code == "_FLSMR")
 | ||
| 	{
 | ||
| 		if (cur.curr().get(CLI_STATOPAIV) == "SM")
 | ||
| 			valore = "S";
 | ||
| 		else
 | ||
| 		{
 | ||
| 			const TRectype & r = cache().get("%STA", cur.curr().get(CLI_STATOCF));
 | ||
| 			valore = r.get_bool("B1") ? "S" : " ";
 | ||
| 		}
 | ||
| 	}
 | ||
| 	else if (code == "_BLACKLIST")
 | ||
| 	{
 | ||
| 		const TRectype & r = cache().get("%STA", cur.curr().get(CLI_STATOCF));
 | ||
| 		valore = r.get_bool("B0") ? "S" : " ";
 | ||
| 	}
 | ||
|   else if (code == "_ATTIVITA")
 | ||
|   {
 | ||
| 		int att = atoi(cur.file("REG").get("S8"));
 | ||
| 		att = att-1;
 | ||
| 		if (att == 0)
 | ||
|   		valore = " ";
 | ||
| 		else
 | ||
| 			valore = format("%02d", att);
 | ||
|   } 
 | ||
|   else if (code == "_SEZIONALE")
 | ||
|   {
 | ||
| 		int att = atoi(cur.file("REG").get("I8"));
 | ||
| 		valore = format("%02d", att);
 | ||
|   } 
 | ||
|   else if (code == "_IVA" || code == "_NORMA")
 | ||
|   {
 | ||
| 		if (app().triva())
 | ||
|     {
 | ||
|       // Il codice Campo 206 diventa il codice "20Z1" (codice+norma) oppure "20" (solo codice con eventuale norma associata)
 | ||
| 			valore = app().tabelle().sdecode("ZUIVA", str);  
 | ||
| 		  if (code == "_NORMA")
 | ||
| 			{
 | ||
|         if (valore.len() > 2) // Se e' piu' lungo di 2 la norma Zucchetti sono gli ultimi due
 | ||
|           valore.ltrim(2);
 | ||
| 				else
 | ||
| 					valore = "" ;
 | ||
| 		  }
 | ||
|       else
 | ||
|         valore.cut(2);
 | ||
|     }
 | ||
|     if (valore.blank())
 | ||
|     {
 | ||
|       if (code == "_IVA")
 | ||
|         valore = str.left(2);
 | ||
|       else
 | ||
|         valore = str.mid(2);
 | ||
|     }
 | ||
|   } 
 | ||
|   else if (code == "_BANCA")
 | ||
| 	{
 | ||
| 		if (app().trban())
 | ||
| 			valore = app().tabelle().sdecode("ZUBAN", str);
 | ||
| 		if (valore.blank())
 | ||
| 		{
 | ||
| 			valore = str.mid(2, 3);
 | ||
| 			valore << str.mid(7, 3);
 | ||
| 		}
 | ||
| 
 | ||
| 	}
 | ||
|   else if (code == "_NUMFILES")
 | ||
|   {                                       
 | ||
|   	const int nfiles = app().get_nfiles();
 | ||
|   	valore.format("%ld", nfiles);
 | ||
|   }
 | ||
|   else if (code == "_NUMRECORDS")
 | ||
|   {                 
 | ||
|   	const long nrecords = app().get_nrecords(); 
 | ||
|   	valore.format("%ld", nrecords);
 | ||
|   }
 | ||
|   else if (code == "_NUMRECORDSDETTAGLIO")
 | ||
|   {                 
 | ||
|   	const long nrecords = app().get_nrecsdettaglio(); 
 | ||
|   	valore.format("%ld", nrecords);
 | ||
|   }
 | ||
|   else if (code == "_TIPOFILE")
 | ||
|   {                 
 | ||
|   	valore = app().get_descrdettaglio();
 | ||
|   }
 | ||
|   else if (code == "_OPZIONI")
 | ||
| 	{
 | ||
| 		const TString80 code = s.get();
 | ||
| 		if (code == "ZUNUMEROINVIO")
 | ||
| 		{
 | ||
| 			const int inv = ini_get_int(CONFIG_DITTA, "tc", code) + 1;
 | ||
| 	
 | ||
| 			valore.format("%d", inv);
 | ||
| 		}
 | ||
| 		else
 | ||
| 			valore = ini_get_string(CONFIG_DITTA, "tc", code);
 | ||
| 	}
 | ||
|   else if (code == "_OGGI")
 | ||
|   {
 | ||
|     TDate data(TODAY);
 | ||
|   	valore = data.string(full, '-', full, full, amg_date);
 | ||
|   	valore.strip("-");
 | ||
|   } 
 | ||
|   else if (code == "_CODIFICA")
 | ||
|   {
 | ||
|   	const char tipocf = str[0];
 | ||
|   	if (tipocf == 'C')
 | ||
|   		valore = "P";
 | ||
|   	else
 | ||
|   		valore = "R";
 | ||
|   } 
 | ||
|   else if (code == "_NUMDOC")
 | ||
|   {
 | ||
|   	if (cur.file("REG").get("I0") == 1)
 | ||
|   		valore = cur.curr().get(MOV_NUMDOC);
 | ||
|   	else
 | ||
|   		valore = cur.curr().get(MOV_PROTIVA);	
 | ||
|   }
 | ||
|   else if (code == "_SEGNO")
 | ||
|   {
 | ||
|  		TString archivio(s.get()); 	
 | ||
|  		TString campo(s.get()); 	
 | ||
|  		const real importo = cur.curr(archivio).get_real(campo);
 | ||
|  		valore = "+";
 | ||
|  		if (importo < 0)
 | ||
|  			valore = "-";
 | ||
|   }
 | ||
|   else if (code == "_IMPORTO")
 | ||
|   { 
 | ||
| 		real importo(str);
 | ||
| 		valore = importo.string(0,2);
 | ||
|   	valore.strip("-");
 | ||
|   	valore.strip("+");
 | ||
|   	valore.strip(".");
 | ||
|   }
 | ||
| 	else if (code == "_RITENUTA")
 | ||
|   { 
 | ||
| 		const TRectype & mov = cur.curr(LF_MOV);
 | ||
| 		const TString4 codcaus = mov.get(MOV_CODCAUS);
 | ||
| 		const bool intra = cache().get(LF_CAUSALI, codcaus, CAU_INTRACOM)!= "";
 | ||
| 	
 | ||
| 		if (intra)
 | ||
| 			valore.cut(0);
 | ||
| 		else
 | ||
| 		{
 | ||
| 			real importo(str);
 | ||
| 			valore = importo.string(0,2);
 | ||
|   		valore.strip("-");
 | ||
|   		valore.strip("+");
 | ||
|   		valore.strip(".");
 | ||
| 		}
 | ||
|   }
 | ||
|   else if (code == "_TIPODOC")
 | ||
|   { 
 | ||
| 		const char tipodoc = str[0];
 | ||
| 		valore = (tipodoc == 'F') ? "1" : "2";
 | ||
|   }
 | ||
|   else if (code == "_TIPOCORR")
 | ||
|   { 
 | ||
| 		valore = str;
 | ||
| 
 | ||
| 		if (valore != "SC" && valore != "RF")
 | ||
| 			valore = "CN";
 | ||
|   }
 | ||
|   else if (code == "_DIVERSI")
 | ||
|   { 
 | ||
|   	valore = (app().finemov() ? "X" : " ");
 | ||
|   }
 | ||
|   else if (code == "_TOTALE")
 | ||
|   { 
 | ||
|   	real importo(ZERO);
 | ||
|   	if (app().totale())    
 | ||
|   	{ 
 | ||
|   		importo = cur.curr(LF_MOV).get_real(MOV_TOTDOC);
 | ||
|   		importo+=cur.curr(LF_MOV).get_real(MOV_RITFIS);
 | ||
|   	}	
 | ||
| 		valore = importo.string(11,2);
 | ||
|   	valore.strip("-");
 | ||
|   	valore.strip("+");
 | ||
|   	valore.strip(".");
 | ||
|   }
 | ||
|   else if (code == "_SEGNOTOTALE")
 | ||
|   {          
 | ||
|   	real importo(ZERO);
 | ||
|   	if (app().totale())
 | ||
|   	{
 | ||
|   		importo = cur.curr(LF_MOV).get_real(MOV_TOTDOC);
 | ||
|   		importo+=cur.curr(LF_MOV).get_real(MOV_RITFIS);
 | ||
|   	}	
 | ||
|   	valore = importo.string(11,2);
 | ||
|   	valore.trim();
 | ||
|   	valore = valore.sub(0,1);	
 | ||
|   	if (valore[0] != '-' && valore[0] != '+')
 | ||
|   		valore = "+";
 | ||
|   }
 | ||
| 	else if (code == "_GIUFIS")
 | ||
| 	{
 | ||
| 		const char tipopers = cur.curr(LF_CLIFO).get_char(CLI_TIPOPERS);
 | ||
| 		valore = (tipopers == 'F') ? " " : "S";
 | ||
| 	}
 | ||
| 	else if (code.starts_with("_CONTO"))
 | ||
| 	{
 | ||
|  		const int ln = s.get_int(); 	
 | ||
| 		const TRectype & rec = cur.curr(ln);
 | ||
| 		char t = ' ';
 | ||
| 		const TString& tiponame = s.get();
 | ||
| 		const bool completo = code.starts_with("_CONTOC");
 | ||
| 
 | ||
| 		if (tiponame.full())
 | ||
| 			t = rec.get_char(tiponame);
 | ||
| 
 | ||
| 		if (ln == LF_CLIFO)
 | ||
| 		{
 | ||
| 			const int gr = rec.get_int(CLI_GRUPPORIC);
 | ||
| 			const int co = rec.get_int(CLI_CONTORIC);
 | ||
| 			const long so = rec.get_long(CLI_SOTTOCRIC);
 | ||
| 		
 | ||
| 			valore = bill2ricl(t, gr, co, so, completo);
 | ||
| 		}
 | ||
| 		else
 | ||
| 		{
 | ||
| 			const int gr = rec.get_int("GRUPPO");
 | ||
| 			const int co = rec.get_int("CONTO");
 | ||
| 			const long so = rec.get_long("SOTTOCONTO");
 | ||
| 
 | ||
| 			valore = bill2ricl(t, gr, co, so, completo);
 | ||
| 		}
 | ||
| 
 | ||
| 	}
 | ||
| 	else if (code.starts_with("_TCONTO"))
 | ||
| 	{
 | ||
| 		const TRectype & mov = cur.curr(LF_MOV);
 | ||
| 		TToken_string key(mov.get(MOV_NUMREG));
 | ||
| 		key.add(1);
 | ||
| 		
 | ||
| 		const TRectype & rmov = cache().get(LF_RMOV,key);
 | ||
| 		const char t = rmov.get_char(RMV_TIPOC);
 | ||
| 		const int gr = rmov.get_int(RMV_GRUPPO);
 | ||
| 		const int co = rmov.get_int(RMV_CONTO);
 | ||
| 		const long so = rmov.get_long(RMV_SOTTOCONTO);
 | ||
| 
 | ||
| 		valore = bill2ricl(t, gr, co, so, false);
 | ||
| 	}
 | ||
|   else if (code == "_CFPI")
 | ||
|   {
 | ||
| 		const TRectype & rmov = cur.curr(LF_RMOV);
 | ||
| 		const char sezione = s.get()[0];  	
 | ||
| 		const int fldcod = atoi(s.get());
 | ||
| 		const char sezriga = rmov.get_char(RMV_SEZIONE);		
 | ||
| 
 | ||
| 		valore = "";
 | ||
| 		if (sezione == sezriga)
 | ||
| 		{
 | ||
| 			const TString & t = rmov.get(RMV_TIPOC);
 | ||
| 
 | ||
| 			if (t.full())
 | ||
| 			{
 | ||
| 				TToken_string key(t);
 | ||
| 
 | ||
| 				key.add(rmov.get_long(RMV_SOTTOCONTO));
 | ||
| 
 | ||
| 				const TRectype & clifo = cache().get(LF_CLIFO, key);
 | ||
| 
 | ||
| 				valore = clifo.get(CLI_COFI);
 | ||
| 				if (valore.blank())
 | ||
| 					valore = clifo.get(CLI_PAIV);
 | ||
| 			}
 | ||
| 		}
 | ||
| 		add_field(rec, fldcod, valore.len() == 16 ? "F" : (valore.len() == 0 ? "" : "P"));
 | ||
|   }
 | ||
|   else if (code == "_CFCODE")
 | ||
|   {
 | ||
| 		if (_recodeclifo)
 | ||
| 		{
 | ||
| 			if (cur.curr(LF_CLIFO).get(CLI_TIPOCF) == "C")
 | ||
| 				valore = "018000";
 | ||
| 			else
 | ||
| 				valore = "036000";
 | ||
| 		}
 | ||
| 		else valore = str;
 | ||
| 	}
 | ||
|   else if (code == "_CFPIT")
 | ||
|   {
 | ||
| 		const TRectype & mov = cur.curr(LF_MOV);
 | ||
| 		TToken_string key(mov.get(MOV_TIPO));
 | ||
| 		const int fldcod = atoi(s.get());
 | ||
| 		const int fldcodcf = atoi(s.get());
 | ||
| 
 | ||
| 		key.add(mov.get_long(MOV_CODCF));
 | ||
| 		const TRectype & clifo = cache().get(LF_CLIFO, key);
 | ||
| 
 | ||
| 		valore = clifo.get(CLI_COFI);
 | ||
| 		if (valore.blank())
 | ||
| 		{
 | ||
| 			valore = clifo.get(CLI_PAIV);
 | ||
| 			add_field(rec, fldcod, (valore.blank() ? "" : "P"));
 | ||
| 		}
 | ||
| 		else
 | ||
| 			add_field(rec, fldcod, "F");
 | ||
| 		if (!clifo.empty())
 | ||
| 		{
 | ||
| 			key.cut(0);
 | ||
| 			key.add(mov.get(MOV_NUMREG));
 | ||
| 			key.add(1);
 | ||
| 			const TRectype & rmov = cache().get(LF_RMOV,key);
 | ||
| 			const char t = rmov.get_char(RMV_TIPOC);
 | ||
| 			const int gr = rmov.get_int(RMV_GRUPPO);
 | ||
| 			const int co = rmov.get_int(RMV_CONTO);
 | ||
| 			const long so = rmov.get_long(RMV_SOTTOCONTO);
 | ||
| 
 | ||
| 			const TString codcf = bill2ricl(t, gr, co, so, false);
 | ||
| 			add_field(rec, fldcodcf, codcf);
 | ||
| 		}
 | ||
| 	}
 | ||
|   else NFCHECK("Macro non definita: %s", (const char *)code);
 | ||
|   str = valore;
 | ||
| }
 | ||
| 
 | ||
| void TInvio::i_zucchetti_testa()
 | ||
| {
 | ||
| 	// cursore fittizio
 | ||
|   TRelation rel(LF_CAUSALI);
 | ||
|   TCursor cur(&rel);
 | ||
|   _nrecords = 0;
 | ||
|   _nfiles = 0;
 | ||
| 	if (_msk->get_bool(F_CAUSALI))
 | ||
| 	{
 | ||
| 		_nrecords += i_zucchetti_causali(FALSE)+2;
 | ||
| 		_nfiles++;
 | ||
| 	}	
 | ||
| 	if (_msk->get_bool(F_CLIFOR))
 | ||
| 	{
 | ||
| 		_nrecords += i_zucchetti_clifor(FALSE)+2;
 | ||
| 		_nfiles++;
 | ||
| 	}	
 | ||
| 	if (_msk->get_bool(F_CONTI))
 | ||
| 	{
 | ||
| 		_nrecords += i_zucchetti_conti(FALSE)+2;
 | ||
| 		_nfiles++;
 | ||
| 	}	
 | ||
| 	if (_msk->get_bool(F_MOVCONT))
 | ||
| 	{
 | ||
| 		_nrecsmocontab = i_zucchetti_movcont(FALSE);
 | ||
| 		if (_nrecsmocontab > 0)
 | ||
| 		{
 | ||
| 			_nrecords += _nrecsmocontab+2;
 | ||
| 			_nfiles++;
 | ||
| 		}	
 | ||
| 	}	
 | ||
| 	if (_msk->get_bool(F_MOVIVA))
 | ||
| 	{ 
 | ||
| 		_nrecsfattvend = i_zucchetti_moviva('V', FALSE);
 | ||
| 		if (_nrecsfattvend > 0)
 | ||
| 		{
 | ||
| 			_nrecords += _nrecsfattvend+2;
 | ||
| 			_nfiles++;
 | ||
| 		}	
 | ||
| 		_nrecscorr = i_zucchetti_moviva('C', FALSE);
 | ||
| 		if (_nrecscorr > 0)
 | ||
| 		{
 | ||
| 			_nrecords += _nrecscorr+2;
 | ||
| 			_nfiles++;
 | ||
| 		}	
 | ||
| 		_nrecsfattacqu = i_zucchetti_moviva('A', FALSE);
 | ||
| 		if (_nrecsfattacqu > 0)
 | ||
| 		{
 | ||
| 			_nrecords += _nrecsfattacqu+2;
 | ||
| 			_nfiles++;
 | ||
| 		}	
 | ||
| 	}	
 | ||
| 	TRecord_text rec;
 | ||
| 	rec.set_type("I");
 | ||
| 	_trasfile->autoload(rec, cur); 
 | ||
| 	_trasfile->write(rec);
 | ||
| }
 | ||
| 
 | ||
| void TInvio::i_zucchetti_testa_dettaglio(const TString16& descr, const long nrecs)
 | ||
| {
 | ||
| 	// cursore fittizio
 | ||
|   TRelation rel(LF_CAUSALI);
 | ||
|   TCursor cur(&rel);
 | ||
|   _nrecsdettaglio = nrecs;
 | ||
|   _descrdettaglio = descr;
 | ||
| 	TRecord_text rec;
 | ||
| 	rec.set_type("F");
 | ||
| 	_trasfile->autoload(rec, cur); 
 | ||
| 	_trasfile->write(rec);
 | ||
| }
 | ||
| 
 | ||
| void TInvio::i_zucchetti_coda_dettaglio(const TString16& descr, const long nrecs)
 | ||
| {
 | ||
| 	// cursore fittizio
 | ||
|   TRelation rel(LF_CAUSALI);
 | ||
|   TCursor cur(&rel);
 | ||
|   _nrecsdettaglio = nrecs;
 | ||
|   _descrdettaglio = descr;
 | ||
| 	TRecord_text rec;
 | ||
| 	rec.set_type("E");
 | ||
| 	_trasfile->autoload(rec, cur); 
 | ||
| 	_trasfile->write(rec);
 | ||
| }
 | ||
| 
 | ||
| void TInvio::i_zucchetti_coda()
 | ||
| {
 | ||
|   TRelation rel(LF_CAUSALI);
 | ||
|   TCursor cur(&rel);
 | ||
| 	TRecord_text rec;
 | ||
| 	rec.set_type("C");
 | ||
| 	_trasfile->autoload(rec, cur); 
 | ||
| 	_trasfile->write(rec);
 | ||
| }
 | ||
| 
 | ||
| long TInvio::i_zucchetti_causali(const bool invio)
 | ||
| {
 | ||
|   TRelation rel(LF_CAUSALI);
 | ||
|   TCursor cur(&rel);
 | ||
|   const long cur_items = cur.items();
 | ||
|   if (cur_items != 0 && invio) 
 | ||
|   {
 | ||
| 		TProgind pi(cur_items, rel.file().description(), true, true);
 | ||
| 		i_zucchetti_testa_dettaglio("CAUSMOVM", cur_items);
 | ||
| 	  cur.freeze();
 | ||
|     TRectype& cur_rec = cur.curr();
 | ||
|     for (cur = 0; cur.pos() < cur_items; ++(cur))
 | ||
|     {
 | ||
| 			if (!pi.addstatus(1))
 | ||
| 				break;
 | ||
| 			TRecord_text rec;
 | ||
| 			rec.set_type("21");
 | ||
| 			_trasfile->autoload(rec, cur); 
 | ||
| 			_trasfile->write(rec);
 | ||
|     }	
 | ||
| 		i_zucchetti_coda_dettaglio("CAUSMOVM", cur_items);
 | ||
|   }                  
 | ||
|   return cur_items;
 | ||
| }
 | ||
| 
 | ||
| long TInvio::i_zucchetti_conti(const bool invio)
 | ||
| {
 | ||
|   TRelation rel(LF_PCON);
 | ||
|   TCursor cur(&rel);
 | ||
| 
 | ||
| 	cur.setfilter("(CONTO>=0)&&(SOTTOCONTO>0)");
 | ||
|   const long cur_items = cur.items();
 | ||
|   if (cur_items != 0 && invio) 
 | ||
|   {
 | ||
| 		TProgind pi(cur_items, rel.file().description(), true, true);
 | ||
| 		i_zucchetti_testa_dettaglio("DESCONTI", cur_items);
 | ||
| 	  cur.freeze();
 | ||
|     TRectype& cur_rec = cur.curr();
 | ||
|     for (cur = 0; cur.pos() < cur_items; ++(cur))
 | ||
|     {
 | ||
| 			if (!pi.addstatus(1))
 | ||
| 				break;
 | ||
| 			TRecord_text rec;
 | ||
| 			rec.set_type("20");
 | ||
| 			_trasfile->autoload(rec, cur); 
 | ||
| 			_trasfile->write(rec);
 | ||
|     }	
 | ||
| 		i_zucchetti_coda_dettaglio("DESCONTI", cur_items);
 | ||
|   }                  
 | ||
|   return cur_items;
 | ||
| }
 | ||
| 
 | ||
| long TInvio::i_zucchetti_movcont(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_RMOV, "NUMREG==NUMREG", 1);
 | ||
|   TCursor cur(&rel, "23->PROTIVA == \"\"", 2, &da, &a);
 | ||
| 
 | ||
|   const long cur_items = cur.items();
 | ||
|   long totrec = 0;
 | ||
|   if (cur_items != 0) 
 | ||
|   {
 | ||
| 		TProgind pi(cur_items, rel.file().description(), true, true);
 | ||
|   	if (invio)
 | ||
| 			i_zucchetti_testa_dettaglio("MOCONTAB", _nrecsmocontab);
 | ||
| 	  cur.freeze();
 | ||
|     TRectype& cur_rec = cur.curr();
 | ||
|     for (cur = 0; cur.pos() < cur_items; ++(cur))
 | ||
|     { 
 | ||
| 			if (!pi.addstatus(1))
 | ||
| 				break;
 | ||
| 			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("50");
 | ||
| 						cur.save_status();
 | ||
| 						_finemov = !(cur.next_match(LF_RMOV, "NUMREG"));
 | ||
| 						cur.restore_status();
 | ||
| 						_trasfile->autoload(recrighe, cur); 
 | ||
| 						_trasfile->write(recrighe);
 | ||
| 					}
 | ||
| 					totrec++;	
 | ||
|  				}
 | ||
| 		  	continua = cur.next_match(LF_RMOV, "NUMREG");
 | ||
|  			}	
 | ||
|     }	
 | ||
|     if (invio)
 | ||
| 			i_zucchetti_coda_dettaglio("MOCONTAB", _nrecsmocontab);
 | ||
|   }                  
 | ||
|   return totrec;
 | ||
| }
 | ||
| 
 | ||
| long TInvio::i_zucchetti_moviva(const char acqven, 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);
 | ||
|   TString filtro = "(23->PROTIVA != \"\")&&";
 | ||
| 	const bool vend = acqven == 'V';
 | ||
| 	const bool corrisp = acqven == 'C';
 | ||
|   if (vend)
 | ||
|   	filtro << "(REG->I0==\"1\")&&(REG->B0!=\"X\")";
 | ||
|   else 
 | ||
| 		if (corrisp)
 | ||
|   		filtro << "(REG->I0 ==\"1\")&&(REG->B0==\"X\")";
 | ||
| 		else 
 | ||
|   		filtro << "(REG->I0 == 2)";
 | ||
|   TCursor cur(&rel, "", 2, &da, &a);
 | ||
|   cur.setfilter(filtro, true);
 | ||
|   const long cur_items = cur.items();
 | ||
|   long totrec = 0;
 | ||
|   if (cur_items != 0) 
 | ||
|   {   
 | ||
| 		TProgind pi(cur_items, rel.file().description(), true, true);
 | ||
|   	if (invio)
 | ||
| 		{
 | ||
| 			if (vend)
 | ||
| 				i_zucchetti_testa_dettaglio("FATTVEND", _nrecsfattvend);
 | ||
| 			else
 | ||
| 				if (corrisp)
 | ||
| 					i_zucchetti_testa_dettaglio("CORRNORM", _nrecscorr);
 | ||
| 				else
 | ||
| 					i_zucchetti_testa_dettaglio("FATTACQU", _nrecsfattacqu);
 | ||
| 		}
 | ||
| 	  cur.freeze();
 | ||
|     TRectype& cur_rec = cur.curr();
 | ||
|     for (cur = 0; cur.pos() < cur_items; ++(cur))
 | ||
|     { 
 | ||
| 			if (!pi.addstatus(1))
 | ||
| 				break;
 | ||
| 			if (!corrisp)
 | ||
| 			{
 | ||
| 				if (invio)
 | ||
| 				{
 | ||
| 					TRecord_text rec;
 | ||
| 					rec.set_type("30");
 | ||
| 					_trasfile->autoload(rec, cur); 
 | ||
| 					_trasfile->write(rec);
 | ||
| 				}	
 | ||
| 				totrec++;
 | ||
| 			}
 | ||
| 			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(corrisp ? "40" : "31");
 | ||
| 						cur.save_status();
 | ||
| 						_totale = !(cur.next_match(LF_RMOVIVA, "NUMREG"));
 | ||
| 						cur.restore_status();
 | ||
| 						_trasfile->autoload(recrighe, cur); 
 | ||
| 						_trasfile->write(recrighe);
 | ||
| 					}
 | ||
| 					totrec++;	
 | ||
|  				}
 | ||
| 		  	continua = cur.next_match(LF_RMOVIVA, "NUMREG");
 | ||
|  			}	
 | ||
|     }	
 | ||
|     if (invio)
 | ||
| 		{
 | ||
| 			if (vend)
 | ||
| 				i_zucchetti_coda_dettaglio("FATTVEND", _nrecsfattvend);
 | ||
| 			else
 | ||
| 				if (corrisp)
 | ||
| 					i_zucchetti_coda_dettaglio("CORRNORM", _nrecscorr);
 | ||
| 				else
 | ||
| 					i_zucchetti_coda_dettaglio("FATTACQU", _nrecsfattacqu);
 | ||
| 		}
 | ||
|   }                  
 | ||
|   return totrec;
 | ||
| }
 | ||
| 
 | ||
| long TInvio::i_zucchetti_clifor(const bool invio)
 | ||
| {
 | ||
|   TRelation rel(LF_CLIFO);
 | ||
|   TCursor cur(&rel);
 | ||
| 
 | ||
| 	if (!ini_get_bool(CONFIG_DITTA, "tc", "ZUCLISOSP"))
 | ||
| 		cur.setfilter("SOSPESO!=\"X\"");
 | ||
| 
 | ||
| 	const long cur_items = cur.items();
 | ||
|   if (cur_items != 0 && invio) 
 | ||
|   {
 | ||
| 		TProgind pi(cur_items, rel.file().description(), true, true);
 | ||
| 		i_zucchetti_testa_dettaglio("CLIEFORN", cur_items*2);
 | ||
| 	  cur.freeze();
 | ||
|     TRectype& cur_rec = cur.curr();
 | ||
|     for (cur = 0; cur.pos() < cur_items; ++(cur))
 | ||
|     {
 | ||
| 			if (!pi.addstatus(1))
 | ||
| 				break;
 | ||
| 			TRecord_text rec;
 | ||
| 
 | ||
| 			rec.set_type("10");
 | ||
| 			_trasfile->autoload(rec, cur); 
 | ||
| 			_trasfile->write(rec);
 | ||
| 
 | ||
| 			rec.set_type("11");
 | ||
| 			_trasfile->autoload(rec, cur); 
 | ||
| 			_trasfile->write(rec);
 | ||
|     }	
 | ||
| 		i_zucchetti_coda_dettaglio("CLIEFORN", cur_items*2);
 | ||
|   }                  
 | ||
|   return cur_items+cur_items;
 | ||
| }
 | ||
| 
 | ||
| //metodone globale che chiama, come un menu, i vari sottometodi in base alle scelte sulla maschera
 | ||
| void TInvio::invio_zucchetti()
 | ||
| {
 | ||
| 	//prepara il file su cui scrivere, ovvero il _trasfile
 | ||
| 	TFilename filename = _msk->get(F_PATH);
 | ||
| 	
 | ||
| 	filename.add(_msk->get(F_FILE));
 | ||
| 	if (filename.exist())
 | ||
| 		remove(filename);
 | ||
| 	_trasfile = new TInvio_file(filename);
 | ||
| 	_trasfile->open(filename,'w');
 | ||
| 	_trasfile->set_recode_clifo(ini_get_bool(CONFIG_DITTA, "tc", "ZURECCF"));
 | ||
|   _log = new TLog_report("Trasferimento Zucchetti");
 | ||
|   _log->kill_duplicates();
 | ||
| 
 | ||
| 	_trcau = ini_get_bool(CONFIG_DITTA, "tc", "ZUTRCAU");
 | ||
| 	_triva = ini_get_bool(CONFIG_DITTA, "tc", "ZUTRIVA");
 | ||
| 	_trcon = ini_get_bool(CONFIG_DITTA, "tc", "ZUTRCON");
 | ||
| 	_trban = ini_get_bool(CONFIG_DITTA, "tc", "ZUTRBAN");
 | ||
| 
 | ||
| 	i_zucchetti_testa();
 | ||
| 
 | ||
| 	if (_msk->get_bool(F_CAUSALI))
 | ||
| 		i_zucchetti_causali();
 | ||
| 	if (_msk->get_bool(F_CLIFOR))
 | ||
| 		i_zucchetti_clifor();
 | ||
| 	if (_msk->get_bool(F_CONTI))
 | ||
| 		i_zucchetti_conti();
 | ||
| 	if (_msk->get_bool(F_MOVCONT))
 | ||
| 		i_zucchetti_movcont();
 | ||
| 	if (_msk->get_bool(F_MOVIVA))
 | ||
| 	{
 | ||
| 		i_zucchetti_moviva('V');
 | ||
| 		i_zucchetti_moviva('C');
 | ||
| 		i_zucchetti_moviva('A');
 | ||
| 	}	
 | ||
| 	i_zucchetti_coda();
 | ||
|     
 | ||
| 	TReport_book book;
 | ||
| 
 | ||
|   book.add(*_log);
 | ||
|   book.preview();
 | ||
| 
 | ||
| 	_trasfile->close();
 | ||
| 	delete _trasfile;
 | ||
| 	_trasfile = NULL;
 | ||
| 	delete _log;
 | ||
| 	_log = NULL;
 | ||
| 	if (yesno_box("Confermi il trasferimento"))
 | ||
| 	{
 | ||
| 		const TDate from(_msk->get_date(F_DATAINI));
 | ||
| 		const TDate to(_msk->get_date(F_DATAFIN));
 | ||
| 		TString query = "USE MOV KEY 2 SELECT INVIATO!=\"X\"";           
 | ||
| 
 | ||
| 		query << "\nFROM DATAREG=#DATA_DA";      
 | ||
| 		query << "\nTO DATAREG=#DATA_AL";      
 | ||
| 
 | ||
| 		TISAM_recordset mov(query);
 | ||
| 		
 | ||
| 		mov.set_var("#DATA_DA", TVariant(from));
 | ||
| 		mov.set_var("#DATA_AL", TVariant(to));
 | ||
| 
 | ||
|     if (mov.items() > 0L)
 | ||
| 		{
 | ||
| 			TProgind pi(mov.items(), TR("Conferma trasferimento"), true, true);
 | ||
| 			TLocalisamfile cgmov(LF_MOV);
 | ||
| 		
 | ||
| 			for (bool ok = mov.move_first(); ok; ok = mov.move_next())
 | ||
| 			{
 | ||
| 				if (!pi.addstatus(1))
 | ||
| 					break;
 | ||
| 				const long numreg = mov.get(MOV_NUMREG).as_int();
 | ||
| 
 | ||
| 				cgmov.put(MOV_NUMREG, numreg);
 | ||
| 				if (cgmov.read(_isequal, _lock) == NOERR)
 | ||
| 				{
 | ||
| 					cgmov.put(MOV_INVIATO, "X");
 | ||
| 					cgmov.rewrite();
 | ||
| 				}
 | ||
| 			}
 | ||
| 		}
 | ||
| 		ini_set_int(CONFIG_DITTA, "tc", "ZUNUMEROINVIO", _msk->get_int(F_NUMEROINVIO));
 | ||
| 		ini_set_string(CONFIG_DITTA, "tc", "ZUULTINV", to);
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| bool TInvio::create()
 | ||
| {
 | ||
| 	_tabelle = new TRiclassifica_cache;
 | ||
|   _msk = new TInvio_mask();
 | ||
|   _trasfile = NULL;
 | ||
| 	_conti = new TRecord_cache(LF_RICLPDC, 1);
 | ||
|   return TSkeleton_application::create();
 | ||
| }
 | ||
| 
 | ||
| bool TInvio::destroy()
 | ||
| { 
 | ||
| 	if (_trasfile)  
 | ||
|   	delete _trasfile;
 | ||
|   delete _msk;
 | ||
| 	delete _conti;
 | ||
| 	delete _tabelle;
 | ||
|   return TSkeleton_application::destroy();
 | ||
| }
 | ||
| 
 | ||
| void TInvio::main_loop()
 | ||
| {
 | ||
| 	_msk->set(F_NUMEROINVIO, ini_get_int(CONFIG_DITTA, "tc", "ZUNUMEROINVIO") + 1);
 | ||
| 	
 | ||
| 	TDate data(ini_get_string(CONFIG_DITTA, "tc", "ZUULTINV"));
 | ||
| 
 | ||
| 	++data;
 | ||
| 	_msk->set(F_DATAINI, data);
 | ||
| 	data.addmonth();
 | ||
| 	--data;
 | ||
| 	_msk->set(F_DATAFIN, data);
 | ||
| 	_msk->set(F_PATH, ini_get_string(CONFIG_DITTA, "tc", "ZUPATH"));
 | ||
| 	_msk->set(F_FILE, ini_get_string(CONFIG_DITTA, "tc", "ZUFILE", "im000000"));
 | ||
| 	_msk->set(F_CAUSALI, ini_get_string(CONFIG_DITTA, "tc", "ZUCAUSALI"));
 | ||
| 	_msk->set(F_CONTI, ini_get_string(CONFIG_DITTA, "tc", "ZUCONTI"));
 | ||
| 	_msk->set(F_CLIFOR, ini_get_string(CONFIG_DITTA, "tc", "ZUCLIFOR"));
 | ||
| 	_msk->set(F_MOVCONT, ini_get_string(CONFIG_DITTA, "tc", "ZUMOVCONT"));
 | ||
| 	_msk->set(F_MOVIVA, ini_get_string(CONFIG_DITTA, "tc", "ZUMOVIVA"));
 | ||
| 	_msk->set(F_CORRISP, ini_get_string(CONFIG_DITTA, "tc", "ZUCORRISP"));
 | ||
| 	_msk->set(F_SALDACONTO, ini_get_string(CONFIG_DITTA, "tc", "ZUSALDACONTO"));
 | ||
| 
 | ||
|   while (_msk->run() != K_QUIT)
 | ||
|   {                                  
 | ||
|   	_totale = false;
 | ||
|   	_finemov = false;
 | ||
| 		ini_set_string(CONFIG_DITTA, "tc", "ZUPATH", _msk->get(F_PATH));
 | ||
| 		ini_set_string(CONFIG_DITTA, "tc", "ZUFILE", _msk->get(F_FILE));
 | ||
| 	  ini_set_string(CONFIG_DITTA, "tc", "ZUCAUSALI", _msk->get(F_CAUSALI));
 | ||
| 	  ini_set_string(CONFIG_DITTA, "tc", "ZUCONTI", _msk->get(F_CONTI));
 | ||
| 		ini_set_string(CONFIG_DITTA, "tc", "ZUCLIFOR",_msk->get(F_CLIFOR));
 | ||
| 		ini_set_string(CONFIG_DITTA, "tc", "ZUMOVCONT", _msk->get(F_MOVCONT));
 | ||
| 		ini_set_string(CONFIG_DITTA, "tc", "ZUMOVIVA", _msk->get(F_MOVIVA));
 | ||
| 		ini_set_string(CONFIG_DITTA, "tc", "ZUCORRISP", _msk->get(F_CORRISP));
 | ||
| 		ini_set_string(CONFIG_DITTA, "tc", "ZUSALDACONTO", _msk->get(F_SALDACONTO));
 | ||
| 		_dataini = _msk->get_date(F_DATAINI);
 | ||
| 		_datafin = _msk->get_date(F_DATAFIN);
 | ||
| 		invio_zucchetti();
 | ||
| 	}	
 | ||
| }
 | ||
| 
 | ||
| int tc1100(int argc, char **argv) 
 | ||
| {
 | ||
|   TInvio a;
 | ||
|   a.run(argc, argv, "Invio dati contabilit<69> Zucchetti");
 | ||
|   return 0;
 | ||
| }
 | ||
| 
 |