Files correlati : Ricompilazione Demo : [ ] Commento : git-svn-id: svn://10.65.10.50/trunk@16033 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			402 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			402 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#include "pg0001.h"
 | 
						||
#include "pg0001300a.h"
 | 
						||
 | 
						||
#include <applicat.h>
 | 
						||
#include <automask.h>
 | 
						||
#include <config.h>
 | 
						||
#include <diction.h>
 | 
						||
#include <relation.h>
 | 
						||
#include <progind.h>
 | 
						||
#include <reprint.h>
 | 
						||
#include <reputils.h>
 | 
						||
#include <textset.h>
 | 
						||
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
// TCSV_recset
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
 | 
						||
class TCSV_recset : public TCSV_recordset
 | 
						||
{
 | 
						||
 | 
						||
protected:
 | 
						||
 | 
						||
public:
 | 
						||
  TCSV_recset(const char * query) : TCSV_recordset(TString("CSV(;)\n") << query) {}
 | 
						||
};
 | 
						||
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
// TFixed_recset
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
 | 
						||
real var2fixed2(const TVariant & v)
 | 
						||
{
 | 
						||
	TString s(v.as_string());
 | 
						||
 | 
						||
	s.replace(',', '.');
 | 
						||
	real r(s);
 | 
						||
	r *= CENTO;
 | 
						||
	return r;
 | 
						||
}
 | 
						||
 | 
						||
class TFixed_recset : public TAS400_recordset
 | 
						||
{
 | 
						||
private:
 | 
						||
  void add_field(const char* name = "Filler", int from = -1, int len = 0,
 | 
						||
								 char tipo = 'a', const char* def = NULL);
 | 
						||
 | 
						||
public:
 | 
						||
  bool set(int column, const TVariant& var);
 | 
						||
  TFixed_recset();
 | 
						||
};
 | 
						||
 | 
						||
void TFixed_recset::add_field(const char* name, int from, int len, char tipo, const char* def)
 | 
						||
{
 | 
						||
	const bool required = false;
 | 
						||
  const TFieldtypes t = tipo == 'n' ? _longzerofld : _alfafld;
 | 
						||
  const int pos = from - 1;
 | 
						||
  
 | 
						||
	if (def && *def)
 | 
						||
  {
 | 
						||
    CHECKS(def == NULL || (int)strlen(def) <= len, "Invalid default value ", def);
 | 
						||
    TVariant var(def); var.convert_to(t);
 | 
						||
    create_field(name, pos, len, t, required, var);
 | 
						||
  }
 | 
						||
  else
 | 
						||
    create_field(name, pos, len, t, required);
 | 
						||
}
 | 
						||
 | 
						||
