ba1?00.cpp Fascicolator

ba3100.cpp   Reindenta che ti passa
ba4200?.cpp  Aggiunta gestione della posta elettronica
ba6101.cpp   Corretta stampa elenco persone: 006707
bacnv.cpp    Aggiunta conversione per i nuouvi CAP ed uffici unici
bacnv15?.txt Files di supporto alla suddetta conversione


git-svn-id: svn://10.65.10.50/trunk@5649 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1997-11-20 08:18:05 +00:00
parent 5b5ccfae62
commit 9c5da80f5f
14 changed files with 961 additions and 115 deletions

View File

@ -27,9 +27,10 @@ enum KeyType { _user_key, _aga_key, _prassi_key, _procom_key};
class TDongle : public TObject
{
word _serno;
word _serno, _max_users;
KeyType _type;
word _eprom[64];
TDate _last_update;
#if XVT_OS == XVT_OS_SCOUNIX
word _port;
@ -48,6 +49,7 @@ public:
word number() const { return _serno; }
bool ok() const { return _serno != 0xFFFF; }
word max_users() const { return _max_users; }
void garble(word data[4]) const;
@ -56,6 +58,7 @@ public:
bool active(word module) const { return _module[module]; }
void activate(word module, bool on = TRUE) { _module.set(module, on); _dirty = TRUE; }
void deactivate(word module) { activate(module, FALSE); }
void set_max_users(word u) { _max_users = u; _dirty = TRUE; }
bool dirty() const { return _dirty; }
bool burn();
@ -65,7 +68,7 @@ public:
};
TDongle::TDongle()
: _type(_user_key), _serno(0xFFFF), _dirty(FALSE)
: _type(_user_key), _serno(0xFFFF), _dirty(FALSE), _max_users(1)
{
memset(_eprom, 0, sizeof(_eprom));
}
@ -92,14 +95,14 @@ bool TDongle::already_programmed() const
if (data[0] != 0xFACE)
return FALSE;
if (data[1] != _serno)
if (data[1] == 0 || data[1] > 255)
return FALSE;
const TDate today(TODAY);
const long& giulio = (const long&)data[2];
const long yyyymmdd = today.julian2date(giulio);
const TDate d(yyyymmdd);
if (d.year() < 1997 || d.year() > 2997)
if (d.year() < 1997 || d > today)
return FALSE;
return TRUE;
@ -150,11 +153,16 @@ bool TDongle::login()
if (data[0] == 0xFAE8)
_serno = data[1];
else
{
{
#ifdef DBG
if (data[0] == 0x3283)
{
_type = _aga_key;
_serno = 0;
}
#endif
if (_type == _user_key)
ok = FALSE;
else
_serno = 0;
}
}
@ -162,13 +170,16 @@ bool TDongle::login()
{
if (_serno > 0)
{
const bool already = already_programmed();
_module.reset();
_module.set(0, TRUE);
const int last_word = already_programmed() ? 12 : 4;
const int last_word = already ? 12 : 4;
word data[4];
// Legge flag di attivazione dei moduli
for (int i = 0; i < last_word; i += 4)
{
word data[4];
memcpy(data, &_eprom[48+i], sizeof(data));
garble(data);
if (data[3] == _serno) // Validate block
@ -176,12 +187,15 @@ bool TDongle::login()
for (int j = 0; j < 3; j++)
{
word parola = data[j] ^ _serno;
for (int b = 15; b >= 0; b--)
if (parola)
{
if (BITTEST(parola, b))
for (int b = 15; b >= 0; b--)
{
const word bit = i * 12 + j * 16 + b;
_module.set(bit);
if (BITTEST(parola, b))
{
const word bit = i * 12 + j * 16 + b;
_module.set(bit);
}
}
}
}
@ -189,11 +203,24 @@ bool TDongle::login()
else
break;
}
// Legge numero massimo di utenti
memcpy(data, &_eprom[60], sizeof(data));
garble(data);
_max_users = data[1];
if (_max_users <= 0 || _max_users > 255)
_max_users = 1;
const long& giulio = (const long&)data[2];
const long yyyymmdd = _last_update.julian2date(giulio);
_last_update = yyyymmdd;
}
else
{
_module.set(MAX_AUT-1);
_module.set();
_module.set();
_max_users = 1;
_last_update = TDate(TODAY);
}
}
#endif
@ -245,8 +272,8 @@ bool TDongle::burn()
garble(data);
if (data[0] != 0xFACE)
return error_box("Checksum error.");
if (data[1] != _serno)
return error_box("Bad serial number.");
if (data[1] == 0 || data[1] > 255)
return error_box("Bad users number.");
const long& val = (const long&)data[2];
const long yyyymmdd = today.julian2date(val);
const TDate date(yyyymmdd);
@ -255,11 +282,12 @@ bool TDongle::burn()
}
data[0] = 0xFACE;
data[1] = _serno;
data[1] = _max_users;
long& val = (long&)data[2];
val = today.date2julian();
garble(data);
write_octect(60, data);
_last_update = today;
word module = 0;
for (int octect = 0; octect < 3; octect++)
@ -298,7 +326,7 @@ TInformazione_moduli::TInformazione_moduli()
ifstream in("prassi.aut");
while (!in.eof() && in.good())
{
in.getline(s.get_buffer(256), s.size());
in.getline(s.get_buffer(), s.size());
s.trim();
if (s.empty())
break;
@ -306,7 +334,7 @@ TInformazione_moduli::TInformazione_moduli()
if (l > 2)
{
// t = format("%-40s", (const char*)s.right(l-3));
t = format("%-40s", (const char*)s.mid(3));
t = s.mid(3);
t.add(s.left(2));
}
else
@ -389,6 +417,8 @@ protected:
void garble(word k[4]) const;
void garble(word n, TString& str) const;
void garble_users(word u, TString& str) const;
word& serno() { return _serno; }
void generate_key();
@ -396,15 +426,20 @@ protected:
void build_key_column();
bool burn_dongle();
TDongle& dongle() { return _dongle; }
static void keyext(const TString & s, word * v);
static void encode_second_key();
static bool user_hnd(TMask_field & f, KEY k);
static bool date_hnd(TMask_field & f, KEY k);
static bool serno_hnd(TMask_field & f, KEY k);
static bool decode_hnd(TMask_field & f, KEY k);
static bool activate_hnd(TMask_field & f, KEY k);
static bool k_notify(TSheet_field & f, int r, KEY k);
static bool change_users_handler(TMask_field&, KEY key);
static bool maxuser_handler(TMask_field& fld, KEY key);
public:
TAttivazione_moduli() : _msk(NULL) { }
@ -447,7 +482,7 @@ void TAttivazione_moduli::garble(word k[4]) const
void TAttivazione_moduli::garble(word n, TString& str) const
{
const TDate today(TODAY);
const TDate today(_msk->get(F_DT));
const long val = today.date2julian();
word data[4];
@ -459,6 +494,18 @@ void TAttivazione_moduli::garble(word n, TString& str) const
str.format("%04X%04X", data[0], data[1]);
}
void TAttivazione_moduli::garble_users(word u, TString& str) const
{
word data[4];
data[0] = word(_msk->get_int(F_SN));
data[1] = u;
data[2] = 0;
data[3] = 0;
garble(data);
str.format("%04X%04X", data[0], data[1]);
}
void TAttivazione_moduli::build_key_column()
{
TSheet_field& sf = (TSheet_field&)_msk->field(F_MODULI);
@ -487,7 +534,7 @@ bool TAttivazione_moduli::burn_dongle()
{
TString16 str, key;
TSheet_field& sf = (TSheet_field&)_msk->field(F_MODULI);
TSheet_field& sf = _msk->sfield(F_MODULI);
for (int i = 0; i < sf.items(); i++)
{
TToken_string& riga = sf.row(i);
@ -528,6 +575,69 @@ bool TAttivazione_moduli::burn_dongle()
return ok;
}
bool TAttivazione_moduli::maxuser_handler(TMask_field& fld, KEY key)
{
bool ok = TRUE;
if (key == K_TAB && fld.focusdirty())
{
const int utenti = atoi(fld.get());
if (utenti > 0 && utenti <= 255)
{
TString16 str;
app().garble_users(utenti, str);
fld.mask().set(102, str);
}
else
ok = fld.error_box("Numero di utenti errato");
}
return ok;
}
bool TAttivazione_moduli::change_users_handler(TMask_field& fld, KEY key)
{
if (key == K_SPACE)
{
TMask m("Utenti", 1, 40, 6);
m.add_number(101, 0, "Utenti ", 1, 1, 3, "U");
m.add_string(102, 0, "Codice ", 1, 2, 8, "U");
m.add_button(DLG_OK, 0, "", -12, -1, 10, 2);
m.add_button(DLG_CANCEL, 0, "", -22, -1, 10, 2);
TDongle& dongle = app().dongle();
m.set(101, dongle.max_users());
if (dongle.type() != _user_key)
{
m.set_handler(101, maxuser_handler);
m.disable(102);
}
if (m.run() == K_ENTER)
{
if (dongle.type() == _user_key)
{
const int utenti = m.get_int(101);
if (utenti > 0 && utenti <= 255)
{
TString16 str;
app().garble_users(utenti, str);
if (str == m.get(102))
{
dongle.set_max_users(utenti);
fld.mask().set(F_USERS, utenti);
}
else
error_box("Codice errato");
}
else
error_box("Numero di utenti errato");
}
}
}
return TRUE;
}
void TAttivazione_moduli::generate_key()
{
#if XVT_OS == XVT_OS_SCOUNIX
@ -554,14 +664,18 @@ void TAttivazione_moduli::generate_key()
nmod = build_sheet();
ud[0] = _dongle.number();
ud[1] = K1 | (nmod & LBYTEMASK);
long & l = (long &) ud[2];
TDate d(TODAY);
l = d.year()*10000L + d.month()*100L + d.day();
garble(ud);
_msk->set(F_K1, format("%04X%04X%04X%04X", ud[0], ud[1], ud[2], ud[3]));
_msk->set(F_SN, _dongle.number());
_msk->set(F_DT, d);
_msk->set(F_DT, d);
const int utenti = _dongle.max_users();
_msk->set(F_USERS, utenti);
}
int hexdigit(char c)
@ -650,6 +764,21 @@ bool TAttivazione_moduli::serno_hnd(TMask_field& f, KEY k)
return TRUE;
}
bool TAttivazione_moduli::date_hnd(TMask_field& f, KEY k)
{
bool ok = TRUE;
if (k == K_TAB && f.focusdirty())
{
const TDate data(f.get());
const TDate oggi(TODAY);
ok = data <= oggi;
if (!ok)
f.error_box("La data deve essere antecedente a quella di sistema");
}
return ok;
}
void TAttivazione_moduli::encode_second_key()
{
TMask * m = app()._msk;
@ -736,7 +865,7 @@ bool TAttivazione_moduli::activate_hnd(TMask_field & f, KEY k)
bool TAttivazione_moduli::k_notify(TSheet_field& f, int r, KEY k)
{
if (k == K_INS)
if (k == K_INS || k == K_DEL)
return FALSE;
return TRUE;
}
@ -754,10 +883,12 @@ bool TAttivazione_moduli::create()
disable_menu_item(M_FILE_PG_SETUP);
_msk = new TMask("ba1500a") ;
TSheet_field& sf = (TSheet_field&) _msk->field(F_MODULI);
const int un = _im->unassigned();
_msk->set_handler(F_CHANGEUSERS, change_users_handler);
TSheet_field& sf = _msk->sfield(F_MODULI);
sf.set_notify(k_notify);
const int un = _im->unassigned();
switch (_dongle.type())
{
@ -766,6 +897,10 @@ bool TAttivazione_moduli::create()
_msk->disable(F_K1);
_msk->disable(F_K2);
_msk->set_handler(F_K4, user_hnd);
_msk->enable(F_DT);
_msk->set_handler(F_DT, date_hnd);
generate_key();
sf.enable_column(F_ENABLE, FALSE);
sf.enable_column(F_KEY, serno() != 0);

View File

@ -11,6 +11,9 @@
#define F_SN 211
#define F_DT 212
#define F_MODULI 213
#define F_USERS 214
#define F_CHANGEUSERS 215
#define F_REQUEST 216
#define F_NOMEMOD 101
#define F_ENABLE 102

View File

@ -4,12 +4,17 @@ TOOLBAR "" 0 20 0 2
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
PROMPT -13 -1 ""
END
BUTTON F_REQUEST 18 2
BEGIN
PROMPT -11 -1 "~Stampa richiesta"
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -1 ""
PROMPT -33 -1 ""
END
ENDPAGE
@ -40,6 +45,18 @@ BEGIN
FLAGS "AD"
END
NUMBER F_USERS 3
BEGIN
PROMPT 56 3 "Utenti "
FLAGS "D"
END
BUTTON F_CHANGEUSERS 6 1
BEGIN
PROMPT 69 3 "Cambia"
END
STRING F_K3 16
BEGIN
PROMPT 1 3 "Attivazione 2 "

View File

@ -39,31 +39,4 @@ public:
virtual ~TAuto_token_string() { }
};
#define FOR_EACH_ARRAY_ROW(__arr, __r, __riga) \
TToken_string* __riga; \
for (int __r = __arr.first(); \
__riga = (TToken_string*)__arr.objptr(__r); \
__r = __arr.succ(__r))
#define FOR_EACH_ARRAY_ROW_BACK(__arr, __r, __riga) \
TToken_string* __riga; \
for (int __r = __arr.last(); \
__riga = (TToken_string*)__arr.objptr(__r); \
__r = __arr.pred(__r))
#define FOR_EACH_SHEET_ROW(__sheet, __r, __riga) \
FOR_EACH_ARRAY_ROW(__sheet.rows_array(), __r, __riga)
#define FOR_EACH_SHEET_ROW_BACK(__sheet, __r, __riga) \
FOR_EACH_ARRAY_ROW_BACK(__sheet.rows_array(), __r, __riga)
#define FOR_EACH_ASSOC_STRING(__ass, __obj, __key, __str) \
const char *__key, *__str; __ass.restart; \
for (THash_object* __obj = __ass.get_hashobj(); \
__obj && (__str = (const TString&)__obj->obj(), __key = __obj->key()); \
__obj = __ass.get_hashobj())
#define FOR_EACH_TOKEN(__tok, __str) \
for (const char* __str = __tok.get(0); __str; __str = __tok.get())
#endif

View File

@ -445,7 +445,7 @@ bool TGeneric_table_app::user_create()
_ver->put("R5","50500"); _ver->put("R7","200000");
_ver->put("R11","88"); _ver->put("R12","88");
if (_ver->write() != NOERR)
error_box("Errore %d in scrittura sulla tabella %VER",_ver->status());
error_box("Errore %d in scrittura sulla tabella versamenti",_ver->status());
}
}
}

