campo-sirio/si/si0100.cpp
alex 893bd8d264 Patch level : no patch
Files correlati     : si0
Ricompilazione Demo : [ ]
Commento            :
Vedi precedente


git-svn-id: svn://10.65.10.50/trunk@9974 c028cbd2-c16b-5b4b-a496-9718f37d4682
2001-12-20 21:08:23 +00:00

402 lines
10 KiB
C++
Executable File

#include <applicat.h>
#include <filetext.h>
#include <form.h>
#include <mask.h>
#include <relation.h>
#include <tabutil.h>
#include <printer.h>
#include <progind.h>
#include <utility.h>
#include <lffiles.h>
#include "..\ve\velib.h"
#include "si0100a.h"
/////////////////////////////////////////////////////
// Classe TPag_file customizzata dalla TFile_text //
/////////////////////////////////////////////////////
class TPag_file: public TFile_text
{
protected:
virtual void validate(TCursor& cur,TRecord_text &rec, TToken_string &val, TString& str);
public:
TPag_file(const TString& file_name, const TString& config_name);
virtual ~TPag_file() { }
};
// gestione dei messaggi estesi nei campi
void TPag_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TString& str)
{
const TString code(s.get(0));
TString valore;
str = valore;
}
TPag_file::TPag_file(const TString& file_name, const TString& config_name)
: TFile_text(file_name, config_name)
{
}
/////////////////////////////////////////////////////
// Classe TCli_file customizzata dalla TFile_text //
/////////////////////////////////////////////////////
class TCli_file: public TFile_text
{
protected:
virtual void validate(TCursor& cur,TRecord_text &rec, TToken_string &val, TString& str);
public:
TCli_file(const TString& file_name, const TString& config_name);
virtual ~TCli_file() { }
};
// gestione dei messaggi estesi nei campi
void TCli_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TString& str)
{
const TString code(s.get(0));
TString valore;
str = valore;
}
TCli_file::TCli_file(const TString& file_name, const TString& config_name)
: TFile_text(file_name, config_name)
{
}
/////////////////////////////////////////////////////
// Classe TArt_file customizzata dalla TFile_text //
/////////////////////////////////////////////////////
class TArt_file: public TFile_text
{
protected:
virtual void validate(TCursor& cur,TRecord_text &rec, TToken_string &val, TString& str);
public:
TArt_file(const TString& file_name, const TString& config_name);
virtual ~TArt_file() { }
};
// gestione dei messaggi estesi nei campi
void TArt_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TString& str)
{
const TString code(s.get(0));
TString valore;
str = valore;
}
TArt_file::TArt_file(const TString& file_name, const TString& config_name)
: TFile_text(file_name, config_name)
{
}
class TImport: public TSkeleton_application
{
protected:
virtual bool create(void);
virtual void main_loop();
virtual bool destroy(void) ;
void transfer(void);
bool check_seq(TConfig & c);
bool localita2comune(const TString & cap, const TString & localita, TString & codice);
void update_cli(TCli_file & in, TRecord_text & r, TLocalisamfile & cli);
void update_art(TArt_file & in, TRecord_text & r, TLocalisamfile & art, TLocalisamfile & umart);
void update_doc(TPag_file & in, TRecord_text & r, TDocumento &doc, const char * codnum, const char * tipodoc,
const char * tiporiga, const char * codiva);
virtual const char * extra_modules() const { return "BA"; }
public:
TImport() {}
virtual ~TImport() {}
};
// restituisce un riferimento all' applicazione
inline TImport& app() { return (TImport&) main_app();}
// creazione dell'applicazione
bool TImport::create()
{
open_files(LF_DOC, LF_RIGHEDOC, LF_CONDV, LF_RCONDV, LF_ANAMAG, LF_SCONTI, LF_UMART,
LF_TAB, LF_TABCOM, LF_CLIFO, LF_CFVEN, LF_INDSP, LF_OCCAS, LF_PCON,
LF_MOVMAG, LF_RMOVMAG, LF_MAG, LF_SVRIEP, LF_AGENTI, LF_PERCPROV, LF_ATTIV, LF_CAUSALI, 0);
return TSkeleton_application::create();
}
// distruzione dell'applicazione
bool TImport::destroy()
{
return TSkeleton_application::destroy();
}
// carica la maschera
void TImport::main_loop()
{
transfer();
}
// trasferimento dati su file per ct bo
void TImport::transfer()
{
TMask msk("si0100a");
TConfig c(CONFIG_STUDIO, "sipag");
msk.set(F_FILESEQ, c.get("FileSeq"));
msk.set(F_FILEPAG, c.get("FilePag"));
msk.set(F_FILECLI, c.get("FileCli"));
msk.set(F_FILEART, c.get("FileArt"));
while (msk.run() != K_QUIT)
{
c.set("FileSeq", msk.get(F_FILESEQ));
c.set("FilePag", msk.get(F_FILEPAG));
c.set("FileCli", msk.get(F_FILECLI));
c.set("FileArt", msk.get(F_FILEART));
if (check_seq(c))
{
TRecord_text rec;
TProgind p(3L, "Trasferimento da AS/400");
TFilename clisrc(msk.get(F_FILECLI));
if (clisrc.exist())
{
TCli_file clifile(clisrc, "cli.ini");
TLocalisamfile clienti(LF_CLIFO);
clifile.open(clisrc,'r');
while (clifile.read(rec) == NOERR)
update_cli(clifile, rec, clienti);
clifile.close();
}
p.addstatus(1L);
TFilename artsrc(msk.get(F_FILEART));
if (artsrc.exist())
{
TArt_file artfile(artsrc, "art.ini");
TLocalisamfile articoli(LF_ANAMAG);
TLocalisamfile umart(LF_UMART);
artfile.open(artsrc,'r');
while (artfile.read(rec) == NOERR)
update_art(artfile, rec, articoli, umart);
artfile.close();
}
p.addstatus(1L);
TFilename pagsrc(msk.get(F_FILEPAG));
if (pagsrc.exist())
{
TPag_file pagfile(pagsrc, "pag.ini");
TDocumento doc;
TString codnum(c.get("CodNum"));
TString tipodoc(c.get("TipoDoc"));
TString tiporiga(c.get("TipoRiga"));
TString codiva(c.get("CodIva"));
pagfile.open(pagsrc,'r');
while (pagfile.read(rec) == NOERR)
update_doc(pagfile, rec, doc, codnum, tipodoc, tiporiga, codiva);
pagfile.close();
}
p.addstatus(1L);
message_box("Operazione terminata");
}
}
}
//inizializza il cursore
bool TImport::check_seq(TConfig & c)
{
TScanner seq(c.get("FileSeq"));
const int expected_seq = c.get_int("Seq") + 1;
const int seqnum = seq.integer();
if (expected_seq != seqnum)
return error_box("Il numero di sequenza trovato %d\nnon coincide con quello atteso %d", seqnum, expected_seq);
c.set("Seq", seqnum);
return TRUE;
}
int si0100(int argc, char* argv[])
{
TImport a ;
a.run(argc, argv, "Ricezione da AS/400");
return 0;
}
bool TImport::localita2comune(const TString & caporig, const TString & localita, TString & codice)
{
TLocalisamfile comuni (LF_COMUNI);
TString cap(caporig);
bool found = FALSE;
if (cap.mid(2,1) == "1")
{
cap = cap.left(3);
cap << "00";
}
comuni.setkey(3);
comuni.zero();
comuni.put("CAPCOM", cap);
TRectype com (comuni.curr());
codice = "";
for (comuni.read(_isgteq); !comuni.eof() && !found; comuni.next())
{
if (comuni.curr() != com)
break;
found = localita.left(3) == comuni.get("DENCOM").left(3);
if (found)
codice = comuni.get("COM");
}
return found;
}
void TImport::update_cli(TCli_file & in, TRecord_text & r, TLocalisamfile & cli)
{
cli.zero();
cli.put("TIPOCF", "C");
cli.put("CODCF", in.get_field(r, 1));
bool newrec = cli.read() != NOERR;
if (newrec)
{
cli.zero();
cli.put("TIPOCF", "C");
cli.put("CODCF", in.get_field(r, 1));
}
cli.put("RAGSOC", in.get_field(r, 2));
TString ind(in.get_field(r, 3));
TString loc;
int p = ind.find('-');
if (p > 0)
{
loc = ind.mid(p+1);
loc.strip("-");
loc.trim();
ind.cut(p);
ind.trim();
}
p = ind.rfind(',');
if (p > 0)
{
cli.put("INDCF", ind.left(p));
cli.put("CIVCF", ind.mid(p+1));
}
else
cli.put("INDCF", ind.left(35));
TString cap(in.get_field(r, 4));
cli.put("CAPCF", cap);
cli.put("COFI", in.get_field(r, 6));
cli.put("PAIV", in.get_field(r, 7));
TString localita(in.get_field(r, 8));
TString codice;
if (localita2comune(cap, localita, codice) == TRUE)
localita = "";
localita.insert(loc);
cli.put("COMCF", codice);
cli.put("LOCALITACF", localita);
if (newrec)
cli.write();
else
cli.rewrite();
}
void TImport::update_art(TArt_file & in, TRecord_text & r, TLocalisamfile & art, TLocalisamfile & umart)
{
art.zero();
art.put("CODART", in.get_field(r, 0));
bool newrec = art.read() != NOERR;
if (newrec)
{
art.zero();
art.put("CODART", in.get_field(r, 0));
}
art.put("DESCR", in.get_field(r, 1));
if (newrec)
{
art.write();
umart.zero();
umart.put("CODART", in.get_field(r, 0));
umart.put("NRIGA", "1");
umart.put("UM", "N.");
umart.put("FC", "1.00");
umart.write();
}
else
art.rewrite();
}
void TImport::update_doc(TPag_file & in, TRecord_text & r, TDocumento &doc, const char * codnum, const char * tipodoc,
const char * tiporiga, const char * codiva)
{
doc.zero();
const bool newdoc = doc.read('D', TDate(TODAY).year(), codnum, atol(in.get_field(r, 1))) != NOERR;
const TDate oggi(TODAY);
if (newdoc)
{
doc.zero();
TDocumento::set_key(doc, 'D', oggi.year(), codnum, atol(in.get_field(r, 1)));
doc.set_tipo(tipodoc);
doc.put("TIPOCF", "C");
doc.put("CODCF", in.get_field(r, 1));
doc.put("DATADOC", oggi);
doc.put("DATACONS", oggi);
}
TRiga_documento & riga = doc.new_row(tiporiga);
const TString & cod = in.get_field(r, 2);
riga.put("CODART", cod);
riga.put("CODARTMAG", cod);
TString descr = cache().get(LF_ANAMAG, cod, "DESCR");
riga.put("DESCR", descr);
riga.put("CHECKED", "X");
doc.put("DATACONS", oggi);
real qta(in.get_field(r, 3));
if (qta == ZERO)
qta = 1.00;
riga.put("UMQTA", "N.");
riga.put("QTA", qta);
TString prezzo_str(in.get_field(r, 4));
prezzo_str.replace(',', '.');
const real prezzo(prezzo_str);
riga.put("PREZZO", prezzo);
riga.put("CODIVA", codiva);
if (newdoc)
doc.write();
else
doc.rewrite();
}