bool TFixed_recset::set(int column, const TVariant& var)
 | 
						||
{
 | 
						||
	switch (column)
 | 
						||
	{
 | 
						||
		case 0:
 | 
						||
			return TAS400_recordset::set("NPROG", var);				//	0 - numero progressivo
 | 
						||
			break;
 | 
						||
		case 1:
 | 
						||
			return TAS400_recordset::set("NFAT", var);					//	1 - numero di fattura
 | 
						||
			break;
 | 
						||
		case 2:
 | 
						||
			return TAS400_recordset::set("ANNO", var);					//	2 - anno
 | 
						||
			break;
 | 
						||
		case 3:
 | 
						||
			return TAS400_recordset::set("DATAFAT", var);			//	3 - data fattura
 | 
						||
			break;
 | 
						||
		case 4:
 | 
						||
			return TAS400_recordset::set("DF1", var);					//	4 - data fattura
 | 
						||
			break;
 | 
						||
		case 5:
 | 
						||
			return TAS400_recordset::set("RAGSOC", var);				//	5 - ragione sociale
 | 
						||
			break;
 | 
						||
		case 6:
 | 
						||
			return TAS400_recordset::set("L0", var);						//	6 - libero																																																																																																																																																																																																																																																										
 | 
						||
			break;
 | 
						||
		case 7:
 | 
						||
			return TAS400_recordset::set("IMPON", var2fixed2(var));				//	7 -	2 decimali	imponibile
 | 
						||
			break;
 | 
						||
		case 8:
 | 
						||
			return TAS400_recordset::set("L1", var2fixed2(var));						//	8 -	2 decimali
 | 
						||
			break;
 | 
						||
		case 9:
 | 
						||
			return TAS400_recordset::set("L2", var2fixed2(var));						//	9 - 2 decimali
 | 
						||
			break;
 | 
						||
		case 10:
 | 
						||
			return TAS400_recordset::set("RITACC", var2fixed2(var));				//	10 - 2 decimali	ritenuta d'acconto
 | 
						||
			break;
 | 
						||
		case 11:
 | 
						||
			return TAS400_recordset::set("TOTFAT", var2fixed2(var));				//	11 - 2 decimali	totale fattura
 | 
						||
			break;
 | 
						||
		case 12:
 | 
						||
			return TAS400_recordset::set("L3", var);						//	12 - libero
 | 
						||
			break;
 | 
						||
		case 13:
 | 
						||
			return TAS400_recordset::set("L4", var);						// 	13 - libero
 | 
						||
			break;
 | 
						||
		case 14:
 | 
						||
			return TAS400_recordset::set("L5", var);						//	14 - libero
 | 
						||
			break;
 | 
						||
		case 15:
 | 
						||
			return TAS400_recordset::set("DATADOC", var);			//	15 -	data documento
 | 
						||
			break;
 | 
						||
		case 16:
 | 
						||
			return TAS400_recordset::set("C0", var);	    			//	16 -	vero - falso																																																																																																																																																																																																																																																									
 | 
						||
			break;
 | 
						||
		case 17:
 | 
						||
			return TAS400_recordset::set("C1", var);						//	17 -	E 																																																																																																																																																																																																																																																										
 | 
						||
			break;
 | 
						||
		case 18:
 | 
						||
			return TAS400_recordset::set("C2", var);						//	18 -	Contanti - Bancomat																																																																																																																																																																																																																																																										
 | 
						||
			break;
 | 
						||
		case 19:
 | 
						||
			return TAS400_recordset::set("GT", var);					//	19 -	gt																																																																																																																																																																																																																																																										
 | 
						||
			break;
 | 
						||
		case 20:
 | 
						||
			return TAS400_recordset::set("L6", var);				//	20 -	libero																																																																																																																																																																																																																																																										
 | 
						||
			break;
 | 
						||
		case 21:
 | 
						||
			return TAS400_recordset::set("BOLLO", var2fixed2(var));			//	21 -  2 decimali	Valore Bollo
 | 
						||
			break;
 | 
						||
		case 22:
 | 
						||
			return TAS400_recordset::set("DATA", var);				//	22 -	Data di creazione file movimenti																																																																																																																																																																																																																																																										
 | 
						||
			break;
 | 
						||
		case 23:
 | 
						||
			return TAS400_recordset::set("L7", var);					//	23 -	libero																																																																																																																																																																																																																																																										
 | 
						||
			break;
 | 
						||
		case 24:
 | 
						||
			return TAS400_recordset::set("COGNOME", var);		//	24 -	Cognome o Ragione Sociale																																																																																																																																																																																																																																																										
 | 
						||
			break;
 | 
						||
		case 25:
 | 
						||
			return TAS400_recordset::set("NOME", var);				//	25 -	Nome o Seguito ragione sociale																																																																																																																																																																																																																																																										
 | 
						||
			break;
 | 
						||
		case 26:
 | 
						||
			return TAS400_recordset::set("CODFIS", var);			//	26 -	Codice fiscale
 | 
						||
			break;
 | 
						||
		case 27:
 | 
						||
			return TAS400_recordset::set("PIVA", var);				//	27 -  Partita I.v.a.
 | 
						||
			break;
 | 
						||
		case 28:
 | 
						||
			return TAS400_recordset::set("INDIR", var);			//	28 -	Indirizzo
 | 
						||
			break;
 | 
						||
		case 29:
 | 
						||
			return TAS400_recordset::set("CITTA", var);			//	29 -	Citt<74>
 | 
						||
			break;
 | 
						||
		case 30:
 | 
						||
			return TAS400_recordset::set("PROV", var);				//	30 -	Provincia
 | 
						||
			break;
 | 
						||
		case 31:
 | 
						||
			return TAS400_recordset::set("CAP", var);				//	31 -	C.A.P.
 | 
						||
			break;
 | 
						||
		case 32:
 | 
						||
			return TAS400_recordset::set("TIPOERS", var);		//	32 -	P= persona fisica o D = Ditta
 | 
						||
			break;
 | 
						||
		case 33:
 | 
						||
			return TAS400_recordset::set("SESSO", var);			//	33 -	F=Femmina M=Maschio
 | 
						||
			break;
 | 
						||
		case 34:
 | 
						||
			return TAS400_recordset::set("L8", var);					//	34 - libero
 | 
						||
			break;
 | 
						||
		case 35:
 | 
						||
			return TAS400_recordset::set("L9", var);					//	35 - libero
 | 
						||
			break;
 | 
						||
		case 36:
 | 
						||
			return TAS400_recordset::set("L10", var);				//	36 - libero
 | 
						||
			break;
 | 
						||
		default:
 | 
						||
			break;
 | 
						||
	}
 | 
						||
	return false;
 | 
						||
}
 | 
						||
 | 
						||
