Files correlati : Ricompilazione Demo : [ ] Commento : Per Roberto git-svn-id: svn://10.65.10.50/branches/R_10_00@21690 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			370 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			370 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| #include <applicat.h>
 | ||
| #include <automask.h>
 | ||
| #include <progind.h>
 | ||
| #include <utility.h>
 | ||
| #include <relation.h>
 | ||
| #include <reprint.h>
 | ||
| #include <reputils.h>
 | ||
| #include <textset.h>
 | ||
| #include <tabutil.h>
 | ||
| 
 | ||
| #include "../cg/cglib01.h"
 | ||
| #include "../cg/cg2103.h"
 | ||
| #include "../cg/cgsaldac.h"
 | ||
| #include "../cg/cgpagame.h"
 | ||
| 
 | ||
| #include "pi0001.h"
 | ||
| #include "pi0001100.h"
 | ||
| #include "pi0001200.h"
 | ||
| #include "pi0001200a.h"
 | ||
| 
 | ||
| #include <pconti.h>
 | ||
| #include <mov.h>
 | ||
| #include <rmov.h>
 | ||
| #include <rmoviva.h>
 | ||
| 
 | ||
| /* // Tracciato File: FGA5DAT/CGSCA00F - CGSCA : Scadenze INDEX                                                 9/12/09 17:43:05 Pag.    1
 | ||
| #define TR01CD     0		// A=Att./Sosp./Ann/Estr.ant.ft                          DIZSMAS    - ATTI
 | ||
| #define DT01CD     1		// Data ult.manut.                                       DIZSMAS    - DATS
 | ||
| #define NR01CD     2		// Numero azione di aggiornamento                        DIZSMAS    - NRAZ
 | ||
| #define CDDTCD     3		// Codice Ditta                                          DIZSMAS    - CDDT
 | ||
| #define AAPRCD     4		// Anno Operazione                                       DIZSMAS    - AAPR         Key   1
 | ||
| #define ANNPCD     5		// Anno Reg.DA GESTIRE                                   DIZSMAS    - ANNP
 | ||
| #define TPGICD     6		// Giornale IVA  TB=GI                                   DIZSMAS    - TPGI         Key   2
 | ||
| #define DTOPCD     7		// Data operazione                                       DIZSMAS    - DATS         Key   3
 | ||
| #define NONPCD     8		// Nr. Operaz./Nr. Prot.                                 DIZSMAS    - NONP         Key   4
 | ||
| #define NRRGCD     9		// Numero Riga 2                                         DIZSMAS    - NRR2         Key   5
 | ||
| #define PROGCD     10		// Progressivo                                           DIZSMAS    - PROG         Key   6
 | ||
| #define IMPOCD     11		// Importo  "-"=Avere                                    DIZSMAS    - IMPO
 | ||
| #define CDVACD     12		// Codice Valuta  TB=VA                                  DIZSMAS    - CDVA
 | ||
| #define CAMBCD     13		// Cambio                                                DIZSMAS    - CAMB
 | ||
| #define IMVACD     14		// Importo Valuta                                        DIZSMAS    - IMVA
 | ||
| #define SCADCD     15		// Data scadenza                                         DIZSMAS    - DATS
 | ||
| #define TIPOCD     16		// Tipo Effetto                                          DIZSMAS    - TIPO
 | ||
| #define GEINCD     17		//  * = Generato RCD su Insoluti                          DIZSMAS    - FLAG
 | ||
| #define CAMBCD2    18		// Cambio EURO                                           DIZSMAS    - CAME
 | ||
| #define IMVACD2    19		// Importo val2                                          DIZSMAS    - IMPO */
 | ||
| 
 | ||
| // Tracciato File: FGA5DAT/CGSPA00F - CGSPA : Scadenze partite aperte                                        9/12/09 17:43:12 Pag.    1
 | ||
| #define AT01PA     0		// Tipo provvisorio                                      DIZSMAS    - ATTI
 | ||
| #define CONTPA     1		// Gr. Conto Sottoconto                                  DIZSMAS    - CONT1
 | ||
