#include #include "../ve/velib.h" #include ////////////////////////////////////////// //// TSpedisci Bolla //// ////////////////////////////////////////// //Classe TAggiungi_listini_app class TSpedisci_bolla : public TSkeleton_application { private: TFilename _ini_name; protected: virtual bool check_autorization() const {return false;} virtual void main_loop(); void output_doc(const char * outdir); public: bool load_ini(); }; //LOAD_INI: carica il file ini che contiene il documento bool TSpedisci_bolla::load_ini() { if (argc() <= 3) return false; const TFixed_string arg = argv(3); if ((arg[0] != '-' && arg[0] != '/') || (arg[1] != 'i' && arg[1] != 'I')) return false; _ini_name = arg.mid(2); //controlla che il file su cui deve scrivere ci sia; se non c'é dá una segnalazione di errore if (!_ini_name.exist()) return false; return true; } //CHECK_DOC: scorro il file ini e aggiungo alla tabella dei listini le righe mancanti void TSpedisci_bolla::output_doc(const char * outdir) { TConfig ini(_ini_name, "33"); TString4 para; para.format("%d", LF_DOC); const char provv = ini.get(DOC_PROVV, para)[0]; const int anno = ini.get_int(DOC_ANNO, para); const TString4 codnum = ini.get(DOC_CODNUM, para); const long ndoc = ini.get_long(DOC_NDOC, para); const long codcf = ini.get_long(DOC_CODCF, para); const TDate datadoc(ini.get(DOC_DATADOC, para)); const int codaut = ini.get_int(DOC_CODAG, para); const int codage2 = ini.get_int(DOC_CODAGVIS, para); const int codindsp = ini.get_int(DOC_CODINDSP, para); TDocumento doc(provv, anno, codnum,ndoc); const int rows = doc.physical_rows(); TString outrow(30); TFilename outname(outdir); outname.add(format("bo%06ld%06ld", codcf, ndoc)); outname.ext("dat"); ofstream outfile(outname); for(int r = 1; r <= rows; r++) { const TRiga_documento row = doc[r]; real qta = row.get_real(RDOC_QTA); qta.floor(); TString16 sqta = qta.string(6, 0, '0'); const TString codart = row.get(RDOC_CODART); const TString caus = row.get(RDOC_CODAGG1); real qtarit = row.get_real(RDOC_QTA); qtarit.floor(); TString16 sqtarit = qtarit.string(6, 0, '0'); outrow.cut(0); outrow.format("%06ld%2s%06ld%08ld%-20s%6s%04d%3s%06s%04d%04d", codcf, (const char *) codnum.mid(1), ndoc, datadoc.date2ansi(), (const char *) codart, (const char *)sqta, codaut, (const char *)caus, (const char *) sqtarit, codage2, codindsp); outfile << outrow << '\n'; } } void TSpedisci_bolla::main_loop() //definizione della member function main_loop, della classe TSpedisci_bolla { TFilename outdir(argv(2)); outdir.lower(); if (outdir.starts_with("-d")) { outdir = outdir.mid(2); if (outdir.exist()) { open_files(LF_TAB, LF_DOC, LF_RIGHEDOC, 0); //mostra un messaggio di errore se non riesce ad aprire il file richiesto; nota la conversione dei tipi che //é da eseguire quando devo passare una TString ad un %s if(load_ini()) output_doc(outdir); else { error_box(TR("Impossibile aprire il file '%s'"), (const char*)_ini_name); return; } } } } ////// Esecuzione del programma /////////// int lv4800(int argc, char* argv[]) { TSpedisci_bolla app; app.run(argc,argv,"Esporta Bolle"); return 0; }