TFixed_recset::TFixed_recset()
 | 
						||
						 : TAS400_recordset("AS400(386)\n")
 | 
						||
{
 | 
						||
  const char a = 'a';
 | 
						||
  const char n = 'n';
 | 
						||
 | 
						||
	add_field("NPROG", 1, 6, n);				//	0 - numero progressivo
 | 
						||
	add_field("NFAT", 7, 8, n);					//	1 - numero di fattura
 | 
						||
	add_field("ANNO", 15, 4, n);				//	2 - anno
 | 
						||
	add_field("DATAFAT", 19, 10, a);		//	3 - data fattura
 | 
						||
	add_field("DF1", 29, 10, a);				//	4 - data fattura
 | 
						||
	add_field("RAGSOC", 39, 40, a);			//	5 - ragione sociale																																																																																																																																																																																																																																																										
 | 
						||
	add_field("L0", 79, 9, a);					//	6 - libero																																																																																																																																																																																																																																																										
 | 
						||
	add_field("IMPON", 88, 11, n);			//	7 -	2 decimali	imponibile
 | 
						||
	add_field("L1", 99, 11, n);					//	8 -	2 decimali
 | 
						||
	add_field("L2", 110, 11, n);				//	9 - 2 decimali
 | 
						||
	add_field("RITACC", 121, 11, n);		//	10 - 2 decimali	ritenuta d'acconto
 | 
						||
	add_field("TOTFAT", 132, 11, n);		//	11 - 2 decimali	totale fattura
 | 
						||
	add_field("L3", 143, 1, n);					//	12 - libero
 | 
						||
	add_field("L4", 144, 1, n);					// 	13 - libero
 | 
						||
	add_field("L5", 145,1, n);					//	14 - libero
 | 
						||
	add_field("DATADOC", 146, 10, a);		//	15 -	data documento
 | 
						||
	add_field("C0", 156, 10, a);				//	16 -	vero - falso																																																																																																																																																																																																																																																									
 | 
						||
	add_field("C1", 166, 1, a);					//	17 -	E 																																																																																																																																																																																																																																																										
 | 
						||
	add_field("C2", 167, 15, a);				//	18 -	Contanti - Bancomat																																																																																																																																																																																																																																																										
 | 
						||
	add_field("GT", 182, 2, a);					//	19 -	gt																																																																																																																																																																																																																																																										
 | 
						||
	add_field("L6", 184, 10, a);				//	20 -	libero																																																																																																																																																																																																																																																										
 | 
						||
	add_field("BOLLO", 194, 10, n);			//	21 - 2 decimali	Valore Bollo
 | 
						||
	add_field("DATA", 204, 10, a);			//	22 -	Data di creazione file movimenti																																																																																																																																																																																																																																																										
 | 
						||
	add_field("L7", 214, 10, a);				//	23 -	libero																																																																																																																																																																																																																																																										
 | 
						||
	add_field("COGNOME", 224, 30, a);		//	24 -	Cognome o Ragione Sociale																																																																																																																																																																																																																																																										
 | 
						||
	add_field("NOME", 254, 19, a);			//	25 -	Nome o Seguito ragione sociale																																																																																																																																																																																																																																																										
 | 
						||
	add_field("CODFIS", 273, 16, a);		//	26 -	Codice fiscale																																																																																																																																																																																																																																																										
 | 
						||
	add_field("PIVA", 289, 11, n);			//	27 - Partita I.v.a.
 | 
						||
	add_field("INDIR", 300, 35, a);			//	28 -	Indirizzo
 | 
						||
	add_field("CITTA", 335, 20, a);			//	29 -	Citt<74>
 | 
						||
	add_field("PROV", 355, 2, a);				//	30 -	Provincia
 | 
						||
	add_field("CAP", 357, 5, n);				//	31 -	C.A.P.																																																																																																																																																																																																																																																										
 | 
						||
	add_field("TIPOERS", 362, 1, a);		//	32 -	P= persona fisica o D = Ditta
 | 
						||
	add_field("SESSO", 363, 1, a);			//	32 -	F=Femmina M=Maschio
 | 
						||
	add_field("L8", 364, 7, n);					//	33 - libero																																																																																																																																																																																																																																																										
 | 
						||
	add_field("L9", 371, 7,	n);					//	34 - libero																																																																																																																																																																																																																																																										
 | 
						||
	add_field("L10", 378, 7,	n);				//	35 - libero																																																																																																																																																																																																																																																										
 | 
						||
	add_field("FINE-RECORD", 385, 2,	a, "\r\n");		//	36 - end of record																																																																																																																																																																																																																																																										
 | 
						||
}
 | 
						||
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
// TLandi_mask
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
 | 
						||
