Files correlati : si0.exe Ricompilazione Demo : [ ] Commento : Aggiunta gestione del codice IVA diverso per gli articoli che iniziano con Z (detto da Roberto) git-svn-id: svn://10.65.10.50/trunk@10077 c028cbd2-c16b-5b4b-a496-9718f37d4682
410 lines
10 KiB
C++
Executable File
410 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, const char * codivaz);
|
|
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"));
|
|
TString codivaz(c.get("CodIvaZ"));
|
|
|
|
|
|
pagfile.open(pagsrc,'r');
|
|
while (pagfile.read(rec) == NOERR)
|
|
update_doc(pagfile, rec, doc, codnum, tipodoc, tiporiga, codiva, codivaz);
|
|
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.compare(comuni.get("DENCOM"), 3, FALSE) == 0;
|
|
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 = "";
|
|
|
|
if (loc.not_empty())
|
|
{
|
|
localita.insert(" ");
|
|
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, const char * codivaz)
|
|
{
|
|
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);
|
|
if (cod[0] == 'Z')
|
|
riga.put("CODIVA", codivaz);
|
|
else
|
|
riga.put("CODIVA", codiva);
|
|
|
|
if (newdoc)
|
|
doc.write();
|
|
else
|
|
doc.rewrite();
|
|
}
|