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;
|
||
}
|