class TLandi_mask : public TAutomask
 | 
						||
{
 | 
						||
private:
 | 
						||
  void serialize(bool bSave);
 | 
						||
protected:
 | 
						||
  bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | 
						||
public:
 | 
						||
  TLandi_mask();
 | 
						||
  virtual ~TLandi_mask();
 | 
						||
};
 | 
						||
 | 
						||
TLandi_mask::TLandi_mask() : TAutomask("pg0001300a")
 | 
						||
{
 | 
						||
  serialize(false);
 | 
						||
}
 | 
						||
 | 
						||
TLandi_mask::~TLandi_mask()
 | 
						||
{
 | 
						||
  serialize(true);
 | 
						||
}
 | 
						||
 | 
						||
bool TLandi_mask::on_field_event(TOperable_field& f, TField_event e, long jolly)
 | 
						||
{ 
 | 
						||
  return TRUE;
 | 
						||
}
 | 
						||
 | 
						||
HIDDEN bool browse_file_handler(TMask_field& f, KEY k)
 | 
						||
{
 | 
						||
  if (k == K_F9)
 | 
						||
  {  
 | 
						||
    FILE_SPEC fs; memset(&fs, 0, sizeof(FILE_SPEC));
 | 
						||
    strcpy(fs.type, "");
 | 
						||
    strcpy(fs.name, f.get());
 | 
						||
    xvt_fsys_get_default_dir(&fs.dir);
 | 
						||
    xvt_fsys_save_dir();
 | 
						||
    if (xvt_dm_post_file_open(&fs, TR("Selezione file")) == FL_OK)
 | 
						||
    {       
 | 
						||
      TFilename n;
 | 
						||
      xvt_fsys_convert_dir_to_str(&fs.dir, n.get_buffer(n.size()), n.size());
 | 
						||
      n.add(fs.name);
 | 
						||
      f.set(n);
 | 
						||
    }
 | 
						||
    xvt_fsys_restore_dir();
 | 
						||
    f.set_focus();
 | 
						||
  }
 | 
						||
  
 | 
						||
  return true;
 | 
						||
}
 | 
						||
 | 
						||
void TLandi_mask::serialize(bool bSave)
 | 
						||
{
 | 
						||
  const char* defpar = "ps";
 | 
						||
  TConfig ini(CONFIG_DITTA, defpar);
 | 
						||
  for (int i = fields()-1; i >= 0; i--)
 | 
						||
  {
 | 
						||
    TMask_field& f = fld(i);
 | 
						||
    const TFieldref* fr = f.field();
 | 
						||
    if (fr != NULL)
 | 
						||
    {
 | 
						||
      if (bSave)
 | 
						||
        fr->write(ini, defpar, f.get());
 | 
						||
      else
 | 
						||
        f.set(fr->read(ini, defpar));
 | 
						||
    }
 | 
						||
  }
 | 
						||
}
 | 
						||
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
// TLandi_converter
 | 
						||