View File

@ -43,6 +43,7 @@ protected:
virtual void write_enable(bool on = TRUE);
static bool fax_handler(TMask_field& f, KEY k);
static bool email_handler(TMask_field& f, KEY k);
static bool ba4200_handler(TMask& m, KEY k);
static bool ind_handler(TMask_field& f, KEY k);
@ -106,10 +107,15 @@ bool TPersone_app::fax_handler(TMask_field& f, KEY k)
bool ok = TRUE;
if (k == K_SPACE)
{
TConfig ini(CONFIG_USER, "Link");
TFilename editor = ini.get("Editor", NULL, -1, "notepad");
TExternal_app app(editor);
ok = app.run(TRUE, FALSE) == 0;
// TConfig ini(CONFIG_USER, "Link");
// TFilename editor = ini.get("Editor", NULL, -1, "notepad");
// TExternal_app app(editor);
// ok = app.run(TRUE, FALSE) == 0;
TFilename msg; msg.temp(NULL, "txt");
ofstream msgf(msg);
msgf.close();
ok = goto_url(msg);
if (ok)
{
const TPersone_app& app = (const TPersone_app&)main_app();
@ -125,6 +131,16 @@ bool TPersone_app::fax_handler(TMask_field& f, KEY k)
return ok;
}
bool TPersone_app::email_handler(TMask_field& f, KEY k)
{
if (k == K_SPACE)
{
TMail_message msg(f.mask().get(F_MAIL));
msg.send();
}
return TRUE;
}
bool TPersone_app::ind_handler(TMask_field& f, KEY k)
{
TMask & m = f.mask();
@ -547,6 +563,7 @@ TMask* TPersone_app::get_mask(int mode)
_msk[MSKF]->set_handler(F_CODREG96, cod_reg);
_msk[MSKF]->set_handler(F_TITCF, tit_cf);
_msk[MSKF]->set_handler(DLG_FAX, fax_handler);
_msk[MSKF]->set_handler(DLG_EMAIL, email_handler);
_msk[MSKF]->set_handler(ba4200_handler);
}
@ -563,6 +580,7 @@ TMask* TPersone_app::get_mask(int mode)
_msk[MSKG]->set_handler(F_UFFCONC, uff_conc);
_msk[MSKG]->set_handler(F_TITCF, tit_cf);
_msk[MSKG]->set_handler(DLG_FAX, fax_handler);
_msk[MSKG]->set_handler(DLG_EMAIL, email_handler);
_msk[MSKG]->set_handler(ba4200_handler);
}

