#include "pg0001.h" #include "pg0001300a.h" #include #include #include #include #include #include #include #include #include /////////////////////////////////////////////////////////// // 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ą 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ą 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; }