| #define DIVIPA     2		// Divisione  TB=DI                                      DIZSMAS    - DIVI
 | ||
| #define AAOPPA     3		// Anno partita                                          DIZSMAS    - ANNO
 | ||
| #define NPARPA     4		// Nr Partita                                            DIZSMAS    - NPAR
 | ||
| #define NONPPA     5		// Nr. Operaz./Nr. Prot.                                 DIZSMAS    - NONP
 | ||
| #define DTRGPA     6		// Data registrazione                                    DIZSMAS    - DATS
 | ||
| #define IMPOPA     7		// Importo  "-"=Avere                                    DIZSMAS    - IMPO
 | ||
| #define CDVAPA     8		// Codice Valuta  TB=VA                                  DIZSMAS    - CDVA
 | ||
| #define CAMBPA     9		// Cambio                                                DIZSMAS    - CAMB
 | ||
| #define IMVAPA     10		// Importo Valuta                                        DIZSMAS    - IMVA
 | ||
| #define DTSCPA     11		// Data scadenza                                         DIZSMAS    - DATS
 | ||
| #define DTDOPA     12		// Data documento                                        DIZSMAS    - DATS
 | ||
| #define NRDOPA     13		// N<> Documento                                          DIZSMAS    - NUDO
 | ||
| #define CDRAPA     14		// Codice rata Tab.ET                                    DIZSMAS    - TIPO
 | ||
| #define TIPOPA     15		// Tipo Effetto                                          DIZSMAS    - TIPO
 | ||
| #define DSTIPA     16		// Descr.tipo rata                                                  -
 | ||
| #define NREFPA     17		// Nr.effetto attivo                                     DIZSMAS    - NREF
 | ||
| #define NREPPA     18		// Nr.effetto passivo                                    DIZSMAS    - NREF
 | ||
| #define FL01PA     19		// Flag Generico                                         DIZSMAS    - FLAG
 | ||
| #define FL02PA     20		// Flag Generico                                         DIZSMAS    - FLAG
 | ||
| #define FL03PA     21		// Flag Generico                                         DIZSMAS    - FLAG
 | ||
| #define FL04PA     22		// Flag Generico                                         DIZSMAS    - FLAG
 | ||
| #define FL05PA     23		// Flag Generico                                         DIZSMAS    - FLAG
 | ||
| #define FL06PA     24		// Flag Generico                                         DIZSMAS    - FLAG
 | ||
| #define FL07PA     25		// Flag Generico                                         DIZSMAS    - FLAG
 | ||
| #define FL08PA     26		// Flag Generico                                         DIZSMAS    - FLAG
 | ||
| #define FL09PA     27		// Flag Generico                                         DIZSMAS    - FLAG
 | ||
| #define FL10PA     28		// Flag Generico                                         DIZSMAS    - FLAG
 | ||
| #define CAMBPA2    29		// Cambio EURO                                           DIZSMAS    - CAME
 | ||
| #define IMPOPA2    30		// Importo val 2                                         DIZSMAS    - IMPO
 | ||
| #define TIPOCF     31		// Creato da Roberto
 | ||
| 
 | ||
| 
 | ||
| TObject* TCausali_cache::key2obj(const char* key)
 | ||
| {
 | ||
|   // Metodo bastardo per evitare TToken_string temporanee "a randa"
 | ||
|   // sfrutto chiave a lunghezza fissa
 | ||
|   const int anno = atoi(key);
 | ||
|   const char* codice = key+5;
 | ||
|   TCausale* pcaus = new TCausale(codice, anno);
 | ||
|   return pcaus;
 | ||
| }
 | ||
| 
 | ||
| const TCausale& TCausali_cache::causale(const char* codice, int annoiva)
 | ||
| {
 | ||
|   // Metodo bastardo per evitare TToken_string temporanee "a randa"
 | ||
|   // creo chiave a lunghezza fissa anno+codice = 9999|AAA
 | ||
|   TString8 key;
 | ||
|   key.format("%04d|%s", annoiva, codice);
 | ||
|   return *(const TCausale*)objptr(key);
 | ||
| }
 | ||
