Files correlati : Ricompilazione Demo : [ ] Commento : git-svn-id: svn://10.65.10.50/trunk@16033 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			272 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			272 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| #include <applicat.h>
 | |
| #include <automask.h>
 | |
| #include <progind.h>
 | |
| #include <recarray.h>
 | |
| #include <relation.h>
 | |
| #include <textset.h>
 | |
| 
 | |
| #include <mov.h>
 | |
| #include <rmoviva.h>
 | |
| 
 | |
| #include "../cg/cgsaldac.h"
 | |
| 
 | |
| #include "ps0713.h"
 | |
| #include "ps0713100a.h"
 | |
| 
 | |
| ///////////////////////////////////////////////////////////
 | |
| // TEsporta_ps0713 maschera
 | |
| ///////////////////////////////////////////////////////////
 | |
| 
 | |
| class TEsporta_ps0713_mask : public TAutomask
 | |
| {
 | |
| 
 | |
| public:
 | |
|   virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | |
|   TEsporta_ps0713_mask();
 | |
| 	~TEsporta_ps0713_mask();
 | |
| };
 | |
| 
 | |
| bool TEsporta_ps0713_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
 | |
| {
 | |
| 	switch (o.dlg())
 | |
| 	{
 | |
| 		//giochetto per avere la lista dei files validi nella directory di trasferimento!
 | |
| 		case F_ADATA:
 | |
| 			if (e == fe_modify || e == fe_close)
 | |
| 			{
 | |
| 				TDate adata = o.get();
 | |
| 				TString str_adata;
 | |
| 				str_adata << adata.date2ansi() << ".txt";
 | |
| 				set(F_NAME, str_adata);
 | |
| 			}
 | |
| 			break;
 | |
| 		default:
 | |
| 			break;
 | |
| 	}
 | |
|   return true;
 | |
| }
 | |
| 
 | |
| TEsporta_ps0713_mask::TEsporta_ps0713_mask() : TAutomask("ps0713100a") 
 | |
| {
 | |
| 	//carica i parametri del file di configurazione
 | |
| 	TConfig configfile("ps0713conf.ini", "MAIN");
 | |
|   for (int i = 0; i < fields() ; i++)
 | |
| 	{
 | |
| 		TMask_field& f = fld(i);
 | |
| 		const TFieldref* fr = f.field();
 | |
| 		if (fr != NULL)
 | |
| 			f.set(configfile.get(fr->name()));
 | |
| 	}
 | |
| }
 | |
| 
 | |
| TEsporta_ps0713_mask::~TEsporta_ps0713_mask()
 | |
| {
 | |
| 	//carica i parametri del file di configurazione
 | |
| 	TConfig configfile("ps0713conf.ini", "MAIN");
 | |
|   for (int i = 0; i < fields() ; i++)
 | |
| 	{
 | |
| 		TMask_field& f = fld(i);
 | |
| 		const TFieldref* fr = f.field();
 | |
| 		if (fr != NULL)
 | |
| 			configfile.set(fr->name(), f.get());
 | |
| 	}
 | |
| }
 | |
| 
 | |
| /////////////////////////////////////////////////////////////
 | |
| //	TEsporta_ps0713 recordset (righe movimenti iva)
 | |
| /////////////////////////////////////////////////////////////
 | |
| 
 | |
| class TEsporta_ps0713_recordset : public TCSV_recordset
 | |
| {
 | |
| public:
 | |
| 	TEsporta_ps0713_recordset();
 | |
| };
 | |
| 
 | |
| 
 | |
| TEsporta_ps0713_recordset::TEsporta_ps0713_recordset() 
 | |
| : TCSV_recordset("CSV(\"\t\")")
 | |
| {
 | |
| }
 | |
| 
 | |
| 
 | |
| ///////////////////////////////////////////////////////////
 | |
| // TEsporta_ps0713 applicazione
 | |
| ///////////////////////////////////////////////////////////
 | |
| 
 | |
| class TEsporta_ps0713_app : public TSkeleton_application
 | |
