Patch level : 4.0 667
Files correlati : Ricompilazione Demo : [ ] Commento : Riportata la versione 3.1 patch 766 git-svn-id: svn://10.65.10.50/trunk@14628 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
d05897718d
commit
d030bbabe2
@ -1,20 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella Archiviazione Bilanci
|
||||
1|@2g%s|Codice
|
||||
1|@10g%s|Anno
|
||||
1|@20g%s|Cod.Per.
|
||||
1|@30g%s|Tipo bil.
|
||||
1|@35g%s|Data arc.
|
||||
1|@47g%s|Data rip.
|
||||
1|@58g%s|Per. Chiuso
|
||||
|
||||
[Rows]
|
||||
1|CODTAB[1,5]|@2g@7,ls
|
||||
1|CODTAB[6,9]|@11g@16,ls
|
||||
1|CODTAB[10,12]|@21g@24,ls
|
||||
1|CODTAB[13,15]|@31g@34,ls
|
||||
1|D0|@35g@46d
|
||||
1|D1|@47g@58d
|
||||
1|B0|@65g@68f
|
||||
|
@ -1,9 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella Tipi di Bilancio
|
||||
1|@3g%s|Codice
|
||||
1|@10g%s|Descrizione
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@3g@2,ls
|
||||
1|S0|@10g@80,ls
|
@ -1,19 +0,0 @@
|
||||
[Headers]
|
||||
132
|
||||
Tabella Periodi di Bilancio
|
||||
1|@2g%s|Codice
|
||||
1|@10g%s|Descrizione
|
||||
1|@50g%s|gg/mm inizio
|
||||
1|@65g%s|gg/mm fine
|
||||
1|@80g%s|Num. Anni
|
||||
1|@91g%s|Descrizione alternativa stampa raffr.
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@2g@3,ls
|
||||
1|S0|@10g@49,ls
|
||||
1|I0|@50g@2,ls
|
||||
1|I1|@55g@2,ls
|
||||
1|I2|@65g@2,ls
|
||||
1|I3|@70g@2,ls
|
||||
1|I4|@80g@4,ls
|
||||
1|S1|@91g@40,ls
|
@ -1252,9 +1252,9 @@ bool TStampaPerCategorie::user_create()
|
||||
_sfamiglia = new TRecord_array(LF_FAMIGLIE,FAM_PROGFAM);
|
||||
add_cursor(new TSorted_cursor(_rel,"SOG_CODSEZ|SOG_CODSOT","",3));
|
||||
_msk = new TMask("at2700a");
|
||||
TFilename filename = "file";
|
||||
TFilename filename = "filecat";
|
||||
filename.ext("dbf");
|
||||
TFilename filetrr = "file";
|
||||
TFilename filetrr = "filecat";
|
||||
filetrr.ext("trr");
|
||||
filetrr.custom_path();
|
||||
_file = new TExternisamfile(filename, filetrr, FALSE);
|
||||
|
@ -383,8 +383,8 @@ LRESULT CALLBACK MainWndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
PAINTSTRUCT ps;
|
||||
RECT rct;
|
||||
const char* s1 = "Installa la versione normale";
|
||||
const char* s2 = "Installa la versione dimostrativa";
|
||||
const char* s1 = "Installazione / Aggiornamento della versione normale";
|
||||
const char* s2 = "Installazione della versione dimostrativa";
|
||||
const char* s4 = "Termina installazione";
|
||||
const char* s5 = "Scelta installazione";
|
||||
|
||||
|
105
ba/ba0100.cpp
105
ba/ba0100.cpp
@ -7,6 +7,7 @@
|
||||
#include <config.h>
|
||||
#include <controls.h>
|
||||
#include <dongle.h>
|
||||
#include <modaut.h>
|
||||
#include <execp.h>
|
||||
#include <lffiles.h>
|
||||
#include <recarray.h>
|
||||
@ -91,7 +92,6 @@ protected:
|
||||
void manage_preferred();
|
||||
|
||||
bool test_programs();
|
||||
bool test_network();
|
||||
|
||||
public:
|
||||
void select_tree_current();
|
||||
@ -227,8 +227,8 @@ bool TPicture_mask::on_key(KEY k)
|
||||
{
|
||||
case K_F3:
|
||||
case K_F8:
|
||||
set(DLG_USER, app().main_menu().last_search_string(), TRUE);
|
||||
return TRUE;
|
||||
set(DLG_USER, app().main_menu().last_search_string(), true);
|
||||
return true;
|
||||
case K_ENTER:
|
||||
case K_UP:
|
||||
case K_DOWN:
|
||||
@ -376,7 +376,9 @@ bool TExplorer_mask::stop_run(KEY k)
|
||||
xvt_image_destroy(image[i]);
|
||||
|
||||
if (sys_dll_changed()) //se e' stato installato SY..
|
||||
xvt_sys_sleep(1000); //..aspetta un secondo poi forza l'uscita
|
||||
{
|
||||
xvt_sys_sleep(1); //..aspetta un attimo poi forza l'uscita
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!yesno_box(TR("Si desidera uscire?"))) //..altrimenti chiede educatamente se si desidera uscire
|
||||
@ -488,8 +490,8 @@ bool TExplorer_mask::on_key(KEY k)
|
||||
{
|
||||
if (k == K_F3 || k == K_F8)
|
||||
{
|
||||
set(DLG_USER, app().main_menu().last_search_string(), TRUE);
|
||||
return TRUE;
|
||||
set(DLG_USER, app().main_menu().last_search_string(), true);
|
||||
return true;
|
||||
}
|
||||
return TMask::on_key(k);
|
||||
}
|
||||
@ -508,7 +510,7 @@ bool TExplorer_mask::explore_handler(TMask_field& f, KEY k)
|
||||
mf.set_menu(mt);
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
TExplorer_mask::TExplorer_mask(TMenu& menu)
|
||||
@ -578,7 +580,7 @@ public:
|
||||
bool TColor_mask::on_field_event(TOperable_field& f, TField_event e, long jolly)
|
||||
{
|
||||
const short id = f.dlg();
|
||||
bool ok = TRUE;
|
||||
bool ok = true;
|
||||
|
||||
switch (id)
|
||||
{
|
||||
@ -789,13 +791,10 @@ COLOR TColor_mask::cid2color(short cid) const
|
||||
// Menu application
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
//int TMenu_application::_last_button = 0;
|
||||
//bool TMenu_application::_find_button = false;
|
||||
|
||||
|
||||
bool TMenu_application::test_assistance_year() const
|
||||
{
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TMenu_application::menu_item_handler(TMask_field&f, KEY k)
|
||||
@ -806,7 +805,7 @@ bool TMenu_application::menu_item_handler(TMask_field&f, KEY k)
|
||||
f.set_focusdirty(false);
|
||||
return f.mask().stop_run(K_AUTO_ENTER);
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TMenu_application::menu_find_handler(TMask_field&f, KEY k)
|
||||
@ -829,7 +828,7 @@ bool TMenu_application::menu_find_handler(TMask_field&f, KEY k)
|
||||
}
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
int TMenu_application::do_level()
|
||||
@ -915,7 +914,7 @@ void TMenu_application::test_temp()
|
||||
|
||||
if (count > 0 && yesno_box(TR("Cancellare tutti i file temporanei in %s?"), dir.path()))
|
||||
{
|
||||
TProgind bar(count, TR("Cancellazione file temporanei"), TRUE, TRUE);
|
||||
TProgind bar(count, TR("Cancellazione file temporanei"), true, true);
|
||||
for (int i = count-1; i >= 0; i--)
|
||||
{
|
||||
bar.addstatus(1);
|
||||
@ -942,7 +941,7 @@ HIDDEN bool pwd_handler(TMask_field& fld, KEY key)
|
||||
m.set(F_PASSWORD, pwd);
|
||||
m.stop_run(K_ENTER);
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
void TMenu_application::reload_images()
|
||||
@ -964,7 +963,6 @@ const TString& TMenu_application::ask_user_password()
|
||||
TMask m("ba0100a");
|
||||
|
||||
if (is_power_station())
|
||||
|
||||
{
|
||||
m.set_handler(F_USER, pwd_handler);
|
||||
m.set_handler(F_PASSWORD, pwd_handler);
|
||||
@ -1104,7 +1102,7 @@ bool TMenu_application::check_user()
|
||||
if (autstr == "CONVERTING")
|
||||
{
|
||||
TString msg; msg << TR("E' in corso una conversione archivi") << ":\n";
|
||||
if (user() == dongle().administrator())
|
||||
if (utente == dongle().administrator())
|
||||
{
|
||||
msg << TR("Si desidera continuare ugualmente?");
|
||||
ok = yesno_box(msg);
|
||||
@ -1165,7 +1163,7 @@ HIDDEN int compare_version(const char* v1, int p1, const char* v2, int p2)
|
||||
if (ver2.len() == 4)
|
||||
ver2.insert((v2[0] == '9') ? "19" : "20", 0);
|
||||
|
||||
int res = ver1.compare(ver2, -1, TRUE);
|
||||
int res = ver1.compare(ver2, -1, true);
|
||||
if (res == 0)
|
||||
res = p1 - p2;
|
||||
|
||||
@ -1186,14 +1184,6 @@ static int get_module_version(TConfig& cfg, void* jolly)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool TMenu_application::test_network()
|
||||
{
|
||||
if (!xvt_sys_test_network_version())
|
||||
return error_box(TR("Il driver di rete VREDIR.VXD contiene un bug riconosciuto da Microsoft.\n"
|
||||
"Consultare la documentazione sul sito AGA per eliminare questo inconveniente."));
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TMenu_application::test_programs()
|
||||
{
|
||||
TToken_string dangerous;
|
||||
@ -1214,6 +1204,7 @@ bool TMenu_application::test_programs()
|
||||
if (remote_name.exist())
|
||||
{
|
||||
TProgind pi(3, TR("Controllo aggiornamento programmi"), false, TRUE);
|
||||
|
||||
TConfig remote_install(remote_name, "Main");
|
||||
remote_install.write_protect();
|
||||
|
||||
@ -1223,16 +1214,15 @@ bool TMenu_application::test_programs()
|
||||
pi.addstatus(1);
|
||||
remote_install.for_each_paragraph(get_module_version, &his_modules);
|
||||
pi.addstatus(1);
|
||||
TScanner scan(AUT_FILE);
|
||||
|
||||
TString msg = TR("I seguenti moduli devono essere aggiornati prima dell'utilizzo:");
|
||||
int update_needed = 0;
|
||||
|
||||
for (int module = 0; scan.line().full(); module++)
|
||||
for (word module = 0; module < ENDAUT; module++)
|
||||
{
|
||||
if (dongle().active(module))
|
||||
if (dongle().active(module) && dongle().shown(module))
|
||||
{
|
||||
const TString4 code = scan.token().left(2);
|
||||
const TString4 code = dongle().module_code2name(module);
|
||||
TToken_string* mytok = (TToken_string*)my_modules.objptr(code);
|
||||
TToken_string* histok = (TToken_string*)his_modules.objptr(code);
|
||||
|
||||
@ -1242,12 +1232,13 @@ bool TMenu_application::test_programs()
|
||||
const int p2 = histok ? histok->get_int() : 0;
|
||||
if (!v1.blank() && compare_version(v1, p1, v2, p2) < 0)
|
||||
{
|
||||
dangerous.add(code);
|
||||
if (module > 0) // Non disabilitare mai il modulo base!
|
||||
dangerous.add(code);
|
||||
if (!more)
|
||||
{
|
||||
const TString& name = scan.token().mid(3);
|
||||
if (msg.len() < 200)
|
||||
{
|
||||
const TString& name = dongle().module_code2desc(module);
|
||||
if (update_needed > 0)
|
||||
msg << ',';
|
||||
msg << name;
|
||||
@ -1276,11 +1267,11 @@ bool TMenu_application::test_programs()
|
||||
const TString old_user = user();
|
||||
user() = dongle().administrator(); // Divento temporaneamente amministratore
|
||||
TExternal_app app("ba1 -6");
|
||||
app.run();
|
||||
app.run(true); //lancia ba1 senza ba0
|
||||
user() = old_user; // Ripristino utente normale
|
||||
more = true; // ricontrolla
|
||||
|
||||
if (sys_dll_changed()) //costringe ad uscire dal programma se si e' installato il modulo SY
|
||||
//if (sys_dll_changed()) //costringe ad uscire dal programma se si e' installato il modulo SY
|
||||
return false;
|
||||
}
|
||||
_menu.set_dangerous_modules(dangerous);
|
||||
@ -1289,9 +1280,6 @@ bool TMenu_application::test_programs()
|
||||
|
||||
bool TMenu_application::user_create()
|
||||
{
|
||||
if (!test_network())
|
||||
return false;
|
||||
|
||||
disable_menu_item(M_FILE_PRINT); // Questa voce di menu non serve per ora
|
||||
|
||||
#ifdef _DEMO_
|
||||
@ -1331,7 +1319,7 @@ bool TMenu_application::user_create()
|
||||
update_preferred_tree();
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
void TMenu_application::deconnect_user()
|
||||
@ -1356,14 +1344,15 @@ bool TMenu_application::destroy()
|
||||
if (sys_dll_changed())
|
||||
{
|
||||
TExternal_app ba0close("ba0close.exe");
|
||||
ba0close.run(TRUE,TRUE,TRUE); // run asynchronous...
|
||||
ba0close.run(true, true, false); // run asynchronous...
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
void TMenu_application::main_loop()
|
||||
{
|
||||
bool run = user_create();
|
||||
|
||||
while (run)
|
||||
{
|
||||
int m = 0;
|
||||
@ -1401,12 +1390,12 @@ bool TMenu_application::choose_colors()
|
||||
}
|
||||
enable_menu_item(OPTIONS_MENU);
|
||||
delete cm;
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
HIDDEN bool browse_file_handler(TMask_field& f, KEY k)
|
||||
{
|
||||
bool ok = TRUE;
|
||||
bool ok = true;
|
||||
|
||||
if (k == K_F9)
|
||||
{
|
||||
@ -1452,7 +1441,7 @@ HIDDEN bool browse_file_handler(TMask_field& f, KEY k)
|
||||
|
||||
HIDDEN bool link_notify(TSheet_field& s, int r, KEY k)
|
||||
{
|
||||
bool ok = TRUE;
|
||||
bool ok = true;
|
||||
if (k == K_INS)
|
||||
{
|
||||
ok = s.items() < 29; // Accetta 29 righe al massimo
|
||||
@ -1505,7 +1494,7 @@ bool TMenu_application::choose_editors()
|
||||
|
||||
enable_menu_item(OPTIONS_MENU);
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
HIDDEN int dir_sort(const TObject** d1, const TObject** d2)
|
||||
@ -1517,7 +1506,7 @@ HIDDEN int dir_sort(const TObject** d1, const TObject** d2)
|
||||
|
||||
HIDDEN bool study_handler(TMask_field& f, KEY k)
|
||||
{
|
||||
bool ok = TRUE;
|
||||
bool ok = true;
|
||||
if (f.to_check(k))
|
||||
{
|
||||
TFilename path(f.get());
|
||||
@ -1538,10 +1527,10 @@ HIDDEN bool study_handler(TMask_field& f, KEY k)
|
||||
}
|
||||
}
|
||||
str.add("*");
|
||||
SLIST dirs = xvt_fsys_list_files(DIR_TYPE, str.get_buffer(), TRUE);
|
||||
SLIST dirs = xvt_fsys_list_files(DIR_TYPE, str.get_buffer(), true);
|
||||
|
||||
TFilename dirgen;
|
||||
TArray_sheet sht(-1, -1, 78, 16, TR("Scelta studio"), "Studio@76");
|
||||
TArray_sheet sht(-1, -1, 78, 16, TR("Scelta studio"), HR("Studio@76"));
|
||||
for (SLIST_ELT e = xvt_slist_get_first(dirs); e; e = xvt_slist_get_next(dirs, e))
|
||||
{
|
||||
const char* f = xvt_slist_get(dirs, e, NULL);
|
||||
@ -1627,7 +1616,7 @@ bool TMenu_application::tree_handler(TMask_field& f, KEY k)
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
void TMenu_application::select_tree_current()
|
||||
@ -1664,7 +1653,7 @@ bool TMenu_application::tree_find_handler(TMask_field&f, KEY k)
|
||||
else
|
||||
beep();
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TMenu_application::tree_shrink_handler(TMask_field&f, KEY k)
|
||||
@ -1677,7 +1666,7 @@ bool TMenu_application::tree_shrink_handler(TMask_field&f, KEY k)
|
||||
mt.goto_root();
|
||||
app().select_tree_current();
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
void TMenu_application::update_preferred()
|
||||
@ -1708,14 +1697,14 @@ void TMenu_application::update_preferred()
|
||||
if (i >= 0)
|
||||
{
|
||||
m.tag = MENU_ITEM(50+i);
|
||||
m.enabled = TRUE;
|
||||
m.enabled = true;
|
||||
const char* src = _preferred.row(i).get(0);
|
||||
m.text = xvt_str_duplicate(src);
|
||||
}
|
||||
else
|
||||
{
|
||||
m.tag = -1;
|
||||
m.separator = TRUE;
|
||||
m.separator = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1781,8 +1770,8 @@ void TMenu_application::save_preferences()
|
||||
TConfig cfg(CONFIG_GUI, "ba0");
|
||||
int i;
|
||||
for (i = 0; i < _preferred.items(); i++)
|
||||
cfg.set("Preferred", _preferred.row(i), NULL, TRUE, i);
|
||||
cfg.set("Preferred", "", NULL, TRUE, i);
|
||||
cfg.set("Preferred", _preferred.row(i), NULL, true, i);
|
||||
cfg.set("Preferred", "", NULL, true, i);
|
||||
cfg.set("TreeView", _tree_view);
|
||||
}
|
||||
|
||||
@ -1905,7 +1894,7 @@ bool TPreferred_mask::on_field_event(TOperable_field& o, TField_event e, long jo
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
void TMenu_application::manage_preferred()
|
||||
@ -1998,7 +1987,7 @@ void TMenu_application::on_firm_change()
|
||||
|
||||
bool TMenu_application::menu(MENU_TAG mt)
|
||||
{
|
||||
bool ok = TRUE;
|
||||
bool ok = true;
|
||||
switch (mt)
|
||||
{
|
||||
case BAR_ITEM(1): main_loop(); ok = false; break;
|
||||
@ -2031,7 +2020,7 @@ bool TMenu_application::menu(MENU_TAG mt)
|
||||
TSubmenu* sm = _menu.find(sub);
|
||||
if (sm && _menu.jumpto(sm))
|
||||
{
|
||||
ok = TRUE;
|
||||
ok = true;
|
||||
_menu.select(mi.get_int());
|
||||
_mask->stop_run(K_CTRL + 'R');
|
||||
}
|
||||
|
158
ba/ba0101.cpp
158
ba/ba0101.cpp
@ -1,12 +1,14 @@
|
||||
#include <applicat.h>
|
||||
#include <currency.h>
|
||||
#include <dongle.h>
|
||||
#include <execp.h>
|
||||
#include <mask.h>
|
||||
#include <modaut.h>
|
||||
#include <printer.h>
|
||||
#include <relation.h>
|
||||
#include <utility.h>
|
||||
|
||||
#include <nditte.h>
|
||||
|
||||
#include "ba0100a.h"
|
||||
#include "ba0101.h"
|
||||
#include "ba0100.h"
|
||||
@ -24,6 +26,21 @@ bool sys_dll_changed()
|
||||
return k > 0;
|
||||
}
|
||||
|
||||
|
||||
static bool is_visible(const int cod)
|
||||
{
|
||||
static TString_array shown;
|
||||
TToken_string* str = (TToken_string*)shown.objptr(cod);
|
||||
|
||||
if (str == NULL)
|
||||
{
|
||||
str = new TToken_string(dongle().shown(cod) ? "X" : "");
|
||||
shown.add(str, cod);
|
||||
}
|
||||
|
||||
return *str == "X";
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Menu management
|
||||
///////////////////////////////////////////////////////////
|
||||
@ -140,8 +157,10 @@ TMenuitem::TMenuitem(const TMenuitem& mi)
|
||||
TMenu& TMenuitem::menu() const
|
||||
{ return _submenu->menu(); }
|
||||
|
||||
void TMenuitem::create(const char* t)
|
||||
bool TMenuitem::create(const char* t)
|
||||
{
|
||||
bool visible = true;
|
||||
|
||||
TString16 flags;
|
||||
char brace;
|
||||
int start = 0;
|
||||
@ -160,31 +179,39 @@ void TMenuitem::create(const char* t)
|
||||
case 'F': _firm = TRUE; break;
|
||||
case 'P': _password = TRUE; break;
|
||||
case 'R': _reloadmenu = TRUE; break;
|
||||
case 'E': visible = dongle().active(EEAUT); // Nascondi i moduli dipendenti da EE
|
||||
default : break;
|
||||
}
|
||||
}
|
||||
|
||||
if (_type == '<')
|
||||
{
|
||||
if (_action.find('.') < 0)
|
||||
_action << ".men";
|
||||
TFilename n = _action;
|
||||
if (n.custom_path())
|
||||
menu().read(_action, _action);
|
||||
else
|
||||
_action.cut(0);
|
||||
_type = '[';
|
||||
if (visible)
|
||||
{
|
||||
if (_type == '<')
|
||||
{
|
||||
if (_action.find('.') < 0)
|
||||
_action << ".men";
|
||||
TFilename n = _action;
|
||||
if (n.custom_path())
|
||||
visible = menu().read(n, _action);
|
||||
else
|
||||
_action.cut(0);
|
||||
_type = '[';
|
||||
}
|
||||
|
||||
if (_action.blank())
|
||||
_exist = _enabled = false;
|
||||
|
||||
// Controlla lo stato di aggiornamento
|
||||
if (_enabled && is_program())
|
||||
_enabled = !menu().is_dangerous(_action);
|
||||
}
|
||||
else
|
||||
{
|
||||
_action.cut(0);
|
||||
_exist = _enabled = false;
|
||||
}
|
||||
|
||||
if (_action.empty())
|
||||
{
|
||||
_exist = FALSE;
|
||||
_enabled = FALSE;
|
||||
}
|
||||
|
||||
// Controlla lo stato di aggiornamento
|
||||
if (_enabled && is_program())
|
||||
_enabled = !menu().is_dangerous(_action);
|
||||
return visible;
|
||||
}
|
||||
|
||||
int TMenuitem::icon() const
|
||||
@ -239,7 +266,7 @@ bool TMenuitem::enabled() const
|
||||
yes = app.can_run();
|
||||
}
|
||||
if (!yes)
|
||||
((TMenuitem*)this)->_enabled = FALSE;
|
||||
((TMenuitem*)this)->_enabled = false;
|
||||
}
|
||||
}
|
||||
return yes;
|
||||
@ -282,12 +309,15 @@ bool TMenuitem::perform_program() const
|
||||
|
||||
if (ok)
|
||||
{
|
||||
TCurrency::force_cache_update(); // Chiude cache valute
|
||||
prefix().set(NULL); // Chiude prefix
|
||||
TExternal_app a(_action);
|
||||
a.run(FALSE,3);
|
||||
// const bool maintenance_app = _action.starts_with("ba1 -0", true);
|
||||
const bool install_app = _action.starts_with("ba1 -6", true);
|
||||
|
||||
const bool maintenance_app = _action.starts_with("ba1 -0", TRUE);
|
||||
TCurrency::force_cache_update(); // Chiude cache valute
|
||||
prefix().set(NULL); // Chiude prefix
|
||||
TExternal_app a(_action);
|
||||
const bool async = install_app; // Lancio l'installazione moduli sempre asincrona
|
||||
a.run(async, 3);
|
||||
/*
|
||||
if (maintenance_app)
|
||||
{
|
||||
char line1[16],line2[16];
|
||||
@ -315,15 +345,14 @@ bool TMenuitem::perform_program() const
|
||||
break;
|
||||
}
|
||||
}
|
||||
*/
|
||||
prefix().set("DEF"); // Aggiorna prefix
|
||||
|
||||
const bool install_app = _action.starts_with("ba1 -6", TRUE);
|
||||
if (install_app && sys_dll_changed())
|
||||
if (install_app)
|
||||
{
|
||||
WINDOW w = cur_win();
|
||||
if (w != NULL_WIN)
|
||||
dispatch_e_char(w, K_QUIT);
|
||||
|
||||
}
|
||||
|
||||
printer_destroy(); // Forza rilettura parametri della stampante
|
||||
@ -350,7 +379,8 @@ bool TMenuitem::perform() const
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
TSubmenu::TSubmenu(TMenu* menu, const char* name)
|
||||
: _menu(menu), _name(name), _items(12), _enabled(TRUE), _firm(FALSE)
|
||||
: _menu(menu), _name(name), _items(12),
|
||||
_enabled(TRUE), _firm(FALSE)
|
||||
{
|
||||
}
|
||||
|
||||
@ -368,64 +398,66 @@ void TSubmenu::read(TScanner& scanner)
|
||||
}
|
||||
|
||||
char brace;
|
||||
if (line.compare("Caption", 7, TRUE) == 0)
|
||||
if (line.starts_with("Caption", true))
|
||||
{
|
||||
get_next_string(line, 8, _caption, brace);
|
||||
_caption = dictionary_translate(_caption);
|
||||
} else
|
||||
if (line.compare("Module", 6, TRUE) == 0)
|
||||
if (line.starts_with("Module", true))
|
||||
{
|
||||
const int equal = line.find('=');
|
||||
if (equal > 0)
|
||||
{
|
||||
bool disable = TRUE;
|
||||
bool disable = true;
|
||||
TToken_string mod(line.mid(equal+1, -1), ',');
|
||||
FOR_EACH_TOKEN(mod, cod)
|
||||
{
|
||||
const int code = atoi(cod);
|
||||
if (code == 0 || main_app().has_module(code))
|
||||
const int code = dongle().module_name2code(cod);
|
||||
if (code == 0 || is_visible(code))
|
||||
{
|
||||
disable = FALSE;
|
||||
disable = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (disable)
|
||||
_enabled = FALSE;
|
||||
_enabled = false;
|
||||
}
|
||||
} else
|
||||
if (line.compare("Picture", 7, TRUE) == 0)
|
||||
if (line.starts_with("Picture", true))
|
||||
{
|
||||
// Estrae solamente il nome del file immagine, elimina path ed estensione
|
||||
TFilename name;
|
||||
get_next_string(line, 8, name, brace);
|
||||
xvt_fsys_parse_pathname(name, NULL, NULL, _picture.get_buffer(), NULL, NULL);
|
||||
} else
|
||||
if (line.compare("Flags", 5, TRUE) == 0)
|
||||
if (line.starts_with("Flags", true))
|
||||
{
|
||||
TString16 flags;
|
||||
get_next_string(line, 6, flags, brace);
|
||||
if (flags.find('D') >= 0)
|
||||
_enabled = FALSE;
|
||||
if (flags.find('F') >= 0)
|
||||
_firm = TRUE;
|
||||
_firm = true;
|
||||
} else
|
||||
if (line.compare("Item", 4, TRUE) == 0)
|
||||
if (line.starts_with("Item", true))
|
||||
{
|
||||
TMenuitem* item = new TMenuitem(this);
|
||||
add(item);
|
||||
item->create(line);
|
||||
if (item->create(line))
|
||||
add(item);
|
||||
else
|
||||
delete item;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int TSubmenu::find_string(const TString& str) const
|
||||
{
|
||||
bool found = FALSE;
|
||||
bool found = false;
|
||||
|
||||
TString caption;
|
||||
caption = _caption; caption.upper();
|
||||
if (caption.find(str) >= 0 || caption.match(str))
|
||||
found = TRUE;
|
||||
found = true;
|
||||
|
||||
for (int i = 0; i < items(); i++)
|
||||
{
|
||||
@ -469,24 +501,24 @@ bool TSubmenu::perform(int i)
|
||||
bool TMenu::read(const char* name, TString& root)
|
||||
{
|
||||
TString str(255);
|
||||
bool first = TRUE;
|
||||
bool found = false;
|
||||
|
||||
TFilename menuname = name;
|
||||
menuname.custom_path();
|
||||
TScanner scanner(menuname);
|
||||
while (scanner.ok())
|
||||
{
|
||||
const TString& line = first ? scanner.line() : scanner.pop();
|
||||
const TString& line = found ? scanner.pop() : scanner.line();
|
||||
if (line.empty())
|
||||
break;
|
||||
|
||||
char brace = '[';
|
||||
get_next_string(line, 0, str, brace);
|
||||
|
||||
if (first)
|
||||
if (!found)
|
||||
{
|
||||
root = str;
|
||||
first = FALSE;
|
||||
found = true;
|
||||
}
|
||||
|
||||
if (objptr(str) == NULL)
|
||||
@ -499,7 +531,7 @@ bool TMenu::read(const char* name, TString& root)
|
||||
break; // Menu gia' caricato!
|
||||
}
|
||||
|
||||
return first == FALSE;
|
||||
return found;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
@ -529,7 +561,7 @@ bool TMenu::set_firm(long firm) const
|
||||
if (cur.items() == 1)
|
||||
{
|
||||
cur = 0L;
|
||||
firm = rel.curr().get_long("CODDITTA");
|
||||
firm = rel.curr().get_long(NDT_CODDITTA);
|
||||
if (!prefix().exist(firm))
|
||||
firm = 0;
|
||||
}
|
||||
@ -728,27 +760,7 @@ void TMenu::reload_images()
|
||||
|
||||
bool TMenu::has_module(const char* mod)
|
||||
{
|
||||
TString16 key;
|
||||
|
||||
if (_modules.items() == 0)
|
||||
{
|
||||
TScanner scanner(AUT_FILE);
|
||||
TString16 val;
|
||||
for (int aut = 0; scanner.line() != ""; aut++)
|
||||
{
|
||||
key.strncpy(scanner.token(), 2);
|
||||
key.lower();
|
||||
val.format("%d", aut);
|
||||
_modules.add(key, val);
|
||||
}
|
||||
}
|
||||
|
||||
key.strncpy(mod, 2);
|
||||
key.lower();
|
||||
|
||||
int module = 0;
|
||||
TString* cod = (TString*)_modules.objptr(key);
|
||||
if (cod) module = atoi(*cod);
|
||||
const word module = dongle().module_name2code(mod);
|
||||
return main_app().has_module(module);
|
||||
}
|
||||
|
||||
|
@ -61,7 +61,7 @@ public:
|
||||
TSubmenu& submenu() const { return *_submenu; }
|
||||
TMenu& menu() const;
|
||||
|
||||
void create(const char* t);
|
||||
bool create(const char* t);
|
||||
|
||||
TMenuitem(TSubmenu* sm);
|
||||
TMenuitem(const TMenuitem& mi);
|
||||
@ -119,7 +119,6 @@ class TMenu : public TAssoc_array
|
||||
TString _default_menu;
|
||||
|
||||
TAssoc_array _images;
|
||||
TAssoc_array _modules;
|
||||
|
||||
TToken_string _dangerous;
|
||||
|
||||
|
@ -4,17 +4,18 @@
|
||||
|
||||
void Renamer(const char* mask)
|
||||
{
|
||||
char drive[_MAX_DRIVE], path[_MAX_PATH], fname[_MAX_FNAME], ext[_MAX_EXT];
|
||||
_splitpath(mask, drive, path, NULL, NULL);
|
||||
|
||||
|
||||
WIN32_FIND_DATA data;
|
||||
HANDLE hHandle = ::FindFirstFile(mask, &data);
|
||||
BOOL bRunning = hHandle != INVALID_HANDLE_VALUE;
|
||||
while (bRunning)
|
||||
{
|
||||
_splitpath(data.cFileName, NULL, NULL, fname, ext);
|
||||
|
||||
const char* newext = NULL;
|
||||
const char* oldpath = data.cFileName;
|
||||
|
||||
char drive[_MAX_DRIVE], path[_MAX_PATH], fname[_MAX_FNAME], ext[_MAX_EXT];
|
||||
_splitpath(oldpath, drive, path, fname, ext);
|
||||
|
||||
if (stricmp(ext, ".ex_") == 0)
|
||||
newext = ".exe"; else
|
||||
if (stricmp(ext, ".dl_") == 0)
|
||||
@ -22,7 +23,8 @@ void Renamer(const char* mask)
|
||||
|
||||
if (newext != NULL)
|
||||
{
|
||||
char newpath[_MAX_PATH];
|
||||
char oldpath[_MAX_PATH], newpath[_MAX_PATH];
|
||||
_makepath(oldpath, drive, path, fname, ext);
|
||||
_makepath(newpath, drive, path, fname, newext);
|
||||
if (::CopyFile(oldpath, newpath, FALSE))
|
||||
{
|
||||
@ -47,16 +49,31 @@ void Renamer(const char* mask)
|
||||
}
|
||||
}
|
||||
|
||||
int PASCAL WinMain(HINSTANCE, HINSTANCE , LPSTR, int)
|
||||
int PASCAL WinMain(HINSTANCE, HINSTANCE , LPSTR cmd_line, int)
|
||||
{
|
||||
::MessageBox(NULL, "Premere OK prima di riavviare il programma",
|
||||
::MessageBox(NULL, "Premere OK ed attendere il riavvio del programma",
|
||||
"Aggiornamento sistema", MB_ICONWARNING | MB_OK);
|
||||
// ::Sleep(5000); // Apetta qualche secondo che termini ba0.exe
|
||||
::Sleep(3000); // Apetta qualche secondo che termini ba0.exe
|
||||
|
||||
Renamer("*.??_");
|
||||
Renamer("Servers\\*.??_");
|
||||
|
||||
int modules_pending = ::GetPrivateProfileInt("ba0close", "ModulesPending", 0, "./campo.ini");
|
||||
|
||||
WinExec("ba0.exe", SW_SHOWNORMAL);
|
||||
if (modules_pending != 0)
|
||||
{
|
||||
char cmd[256];
|
||||
strcpy(cmd, "ba1.exe -6 /u");
|
||||
const char* u = strstr(cmd_line, "/u");
|
||||
if (u != NULL)
|
||||
strcat(cmd, u+2);
|
||||
else
|
||||
strcat(cmd, "ADMIN");
|
||||
|
||||
WinExec(cmd, SW_SHOWNORMAL);
|
||||
}
|
||||
else
|
||||
WinExec("ba0.exe", SW_SHOWNORMAL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
125
ba/ba1100.cpp
125
ba/ba1100.cpp
@ -1,4 +1,17 @@
|
||||
#include "ba1.h"
|
||||
#include "ba1100.h"
|
||||
|
||||
#include <applicat.h>
|
||||
#include <dongle.h>
|
||||
#include <printer.h>
|
||||
#include <progind.h>
|
||||
#include <utility.h>
|
||||
|
||||
#include <user.h>
|
||||
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#ifdef WIN32
|
||||
#include <io.h>
|
||||
#include <share.h>
|
||||
@ -7,25 +20,7 @@
|
||||
#include <unistd.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#endif
|
||||
#include <errno.h>
|
||||
|
||||
#include <applicat.h>
|
||||
#include <extcdecl.h>
|
||||
#include <dongle.h>
|
||||
#include <execp.h>
|
||||
#include <isam.h>
|
||||
#include <mask.h>
|
||||
#include <prefix.h>
|
||||
#include <printer.h>
|
||||
#include <progind.h>
|
||||
#include <urldefid.h>
|
||||
#include <utility.h>
|
||||
#include <validate.h>
|
||||
|
||||
#include "ba1.h"
|
||||
#include "ba1100.h"
|
||||
|
||||
#define History_file "conv.his"
|
||||
#define Dir_file "dir.gen"
|
||||
@ -163,7 +158,7 @@ void TManutenzione_app::do_print(TPrinter & p, TRec_sheet & r)
|
||||
TTrec & rec = *r.rec();
|
||||
TDir & dir = *r.dir();
|
||||
const char * descfname = r.descfname();
|
||||
TString16 tab(r.tab());
|
||||
TString4 tab(r.tab());
|
||||
const bool istab = tab.not_empty();
|
||||
|
||||
tab.upper();
|
||||
@ -180,12 +175,12 @@ void TManutenzione_app::do_print(TPrinter & p, TRec_sheet & r)
|
||||
row.put(TR("Pag. @#"), 69);
|
||||
p.setheaderline(2, row);
|
||||
row.reset();
|
||||
row.put(TR("Nome"), 7);
|
||||
row.put(TR("Tipo"), 18);
|
||||
row.put(TR("Lun."), 38);
|
||||
row.put(TR("Dec."), 44);
|
||||
row.put(TR("Pos."), 48);
|
||||
row.put(TR("Descrizione"), 53);
|
||||
row.put(HR("Nome"), 7);
|
||||
row.put(HR("Tipo"), 18);
|
||||
row.put(HR("Lun."), 38);
|
||||
row.put(HR("Dec."), 44);
|
||||
row.put(HR("Pos."), 48);
|
||||
row.put(HR("Descrizione"), 53);
|
||||
p.setheaderline(4, row);
|
||||
|
||||
TString riga(78); riga.fill('-');
|
||||
@ -233,8 +228,8 @@ void TManutenzione_app::do_print(TPrinter & p, TRec_sheet & r)
|
||||
row.reset();
|
||||
p.print(row);
|
||||
|
||||
row.put(TR("Espressione chiave"), 7);
|
||||
row.put(TR("Duplicabile"), 68);
|
||||
row.put(HR("Espressione chiave"), 7);
|
||||
row.put(HR("Duplicabile"), 68);
|
||||
p.setheaderline(4, row);
|
||||
|
||||
if (p.rows_left() < 5)
|
||||
@ -373,9 +368,10 @@ bool TManutenzione_app::create() // initvar e arrmask
|
||||
_browse = new TDir_sheet (TR("Manutenzione file di sistema"), _superprassi ? 0xC : 0x8);
|
||||
if (_superprassi)
|
||||
{
|
||||
_browse->add_button(DLG_INSFILE, BR("~Inserisci", 9), K_F6);
|
||||
_browse->add_button(DLG_CONVERT, BR("~Converti", 9), K_F7);
|
||||
_browse->add_button(DLG_ADDFILE, BR("~Aggiungi", 9), K_F8);
|
||||
// _browse->add_button(DLG_INSFILE, BR("~Inserisci", 9), K_F6);
|
||||
if (is_power_station())
|
||||
_browse->add_button(DLG_ADDFILE, BR("~Aggiungi", 9), K_F8);
|
||||
TButton_field& butt = ((TMask*)_browse)->add_button(DLG_OTHERFILE, 0, BR("A~ltri", 9), 0, -1, 9, 2, "", 0, 0);
|
||||
butt.set_exit_key(K_F5);
|
||||
_mask->enable(-1); // Abilita campi privilegiati
|
||||
@ -540,8 +536,7 @@ void TManutenzione_app::dump_trc(const char * dir, const bool des_too, const lon
|
||||
descfname.format("%s/d%d.des", DESCDIR, i);
|
||||
if (!fexist(descfname)) // crea la descrizione se non esiste
|
||||
{
|
||||
FILE * fd = fopen(descfname, "w");
|
||||
|
||||
FILE * fd = fopen(descfname, "w");
|
||||
if (fd != NULL)
|
||||
fclose(fd);
|
||||
}
|
||||
@ -729,7 +724,7 @@ void TManutenzione_app::edit_riga (long riga_sel, TToken_string& riga)
|
||||
const char rs = *esc(m.get(FLD_RS));
|
||||
const bool withdel = m.get_bool(FLD_WITHDEL);
|
||||
const int keyno = m.get_int(FLD_KEYNO);
|
||||
const TString16 tabella(_mask->get(F_TAB));
|
||||
const TString4 tabella(_mask->get(F_TAB));
|
||||
if (tabella.not_empty())
|
||||
{
|
||||
TToken_string filter;
|
||||
@ -749,11 +744,12 @@ void TManutenzione_app::edit_riga (long riga_sel, TToken_string& riga)
|
||||
m.set(FLD_INFILE, ninp);
|
||||
if (m.run() == K_ENTER)
|
||||
{
|
||||
char fs = *esc(m.get(FLD_FS));
|
||||
char fd = *esc(m.get(FLD_FD));
|
||||
char rs = *esc(m.get(FLD_RS));
|
||||
const char fs = *esc(m.get(FLD_FS));
|
||||
const char fd = *esc(m.get(FLD_FD));
|
||||
const char rs = *esc(m.get(FLD_RS));
|
||||
const bool indexed = !m.get_bool(FLD_WITHKEY);
|
||||
ninp = m.get(FLD_INFILE);
|
||||
f.load(ninp, fs, fd, rs);
|
||||
f.load(ninp, fs, fd, rs, true, false, indexed);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -904,7 +900,6 @@ void TManutenzione_app::update_dir()
|
||||
d.put(i, _nordir, _sysdirop);
|
||||
}
|
||||
|
||||
|
||||
if (!fs.exist())
|
||||
{
|
||||
if (d.eox() > 0L)
|
||||
@ -994,7 +989,7 @@ void TManutenzione_app::update_dir()
|
||||
bool cmn_file = false;
|
||||
bool valid_file = moveable_file(i);
|
||||
if (!is_com && valid_file && d.is_com())
|
||||
cmn_file = true; // Salta in questo caso:
|
||||
cmn_file = true; // Salta in questo caso:
|
||||
// sto aggiornando le ditte,
|
||||
// il file in questione e' uno di quelli che possono essere comuni
|
||||
// il file e' in comune
|
||||
@ -1089,10 +1084,12 @@ void TManutenzione_app::update_dir()
|
||||
{
|
||||
towrite = (TString(ds.des()) != d.des());
|
||||
if (towrite)
|
||||
{
|
||||
if (!valid_file)
|
||||
d.set(ds.name(), d.eox(), d.eod(), ds.des(), d.expr());
|
||||
else
|
||||
strcpy((char *) d.des(), ds.des());
|
||||
}
|
||||
}
|
||||
if (is_com && valid_file && d.name()[0] == '$')
|
||||
{
|
||||
@ -1397,39 +1394,30 @@ void TManutenzione_app::update()
|
||||
TIsamfile utenti(LF_USER);
|
||||
utenti.open(_excllock);
|
||||
|
||||
#ifndef DBG
|
||||
for (int err = utenti.first(); err == NOERR; err = utenti.next())
|
||||
{
|
||||
const TString16 u = utenti.get("USERNAME");
|
||||
if (u == ::dongle().administrator())
|
||||
const TString& u = utenti.get(USR_USERNAME);
|
||||
if (u != ::dongle().administrator() && utenti.get_bool(USR_CONNECTED))
|
||||
{
|
||||
if (utenti.get("AUTSTR") == "CONVERTING")
|
||||
{
|
||||
#ifdef DBG
|
||||
ok = yesno_box(TR("Conversione in corso:\nProseguire ugualmente?"));
|
||||
if (!ok)
|
||||
break;
|
||||
#else
|
||||
ok = error_box(TR("Conversione in corso:\nImpossibile proseguire"));
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
utenti.put("AUTSTR", "CONVERTING");
|
||||
utenti.rewrite();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (utenti.get_bool("CONNECTED"))
|
||||
{
|
||||
#ifndef DBG
|
||||
ok = error_box(FR("La conversione non puo' essere effettuata\nmentre l'utente %s e' collegato"), (const char*)u);
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
ok = error_box(FR("La conversione non puo' essere effettuata\nmentre l'utente %s e' collegato"), (const char*)u);
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
// Scrive CONVERTING solo dopo aver testato che non ci sia nessuno connesso
|
||||
if (ok)
|
||||
{
|
||||
utenti.zero();
|
||||
utenti.put(USR_USERNAME, dongle().administrator());
|
||||
ok = utenti.read() == NOERR;
|
||||
if (ok)
|
||||
{
|
||||
utenti.put(USR_AUTSTR, "CONVERTING");
|
||||
ok = utenti.rewrite() == NOERR;
|
||||
}
|
||||
}
|
||||
|
||||
utenti.close();
|
||||
if (!ok)
|
||||
return;
|
||||
@ -1510,10 +1498,11 @@ void TManutenzione_app::update()
|
||||
do_events();
|
||||
}
|
||||
|
||||
utenti.put("USERNAME", ::dongle().administrator());
|
||||
// Azzera la scritta converting
|
||||
utenti.put(USR_USERNAME, ::dongle().administrator());
|
||||
if (utenti.read() == NOERR)
|
||||
{
|
||||
utenti.zero("AUTSTR");
|
||||
utenti.zero(USR_AUTSTR);
|
||||
utenti.rewrite();
|
||||
}
|
||||
utenti.close();
|
||||
|
20
ba/ba1100.h
20
ba/ba1100.h
@ -1,12 +1,16 @@
|
||||
#ifndef __BA1100_H
|
||||
#define __BA1100_H
|
||||
|
||||
#ifndef __SHEET_H
|
||||
#include <sheet.h>
|
||||
#ifndef __CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#ifndef __CONFIG_H
|
||||
#include <config.h>
|
||||
#ifndef __SHEET_H
|
||||
#include <isam.h>
|
||||
#endif
|
||||
|
||||
#ifndef __SHEET_H
|
||||
#include <sheet.h>
|
||||
#endif
|
||||
|
||||
#ifndef __MASKFLD_H
|
||||
@ -21,7 +25,7 @@ class TMask_field;
|
||||
|
||||
class TDir_sheet : public TSheet
|
||||
{
|
||||
TTrec *_rec;
|
||||
TTrec *_rec;
|
||||
TDir *_dir;
|
||||
FileDes _s_dir;
|
||||
long _items;
|
||||
@ -65,11 +69,11 @@ protected:
|
||||
public:
|
||||
TDir* dir() const { return _dir; }
|
||||
TTrec* rec() const { return _rec; }
|
||||
const char * descfname() const { return _descfname;}
|
||||
const char * tab() const { return _tab; }
|
||||
const char* descfname() const { return _descfname;}
|
||||
const char* tab() const { return _tab; }
|
||||
void edit();
|
||||
|
||||
TRec_sheet(int logicnum, const char * tab);
|
||||
TRec_sheet(int logicnum, const char* tab);
|
||||
TRec_sheet(TExternisamfile* file);
|
||||
virtual ~TRec_sheet();
|
||||
};
|
||||
|
@ -17,6 +17,11 @@ BEGIN
|
||||
MESSAGE TRUE DISABLE,FLD_FS|DISABLE,FLD_FD|DISABLE,FLD_RS|"\0",FLD_FS|"\0",FLD_FD|"\n",FLD_RS
|
||||
END
|
||||
|
||||
BOOLEAN FLD_WITHKEY
|
||||
BEGIN
|
||||
PROMPT 24 3 "Indicizza solo alla fine del processo (Usare SOLO su file vuoti)"
|
||||
END
|
||||
|
||||
STRING FLD_FS 5
|
||||
BEGIN
|
||||
PROMPT 2 5 "Separatore di campi "
|
||||
@ -38,12 +43,13 @@ BEGIN
|
||||
FLAGS "P"
|
||||
END
|
||||
|
||||
BUTTON DLG_OK 9 2
|
||||
|
||||
BUTTON DLG_OK 10 2
|
||||
BEGIN
|
||||
PROMPT -12 -1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_CANCEL 9 2
|
||||
BUTTON DLG_CANCEL 10 2
|
||||
BEGIN
|
||||
PROMPT -22 -1 ""
|
||||
END
|
||||
|
@ -11,6 +11,9 @@
|
||||
#include "ba1500.h"
|
||||
#include "ba0100a.h"
|
||||
|
||||
#include <user.h>
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Menu item
|
||||
///////////////////////////////////////////////////////////
|
||||
@ -21,8 +24,8 @@ class TMenu_item : public TString
|
||||
|
||||
public:
|
||||
virtual TObject* dup() const { return new TMenu_item(*this); }
|
||||
const TString& cmd() const { return _cmd; }
|
||||
TString& cmd() { return _cmd; }
|
||||
const TString& cmd() const { return _cmd; }
|
||||
TString& cmd() { return _cmd; }
|
||||
|
||||
TMenu_item(const TMenu_item& mi);
|
||||
TMenu_item(const char* line);
|
||||
@ -52,7 +55,7 @@ TMenu_item::TMenu_item(const char* line)
|
||||
class TSubmenu : public TString
|
||||
{
|
||||
TArray _child;
|
||||
int _module;
|
||||
word _module;
|
||||
|
||||
public:
|
||||
TMenu_item& operator[](int c) { return (TMenu_item&)*_child.objptr(c); }
|
||||
@ -60,7 +63,7 @@ public:
|
||||
|
||||
int items() const { return _child.items(); }
|
||||
int module() const { return _module; }
|
||||
void set_module(int m) { _module = m; }
|
||||
void set_module(word m) { _module = m; }
|
||||
|
||||
TSubmenu& operator=(const char* str) { set(str); return *this; }
|
||||
TSubmenu& operator=(const TSubmenu& str) { set(str); _module = str._module; return *this; }
|
||||
@ -94,13 +97,13 @@ public:
|
||||
};
|
||||
|
||||
const TString& TMenu_node::command() const
|
||||
{
|
||||
{
|
||||
if (_item)
|
||||
return _item->cmd();
|
||||
return EMPTY_STRING;
|
||||
return EMPTY_STRING;
|
||||
}
|
||||
|
||||
TMenu_node::TMenu_node(TMenu_item* i, int module)
|
||||
TMenu_node::TMenu_node(TMenu_item* i, int module)
|
||||
: _item(i), _module(module)
|
||||
{
|
||||
set(*i);
|
||||
@ -108,8 +111,8 @@ TMenu_node::TMenu_node(TMenu_item* i, int module)
|
||||
|
||||
TMenu_node::TMenu_node(const char* str)
|
||||
: _item(NULL), _module(0)
|
||||
{
|
||||
set(str);
|
||||
{
|
||||
set(str);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
@ -312,7 +315,7 @@ void TMenu::import(const char* filename, TString& first)
|
||||
first = line;
|
||||
sub = &get_submenu(line);
|
||||
} else
|
||||
if (line.compare("Caption", 7, true) == 0)
|
||||
if (line.starts_with("Caption", true))
|
||||
{
|
||||
CHECK(sub, "Invalid menu file");
|
||||
const int equal = line.find('=');
|
||||
@ -321,14 +324,15 @@ void TMenu::import(const char* filename, TString& first)
|
||||
line.strip("\"");
|
||||
*sub = line;
|
||||
} else
|
||||
if (line.compare("Module", 6, true) == 0)
|
||||
if (line.starts_with("Module", true))
|
||||
{
|
||||
CHECK(sub, "Invalid menu file");
|
||||
const int equal = line.find('=');
|
||||
CHECK(equal > 0, "Invalid menu Module");
|
||||
sub->set_module(atoi(line.mid(equal+1)));
|
||||
const word mod = atoi(line.mid(equal+1));
|
||||
sub->set_module(mod);
|
||||
} else
|
||||
if (line.compare("Item", 4, true) == 0)
|
||||
if (line.starts_with("Item", true))
|
||||
{
|
||||
CHECK(sub, "Invalid menu file");
|
||||
const int equal = line.find('=');
|
||||
@ -342,9 +346,15 @@ void TMenu::import(const char* filename, TString& first)
|
||||
TFilename name = line.sub(bracket+1, endbracket);
|
||||
if (name.custom_path())
|
||||
{
|
||||
import(name, name);
|
||||
TMenu_item& child = sub->add_child(line);
|
||||
child.cmd() = name;
|
||||
bool proceed = true;
|
||||
if (line.find('E', endbracket+1) > 0)
|
||||
proceed = dongle().active(EEAUT);
|
||||
if (proceed)
|
||||
{
|
||||
import(name, name);
|
||||
TMenu_item& child = sub->add_child(line);
|
||||
child.cmd() = name;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -402,9 +412,9 @@ bool TSet_users::group_handler(TMask_field& f, KEY key)
|
||||
const TString& gruppo = m.get(F_GROUPNAME);
|
||||
TEdit_field& ef = (TEdit_field&)f;
|
||||
TRectype& rec = ef.browse()->cursor()->curr();
|
||||
if (rec.get("USERNAME") != gruppo)
|
||||
if (rec.get(USR_USERNAME) != gruppo)
|
||||
{
|
||||
rec.put("USERNAME", gruppo);
|
||||
rec.put(USR_USERNAME, gruppo);
|
||||
ef.browse()->cursor()->read();
|
||||
}
|
||||
app().build_sheet(&rec);
|
||||
@ -425,7 +435,7 @@ bool TSet_user_passwd::password_handler(TMask_field& f, KEY key)
|
||||
{
|
||||
if (pwd[i] >= 0 && pwd[i] <= ' ')
|
||||
{
|
||||
ok = error_box("La password contiene un carattere non valido.");
|
||||
ok = error_box(FR("La password contiene un carattere non valido alla posizione %d"), i+1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -533,7 +543,7 @@ void TSet_user_passwd::build_sheet(const TRectype* r)
|
||||
{
|
||||
TString autstr, d;
|
||||
if (r != NULL)
|
||||
autstr = r->get("AUTSTR");
|
||||
autstr = r->get(USR_AUTSTR);
|
||||
const int l = autstr.len();
|
||||
|
||||
TSheet_field& sf = sheet_field();
|
||||
@ -563,7 +573,7 @@ void TSet_users::build_tree(const TRectype* r)
|
||||
|
||||
if (r)
|
||||
{
|
||||
TToken_string prop_field(r->get("PERMISSION"), '\n');
|
||||
TToken_string prop_field(r->get(USR_PERMISSION), '\n');
|
||||
TToken_string pro("",SAFE_PIPE_CHR),row("",SAFE_PIPE_CHR);
|
||||
TString app;
|
||||
FOR_EACH_TOKEN(prop_field, tok)
|
||||
@ -666,8 +676,6 @@ bool TSet_users::user_create()
|
||||
sf.set_notify(k_notify);
|
||||
|
||||
const char* menuname = "bamenu.men";
|
||||
if (argc() > 2)
|
||||
menuname = argv(2);
|
||||
|
||||
_tree = new TMenu(menuname);
|
||||
_msk->set_handler(F_PERMESSI, tree_handler);
|
||||
@ -683,7 +691,7 @@ int TSet_users::read(TMask& m)
|
||||
const TRectype& r = get_relation()->curr();
|
||||
build_sheet(&r);
|
||||
|
||||
const char* pwd = decode(r.get("PASSWORD"));
|
||||
const char* pwd = decode(r.get(USR_PASSWORD));
|
||||
m.set(F_PASSWORD, pwd);
|
||||
m.set(F_PROVA, pwd);
|
||||
|
||||
@ -696,11 +704,11 @@ void TSet_user_passwd::put_in_record(const TMask& m)
|
||||
{
|
||||
TRectype& r = get_relation()->curr();
|
||||
const char* s = encode(m.get(F_PASSWORD));
|
||||
if (r.get("PASSWORD") != s)
|
||||
if (r.get(USR_PASSWORD) != s)
|
||||
{
|
||||
r.put("PASSWORD", s);
|
||||
if (r.exist("DATAPWD"))
|
||||
r.put("DATAPWD", TDate(TODAY));
|
||||
r.put(USR_PASSWORD, s);
|
||||
if (r.exist(USR_DATAPWD))
|
||||
r.put(USR_DATAPWD, TDate(TODAY));
|
||||
}
|
||||
}
|
||||
|
||||
@ -712,14 +720,16 @@ void TSet_users::put_in_record(const TMask& m)
|
||||
TSheet_field& sf = sheet_field();
|
||||
FOR_EACH_SHEET_ROW(sf, i, riga)
|
||||
{
|
||||
const char c = riga->get(1)[0];
|
||||
const int module = riga->get_int();
|
||||
const char c = riga->get_char(1);
|
||||
if (c == 'X')
|
||||
{
|
||||
const int module = riga->get_int();
|
||||
autstr[module] = c;
|
||||
}
|
||||
}
|
||||
|
||||
TRectype& r = get_relation()->curr();
|
||||
r.put("AUTSTR", autstr);
|
||||
r.put(USR_AUTSTR, autstr);
|
||||
|
||||
TToken_string prop_field(256, '\n');
|
||||
TAssoc_array& prop = _tree->properties();
|
||||
@ -735,7 +745,7 @@ void TSet_users::put_in_record(const TMask& m)
|
||||
prop_field.add(*row);
|
||||
}
|
||||
}
|
||||
r.put("PERMISSION", prop_field);
|
||||
r.put(USR_PERMISSION, prop_field);
|
||||
}
|
||||
|
||||
int TSet_user_passwd::write(const TMask& m)
|
||||
@ -757,7 +767,7 @@ bool TSet_users::remove()
|
||||
{
|
||||
TFilename file = firm2dir(-1); // Directory dati
|
||||
file.add("config"); // Directory configurazioni
|
||||
file.add(get_relation()->curr().get("USERNAME")); // Nome utente
|
||||
file.add(get_relation()->curr().get(USR_USERNAME)); // Nome utente
|
||||
file.ext("ini"); // Estensione
|
||||
::remove(file);
|
||||
}
|
||||
@ -787,7 +797,7 @@ int TSet_user_passwd::read(TMask& m)
|
||||
const TRectype& r = get_relation()->curr();
|
||||
build_sheet(&r);
|
||||
|
||||
const char* pwd = decode(r.get("PASSWORD"));
|
||||
const char* pwd = decode(r.get(USR_PASSWORD));
|
||||
m.set(F_PASSWORD, pwd);
|
||||
m.set(F_PROVA, pwd);
|
||||
|
||||
|
458
ba/ba1500.cpp
458
ba/ba1500.cpp
@ -1,72 +1,44 @@
|
||||
#include <applicat.h>
|
||||
#include <date.h>
|
||||
#include <form.h>
|
||||
#include <modaut.h>
|
||||
#include <msksheet.h>
|
||||
#include <prefix.h>
|
||||
#include <printer.h>
|
||||
#include <utility.h>
|
||||
#include <urldefid.h>
|
||||
#include <dongle.h>
|
||||
|
||||
#define BITTEST(w,p) (((w) & (0x0001 << (p))) != 0)
|
||||
#define BITSET(w,p,v) ((v) ? ((w) |= (0x0001 << (p))) : ((w) &= (~(0x0001 << (p)))))
|
||||
|
||||
#include "ba1.h"
|
||||
#include "ba1500.h"
|
||||
#include "ba1500a.h"
|
||||
#include "ba1500b.h"
|
||||
#include "ba1600.h"
|
||||
|
||||
#define K1 0x4500
|
||||
#define LBYTEMASK 0x00FF
|
||||
#define UBYTEMASK 0xFF00
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
TInformazione_moduli::TInformazione_moduli()
|
||||
: _unassigned_modules(0)
|
||||
{
|
||||
int mod = 0;
|
||||
TString s(256);
|
||||
TToken_string t;
|
||||
TString_array descs;
|
||||
|
||||
ifstream in(AUT_FILE);
|
||||
while (!in.eof() && in.good())
|
||||
const TDongle& d = dongle();
|
||||
for (word mod = M77AUT; mod < ENDAUT; mod++)
|
||||
{
|
||||
in.getline(s.get_buffer(), s.size());
|
||||
s.trim();
|
||||
if (s.empty())
|
||||
break;
|
||||
const int l = s.len();
|
||||
if (l >= 3 && s[3] > ' ')
|
||||
TToken_string t = d.module_code2desc(mod);
|
||||
if (t.len() > 2 && !t.starts_with("Modulo vario", true)) // Scarta moduli ignoti
|
||||
{
|
||||
t = s.mid(3);
|
||||
t.add(s.left(2));
|
||||
} else {
|
||||
t = "{Modulo Sconosciuto}";
|
||||
t.add(s.left(2));
|
||||
if (d.shown(mod)) //controlla che sia veramente un modulo da mostrare!
|
||||
{
|
||||
t.add(d.module_code2name(mod));
|
||||
t.add(mod);
|
||||
_infos.add(t);
|
||||
}
|
||||
}
|
||||
t.add(mod++);
|
||||
s = t.get(0);
|
||||
descs.add(s);
|
||||
s.upper();
|
||||
t.add(s, 0);
|
||||
_infos.add(t);
|
||||
}
|
||||
|
||||
if (in.bad() && !in.eof())
|
||||
error_box(TR("Si e' verificato un errore leggendo il file di descrizione moduli."));
|
||||
|
||||
_infos.sort();
|
||||
for (int i=0;i<mod;i++)
|
||||
for (int i = 0; i < _infos.items(); i++)
|
||||
{
|
||||
TToken_string& riga = _infos.row(i);
|
||||
const int mod = riga.get_int(2);
|
||||
_index[mod] = i;
|
||||
s = descs.row(mod).get(0);
|
||||
riga.add(s, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@ -104,27 +76,6 @@ int TInformazione_moduli::get_module_by_order(int index)
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Calcola il produttore ufficiale di module
|
||||
TDongleType TInformazione_moduli::get_owner(int module) const
|
||||
{
|
||||
// const int aut[] = { CMAUT, ATAUT, POAUT, AFAUT, TCAUT, TMAUT,
|
||||
// VEAUT, MGAUT, ORAUT, EFAUT, DBAUT, PRAUT, SVAUT, -1 };
|
||||
// for (int a = 0; aut[a] >= 0; a++)
|
||||
// if (module == aut[a])
|
||||
return _aga_dongle;
|
||||
|
||||
// return _prassi_dongle;
|
||||
}
|
||||
|
||||
// Testa se module appartiene al produttore owner
|
||||
// N.B. L'AGA possiede anche tutti i moduli PRASSI
|
||||
bool TInformazione_moduli::test_owner(int module, TDongleType owner) const
|
||||
{
|
||||
TDongleType ow = get_owner(module);
|
||||
bool yes = owner == ow || (owner == _aga_dongle && ow == _prassi_dongle);
|
||||
return yes;
|
||||
}
|
||||
|
||||
const char* TInformazione_moduli::get_description(int module)
|
||||
{ return get_description_by_order(_index[module]); }
|
||||
|
||||
@ -144,8 +95,6 @@ int TInformazione_moduli::get_index_by_name(const char* code) const
|
||||
return i >= 0 ? get_index(i) : i;
|
||||
}
|
||||
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TForm richiesta attivazione
|
||||
///////////////////////////////////////////////////////////
|
||||
@ -154,7 +103,7 @@ class TRequest_form : public TForm
|
||||
{
|
||||
public:
|
||||
void update_serno(const TString& serno);
|
||||
void update_dongle(const TDongle& dongle);
|
||||
void update_dongle();
|
||||
void update_os();
|
||||
void print_footer();
|
||||
|
||||
@ -193,30 +142,31 @@ void TRequest_form::update_serno(const TString& num)
|
||||
data.set(today.string());
|
||||
switch (::dongle().hardware() )
|
||||
{
|
||||
case _dongle_eutron:
|
||||
find_field('H',odd_page,FF_DONGLE_HW).set("EUTRON"); break;
|
||||
default:
|
||||
find_field('H',odd_page,FF_DONGLE_HW).set("HARDLOCK"); break;
|
||||
case _dongle_hardlock:
|
||||
find_field('H',odd_page,FF_DONGLE_HW).set("HARDLOCK"); break;
|
||||
default:
|
||||
find_field('H',odd_page,FF_DONGLE_HW).set("EUTRON"); break;
|
||||
}
|
||||
TForm_item& serno = find_field('H', odd_page, FF_DONGLE_SN);
|
||||
serno.set(num);
|
||||
}
|
||||
|
||||
void TRequest_form::update_dongle(const TDongle& dongle)
|
||||
void TRequest_form::update_dongle()
|
||||
{
|
||||
const TDongle& d = dongle();
|
||||
|
||||
TForm_item& year = find_field('H', odd_page, FF_YEAR);
|
||||
TString str;
|
||||
str << "31-12-" << (int)dongle.year_assist();
|
||||
TString16 str;
|
||||
str << "31-12-" << (int)d.year_assist();
|
||||
year.set(str);
|
||||
|
||||
TForm_item& user = find_field('H', odd_page, FF_NUTENTI);
|
||||
str.format("%d", dongle.max_users());
|
||||
str.format("%d", d.max_users());
|
||||
user.set(str);
|
||||
}
|
||||
|
||||
void TRequest_form::update_os()
|
||||
{
|
||||
TForm_item& os = find_field('H', odd_page, FF_OS);
|
||||
const char* stros = NULL;
|
||||
switch (xvt_sys_get_os_version())
|
||||
{
|
||||
@ -225,12 +175,14 @@ void TRequest_form::update_os()
|
||||
case XVT_WS_WIN_98: stros = "Windows 98"; break;
|
||||
default : stros = "Windows NT/XP"; break;
|
||||
}
|
||||
|
||||
TForm_item& os = find_field('H', odd_page, FF_OS);
|
||||
os.set(stros);
|
||||
}
|
||||
|
||||
void TRequest_form::print_footer()
|
||||
{
|
||||
set_footer(odd_page, TRUE);
|
||||
set_footer(odd_page, true);
|
||||
printer().formfeed();
|
||||
}
|
||||
|
||||
@ -250,7 +202,7 @@ protected:
|
||||
virtual bool create() ;
|
||||
virtual bool destroy() ;
|
||||
virtual void main_loop();
|
||||
virtual bool use_files() const { return FALSE; }
|
||||
virtual bool use_files() const { return false; }
|
||||
virtual bool test_assistance_year() const;
|
||||
|
||||
void garble(word k[4]) const;
|
||||
@ -264,7 +216,7 @@ protected:
|
||||
void update_listino();
|
||||
void load_masklistino(TMask & m);
|
||||
void save_masklistino(TMask & m);
|
||||
int build_sheet(bool on = TRUE);
|
||||
int build_sheet(bool on = true);
|
||||
void build_key_column();
|
||||
|
||||
bool burn_dongle();
|
||||
@ -272,11 +224,11 @@ protected:
|
||||
static void keyext(const TString & s, word * v);
|
||||
static void encode_second_key();
|
||||
|
||||
static bool user_hnd(TMask_field& f, KEY k);
|
||||
// static bool user_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 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);
|
||||
@ -298,7 +250,7 @@ protected:
|
||||
void print_request();
|
||||
void print_answer();
|
||||
void print_status();
|
||||
void print_listino();
|
||||
//void print_listino();
|
||||
|
||||
public:
|
||||
virtual void print();
|
||||
@ -326,7 +278,7 @@ bool TAttivazione_moduli::sh_nposti_handler(TMask_field& fld, KEY key)
|
||||
// default
|
||||
int posti = atoi(fld.get());
|
||||
if (posti<=1)
|
||||
return TRUE;
|
||||
return true;
|
||||
int val = fld.mask().get_int(F_ACQ1);
|
||||
switch (posti)
|
||||
{
|
||||
@ -351,12 +303,12 @@ bool TAttivazione_moduli::sh_nposti_handler(TMask_field& fld, KEY key)
|
||||
val = round_price(val);
|
||||
fld.mask().field(fld.dlg()+2).set(val) ; // costo di aggiornamento
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TAttivazione_moduli::sh_acquisto_handler(TMask_field& fld, KEY key)
|
||||
{
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
bool TAttivazione_moduli::sh_aggiornamento_handler(TMask_field& fld, KEY key)
|
||||
{
|
||||
@ -364,7 +316,7 @@ bool TAttivazione_moduli::sh_aggiornamento_handler(TMask_field& fld, KEY key)
|
||||
{
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@ -385,8 +337,6 @@ void TAttivazione_moduli::update_listino()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void TAttivazione_moduli::load_masklistino(TMask &msklistino)
|
||||
{
|
||||
TWait_cursor hourglass;
|
||||
@ -396,7 +346,7 @@ void TAttivazione_moduli::load_masklistino(TMask &msklistino)
|
||||
msklistino.set(F_DATALIST,dt);
|
||||
|
||||
TSheet_field& sf = msklistino.sfield(F_MODULILIST);
|
||||
for (int i = 0; i < MAX_AUT; i++)
|
||||
for (int i = 0; i < sf.items(); i++)
|
||||
{
|
||||
const TString16 modname(_im->get_name_by_order(i));
|
||||
if (modname.empty())
|
||||
@ -412,11 +362,11 @@ void TAttivazione_moduli::load_masklistino(TMask &msklistino)
|
||||
|
||||
TString_array prices;
|
||||
ini.set_paragraph(modname);
|
||||
ini.list_variables(prices, TRUE,modname,TRUE); // get array sorted by var name
|
||||
ini.list_variables(prices, true,modname,true); // get array sorted by var name
|
||||
FOR_EACH_ARRAY_ROW(prices, v, key)
|
||||
{
|
||||
const TFixed_string price(key->get(0));
|
||||
if (price.compare("Prezzo", 6, TRUE) == 0)
|
||||
if (price.compare("Prezzo", 6, true) == 0)
|
||||
{
|
||||
TString16 colonna(price.sub(7,price.len()-1));
|
||||
if (atoi(colonna) != 1)
|
||||
@ -466,15 +416,11 @@ void TAttivazione_moduli::save_masklistino(TMask &msklistino)
|
||||
int TAttivazione_moduli::build_sheet(bool on)
|
||||
{
|
||||
int nmod = 0;
|
||||
TSheet_field& sf = (TSheet_field&)_msk->field(F_MODULI);
|
||||
for (int i = 0; i < MAX_AUT; i++)
|
||||
TSheet_field& sf = _msk->sfield(F_MODULI);
|
||||
for (int i = 0; i < _im->items(); i++)
|
||||
{
|
||||
if (*_im->get_name_by_order(i)=='\0')
|
||||
break;
|
||||
|
||||
const TFixed_string d(_im->get_description_by_order(i));
|
||||
TToken_string& riga = sf.row(i);
|
||||
riga = d;
|
||||
riga = _im->get_description_by_order(i);
|
||||
riga.trim();
|
||||
const int module = _im->get_module_by_order(i);
|
||||
|
||||
@ -544,7 +490,7 @@ void TAttivazione_moduli::garble_year(word y, TString& str) const
|
||||
void TAttivazione_moduli::build_key_column()
|
||||
{
|
||||
TSheet_field& sf = _msk->sfield(F_MODULI);
|
||||
sf.enable_column(F_KEY, FALSE);
|
||||
sf.enable_column(F_KEY, false);
|
||||
|
||||
TString16 tmp;
|
||||
FOR_EACH_SHEET_ROW_BACK(sf, i, riga)
|
||||
@ -609,7 +555,7 @@ bool TAttivazione_moduli::burn_dongle()
|
||||
|
||||
bool TAttivazione_moduli::maxuser_handler(TMask_field& fld, KEY key)
|
||||
{
|
||||
bool ok = TRUE;
|
||||
bool ok = true;
|
||||
if (key == K_TAB && fld.focusdirty())
|
||||
{
|
||||
const int utenti = atoi(fld.get());
|
||||
@ -678,12 +624,12 @@ bool TAttivazione_moduli::change_users_handler(TMask_field& fld, KEY key)
|
||||
app()._wanted_users = utenti;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TAttivazione_moduli::assist_handler(TMask_field& fld, KEY key)
|
||||
{
|
||||
bool ok = TRUE;
|
||||
bool ok = true;
|
||||
if (key == K_TAB && fld.focusdirty())
|
||||
{
|
||||
const int year = atoi(fld.get());
|
||||
@ -754,23 +700,24 @@ bool TAttivazione_moduli::change_assist_handler(TMask_field& fld, KEY key)
|
||||
app()._wanted_assist = year;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TAttivazione_moduli::print_handler(TMask_field& fld, KEY key)
|
||||
{
|
||||
if (key == K_SPACE)
|
||||
app().print();
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
bool TAttivazione_moduli::printlist_handler(TMask_field& fld, KEY key)
|
||||
{
|
||||
if (key == K_SPACE)
|
||||
app().print_listino();
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
bool TAttivazione_moduli::aga_handler(TMask_field& fld, KEY key)
|
||||
{
|
||||
@ -778,8 +725,8 @@ bool TAttivazione_moduli::aga_handler(TMask_field& fld, KEY key)
|
||||
{
|
||||
TMask mask(TR("Produttore"), 1, 50, 6);
|
||||
mask.add_string(101, 0, PR("Ditta "), 1, 1, 40);
|
||||
mask.add_string(102, 0, PR("Amministratore di sistema "), 1, 2, 8, "U");
|
||||
mask.add_string(103, 0, PR("Password di amministratore "), 1, 3, 8, "*");
|
||||
mask.add_string(102, 0, PR("Amministratore di sistema "), 1, 2, 16, "U");
|
||||
mask.add_string(103, 0, PR("Password di amministratore "), 1, 3, 16, "*");
|
||||
|
||||
mask.add_button(DLG_OK, 0, "", -12, -1, 10, 2);
|
||||
mask.add_button(DLG_CANCEL, 0, "", -22, -1, 10, 2);
|
||||
@ -795,48 +742,58 @@ bool TAttivazione_moduli::aga_handler(TMask_field& fld, KEY key)
|
||||
ini.set("Password", ::encode(mask.get(103)));
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
void TAttivazione_moduli::init_mask()
|
||||
{
|
||||
const TDate oggi(TODAY);
|
||||
const int nmod = build_sheet();
|
||||
|
||||
if (::dongle().hardware() == _dongle_hardlock)
|
||||
const TDongle& d = ::dongle();
|
||||
if (d.hardware() == _dongle_hardlock)
|
||||
{
|
||||
/*
|
||||
word ud[4];
|
||||
::dongle().read_words(48, 4, ud);
|
||||
d.read_words(48, 4, ud);
|
||||
_msk->set(F_K2, format("%04X%04X%04X%04X", ud[0], ud[1], ud[2], ud[3]));
|
||||
|
||||
ud[0] = ::dongle().number();
|
||||
ud[0] = d.number();
|
||||
ud[1] = K1 | (nmod & LBYTEMASK);
|
||||
long& l = (long&)ud[2];
|
||||
l = oggi.year()*10000L + oggi.month()*100L + oggi.day();
|
||||
|
||||
garble(ud);
|
||||
_msk->set(F_K1, format("%04X%04X%04X%04X", ud[0], ud[1], ud[2], ud[3]));
|
||||
*/
|
||||
_msk->set_caption(TR("Attivazione HARDLOCK"));
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
_msk->hide(F_K1);
|
||||
_msk->hide(F_K2);
|
||||
_msk->hide(F_K3);
|
||||
_msk->hide(F_K4);
|
||||
*/
|
||||
_msk->set_caption(TR("Attivazione EUTRON"));
|
||||
}
|
||||
|
||||
_msk->set(F_SN, ::dongle().number());
|
||||
_msk->set(F_SN, d.number());
|
||||
_msk->set(F_DT, oggi);
|
||||
_msk->set(F_USERS, ::dongle().max_users());
|
||||
_msk->set(F_ASSIST, ::dongle().year_assist());
|
||||
_msk->set(F_USERS, d.max_users());
|
||||
_msk->set(F_ASSIST, d.year_assist());
|
||||
}
|
||||
|
||||
int hexdigit(char c)
|
||||
{
|
||||
return c >= 'A' ? (c - 'A' + 10) : (c - '0');
|
||||
}
|
||||
/*
|
||||
|
||||
#define BITTEST(w,p) (((w) & (0x0001 << (p))) != 0)
|
||||
#define BITSET(w,p,v) ((v) ? ((w) |= (0x0001 << (p))) : ((w) &= (~(0x0001 << (p)))))
|
||||
#define K1 0x4500
|
||||
#define LBYTEMASK 0x00FF
|
||||
#define UBYTEMASK 0xFF00
|
||||
|
||||
inline int hexdigit(char c)
|
||||
{ return c >= 'A' ? (c - 'A' + 10) : (c - '0'); }
|
||||
|
||||
void TAttivazione_moduli::keyext(const TString& s, word * val)
|
||||
{
|
||||
@ -855,7 +812,7 @@ bool TAttivazione_moduli::user_hnd(TMask_field & f, KEY k)
|
||||
{
|
||||
const TString16 k4(f.get());
|
||||
if (!f.to_check(k) || k4.empty())
|
||||
return TRUE;
|
||||
return true;
|
||||
|
||||
TMask & m = f.mask();
|
||||
word ud1[4], ud2[4];
|
||||
@ -904,8 +861,9 @@ bool TAttivazione_moduli::user_hnd(TMask_field & f, KEY k)
|
||||
}
|
||||
else
|
||||
sf.force_update();
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
*/
|
||||
|
||||
bool TAttivazione_moduli::serno_hnd(TMask_field& f, KEY k)
|
||||
{
|
||||
@ -913,7 +871,7 @@ bool TAttivazione_moduli::serno_hnd(TMask_field& f, KEY k)
|
||||
{
|
||||
app().build_key_column();
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TAttivazione_moduli::date_hnd(TMask_field& f, KEY k)
|
||||
@ -933,9 +891,10 @@ bool TAttivazione_moduli::date_hnd(TMask_field& f, KEY k)
|
||||
if (data.year() > year_assist)
|
||||
return f.error_box(FR("La data deve essere antecedente al 31-12-%d"), year_assist);
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
void TAttivazione_moduli::encode_second_key()
|
||||
{
|
||||
TMask * m = app()._msk;
|
||||
@ -952,7 +911,7 @@ void TAttivazione_moduli::encode_second_key()
|
||||
TToken_string& tt = sf.row(i-un);
|
||||
if (tt.get(1)[0] == 'X')
|
||||
{
|
||||
BITSET(ud2[af / 16], af % 16, TRUE);
|
||||
BITSET(ud2[af / 16], af % 16, true);
|
||||
nmod++;
|
||||
}
|
||||
}
|
||||
@ -976,7 +935,7 @@ bool TAttivazione_moduli::decode_hnd(TMask_field & f, KEY k)
|
||||
{
|
||||
const TString16 k2(f.get());
|
||||
if (!f.to_check(k) || k2.empty())
|
||||
return TRUE;
|
||||
return true;
|
||||
|
||||
TMask& m = f.mask();
|
||||
word ud1[4], ud2[4];
|
||||
@ -1011,35 +970,33 @@ bool TAttivazione_moduli::decode_hnd(TMask_field & f, KEY k)
|
||||
}
|
||||
encode_second_key();
|
||||
sf.force_update();
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TAttivazione_moduli::activate_hnd(TMask_field & f, KEY k)
|
||||
{
|
||||
encode_second_key();
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
*/
|
||||
|
||||
bool TAttivazione_moduli::k_notify(TSheet_field& f, int r, KEY k)
|
||||
{
|
||||
if (k == K_INS || k == K_DEL)
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool TAttivazione_moduli::modifica_listino_handler(TMask_field& fld, KEY key)
|
||||
{
|
||||
bool ok = TRUE;
|
||||
if (key == K_SPACE)
|
||||
{
|
||||
app().update_listino();
|
||||
}
|
||||
return ok;
|
||||
return true;
|
||||
}
|
||||
bool TAttivazione_moduli::aggiorna_listino_handler(TMask_field& fld, KEY key)
|
||||
{
|
||||
bool ok = TRUE;
|
||||
bool ok = true;
|
||||
if (key == K_SPACE)
|
||||
{
|
||||
TInstall_ini ini;
|
||||
@ -1056,7 +1013,7 @@ bool TAttivazione_moduli::aggiorna_listino_handler(TMask_field& fld, KEY key)
|
||||
name = msk.get(DLG_USER);
|
||||
else
|
||||
{
|
||||
ok = FALSE;
|
||||
ok = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -1088,101 +1045,87 @@ void TAttivazione_moduli::print_request()
|
||||
|
||||
TWait_cursor hourglass;
|
||||
TSheet_field& sheet = _msk->sfield(F_MODULI);
|
||||
for (TDongleType owner = _aga_dongle;
|
||||
owner <= _prassi_dongle;
|
||||
owner = TDongleType(owner+1))
|
||||
{
|
||||
int found = 0;
|
||||
TString str;
|
||||
|
||||
FOR_EACH_SHEET_ROW(sheet, r, row)
|
||||
{
|
||||
//const int module = _im->get_module_by_order(r);
|
||||
const int module = row->get_int(2) ;
|
||||
const bool active = ::dongle().active(module);
|
||||
const bool wanted = *row->get(1) > ' ';
|
||||
int found = 0;
|
||||
TString str;
|
||||
|
||||
FOR_EACH_SHEET_ROW(sheet, r, row)
|
||||
{
|
||||
const int module = row->get_int(2) ;
|
||||
const bool active = ::dongle().active(module);
|
||||
const bool wanted = *row->get(1) > ' ';
|
||||
|
||||
if (!special && active)
|
||||
continue;
|
||||
if (!wanted && !active)
|
||||
continue;
|
||||
if (_im->get_owner(module) != owner)
|
||||
continue;
|
||||
if (!special && active)
|
||||
continue;
|
||||
if (!wanted && !active)
|
||||
continue;
|
||||
|
||||
if (found == 0)
|
||||
{
|
||||
printer().open();
|
||||
form.find_field('H',odd_page,1).set(dongle().reseller());
|
||||
form.update_serno(_msk->get(F_SN));
|
||||
form.update_dongle();
|
||||
form.update_os();
|
||||
}
|
||||
|
||||
if (found == 0)
|
||||
{
|
||||
printer().open();
|
||||
switch (owner)
|
||||
{
|
||||
case _prassi_dongle:
|
||||
form.find_field('H',odd_page,1).set("Partners"); break;
|
||||
default: //case _aga_dongle:
|
||||
form.find_field('H',odd_page,1).set("A.G.A."); break;
|
||||
}
|
||||
form.update_serno(_msk->get(F_SN));
|
||||
form.update_dongle(::dongle());
|
||||
form.update_os();
|
||||
}
|
||||
|
||||
str.format("%3d", ++found);
|
||||
num.set(str);
|
||||
|
||||
str = row->get(0);
|
||||
descr.set(str);
|
||||
|
||||
str = active ? TR("*ATTIVO*") : "";
|
||||
codice.set(str);
|
||||
|
||||
str = _im->get_name(module);
|
||||
real full, assist;
|
||||
ini.prices(str, users, full, assist);
|
||||
if (active)
|
||||
{
|
||||
real old_full, old_assist;
|
||||
ini.prices(str, ::dongle().max_users(), old_full, old_assist);
|
||||
full -= old_full;
|
||||
assist -= old_assist;
|
||||
}
|
||||
else
|
||||
assist = 0.0;
|
||||
|
||||
price.set(full.string());
|
||||
manut.set(assist.string());
|
||||
|
||||
form.print(-1);
|
||||
}
|
||||
|
||||
if (special && found > 0)
|
||||
{
|
||||
codice.set("");
|
||||
price.set("");
|
||||
manut.set("");
|
||||
if (_wanted_users != 0)
|
||||
{
|
||||
str.format("%3d", ++found);
|
||||
num.set(str);
|
||||
|
||||
str = row->get(0);
|
||||
|
||||
str.format(FR("Variazione del numero utenti da %u a %u"),
|
||||
::dongle().max_users(), _wanted_users);
|
||||
descr.set(str);
|
||||
|
||||
str = active ? TR("*ATTIVO*") : "";
|
||||
codice.set(str);
|
||||
|
||||
str = _im->get_name(module);
|
||||
real full, assist;
|
||||
ini.prices(str, users, full, assist);
|
||||
if (active)
|
||||
{
|
||||
real old_full, old_assist;
|
||||
ini.prices(str, ::dongle().max_users(), old_full, old_assist);
|
||||
full -= old_full;
|
||||
assist -= old_assist;
|
||||
}
|
||||
else
|
||||
assist = 0.0;
|
||||
|
||||
price.set(full.string());
|
||||
manut.set(assist.string());
|
||||
|
||||
form.print(-1);
|
||||
}
|
||||
|
||||
if (special && found > 0)
|
||||
{
|
||||
codice.set("");
|
||||
price.set("");
|
||||
manut.set("");
|
||||
if (_wanted_users != 0)
|
||||
{
|
||||
str.format("%3d", ++found);
|
||||
num.set(str);
|
||||
|
||||
str.format(FR("Variazione del numero utenti da %u a %u"),
|
||||
::dongle().max_users(), _wanted_users);
|
||||
descr.set(str);
|
||||
form.print(-1);
|
||||
}
|
||||
if (_wanted_assist > ::dongle().year_assist())
|
||||
{
|
||||
str.format("%3d", ++found);
|
||||
num.set(str);
|
||||
str.format(FR("Contratto di assistenza per l'anno %u"), _wanted_assist);
|
||||
descr.set(str);
|
||||
form.print(-1);
|
||||
}
|
||||
}
|
||||
|
||||
if (found)
|
||||
if (_wanted_assist > ::dongle().year_assist())
|
||||
{
|
||||
form.print_footer();
|
||||
printer().close();
|
||||
}
|
||||
str.format("%3d", ++found);
|
||||
num.set(str);
|
||||
str.format(FR("Contratto di assistenza per l'anno %u"), _wanted_assist);
|
||||
descr.set(str);
|
||||
form.print(-1);
|
||||
}
|
||||
}
|
||||
|
||||
if (found)
|
||||
{
|
||||
form.print_footer();
|
||||
printer().close();
|
||||
}
|
||||
}
|
||||
|
||||
void TAttivazione_moduli::print_status()
|
||||
@ -1191,9 +1134,9 @@ void TAttivazione_moduli::print_status()
|
||||
TForm_item& descr = form.find_field('B', odd_page, 102);
|
||||
TForm_item& codice = form.find_field('B', odd_page, 103);
|
||||
|
||||
form.find_field('H',odd_page,1).set("PR.A.S.S.I.");
|
||||
form.find_field('H',odd_page,1).set(dongle().reseller());
|
||||
form.update_serno(_msk->get(F_SN));
|
||||
form.update_dongle(::dongle());
|
||||
form.update_dongle();
|
||||
form.update_os();
|
||||
|
||||
TWait_cursor hourglass;
|
||||
@ -1202,7 +1145,6 @@ void TAttivazione_moduli::print_status()
|
||||
TSheet_field& sheet = _msk->sfield(F_MODULI);
|
||||
FOR_EACH_SHEET_ROW(sheet, r, row)
|
||||
{
|
||||
//const int module = _im->get_module_by_order(r);
|
||||
const int module = row->get_int(2) ;
|
||||
const bool active = ::dongle().active(module);
|
||||
|
||||
@ -1237,7 +1179,7 @@ void TAttivazione_moduli::print_answer()
|
||||
{
|
||||
printer().open();
|
||||
form.update_serno(_msk->get(F_SN));
|
||||
form.update_dongle(::dongle());
|
||||
form.update_dongle();
|
||||
form.update_os();
|
||||
}
|
||||
|
||||
@ -1260,7 +1202,7 @@ void TAttivazione_moduli::print_answer()
|
||||
{
|
||||
printer().open();
|
||||
form.update_serno(_msk->get(F_SN));
|
||||
form.update_dongle(::dongle());
|
||||
form.update_dongle();
|
||||
}
|
||||
if (_wanted_users != 0)
|
||||
{
|
||||
@ -1292,7 +1234,7 @@ void TAttivazione_moduli::print_answer()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
void TAttivazione_moduli::print_listino()
|
||||
{
|
||||
TRequest_form form("ba1500a");
|
||||
@ -1321,7 +1263,7 @@ void TAttivazione_moduli::print_listino()
|
||||
const bool active = ::dongle().active(module);
|
||||
|
||||
str = _im->get_name(module);
|
||||
ini.prices(str, users, full, assist, FALSE);
|
||||
ini.prices(str, users, full, assist, false);
|
||||
if (!full.is_zero() || ! assist.is_zero())
|
||||
{
|
||||
if (found++ == 0)
|
||||
@ -1358,11 +1300,12 @@ void TAttivazione_moduli::print_listino()
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
bool TAttivazione_moduli::new_module_requested()
|
||||
{
|
||||
TSheet_field& sheet = _msk->sfield(F_MODULI);
|
||||
bool found = FALSE;
|
||||
bool found = false;
|
||||
FOR_EACH_SHEET_ROW(sheet, r, row)
|
||||
{
|
||||
if (*row->get(1) > ' ') // Wanted!
|
||||
@ -1370,7 +1313,7 @@ bool TAttivazione_moduli::new_module_requested()
|
||||
const int module = row->get_int(2);
|
||||
if (!::dongle().active(module)) // Not active yet?
|
||||
{
|
||||
found = TRUE;
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -1394,12 +1337,12 @@ void TAttivazione_moduli::print()
|
||||
// Questo programma non deve bloccarsi per l'anno di assistenza!
|
||||
bool TAttivazione_moduli::test_assistance_year() const
|
||||
{
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TAttivazione_moduli::create()
|
||||
{
|
||||
bool ok = ::dongle().login(TRUE);
|
||||
bool ok = ::dongle().login(true);
|
||||
if (!ok)
|
||||
return false;
|
||||
|
||||
@ -1412,7 +1355,7 @@ bool TAttivazione_moduli::create()
|
||||
{
|
||||
ok = update_assistance_year();
|
||||
if (ok)
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
_im = new TInformazione_moduli;
|
||||
@ -1425,78 +1368,65 @@ bool TAttivazione_moduli::create()
|
||||
_msk->set_handler(F_CHANGEUSERS, change_users_handler);
|
||||
_msk->set_handler(F_CHANGEASSIST, change_assist_handler);
|
||||
_msk->set_handler(F_PRINT, print_handler);
|
||||
/*
|
||||
_msk->set_handler(F_PRINTLIST, printlist_handler);
|
||||
_msk->set_handler(F_AGGLISTINO, aggiorna_listino_handler);
|
||||
|
||||
*/
|
||||
const TDongleType mydongle = ::dongle().type();
|
||||
#ifdef DBG
|
||||
if (::dongle().number() == 0)
|
||||
#else
|
||||
|
||||
if (mydongle == _aga_dongle)
|
||||
#endif
|
||||
{
|
||||
_msk->show(F_AGA);
|
||||
_msk->set_handler(F_AGA, aga_handler);
|
||||
/*
|
||||
_msk->show(F_MODLISTINO);
|
||||
_msk->set_handler(F_MODLISTINO, modifica_listino_handler);
|
||||
*/
|
||||
}
|
||||
|
||||
TSheet_field& sf = _msk->sfield(F_MODULI);
|
||||
sf.set_notify(k_notify);
|
||||
|
||||
//const int un = _im->unassigned();
|
||||
switch (mydongle)
|
||||
{
|
||||
case _user_dongle:
|
||||
_msk->enable(F_DT);
|
||||
_msk->set_handler(F_DT, date_hnd);
|
||||
case _developer_dongle:
|
||||
{
|
||||
/*
|
||||
if (::dongle().hardware() == _dongle_hardlock)
|
||||
{
|
||||
_msk->disable(F_K1);
|
||||
_msk->disable(F_K2);
|
||||
_msk->set_handler(F_K4, user_hnd);
|
||||
}
|
||||
|
||||
*/
|
||||
init_mask();
|
||||
|
||||
|
||||
_serno=_msk->get_int(F_SN);
|
||||
sf.enable_column(F_ENABLE, serno() != 0);
|
||||
sf.enable_column(F_KEY, serno() != 0);
|
||||
}
|
||||
break;
|
||||
case _prassi_dongle:
|
||||
break;
|
||||
case _aga_dongle:
|
||||
{
|
||||
/*
|
||||
if (::dongle().hardware() == _dongle_hardlock)
|
||||
{
|
||||
_msk->set_handler(F_K2, decode_hnd);
|
||||
_msk->disable(F_K3);
|
||||
_msk->disable(F_K4);
|
||||
}
|
||||
sf.sheet_mask().field(F_ENABLE).set_handler(activate_hnd);
|
||||
}*/
|
||||
_msk->set_handler(F_SN, serno_hnd);
|
||||
_msk->enable(F_SN);
|
||||
init_mask();
|
||||
_serno=_msk->get_int(F_SN);
|
||||
|
||||
sf.sheet_mask().field(F_ENABLE).set_handler(activate_hnd);
|
||||
build_sheet(FALSE);
|
||||
|
||||
for (int i = 0; i < MAX_AUT; i++)
|
||||
{
|
||||
const int af = _im->get_module_by_order(i);
|
||||
if (af == 0)
|
||||
sf.disable_cell(i,1);
|
||||
else
|
||||
sf.enable_cell(i,1,_im->test_owner(af, mydongle));
|
||||
}
|
||||
|
||||
build_sheet(false);
|
||||
sf.enable_column(1);
|
||||
build_key_column();
|
||||
}
|
||||
break;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
break;
|
||||
}
|
||||
|
||||
enable_menu_item(M_FILE_PG_SETUP);
|
||||
@ -1508,15 +1438,13 @@ bool TAttivazione_moduli::destroy()
|
||||
{
|
||||
if (_msk != NULL) delete _msk;
|
||||
if (_im != NULL) delete _im;
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
void TAttivazione_moduli::main_loop()
|
||||
{
|
||||
KEY res = _msk->run();
|
||||
if (res == K_ENTER)
|
||||
if (_msk->run() == K_ENTER)
|
||||
burn_dongle();
|
||||
|
||||
}
|
||||
|
||||
int ba1500(int argc, char** argv)
|
||||
@ -1530,4 +1458,4 @@ int ba1500(int argc, char** argv)
|
||||
else
|
||||
error_box(FR("L'utente %s non e' abilitato all'esecuzione di questo programma"), (const char*)user());
|
||||
return 0;
|
||||
}
|
||||
}
|
@ -25,8 +25,6 @@ public:
|
||||
int get_index(int module) const;
|
||||
int get_index_by_name(const char* name) const;
|
||||
|
||||
TDongleType get_owner(int module) const;
|
||||
bool test_owner(int module, TDongleType owner) const;
|
||||
int unassigned() const { return _unassigned_modules; }
|
||||
int items() const { return _infos.items(); }
|
||||
TInformazione_moduli();
|
||||
|
17
ba/ba1500a.h
17
ba/ba1500a.h
@ -1,25 +1,24 @@
|
||||
/*
|
||||
#define F_K1 201
|
||||
#define F_K2 202
|
||||
//#define F_K2A 203
|
||||
//#define F_K2B 204
|
||||
//#define F_K2C 205
|
||||
#define F_K3 206
|
||||
#define F_K4 207
|
||||
//#define F_K4A 208
|
||||
//#define F_K4B 209
|
||||
//#define F_K4C 210
|
||||
#define F_SN 211
|
||||
#define F_DT 212
|
||||
#define F_MODULI 213
|
||||
*/
|
||||
#define F_SN 211
|
||||
#define F_DT 212
|
||||
#define F_MODULI 213
|
||||
#define F_USERS 214
|
||||
#define F_CHANGEUSERS 215
|
||||
#define F_ASSIST 216
|
||||
#define F_CHANGEASSIST 217
|
||||
#define F_PRINT 218
|
||||
#define F_AGA 219
|
||||
|
||||
/*
|
||||
#define F_AGGLISTINO 220
|
||||
#define F_MODLISTINO 221
|
||||
#define F_PRINTLIST 222
|
||||
*/
|
||||
|
||||
#define F_NOMEMOD 101
|
||||
#define F_ENABLE 102
|
||||
|
@ -1,26 +1,28 @@
|
||||
#include "ba1500a.h"
|
||||
|
||||
TOOLBAR "" 0 20 0 2
|
||||
TOOLBAR "" 0 -2 0 2
|
||||
|
||||
BUTTON DLG_OK 10 2
|
||||
BEGIN
|
||||
PROMPT -13 -1 ""
|
||||
PROMPT -13 -11 ""
|
||||
END
|
||||
|
||||
BUTTON F_PRINT 22 2
|
||||
BUTTON F_PRINT 10 2
|
||||
BEGIN
|
||||
PROMPT -11 -1 "~Stampa Attivazioni"
|
||||
PROMPT -23 -11 "~Stampa"
|
||||
PICTURE BMP_PRINT
|
||||
END
|
||||
|
||||
BUTTON DLG_QUIT 10 2
|
||||
BEGIN
|
||||
PROMPT -33 -1 ""
|
||||
PROMPT -33 -11 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Attivazione Moduli" -1 -1 79 21
|
||||
|
||||
/*
|
||||
STRING F_K1 16
|
||||
BEGIN
|
||||
PROMPT 1 1 "Attivazione 1 "
|
||||
@ -32,6 +34,7 @@ BEGIN
|
||||
PROMPT 35 1 ""
|
||||
FLAGS "U"
|
||||
END
|
||||
*/
|
||||
|
||||
STRING F_SN 5
|
||||
BEGIN
|
||||
@ -67,6 +70,7 @@ BEGIN
|
||||
PROMPT 71 4 "Cambia"
|
||||
END
|
||||
|
||||
/*
|
||||
STRING F_K3 16
|
||||
BEGIN
|
||||
PROMPT 1 2 "Attivazione 2 "
|
||||
@ -79,6 +83,7 @@ BEGIN
|
||||
FLAGS "U"
|
||||
END
|
||||
|
||||
|
||||
BUTTON F_AGGLISTINO 18
|
||||
BEGID
|
||||
PROMPT 1 3 "Aggiorna listino"
|
||||
@ -94,6 +99,7 @@ BEGID
|
||||
PROMPT 1 4 "Modifica listino"
|
||||
FLAGS "H"
|
||||
END
|
||||
*/
|
||||
|
||||
BUTTON F_AGA 18
|
||||
BEGID
|
||||
@ -101,9 +107,7 @@ BEGID
|
||||
FLAGS "H"
|
||||
END
|
||||
|
||||
|
||||
|
||||
SPREADSHEET F_MODULI
|
||||
SPREADSHEET F_MODULI 78
|
||||
BEGIN
|
||||
PROMPT 1 5 "Moduli"
|
||||
ITEM "Modulo@40"
|
||||
|
118
ba/ba1501.cpp
118
ba/ba1501.cpp
@ -1,6 +1,5 @@
|
||||
#include <applicat.h>
|
||||
#include <config.h>
|
||||
#include <dongle.h>
|
||||
#include <scanner.h>
|
||||
#include <utility.h>
|
||||
|
||||
@ -44,70 +43,37 @@ HIDDEN bool build_dninst()
|
||||
|
||||
ofstream ouf("dninst.zip", ios::out | ios::binary);
|
||||
char line[256];
|
||||
int year = 0;
|
||||
inf.getline(line, sizeof(line));
|
||||
const int year = atoi(line);
|
||||
CHECKD(year >= 2006 && year <= 3000, "Anno errato:", year);
|
||||
srand(883); // Inizializza generatore numeri casuali per l'anno
|
||||
encode_string(dninst_key, line);
|
||||
ouf << line << '\n';
|
||||
srand(year); // Inizializza generatore numeri casuali per i moduli
|
||||
|
||||
while (!inf.eof())
|
||||
{
|
||||
inf.getline(line, sizeof(line));
|
||||
if (year == 0)
|
||||
{
|
||||
srand(883);
|
||||
year = atoi(line);
|
||||
CHECKD(year >= 2005 && year <= 3000, "Anno errato:", year);
|
||||
}
|
||||
encode_string(dninst_key, line);
|
||||
ouf << line << '\n';
|
||||
|
||||
if (year > 0)
|
||||
{
|
||||
srand(year);
|
||||
year = -1;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
HIDDEN bool show_error(const char* str)
|
||||
HIDDEN bool show_error(const char* str, int anno)
|
||||
{
|
||||
int app_year, dum1, dum2, dum3;
|
||||
TApplication::get_version_info(app_year, dum1, dum2, dum3);
|
||||
|
||||
TString msg;
|
||||
msg << TR("Impossibile aggiornare automaticamente l'assistenza ")
|
||||
<< app_year << ":\n" << str << '.';
|
||||
msg << TR("Impossibile aggiornare automaticamente l'anno d'assistenza") ;
|
||||
if (anno > 0) msg << ' ' << anno;
|
||||
msg << ":\n" << str << '.';
|
||||
return error_box(msg);
|
||||
}
|
||||
|
||||
/*
|
||||
HIDDEN int module2number(const TString& mod)
|
||||
{
|
||||
static TAssoc_array* ass = NULL;
|
||||
if (ass == NULL)
|
||||
{
|
||||
TString8 num;
|
||||
TScanner scanner(AUT_FILE);
|
||||
ass = new TAssoc_array;
|
||||
for (int aut = 0; scanner.line() != ""; aut++)
|
||||
{
|
||||
num.format("%d", aut);
|
||||
const char* cod = scanner.token().left(2);
|
||||
ass->add(cod, num);
|
||||
}
|
||||
}
|
||||
int n = 0;
|
||||
if (mod.len() == 2)
|
||||
{
|
||||
const TString* num = (const TString*)ass->objptr(mod);
|
||||
if (num)
|
||||
n = atoi(*num);
|
||||
}
|
||||
return n;
|
||||
}
|
||||
*/
|
||||
|
||||
// Copia il file dninst.zip dal CD/server alla cartella corrente
|
||||
bool update_dninst(bool force)
|
||||
{
|
||||
#ifdef DBG
|
||||
@ -118,22 +84,38 @@ bool update_dninst(bool force)
|
||||
}
|
||||
#endif
|
||||
|
||||
const TFilename keys_name = "dninst.zip";
|
||||
if (force || !keys_name.exist())
|
||||
{
|
||||
TConfig ini("install.ini", "Main");
|
||||
TFilename remote_name = ini.get("DiskPath");
|
||||
if (xvt_fsys_is_removable_drive(remote_name))
|
||||
message_box(FR("Assicuratevi che il CD di installazione sia nel lettore %c:"), remote_name[0]);
|
||||
remote_name.add(keys_name);
|
||||
if (remote_name.exist())
|
||||
fcopy(remote_name, keys_name);
|
||||
}
|
||||
//legge dal diskpath di install.ini la directory da cui aggiornarsi;se il dninst.zip di tale..
|
||||
//..directory e' piu' nuovo di quello in locale -> lo copia in locale
|
||||
const TFilename local_name = "dninst.zip";
|
||||
TConfig ini("install.ini", "Main");
|
||||
TFilename remote_name = ini.get("DiskPath");
|
||||
remote_name.add(local_name);
|
||||
if (remote_name.exist())
|
||||
{
|
||||
if (!force)
|
||||
{
|
||||
force = !local_name.exist();
|
||||
if (!force)
|
||||
{
|
||||
const long local_date = xvt_fsys_file_attr(local_name, XVT_FILE_ATTR_MTIME);
|
||||
const long remote_date = xvt_fsys_file_attr(remote_name, XVT_FILE_ATTR_MTIME);
|
||||
force = remote_date > local_date;
|
||||
}
|
||||
}
|
||||
if (force)
|
||||
fcopy(remote_name, local_name);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool update_assistance_year()
|
||||
{
|
||||
{
|
||||
if (dongle().hardware() == _dongle_network)
|
||||
{
|
||||
show_error(TR("Il server di autorizzazioni deve essere disattivato"), 0);
|
||||
return false;
|
||||
}
|
||||
|
||||
update_dninst(true);
|
||||
|
||||
const TFilename dninst = "dninst.zip";
|
||||
@ -163,21 +145,21 @@ bool update_assistance_year()
|
||||
if (dongle().burn())
|
||||
{
|
||||
message_box(FR("Il contratto %d è stato attivato automaticamente"), ass_year);
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
show_error(FR("Errore di scrittura sulla chiave di protezione"));
|
||||
return FALSE;
|
||||
show_error(FR("Errore di scrittura sulla chiave di protezione"), ass_year);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
show_error(TR("Il numero di serie di questa postazione non è presente sul database"));
|
||||
show_error(TR("Il numero di serie di questa postazione non è presente sul database"), ass_year);
|
||||
}
|
||||
else
|
||||
show_error(TR("L'anno di assistenza sul database e' inferiore a quello registrato sulla chiave di protezione"));
|
||||
show_error(TR("L'anno di assistenza sul database e' inferiore a quello registrato sulla chiave di protezione"), ass_year);
|
||||
}
|
||||
else
|
||||
show_error(TR("Il database dei numeri di serie non è accessibile"));
|
||||
return FALSE;
|
||||
show_error(TR("Il database dei numeri di serie non è accessibile"), 0);
|
||||
return false;
|
||||
}
|
||||
|
@ -441,14 +441,7 @@ void TInstall_ini::prices(const char* module, word users, real& full, real& assi
|
||||
|
||||
void TFconv_ini::export_module(const char* module, const char* summary)
|
||||
{
|
||||
TScanner scanner(AUT_FILE);
|
||||
int module_code;
|
||||
for (module_code = 0; scanner.line().not_empty(); module_code++)
|
||||
{
|
||||
if (scanner.token().compare(module, 2, TRUE) == 0)
|
||||
break;
|
||||
}
|
||||
scanner.close();
|
||||
const word module_code = dongle().module_name2code(module);
|
||||
|
||||
TConfig sommario(summary);
|
||||
|
||||
|
140
ba/ba1700.cpp
140
ba/ba1700.cpp
@ -1,7 +1,3 @@
|
||||
#include <stdio.h>
|
||||
|
||||
#include <cfiles.h>
|
||||
|
||||
#include <agasys.h>
|
||||
#include <applicat.h>
|
||||
#include <defmask.h>
|
||||
@ -86,8 +82,11 @@ class TInstaller_mask : public TArray_sheet
|
||||
static TInstaller_mask* _curr_mask;
|
||||
bool _installed; // Flag per verificare se almeno un modulo e' stato installato
|
||||
bool _sys_installed; //Flag per controllare l'installazione del modulo di sistema SY
|
||||
bool _modules_pending; //Flag per controllare se ci sono altri moduli da installare oltre a sy
|
||||
|
||||
enum { NONE = 0, NEW_MENU = 1, NEW_MENUPRG = 2, NEW_INSTALLER = 4, NEW_DLL = 8 };
|
||||
enum { NONE=0, NEW_MENU=1,
|
||||
NEW_MENUPRG=2, NEW_INSTALLER=4, NEW_DLL=8, NEW_SYS=14,
|
||||
NEW_TRR=16 };
|
||||
int _reboot_program;
|
||||
|
||||
protected: // TSheet
|
||||
@ -129,9 +128,15 @@ protected:
|
||||
public:
|
||||
bool installed() const { return _installed;}
|
||||
bool sys_installed() const { return _sys_installed;}
|
||||
bool modules_pending() const { return _modules_pending;}
|
||||
bool autoload();
|
||||
bool install(const TString& module, int patch);
|
||||
bool run_ba0close() const { return _reboot_program >= NEW_MENUPRG; }
|
||||
|
||||
bool run_ba0close() const
|
||||
{ return (_reboot_program & NEW_SYS) != 0; }
|
||||
|
||||
bool run_conversion() const
|
||||
{ return installed() && !sys_installed() && (_reboot_program & NEW_TRR) != 0; }
|
||||
|
||||
TInstaller_mask();
|
||||
virtual ~TInstaller_mask();
|
||||
@ -143,28 +148,33 @@ TInstaller_mask* TInstaller_mask::_curr_mask = NULL;
|
||||
bool TInstaller_mask::add_module(TConfig& ini, const TString& module, bool patch, int pos)
|
||||
{
|
||||
ini.write_protect();
|
||||
bool ok = ini.set_paragraph(module);
|
||||
if (ok)
|
||||
{
|
||||
const int numpatch = ini.get_int("Patch");
|
||||
TString16 strpatch;
|
||||
if (numpatch > 0)
|
||||
strpatch.format("%03d", numpatch);
|
||||
if (!ini.set_paragraph(module))
|
||||
return false;
|
||||
|
||||
TToken_string row;
|
||||
row = " "; // Not selected
|
||||
row.add(ini.get("Descrizione"));
|
||||
row.add(module);
|
||||
row.add(ini.get("Versione"));
|
||||
row.add(strpatch);
|
||||
row.add(ini.get("Data"));
|
||||
row.add(patch ? "X" : " ", C_ISPATCH);
|
||||
if (pos==-1)
|
||||
add(row);
|
||||
else
|
||||
insert(row,pos);
|
||||
}
|
||||
return ok;
|
||||
// Nasconde i moduli Enterprise Edition ad occhi indiscreti
|
||||
const bool ee = ini.get_bool("Ee");
|
||||
if (ee && !dongle().active(EEAUT))
|
||||
return false;
|
||||
|
||||
const int numpatch = ini.get_int("Patch");
|
||||
TString4 strpatch;
|
||||
if (numpatch > 0)
|
||||
strpatch.format("%03d", numpatch);
|
||||
|
||||
TToken_string row;
|
||||
row = " "; // Not selected
|
||||
row.add(ini.get("Descrizione"));
|
||||
row.add(module);
|
||||
row.add(ini.get("Versione"));
|
||||
row.add(strpatch);
|
||||
row.add(ini.get("Data"));
|
||||
row.add(patch ? "X" : " ", C_ISPATCH);
|
||||
if (pos==-1)
|
||||
add(row);
|
||||
else
|
||||
insert(row,pos);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// Copia nello sheet i dati di un modulo prendendoli da un .ini
|
||||
@ -215,6 +225,9 @@ int TInstaller_mask::precheck_modules(bool only_newer)
|
||||
TString4 cod_module;
|
||||
int patchlevel,modnumber,currpatch;
|
||||
|
||||
bool check_enabled = true;
|
||||
_modules_pending = false;
|
||||
|
||||
TString_array& array = rows_array();
|
||||
FOR_EACH_ARRAY_ROW(array, r, row)
|
||||
{
|
||||
@ -233,13 +246,19 @@ int TInstaller_mask::precheck_modules(bool only_newer)
|
||||
{
|
||||
// checca il modulo o la patch se ho installata la stessa versione
|
||||
const bool chk = rigar.get_char(C_ISPATCH) != 'X' || release == currrelease;
|
||||
check(r, chk);
|
||||
if (check_enabled)
|
||||
check(r, chk);
|
||||
else
|
||||
{
|
||||
if (chk)
|
||||
_modules_pending = true;
|
||||
}
|
||||
if (chk && only_newer && cod_module == "sy") //se viene checkato il modulo sy (sistema) deve togliere..
|
||||
{ //..la possibilita' di installare altri moduli..
|
||||
for (int i = 0; i < array.items(); i++)
|
||||
disable_row(i); //disabilita tutte le righe dello sheet
|
||||
disable(DLG_USER);
|
||||
break; //..ed uscire
|
||||
check_enabled = false; //..ed uscire
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -257,10 +276,8 @@ int TInstaller_mask::get_module_number(const TString& module) const
|
||||
if (module == "ba" || module == "sy") //moduli base e sistema: deve ritornare 0;
|
||||
return 0;
|
||||
|
||||
TScanner scanner(AUT_FILE);
|
||||
for (aut = 0; scanner.line() != ""; aut++)
|
||||
if (scanner.token().starts_with(module))
|
||||
{ ok = true; break; }
|
||||
aut = dongle().module_name2code(module);
|
||||
ok = aut < ENDAUT;
|
||||
}
|
||||
return ok ? aut : -1;
|
||||
}
|
||||
@ -359,7 +376,6 @@ bool TInstaller_mask::autoload()
|
||||
const TString& module = *row;
|
||||
if (module[0] == '_' || module.len() == 2)
|
||||
{
|
||||
|
||||
if (module[0] == '_')
|
||||
add_header(ini, module, false);
|
||||
else
|
||||
@ -390,7 +406,7 @@ bool TInstaller_mask::autoload()
|
||||
ininame.lower();
|
||||
const int pos = ininame.find("inst.ini");
|
||||
CHECKS(pos >= 2, "Invalid installation configuration: ", (const char*)ininame);
|
||||
const TString16 module = ininame.mid(pos-2, 2);
|
||||
const TString4 module = ininame.mid(pos-2, 2);
|
||||
TConfig ini(ininame, module);
|
||||
add_module(ini, module, false);
|
||||
}
|
||||
@ -540,14 +556,17 @@ bool TInstaller_mask::can_install(const char* module, TInstall_ini& ini)
|
||||
|
||||
const TString& version = ini.version(module);
|
||||
const word year = version2year(version);
|
||||
if (year < 1997)
|
||||
if (year < 2006)
|
||||
return error_box(FR("Il modulo '%s' non ha una versione valida."), module);
|
||||
|
||||
#ifndef _DEMO_
|
||||
if (year > dongle().year_assist())
|
||||
return error_box(FR("Per installare la versione %s del modulo '%s'\noccorre il contratto di assistenza per l'anno %d."),
|
||||
|
||||
(const char*)version, module, year);
|
||||
{
|
||||
warning_box(FR("Per installare la versione %s del modulo '%s'\noccorre il contratto di assistenza per l'anno %d."),
|
||||
(const char*)version, module, year);
|
||||
if (!update_assistance_year())
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
TAuto_token_string altri(ini.get("Moduli", module));
|
||||
@ -596,7 +615,9 @@ int TInstaller_mask::needs_reboot(const TFilename& file) const
|
||||
if (xvt_str_compare_ignoring_case(ext, "dll") == 0)
|
||||
underscore = NEW_DLL; else
|
||||
if (xvt_str_compare_ignoring_case(ext, "men") == 0)
|
||||
underscore = NEW_MENU;
|
||||
underscore = NEW_MENU; else
|
||||
if (xvt_str_compare_ignoring_case(ext, "trr") == 0 || xvt_str_compare_ignoring_case(ext, "dir") == 0)
|
||||
underscore = NEW_TRR;
|
||||
return underscore;
|
||||
}
|
||||
|
||||
@ -632,7 +653,7 @@ bool TInstaller_mask::move_file(const TFilename& src, const TFilename& dst) cons
|
||||
{
|
||||
TFilename dest = dst;
|
||||
const int reboot = needs_reboot(dest);
|
||||
if (reboot > NEW_MENU && dst.exist())
|
||||
if ((reboot & NEW_SYS)!=0 && dst.exist())
|
||||
{
|
||||
dest.rtrim(1);
|
||||
dest << '_';
|
||||
@ -978,7 +999,7 @@ bool TInstaller_mask::install(const TString& module, int patchlevel)
|
||||
src = path;
|
||||
src.add(dst);
|
||||
const int reboot = needs_reboot(dst);
|
||||
if (reboot > NEW_MENU && dst.exist())
|
||||
if ((reboot & NEW_SYS)!=0 && dst.exist())
|
||||
{
|
||||
dst.rtrim(1);
|
||||
dst << '_';
|
||||
@ -1230,7 +1251,11 @@ void TInstaller_mask::install_selection()
|
||||
{
|
||||
if (_sys_installed)
|
||||
{
|
||||
warning_box("Modulo SY installato: altri moduli presenti dovranno essere installati successivamente");
|
||||
if (_modules_pending)
|
||||
warning_box(TR("Modulo SY installato: gli altri moduli verranno installati successivamente"));
|
||||
else
|
||||
message_box(TR("Modulo SY installato: il programma si riavviera' automaticamente"));
|
||||
|
||||
send_key(K_SPACE, DLG_QUIT);
|
||||
}
|
||||
else
|
||||
@ -1353,9 +1378,10 @@ TInstaller_mask::~TInstaller_mask()
|
||||
msg << TR("installatore;");
|
||||
if (_reboot_program & NEW_DLL)
|
||||
msg << TR("librerie di base;");
|
||||
if (_reboot_program & NEW_TRR)
|
||||
msg << TR("tracciati record;");
|
||||
|
||||
msg.rtrim(1);
|
||||
msg << '\n' << TR("E' necessario uscire e rientrare dal programma.");
|
||||
warning_box(msg);
|
||||
}
|
||||
}
|
||||
@ -1439,7 +1465,7 @@ void TInstaller::convert_archives()
|
||||
void TInstaller::main_loop()
|
||||
{
|
||||
_m->run();
|
||||
if (_m->installed() && !_m->sys_installed() && testdatabase()) // Almeno 1 modulo installato ?
|
||||
if (_m->run_conversion() && testdatabase()) // Almeno 1 trr installato ?
|
||||
{
|
||||
convert_archives();
|
||||
}
|
||||
@ -1471,17 +1497,23 @@ bool TExtendedInstaller::create()
|
||||
void TExtendedInstaller::main_loop()
|
||||
{
|
||||
_m->run();
|
||||
if (_m->installed() && !_m->sys_installed() && testdatabase()) // Almeno 1 modulo installato ?
|
||||
convert_archives();
|
||||
|
||||
const bool reboot = _m->run_ba0close();
|
||||
delete _m; _m = NULL;
|
||||
|
||||
if (reboot && !fexist("ba3.exe")) //e' una prima installazione (non ha ancora installato la base)
|
||||
if (_m->run_conversion() && testdatabase()) // Almeno 1 modulo installato ?
|
||||
{
|
||||
TExternal_app ba0close("ba0close.exe");
|
||||
ba0close.run(true,true,true); // run asynchronous...
|
||||
// Lancia conversione: ba1 -0 -C -uADMIN
|
||||
TExternal_app conversion("ba1 -0 -C");
|
||||
conversion.run();
|
||||
}
|
||||
|
||||
const bool pending = _m->modules_pending();
|
||||
delete _m; _m = NULL;
|
||||
//le graffe servono per salvare il file campo.ini!! NON eliminarle
|
||||
{
|
||||
TConfig campo(CONFIG_INSTALL, "ba0close");
|
||||
campo.set("ModulesPending", pending ? "1" : "0");
|
||||
}
|
||||
TExternal_app ba0close("ba0close.exe");
|
||||
|
||||
ba0close.run(true,true,true); // run asynchronous...
|
||||
}
|
||||
|
||||
int ba1700(int argc, char* argv[])
|
||||
|
@ -687,7 +687,7 @@ bool TMailer_mask::file2app(const TString& file, TString& app) const
|
||||
else
|
||||
{
|
||||
app = *run;
|
||||
ok = app.not_empty();
|
||||
ok = app.full();
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
|
@ -1463,30 +1463,32 @@ bool TSQL_recordset_app::create()
|
||||
{
|
||||
_msk->set(F_CODICE, argv(2));
|
||||
_msk->load_query();
|
||||
|
||||
|
||||
|
||||
if (argc() > 3)
|
||||
{
|
||||
switch (argv(3)[0])
|
||||
{
|
||||
case 'H' :
|
||||
_msk->save_as(fmt_html);
|
||||
break;
|
||||
case 'T' :
|
||||
_msk->save_as(fmt_text);
|
||||
break;
|
||||
case 'X' :
|
||||
_msk->save_as(fmt_silk);
|
||||
break;
|
||||
case 'C' :
|
||||
_msk->save_as(fmt_campo);
|
||||
break;
|
||||
default :
|
||||
_msk->save_as(fmt_html);
|
||||
break;
|
||||
case 'H':
|
||||
_msk->save_as(fmt_html);
|
||||
break;
|
||||
case 'T':
|
||||
_msk->save_as(fmt_text);
|
||||
break;
|
||||
case 'X':
|
||||
_msk->save_as(fmt_silk);
|
||||
break;
|
||||
case 'C':
|
||||
_msk->save_as(fmt_campo);
|
||||
break;
|
||||
default :
|
||||
_msk->save_as(fmt_html);
|
||||
break;
|
||||
}
|
||||
else
|
||||
_msk->edit_query();
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
_msk->edit_query();
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TSkeleton_application::create();
|
||||
|
@ -42,6 +42,7 @@ Item_07 = "Codici statistici", "ba3 -0 %stt", ""
|
||||
Item_08 = "Cariche sociali", "ba3 -0 %crs", ""
|
||||
Item_09 = "Vecchi cod.Attivita'", "ba3 -0 %ois", ""
|
||||
Item_10 = "Stati", "ba3 -0 %sta", ""
|
||||
Item_11 = "Indetraibiltà", "ba3 -0 %det", ""
|
||||
|
||||
[MENU_003]
|
||||
Caption = "Stampa tabelle"
|
||||
@ -71,6 +72,7 @@ Item_04 = "Uffici imposte dirette", "ba3 -0 %uid", ""
|
||||
Item_05 = "Uffici IVA", "ba3 -0 %uiv", ""
|
||||
Item_06 = "Uffici registro", "ba3 -0 %ure", ""
|
||||
Item_07 = "Centri servizio", "ba3 -0 %ucs", ""
|
||||
Item_08 = "Codici tributo", "ba3 -0 %trb", ""
|
||||
|
||||
[MENU_012]
|
||||
Caption = "Stampa tabelle ministeriali"
|
||||
@ -83,6 +85,7 @@ Item_03 = "Uffici imposte dirette", "ba3 -1 %uid", ""
|
||||
Item_04 = "Uffici IVA", "ba3 -1 %uiv", ""
|
||||
Item_05 = "Uffici registro", "ba3 -1 %ure", ""
|
||||
Item_06 = "Centri servizio", "ba3 -1 %ucs", ""
|
||||
Item_07 = "Codici tributo", "ba3 -1 %trb", ""
|
||||
|
||||
[MENU_014]
|
||||
Caption = "Query e Report"
|
||||
|
40
ba/basttrb.rep
Executable file
40
ba/basttrb.rep
Executable file
@ -0,0 +1,40 @@
|
||||
|
||||
<report name="basttrb" lpi="6">
|
||||
<description>Stampa Codici Tributo</description>
|
||||
<font face="Courier New" size="10" />
|
||||
<section type="Head">
|
||||
<field type="Testo" valign="center" align="center" width="96" height="2" text="Tabella Codici Tributo">
|
||||
<font face="Courier New" bold="1" size="14" />
|
||||
</field>
|
||||
<field border="2" x="1" y="2.5" type="Linea" width="93" height="0" />
|
||||
<field x="2" y="3" type="Testo" width="10" text="Codice">
|
||||
<font face="Courier New" bold="1" size="10" />
|
||||
</field>
|
||||
<field x="15" y="3" type="Testo" width="12" text="Descrizione">
|
||||
<font face="Courier New" bold="1" size="10" />
|
||||
</field>
|
||||
<field border="2" x="1" y="4.5" type="Linea" width="93" height="0" />
|
||||
</section>
|
||||
<section type="Head" level="1" />
|
||||
<section type="Body" />
|
||||
<section type="Body" level="1">
|
||||
<field x="2" type="Stringa" link="%TRB.CODTAB" width="4">
|
||||
<source>CODTAB</source>
|
||||
</field>
|
||||
<field x="15" type="Stringa" width="50">
|
||||
<source>S0</source>
|
||||
</field>
|
||||
</section>
|
||||
<section type="Foot" height="3">
|
||||
<field border="2" x="1" y="0.5" type="Linea" width="93" height="0" />
|
||||
<field x="2" y="1" type="Data" width="10">
|
||||
<source>#SYSTEM.DATE</source>
|
||||
</field>
|
||||
<field x="90" y="1" type="Numero" align="right" width="3">
|
||||
<source>#PAGE</source>
|
||||
</field>
|
||||
<field border="2" x="1" y="2.5" type="Linea" width="93" height="0" />
|
||||
</section>
|
||||
<section type="Foot" level="1" />
|
||||
<sql>USE %TRB</sql>
|
||||
</report>
|
38
ba/basttrb.uml
Executable file
38
ba/basttrb.uml
Executable file
@ -0,0 +1,38 @@
|
||||
#include "ba3200.h"
|
||||
|
||||
PAGE "Stampa Codici Tributo" -1 -1 50 8
|
||||
STRING F_INIZIO1 4
|
||||
BEGIN
|
||||
PROMPT 2 1 "Da codice "
|
||||
FLAGS "U"
|
||||
USE %TRB
|
||||
INPUT CODTAB F_INIZIO1
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_INIZIO1 CODTAB
|
||||
GROUP 1
|
||||
END
|
||||
|
||||
STRING F_FINE1 4
|
||||
BEGIN
|
||||
PROMPT 2 3 "A codice "
|
||||
FLAGS "U"
|
||||
COPY USE F_INIZIO1
|
||||
INPUT CODTAB F_FINE1
|
||||
COPY DISPLAY F_INIZIO1
|
||||
OUTPUT F_FINE1 CODTAB
|
||||
GROUP 2
|
||||
END
|
||||
|
||||
BUTTON DLG_OK 10 2
|
||||
BEGIN
|
||||
PROMPT -12 -1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_QUIT 10 2
|
||||
BEGIN
|
||||
PROMPT -22 -1 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
ENDMASK
|
@ -1,20 +0,0 @@
|
||||
[Headers]
|
||||
132
|
||||
Tabella Agenti
|
||||
1|@3g%s|Codice
|
||||
1|@14g%s|Descrizione
|
||||
1|@68g%s|Provvigione vendite da
|
||||
1|@107g%s|Provvigione
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@3g@5s
|
||||
1|S0|@14g@50,ls
|
||||
1|S6|@68g@35t
|
||||
1|R0|@107g@5,rpn|##,@@
|
||||
|
||||
[Translations]
|
||||
5|S6| |Configurazione ditta
|
||||
5|S6|V|Categoria vendita
|
||||
5|S6|A|Agenti
|
||||
5|S6|C|Clienti
|
||||
5|S6|L|Condizioni di vendita
|
@ -1,14 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella attivita'
|
||||
1|%s|Codice attivita'
|
||||
1|@22g%s|Descrizione attivita'
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@8g@16,ls
|
||||
1|S0|@22g@40,ls
|
||||
|
||||
[Footers]
|
||||
|
||||
[Translations]
|
||||
|
@ -1,10 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella Classi fiscali articoli
|
||||
1|@3g%s|Codice
|
||||
1|@14g%s|Descrizione
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@3g@2,ls
|
||||
1|S0|@14g@50,ls
|
||||
|
@ -1,23 +0,0 @@
|
||||
[Relations]
|
||||
LF_COMUNI;COM==S5
|
||||
|
||||
[Headers]
|
||||
132
|
||||
Tabella Banche
|
||||
1|@2g%s|Codice ABI
|
||||
1|@14g%s|Codice CAB
|
||||
1|@26g%s|Istituto
|
||||
1|@78g%s|Dipendenza
|
||||
2|@26g%s|Indirizzo
|
||||
4|@26g%s|CAP
|
||||
4|@32g%s|Comune
|
||||
|
||||
[Rows]
|
||||
1|CODTAB[1,5]|@7g@5s
|
||||
1|CODTAB[6,10]|@19g@5s
|
||||
1|S0|@26g@50,ls
|
||||
1|I0|@78g@4n
|
||||
2|S2+", "+S7|@26g#-40t
|
||||
3|S3|@26g@10,ls
|
||||
3|LF_COMUNI->DENCOM+" ("+LF_COMUNI->PROVCOM+")"|@32g#-55t
|
||||
|
@ -1,16 +0,0 @@
|
||||
[Relations]
|
||||
%VAL;CODTAB==(TRIM(CODTAB[1,3]));1;0;200
|
||||
|
||||
[Headers]
|
||||
132
|
||||
Tabella Cambi Giornalieri
|
||||
1|@2g%s|Cod. Valuta
|
||||
1|@16g%s|Data
|
||||
1|@30g%s|Descrizione
|
||||
1|@80g%s|Cambio
|
||||
|
||||
[Rows]
|
||||
1|CODTAB[1,3]|@2g@3s
|
||||
1|D0|@15g@ld
|
||||
1|-200->S0|@30g@50,ls
|
||||
1|S4|@82g@15,rpn|#.###.###,@@@@@@
|
@ -1,18 +0,0 @@
|
||||
[Headers]
|
||||
132
|
||||
Tabella Categorie contabili
|
||||
1|@3g%s|Codice
|
||||
1|@14g%s|Descrizione
|
||||
1|@68g%s|Conto di vendita
|
||||
1|@88g%s|Conto di acquisto
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@3g@2,ls
|
||||
1|S0|@14g@50,ls
|
||||
1|I3|@68g@3n
|
||||
1|I4|@73g@3n
|
||||
1|I5|@78g@6n
|
||||
1|I0|@88g@3n
|
||||
1|I1|@93g@3n
|
||||
1|I2|@98g@6n
|
||||
|
@ -1,10 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella Categorie Finanziarie
|
||||
1|@3g%s|Codice
|
||||
1|@14g%s|Descrizione
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@3g@2,ls
|
||||
1|S0|@14g@50,ls
|
||||
|
@ -1,11 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella Classificazione pagamenti
|
||||
1|@3g%s|Codice
|
||||
1|@14g%s|Descrizione
|
||||
|
||||
[Rows]
|
||||
1|CODTAB[1,1]|@3g@1,ls
|
||||
1|CODTAB[2,2]|@5g@1,ls
|
||||
1|S0|@14g@50,ls
|
||||
|
@ -1,41 +0,0 @@
|
||||
[Relations]
|
||||
LF_CLIFO;TIPOCF="C"|CODCF=I0
|
||||
|
||||
[Headers]
|
||||
80
|
||||
Tabella Commesse
|
||||
1|@3g%s|Codice
|
||||
1|@24g%s|Descrizione
|
||||
1|@72g%s|Da rend.
|
||||
2|@3g%s|Cliente
|
||||
2|@62g%s|Regime iva
|
||||
2|@72g%s|Prorata
|
||||
3|@3g%s|Data ini.
|
||||
3|@14g%s|Data fine
|
||||
3|@26g%s|Pubblica
|
||||
3|@35g%s|Prorogata
|
||||
3|@45g%s|Chiusa
|
||||
3|@52g%s|Responsabile
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@3g@20,ls
|
||||
1|S0|@24g@50,ls
|
||||
1|B1|@78g@f
|
||||
2|I0|@3g@6n
|
||||
2|20->RAGSOC|@10g@50,ls
|
||||
2|S7|@62g@17t
|
||||
2|B4|@79g@6f
|
||||
3|D0|@3g@ld
|
||||
3|D1|@14g@ld
|
||||
3|B0|@26g@8f
|
||||
3|B2|@35g@9f
|
||||
3|B3|@45g@6f
|
||||
3|S4|@52g@8,ls
|
||||
|
||||
[Translations]
|
||||
5|S7| |IVA normale
|
||||
5|S7|NR|Non rilevante
|
||||
5|S7|ES|Operazioni esenti
|
||||
5|S7|NI|Non imponibili
|
||||
5|S7|NS|Non soggetti
|
||||
5|S7|FC|Fuori campo
|
@ -1,19 +0,0 @@
|
||||
[Headers]
|
||||
132
|
||||
Tabella dei codici di pagamento
|
||||
1|@2g%s|Codice pagamento
|
||||
1|@20g%s|Descrizione codice pagamento
|
||||
1|@72g%s|Tipo
|
||||
1|@78g%s|Inizio scadenze
|
||||
1|@95g%s|Mese Commerciale
|
||||
1|@113g%s|Rate Differenziate
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@2g@16,ls
|
||||
1|S0|@20g@50,ls
|
||||
1|I0|@72g@4n
|
||||
1|CODTAB[11,12]|@78g@15,ls
|
||||
1|B0|@95g@16f
|
||||
1|B1|@113g@18f
|
||||
|
||||
|
@ -1,11 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella delle cariche sociali
|
||||
1|@2g%s|Cod.
|
||||
1|@7g%s|Carica sociale
|
||||
1|@58g%s|Stampa su modulo RAD ?
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@2g@5,ls
|
||||
1|S0|@7g@50,ls
|
||||
1|S6|@58g@f
|
@ -1,10 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella Causali di Trasporto
|
||||
1|@3g%s|Codice
|
||||
1|@14g%s|Descrizione
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@3g@3,ls
|
||||
1|S0|@14g@50,ls
|
||||
|
@ -1,23 +0,0 @@
|
||||
[Headers]
|
||||
132
|
||||
Tabella Categorie Vendita
|
||||
1|@78g%s|Conto cliente
|
||||
1|@93g%s|Conto di vendita
|
||||
2|@3g%s|Codice
|
||||
2|@14g%s|Descrizione
|
||||
2|@66g%s|Provvigione
|
||||
2|@78g%s|Gruppo
|
||||
2|@85g%s|Conto
|
||||
2|@93g%s|Gruppo
|
||||
2|@100g%s|Conto
|
||||
2|@106g%s|Sottoconto
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@3g@2,ls
|
||||
1|S0|@14g@50,ls
|
||||
1|R0|@66g@5,rpn|##,@@
|
||||
1|I1|@78g@3n
|
||||
1|I2|@85g@3n
|
||||
1|I3|@93g@3n
|
||||
1|I4|@100g@3n
|
||||
1|I5|@106g@6n
|
@ -6,14 +6,14 @@ TOOLBAR "" 0 -3 0 3
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "@bCodici Indetrabilita'" -1 -1 78 15
|
||||
PAGE "Codici Indetrabilita'" -1 -1 78 15
|
||||
|
||||
GROUPBOX DLG_NULL 78 3
|
||||
BEGIN
|
||||
PROMPT 1 1 "Codice Indetrabilita'"
|
||||
END
|
||||
|
||||
STRING F_CODICE 2
|
||||
STRING F_CODICE 1
|
||||
BEGIN
|
||||
PROMPT 2 2 ""
|
||||
FIELD CODTAB
|
||||
@ -26,6 +26,7 @@ BEGIN
|
||||
OUTPUT F_DESC S0
|
||||
CHECKTYPE REQUIRED
|
||||
KEY 1
|
||||
FLAGS "U"
|
||||
END
|
||||
|
||||
STRING F_DESC 50
|
||||
@ -67,9 +68,9 @@ BEGIN
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER F_PERC 3
|
||||
NUMBER F_PERC 6 2
|
||||
BEGIN
|
||||
PROMPT 2 7 "Indetraibilita' "
|
||||
PROMPT 2 7 "% d'indetraibilita' "
|
||||
NUM_EXPR #F_PERC<=100
|
||||
WARNING "Percentuale non valida"
|
||||
FLAGS "U"
|
||||
|
@ -1,10 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella descrizioni di prima nota
|
||||
1|@3g%s|Codice
|
||||
1|@14g%s|Denominazione
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@3g@5,ls
|
||||
1|S0|@14g@50,ls
|
||||
|
@ -1,12 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella esercizi
|
||||
1|@2g%s|Anno
|
||||
1|@7g%s|Data inizio esercizio
|
||||
1|@30g%s|Data fine esercizio
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@2g@4n
|
||||
1|D0|@7g@21d
|
||||
1|D1|@30g@21d
|
||||
|
@ -1,9 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella Fasi commesse
|
||||
1|@3g%s|Codice
|
||||
1|@14g%s|Descrizione
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@3g@10,ls
|
||||
1|S0|@14g@50,ls
|
@ -1,9 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella dei libri sociali
|
||||
1|@2g%s|Cod.
|
||||
1|@8g%s|Descrizione
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@2g@5,ls
|
||||
1|S0|@8g@50,ls
|
@ -1,46 +0,0 @@
|
||||
[Headers]
|
||||
132
|
||||
Tabella codici IVA
|
||||
1|@54g%s|Tipo
|
||||
1|@59g%s|C.IVA
|
||||
1|@66g%s|%IVA
|
||||
1|@73g%s|Riga IVA11
|
||||
1|@84g%s|Riga prosp.
|
||||
1|@96g%s|Rimb.
|
||||
1|@110g%s|Reg.
|
||||
1|@117g%s|Ag.
|
||||
1|@123g%s|Esc.
|
||||
2|%s|Cod.
|
||||
2|@6g%s|Descrizione
|
||||
2|@47g%s|Aliq.
|
||||
2|@54g%s|Cod.
|
||||
2|@59g%s|Vent.
|
||||
2|@65g%s|Teorica
|
||||
2|@73g%s|Vend.
|
||||
2|@79g%s|Acq.
|
||||
2|@84g%s|Vend.
|
||||
2|@90g%s|Acq.
|
||||
2|@96g%s|Infr.
|
||||
2|@102g%s|Plafond
|
||||
2|@110g%s|Agr.
|
||||
2|@115g%s|Viaggio
|
||||
2|@123g%s|Rim.
|
||||
2|@128g%s|Sos.
|
||||
[Rows]
|
||||
1|CODTAB|@g@4,cs
|
||||
1|S0|@6g@40,ls
|
||||
1|R0|@47g@6n
|
||||
1|S1|@55g@2s
|
||||
1|S6|@59g@4s
|
||||
1|I0|@67g@2n
|
||||
1|S2|@73g@3s
|
||||
1|S9|@79g@3s
|
||||
1|S10|@85g@4s
|
||||
1|S11|@90g@4s
|
||||
1|B3|@97g@f
|
||||
1|S3|@105g@1s
|
||||
1|S4|@111g@1s
|
||||
1|S5|@118g@1s
|
||||
1|B4|@123g@f
|
||||
1|B2|@128g@f
|
||||
[Footers]
|
@ -1,15 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella dei codici IV direttiva
|
||||
1|@2g%s|Sezione
|
||||
1|@11g%s|Lettera
|
||||
1|@20g%s|Classe
|
||||
1|@30g%s|Numero
|
||||
1|@38g%s|Descrizione IV direttiva CEE
|
||||
|
||||
[Rows]
|
||||
1|CODTAB[1,1]|@2g@7,ls
|
||||
1|CODTAB[2,2]|@11g@7,ls
|
||||
1|CODTAB[3,6]|@20g@m
|
||||
1|CODTAB[7,]|@30g@2s
|
||||
1|S0|@38g@50,ls
|
@ -1,10 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella Legali per contenzioso
|
||||
1|@3g%s|Codice
|
||||
1|@14g%s|Descrizione
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@3g@2,ls
|
||||
1|S0|@14g@50,ls
|
||||
|
@ -1,10 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella Listini
|
||||
1|@3g%s|Codice
|
||||
1|@14g%s|Descrizione
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@3g@5,ls
|
||||
1|S0|@14g@50,ls
|
||||
|
@ -1,10 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella lingue
|
||||
1|@3g%s|Codice
|
||||
1|@14g%s|Denominazione
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@3g@1,ls
|
||||
1|S0|@14g@50,ls
|
||||
|
@ -1,10 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella Modalita' di spedizione
|
||||
1|@3g%s|Codice
|
||||
1|@14g%s|Descrizione
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@3g@2,ls
|
||||
1|S0|@14g@50,ls
|
||||
|
@ -1,10 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella Note Documento
|
||||
1|@3g%s|Codice
|
||||
1|@14g%s|Descrizione
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@3g@2,ls
|
||||
1|S0|@14g@50,ls
|
||||
|
@ -1,15 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella Nomenclatura combinata
|
||||
1|@3g%s|Codice
|
||||
1|@17g%s|Denominazione
|
||||
1|@69g%s|Obbl.
|
||||
1|@75g%s|Um.S.
|
||||
|
||||
[Rows]
|
||||
1|CODTAB[1,4]|@3g@4,ls
|
||||
1|CODTAB[5,6]|@10g@2,ls
|
||||
1|CODTAB[7,8]|@14g@2,ls
|
||||
1|S0|@17g@50,ls
|
||||
1|S4|@69g@1,ls
|
||||
1|S5|@75g@2,ls
|
@ -1,12 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella Note cliente
|
||||
1|@0g%s|Codice
|
||||
1|@35g%s|Descrizione
|
||||
1|@63g%s|Blocca immissione
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@0g@2s
|
||||
1|S0+S1|@3g#-75t
|
||||
1|B0|@79g@1f
|
||||
|
@ -1,11 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella vecchi codici attivita'
|
||||
1|@2g%s|Codice
|
||||
1|@10g%s|Subcodice
|
||||
1|@22g%s|Descrizione
|
||||
|
||||
[Rows]
|
||||
1|CODTAB[1,4]|@2g@6,ls
|
||||
1|CODTAB[5,]|@10g@9,ls
|
||||
1|S0|@22g@40,ls
|
@ -1,10 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella Modalita' di consegna
|
||||
1|@3g%s|Codice
|
||||
1|@14g%s|Descrizione
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@3g@3,ls
|
||||
1|S0|@14g@50,ls
|
||||
|
@ -1,23 +0,0 @@
|
||||
[Headers]
|
||||
132
|
||||
Tabella dei registri
|
||||
1|@2g%s|Registro
|
||||
1|@43g%s|Cod. Ultimo Ultima Ultima stampa
|
||||
1|@122g%s|Pag. Pag.
|
||||
2|%s|Anno Co.Ti.Descrizione
|
||||
2|@43g%s|att. prot. regis. pagina data
|
||||
2|@90g%s|Luogo conservazione
|
||||
2|@122g%s|reg. res.
|
||||
|
||||
[Rows]
|
||||
1|CODTAB[1,4]|@4s
|
||||
1|CODTAB[5,7]|@5g@3s
|
||||
1|I0|@9g@1s
|
||||
1|S0|@11g@30s
|
||||
1|S8|@42g@5s
|
||||
1|I5|@48g@6,rn
|
||||
1|D2|@55g@d
|
||||
1|I1|@64g@4,rn
|
||||
1|D3|@71g@d
|
||||
1|S1|@80g@40s
|
||||
1|I2|@122g@4,rn
|
@ -1,10 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella Spese da addebitare
|
||||
1|@3g%s|Codice
|
||||
1|@14g%s|Descrizione
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@3g@2,ls
|
||||
1|S0|@14g@20,ls
|
||||
|
@ -1,11 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella Sconti cliente
|
||||
1|@3g%s|Codice
|
||||
1|@14g%s|Descrizione
|
||||
1|@70g%s|Sconto
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@3g@2,ls
|
||||
1|S0|@14g@50,ls
|
||||
1|S1|@70g@20,ls
|
@ -1,9 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella STati CEE
|
||||
1|@3g%s|Codice
|
||||
1|@10g%s|Denominazione
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@3g@4,ls
|
||||
1|S0|@10g@50,ls
|
@ -1,10 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella degli stati
|
||||
1|@3g%s|Codice
|
||||
1|@14g%s|Denominazione
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@3g@6,ls
|
||||
1|S0|@14g@50,ls
|
||||
|
@ -1,10 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella codici statistici
|
||||
1|@2g%s|Codice
|
||||
1|@12g%s|Descrizione
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@2g@17,ls
|
||||
1|S0|@12g@40,ls
|
||||
|
@ -1,21 +0,0 @@
|
||||
[Headers]
|
||||
132
|
||||
Stampa Tabella Gestione Subagenti
|
||||
1|@2g%s|Agente
|
||||
1|@10g%s|Subagente
|
||||
1|@21g%s|Descrizione
|
||||
1|@73g%s|Prov. fissa
|
||||
2|@21g%s|Prov. variabile
|
||||
2|@73g%s|Cod. fornitore
|
||||
2|@90g%s|Ragione sociale
|
||||
2|@107g%s|Liquid. prov. sul pagato
|
||||
|
||||
[Rows]
|
||||
1|CODTAB[1,5]|@2g@5s
|
||||
1|CODTAB[6,7]|@10g@2s
|
||||
1|S0|@21g@50s
|
||||
1|R0|@73g@6,rpn|####,@@
|
||||
2|R1|@21g@6,rpn|####,@@
|
||||
2|S1|@73g@6,ls
|
||||
2|S2|@90g@50,ls
|
||||
2|B0|@107g@1,ls
|
@ -1,10 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella Titoli onorifici
|
||||
1|@3g%s|Codice
|
||||
1|@14g%s|Descrizione
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@3g@2,ls
|
||||
1|S0|@14g@30,ls
|
||||
|
@ -1,19 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella Tipi documenti
|
||||
1|@3g%s|Tipo
|
||||
1|@8g%s|Descrizione
|
||||
1|@59g%s|Natura
|
||||
1|@74g%s|Corrisp.
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@3g@2,ls
|
||||
1|S0|@8g@50,ls
|
||||
1|I0|@59g@13t
|
||||
1|B0|@74g@f
|
||||
|
||||
[Translations]
|
||||
4|I0| |Altro
|
||||
4|I0|1|Vendite
|
||||
4|I0|2|Acquisti
|
||||
4|I0|9|IVA in genere
|
21
ba/batbtrb.h
Executable file
21
ba/batbtrb.h
Executable file
@ -0,0 +1,21 @@
|
||||
|
||||
|
||||
// campi maschera batb%trb.msk
|
||||
|
||||
#define F_CODICE 101
|
||||
#define F_DESCR 102
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
50
ba/batbtrb.uml
Executable file
50
ba/batbtrb.uml
Executable file
@ -0,0 +1,50 @@
|
||||
#include "batbtrb.h"
|
||||
|
||||
TOOLBAR "" 0 20 0 2
|
||||
|
||||
#include <toolbar.h>
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Tabella Codici Tributo" -1 -1 78 8
|
||||
|
||||
GROUPBOX DLG_NULL 75 7
|
||||
BEGIN
|
||||
PROMPT 1 0 ""
|
||||
FLAGS "R"
|
||||
END
|
||||
|
||||
STRING F_CODICE 4
|
||||
BEGIN
|
||||
PROMPT 4 2 "Codice "
|
||||
HELP "Codice tributo"
|
||||
FIELD CODTAB
|
||||
KEY 1
|
||||
USE %TRB
|
||||
INPUT CODTAB F_CODICE
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione @50" S0
|
||||
OUTPUT F_CODICE CODTAB
|
||||
OUTPUT F_DESCR S0
|
||||
FLAGS "Z"
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
STRING F_DESCR 50
|
||||
BEGIN
|
||||
PROMPT 4 4 "Descrizione "
|
||||
HELP "Descrizione del codice tributo"
|
||||
FIELD LF_TABCOM->S0
|
||||
KEY 2
|
||||
USE %TRB KEY 2
|
||||
INPUT CODTAB F_CODICE
|
||||
INPUT S0 F_DESCR
|
||||
DISPLAY "Descrizione @50" S0
|
||||
DISPLAY "Codice" CODTAB
|
||||
OUTPUT F_CODICE CODTAB
|
||||
OUTPUT F_DESCR S0
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
ENDMASK
|
@ -1,21 +0,0 @@
|
||||
[Headers]
|
||||
132
|
||||
Tabella concessioni
|
||||
1|@2g%s|Codice
|
||||
1|@10g%s|Descrizione ufficio concessioni
|
||||
1|@62g%s|Indirizzo ufficio
|
||||
1|@99g%s|N. civico
|
||||
1|@111g%s|Comune
|
||||
1|@119g%s|C.C.P.
|
||||
2|@10g%s|Dizione della concessione
|
||||
2|@62g%s|C.C.P. I.C.I.
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@2g@6,ls
|
||||
1|S0|@10g@50,ls
|
||||
1|S1|@62g@35,ls
|
||||
1|S3|@99g@10,ls
|
||||
1|S7|@111g@6,ls
|
||||
1|S5|@119g@8,ls
|
||||
2|S2|@10g@50,ls
|
||||
2|S4|@62g@13,ls
|
@ -1,17 +0,0 @@
|
||||
[Headers]
|
||||
132
|
||||
Tabella centri servizio
|
||||
1|@2g%s|Codice
|
||||
1|@10g%s|Descrizione centri servizio
|
||||
1|@52g%s|Indirizzo
|
||||
1|@89g%s|N. civico
|
||||
1|@101g%s|Comune
|
||||
1|@109g%s|C.C.P.
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@2g@6,ls
|
||||
1|S0|@10g@40,ls
|
||||
1|S1|@52g@35,ls
|
||||
1|S3|@89g@10,ls
|
||||
1|S6|@101g@6,ls
|
||||
1|S4|@109g@8,ls
|
@ -1,17 +0,0 @@
|
||||
[Headers]
|
||||
132
|
||||
Tabella uffici esattoria
|
||||
1|@2g%s|Codice
|
||||
1|@10g%s|Descrizione ufficio esattoria
|
||||
1|@42g%s|Indirizzo
|
||||
1|@79g%s|N. civico
|
||||
1|@91g%s|Codice comune
|
||||
1|@106g%s|C.C.P. ufficio
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@2g@6,ls
|
||||
1|S0|@10g@30,ls
|
||||
1|S1|@42g@35,ls
|
||||
1|S3|@79g@10,ls
|
||||
1|S6|@91g@13,ls
|
||||
1|S4|@106g@14,ls
|
@ -1,17 +0,0 @@
|
||||
[Headers]
|
||||
132
|
||||
Tabella uffici imposta diretta
|
||||
1|@2g%s|Codice
|
||||
1|@10g%s|Descrizione ufficio imposta diretta
|
||||
1|@52g%s|Indirizzo
|
||||
1|@99g%s|N. civico
|
||||
1|@111g%s|Comune
|
||||
1|@119g%s|C.C.P.
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@2g@6,ls
|
||||
1|S0|@10g@40,ls
|
||||
1|S1|@52g@45,ls
|
||||
1|S3|@99g@10,ls
|
||||
1|S6|@111g@6,ls
|
||||
1|S4|@119g@8,ls
|
@ -1,17 +0,0 @@
|
||||
[Headers]
|
||||
132
|
||||
Tabella uffici IVA
|
||||
1|@2g%s|Codice
|
||||
1|@10g%s|Descrizione ufficio IVA
|
||||
1|@52g%s|Indirizzo
|
||||
1|@99g%s|N. civico
|
||||
1|@111g%s|Comune
|
||||
1|@119g%s|C.C.P.
|
||||
|
||||
[Rows]
|
||||
1|CODTAB| @2g@6,ls
|
||||
1|S0| @10g@40,ls
|
||||
1|S1| @52g@45,ls
|
||||
1|S3| @99g@10,ls
|
||||
1|S6| @111g@6,ls
|
||||
1|S4| @119g@8,ls
|
@ -1,17 +0,0 @@
|
||||
[Headers]
|
||||
132
|
||||
Tabella uffici registro
|
||||
1|@2g%s|Codice
|
||||
1|@10g%s|Descrizione ufficio registro
|
||||
1|@42g%s|Indirizzo
|
||||
1|@79g%s|N. civico
|
||||
1|@91g%s|Comune
|
||||
1|@99g%s|C.C.P.
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@2g@6,ls
|
||||
1|S0|@10g@30,ls
|
||||
1|S1|@42g@35,ls
|
||||
1|S3|@79g@10,ls
|
||||
1|S6|@91g@6,ls
|
||||
1|S4|@99g@10,ls
|
@ -1,15 +0,0 @@
|
||||
[Headers]
|
||||
132
|
||||
Tabella concessioni
|
||||
1|@2g%s|Codice
|
||||
1|@10g%s|Descrizione ufficio concessioni
|
||||
1|@62g%s|Indirizzo ufficio
|
||||
1|@99g%s|N. civico
|
||||
1|@111g%s|Comune
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@2g@6,ls
|
||||
1|S0|@10g@50,ls
|
||||
1|S1|@62g@35,ls
|
||||
1|S3|@99g@10,ls
|
||||
1|S7|@111g@6,ls
|
@ -1,14 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella valute
|
||||
1|@2g%s|Codice valuta
|
||||
1|@17g%s|Nome
|
||||
1|@49g%s|Cambio
|
||||
1|@65g%s|Data
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@2g@13,ls
|
||||
1|S0|@17g@25,ls
|
||||
1|S4|@44g@pn|###.###.##@,@@@@@
|
||||
1|D0|@65g@d
|
||||
|
@ -1,35 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella versamenti ed interessi IVA
|
||||
1|@2g%s|Anno
|
||||
1|@7g%s|Mese
|
||||
1|@14g%s|% I trim.
|
||||
1|@27g%s|% II trim.
|
||||
1|@40g%s|% III trim.
|
||||
1|@53g%s|% IV trim.
|
||||
1|@66g%s|% annuale
|
||||
2|@14g%s|% liq. diff.
|
||||
2|@40g%s|% liq. ann.
|
||||
3|@19g%s|I. period.
|
||||
3|@40g%s|I. annuale
|
||||
3|@67g%s|I. art.74
|
||||
4|@19g%s|I. cessaz.
|
||||
4|@40g%s|I. integr.
|
||||
4|@67g%s|I. acconto
|
||||
|
||||
[Rows]
|
||||
2|CODTAB[1,4]|@2g@4s
|
||||
2|CODTAB[5,6]|@7g@2s
|
||||
2|R0|@14g@pn|###,@@
|
||||
2|R1|@29g@pn|###,@@
|
||||
2|R2|@44g@pn|###,@@
|
||||
2|R3|@56g@pn|###,@@
|
||||
2|R4|@70g@pn|###,@@
|
||||
3|R11|@15g@pn|###,@@
|
||||
3|R12|@44g@pn|###,@@
|
||||
4|R5|@14g@pn|###.###.###,@@
|
||||
4|R6|@34g@pn|###.###.###,@@
|
||||
4|R7|@60g@pn|###.###.###,@@
|
||||
5|R8|@14g@pn|###.###.###,@@
|
||||
5|R9|@34g@pn|###.###.###,@@
|
||||
5|R10|@60g@pn|###.###.###,@@
|
@ -1,37 +0,0 @@
|
||||
[Relations]
|
||||
LF_COMUNI;STATO=S8|COM=S9
|
||||
%STA;CODTAB=S8;1;0;200
|
||||
|
||||
[Headers]
|
||||
132
|
||||
Tabella vettori
|
||||
1|@2g%s|Codice vettore
|
||||
1|@18g%s|Ragione sociale
|
||||
1|@70g%s|Indirizzo
|
||||
1|@110g%s|N.civico
|
||||
2|@2g%s|C.A.P.
|
||||
2|@10g%s|Localita'
|
||||
2|@47g%s|Comune
|
||||
2|@99g%s|Pr.
|
||||
2|@103g%s|Stato
|
||||
3|@2g%s|Telefono
|
||||
3|@40g%s|Fax
|
||||
3|@80g%s|Telex
|
||||
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@2g@8s
|
||||
1|S0|@18g@50,ls
|
||||
1|S1[1,35]|@70g@35,ls
|
||||
1|S1[36,45]|@110g@10,ls
|
||||
2|S7|@2g@5,ls
|
||||
2|S1[46,70]|@10g@35,ls
|
||||
2|13->DENCOM|@47g@50,ls
|
||||
2|13->PROVCOM|@99g@2,ls
|
||||
2|-200->S0|@103g@25,ls
|
||||
3|S5[1,10]|@2g@10,ls
|
||||
3|S3|@12g@20,ls
|
||||
3|S5[11,20]|@40g@10,ls
|
||||
3|S4|@51g@20,ls
|
||||
3|S2[1,10]|@80g@10,ls
|
||||
3|S2[11,30]|@91g@20,ls
|
@ -1,10 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella Zone
|
||||
1|@3g%s|Codice
|
||||
1|@14g%s|Descrizione
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@3g@2,ls
|
||||
1|S0|@14g@50,ls
|
||||
|
@ -8,6 +8,7 @@ Descrizione = Sistema
|
||||
Versione = 20070400
|
||||
Patch = 502
|
||||
|
||||
|
||||
[ba]
|
||||
Descrizione = Base
|
||||
|
||||
@ -56,6 +57,9 @@ Descrizione=AREA ACQUISTI E VENDITE
|
||||
[ve]
|
||||
Descrizione = Vendite
|
||||
|
||||
[vd]
|
||||
Descrizione = Vendita al dettaglio
|
||||
|
||||
[or]
|
||||
Descrizione = Ordini
|
||||
|
||||
@ -71,8 +75,8 @@ Descrizione = Provvigioni Agenti
|
||||
[sv]
|
||||
Descrizione = Statistiche di Vendita
|
||||
|
||||
[tp]
|
||||
Descrizione = Trasferimento PACK
|
||||
[vd]
|
||||
Descrizione = Vendita al dettaglio
|
||||
|
||||
[_area_magazzino_produzione]
|
||||
Descrizione=AREA MAGAZZINO E PRODUZIONE
|
||||
|
@ -299,8 +299,8 @@ void TCEtables::init_query_mode(TMask& m)
|
||||
m.disable(DLG_ATTIV);
|
||||
if (get_tabname() == "CCB")
|
||||
{
|
||||
m.show(F_CODSP_CCB,TRUE);
|
||||
m.show(F_CODATT_CCB,FALSE);
|
||||
m.show(F_CODSP_CCB);
|
||||
m.hide(F_CODATT_CCB);
|
||||
}
|
||||
}
|
||||
|
||||
@ -308,8 +308,8 @@ void TCEtables::init_query_insert_mode(TMask& m)
|
||||
{
|
||||
if (get_tabname() == "CCB")
|
||||
{
|
||||
m.show(F_CODSP_CCB,FALSE);
|
||||
m.show(F_CODATT_CCB,TRUE);
|
||||
m.hide(F_CODSP_CCB);
|
||||
m.show(F_CODATT_CCB);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -44,7 +44,7 @@ private:
|
||||
void show_plus_minus(TMask& m);
|
||||
|
||||
protected:
|
||||
virtual bool changing_mask(int mode) { return TRUE; }
|
||||
virtual bool changing_mask(int mode) { return true; }
|
||||
virtual TMask* get_mask(int mode);
|
||||
virtual const char* get_next_key();
|
||||
virtual bool protected_record(TRelation &r);
|
||||
@ -122,7 +122,7 @@ void TMov_qmask::on_user_search(TOperable_field& o)
|
||||
if (sht.run() == K_ENTER)
|
||||
{
|
||||
TToken_string& row = sht.row();
|
||||
set(F_IDMOV, row.get(1), TRUE);
|
||||
set(F_IDMOV, row.get(1), true);
|
||||
stop_run(K_AUTO_ENTER);
|
||||
}
|
||||
}
|
||||
@ -199,7 +199,7 @@ bool TMov_qmask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
break;
|
||||
case F_CGROWS:
|
||||
if (e == se_query_add || e == se_query_del)
|
||||
return FALSE;
|
||||
return false;
|
||||
break;
|
||||
case DLG_QUIT:
|
||||
if (e == fe_button)
|
||||
@ -222,7 +222,7 @@ bool TMov_qmask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TMov_qmask::can_be_closed() const
|
||||
@ -381,7 +381,7 @@ void TMov_emask::super_polish()
|
||||
for (int f = fields()-1; f >= 0; f--)
|
||||
{
|
||||
TMask_field& c = fld(f);
|
||||
c.set_dirty(FALSE);
|
||||
c.set_dirty(false);
|
||||
}
|
||||
}
|
||||
|
||||
@ -415,7 +415,7 @@ bool TMov_emask::test_inputability(const short* id, char flag)
|
||||
{
|
||||
if (!field(id[i]).empty())
|
||||
{
|
||||
ok = TRUE;
|
||||
ok = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -497,9 +497,9 @@ bool TMov_emask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
if (id.not_empty())
|
||||
{
|
||||
const TRectype& cat = _cespite.categoria();
|
||||
set(F_CATEGORIA, _cespite.get(CESPI_CODCAT), TRUE);
|
||||
set(F_DESC_CAT, cat.get("S0"), TRUE);
|
||||
if (e != fe_init && o.enabled())
|
||||
set(F_CATEGORIA, _cespite.get(CESPI_CODCAT), true);
|
||||
set(F_DESC_CAT, cat.get("S0"), true);
|
||||
if (o.enabled())
|
||||
{
|
||||
const TRectype& tpmov = cache().get("%TMC", get(F_CODMOV));
|
||||
|
||||
@ -601,7 +601,7 @@ bool TMov_emask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
get_currency(F_COSTO, csto);
|
||||
get_currency(F_VNONAMM, vnon);
|
||||
if (vnon > csto)
|
||||
return error_box(FR("Il valore non ammortizzabile non puo' superare %s"), csto.string(TRUE));
|
||||
return error_box(FR("Il valore non ammortizzabile non puo' superare %s"), csto.string(true));
|
||||
}
|
||||
break;
|
||||
case F_PLUSREIN:
|
||||
@ -613,14 +613,14 @@ bool TMov_emask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
get_currency(F_PLUSREIN, plus);
|
||||
const TCurrency val = csto-vnon;
|
||||
if (plus > val)
|
||||
return error_box(FR("La plusvalenza reinvestita non puo' superare %s"), val.string(TRUE));
|
||||
return error_box(FR("La plusvalenza reinvestita non puo' superare %s"), val.string(true));
|
||||
}
|
||||
break;
|
||||
case F_NORMALE:
|
||||
if (e == fe_close)
|
||||
{
|
||||
if (!test_inputability(fis_ids, _s5[10]))
|
||||
return FALSE;
|
||||
return false;
|
||||
const short fv[] = { F_COSTO, -F_VNONAMM, F_RIV75, F_RIV83, F_RIV90, F_RIV91, F_RIVGF, 0 };
|
||||
const short fa[] = { F_NORMALE, F_ACCELERATO, F_ANTICIPATO, F_QPERSE, F_FPRIVATO, F_QPERSEPRIV, 0 };
|
||||
const TCurrency val_amm = sum_fields(fv);
|
||||
@ -628,8 +628,8 @@ bool TMov_emask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
if (fon_amm > val_amm)
|
||||
{
|
||||
TString msg;
|
||||
msg << TR("Il fondo ammortamento fiscale (") << fon_amm.string(TRUE) << ')';
|
||||
msg << TR("non puo' superare il valore da ammortizzare (") << val_amm.string(TRUE) << ')';
|
||||
msg << TR("Il fondo ammortamento fiscale (") << fon_amm.string(true) << ')';
|
||||
msg << TR("non puo' superare il valore da ammortizzare (") << val_amm.string(true) << ')';
|
||||
return error_box(msg);
|
||||
}
|
||||
}
|
||||
@ -638,7 +638,7 @@ bool TMov_emask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
if (e == fe_close)
|
||||
{
|
||||
if (!test_inputability(civ_ids, _s5[11]))
|
||||
return FALSE;
|
||||
return false;
|
||||
const short fv[] = { F_COSTO, F_RIV75, F_RIV83, F_RIV90, F_RIV91, F_RIVGC, 0 };
|
||||
const short fa[] = { F_NORMALE2, F_ACCELERATO2, F_ANTICIPATO2, 0 };
|
||||
const TCurrency val_amm = sum_fields(fv);
|
||||
@ -646,8 +646,8 @@ bool TMov_emask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
if (fon_amm > val_amm)
|
||||
{
|
||||
TString msg;
|
||||
msg << TR("Il fondo ammortamento civilistico (") << fon_amm.string(TRUE) << ')';
|
||||
msg << TR("non puo' superare il valore da ammortizzare (") << val_amm.string(TRUE) << ')';
|
||||
msg << TR("Il fondo ammortamento civilistico (") << fon_amm.string(true) << ')';
|
||||
msg << TR("non puo' superare il valore da ammortizzare (") << val_amm.string(true) << ')';
|
||||
return error_box(msg);
|
||||
}
|
||||
}
|
||||
@ -659,7 +659,7 @@ bool TMov_emask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
real TMov_emask::calc_riv(const TRectype& salpro, int tipo) const
|
||||
@ -683,11 +683,7 @@ void TMov_emask::calc_plus_minus(int tipo, real& plus, real& minus) const
|
||||
const TDate dtlim(get(F_DTMOV));
|
||||
|
||||
TRelation rel(LF_MOVCE);
|
||||
TString expr; expr << "IDCESPITE==IDCESPITE|IDMOV==IDMOV|TPAMM==\"" << tipo << '"';
|
||||
rel.add(LF_AMMMV, expr);
|
||||
|
||||
TRectype& movsem = rel.curr();
|
||||
TRectype& ammmv = rel.curr(LF_AMMMV);
|
||||
const TString& idcespite = get(F_IDCESPITE);
|
||||
movsem.put(MOVCE_IDCESPITE, idcespite);
|
||||
TString filtro;
|
||||
@ -699,6 +695,12 @@ void TMov_emask::calc_plus_minus(int tipo, real& plus, real& minus) const
|
||||
if (items > 0) // Continua solo se esistono movimenti
|
||||
{
|
||||
cur.freeze();
|
||||
|
||||
// Astutamente aggiungo solo ora il file collegato
|
||||
TString expr; expr << "IDCESPITE==IDCESPITE|IDMOV==IDMOV|TPAMM==\"" << tipo << '"';
|
||||
rel.add(LF_AMMMV, expr);
|
||||
const TRectype& ammmv = rel.curr(LF_AMMMV);
|
||||
|
||||
for (cur = 0L; cur.pos() < items; ++cur)
|
||||
{
|
||||
plus += ammmv.get_real(AMMMV_PLUS);
|
||||
@ -711,7 +713,7 @@ bool TMov_emask::calc_amm(int tipo)
|
||||
{
|
||||
const TString& idcespite = _cespite.get(CESPI_IDCESPITE);
|
||||
if (idcespite.empty())
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
const TDate dtlim(get(F_DTMOV));
|
||||
_cespite.calc_amm(tipo, dtlim);
|
||||
@ -749,7 +751,7 @@ bool TMov_emask::calc_amm(int tipo)
|
||||
set(S_PLUS, plus);
|
||||
set(S_MINUS, minus);
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
void TMov_emask::set_fondi_inputability()
|
||||
@ -801,7 +803,7 @@ bool TMov_emask::on_key(KEY k)
|
||||
app().save_if_dirty();
|
||||
super_polish();
|
||||
}
|
||||
set(S_TIPO, 1, TRUE);
|
||||
set(S_TIPO, 1, true);
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
@ -857,7 +859,7 @@ bool TMovicespi::user_create()
|
||||
_prima_nota.cut(0);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TMovicespi::user_destroy()
|
||||
@ -865,7 +867,7 @@ bool TMovicespi::user_destroy()
|
||||
delete _emask;
|
||||
delete _qmask;
|
||||
delete _rel;
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
const char* TMovicespi::get_next_key()
|
||||
@ -1001,12 +1003,12 @@ void TMovicespi::show_plus_minus(TMask& m)
|
||||
{
|
||||
if (!plus.is_zero())
|
||||
{
|
||||
set_prompt(m.field(id_txt), TRUE);
|
||||
set_prompt(m.field(id_txt), true);
|
||||
m.set(id_fld, plus);
|
||||
}
|
||||
else
|
||||
{
|
||||
set_prompt(m.field(id_txt), FALSE);
|
||||
set_prompt(m.field(id_txt), false);
|
||||
m.set(id_fld, minus);
|
||||
}
|
||||
}
|
||||
@ -1027,7 +1029,7 @@ void TMovicespi::cg_mode()
|
||||
_qmask->set(F_NUMREG, numreg);
|
||||
|
||||
// Al primo inserimento devo impostare anche l'anno
|
||||
_qmask->set(F_ESERCIZIO, ini.get(MOV_ANNOES), TRUE);
|
||||
_qmask->set(F_ESERCIZIO, ini.get(MOV_ANNOES), true);
|
||||
|
||||
if (action != 'I' && action != 'M')
|
||||
{
|
||||
@ -1102,19 +1104,19 @@ void TMovicespi::init_insert_mode(TMask& m)
|
||||
TConfig ini(_prima_nota, para);
|
||||
|
||||
const TRectype& cau = cache().get(LF_CAUSALI, ini.get(MOV_CODCAUS));
|
||||
m.set(F_CODMOV, cau.get(CAU_COLLCESP), TRUE);
|
||||
m.set(F_CODMOV, cau.get(CAU_COLLCESP), true);
|
||||
if (m.field(F_TPDOC).active())
|
||||
m.set(F_TPDOC, ini.get(MOV_TIPODOC), TRUE);
|
||||
m.set(F_TPDOC, ini.get(MOV_TIPODOC), true);
|
||||
if (m.field(F_NDOC).active())
|
||||
m.set(F_NDOC, ini.get(MOV_NUMDOC), TRUE);
|
||||
m.set(F_NDOC, ini.get(MOV_NUMDOC), true);
|
||||
if (m.field(F_DTDOC).active())
|
||||
m.set(F_DTDOC, ini.get(MOV_DATADOC), TRUE);
|
||||
m.set(F_DTDOC, ini.get(MOV_DATADOC), true);
|
||||
|
||||
TString desc = ini.get(MOV_DESCR);
|
||||
desc.strip("\"");
|
||||
if (desc.empty())
|
||||
desc = cau.get(CAU_DESCR);
|
||||
m.set(F_DESC_MOV, desc, TRUE);
|
||||
m.set(F_DESC_MOV, desc, true);
|
||||
|
||||
TString16 codreg = ini.get(MOV_REG);
|
||||
if (codreg.not_empty())
|
||||
@ -1125,7 +1127,7 @@ void TMovicespi::init_insert_mode(TMask& m)
|
||||
for (int r = 0; r < s.items(); r++)
|
||||
{
|
||||
const real res = s.row(r).get(1);
|
||||
if (res > 0)
|
||||
if (res > ZERO)
|
||||
{
|
||||
m.set(iva==1 ? F_IMPVEN : F_COSTO, res);
|
||||
break;
|
||||
@ -1245,7 +1247,7 @@ int TMovicespi::rewrite(const TMask& m)
|
||||
|
||||
void TMovicespi::save_if_dirty()
|
||||
{
|
||||
if (save(TRUE))
|
||||
if (save(true))
|
||||
set_mode(MODE_MOD);
|
||||
}
|
||||
|
||||
@ -1262,7 +1264,7 @@ bool TMovicespi::remove()
|
||||
|
||||
_emask->recalc_amm();
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
int ce1500(int argc, char* argv[])
|
||||
|
@ -176,7 +176,7 @@ void TCespite::read_amm(int esercizio)
|
||||
AMMCE_MSG05, AMMCE_MSGD05, AMMCE_MSG06, NULL);
|
||||
|
||||
const real cde = ditta_cespiti().coefficiente_durata_esercizio();
|
||||
if (cde != 1.0)
|
||||
if (cde != UNO)
|
||||
_ammpro.put(AMMCE_MSG02, "X");
|
||||
|
||||
const int uso_promiscuo = get_int(CESPI_USOPROM);
|
||||
@ -363,7 +363,7 @@ TRectype& date2limit(const TDate& d)
|
||||
{
|
||||
static TAssoc_array limits;
|
||||
// const TString16 key = d.string(ANSI); // Non serve l'intera data: tabella del c....
|
||||
TString16 key; key.format("%04d", d.year());
|
||||
TString4 key; key.format("%04d", d.year());
|
||||
TRectype* lim = (TRectype*)limits.objptr(key);
|
||||
if (lim == NULL)
|
||||
{
|
||||
@ -437,7 +437,7 @@ real TCespite::calcola_spese_manutenzione(const real& valamm)
|
||||
{
|
||||
const real coeff = cce.coefficiente_durata_esercizio();
|
||||
real limite = get_limit();
|
||||
if (vspmanu < limite || limite < ZERO)
|
||||
if (vspmanu < limite || limite < ZERO) // Limite < 0 = nessun limite
|
||||
limite = vspmanu;
|
||||
vspmanu = coeff * limite;
|
||||
}
|
||||
@ -634,8 +634,12 @@ void TCespite::rip_jolly(TRelation& rel, const real& num, const real& den, int m
|
||||
MOVCE_RIV90, MOVCE_RIV91, MOVCE_RIVGF, MOVCE_RIVGC, NULL };
|
||||
for (int i = 0; flm[i]; i++)
|
||||
{
|
||||
real n = _salpro.get_real(flm[i]) * num / den;
|
||||
cce.arrotonda(n);
|
||||
real n = _salpro.get_real(flm[i]);
|
||||
if (!n.is_zero() && num != den)
|
||||
{
|
||||
n = n * num / den;
|
||||
cce.arrotonda(n);
|
||||
}
|
||||
movsem.put(flm[i], n);
|
||||
}
|
||||
rel.lfile(LF_MOVCE).rewrite();
|
||||
@ -649,9 +653,13 @@ void TCespite::rip_jolly(TRelation& rel, const real& num, const real& den, int m
|
||||
TString16 afl;
|
||||
for (int i = 0; fla[i]; i++)
|
||||
{
|
||||
afl = fla[i]; afl << "P";
|
||||
real n = _ammpro.get_real(afl) * num / den;
|
||||
cce.arrotonda(n);
|
||||
afl = fla[i]; afl << 'P';
|
||||
real n = _ammpro.get_real(afl);
|
||||
if (!n.is_zero() && num != den)
|
||||
{
|
||||
n = n * num / den;
|
||||
cce.arrotonda(n);
|
||||
}
|
||||
movam.put(fla[i], n);
|
||||
}
|
||||
rel.lfile(LF_MOVAM).rewrite();
|
||||
@ -663,10 +671,12 @@ void TCespite::rip_jolly(TRelation& rel, const real& num, const real& den, int m
|
||||
void TCespite::rip_elem(TRelation& rel, int mode)
|
||||
{
|
||||
log(TR("# Ripartizionamento importi in base agli elementi"));
|
||||
const real num = rel.curr(LF_MOVCE).get_real(MOVCE_NUMELE);
|
||||
const real den = _salpro.get_real(SALCE_NUMELE);
|
||||
if (den > ZERO)
|
||||
{
|
||||
const real num = rel.curr(LF_MOVCE).get_real(MOVCE_NUMELE);
|
||||
rip_jolly(rel, num, den, mode);
|
||||
}
|
||||
else
|
||||
log(FR("! - Numero elementi non valido: %s"), den.string());
|
||||
}
|
||||
@ -676,10 +686,12 @@ void TCespite::rip_elem(TRelation& rel, int mode)
|
||||
void TCespite::rip_costo(TRelation& rel, int mode)
|
||||
{
|
||||
log(TR("# Ripartizionamento importi in base al costo storico"));
|
||||
const real num = rel.curr(LF_MOVCE).get_real(MOVCE_CSTO);
|
||||
const real den = _salpro.get_real(SALCE_CSTO);
|
||||
if (den > ZERO)
|
||||
{
|
||||
const real num = rel.curr(LF_MOVCE).get_real(MOVCE_CSTO);
|
||||
rip_jolly(rel, num, den, mode);
|
||||
}
|
||||
else
|
||||
log(FR("! - Costo non valido: %s"), den.string());
|
||||
}
|
||||
@ -747,7 +759,7 @@ real TCespite::calc_quota(const real& valamm, const real& perric,
|
||||
}
|
||||
|
||||
// Caso normale
|
||||
quota = valamm * perric / 100.0;
|
||||
quota = valamm * perric / CENTO;
|
||||
pereff = perric;
|
||||
|
||||
const TDitta_cespiti& cce = ditta_cespiti();
|
||||
@ -778,7 +790,7 @@ real TCespite::calc_quota(const real& valamm, const real& perric,
|
||||
{
|
||||
quota = residuo;
|
||||
if (valamm > ZERO)
|
||||
pereff = (quota * 100.0) / (coeff_durata * valamm);
|
||||
pereff = (quota * CENTO) / (coeff_durata * valamm);
|
||||
else
|
||||
pereff = ZERO;
|
||||
}
|
||||
@ -794,7 +806,7 @@ real TCespite::calc_quote_perse(const real& valamm, const real& peric, const rea
|
||||
const TDitta_cespiti& cce = ditta_cespiti();
|
||||
const real coeff_durata = cce.coefficiente_durata_esercizio();
|
||||
|
||||
real quota = valamm * peric / 100.0 * coeff_durata;
|
||||
real quota = valamm * peric / CENTO * coeff_durata;
|
||||
if (mov_vend)
|
||||
{
|
||||
TDate inies, fines;
|
||||
@ -1328,8 +1340,6 @@ real TCespite::mov_val_ven(const TRectype& tmv)
|
||||
// Calcolo plusvalenza o minusvalenza
|
||||
void TCespite::cal_valenza(const TRectype& tmv, const TRectype& tmvam, TRectype& ammmv)
|
||||
{
|
||||
const TDitta_cespiti& dc = ditta_cespiti();
|
||||
|
||||
const real fondo = sum_fields(ammmv, AMMMV_QNOR, AMMMV_QACC, AMMMV_QANT) +
|
||||
sum_fields(tmvam, MOVAM_QNOR, MOVAM_QACC, MOVAM_QANT);
|
||||
|
||||
@ -1348,6 +1358,7 @@ void TCespite::cal_valenza(const TRectype& tmv, const TRectype& tmvam, TRectype&
|
||||
real plusminus = prezzo - resparven;
|
||||
if (ratio > ZERO)
|
||||
{
|
||||
const TDitta_cespiti& dc = ditta_cespiti();
|
||||
plusminus *= ratio;
|
||||
dc.arrotonda(plusminus);
|
||||
}
|
||||
@ -1393,18 +1404,11 @@ void TCespite::scansione_movimenti(const TDate& data_limite, bool is_valid)
|
||||
|
||||
TRelation rel(LF_MOVCE);
|
||||
|
||||
TString expr; expr << "IDCESPITE==IDCESPITE|IDMOV==IDMOV|TPAMM==\"" << _tipo_sit << '"';
|
||||
rel.add(LF_MOVAM, expr);
|
||||
rel.add(LF_AMMMV, expr);
|
||||
|
||||
TRectype& movsem = rel.curr();
|
||||
TRectype& movam = rel.curr(LF_MOVAM);
|
||||
TRectype& ammmv = rel.curr(LF_AMMMV);
|
||||
const TString idcespite = get(CESPI_IDCESPITE);
|
||||
const TString16 idcespite = get(CESPI_IDCESPITE);
|
||||
movsem.put(MOVCE_IDCESPITE, idcespite);
|
||||
TString filtro;
|
||||
filtro << "(IDRET==\"\")";
|
||||
filtro << "&&(ANSI(DTMOV)>=\"" << inies.string(ANSI) << "\")";
|
||||
filtro << "(IDRET==\"\")&&(ANSI(DTMOV)>=\"" << inies.string(ANSI) << "\")";
|
||||
if (data_limite.ok())
|
||||
filtro << "&&(ANSI(DTMOV)<=\"" << data_limite.string(ANSI) << "\")";
|
||||
TCursor cur(&rel, filtro, 2, &movsem, &movsem);
|
||||
@ -1412,7 +1416,14 @@ void TCespite::scansione_movimenti(const TDate& data_limite, bool is_valid)
|
||||
if (items > 0) // Continua solo se esistono movimenti
|
||||
{
|
||||
cur.freeze();
|
||||
|
||||
|
||||
// Aggiungo astutamente solo ora i file alla relazione
|
||||
TString expr; expr << "IDCESPITE==IDCESPITE|IDMOV==IDMOV|TPAMM==\"" << _tipo_sit << '"';
|
||||
rel.add(LF_MOVAM, expr);
|
||||
rel.add(LF_AMMMV, expr);
|
||||
TRectype& movam = rel.curr(LF_MOVAM);
|
||||
TRectype& ammmv = rel.curr(LF_AMMMV);
|
||||
|
||||
// Creo record campione per totale movimento + relative rettifiche
|
||||
TVariable_rectype tmv(LF_MOVCE);
|
||||
tmv.add_field(new TVariable_field("VSPMANU"));
|
||||
@ -1828,7 +1839,7 @@ bool TCespite::calc_amm(int tipo_sit, const TDate& data_limite, bool recalc_spe_
|
||||
log(FR("* Inizio calcolo situazione %d cespite %s"), tipo_sit, (const char*)idcespite);
|
||||
|
||||
#ifdef DBG
|
||||
if (tipo_sit == 1 && atol(idcespite) == 229L)
|
||||
if (tipo_sit == 1 && atol(idcespite) == 1L)
|
||||
{
|
||||
tipo_sit = 1; // Put your breakpoint here
|
||||
}
|
||||
|
@ -60,7 +60,12 @@ bool TOpenesc_mask::check_oldes()
|
||||
msg << TR("è già stata effettuata la chiusura");
|
||||
const TString8 codatt = ccb.get("CODTAB").mid(4);
|
||||
msg << TR("\ndell'attività ") << cache().get("%CAT", codatt, "S0");
|
||||
#ifdef DBG
|
||||
msg << "\nSi desidera forzare la riapertura?";
|
||||
ok = yesno_box(msg);
|
||||
#else
|
||||
ok = error_box(msg);
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -81,7 +86,11 @@ bool TOpenesc_mask::on_field_event(TOperable_field& o, TField_event e, long joll
|
||||
if (e == fe_init || e == fe_modify)
|
||||
{
|
||||
TEsercizi_contabili esc;
|
||||
const int nes = get_int(F_OLDES)+1;
|
||||
const int oldes = get_int(F_OLDES);
|
||||
int nes = esc.next(oldes);
|
||||
if (nes < 0)
|
||||
nes = oldes+1;
|
||||
|
||||
set(F_NEWES, nes, TRUE);
|
||||
if (esc.exist(nes))
|
||||
{
|
||||
@ -168,37 +177,35 @@ bool TOpenesc::crea_esercizio(int oldes, int newes, const TDate& ies, const TDat
|
||||
{
|
||||
// Crea l'esercizio contabile se necessario
|
||||
TTable esc("ESC");
|
||||
esc.put("CODTAB", newes);
|
||||
TString4 key_new;
|
||||
key_new.format("%04d",newes);
|
||||
esc.put("CODTAB", key_new);
|
||||
if (esc.read() != NOERR)
|
||||
{
|
||||
if (!has_module(CGAUT))
|
||||
{
|
||||
TTable esc("ESC");
|
||||
esc.put("CODTAB", newes);
|
||||
if (esc.read() != NOERR)
|
||||
{
|
||||
esc.zero();
|
||||
esc.put("CODTAB", newes);
|
||||
esc.put("D0", ies);
|
||||
esc.put("D1", fes);
|
||||
esc.write();
|
||||
}
|
||||
esc.zero();
|
||||
esc.put("CODTAB", key_new);
|
||||
esc.put("D0", ies);
|
||||
esc.put("D1", fes);
|
||||
esc.write();
|
||||
}
|
||||
else
|
||||
return error_box(TR("Attenzione: non esiste ancora l'esercizio contabile %04d"), newes);
|
||||
|
||||
}
|
||||
|
||||
// Crea l'esercizio cespiti se necessario
|
||||
TTable cce("CCE");
|
||||
TString8 key; key.format("%04d", oldes);
|
||||
const TRectype& oldrec = cache().get("CCE", key);
|
||||
cce.put("CODTAB", newes);
|
||||
TString4 key_old;
|
||||
key_old.format("%04d", oldes);
|
||||
const TRectype& oldrec = cache().get("CCE", key_old);
|
||||
|
||||
TTable cce("CCE");
|
||||
cce.put("CODTAB", key_new);
|
||||
const bool found = cce.read() == NOERR;
|
||||
if (!found)
|
||||
{
|
||||
cce.zero();
|
||||
cce.put("CODTAB", newes);
|
||||
cce.put("CODTAB", key_new);
|
||||
}
|
||||
cce.put("S5", calc_coeff(ies, fes)); // Calcola coefficiente durata esercizio
|
||||
cce.put("S6", oldrec.get("S6")); // Copia tipo arrotondamento
|
||||
@ -353,7 +360,9 @@ void TOpenesc::crea_saldi(int oldes, int newes) const
|
||||
|
||||
const int err = rel.write();
|
||||
if (err != NOERR) // Should never happen!
|
||||
{
|
||||
rel.rewrite();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -368,9 +377,11 @@ void TOpenesc::incr_zero(TRectype& rec, const char* val, const char* valp) const
|
||||
void TOpenesc::crea_ammortamenti(int oldes, int newes) const
|
||||
{
|
||||
TRelation rel(LF_AMMCE);
|
||||
|
||||
rel.add(LF_AMMCE, "IDCESPITE==IDCESPITE|CODES==CODES|TPSALDO==1|TPAMM==TPAMM", 1, 0, 883);
|
||||
TRectype& rec = rel.curr();
|
||||
const TRectype& ammce1 = rel.curr(-883);
|
||||
|
||||
TRectype& rec = rel.curr();
|
||||
TString str;
|
||||
str << '(' << SALCE_CODES << "==" << oldes << ")&&(" << SALCE_TPSALDO << "==2)";
|
||||
TCursor cur(&rel, str);
|
||||
@ -386,7 +397,9 @@ void TOpenesc::crea_ammortamenti(int oldes, int newes) const
|
||||
rec.zero(AMMCE_CSCEN);
|
||||
rec.zero(AMMCE_FZPER);
|
||||
rec.zero(AMMCE_FZQUO);
|
||||
rec.put(AMMCE_PNOR, ammce1.get(AMMCE_PNOR));
|
||||
// Le percentuali del nuovo esercizio devono essere uguali a quelle FINALI dell'esercizio precedente
|
||||
// Purtroppo sono sempre a zero per cui prendo quelle INIZIALI
|
||||
rec.put(AMMCE_PNOR, ammce1.get(AMMCE_PNOR));
|
||||
rec.put(AMMCE_PACC, ammce1.get(AMMCE_PACC));
|
||||
rec.put(AMMCE_PANT, ammce1.get(AMMCE_PANT));
|
||||
incr_zero(rec, AMMCE_QNOR, AMMCE_QNORP);
|
||||
@ -428,4 +441,4 @@ int ce2200(int argc, char* argv[])
|
||||
TOpenesc a;
|
||||
a.run(argc, argv, TR("Cambio esercizio"));
|
||||
return 0;
|
||||
}
|
||||
}
|
@ -26,6 +26,7 @@ END
|
||||
NUMBER F_OLDES 4
|
||||
BEGIN
|
||||
PROMPT 2 3 "Esercizio corrente "
|
||||
FLAGS "Z"
|
||||
USE CCE
|
||||
JOIN ESC ALIAS 2 INTO CODTAB==CODTAB
|
||||
INPUT CODTAB F_OLDES
|
||||
@ -36,6 +37,7 @@ BEGIN
|
||||
OUTPUT F_OLDINIZIO 2@->D0
|
||||
OUTPUT F_OLDFINE 2@->D1
|
||||
CHECKTYPE REQUIRED
|
||||
FLAGS "Z"
|
||||
WARNING "Inserire un esercizio valido"
|
||||
END
|
||||
|
||||
@ -54,6 +56,7 @@ END
|
||||
NUMBER F_NEWES 4
|
||||
BEGIN
|
||||
PROMPT 2 4 "Nuovo esercizio "
|
||||
FLAGS "Z"
|
||||
USE ESC
|
||||
INPUT CODTAB F_OLDES
|
||||
DISPLAY "Codice" CODTAB
|
||||
@ -63,6 +66,7 @@ BEGIN
|
||||
OUTPUT F_NEWINIZIO D0
|
||||
OUTPUT F_NEWFINE D1
|
||||
CHECKTYPE REQUIRED
|
||||
FLAGS "Z"
|
||||
GROUP 2
|
||||
END
|
||||
|
||||
|
@ -349,16 +349,17 @@ void TStampa_prospetto::aggiorna_totali(TCursor& cur, const int tipo, TTipo_cesp
|
||||
real riv83 = recsalce.get_real(SALCE_RIV83);
|
||||
real riv90 = recsalce.get_real(SALCE_RIV90);
|
||||
real riv91 = recsalce.get_real(SALCE_RIV91);
|
||||
real riv = riv75+riv83+riv90+riv91;
|
||||
|
||||
if (tipo == 1)
|
||||
{
|
||||
real rivgf = recsalce.get_real(SALCE_RIVGF);
|
||||
_cat._tot_riv += riv75 + riv83 + riv90 + riv91 + rivgf;
|
||||
const real rivgf = recsalce.get_real(SALCE_RIVGF);
|
||||
_cat._tot_riv += riv + rivgf;
|
||||
}
|
||||
else
|
||||
{
|
||||
real rivgc = recsalce.get_real(SALCE_RIVGC);
|
||||
_cat._tot_riv += riv75 + riv83 + riv90 + riv91 + rivgc;
|
||||
const real rivgc = recsalce.get_real(SALCE_RIVGC);
|
||||
_cat._tot_riv += riv + rivgc;
|
||||
}
|
||||
|
||||
// valori della riga 2 (e, giá che si fa la scansione dei movimenti, anche i valori dei movam della riga 3)
|
||||
@ -400,6 +401,7 @@ void TStampa_prospetto::aggiorna_totali(TCursor& cur, const int tipo, TTipo_cesp
|
||||
riv83 = mov.get_real(MOVCE_RIV83);
|
||||
riv90 = mov.get_real(MOVCE_RIV90);
|
||||
riv91 = mov.get_real(MOVCE_RIV91);
|
||||
riv = riv75+riv83+riv90+riv91;
|
||||
csto = mov.get_real(MOVCE_CSTO);
|
||||
// inquietante modo di selezionare la rivg (rivgf o rivgc) in base al tipo senza usare una if else!
|
||||
real rivg = mov.get_real(tipo == 1 ? MOVCE_RIVGF : MOVCE_RIVGC);
|
||||
@ -409,15 +411,15 @@ void TStampa_prospetto::aggiorna_totali(TCursor& cur, const int tipo, TTipo_cesp
|
||||
real qant = amm.get_real(MOVAM_QANT);
|
||||
|
||||
if (tmc == 'R')
|
||||
_cat._tot_riveser += (riv75 + riv83 + riv90 + riv91 + rivg) * signum;
|
||||
_cat._tot_riveser += (riv + rivg) * signum;
|
||||
if (tmc == 'I' || (tmc <= ' ' && segno == '+'))
|
||||
{
|
||||
_cat._tot_acqincr += (csto - vnonamm2 + riv75 + riv83 + riv90 + riv91 + rivg) * signum;
|
||||
_cat._tot_acqincr += (csto - vnonamm2 + riv + rivg) * signum;
|
||||
_cat._tot_incr += (qnor + qacc + qant) * signum;
|
||||
}
|
||||
if (tmc == 'E' || (tmc <= ' ' && segno == '-'))
|
||||
{
|
||||
_cat._tot_cesselim2 += (csto - vnonamm2 + riv75 + riv83 + riv90 + riv91 + rivg) * (-signum);
|
||||
_cat._tot_cesselim2 += (csto - vnonamm2 + riv + rivg) * (-signum);
|
||||
_cat._tot_cesselim3 += (qnor + qant + qacc) * (-signum);
|
||||
}
|
||||
if (tmc == 'P')
|
||||
|
21
ce/celib.cpp
21
ce/celib.cpp
@ -170,13 +170,16 @@ void TDitta_cespiti::init_mask(TMask& m)
|
||||
// Arrotonda un numero in base ai parametri ditta
|
||||
void TDitta_cespiti::arrotonda(real& n) const
|
||||
{
|
||||
const char tipo = _cce.get_char("S6");
|
||||
const int dec = TCurrency::get_firm_dec();
|
||||
switch (tipo)
|
||||
if (!n.is_zero())
|
||||
{
|
||||
case '+': n.ceil(dec); break;
|
||||
case '-': n.floor(dec); break;
|
||||
default : n.round(dec); break;
|
||||
const char tipo = _cce.get_char("S6");
|
||||
const int dec = TCurrency::get_firm_dec();
|
||||
switch (tipo)
|
||||
{
|
||||
case '+': n.ceil(dec); break;
|
||||
case '-': n.floor(dec); break;
|
||||
default : n.round(dec); break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -238,14 +241,14 @@ static bool cac_filter_func(const TRelation* rel)
|
||||
{
|
||||
const TString& grsp = rel->curr().get("CODTAB");
|
||||
if (grsp[0] == ' ')
|
||||
return TRUE;
|
||||
return true;
|
||||
return _cac_filter.compare(grsp, 6) == 0;
|
||||
}
|
||||
|
||||
bool TDitta_cespiti::on_category_event(TOperable_field& o, TField_event e, long jolly)
|
||||
{
|
||||
if (e != fe_init && e != fe_modify && e != fe_button && e != fe_close)
|
||||
return TRUE;
|
||||
return true;
|
||||
|
||||
TEdit_field& fld = (TEdit_field&)o;
|
||||
const bool by_code = fld.is_kind_of(CLASS_REAL_FIELD);
|
||||
@ -326,7 +329,7 @@ bool TDitta_cespiti::on_category_event(TOperable_field& o, TField_event e, long
|
||||
return fld.error_box(fld.get_warning());
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
// Inizializza una ditta cespiti vuota
|
||||
|
@ -1,13 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella Categorie cespiti
|
||||
1|@0g%s|Gruppo
|
||||
1|@7g%s|Specie
|
||||
1|@14g%s|Cat.
|
||||
1|@19g%s|Descrizione
|
||||
|
||||
[Rows]
|
||||
1|CODTAB[1,2]|@0g@2s
|
||||
1|CODTAB[3,6]|@7g@4s
|
||||
1|CODTAB[7,8]|@14g@2s
|
||||
1|S0|@19g@60,ls
|
@ -1,11 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella Attivita' cespiti
|
||||
1|@0g%s|Gruppo
|
||||
1|@7g%s|Specie
|
||||
1|@14g%s|Descrizione
|
||||
|
||||
[Rows]
|
||||
1|CODTAB[1,2]|@0g@2s
|
||||
1|CODTAB[3,6]|@7g@4s
|
||||
1|S0|@14g@60,ls
|
28
ce/cetbccb.h
28
ce/cetbccb.h
@ -1,20 +1,20 @@
|
||||
// campi maschera cetbccb.msk
|
||||
|
||||
#define F_CODESER_CCB 101
|
||||
#define F_DATAINI_CCB 102
|
||||
#define F_DATAFINE_CCB 103
|
||||
#define F_DESCRSP_CCB 104
|
||||
#define F_CODGR_CCB 105
|
||||
#define F_DESCRGR_CCB 106
|
||||
#define F_CODSP_CCB 107
|
||||
#define F_CODATT_CCB 108
|
||||
#define F_CODESER_CCB 101
|
||||
#define F_DATAINI_CCB 102
|
||||
#define F_DATAFINE_CCB 103
|
||||
#define F_DESCRSP_CCB 104
|
||||
#define F_CODGR_CCB 105
|
||||
#define F_DESCRGR_CCB 106
|
||||
#define F_CODSP_CCB 107
|
||||
#define F_CODATT_CCB 108
|
||||
|
||||
#define F_LEASING 110
|
||||
#define F_BOLLATO 111
|
||||
#define F_MOV_GEN 112
|
||||
#define F_CHIUSO 113
|
||||
#define F_LEASING 110
|
||||
#define F_BOLLATO 111
|
||||
#define F_MOV_GEN 112
|
||||
#define F_CHIUSO 113
|
||||
|
||||
#define F_ANNOREG 115
|
||||
#define F_CODREG 116
|
||||
#define F_ANNOREG 115
|
||||
#define F_CODREG 116
|
||||
|
||||
|
||||
|
@ -1,19 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella Esercizi/Gruppi/Specie
|
||||
1|@0g%s|Es.
|
||||
1|@5g%s|Gruppo
|
||||
1|@12g%s|Specie
|
||||
1|@19g%s|Leasing
|
||||
1|@28g%s|Boll.st.
|
||||
1|@37g%s|Mov.gen.
|
||||
1|@46g%s|Chiuso
|
||||
|
||||
[Rows]
|
||||
1|CODTAB[1,4]|@0g@4s
|
||||
1|CODTAB[5,6]|@5g@2s
|
||||
1|CODTAB[7,10]|@12g@4s
|
||||
1|B0|@19g@f
|
||||
1|B1|@28g@f
|
||||
1|B3|@37g@f
|
||||
1|B2|@46g@f
|
@ -1,38 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella Esercizi cespiti
|
||||
1|@0g%s|Eser.
|
||||
1|@6g%s|Tipo cont.
|
||||
1|@19g%s|Es.corr.
|
||||
1|@28g%s|Prof.
|
||||
1|@34g%s|Es.di cost.
|
||||
1|@46g%s|Rinvio
|
||||
1|@53g%s|Art.14
|
||||
1|@60g%s|Arrotond.
|
||||
1|@73g%s|Tipo rip.
|
||||
2|@6g%s|Amm.parti vend.
|
||||
2|@22g%s|Ragguaglio
|
||||
2|@33g%s|Esposizione
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@0g@4s
|
||||
1|I0|@7g@12t
|
||||
1|B6|@19g@f
|
||||
1|B0|@28g@f
|
||||
1|B1|@34g@f
|
||||
1|B2|@46g@f
|
||||
1|B7|@53g@f
|
||||
1|S6|@60g@12t
|
||||
1|I1|@73g@8t
|
||||
2|B3|@6g@f
|
||||
2|B4|@22g@f
|
||||
2|B5|@33g@f
|
||||
|
||||
[Translations]
|
||||
5|I0|1|Ordinaria
|
||||
5|I0|2|Semplificata
|
||||
5|S6|/|alla lira
|
||||
5|S6|+|per eccesso
|
||||
5|S6|-|per difetto
|
||||
5|I1|1|a mesi
|
||||
5|I1|2|a giorni
|
@ -1,9 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella Gruppi cespiti
|
||||
1|@0g%s|Cod.
|
||||
1|@4g%s|Descrizione
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@0g@2s
|
||||
1|S0|@4g@60,ls
|
@ -1,9 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella Impianti cespiti
|
||||
1|@0g%s|Codice
|
||||
1|@11g%s|Descrizione
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@0g@10s
|
||||
1|S0|@11g@60,ls
|
@ -1,19 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella Limiti cespiti
|
||||
1|@0g%s|G.
|
||||
1|@3g%s|M.
|
||||
1|@6g%s|Anno
|
||||
1|@11g%s| Autovetture
|
||||
1|@27g%s| Autocaravan
|
||||
1|@43g%s| Motocicli
|
||||
1|@59g%s| Ciclomotori
|
||||
|
||||
[Rows]
|
||||
1|CODTAB[7,8]|@0g@2s
|
||||
1|CODTAB[5,6]|@3g@2s
|
||||
1|CODTAB[1,4]|@6g@4s
|
||||
1|R0|@11g@15,rn
|
||||
1|R1|@27g@15,rn
|
||||
1|R2|@43g@15,rn
|
||||
1|R3|@59g@15,rn
|
@ -1,20 +0,0 @@
|
||||
[Headers]
|
||||
132
|
||||
Tabella Localizzazioni cespiti
|
||||
1|@0g%s|Codice
|
||||
1|@11g%s|Stabilimento
|
||||
1|@62g%s|Reparto
|
||||
1|@113g%s|U.loc.
|
||||
2|@11g%s|Ufficio
|
||||
2|@62g%s|Persona di riferimento
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@0g@10s
|
||||
1|S0|@11g@50,ls
|
||||
1|S1|@62g@50,ls
|
||||
1|I0|@113g@3n
|
||||
2|S2|@11g@50,ls
|
||||
2|S3|@62g@50,ls
|
||||
|
||||
[Footers]
|
||||
|
@ -1,66 +0,0 @@
|
||||
[Headers]
|
||||
80
|
||||
Tabella Tipi movimento cespiti
|
||||
2|@0g%s|Cod.
|
||||
2|@4g%s|Descrizione
|
||||
2|@55g%s|Tipo gen.
|
||||
1|@66g%s|Applicabile a
|
||||
2|@65g%s|B.m.
|
||||
2|@70g%s|B.i.
|
||||
2|@75g%s|C.p.
|
||||
3|@4g%s|Segni
|
||||
3|@10g%s|Tipo mov. da rett.
|
||||
3|@29g%s|Gen.nuovo ce.
|
||||
3|@43g%s|Amm.sul mov.
|
||||
3|@56g%s|Gen.plus/min
|
||||
3|@69g%s|Tot.pr.bil.
|
||||
4|@4g%s|Doc.
|
||||
4|@9g%s|I.ven.
|
||||
4|@16g%s|El.
|
||||
4|@20g%s|C.st.
|
||||
4|@26g%s|V.non a.
|
||||
4|@35g%s|Pl.re.
|
||||
4|@42g%s|R.leg.
|
||||
4|@49g%s|R.g.f.
|
||||
4|@56g%s|R.g.c.
|
||||
4|@63g%s|F.a.f.
|
||||
4|@70g%s|F.a.c.
|
||||
4|@77g%s|Q.p.
|
||||
|
||||
[Rows]
|
||||
1|CODTAB|@0g@1s
|
||||
1|S0|@4g@50,ls
|
||||
1|I0|@55g@9t
|
||||
1|B0|@65g@f
|
||||
1|B1|@70g@f
|
||||
1|B2|@75g@f
|
||||
2|S7|@4g@1t
|
||||
2|S8|@10g@1s
|
||||
2|B3|@29g@f
|
||||
2|B4|@43g@f
|
||||
2|B5|@56g@f
|
||||
2|S6|@56g@15t
|
||||
3|S5[1,1]|@4g@1s
|
||||
3|S5[3,3]|@9g@1s
|
||||
3|S5[4,4]|@16g@1s
|
||||
3|S5[5,5]|@20g@1s
|
||||
3|S5[6,6]|@26g@1s
|
||||
3|S5[7,7]|@35g@1s
|
||||
3|S5[8,8]|@42g@1s
|
||||
3|S5[9,9]|@49g@1s
|
||||
3|S5[10,10]|@56g@1s
|
||||
3|S5[11,11]|@63g@1s
|
||||
3|S5[12,12]|@70g@1s
|
||||
3|S5[13,13]|@77g@1s
|
||||
|
||||
[Translations]
|
||||
4|I0|1|Movimento
|
||||
4|I0|2|Rettifica
|
||||
4|S7|0|+
|
||||
4|S7|1|-
|
||||
4|S7|2|=
|
||||
4|S6| |Nessuno"
|
||||
4|S6|I|Incremento"
|
||||
4|S6|E|Eliminazione"
|
||||
4|S6|P|Plusvalenza"
|
||||
4|S6|R|Rivalutazione"
|
@ -766,11 +766,11 @@ void TClifo_application::indsp_sheet_rebuilder()
|
||||
{
|
||||
TClifo_application& a = app();
|
||||
TString_array& righe = a.indsp_sheet().rows_array();
|
||||
const int n=righe.items();
|
||||
const int n = righe.items();
|
||||
a.reset_sheet();
|
||||
// Rebuild Sheets
|
||||
TToken_string rigav;
|
||||
for (int i=0; i<n; i++)
|
||||
TToken_string rigav;
|
||||
for (int i = 0; i < n; i++)
|
||||
{
|
||||
TToken_string& riga= righe.row(i);
|
||||
rigav.format("%d", i+1);
|
||||
@ -788,24 +788,24 @@ bool TClifo_application::indsp_notify(TSheet_field& indsp, int r, KEY key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case K_INS:
|
||||
case K_CTRL + K_INS:
|
||||
// request to add the row #r
|
||||
// To avoid rewriting of existing record.
|
||||
// To avoid inserts in the middle of the sheet
|
||||
if (r != -1 && indsp.items() > (r+1))
|
||||
{
|
||||
error_box(TR("Si possono aggiungere indirizzi solo alla fine"));
|
||||
return FALSE; //Refuse permission
|
||||
}
|
||||
break;
|
||||
if (r != -1 && indsp.items() > (r+1))
|
||||
return error_box(TR("Si possono aggiungere indirizzi solo alla fine!"));
|
||||
break;
|
||||
case K_ENTER:
|
||||
case K_DEL:
|
||||
indsp_sheet_rebuilder();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return TRUE;
|
||||
case K_DEL:
|
||||
if (r < indsp.items() - 1)
|
||||
return error_box(TR("Si puo' eliminare solo l'ultimo indirizzo!"));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TClifo_application::effetti_notify(TSheet_field& pnae, int r, KEY key)
|
||||
|
@ -90,8 +90,7 @@ protected:
|
||||
|
||||
public:
|
||||
// @cmember Disabilita la verifica del modulo : essendo una anagrafica, va sempre abilitata
|
||||
virtual bool check_autorization() const
|
||||
{return FALSE;}
|
||||
virtual bool check_autorization() const { return false; }
|
||||
tipo_descr _tipo_des; // Il tipo di causale corrente
|
||||
|
||||
void compila_array (const TString&, int, int, int);
|
||||
@ -99,7 +98,7 @@ public:
|
||||
TSheet_field& ss() const { return *_sheet; }
|
||||
TMask& ss_mask() const { return _sheet->sheet_mask(); }
|
||||
|
||||
void add_riga (int numrig, char sz, TBill& tc, const TString& d, const TString& da);
|
||||
void add_riga (int numrig, char sz, const TBill& tc, const TString& d, const TString& da);
|
||||
bool mostra_campi();
|
||||
|
||||
bool valuta() const { return _valuta; }
|
||||
@ -113,7 +112,7 @@ HIDDEN TCaus_app& app() { return (TCaus_app&) main_app(); }
|
||||
|
||||
bool TCaus_app::filtra_reg(const TRelation * r)
|
||||
{
|
||||
const TRectype& rec = r->lfile().curr();
|
||||
const TRectype& rec = r->curr();
|
||||
const int anno = atoi(rec.get("CODTAB").left(4));
|
||||
|
||||
bool ok = anno == app().anno_iva();
|
||||
@ -178,10 +177,10 @@ void TCaus_app::clear_descr()
|
||||
{
|
||||
if (_tipo_des != no_descr)
|
||||
{
|
||||
TArray& a = ss().rows_array();
|
||||
TString_array& a = ss().rows_array();
|
||||
for (int i = 0; i < a.items(); i++)
|
||||
{
|
||||
TToken_string& r = (TToken_string&)a[i];
|
||||
TToken_string& r = a.row(i);
|
||||
r.add("", 0);
|
||||
}
|
||||
_tipo_des = no_descr;
|
||||
@ -676,7 +675,7 @@ int TCaus_app::read(TMask& m)
|
||||
return err;
|
||||
}
|
||||
|
||||
void TCaus_app::add_riga(int numrig, char sz, TBill& tc, const TString& d, const TString& da)
|
||||
void TCaus_app::add_riga(int numrig, char sz, const TBill& tc, const TString& d, const TString& da)
|
||||
{
|
||||
TToken_string& riga = ss().row(numrig);
|
||||
riga = riga.get(0); // Lascia invariata la descrizione ...
|
||||
@ -689,26 +688,21 @@ void TCaus_app::add_riga(int numrig, char sz, TBill& tc, const TString& d, const
|
||||
|
||||
void TCaus_app::load_rcaus(TMask& m)
|
||||
{
|
||||
const TString16 cod(_rel->lfile().get(RCA_CODCAUS));
|
||||
TString d, da(50);
|
||||
|
||||
ss().destroy();
|
||||
|
||||
const int last = _rcaus_rec->last_row();
|
||||
for (int i = 1; i <= last; i++)
|
||||
{
|
||||
TRectype & r = _rcaus_rec->row(i, TRUE);
|
||||
const TRectype & r = _rcaus_rec->row(i, TRUE);
|
||||
const char sz = r.get_char(RCA_SEZIONE);
|
||||
const char cf = r.get_char(RCA_TIPOCF);
|
||||
const int g = r.get_int(RCA_GRUPPO);
|
||||
const int c = r.get_int(RCA_CONTO);
|
||||
const long s = r.get_long(RCA_SOTTOCONTO);
|
||||
d = r.get(RCA_CODDESC);
|
||||
da.cut(0);
|
||||
if (d.not_empty())
|
||||
da = cache().get("%DPN", d, "S0");
|
||||
const TString8 d = r.get(RCA_CODDESC);
|
||||
const TString& da = cache().get("%DPN", d, "S0");
|
||||
|
||||
TBill tc(g,c,s,cf);
|
||||
const TBill tc(g,c,s,cf);
|
||||
add_riga(i-1, sz, tc, d, da);
|
||||
}
|
||||
}
|
||||
|
@ -31,7 +31,8 @@
|
||||
#define F_DES_DOC 128
|
||||
#define F_DES_REG 129
|
||||
#define F_MOVIND 130
|
||||
#define F_SOLAIVA 131
|
||||
#define F_SOLAIVA 131
|
||||
#define F_PROVV 132
|
||||
|
||||
#define SS_SEZIONE 102
|
||||
#define SS_TIPOCF 103
|
||||
|
@ -70,8 +70,8 @@ BEGIN
|
||||
CHECKTYPE NORMAL
|
||||
FLAGS "U"
|
||||
ADD NONE
|
||||
MESSAGE EMPTY CLEAR,F_SOLAIVA
|
||||
MESSAGE ENABLE,F_SOLAIVA
|
||||
MESSAGE EMPTY CLEAR,F_SOLAIVA|ENABLE,F_PROVV
|
||||
MESSAGE ENABLE,F_SOLAIVA|CLEAR,F_PROVV
|
||||
END
|
||||
|
||||
STRING F_DES_DOC 50
|
||||
@ -158,11 +158,11 @@ LISTBOX F_TIPO_MOV_2 1 20
|
||||
BEGIN
|
||||
PROMPT 2 5 "Tipo movimento "
|
||||
FIELD TIPOMOV
|
||||
ITEM " |Nessuno" MESSAGE COPY,F_TIPO_MOV
|
||||
ITEM "1|Fattura" MESSAGE COPY,F_TIPO_MOV
|
||||
ITEM "3|Incasso/pagamento " MESSAGE COPY,F_TIPO_MOV
|
||||
ITEM "5|Insoluto" MESSAGE COPY,F_TIPO_MOV
|
||||
ITEM "6|Pagamento insoluto" MESSAGE COPY,F_TIPO_MOV
|
||||
ITEM " |Nessuno" MESSAGE COPY,F_TIPO_MOV|ENABLE,F_PROVV
|
||||
ITEM "1|Fattura" MESSAGE COPY,F_TIPO_MOV|CLEAR,F_PROVV
|
||||
ITEM "3|Incasso/pagamento " MESSAGE COPY,F_TIPO_MOV|CLEAR,F_PROVV
|
||||
ITEM "5|Insoluto" MESSAGE COPY,F_TIPO_MOV|CLEAR,F_PROVV
|
||||
ITEM "6|Pagamento insoluto" MESSAGE COPY,F_TIPO_MOV|CLEAR,F_PROVV
|
||||
FLAGS "H"
|
||||
END
|
||||
|
||||
@ -294,6 +294,17 @@ BEGIN
|
||||
FLAGS "H"
|
||||
END
|
||||
|
||||
LIST F_PROVV 1 26
|
||||
BEGIN
|
||||
PROMPT 2 13 "Movimento provvisorio "
|
||||
FIELD PROVV
|
||||
ITEM " |No (movimento normale)"
|
||||
ITEM "P|Si (cancellabile)"
|
||||
ITEM "C|Cespiti"
|
||||
END
|
||||
|
||||
|
||||
|
||||
LIST F_OP_FINE_ANNO 1 11
|
||||
BEGIN
|
||||
PROMPT 2 14 "Operazioni di fine anno "
|
||||
|
@ -30,6 +30,7 @@ class TElimina_zoppi : public TSkeleton_application
|
||||
TArray _decoders;
|
||||
|
||||
protected:
|
||||
static bool test_riga_partita(const TRectype& pagsca);
|
||||
static bool test_row_file(int rmov, TString_array& arr);
|
||||
static bool test_scrow_file(int rmov, TString_array& arr);
|
||||
static bool test_head_file(TString_array& arr);
|
||||
@ -51,7 +52,7 @@ inline TElimina_zoppi& app() { return (TElimina_zoppi&)main_app(); }
|
||||
|
||||
bool TElimina_zoppi::firm_handler(TMask_field& f, KEY k)
|
||||
{
|
||||
bool ok = TRUE;
|
||||
bool ok = true;
|
||||
if (k == K_F9)
|
||||
{
|
||||
TArray_sheet sheet(-1, -1, 70, 20, TR("Scelta ditta"), HR("Codice|Ragione Sociale@50"));
|
||||
@ -104,7 +105,7 @@ const char* TElimina_zoppi::decode(int num, const char* key, const char* field)
|
||||
|
||||
bool TElimina_zoppi::test_row_file(int lf_rmov, TString_array& arr)
|
||||
{
|
||||
bool ok = TRUE;
|
||||
bool ok = true;
|
||||
TLocalisamfile mov(LF_MOV);
|
||||
TLocalisamfile row(lf_rmov);
|
||||
|
||||
@ -118,11 +119,11 @@ bool TElimina_zoppi::test_row_file(int lf_rmov, TString_array& arr)
|
||||
}
|
||||
msg << ": 0";
|
||||
|
||||
TProgind pi(row.items(), msg, TRUE, TRUE);
|
||||
TProgind pi(row.items(), msg, true, true);
|
||||
TToken_string riga, descr;
|
||||
|
||||
long reg, last_reg = 0, found = 0;
|
||||
bool reg_killed = FALSE;
|
||||
bool reg_killed = false;
|
||||
|
||||
char tipo;
|
||||
int gruppo, conto;
|
||||
@ -130,12 +131,12 @@ bool TElimina_zoppi::test_row_file(int lf_rmov, TString_array& arr)
|
||||
|
||||
FOR_EACH_FILE_RECORD(row)
|
||||
{
|
||||
if (pi.iscancelled())
|
||||
if (!pi.addstatus(1))
|
||||
{
|
||||
ok = FALSE;
|
||||
ok = false;
|
||||
break;
|
||||
}
|
||||
pi.addstatus(1);
|
||||
|
||||
|
||||
if (lf_rmov == LF_PARTITE)
|
||||
reg = row.get_long(PART_NREG);
|
||||
@ -227,9 +228,32 @@ bool TElimina_zoppi::test_row_file(int lf_rmov, TString_array& arr)
|
||||
return ok;
|
||||
}
|
||||
|
||||
bool TElimina_zoppi::test_riga_partita(const TRectype& pagsca)
|
||||
{
|
||||
const int nriga = pagsca.get_int(PART_NRIGA);
|
||||
bool ok = nriga > 0;
|
||||
|
||||
if (nriga < 9999)
|
||||
{
|
||||
TToken_string k;
|
||||
k = pagsca.get(PART_TIPOCF);
|
||||
k.add(pagsca.get(PART_GRUPPO), 1);
|
||||
k.add(pagsca.get(PART_CONTO), 2);
|
||||
k.add(pagsca.get(PART_SOTTOCONTO), 3);
|
||||
k.add(pagsca.get(PART_ANNO));
|
||||
k.add(pagsca.get(PART_NUMPART));
|
||||
k.add(nriga);
|
||||
const TRectype& part = cache().get(LF_PARTITE, k);
|
||||
const int tipomov = part.get_int(PART_TIPOMOV);
|
||||
ok = tipomov == 1;
|
||||
}
|
||||
|
||||
return ok;
|
||||
}
|
||||
|
||||
bool TElimina_zoppi::test_scrow_file(int lf_pagsca, TString_array& arr)
|
||||
{
|
||||
bool ok = TRUE;
|
||||
bool ok = true;
|
||||
TLocalisamfile pagsca(lf_pagsca);
|
||||
long found = 0;
|
||||
|
||||
@ -244,24 +268,36 @@ bool TElimina_zoppi::test_scrow_file(int lf_pagsca, TString_array& arr)
|
||||
msg << ": 0";
|
||||
msg.center_just(50);
|
||||
|
||||
TProgind pi(pagsca.items(), msg, TRUE, TRUE, 50);
|
||||
TProgind pi(pagsca.items(), msg, true, true);
|
||||
TToken_string riga, descr;
|
||||
|
||||
FOR_EACH_FILE_RECORD(pagsca)
|
||||
{
|
||||
if (pi.iscancelled())
|
||||
if (!pi.addstatus(1))
|
||||
{
|
||||
ok = FALSE;
|
||||
ok = false;
|
||||
break;
|
||||
}
|
||||
pi.addstatus(1);
|
||||
|
||||
bool to_kill = FALSE;
|
||||
if (pagsca.get_int(SCAD_NRIGA) <= 0 ||
|
||||
pagsca.get_int(SCAD_NRATA) <= 0)
|
||||
to_kill = TRUE;
|
||||
if (lf_pagsca == LF_PAGSCA && pagsca.get_int(PAGSCA_NRIGP) <= 0)
|
||||
to_kill = TRUE;
|
||||
bool to_kill = false;
|
||||
if (pagsca.get_int(SCAD_NRIGA) <= 0 || pagsca.get_int(SCAD_NRATA) <= 0)
|
||||
to_kill = true;
|
||||
|
||||
switch (lf_pagsca)
|
||||
{
|
||||
case LF_PAGSCA:
|
||||
if (pagsca.get_int(PAGSCA_NRIGP) <= 0)
|
||||
to_kill = true;
|
||||
if (!test_riga_partita(pagsca.curr()))
|
||||
to_kill = true;
|
||||
break;
|
||||
case LF_SCADENZE:
|
||||
if (!test_riga_partita(pagsca.curr()))
|
||||
to_kill = true;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (to_kill)
|
||||
{
|
||||
@ -296,7 +332,7 @@ bool TElimina_zoppi::test_scrow_file(int lf_pagsca, TString_array& arr)
|
||||
|
||||
bool TElimina_zoppi::test_head_file(TString_array& arr)
|
||||
{
|
||||
bool ok = TRUE;
|
||||
bool ok = true;
|
||||
TLocalisamfile mov(LF_MOV);
|
||||
TLocalisamfile rmov(LF_RMOV);
|
||||
TLocalisamfile rmoviva(LF_RMOVIVA);
|
||||
@ -305,14 +341,14 @@ bool TElimina_zoppi::test_head_file(TString_array& arr)
|
||||
msg << TR("Controllo testate di prima nota: 0");
|
||||
msg.center_just(50);
|
||||
|
||||
TProgind pi(mov.items(), msg, TRUE, TRUE, 50);
|
||||
TProgind pi(mov.items(), msg, true, true, 50);
|
||||
TToken_string riga, descr;
|
||||
|
||||
FOR_EACH_FILE_RECORD(mov)
|
||||
{
|
||||
if (pi.iscancelled())
|
||||
{
|
||||
ok = FALSE;
|
||||
ok = false;
|
||||
break;
|
||||
}
|
||||
pi.addstatus(1);
|
||||
@ -360,13 +396,13 @@ int TElimina_zoppi::kill_game(long numreg, int numrig)
|
||||
games.add_numreg(numreg);
|
||||
for (TPartita* game = games.first(); game; game = games.next())
|
||||
{
|
||||
bool update = FALSE;
|
||||
bool update = false;
|
||||
const int fattura = game->prima_fattura(numreg);
|
||||
if (fattura > 0)
|
||||
{
|
||||
game->scollega_pagamenti(fattura, 1);
|
||||
game->rimuovi_riga(fattura);
|
||||
update = TRUE;
|
||||
update = true;
|
||||
}
|
||||
|
||||
const int rigapag = game->primo_pagamento(numreg);
|
||||
@ -388,7 +424,7 @@ int TElimina_zoppi::kill_game(long numreg, int numrig)
|
||||
if (sum.get_long(PART_NREG) == numreg)
|
||||
{
|
||||
game->elimina_pagamento(p, r, s);
|
||||
update = TRUE;
|
||||
update = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -401,7 +437,7 @@ int TElimina_zoppi::kill_game(long numreg, int numrig)
|
||||
if (sum.get_long(PART_NREG) == numreg)
|
||||
{
|
||||
game->elimina_pagamento(TPartita::UNASSIGNED, 0, u);
|
||||
update = TRUE;
|
||||
update = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -412,7 +448,7 @@ int TElimina_zoppi::kill_game(long numreg, int numrig)
|
||||
if (part.get_long(PART_NREG) == numreg)
|
||||
{
|
||||
game->rimuovi_riga(p);
|
||||
update = TRUE;
|
||||
update = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -458,7 +494,7 @@ int TElimina_zoppi::kill_row(long numreg, char tipor, int numrig)
|
||||
|
||||
bool TElimina_zoppi::select_handler(TMask_field& f, KEY k)
|
||||
{
|
||||
bool ok = TRUE;
|
||||
bool ok = true;
|
||||
if (k == K_SPACE)
|
||||
{
|
||||
TArray_sheet sheet(-1, -1, 76, 20, app().app_name(), HR("@1|Codice@6|Riga@5|Anno@R|Importo@20R|Grp@R|Cnt@R|Sottoc@R|Descrizione@50"));
|
||||
@ -482,7 +518,7 @@ bool TElimina_zoppi::select_handler(TMask_field& f, KEY k)
|
||||
if (total > 0 &&
|
||||
yesno_box(FR("Confermare l'eliminazione di %ld righe."), total))
|
||||
{
|
||||
TProgind pi(total, TR("Eliminazione righe..."), TRUE, TRUE);
|
||||
TProgind pi(total, TR("Eliminazione righe..."), true, true);
|
||||
FOR_EACH_ARRAY_ROW(arr, i, riga)
|
||||
{
|
||||
if (sheet.checked(i))
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user