campo-sirio/lv/lv4800.cpp

120 lines
3.4 KiB
C++
Raw Normal View History

#include <applicat.h>
#include "../ve/velib.h"
#include <utility.h>
//////////////////////////////////////////
//// 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'<27> 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
//<2F> 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;
}