| {
 | |
| 
 | |
| protected:
 | |
| 	virtual bool check_autorization() const {return false;}
 | |
|   virtual const char * extra_modules() const {return "cg";}
 | |
| 	virtual void main_loop();
 | |
| 
 | |
| 	bool test_partita(const long numreg, TDate& last_data_pag) const;
 | |
| 
 | |
| public:
 | |
| 	void esporta_righe_iva(const TMask& msk) const;
 | |
| 	void set_inviva(TISAM_recordset& rmoviva) const;
 | |
|   
 | |
| };
 | |
| 
 | |
| void TEsporta_ps0713_app::set_inviva(TISAM_recordset& rmoviva) const
 | |
| {
 | |
| 	long last_numreg = 0L;
 | |
| 	const long items = rmoviva.items();
 | |
| 	TProgind pi(items, TR("Impostazione flag Inviata parte IVA..."), true, true);
 | |
| 	TLocalisamfile mov(LF_MOV);
 | |
| 	for (bool ok = rmoviva.move_first(); ok; ok = rmoviva.move_next())
 | |
| 	{
 | |
|     if (!pi.addstatus(1))
 | |
|       break;
 | |
| 		const long curr_numreg = rmoviva.get(RMI_NUMREG).as_int();
 | |
| 		if (curr_numreg != last_numreg)
 | |
| 		{
 | |
| 			TDate last_data_pag;
 | |
| 			bool partita_chiusa = test_partita(curr_numreg, last_data_pag);
 | |
| 
 | |
| 			if (partita_chiusa)
 | |
| 			{
 | |
| 				mov.put(MOV_NUMREG, curr_numreg);
 | |
| 				int err = mov.read();
 | |
| 				if (err == NOERR)
 | |
| 				{
 | |
| 					mov.put(MOV_INVIVA, 'X');
 | |
| 					err = mov.rewrite();
 | |
| 				}
 | |
| 				if (err != NOERR)
 | |
| 				{
 | |
| 					TString cazzone;
 | |
| 					cazzone << TR("Impossibile aggiornare il movimento ");
 | |
| 					cazzone << curr_numreg;
 | |
| 					error_box(cazzone);
 | |
| 					break;
 | |
| 				}
 | |
| 			}
 | |
| 			last_numreg = curr_numreg;
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| bool TEsporta_ps0713_app::test_partita(const long numreg, TDate& last_data_pag) const
 | |
| {
 | |
| 	bool finito = false;
 | |
| 
 | |
| 	TPartite_array torneo;
 | |
| 	torneo.add_numreg(numreg);
 | |
| 	TPartita* partita = torneo.first();
 | |
| 	if (partita != NULL && partita->chiusa())
 | |
| 	{
 | |
| 		for (int r = partita->last(); r > 0; r = partita->pred(r))
 | |
| 		{
 | |
| 			const TRiga_partite& row = partita->riga(r);
 | |
| 			const tipo_movimento tipo = row.tipo();
 | |
| 			if (tipo == tm_pagamento || tipo == tm_pagamento_insoluto)
 | |
| 			{
 | |
| 				const TDate datadoc = row.get_date(PART_DATAPAG);
 | |
| 				if (datadoc > last_data_pag)
 | |
| 					last_data_pag = datadoc;
 | |
| 			}
 | |
| 		}
 | |
| 		finito = true;
 | |
| 	}
 | |
| 
 | |
| 	return finito;
 | |
| }
 | |
| 
 | |
| 
 | |
| void TEsporta_ps0713_app::esporta_righe_iva(const TMask& m) const
 | |
| {
 | |
| 	TFilename path = m.get(F_PATH);
 | |
| 	path.add(m.get(F_NAME));
 | |
| 	if (path.exist())
 | |
| 		if (!yesno_box(TR("ATTENZIONE! File gia' presente! Se si procede sara' azzerato il file esistente!\nContinuare?")))
 | |
| 			return;
 | |
| 
 | |
|   // query su righe iva joinati ai mov
 | |
| 	TString query;
 | |
|   query << "USE RMOVIVA ";
 | |
| 	query << "SELECT ((NUM(ANSI(23.DATAREG))>=NUM(ANSI(#DADATA)))&&(NUM(ANSI(23.DATAREG))<=NUM(ANSI(#ADATA))))&&(23.INVIVA!=\"X\")&&(23.TIPO=\"F\")";
 | |
| 
 | |
| 	if (m.get_int(F_JOB) == 1)
 | |
| 		query << "&&(CODCMS!=\"\")";
 | |
| 	else
 | |
| 		query << "&&(CODCMS=\"\")";
 | |
| 
 | |
| 	query << "\nJOIN MOV INTO NUMREG==NUMREG";
 | |
| 	query << "\nJOIN %IVA ALIAS 101 INTO CODTAB==CODIVA";
 | |
| 	query << "\nJOIN CLIFO TO MOV INTO TIPOCF==TIPO CODCF==CODCF";
 | |
| 	
 | |
| 	TISAM_recordset rmoviva(query);
 | |
| 	const TDate& adata = m.get_date(F_ADATA);
 | |
| 	const TDate dadata(1,1, adata.year() - 1);
 | |
| 	rmoviva.set_var("#DADATA", dadata);
 | |
| 	rmoviva.set_var("#ADATA", adata);
 | |
| 
 | |
| 	TEsporta_ps0713_recordset csv;
 | |
| 
 | |
| 	const long items = rmoviva.items();
 | |
| 	TProgind pi(items, TR("Estrazione dati..."), true, true);
 | |
| 	TString ws;
 | |
| 	for (bool ok = rmoviva.move_first(); ok; ok = rmoviva.move_next())
 | |
| 	{
 | |
|     if (!pi.addstatus(1))
 | |
|       break;
 | |
| 
 | |
| 		TDate last_data_pag;
 | |
| 		bool partita_chiusa = test_partita(rmoviva.get(RMI_NUMREG).as_int(), last_data_pag);
 | |
| 
 | |
| 		if (partita_chiusa)
 | |
| 		{
 | |
| 			//creazione di un nuovo record da esportare
 | |
| 			csv.new_rec("");
 | |
| 			//..e successivo riempimento
 | |
| 			csv.set(0, rmoviva.get(RMI_CODCMS));
 | |
| 			csv.set(1, rmoviva.get("23.CODCF"));
 | |
| 			csv.set(2, rmoviva.get("20.RAGSOC"));
 | |
| 			const real imponibile = rmoviva.get(RMI_IMPONIBILE).as_real();
 | |
| //			const real imposta = rmoviva.get(RMI_IMPOSTA).as_real();
 | |
| //			const real lordo = imponibile + imposta;
 | |
| //			csv.set(3, lordo);
 | |
| 			csv.set(3, imponibile);
 | |
| 			//csv.set(2, rmoviva.get("101@.R0"));	//aliquota non ci vuole piu'
 | |
| //			csv.set(5, imposta);
 | |
| 			csv.set(6, rmoviva.get("23.DATADOC"));
 | |
| 			csv.set(7, rmoviva.get("23.NUMDOC"));
 | |
| 			csv.set(8, last_data_pag);
 | |
| 
 | |
| 	//		csv.set(9, rmoviva.get(RMI_GRUPPO));
 | |
| 	//		csv.set(10, rmoviva.get(RMI_CONTO));
 | |
| 	//		csv.set(11, rmoviva.get(RMI_SOTTOCONTO));
 | |
| 	//		csv.set(12, rmoviva.get(RMI_NUMREG));	
 | |
| 		}
 | |
| 
 | |
| 	}	//for(move_first()..
 | |
|  	
 | |
| 	csv.save_as(path, fmt_text);
 | |
| 
 | |
| #ifdef DBG
 | |
| 	xvt_sys_goto_url(path, "open");
 | |
| #endif
 | |
| 
 | |
| 	TString msg;
 | |
| 	msg << TR("Si conferma l'esportazione definitiva dei movimenti IVA fino al ");
 | |
| 	msg << m.get(F_ADATA);
 | |
| 	if (yesno_box(msg))
 | |
| 		set_inviva(rmoviva);	//mette il flag di "INVIVA" alla testata movimento
 | |
| }
 | |
| 
 | |
| void TEsporta_ps0713_app::main_loop()
 | |
| {
 | |
|   TEsporta_ps0713_mask m;
 | |
|   while (m.run() == K_ENTER)
 | |
| 		esporta_righe_iva(m);
 | |
| }
 | |
| 
 | |
| int ps0713100(int argc, char* argv[])
 | |
| {
 | |
|   TEsporta_ps0713_app app;
 | |
|   app.run(argc, argv, TR("Trasferimento dati IVA"));
 | |
|   return 0;
 | |
| }
 |