View File

@ -21,6 +21,19 @@ BEGIN
PICTURE BMP_FAX
END
BUTTON DLG_EMAIL 10 2
BEGIN
PROMPT -56 -3 "~Posta"
PICTURE BMP_EMAIL
END
GOLEM DLG_OGGETTI 10 2
BEGIN
PROMPT -66 -3 "~Oggetti"
FIELD OGGETTI
FLAG "M"
END
#include <toolbar.h>
ENDPAGE
@ -97,13 +110,6 @@ MESSAGE COPY,3@
CHECKTYPE REQUIRED
END
GOLEM DLG_OGGETTI 4 2
BEGIN
PROMPT 71 1 ""
FIELD OGGETTI
FLAG "M"
END
RADIOBUTTON LST_AF1_SESSO 1 12
BEGIN
PROMPT 0 5 "Sesso"
@ -649,7 +655,6 @@ STRING F_MAIL 50
BEGIN
PROMPT 2 16 "Indirizzo di posta "
FIELD MAIL
FLAGS "B"
END
ENDPAGE

View File

@ -20,6 +20,19 @@ BEGIN
PICTURE BMP_FAX
END
BUTTON DLG_EMAIL 10 2
BEGIN
PROMPT -56 -3 "~Posta"
PICTURE BMP_EMAIL
END
GOLEM DLG_OGGETTI 10 2
BEGIN
PROMPT -66 -3 "~Oggetti"
FIELD OGGETTI
FLAG "M"
END
#include <toolbar.h>
ENDPAGE
@ -79,13 +92,6 @@ BEGIN
KEY 2
END
GOLEM DLG_OGGETTI 4 2
BEGIN
PROMPT 71 1 ""
FIELD OGGETTI
FLAG "M"
END
GROUPBOX DLG_NULL 41 4
BEGIN
PROMPT 0 4 "Partita IVA "
@ -585,7 +591,6 @@ STRING F_MAIL 50
BEGIN
PROMPT 2 15 "Indirizzo di posta "
FIELD MAIL
FLAGS "B"
END
ENDPAGE