///////////////////////////////////////////////////////////
 | 
						||
class TLandi_converter : public TSkeleton_application
 | 
						||
{
 | 
						||
	TLandi_mask * _mask;
 | 
						||
	TLog_report * _log;
 | 
						||
 | 
						||
 | 
						||
protected:
 | 
						||
	virtual bool create() {	return TSkeleton_application::create ();}
 | 
						||
  virtual bool destroy();
 | 
						||
  virtual void main_loop();
 | 
						||
	virtual TMask & get_mask();
 | 
						||
  virtual const char * extra_modules() const {return "ba";}
 | 
						||
 | 
						||
public:
 | 
						||
	TLandi_converter() : _mask(NULL) {}
 | 
						||
};
 | 
						||
 | 
						||
TLandi_converter& app() { return (TLandi_converter&)main_app(); }
 | 
						||
 | 
						||
bool TLandi_converter::destroy()
 | 
						||
{
 | 
						||
	delete _mask;
 | 
						||
  return TApplication::destroy();
 | 
						||
}
 | 
						||
 | 
						||
TMask & TLandi_converter::get_mask()
 | 
						||
{
 | 
						||
	if (_mask == NULL)
 | 
						||
		_mask = new TLandi_mask;
 | 
						||
 | 
						||
	return * _mask;
 | 
						||
}
 | 
						||
 | 
						||
void TLandi_converter::main_loop()
 | 
						||
{
 | 
						||
	TMask & m = get_mask();
 | 
						||
 | 
						||
  while (m.run() == K_ENTER)
 | 
						||
	{
 | 
						||
    const char* const title = TR("Conversione da formato Excel a Colonne fisse");
 | 
						||
		bool errors_logged = false;
 | 
						||
		TString query("CSV(\";\")\nSELECT * FROM ");
 | 
						||
		TFilename name = m.get(F_INPATH);
 | 
						||
 | 
						||
		name.add(m.get(F_INFILE));
 | 
						||
		query << name;
 | 
						||
 | 
						||
    TCSV_recordset input(query);
 | 
						||
//		const int ncols = input.columns();
 | 
						||
 | 
						||
    TFixed_recset output;
 | 
						||
    _log = new TLog_report(title);
 | 
						||
		input.move_first();
 | 
						||
 | 
						||
		for (bool ok = input.move_next(); ok ; ok = input.move_next())
 | 
						||
		{
 | 
						||
			output.new_rec("");
 | 
						||
			for (int i = 0; i < 36; i++)
 | 
						||
			{
 | 
						||
				const TVariant &var = input.get(i);
 | 
						||
 | 
						||
				output.set(i, var);
 | 
						||
			}
 | 
						||
		}
 | 
						||
 | 
						||
		TReport_book book;
 | 
						||
    book.add(*_log);
 | 
						||
    book.preview();
 | 
						||
 | 
						||
    bool save = true;
 | 
						||
    if (errors_logged)
 | 
						||
    {
 | 
						||
      save = yesno_box(TR("Sono stati riscontrati uno o piu' errori:\n"
 | 
						||
    "Si desidera creare i documenti ugualmente?"));
 | 
						||
    }
 | 
						||
		if (save)
 | 
						||
		{
 | 
						||
			name = m.get(F_PATH);
 | 
						||
			name.add(m.get(F_FILE));
 | 
						||
			output.save_as(name, fmt_text);
 | 
						||
		}
 | 
						||
 | 
						||
    delete _log;
 | 
						||
		_log = NULL;
 | 
						||
  }
 | 
						||
}
 | 
						||
 | 
						||
int pg0001300(int argc, char* argv[])
 | 
						||
{
 | 
						||
  TLandi_converter app;
 | 
						||
  app.run(argc, argv, "Conversione Landi");
 | 
						||
  return 0;
 | 
						||
}
 |