campo-sirio/ps/pd1579100.cpp
alex c434cad322 Patch level : 4.0 451
Files correlati     :
Ricompilazione Demo : [ ]
Commento            :

Riportata la versione 3.1 patch 650


git-svn-id: svn://10.65.10.50/trunk@14148 c028cbd2-c16b-5b4b-a496-9718f37d4682
2006-07-11 13:10:51 +00:00

293 lines
6.2 KiB
C++
Executable File

#include <applicat.h>
#include <automask.h>
#include <config.h>
#include <execp.h>
#include <filetext.h>
#include <progind.h>
#include <printer.h>
#include <recarray.h>
#include <strings.h>
#include <utility.h>
#include "pd1579.h"
#include "pd1579100a.h"
#include "clifo.h"
#include "comuni.h"
// TAutomask
class TImpClienti_mask : public TAutomask
{
protected:
bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TImpClienti_mask();
virtual ~TImpClienti_mask(){};
};
TImpClienti_mask::TImpClienti_mask() :TAutomask ("pd1579100a")
{
}
bool TImpClienti_mask::on_field_event(TOperable_field& f, TField_event e, long jolly)
{
return TRUE;
}
// TFile_text
class TImpClienti_file: public TFile_text
{
protected:
virtual void validate(TCursor& cur,TRecord_text &rec, TToken_string &val, TString& str);
public:
TImpClienti_file(const TString& file_name);
virtual ~TImpClienti_file() { }
};
TImpClienti_file::TImpClienti_file(const TString& file_name)
: TFile_text(file_name, "pd1579100a.ini")
{
}
void TImpClienti_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TString& str)
{
const TString code(s.get(0));
TString valore = str;
if (code == "_UPPERCASE")
{
valore.upper();
}
else NFCHECK("Macro non definita: %s", (const char *)code);
str = valore;
}
// TSkeleton_application
class TImpClienti : public TSkeleton_application
{
TImpClienti_mask* _msk;
TImpClienti_file* _trasfile;
TLocalisamfile* _clienti;
TConfig* _configfile;
TRelation* _rel;
TCursor* _cur;
TProgind* _prog;
long _numreg;
virtual const char * extra_modules() const {return "ba";}
public:
bool print_header();
void print_line(const TString& rigastampa = "");
void print_footer();
virtual bool create();
virtual bool destroy();
virtual void main_loop();
bool transfer();
const long get_nextcodcf();
TImpClienti() {}
};
TImpClienti& app() { return (TImpClienti&) main_app(); }
bool TImpClienti::print_header()
{
if (printer().open())
{
TDate oggi(TODAY);
TPrintrow row;
TString256 rigastampa;
rigastampa = "IMPORTAZIONE CLIENTI";
rigastampa.center_just(80);
row.put(rigastampa);
row.put("@>", 1);
row.put("Pag. @#", 65);
printer().setheaderline(2, row);
rigastampa = "";
rigastampa.fill('-',80);
row.reset();
row.put(rigastampa);
printer().setheaderline(3, row);
return TRUE;
}
else
return error_box("Errore in apertura stampante.");
}
void TImpClienti::print_line(const TString& rigastampa)
{
TPrintrow row;
row.reset();
if (rigastampa.not_empty())
{
row.put((const char*) rigastampa);
printer().print(row);
}
}
void TImpClienti::print_footer()
{
printer().formfeed();
printer().close();
}
bool TImpClienti::create()
{
open_files(LF_CLIFO, 0);
TFilename configname = "pd1579100.ini";
configname.custom_path();
_configfile = new TConfig(configname);
_msk = new TImpClienti_mask();
_clienti = new TLocalisamfile(LF_CLIFO);
return TSkeleton_application::create();
}
bool TImpClienti::destroy()
{
delete _clienti;
delete _msk;
delete _configfile;
return TApplication::destroy();
}
void TImpClienti::main_loop()
{
KEY tasto;
_msk->set(F_PERCORSO, _configfile->get("PERCORSO", "OPZIONI"));
tasto = _msk->run();
if (tasto == K_ENTER)
{
if (print_header())
{
if (transfer())
{
_configfile->set("PERCORSO", _msk->get(F_PERCORSO), "OPZIONI");
message_box(TR("Importazione clienti completata"));
}
print_footer();
}
else
error_box("Errore in apertura stampante.");
}
}
const long TImpClienti::get_nextcodcf()
{
TLocalisamfile& clifo = *_clienti;
long codcf = 1L ;
if (!clifo.empty())
{
clifo.zero() ;
clifo.setkey(1) ;
clifo.put(CLI_TIPOCF, 'F');
clifo.read(_isgteq) ;
if (clifo.good())
clifo.prev() ;
clifo.setstatus(NOERR);
}
else clifo.last();
if (clifo.good())
{
const TFixed_string tipocf(clifo.get(CLI_TIPOCF));
if ( tipocf == "C")
{
codcf = clifo.get_long(CLI_CODCF);
if (codcf == 999999)
clifo.prev();
codcf = clifo.get_long(CLI_CODCF)+1;
}
}
return codcf;
}
bool TImpClienti::transfer()
{
// cache per i comuni
TRecord_cache cache_comuni(LF_COMUNI, 2);
_trasfile = new TImpClienti_file(_msk->get(F_PERCORSO));
_trasfile->open(_msk->get(F_PERCORSO),'r');
const long dimension = fsize(_msk->get(F_PERCORSO));
TProgind pi(dimension,"Importazione in corso...");
TRelation rel(LF_CLIFO);
TRectype& reccli = rel.curr();
TLocalisamfile& clifo = rel.lfile();
rel.lfile().setkey(2);
TString80 stampa;
int err = NOERR;
TRecord_text curr;
while (_trasfile->read(curr) == NOERR && !pi.iscancelled() && err == NOERR)
{
pi.setstatus(_trasfile->read_file()->tellg());
TString80 ragsoc = curr.get(0);
ragsoc.trim();
ragsoc.upper();
reccli.zero();
reccli.put(CLI_TIPOCF, 'C');
reccli.put(CLI_RAGSOC, ragsoc);
if (reccli.read(rel.lfile())!=NOERR)
{
reccli.zero();
const long codcf = get_nextcodcf();
reccli.put(CLI_TIPOCF, 'C');
reccli.put(CLI_CODCF, codcf);
reccli.put(CLI_RAGSOC, ragsoc);
err = reccli.write(rel.lfile());
if (err != NOERR)
message_box("Errore in scrittura clienti %d", err);
}
_trasfile->autosave(rel, curr);
// indirizzo
TString80 str = curr.get(4);
str << " " << curr.get(5);
reccli.put(CLI_INDCF, str);
// comune
str = curr.get(11);
str.trim();
str.upper();
if (str == "ITALIA")
{
TString80 dencom = curr.get(9);
dencom.trim();
dencom.upper();
TRectype reccom = cache_comuni.get(dencom);
str = reccom.get(COM_DENCOM);
str.trim();
if (str == dencom)
reccli.put(CLI_COMCF, reccom.get(COM_COM));
else
{
reccli.put(CLI_COMCF, " ");
reccli.put(CLI_LOCCF, dencom);
stampa = "Cliente ";
stampa << reccli.get(CLI_CODCF);
stampa << " - comune " << dencom << " non trovato";
print_line(stampa);
}
}
rel.rewrite();
}
_trasfile->close();
delete _trasfile;
return TRUE;
}
int pd1579100 (int argc, char* argv[])
{
TImpClienti main_app;
main_app.run(argc, argv, TR("Importazione clienti"));
return TRUE;
}