a31c61d184
Files correlati : Ricompilazione Demo : [ ] Commento :eliminato quell'aborto di ve7; trasformato in ps0077 tanto per non perdere i programmi git-svn-id: svn://10.65.10.50/trunk@18345 c028cbd2-c16b-5b4b-a496-9718f37d4682
451 lines
11 KiB
C++
Executable File
451 lines
11 KiB
C++
Executable File
#include <recarray.h>
|
|
|
|
#include <../mg/anamag.h>
|
|
#include <../mg/umart.h>
|
|
|
|
#include <clifo.h>
|
|
#include <comuni.h>
|
|
|
|
#include "ps0077700.h"
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// TGalileo_clifo
|
|
///////////////////////////////////////////////////////////
|
|
|
|
bool select_clifo(const TRectype & rec, TObject * myself)
|
|
{
|
|
TGalileo_clifo * c = (TGalileo_clifo *) myself;
|
|
const TString80 key = rec.build_key();
|
|
return c->keys().objptr(key) != NULL;
|
|
}
|
|
|
|
int TGalileo_clifo::cancella_clifo(TLocalisamfile& clifo) const
|
|
{
|
|
return NOERR;
|
|
}
|
|
|
|
long TGalileo_clifo::get_next_key(const char tipocf) const
|
|
{
|
|
TLocalisamfile clifo(LF_CLIFO);
|
|
long codcf = 1L;
|
|
if (!clifo.empty())
|
|
{
|
|
if (tipocf == 'C')
|
|
{
|
|
clifo.put(CLI_TIPOCF, 'F');
|
|
clifo.read(_isgteq);
|
|
if (clifo.good())
|
|
clifo.prev();
|
|
clifo.setstatus(NOERR);
|
|
}
|
|
else
|
|
clifo.last();
|
|
if (clifo.good())
|
|
{
|
|
const char tipo = clifo.get(CLI_TIPOCF)[0];
|
|
if (tipocf == tipo)
|
|
codcf += clifo.get_long(CLI_CODCF);
|
|
}
|
|
}
|
|
return codcf;
|
|
}
|
|
|
|
long TGalileo_clifo::get_codcf(const char tipocf, const char* ricalt) const
|
|
{
|
|
TLocalisamfile clifo(LF_CLIFO);
|
|
long codcf = -1;
|
|
clifo.setkey(6);
|
|
clifo.put(CLI_TIPOCF, tipocf);
|
|
clifo.put(CLI_RICALT, ricalt);
|
|
if (clifo.read() == NOERR)
|
|
codcf = clifo.get_long(CLI_CODCF);
|
|
return codcf;
|
|
}
|
|
|
|
bool TGalileo_clifo::dump()
|
|
{
|
|
if (!_path.exist())
|
|
return true;
|
|
|
|
TConfig& ini = config();
|
|
TString_array lista_clifo;
|
|
ini.list_variables(lista_clifo, true, "CLIFO", true);
|
|
TToken_string lista_dump;
|
|
lista_dump.add(CLI_TIPOCF);
|
|
lista_dump.add(CLI_CODCF);
|
|
lista_dump.add(CLI_COMCF);
|
|
TString16 campo_dest, campo_orig;
|
|
FOR_EACH_ARRAY_ROW(lista_clifo,i,row)
|
|
{
|
|
row->get(0, campo_dest);
|
|
row->get(1, campo_orig);
|
|
if (campo_orig.full())
|
|
lista_dump.add(campo_dest);
|
|
}
|
|
TFilename path = _path; path.add("clifo.txt");
|
|
TSystemisamfile clifo(LF_CLIFO);
|
|
|
|
int err = clifo.dump(path, lista_dump, 1, '|', '\0', '\n', true, false, NULL, select_clifo, this);
|
|
if (err == NOERR)
|
|
log("Errore di scrittura del file clifo.txt", 0);
|
|
return true;
|
|
}
|
|
|
|
bool TGalileo_clifo::trasferisci()
|
|
{
|
|
TString query =
|
|
"SELECT CLFOCP, CONTCA, DSCOCP, DSULCP, INDICA, LOCACA, PROVCA, CAPOCA, "
|
|
"NAZICA, CISOCA, PIVACA, CDFICA, NTELCA, NFAXCA \n"
|
|
"FROM CGANA01J \n";
|
|
if (!_data.empty())
|
|
{
|
|
query << "WHERE DTMNCA >= ";
|
|
query << _data.date2ansi();
|
|
}
|
|
|
|
TRecordset& recset = create_recordset(query);
|
|
|
|
TString str;
|
|
|
|
TConfig& ini = config();
|
|
TString_array lista_clifo;
|
|
ini.list_variables(lista_clifo, true, "CLIFO", true);
|
|
TIsamfile clifo(LF_CLIFO);
|
|
TRectype& rec_clifo = clifo.curr();
|
|
|
|
_keys.destroy();
|
|
clifo.open_ex(_excllock);
|
|
TRecord_cache cache_comuni(LF_COMUNI, 2);
|
|
TGalileo_iterator pi(this);
|
|
|
|
while (++pi)
|
|
{
|
|
const TString& contca = get_str("CONTCA");
|
|
const char tipocf = get_str("CLFOCP")[0];
|
|
long codcf = get_codcf(tipocf, contca); // mi restiuisce il codice del clinete se esiste oppure -1 se da aggiungere
|
|
|
|
bool needs_creation = codcf <= 0;
|
|
bool good = true;
|
|
|
|
if (!needs_creation)
|
|
{
|
|
// il cliente/fornitore va aggiornato
|
|
rec_clifo.zero();
|
|
rec_clifo.put(CLI_TIPOCF, tipocf);
|
|
rec_clifo.put(CLI_CODCF, codcf);
|
|
const TString16 key(rec_clifo.build_key(1));
|
|
|
|
_keys.add(key, key);
|
|
good = clifo.read() == NOERR;
|
|
if (!good)
|
|
needs_creation = true;
|
|
}
|
|
|
|
if (needs_creation)
|
|
{
|
|
// il cliente/fornitore va inserito in campo
|
|
if (codcf <= 0)
|
|
codcf = get_next_key(tipocf);
|
|
rec_clifo.zero();
|
|
rec_clifo.put(CLI_TIPOCF, tipocf);
|
|
rec_clifo.put(CLI_CODCF, codcf);
|
|
good &= test_write(clifo);
|
|
}
|
|
|
|
if (good)
|
|
{
|
|
// aggiormento comune
|
|
TString80 dencom = get_str("LOCACA");
|
|
dencom.trim(); dencom.upper();
|
|
const TRectype& reccom = cache_comuni.get(dencom);
|
|
if (dencom == reccom.get(COM_DENCOM))
|
|
rec_clifo.put(CLI_COMCF, reccom.get(COM_COM));
|
|
else
|
|
{
|
|
rec_clifo.zero(CLI_COMCF);
|
|
rec_clifo.put(CLI_LOCCF, dencom);
|
|
|
|
log("");
|
|
str.format(FR("Cliente/Fornitore %c %ld: comune non trovato %s"), tipocf, codcf, (const char*)dencom);
|
|
log(str);
|
|
}
|
|
aggiorna_record(clifo, lista_clifo);
|
|
}
|
|
}
|
|
clifo.close();
|
|
return write_enabled();
|
|
}
|
|
|
|
bool TGalileo_clifo::aggiorna_record(TIsamfile& file, const TString_array& lista_campi)
|
|
{
|
|
TRectype& rec = file.curr();
|
|
TString campo_dest, campo_orig, valore, str;
|
|
FOR_EACH_ARRAY_ROW(lista_campi,i,row)
|
|
{
|
|
row->get(0, campo_dest);
|
|
row->get(1, campo_orig);
|
|
if (campo_orig.full())
|
|
{
|
|
if (campo_orig[0] == '_')
|
|
{
|
|
TToken_string elabora(campo_orig.mid(1),',');
|
|
const TString& str = elabora.get();
|
|
if (str == "TAB") // formato _TAB, <tabella da leggere>,<valore CODTAB>, <campo da leggere>
|
|
{
|
|
const TString4 tab = elabora.get(); // tabella da leggere
|
|
const TString80 campo = elabora.get();
|
|
const TString16 codtab = get_str(campo);
|
|
const TString80 campotab = elabora.get();
|
|
valore = cache().get(tab, codtab, campotab);
|
|
}
|
|
else if (str == "FISSO")
|
|
valore = elabora.get(); // valore fisso indicato in configurazione
|
|
}
|
|
else
|
|
valore = get_str(campo_orig);
|
|
rec.put(campo_dest, valore);
|
|
}
|
|
}
|
|
return test_rewrite(file);
|
|
}
|
|
|
|
TGalileo_clifo::TGalileo_clifo()
|
|
{
|
|
}
|
|
|
|
TGalileo_clifo::~TGalileo_clifo()
|
|
{
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// TGalileo_articoli
|
|
///////////////////////////////////////////////////////////
|
|
|
|
bool select_umart(const TRectype & rec, TObject * myself)
|
|
{
|
|
TGalileo_articoli * c = (TGalileo_articoli *) myself;
|
|
const TString key(rec.build_key(1));
|
|
return c->keys_umart().objptr(key) != NULL;
|
|
}
|
|
|
|
bool select_articoli(const TRectype & rec, TObject * myself)
|
|
{
|
|
TGalileo_articoli * c = (TGalileo_articoli *) myself;
|
|
const TString key(rec.build_key(1));
|
|
return c->keys_articoli().objptr(key) != NULL;
|
|
}
|
|
|
|
int TGalileo_articoli::cancella_articolo(TLocalisamfile& anamag) const
|
|
{
|
|
return NOERR;
|
|
}
|
|
|
|
bool TGalileo_articoli::dump()
|
|
{
|
|
if (!_path.exist())
|
|
return true;
|
|
|
|
TConfig& ini = config();
|
|
TString_array lista_anamag;
|
|
ini.list_variables(lista_anamag, true, "ANAMAG", true);
|
|
TToken_string lista_dump;
|
|
lista_dump.add(ANAMAG_CODART);
|
|
TString16 campo_dest, campo_orig;
|
|
FOR_EACH_ARRAY_ROW(lista_anamag,i,row)
|
|
{
|
|
row->get(0, campo_dest);
|
|
row->get(1, campo_orig);
|
|
if (campo_orig.full())
|
|
lista_dump.add(campo_dest);
|
|
}
|
|
lista_dump.add(ANAMAG_ULTCOS1);
|
|
|
|
TString_array lista_umart;
|
|
TToken_string lista_dump_umart;
|
|
|
|
ini.list_variables(lista_umart, true, "UMART", true);
|
|
FOR_EACH_ARRAY_ROW(lista_umart,k,rowu)
|
|
{
|
|
rowu->get(0, campo_dest);
|
|
lista_dump_umart.add(campo_dest);
|
|
}
|
|
TSystemisamfile anamag(LF_ANAMAG);
|
|
TSystemisamfile umart(LF_UMART);
|
|
TFilename path = _path;
|
|
path.add("umart.txt");
|
|
int err = umart.dump(path, lista_dump_umart, 1, '|', '\0', '\n', true, false,
|
|
NULL, select_umart, this);
|
|
if (err != NOERR)
|
|
log("Errore di scrittura umart.txt", 2);
|
|
path = _path; path.add("anamag.txt");
|
|
err = anamag.dump(path, lista_dump, 1, '|', '\0', '\n', true, false,
|
|
NULL, select_articoli, this);
|
|
if (err != NOERR)
|
|
log("Errore di scrittura anamag.txt", 0);
|
|
|
|
return true;
|
|
}
|
|
|
|
bool TGalileo_articoli::trasferisci()
|
|
{
|
|
TString query =
|
|
"SELECT RICOD, RDES1, RDES2, RDES3, RSUMS, RITIP, RISIG \n"
|
|
"FROM BRISO00F, BTABE00F \n"
|
|
"WHERE (SUBSTR(BTABE00F.TBDAT , 9 , 1)=RITIP) AND (BTABE00F.TBTIP='COD') AND (BTABE00F.TBELE='RIS')";
|
|
if (!_data.empty())
|
|
{
|
|
query << " AND (RIDTX >= ";
|
|
query << _data.date2ansi() << ")";
|
|
}
|
|
|
|
TRecordset& recset = create_recordset(query);
|
|
|
|
TString str;
|
|
|
|
TConfig& ini = config();
|
|
TString_array lista_anamag, lista_umart;
|
|
ini.list_variables(lista_anamag, true, "ANAMAG", true);
|
|
ini.list_variables(lista_umart, true, "UMART", true);
|
|
TIsamfile anamag(LF_ANAMAG);
|
|
TIsamfile umart(LF_UMART);
|
|
|
|
anamag.open_ex(_excllock);
|
|
umart.open_ex(_excllock);
|
|
|
|
TRectype& rec_anamag = anamag.curr();
|
|
TRectype& rec_umart = umart.curr();
|
|
_keys_articoli.destroy();
|
|
_keys_umart.destroy();
|
|
|
|
TGalileo_iterator pi(this);
|
|
while (++pi)
|
|
{
|
|
const TString& codart = get_str("RICOD");
|
|
rec_anamag.zero();
|
|
rec_anamag.put(ANAMAG_CODART, codart);
|
|
|
|
const TString80 key(rec_anamag.build_key(1));
|
|
|
|
_keys_articoli.add(key, key);
|
|
|
|
bool good = anamag.read() == NOERR;
|
|
|
|
if (!good)
|
|
{
|
|
rec_anamag.zero();
|
|
rec_anamag.put(ANAMAG_CODART, codart);
|
|
good = test_write(anamag);
|
|
}
|
|
if (good)
|
|
{
|
|
aggiorna_record(anamag, lista_anamag);
|
|
rec_umart.zero();
|
|
rec_umart.put(UMART_CODART, codart);
|
|
rec_umart.put(UMART_NRIGA, 1);
|
|
|
|
const TString80 key_umart(rec_umart.build_key(1));
|
|
|
|
_keys_umart.add(key_umart, key_umart);
|
|
bool good = umart.read() == NOERR;
|
|
if (!good)
|
|
{
|
|
rec_umart.zero();
|
|
rec_umart.put(UMART_CODART, codart);
|
|
rec_umart.put(UMART_NRIGA, 1);
|
|
good = (umart.write() == NOERR);
|
|
}
|
|
if (good)
|
|
{
|
|
rec_umart.put(UMART_UM, get_str("RSUMS"));
|
|
rec_umart.put(UMART_FC, 1);
|
|
umart.rewrite();
|
|
}
|
|
}
|
|
}
|
|
anamag.close();
|
|
umart.close();
|
|
return write_enabled();
|
|
}
|
|
|
|
bool TGalileo_articoli::trasferisci_costi(const TString & ditta, const TString & cms, const TString & can)
|
|
{
|
|
TString query =
|
|
"SELECT M2RIS, M2CMD FROM GMRIS00F\n"
|
|
"WHERE (M2AZI='";
|
|
query << ditta <<"') AND (M2COM='" << cms <<"') AND (M2CAN='" << can << "')";
|
|
TRecordset& recset = create_recordset(query);
|
|
TIsamfile anamag(LF_ANAMAG);
|
|
TRectype& rec_anamag = anamag.curr();
|
|
TGalileo_iterator pi(this);
|
|
TString80 codart;
|
|
anamag.open_ex(_excllock);
|
|
while (++pi)
|
|
{
|
|
codart = get_str("M2RIS");
|
|
rec_anamag.zero();
|
|
rec_anamag.put(ANAMAG_CODART, codart);
|
|
bool good = anamag.read() == NOERR;
|
|
if (good)
|
|
{
|
|
anamag.put(ANAMAG_ULTCOS1, get_str("M2CMD"));
|
|
test_rewrite(anamag);
|
|
}
|
|
}
|
|
anamag.close();
|
|
return write_enabled();
|
|
}
|
|
|
|
bool TGalileo_articoli::aggiorna_record(TIsamfile& file, const TString_array& lista_campi)
|
|
{
|
|
TRectype& rec = file.curr();
|
|
TString campo_dest, campo_orig, valore, str;
|
|
|
|
FOR_EACH_ARRAY_ROW(lista_campi,i,row)
|
|
{
|
|
row->get(0, campo_dest);
|
|
row->get(1, campo_orig);
|
|
if (campo_orig.full())
|
|
{
|
|
if (campo_orig[0] == '_')
|
|
{
|
|
TToken_string elabora(campo_orig.mid(1),',');
|
|
const TString& str = elabora.get();
|
|
if (str == "TAB") // formato _TAB, <tabella da leggere>,<valore CODTAB>, <campo da leggere>
|
|
{
|
|
const TString4 tab = elabora.get(); // tabella da leggere
|
|
const TString80 campo = elabora.get();
|
|
const TString16 codtab = get_str(campo);
|
|
const TString80 campotab = elabora.get();
|
|
valore = cache().get(tab, codtab, campotab);
|
|
}
|
|
else if (str == "FISSO")
|
|
valore = elabora.get(); // valore fisso indicato in configurazione
|
|
} else
|
|
if (campo_orig[0] == '"' || campo_orig[0] == '\'')
|
|
{
|
|
valore = campo_orig;
|
|
valore.ltrim(1);
|
|
valore.rtrim(1);
|
|
}
|
|
else
|
|
valore = get_str(campo_orig);
|
|
rec.put(campo_dest, valore);
|
|
}
|
|
}
|
|
return test_rewrite(file);
|
|
}
|
|
|
|
TGalileo_articoli::TGalileo_articoli()
|
|
{
|
|
TConfig c(CONFIG_DITTA);
|
|
|
|
_ditta = c.get_long("GalDitta");
|
|
_cms = c.get("GalCommessa");
|
|
_can = c.get("GalCantiere");
|
|
}
|
|
|
|
TGalileo_articoli::~TGalileo_articoli()
|
|
{
|
|
}
|
|
|