View File

@ -811,31 +811,20 @@ void TAnaprint_app::set_elenco()
case anagiu:
if (_pr_what == anafis)
{
if (_inclditte)
set_row(1,"$[b]@pN$[n]@4j#T@55g$[r]@pN$[n]@66g@S",
FLD(LF_ANAG,"CODANAGR","@@@@@"),
&_surname_name,
FLD(LF_NDITTE,"CODDITTA","@@@@@"),
FLD(LF_NDITTE,"RAGSOC"));
else
set_row(1,"$[b]@pN$[n]@4j#T",
FLD(LF_ANAG,"CODANAGR","@@@@@"),
&_surname_name);
set_row(1,"$[b]@pN$[n]@7g#T",
FLD(LF_ANAG,"CODANAGR","@@@@@"),
&_surname_name);
}
else
{
if (_inclditte)
set_row(1,"$[b]@pN$[n]@4j@50S@55g$[r]@pN$[n]@66g@S",
FLD(LF_ANAG,"CODANAGR","@@@@@"),
FLD(LF_ANAG,"RAGSOC"),
FLD(LF_NDITTE,"CODDITTA","@@@@@"),
FLD(LF_NDITTE,"RAGSOC"));
else
set_row(1,"$[b]@pN$[n]@4j@50S",
FLD(LF_ANAG,"CODANAGR","@@@@@"),
FLD(LF_ANAG,"RAGSOC"));
set_row(1,"$[b]@pN$[n]@7g@50S",
FLD(LF_ANAG,"CODANAGR","@@@@@"),
FLD(LF_ANAG,"RAGSOC"));
}
if (_inclditte)
set_row(1,"@58g$[r]@pN$[n]@66g@S",
FLD(LF_NDITTE,"CODDITTA","@@@@@"),
FLD(LF_NDITTE,"RAGSOC"));
break;
case nditte:
set_row(1,"$[r]@pN$[n]@10g@S@50g@S @pN@3j@S",
@ -870,27 +859,17 @@ void TAnaprint_app::set_headers()
{
case anafis:
case anagiu:
#if XVT_OS != XVT_OS_SCOUNIX
set_background("W1l{1 2 132 2}W4l{1 5 132 5}");
#else
set_header(2,(const char*)sep);
set_header(5,(const char*)sep);
#endif
set_header(1,"@bELENCO PERSONE %s@82gStudio@96gData"
"@101g @< @110g Pag. @#", _pr_what == anafis ? "FISICHE" :
"GIURIDICHE");
set_header(3,"@iCodice@55gCodice");
set_header(4,"@iAnagr. Ragione sociale/cognome e nome@55gDitta"
set_header(3,"@iCodice@58gCodice");
set_header(4,"@iAnagr. Ragione sociale/cognome e nome@58gDitta"
"@66gDenominazione sociale");
set_header(6,"");
break;
case nditte:
#if XVT_OS != XVT_OS_SCOUNIX
set_background("W1l{1 2 132 2}W4l{1 5 132 5}");
#else
set_header(2,(const char*)sep);
set_header(5,(const char*)sep);
#endif
set_header(1,"@bELENCO DITTE@82gStudio@96gData"
"@101g @< @110g Pag. @#");
set_header(3,"@iCodice@50gT");

View File

@ -26,7 +26,7 @@
#include "..\cg\cglib02.h"
#define usage "Errore - uso : bacnv [1|2|3|4|5|6|7|8|9|10|11|12|13|14] ditta"
#define usage "Errore - uso : bacnv [1|2|3|4|5|6|7|8|9|10|11|12|13|14|15] ditta"
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Applicazione di conversione archivi XBase, valida per tutti e 4 i tipi di DLL
@ -184,6 +184,9 @@ public:
void remove_dta_ndx() const;
void convert_ucs() const;
void convert_ucc() const;
void convert_cap() const;
void convert_uue() const;
TConversione_archivi() : _oldditta(0), _codditta(0), _error(0) {}
};
@ -319,6 +322,12 @@ bool TConversione_archivi::menu(MENU_TAG)
convert_ucs();
convert_ucc();
}
break;
case 15:
if (_codditta == 0)
convert_uue();
convert_cap();
break;
default:
break;
}
@ -1332,7 +1341,6 @@ void TConversione_archivi::convert_saldi() const
// Effettua il ricalcolo saldi per tutti gli esercizi della ditta corrente
{
TTable esc("ESC");
for (esc.first();esc.good();esc.next())
{
const int year = atoi(esc.get("CODTAB"));
@ -1415,15 +1423,150 @@ void TConversione_archivi::convert_ucc() const
}
}
// Effettua conversioni per uffici unici
void TConversione_archivi::convert_uue() const
{
TProgind pi(0, "Caricamento tabella Uffici Unici", FALSE, FALSE);
TSystemisamfile uue(LF_TABCOM);
uue.load("bacnv15a.txt");
pi.set_text("Caricamento Uffici Unici nei comuni");
TLocalisamfile comuni(LF_COMUNI);
TScanner scan15b("bacnv15b.txt");
TToken_string line;
TString16 cod, uff;
for (line = scan15b.line(); line.not_empty(); line = scan15b.line())
{
cod = line.get(0);
comuni.put("COM", cod);
int err = comuni.read(_isequal, _lock);
if (err == NOERR)
{
TString16 fieldname, fieldval;
uff = line.get(1);
int first_uue = 0;
for (int uue = 1; uue <= 10; uue++)
{
fieldname = "CODUUE"; fieldname << uue;
fieldval = comuni.get(fieldname);
if (first_uue == 0 && fieldval.empty())
first_uue = uue;
if (fieldval == uff)
{
first_uue = 0;
break;
}
}
if (first_uue > 0)
{
fieldname = "CODUUE"; fieldname << first_uue;
comuni.put(fieldname, uff);
err = comuni.rewrite();
}
}
if (err != NOERR)
error_box("Impossibile aggiornare l'ufficio unico del comune %s: errore %d",
(const char*)cod, err);
}
scan15b.close();
}
// Effettua conversioni per nuovi cap
void TConversione_archivi::convert_cap() const
{
TLocalisamfile comuni(LF_COMUNI);
TScanner scan15c("bacnv15c.txt");
TToken_string line;
TString16 cod, oldcod, newcod;
TAssoc_array cap;
TProgind pi(0, "Aggiornamento CAP sui comuni", FALSE, FALSE);
for (line = scan15c.line(); line.not_empty(); line = scan15c.line())
{
cod = line.get(0);
oldcod = line.get();
newcod = line.get();
cap.add(oldcod, newcod);
if (_codditta == 0L)
{
comuni.put("COM", cod);
int err = comuni.read(_isequal, _lock);
if (err == NOERR)
{
comuni.put("CAPCOM", newcod);
err = comuni.rewrite();
}
if (err != NOERR)
error_box("Impossibile aggiornare il cap del comune %s: errore %d",
(const char*)cod, err);
}
}
scan15c.close();
TString msg;
TScanner scan15d("bacnv15d.txt");
for (line = scan15d.line(); line.not_empty(); line = scan15d.line())
{
TString16 cod = line.get(0);
const int logicnum = atoi(cod);
TLocalisamfile* file = NULL;
if (logicnum > 0)
file = new TLocalisamfile(logicnum);
else
{
if (_codditta == 0L)
file = new TTable(cod);
}
if (file != NULL)
{
msg = "Aggiornamento CAP sul file ";
msg << cod;
pi.set_text(msg);
file->lock();
for (int err = file->first(); err == NOERR; err = file->next())
{
bool dirty = FALSE;
for (cod = line.get(1); cod.not_empty(); cod = line.get())
{
oldcod = file->get(cod);
TString* newcod = (TString*)cap.objptr(oldcod);
if (newcod)
{
file->put(cod, *newcod);
dirty = TRUE;
}
}
if (dirty)
{
int err = file->rewrite();
if (err != NOERR)
error_box("Errore di aggiornamento %d", err);
}
}
file->unlock();
delete file;
}
}
scan15d.close();
}
///////////////////////////////////////////////////////////
// Programma di conversione archivi speciale
///////////////////////////////////////////////////////////
int main(int argc,char** argv)
{
const int r = (argc > 1) ? atoi(argv[1]) : 0;
const int r = (argc > 1) ? abs(atoi(argv[1])) : 0;
if (r < 0 || r > 14)
if (r < 0 || r > 15)
{
error_box(usage);
return 100;

14
ba/bacnv15a.txt Executable file
View File

@ -0,0 +1,14 @@
[Header]
Version=199515
Fields=COD,3|CODTAB,25|S0,70|S1,70|S3,70|S6,5
[Data]
UUE|795|BOLOGNA 1|VIA MARCO EMILIO LEPIDO|178|A944
UUE|796|BOLOGNA 2|VIA PAOLO NANNI COSTA|28|A944
UUE|797|BOLOGNA 3|VIA ANDREA DA FORMIGINE|3|A944
UUE|798|BOLOGNA 4|VIA LARGA|35|A944
UUE|799|IMOLA|VIA EMILIA|115|E289
UUE|800|ALESSANDRIA|P.ZZA TURATI|1|A182
UUE|801|TRAPANI|VIA VIRGILIO|24|L331
UUE|811|RIMINI 1|VIA IV NOVEMBRE|19|H294
UUE|812|RIMINI 2|VIA MACANNO (LOC.COLONNELLA)|37|H294

124
ba/bacnv15b.txt Executable file
View File

@ -0,0 +1,124 @@
A176|801
A182|800
A324|795
A392|795
A558|796
A665|797
A726|795
A747|811
A771|796
A785|797
A793|800
A944|795
A944|796
A944|797
A944|798
B029|800
B044|799
B071|800
B249|797
B288|801
B385|801
B399|795
B572|796
B689|796
B765|800
B870|800
B880|795
B892|799
B969|796
C027|800
C075|796
C086|799
C121|799
C130|801
C148|800
C162|800
C185|795
C191|796
C204|795
C265|799
C274|800
C292|797
C296|796
C357|812
D004|812
D158|795
D166|795
D194|800
D234|801
D360|799
D423|801
D518|801
D528|800
D668|799
D770|800
D797|800
D813|800
D814|800
D847|796
D878|795
D890|800
D961|812
E135|796
E136|797
E187|796
E289|799
E655|798
E712|800
E844|797
F015|800
F083|798
F219|797
F244|812
F288|797
F346|812
F363|798
F455|800
F476|812
F502|812
F523|812
F597|798
F627|796
F641|812
F659|796
F706|798
F715|812
F718|799
G199|800
G205|798
G208|801
G315|801
G319|801
G467|795
G566|796
G570|798
G619|800
G643|795
G755|811
G972|796
H021|800
H104|800
H121|800
H274|812
H294|811
H294|812
H678|795
H724|812
H801|812
H896|795
H921|812
H945|798
I110|795
I144|800
I191|795
I304|811
I407|801
I474|796
I550|811
I711|800
I798|800
L331|801
L762|796
L797|811
M185|795

415
ba/bacnv15c.txt Executable file
View File

@ -0,0 +1,415 @@
A004|20070|26834
A005|22050|23821
A043|88011|89832
A107|13010|13861
A112|22050|23881
A280|13061|13811
A301|22040|23841
A317|28030|28841
A325|28020|28877
A386|88012|89832
A409|28050|28811
A427|28010|28891
A497|28050|28812
A534|28031|28861
A594|22040|23811
A610|28032|28871
A683|22061|23890
A686|22062|23891
A687|22040|23816
A725|28042|28831
A733|28050|28813
A742|28040|28832
A745|22051|23822
A747|47041|47814
A772|88070|88824
A784|13030|13871
A811|20070|26821
A834|28040|28851
A859|13051|13900
A876|13050|13841
A919|20075|26811
A925|28033|28842
A995|20070|26812
B017|20070|26851
B058|13050|13872
B081|22040|23842
B141|20070|26822
B169|88031|89817
B194|22050|23883
B197|88020|89822
B207|28010|28833
B229|13060|13862
B261|22060|23892
B319|88070|88833
B380|28030|28873
B396|22050|23885
B417|13060|13821
B423|24032|23801
B456|20072|26823
B457|13050|13821
B463|28050|28814
B465|13050|13891
B508|13060|13812
B586|13062|13878
B610|28051|28821
B615|28052|28822
B626|50040|59025
B655|88020|89818
B694|28050|28815
B708|13015|13864
B763|24030|23802
B771|88070|88817
B794|50042|59015
B857|88070|88822
B876|28022|28881
B887|20090|26852
B899|20070|26831
B910|20071|26841
B933|13060|13823
B937|22050|23831
B943|22064|23880
B958|20080|26853
B961|20070|26842
B968|88070|88834
B996|22065|23893
C024|22040|23814
C155|13040|13851
C187|22040|23884
C228|20070|26843
C304|20072|26823
C329|20079|26866
C357|47033|47841
C362|20070|26844
C363|13042|13881
C367|28052|28825
C394|20070|26824
C478|28030|28875
C501|88070|88833
C521|22052|23870
C526|13060|13852
C532|13060|13882
C555|20060|26832
C563|22030|23861
C567|28010|28891
C581|88010|89816
C725|88071|88813
C726|88072|88811
C752|22040|23862
C816|20073|26845
C819|13013|13863
C839|22050|23823
C851|22050|23886
C917|20060|26833
D004|47040|47853
D021|20070|26854
D028|20070|26846
D029|20076|26847
D065|22040|23813
D068|20070|26834
D094|13014|13836
D099|28054|28801
D112|22041|23845
D122|88074|88900
D123|88073|88836
D131|22050|23832
D134|28034|28852
D143|22060|23894
D145|22040|23814
D159|20070|26835
D165|13015|13864
D168|28053|28865
D177|28036|28862
D182|13060|13853
D189|88070|88812
D219|13060|13865
D225|28050|28825
D236|88075|88842
D253|88013|89832
D280|22050|23824
D303|88010|89833
D327|22042|23843
D332|28037|28845
D339|13050|13893
D346|22050|23824
D350|13042|13881
D364|88030|89862
D374|28030|28853
D398|22040|23853
D428|24030|23803
D436|22050|23825
D453|88020|89823
D481|28050|28825
D587|88023|89814
D589|88010|89851
D596|88010|89843
D660|20070|26861
D706|28030|28863
D762|88020|89815
D767|88010|89851
D848|13052|13894
D865|22043|23851
D868|20060|26832
D913|22040|23846
D926|22050|23852
D961|47040|47855
D984|28026|28887
D988|88010|89831
E003|28055|28823
E024|13030|13874
E028|28040|28836
E127|20074|26813
E130|13050|13895
E153|28025|28883
E238|20070|26862
E269|28050|28825
E287|22050|23898
E304|28050|28816
E305|22040|23815
E308|22050|23835
E321|88010|89851
E339|88076|88841
E389|88030|89863
E507|22053|23900
E552|13060|13853
E581|22050|23827
E590|88030|89844
E627|20070|26814
E648|20075|26900
E651|20090|26855
E656|22050|23871
E685|28020|28893
E777|20070|26843
E790|28030|28876
E795|28010|28894
E821|13050|13887
E836|88010|89843
E840|20070|26825
E852|20076|26847
E853|28030|28854
E858|22040|23864
E879|22054|23826
E947|22050|23832
E994|20079|26866
F010|28030|28855
F028|20070|26815
F037|13030|13873
F042|13063|13866
F048|28020|28895
F102|20070|26843
F108|88070|88817
F133|22055|23807
F146|28040|28802
F149|20067|26833
F157|88052|88838
F167|13050|13831
F189|13060|13816
F192|28056|28817
F207|88014|89852
F244|47046|47843
F248|22067|23873
F260|20080|26838
F265|22040|23817
F304|22047|23847
F346|47040|47836
F364|88020|89823
F369|13053|13888
F423|20075|26836
F476|47040|47854
F483|28030|28864
F502|47040|47834
F523|47040|47837
F537|88018|89900
F561|24030|23804
F572|50045|59013
F607|88020|89819
F639|28030|28843
F641|47040|47854
F657|22050|23874
F674|22068|23876
F715|47047|47833
F758|22040|23811
F769|13054|13822
F776|13030|13874
F801|20060|26837
F833|13050|13895
F843|88020|89824
F878|13050|13896
F887|22060|23895
F893|88034|89844
F932|28010|28891
F992|13055|13897
F993|13056|13898
G007|28050|28824
G009|22048|23848
G026|22056|23887
G030|22057|23854
G040|22030|23865
G062|28026|28887
G096|20070|26854
G107|20080|26863
G117|28027|28877
G161|22058|23875
G166|20080|26864
G171|20070|26816
G218|22050|23877
G223|22059|23899
G241|22050|23833
G278|88070|88818
G280|28020|28884
G335|88035|89861
G336|22040|23837
G368|22040|23818
G448|22050|23888
G456|22050|23828
G485|22050|23855
G508|88053|88837
G521|13050|13843
G577|13050|13844
G594|13060|13812
G600|28020|28885
G658|28020|28886
G714|13054|13822
G722|88026|89812
G728|88010|89834
G754|50046|59016
G755|47030|47824
G785|88027|89813
G798|13057|13814
G820|13058|13875
G927|13050|13833
G974|13016|13867
G980|13050|13899
G999|50047|59100
H028|22050|23834
H030|28057|28818
H033|28030|28866
H037|28020|28803
H063|22040|23819
H103|13010|13854
H106|28020|28896
H107|28020|28896
H145|13060|13812
H203|28030|28856
H271|88036|89866
H274|47036|47838
H294|47037|47900
H383|88070|88835
H403|88070|88821
H486|22040|23849
H516|88015|89841
H538|13050|13845
H553|13040|13883
H561|13060|13815
H596|22050|23888
H662|13065|13816
H681|13050|13884
H701|20090|26857
H724|47040|47835
H726|13060|13885
H777|28059|28804
H785|88010|89842
H801|47040|47832
H807|88010|89851
H821|13060|13876
H844|20070|26848
H921|47048|47842
H941|88010|89900
I012|20070|26817
I026|88070|88831
I057|88070|88817
I058|88020|89821
I074|13060|13812
I140|20070|26865
I243|22050|23889
I249|28038|28857
I274|20079|26866
I304|47038|47822
I308|88070|88832
I350|88016|89843
I362|20070|26849
I468|88077|88825
I494|88070|88831
I550|47030|47825
I561|20070|26826
I596|13061|13811
I612|20080|26856
I619|28030|28843
I639|88029|89822
I744|88020|89822
I759|22040|23844
I761|22060|23896
I815|20070|26867
I835|13050|13834
I847|13050|13817
I848|20077|26858
I853|88010|89831
I854|88017|89831
I868|13029|13868
I884|88020|89822
I905|88037|89864
I945|88010|89843
I976|28049|28838
I980|13066|13823
I982|88078|88816
I994|22050|23835
I996|22030|23867
L022|22040|23837
L075|13060|13811
L116|13050|13844
L125|20071|26827
L187|28030|28858
L193|13067|13818
L239|13050|13884
L257|24030|23806
L333|28050|28826
L336|28030|28868
L368|22050|23836
L436|13059|13835
L450|28030|28859
L452|88038|89861
L469|20070|26828
L492|88070|88823
L537|50049|59021
L556|13060|13855
L572|20080|26859
L581|22050|23857
L586|13050|13847
L606|13068|13825
L607|88020|89821
L620|13050|13847
L634|22049|23868
L651|28020|28897
L666|28030|28879
L680|22050|23829
L691|28039|28868
L699|88010|89834
L712|13050|13824
L731|22050|23838
L746|28058|28900
L751|24030|23808
L755|22050|23879
L756|22050|23878
L775|50048|59024
L785|13030|13871
L797|47040|47826
L802|88070|88819
L813|22050|23835
L864|28030|28841
L866|22060|23897
L880|13069|13856
L889|28050|28819
L906|28029|28844
L933|13060|13868
L977|20070|26818
L978|13030|13877
M042|28030|28856
M098|13040|13886
M111|28020|28805
M138|88030|89867
M143|88030|89868
M158|20060|26839
M179|13040|13887
M196|13050|13888
M201|13050|13848
M204|88030|89867

15
ba/bacnv15d.txt Executable file
View File

@ -0,0 +1,15 @@
6|CAPRES|CAPRF|CAPCORR
9|CAPAA
10|CAPCS
11|CAPULC|CAPTRIB
16|CAP
18|CAP
20|CAPCF
%BAN|S3
%UCC|S7
%UCS|S7
%UES|S7
%UID|S7
%UIV|S7
%URE|S7
%VET|S7