| 
 | ||
| ///////////////////////////////////////////////////////////
 | ||
| // TAutomask
 | ||
| ///////////////////////////////////////////////////////////
 | ||
| 
 | ||
| class TImporta_sc_mask : public TAutomask
 | ||
| {
 | ||
| protected:
 | ||
|   virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | ||
| 
 | ||
| public:
 | ||
|   TImporta_sc_mask();
 | ||
| };
 | ||
|   
 | ||
| TImporta_sc_mask::TImporta_sc_mask() :TAutomask ("pi0001200a")
 | ||
| {
 | ||
| }  
 | ||
| 
 | ||
| bool TImporta_sc_mask::on_field_event(TOperable_field& f, TField_event e, long jolly)
 | ||
| { 
 | ||
| 	switch (f.dlg())
 | ||
| 	{
 | ||
| 		//giochetto per avere la lista dei files validi nella directory di trasferimento!
 | ||
| 		case F_NAME:
 | ||
| 			if (e == fe_button)
 | ||
| 			{
 | ||
| 				TArray_sheet as(-1, -1, 72, 20, TR("Selezione file"), 
 | ||
|                            "File@32");
 | ||
| 				TFilename path = get(F_PATH);
 | ||
| 				path.add("*.txt");	//files delle testate
 | ||
| 				list_files(path, as.rows_array());
 | ||
| 				TFilename name;
 | ||
| 				FOR_EACH_ARRAY_ROW(as.rows_array(), i, row)
 | ||
| 				{
 | ||
| 					name = *row;
 | ||
| 					*row = name.name();
 | ||
| 				}
 | ||
| 				if (as.run() == K_ENTER)
 | ||
| 				{
 | ||
| 					f.set(as.row(as.selected()));
 | ||
| 				}
 | ||
| 			}
 | ||
| 			break;
 | ||
| 		default:
 | ||
| 			break;
 | ||
| 	}
 | ||
|   return true;
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| ///////////////////////////////////////
 | ||
| // TSkeleton_application
 | ||
| ///////////////////////////////////////
 | ||
| class TImporta_sc : public TSkeleton_application
 | ||
| {
 | ||
| 	virtual bool check_autorization() const {return false;}
 | ||
|   virtual const char * extra_modules() const {return "ba";}
 | ||
| 
 | ||
| 	TImporta_sc_mask*				  _msk;
 | ||
| 
 | ||
| //protected:
 | ||
| 
 | ||
| 
 | ||
| public:           
 | ||
|   virtual bool create();
 | ||
|   virtual bool destroy();
 | ||
|   virtual void main_loop();
 | ||
| 	void build_table();
 | ||
| 	void transfer(const TFilename& file);
 | ||
|  
 | ||
|   TImporta_sc() {};
 | ||
| };
 | ||
| 
 | ||
| bool build_rec(const TRelation& rel, void* pJolly)
 | ||
| {
 | ||
| 	CHECK(pJolly != NULL, "Null Table");
 | ||
| 
 | ||
| 	TTable * gmm = (TTable * ) pJolly;
 | ||
| 	long nmov = rel.lfile().get_long(MOV_NUMREG);
 | ||
| 	TString part = rel.lfile().get(MOV_DESCR);
 | ||
| 	int p = part.find("Part. ");
 | ||
| 
 | ||
| 	if (p >= 0)
 | ||
| 	{
 | ||
| 		p += 6;
 | ||
| 
 | ||
| 		const int p1 = part.find("-", p);
 | ||
| 
 | ||
| 		gmm->zero();
 | ||
| 		if (p1 > p)
 | ||
| 			part.cut(p1);
 | ||
| 		TString key(rel.lfile().get(MOV_TIPO));
 | ||
| 		key << ',' << rel.lfile().get(MOV_CODCF) << ',' << part.mid(p);
 | ||
| 		gmm->put("CODTAB", key);	
 | ||
| 		gmm->put("I0", nmov);
 | ||
| 		gmm->write_rewrite();
 | ||
| 	}
 | ||
| 	return true;
 | ||
| }
 | ||
| 
 | ||
| void TImporta_sc::build_table()
 | ||
| {
 | ||
| 	TTable gmm("GMM");
 | ||
| 	TCursor mov(new TRelation(LF_MOV));
 | ||
| 	
 | ||
| 	if (gmm.items() == 0 || gmm.read(_isfirst) != NOERR)
 | ||
| 		mov.scan(build_rec, &gmm, "Costruzione tabella di correlazione movimenti");
 | ||
| }
 | ||
| 
 | ||
| void TImporta_sc::transfer(const TFilename& file)
 | ||
| {
 | ||
|   TImporta_galileo_recset s(file);
 | ||
|   TProgind pi(s.items(),"Importazione saldaconto in corso ...",true,true);
 | ||
| 	TConfig * conf = NULL;
 | ||
| 	int anno = 0;
 | ||
| 	int part;
 | ||
| 	TString4 gruppo;
 | ||
| 	TString4 conto;
 | ||
| 	TString8 sottoconto;
 | ||
| 	TString descr(50);
 | ||
| 	TPartita * game = NULL;
 | ||
| 	long nreg;
 | ||
| 	TCausali_cache cache_causali;
 | ||
| 	TLog_report log("Importazione partite");
 | ||
| 
 | ||
|   build_table();
 | ||
| 	for (bool ok=s.move_first();ok;ok=s.move_next())
 | ||
|   {
 | ||
|     if (!pi.addstatus(1)) 
 | ||
|       break;
 | ||
| 		
 | ||
| 		const int a = s.get(AAOPPA).as_int();
 | ||
| 	  const long p = s.get(NPARPA).as_int();
 | ||
| 
 | ||
| 		if (a == 0)
 | ||
| 			continue;
 | ||
| 
 | ||
| 		if (anno != a || p != part )
 | ||
| 		{
 | ||
| 			anno = a;
 | ||
| 			part = p;
 | ||
| 
 | ||
| 			TToken_string key(25, ',');
 | ||
| 			const TString tipocf = s.get(TIPOCF).as_string();
 | ||
| 			const long codcf = atol(s.get(CONTPA).as_string().mid(4));
 | ||
| 
 | ||
| 			key.add(tipocf);
 | ||
| 			key.add(codcf);
 | ||
| 			key.add(part);
 | ||
| 			key.add(anno);
 | ||
| 
 | ||
| 			nreg = cache().get("GMM", key).get_long("I0");
 | ||
| 
 | ||
| 			if (nreg == 0)
 | ||
| 			{
 | ||
| 				const TString msg = format("Partita %s non trovata nei movimenti", (const char *) key);
 | ||
| 
 | ||
| 				log.log(0, msg);
 | ||
| 				continue;
 | ||
| 			}
 | ||
| 			if (game != NULL)
 | ||
| 			{
 | ||
| 				game->write();
 | ||
| 				delete game;
 | ||
| 			}
 | ||
| 			game = NULL;
 | ||
| 		}
 | ||
| 		
 | ||
|     real residuo = s.get(IMPOPA).as_real();
 | ||
| 		if (residuo !=ZERO)
 | ||
| 		{
 | ||
| 			TToken_string keymov;
 | ||
| 
 | ||
| 			keymov.add(nreg);
 | ||
| 			const TRectype & mov = cache().get(LF_MOV, keymov);
 | ||
| 
 | ||
| 			keymov.add(1);
 | ||
| 
 | ||
| 			const TRectype & rmov = cache().get(LF_RMOV, keymov);
 | ||
| 			TBill clifo(rmov);
 | ||
| 
 | ||
| 			const TCausale & c = cache_causali.causale(mov.get(MOV_CODCAUS), mov.get_int(MOV_ANNOIVA));
 | ||
| 	    
 | ||
| 			if (game == NULL)
 | ||
| 				game = new TPartita(clifo, anno, format("%7d", part));
 | ||
| 
 | ||
| 			TRiga_partite& partita = game->new_row();
 | ||
| 
 | ||
| 			partita.put(PART_TIPOMOV, c.tipomov());
 | ||
| 			partita.put(PART_DATAREG, mov.get(MOV_DATAREG)); 
 | ||
| 			partita.put(PART_DATADOC, mov.get(MOV_DATADOC));
 | ||
| 			partita.put(PART_NUMDOC, mov.get(MOV_NUMDOC));
 | ||
| 			descr = s.get(DSTIPA).as_string();
 | ||
| 			if (descr.blank())
 | ||
| 				descr = mov.get(MOV_DESCR);
 | ||
| 			partita.put(PART_DESCR, descr);
 | ||
| 			partita.put(PART_CODCAUS, c.codice());
 | ||
| 			partita.put(PART_REG, c.reg().name());
 | ||
| 			partita.put(PART_SEZ, c.sezione(1));
 | ||
| 
 | ||
| 			partita.put(PART_SOTTOCONTO, clifo.sottoconto());
 | ||
| 			const TString8 codpag(mov.get(MOV_CODPAG));
 | ||
| 			TPagamento pag(codpag);
 | ||
| 			partita.put(PART_TIPOPAG, pag.n_rate() > 0 ? pag.tipo_rata(0) : _rim_dir);
 | ||
| 
 | ||
| 			partita.put(PART_GRUPPOCL, clifo.gruppo());
 | ||
| 			partita.put(PART_CONTOCL, clifo.conto());
 | ||
| 			partita.put(PART_PROTIVA, mov.get(MOV_PROTIVA));
 | ||
| 			int sign = residuo.sign();
 | ||
| 	    
 | ||
| 			TImporto importo(sign < 0 ? 'A' : 'D', abs(residuo));
 | ||
| 			importo.normalize(c.sezione(1));
 | ||
| 			partita.add(PART_IMPTOTDOC, importo.valore());
 | ||
| 			partita.put(PART_IMPORTO, importo.valore());
 | ||
| 	    
 | ||
| 			TRiga_scadenze& scadenza = partita.new_row(); 
 | ||
| 
 | ||
| 			scadenza.put(SCAD_CODPAG, codpag);
 | ||
| 			scadenza.put(SCAD_DATASCAD, s.get(DTSCPA).as_string());
 | ||
| 			scadenza.put(SCAD_IMPORTO, importo.valore());
 | ||
| 			scadenza.put(SCAD_TIPOPAG, partita.get(PART_TIPOPAG));
 | ||
| 		}
 | ||
|   }
 | ||
| 	if (game != NULL)
 | ||
| 	{
 | ||
| 		game->write();
 | ||
| 		delete game;
 | ||
| 	}
 | ||
|   TReport_book b;
 | ||
| 	b.add(log);
 | ||
| 	b.print_or_preview();
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| bool TImporta_sc::create()
 | ||
| {
 | ||
|   _msk = new TImporta_sc_mask();
 | ||
|          
 | ||
|   return TSkeleton_application::create();
 | ||
| }
 | ||
| 
 | ||
| bool TImporta_sc::destroy()
 | ||
| {
 | ||
| 	delete _msk;
 | ||
|   return TApplication::destroy();
 | ||
| }
 | ||
| 
 | ||
| void TImporta_sc::main_loop()
 | ||
| {
 | ||
|   KEY	tasto;
 | ||
| 	tasto = _msk->run();
 | ||
|   if (tasto == K_ENTER)
 | ||
|   {
 | ||
|     //genero il nome del file da caricare
 | ||
|     TFilename name = _msk->get(F_PATH);
 | ||
|     name.add(_msk->get(F_NAME));
 | ||
| 		transfer(name);
 | ||
|   }   
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| TImporta_sc& app() { return (TImporta_sc&) main_app(); }
 | ||
| 
 | ||
| 
 | ||
| int pi0001200 (int argc, char* argv[])
 | ||
| {
 | ||
|   TImporta_sc main_app;
 | ||
|   main_app.run(argc, argv, TR("Importazione saldaconto"));
 | ||
|   return true;
 | ||
| } |