Patch level : xx.7.054

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :
Riportata la version 1.7 patch 054 aga sul main trunk


git-svn-id: svn://10.65.10.50/trunk@9655 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2001-04-30 14:22:43 +00:00
parent 5fca30b8ed
commit 8a05210c2d
186 changed files with 19159 additions and 487 deletions

View File

@ -5,6 +5,7 @@
#include <colors.h>
#include <config.h>
#include <controls.h>
#include <currency.h>
#include <dongle.h>
#include <execp.h>
#include <isam.h>
@ -24,7 +25,7 @@
#include "ba0400a.h"
#define OPTIONS_MENU M_FONT
#define PREFERRED_MENU M_HELP
#define PREFERRED_MENU M_STYLE
///////////////////////////////////////////////////////////
// TPriority_image
@ -49,32 +50,32 @@ public:
class TPicture_mask : public TMask
{
TImage* _image;
TArray _euro;
int _euro_frame;
long _euro_timer;
static TString _last_string;
protected: // TMask
virtual void update();
virtual void handler(WINDOW win, EVENT * ep);
virtual bool on_key(KEY k);
virtual void on_firm_change();
public:
virtual bool stop_run(KEY key);
void set_last_search_string(const char* str) { _last_string = str; }
void set_image(TImage* image);
void reload_images();
TPicture_mask(const char* name, int dx, int dy, TImage* image, int x = -1, int y = -1);
virtual ~TPicture_mask() {}
virtual ~TPicture_mask();
};
TString TPicture_mask::_last_string;
TPicture_mask::TPicture_mask(const char* name, int dx, int dy,
TImage* image, int x, int y)
: TMask(name, 1, dx, dy, x, y)
{
set_image(image);
}
void TPicture_mask::set_image(TImage* image)
{
if (image && image->ok())
@ -163,6 +164,84 @@ bool TPicture_mask::on_key(KEY k)
return TMask::on_key(k);
}
void TPicture_mask::handler(WINDOW win, EVENT* ep)
{
switch (ep->type)
{
case E_TIMER:
if (ep->v.timer.id == _euro_timer && _euro.items())
{
const TImage& euro = (TImage&)_euro[_euro_frame];
RCT rct; xvt_vobj_get_client_rect(win, &rct);
int x = rct.right - euro.width() -1;
int y = rct.bottom - euro.height() -1;
euro.draw(win, x, y);
_euro_frame++;
if (_euro_frame >= _euro.items())
_euro_frame = 0;
}
break;
default:
break;
}
TMask::handler(win, ep);
}
void TPicture_mask::reload_images()
{
_euro.destroy();
const TString& codval = prefix().firm().codice_valuta();
if (::is_euro_value(codval))
{
for (int i = 0; i < 17; i++)
{
TImage* e = new TImage(30001+i);
e->convert_transparent_color(MASK_BACK_COLOR);
_euro.add(e);
}
}
else
{
TFilename n = codval;
n << "0??.bmp";
TString_array a;
const int frames = list_files(n, a);
if (frames > 0)
{
for (int i = 0; i < frames; i++)
{
TImage* e = new TImage(a.row(i));
e->convert_transparent_color(MASK_BACK_COLOR);
_euro.add(e);
}
}
}
_euro_frame = 0;
}
void TPicture_mask::on_firm_change()
{
reload_images();
force_update();
}
TPicture_mask::TPicture_mask(const char* name, int dx, int dy,
TImage* image, int x, int y)
: TMask(name, 1, dx, dy, x, y)
{
set_image(image);
reload_images();
_euro_timer = xvt_timer_create(win(), 100);
}
TPicture_mask::~TPicture_mask()
{
xvt_timer_destroy(_euro_timer);
}
///////////////////////////////////////////////////////////
// Color Mask
///////////////////////////////////////////////////////////
@ -708,12 +787,13 @@ bool TMenuitem::perform_program() const
#endif
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.compare("ba1", 3, TRUE) == 0;
const bool maintenance_app = _action.compare("ba1 -0", 6, TRUE) == 0;
if (maintenance_app)
{
char line1[16],line2[16];
@ -1124,7 +1204,7 @@ protected:
bool test_network();
public:
void reload_images() { _menu.reload_images(); }
void reload_images();
TMenu_application(const char* name) : _name(name), _mask(NULL) { }
virtual ~TMenu_application() { }
@ -1277,7 +1357,12 @@ HIDDEN bool pwd_handler(TMask_field& fld, KEY key)
{
TMask& m = fld.mask();
TString16 pwd;
m.set(F_USER, dongle().administrator(&pwd));
TString16 usr = dongle().administrator(&pwd);
TLocalisamfile users(LF_USER);
users.put("USERNAME", usr);
users.read();
pwd = decode(users.get("PASSWORD"));
m.set(F_USER, usr);
m.set(F_PASSWORD, pwd);
m.stop_run(K_ENTER);
}
@ -1286,6 +1371,13 @@ HIDDEN bool pwd_handler(TMask_field& fld, KEY key)
#endif
void TMenu_application::reload_images()
{
_menu.reload_images();
if (_mask)
_mask->reload_images();
}
bool TMenu_application::check_user()
{
TString utente(user());
@ -1461,7 +1553,7 @@ static int get_module_version(TConfig& cfg, void* jolly)
bool TMenu_application::test_network()
{
return os_test_network_version();
return ::os_test_network_version();
}
bool TMenu_application::test_programs()
@ -1518,7 +1610,7 @@ bool TMenu_application::test_programs()
if (more)
break;
if (dangerous.empty() ||
(!more && !yesno_box("Vuoi aggiornare i moduli adesso?")))
(!more && !yesno_box("Si desidera aggiornare i moduli adesso?")))
break;
app.run(FALSE, TRUE, TRUE, TRUE);
more = TRUE; // ricontrolla
@ -1759,7 +1851,10 @@ bool TMenu_application::choose_study()
prefix().set_studio(m.get(DLG_USER));
ok = create();
if (ok)
{
set_firm();
_mask->stop_run(K_F9); // Ricarica maschera
}
else
stop_run(); // Termina applicazione
}
@ -2284,7 +2379,8 @@ void TMenu_application::load_preferences()
break;
_preferred.add(row);
}
update_preferred();
if (i > 0)
update_preferred();
}
void TMenu_application::save_preferences()
@ -2439,7 +2535,7 @@ int TMenu_application::do_tree()
_mask = &mask;
const int twidth = 54;
const int bwidth = mask.columns() - twidth - 8;
const int bwidth = (mask.columns() - twidth - 8);
TMenu_tree tree(_menu);
TTree_field& tree_fld = mask.add_tree(101, 0, 0, 0, twidth, -1);
@ -2455,7 +2551,7 @@ int TMenu_application::do_tree()
TButton_field& mf = mask.add_button(102, 0, "Menu principale", -1, 2, bwidth, 2);
mf.set_handler(tree_shrink_handler);
TButton_field& bf = mask.add_button(DLG_QUIT, 0, "Fine", -1, -1, bwidth, 2);
TButton_field& bf = mask.add_button(DLG_QUIT, 0, "Fine", -56, -1, bwidth/2, 2);
mask.first_focus(101);
KEY key = mask.run();

View File

@ -4,22 +4,35 @@
MENUBAR MENU_BAR(0)
MENU MENU_BAR(0)
SUBMENU M_FILE "~File"
SUBMENU M_EDIT "~Modifica"
SUBMENU M_FONT "~Opzioni" DISABLED
SUBMENU M_PREF "~Preferiti" DISABLED
SUBMENU M_HELP "~Help"
SUBMENU M_FILE "~File"
SUBMENU M_EDIT "~Modifica"
SUBMENU M_FONT "~Opzioni" DISABLED
SUBMENU M_STYLE "~Preferiti" DISABLED
SUBMENU M_HELP "~Help"
MENU M_FONT
/*
ITEM M_FONT_SELECT "~Font"
ITEM MENU_ITEM(2) "~Colori"
*/
ITEM MENU_ITEM(2) "~Font e Colori"
ITEM MENU_ITEM(3) "~Editors"
ITEM MENU_ITEM(4) "~Studio"
MENU M_PREF
MENU M_STYLE
ITEM MENU_ITEM(5) "~Aggiungi"
ITEM MENU_ITEM(6) "~Organizza"
image 30001 QRESDIR"euro01.bmp"
image 30002 QRESDIR"euro02.bmp"
image 30003 QRESDIR"euro03.bmp"
image 30004 QRESDIR"euro04.bmp"
image 30005 QRESDIR"euro05.bmp"
image 30006 QRESDIR"euro06.bmp"
image 30007 QRESDIR"euro07.bmp"
image 30008 QRESDIR"euro08.bmp"
image 30009 QRESDIR"euro09.bmp"
image 30010 QRESDIR"euro10.bmp"
image 30011 QRESDIR"euro11.bmp"
image 30012 QRESDIR"euro12.bmp"
image 30013 QRESDIR"euro13.bmp"
image 30014 QRESDIR"euro14.bmp"
image 30015 QRESDIR"euro15.bmp"
image 30016 QRESDIR"euro16.bmp"
image 30017 QRESDIR"euro17.bmp"

View File

@ -97,7 +97,7 @@ END
BUTTON 114 10 2
BEGIN
PROMT 19 -1 "Font"
PROMPT 19 -1 "Font"
END
GROUPBOX DLG_NULL 14 8

View File

@ -77,4 +77,5 @@ END
ENDPAGE
ENDMASK
ENDMASK

View File

@ -1,12 +1,2 @@
#include <default.url>
/* ba1 -1 */
MENUBAR MENU_BAR(1)
MENU MENU_BAR(1)
SUBMENU M_FILE "~File"
SUBMENU M_EDIT "~Modifica"
ITEM BAR_ITEM(1) "~Test"
SUBMENU M_HELP "~Help"
#include <mainmenu.url>

View File

@ -633,122 +633,129 @@ void TManutenzione_app::edit_riga (long riga_sel, TToken_string& riga)
switch (tasto)
{
case K_F4:
if (logicnum > 1)
{
const TFilename filename(_mask->get(FLD_NOME));
const TString tabella(_mask->get(F_TAB));
TEdit_file ef;
ef.browse(logicnum, filename, tabella);
}
break;
case K_F5:
case K_F6:
case K_F8:
if (!superprassi)
{
error_box("Funzione non ammessa per l'utente %s", (const char*)user());
break;
}
case K_F7:
case K_ENTER:
{
strcpy (dep.SysName,_mask->get (FLD_NOME));
dep.EOD = atol(_mask->get (FLD_EOD));
dep.Flags = atol(_mask->get (FLD_FLAG));
strcpy (dep.Des,_mask->get (FLD_DESC));
strcpy (dep.FCalc,_mask->get (FLD_FORMULA));
const TRecnotype eox = _mask->get_bool(FLD_EXTEND) ? _mask->get_long(FLD_EOX) : oldeox;
case K_F4:
if (logicnum > 1)
{
const TFilename filename(_mask->get(FLD_NOME));
const TString16 tabella(_mask->get(F_TAB));
TEdit_file ef;
ef.browse(logicnum, filename, tabella);
}
break;
case K_F5:
case K_F6:
case K_F8:
if (!superprassi)
{
error_box("Funzione non ammessa per l'utente %s", (const char*)user());
break;
}
case K_F7:
case K_ENTER:
{
strcpy (dep.SysName,_mask->get (FLD_NOME));
dep.EOD = atol(_mask->get (FLD_EOD));
dep.Flags = atol(_mask->get (FLD_FLAG));
strcpy (dep.Des,_mask->get (FLD_DESC));
strcpy (dep.FCalc,_mask->get (FLD_FORMULA));
const TRecnotype eox = _mask->get_bool(FLD_EXTEND) ? _mask->get_long(FLD_EOX) : oldeox;
_browse->dir()->get(logicnum, _lock, _nordir, _sysdirop);
_browse->dir()->set(dep.SysName, dep.EOD, dep.Flags,
dep.Des, dep.FCalc);
_browse->dir()->put(logicnum, _nordir, _sysdirop);
if (eox != oldeox)
{
TSystemisamfile f(logicnum);
d.get(logicnum);
TFilename f_name(d.name());
f_name.ext("dbf");
if (f_name.exist())
f.extend(eox);
else
f.build(eox);
_browse->dir()->get(logicnum, _nolock, _nordir, _sysdirop);
}
if (tasto == K_F5 && logicnum > 1)
{
TSystemisamfile f(logicnum);
f.pack();
//Pack supplementare tramite FOXPRO (da togliere con CodeBase 6)
#if XVT_OS == XVT_OS_WIN || XVT_OS == XVT_OS_WIN32
#if !defined(CB6)
if (logicnum > 2 && logicnum < 6 && f.status() == NOERR)
if (fexist("packaga.exe"))
{
d.get(logicnum);
TFilename f_name(d.name());
f_name.ext("dbf");
f_name.replace('/','\\'); // A volte rimangono delle slash
TString cmd("packaga -t");
cmd << " " << f_name;
TExternal_app packapp(cmd);
packapp.run(FALSE,FALSE);
}
_browse->dir()->get(logicnum, _lock, _nordir, _sysdirop);
_browse->dir()->set(dep.SysName, dep.EOD, dep.Flags,
dep.Des, dep.FCalc);
_browse->dir()->put(logicnum, _nordir, _sysdirop);
{
TSystemisamfile f(logicnum);
if (eox != oldeox)
{
d.get(logicnum);
TFilename f_name(d.name());
f_name.ext("dbf");
if (!f_name.exist()) f.build(eox);
else f.extend(eox);
_browse->dir()->get(logicnum, _nolock, _nordir, _sysdirop);
}
if (tasto == K_F5 && logicnum > 1)
{
f.packfile();
f.packindex();
//Pack supplementare tramite FOXPRO (da togliere con CodeBase 6)
#if XVT_OS == XVT_OS_WIN
if (logicnum > 2 && logicnum < 6 && f.status() == NOERR)
if (fexist("packaga.exe"))
{
d.get(logicnum);
TFilename f_name(d.name());
f_name.ext("dbf");
f_name.replace('/','\\'); // A volte rimangono delle slash
TString cmd("packaga -t");
cmd << " " << f_name;
TExternal_app packapp(cmd);
packapp.run(FALSE,FALSE);
}
#endif
#endif
}
else
if (tasto == K_F6)
{
_rec = new TRec_sheet(logicnum, _mask->get(F_TAB));
_rec->edit();
delete _rec;
_rec = NULL;
}
else
if(tasto == K_F7)
{
TMask m("ba1100b");
TFilename nout(dumpfilename(dep));
m.set(FLD_OUTFILE, nout);
if (m.run() == K_ENTER)
{
nout = m.get(FLD_OUTFILE);
if (nout.not_empty())
{
TSystemisamfile f(logicnum);
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 withdel = m.get_bool(FLD_WITHDEL);
const int keyno = m.get_int(FLD_KEYNO);
f.dump(nout, keyno, fs, fd, rs, withdel);
}
}
}
else
if (tasto == K_F8)
{
TMask m("ba1100c");
TFilename ninp(dumpfilename(dep));
m.set(FLD_INFILE, ninp);
if (m.run() == K_ENTER)
{
TSystemisamfile f(logicnum);
char fs = *esc(m.get(FLD_FS));
char fd = *esc(m.get(FLD_FD));
char rs = *esc(m.get(FLD_RS));
ninp = m.get(FLD_INFILE);
f.load(ninp, fs, fd, rs);
}
}
}
break;
default:
break;
}
else
if (tasto == K_F6)
{
_rec = new TRec_sheet(logicnum, _mask->get(F_TAB));
_rec->edit();
delete _rec;
_rec = NULL;
}
else
if (tasto == K_F7)
{
TMask m("ba1100b");
TFilename nout(dumpfilename(dep));
m.set(FLD_OUTFILE, nout);
if (m.run() == K_ENTER)
{
nout = m.get(FLD_OUTFILE);
if (nout.not_empty())
{
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 withdel = m.get_bool(FLD_WITHDEL);
const int keyno = m.get_int(FLD_KEYNO);
const TString16 tabella(_mask->get(F_TAB));
if (tabella.not_empty())
{
TToken_string filter;
filter.add("COD"); filter.add(tabella);
f.dump(nout, keyno, fs, fd, rs, TRUE, withdel, filter);
}
else
f.dump(nout, keyno, fs, fd, rs, TRUE, withdel);
}
}
}
else
if (tasto == K_F8)
{
TMask m("ba1100c");
TFilename ninp(dumpfilename(dep));
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));
ninp = m.get(FLD_INFILE);
f.load(ninp, fs, fd, rs);
}
}
}
}
break;
default:
break;
}
}

View File

@ -134,7 +134,7 @@ public:
TString_array& properties(const char* cmd);
const TString_array* find_properties(const char* cmd) const;
TMenu();
TMenu(const char* name);
virtual ~TMenu() { }
};
@ -146,7 +146,6 @@ class TSet_user_passwd : public TRelation_application
{
protected:
TMask* _msk;
// TMenu* _tree;
TRelation* _rel;
TInformazione_moduli* _im;
@ -374,10 +373,10 @@ TSubmenu& TMenu::add_submenu(const char* para, int parent_module)
return sub;
}
TMenu::TMenu()
TMenu::TMenu(const char* menuname)
{
TString root;
import("baprassi.men", root);
import(menuname, root);
add_son(new TMenu_node("Menu Principale"));
add_submenu(root, 0);
goto_root();
@ -631,9 +630,13 @@ bool TSet_users::user_create()
_msk->set_handler(F_USER, user_handler);
_msk->set_handler(F_GROUPNAME, group_handler);
TSheet_field& sf = sheet_field();
sf.set_notify(k_notify);
sf.set_notify(k_notify);
const char* menuname = "baprassi.men";
if (argc() > 2)
menuname = argv(2);
_tree = new TMenu;
_tree = new TMenu(menuname);
_msk->set_handler(F_PERMESSI, tree_handler);
_msk->tfield(F_PERMESSI).set_tree(_tree);
_msk->sfield(F_PROPERTIES).set_notify(p_notify);

View File

@ -3,6 +3,7 @@
#include <form.h>
#include <modaut.h>
#include <msksheet.h>
#include <os_dep.h>
#include <prefix.h>
#include <printer.h>
#include <utility.h>
@ -163,6 +164,7 @@ class TRequest_form : public TForm
public:
void update_serno(const TString& serno);
void update_dongle(const TDongle& dongle);
void update_os();
void print_footer();
TRequest_form(const char* name);
@ -201,9 +203,9 @@ void TRequest_form::update_serno(const TString& num)
switch (::dongle().hardware() )
{
case _dongle_eutron:
find_field('H',odd_page,FF_DONGLE_HD).set("EUTRON"); break;
find_field('H',odd_page,FF_DONGLE_HW).set("EUTRON"); break;
default:
find_field('H',odd_page,FF_DONGLE_HD).set("HARDLOCK"); break;
find_field('H',odd_page,FF_DONGLE_HW).set("HARDLOCK"); break;
}
TForm_item& serno = find_field('H', odd_page, FF_DONGLE_SN);
serno.set(num);
@ -222,6 +224,23 @@ void TRequest_form::update_dongle(const TDongle& dongle)
user.set(str);
}
void TRequest_form::update_os()
{
TForm_item& os = find_field('H', odd_page, FF_OS);
TString stros = "Windows ";
switch (::os_get_type())
{
case os_Windows : stros << "3.1"; break;
case os_Windows95: stros << "95"; break;
case os_Windows98: stros << "98"; break;
case os_WindowsME: stros << "ME"; break;
case os_WindowsNT: stros << "NT/2000"; break;
default : break;
}
os.set(stros);
}
void TRequest_form::print_footer()
{
set_footer(odd_page, TRUE);
@ -287,8 +306,11 @@ protected:
static bool sh_aggiornamento_handler(TMask_field& fld, KEY key);
protected:
bool new_module_requested();
void print_request();
void print_answer();
void print_status();
void print_listino();
public:
@ -714,7 +736,7 @@ bool TAttivazione_moduli::change_assist_handler(TMask_field& fld, KEY key)
const word year = m.get_int(101);
if (dongle.type() == _user_dongle)
{
if (year > dongle.year_assist() && year <= 2997)
if (year >= dongle.year_assist() && year <= 2997)
{
if (m.field(102).empty())
{
@ -1112,6 +1134,7 @@ void TAttivazione_moduli::print_request()
}
form.update_serno(_msk->get(F_SN));
form.update_dongle(::dongle());
form.update_os();
}
str.format("%3d", ++found);
@ -1175,6 +1198,38 @@ void TAttivazione_moduli::print_request()
}
}
void TAttivazione_moduli::print_status()
{
TRequest_form form("ba1500a");
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.update_serno(_msk->get(F_SN));
form.update_dongle(::dongle());
form.update_os();
TWait_cursor hourglass;
printer().open();
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);
if (!active)
continue;
descr.set(row->get(0));
codice.set("*ATTIVO*");
form.print(-1);
}
printer().close();
}
void TAttivazione_moduli::print_answer()
{
TString str;
@ -1316,12 +1371,34 @@ void TAttivazione_moduli::print_listino()
}
}
bool TAttivazione_moduli::new_module_requested()
{
TSheet_field& sheet = _msk->sfield(F_MODULI);
bool found = FALSE;
FOR_EACH_SHEET_ROW(sheet, r, row)
{
if (*row->get(1) > ' ') // Wanted!
{
const int module = row->get_int(2);
if (!::dongle().active(module)) // Not active yet?
{
found = TRUE;
break;
}
}
}
return found;
}
void TAttivazione_moduli::print()
{
if (::dongle().type() == _user_dongle)
print_request();
{
if (new_module_requested())
print_request();
else
print_status();
}
else
print_answer();
}

View File

@ -17,9 +17,9 @@
#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_AGGLISTINO 220
#define F_MODLISTINO 221
#define F_PRINTLIST 222
#define F_NOMEMOD 101
#define F_ENABLE 102
@ -27,8 +27,9 @@
#define F_KEY 104
#define FF_DATARICH 101
#define FF_DONGLE_HD 102
#define FF_DONGLE_SN 103
#define FF_YEAR 104
#define FF_NUTENTI 105
#define FF_DATARICH 101
#define FF_DONGLE_HW 102
#define FF_DONGLE_SN 103
#define FF_YEAR 104
#define FF_NUTENTI 105
#define FF_OS 106

View File

@ -65,37 +65,32 @@ END
STRING S_VERSION 8
BEGIN
PROMPT 1 2 "Versione "
// FLAGS "D"
END
STRING S_PATCHLEVEL 3
BEGIN
PROMPT 20 2 "Patch "
// FLAGS "D"
FLAGS "Z"
END
DATE S_DATE
BEGIN
PROMPT 31 2 "Rilascio "
// FLAGS "D"
END
STRING S_EXTERN 50 40
BEGIN
PROMPT 1 3 "Esterni "
// FLAGS "D"
END
STRING S_PREPROCESS 50 33
BEGIN
PROMPT 1 4 "Pre-processing "
// FLAGS "D"
END
STRING S_POSTPROCESS 50 33
BEGIN
PROMPT 1 5 "Post-processing "
// FLAGS "D"
END
BUTTON DLG_OK 22 2

View File

@ -132,13 +132,18 @@ bool TInstaller_mask::add_module(TConfig& ini, const TString& module, bool patch
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);
TToken_string row;
row = " "; // Not selected
row.add(ini.get("Descrizione"));
row.add(module);
row.add(ini.get("Versione"));
row.add(ini.get("Patch"));
row.add(strpatch);
row.add(ini.get("Data"));
row.add(patch ? "X" : " ", C_ISPATCH);
if (pos==-1)
@ -238,8 +243,11 @@ void TInstaller_mask::update_version()
const TString16 newver = row->get(C_RELEASE);
const TString16 oldver = ini.get("Versione");
const int numpatch = ini.get_int("Patch");
TString16 strpatch;
if (numpatch > 0) strpatch.format("%03d", numpatch);
row->add(oldver, C_CURRRELEASE);
row->add(ini.get("Patch"), C_CURRPATCH);
row->add(strpatch, C_CURRPATCH);
row->add(ini.get("Data"), C_CURRDATAREL);
}
}
@ -423,8 +431,9 @@ bool TInstaller_mask::autoload()
TString16 patchversion = ini.get("Versione");
if (patchversion == mask_rows.row(r+1).get(C_RELEASE) // se le versioni corrispondono ...
&& patchlevel > atoi(mask_rows.row(r+1).get(C_PATCH)) ) // ..e il patchlevel è superiore
{
mask_rows.row(r+1).add(patchlevel, C_PATCH); // aggiorna il patchlevel mostrato per il modulo
{
TString16 patch; patch.format("%03d", patchlevel); //aggiunge zeri per avere 3 cifre sempre
mask_rows.row(r+1).add(patch, C_PATCH); // aggiorna il patchlevel mostrato per il modulo
if (*mask_rows.row(r+1).get(C_ISPATCH)==' ') // se era un modulo ...
mask_rows.row(r+1).add("+", C_ISPATCH); // .....setta la presenza di patches
force_update(r+1);
@ -533,12 +542,11 @@ bool TInstaller_mask::can_install(const char* module, TInstall_ini& ini)
// todir: direttorio destinazione (si assume che esista già)
bool TInstaller_mask::move_file(const TFilename& from, const TFilename& file, const char* todir) const
{
TFilename dest(todir);
const char *fname=file.mid(from.len()+1);
if (strcmp(fname,"ba0.exe")==0)
if (stricmp(fname,"ba0.exe")==0)
dest.add("BA0.EX_");
else if (strcmp(fname,"ba1.exe")==0)
else if (stricmp(fname,"ba1.exe")==0)
dest.add("BA1.EX_");
else
dest.add(fname);
@ -960,10 +968,10 @@ void TInstaller_mask::parse_internet_path(TString & http_server, TFilename &http
const int slash = http_server.find('/');
if (slash > 0)
{
http_path = http_server.mid(slash);
if (http_path.right(1) != "/")
http_path << '/';
http_server.cut(slash);
http_path = http_server.mid(slash);
if (http_path.right(1) != "/")
http_path << '/';
http_server.cut(slash);
}
else
http_path = http_default_path;
@ -1144,7 +1152,7 @@ bool TInstaller_mask::quit_handler(TMask_field& f, KEY k)
const bool some = _curr_mask->one_checked();
_curr_mask->enable_check(check_on);
if (some)
return noyes_box("Alcuni moduli sono selezionati per l'installazione.\nConfermi l'uscita?");
return noyes_box("Alcuni moduli sono selezionati per l'installazione.\nConfermare l'uscita");
}
return TRUE;
}
@ -1310,6 +1318,8 @@ void TInstaller::main_loop()
TExternal_app conversion("ba1 -0 -C");
conversion.run();
}
delete _m;
_m = NULL;
}
class TExtendedInstaller : public TInstaller
@ -1327,14 +1337,15 @@ bool TExtendedInstaller::create()
void TExtendedInstaller::main_loop()
{
TInstaller_mask m;
m.run();
if (m.installed() && testdatabase()) // Almeno 1 modulo installato ?
_m->run();
if (_m->installed() && testdatabase()) // Almeno 1 modulo installato ?
{
// Lancia conversione: ba1 -0 -C -uPRASSI
TExternal_app conversion("ba1 -0 -C");
conversion.run();
}
delete _m;
_m = NULL;
}
#define PROGNAME "Installer"

View File

@ -1,6 +1,7 @@
#include <default.url>
/*
MENUBAR TASK_MENUBAR
#define MENU_FILE_ALT TASK_MENUBAR+4000
#define M_FIL1_NEW MENU_FILE_ALT+101
@ -63,6 +64,27 @@ MENU BAR_ITEM(1)
ITEM MENU_ITEM(53) "~Primo"
ITEM MENU_ITEM(54) "~Ultimo"
MENUBAR MENU_BAR(1)
MENU TASK_MENUBAR+1
SUBMENU M_FILE "~File"
MENUBAR MENU_BAR(2)
MENU MENU_BAR(2)
SUBMENU M_FILE "~File"
MENUBAR MENU_BAR(3)
MENU MENU_BAR(3)
SUBMENU M_FILE "~File"
MENUBAR MENU_BAR(4)
MENU MENU_BAR(4)
SUBMENU M_FILE "~File"
MENUBAR MENU_BAR(5)
MENU MENU_BAR(5)

View File

@ -1,2 +1,3 @@
#include <default.url>
#include <mainmenu.url>

View File

@ -16,6 +16,7 @@
#define TAB_BANCHE "%BAN"
#define TAB_CAMBI "CAM"
#define TAB_DELEGHE "%DEL"
#define TAB_IVDIRETTIVA "%IVD"
#define TAB_REGISTRI "REG"
#define TAB_VALUTE "%VAL"
#define TAB_VERSAMENTI "%VER"
@ -138,14 +139,17 @@ void TGeneric_table_app::init_insert_mode(TMask& m)
for (reg.read(_isgteq); !_exist_journal && reg.good() && reg.curr() <= to; reg.next())
_exist_journal = (reg.get_long("I0") == REG_JOURNAL);
}
}
else
} else
if (n == TAB_VERSAMENTI)
{
// Se il record e' nuovo prima carica il record precedente
load_rec_in_disabled_fields(m);
// poi copia il contenuto nei campi di input, come valori predefiniti
copy_rec_in_insert_fields(m);
} else
if (n == TAB_VALUTE)
{
m.enable(-3);
}
}
@ -162,10 +166,13 @@ void TGeneric_table_app::init_modify_mode(TMask& m)
const int what = ini.get_int("Type", NULL, -1, -1);
m.set(F_CONFIG, what >= 0 ? "X" : "");
m.enable(F_CONFIG, what >= 0);
}
else
if (n == TAB_VERSAMENTI)
load_rec_in_disabled_fields(m);
} else
if (n == TAB_VALUTE)
{
m.disable(-3); // Disabilita scelta decimali e contro-euro
} else
if (n == TAB_VERSAMENTI)
load_rec_in_disabled_fields(m);
}
void TGeneric_table_app::init_query_mode(TMask& m)
@ -184,7 +191,7 @@ bool TGeneric_table_app::protected_record(TRectype& rec)
bool prot = rec.get_bool(FPC);
if (!prot)
{
if (get_tabname() == "%IVD") // Impedisce la cancellazione di una classe se ha sottoclassi
if (get_tabname() == TAB_IVDIRETTIVA) // Impedisce la cancellazione di una classe se ha sottoclassi
{
TLocalisamfile& f = get_relation()->lfile();
const TRecnotype pos = f.recno();
@ -387,7 +394,7 @@ HIDDEN bool impdel_handler(TMask_field& f, KEY k)
else lim = ver.get(I_ACCONTOIVA);
const real imp(m.get(F_IMPORTO));
if (imp < lim)
return f.yesno_box("Importo inferiore a Lit. %s. Registrare ugualmente?", lim.string("."));
return f.yesno_box("Importo inferiore a %s. Registrare ugualmente?", lim.string("."));
}
}
return TRUE;
@ -447,6 +454,17 @@ HIDDEN bool mese_handler(TMask_field& f, KEY k)
return TRUE;
}
HIDDEN bool key_handler(TMask& m, KEY k)
{
// Per ora facciamo che il SHIFT+F12 attiva sempre il campo 3
if (m.edit_mode())
{
if (k == K_SHIFT+K_F12)
m.enable(-3);
}
return TRUE;
}
bool TGeneric_table_app::valute_decimals_handler(TMask_field& f, KEY k)
{
if (k == K_SPACE)
@ -548,11 +566,13 @@ bool TGeneric_table_app::user_create()
if (name == TAB_VALUTE)
{
mask.set_handler(VAL_DECIMALS_CHANGE, valute_decimals_handler);
mask.set_handler(key_handler); // Handler dello SHIFT-F12
}
if (name == TAB_CAMBI)
{
mask.set_handler(FLD_TABCAM_S4, change_decimals_handler);
}
/* OB600040
if (name == TAB_VERSAMENTI)
{
TLocalisamfile& ver = get_relation()->lfile();
@ -568,6 +588,7 @@ bool TGeneric_table_app::user_create()
error_box("Errore %d in scrittura sulla tabella versamenti",ver.status());
}
}
*/
if (name == TAB_CAMBI)
set_search_field(FLD_TABCAM_D0);

View File

@ -9,7 +9,7 @@
#define ALIAS 1
class BA3700_application : public TRelation_application
class TCond_pag_app : public TRelation_application
{
TRelation* _rel;
TMask* _msk;
@ -31,12 +31,14 @@ protected:
virtual bool changing_mask(int mode) { return FALSE; }
// file intertface
virtual bool remove();
virtual void init_insert_mode(TMask&);
virtual void init_query_mode(TMask&);
virtual int rewrite(const TMask& m);
virtual int write(const TMask& m);
virtual int read(TMask& m);
virtual bool remove();
virtual void init_insert_mode(TMask&);
virtual void init_query_mode(TMask&);
virtual int rewrite(const TMask& m);
virtual int write(const TMask& m);
virtual int read(TMask& m);
virtual void ini2sheet(TConfig& ini, TSheet_field &sheet);
virtual void sheet2ini(TSheet_field &sheet,TConfig& ini);
// notifier
static bool sheet_action(TSheet_field&, int r, KEY k);
@ -56,10 +58,10 @@ protected:
public:
void set_app_data(void* v) { _app_data = v; }
static void* get_app_data() { return ((BA3700_application &)main_app())._app_data; }
static void* get_app_data() { return ((TCond_pag_app &)main_app())._app_data; }
BA3700_application() : TRelation_application() {}
virtual ~BA3700_application() {}
TCond_pag_app() : TRelation_application() {}
virtual ~TCond_pag_app() {}
};
// app-data per handlers
@ -70,7 +72,7 @@ struct sht {
TArray* _rws;
} shuttle;
bool BA3700_application::user_create()
bool TCond_pag_app::user_create()
{
_rel = new TRelation(TAB_CPG);
_rel->add(TAB_RPG, "CODTAB[1,4]=CODTAB" ,1, 0, ALIAS);
@ -94,13 +96,14 @@ bool BA3700_application::user_create()
shuttle._msk = _msk;
shuttle._sht = _cs;
shuttle._rws = new TArray;
set_app_data(&shuttle);
return TRUE;
}
bool BA3700_application::user_destroy()
bool TCond_pag_app::user_destroy()
{
delete _msk;
delete _rel;
@ -108,11 +111,11 @@ bool BA3700_application::user_destroy()
return TRUE;
}
int BA3700_application::read(TMask& m)
int TCond_pag_app::read(TMask& m)
{
m.autoload(*_rel);
TString code(m.get(F_CODICE));
const TString& code = m.get(F_CODICE);
int ir = m.get_int(F_INT_RATE); if (ir == 0) ir = -1;
if (_pag != NULL) delete _pag;
shuttle._pag = _pag = new TPagamento(code);
@ -121,11 +124,7 @@ int BA3700_application::read(TMask& m)
_interv_rate = _pag->scad_rata(_pag->n_rate() - 1);
else _interv_rate = 30;
TArray* arr = new TArray;
if (shuttle._rws != NULL) delete shuttle._rws;
(*arr) = _cs->rows_array();
shuttle._rws = arr;
*shuttle._rws = _cs->rows_array();
shuttle._msk->set(F_INT_RATE,_interv_rate);
shuttle._msk->set(F_NUM_RATE,_pag->n_rate());
shuttle._msk->set(F_RATE_DIFF, _pag->rate_differenziate() ? "1" : "2", TRUE);
@ -133,31 +132,29 @@ int BA3700_application::read(TMask& m)
return NOERR;
}
void BA3700_application::init_insert_mode(TMask& m)
void TCond_pag_app::init_insert_mode(TMask& m)
{
TString code(m.get(F_CODICE));
const TString& code = m.get(F_CODICE);
if (_pag != NULL) delete _pag;
shuttle._pag = _pag = new TPagamento(code);
_pag->set_sheet(*_cs);
TArray* arr = new TArray;
if (shuttle._rws != NULL) delete shuttle._rws;
(*arr) = _cs->rows_array();
shuttle._rws = arr;
*shuttle._rws = _cs->rows_array();
shuttle._msk->field(F_INT_RATE).set("30");
shuttle._msk->field(F_INIZIOSCAD).set("F");
shuttle._msk->field(F_NUM_RATE).set("1");
shuttle._msk->set(F_RATE_DIFF, "2", TRUE);
}
void BA3700_application::init_query_mode(TMask& m)
void TCond_pag_app::init_query_mode(TMask& m)
{
// _cs->reset(); _cs->force_update();
if (shuttle._rws != NULL) delete shuttle._rws;
shuttle._rws = new TArray;
shuttle._rws->destroy();
}
// handlers
bool BA3700_application::intervallo_rate(TMask_field& f, KEY k)
bool TCond_pag_app::intervallo_rate(TMask_field& f, KEY k)
{
// ricalcola tutte le scadenze
// occorre pag->set_intervallo_rate(intervallo)
@ -189,7 +186,7 @@ bool BA3700_application::intervallo_rate(TMask_field& f, KEY k)
return TRUE;
}
bool BA3700_application::rate_differenziate(TMask_field& f, KEY k)
bool TCond_pag_app::rate_differenziate(TMask_field& f, KEY k)
{
// se erano differenziate e non lo sono piu' occorre riaggiustare
// il riaggiustabile; altrimenti si lascia cosi'
@ -213,7 +210,7 @@ bool BA3700_application::rate_differenziate(TMask_field& f, KEY k)
return TRUE;
}
bool BA3700_application::tipo_prima_rata(TMask_field& f, KEY k)
bool TCond_pag_app::tipo_prima_rata(TMask_field& f, KEY k)
{
// aggiunge o toglie se necessario rata 0, lasciando
// le altre e shiftando le scadenze
@ -241,7 +238,7 @@ bool BA3700_application::tipo_prima_rata(TMask_field& f, KEY k)
return TRUE;
}
bool BA3700_application::numero_rate(TMask_field& f, KEY k)
bool TCond_pag_app::numero_rate(TMask_field& f, KEY k)
{
// azzera tutto e ricrea da capo mantenendo le scadenze che ci sono
if (k != K_TAB || f.mask().query_mode()) return TRUE;
@ -269,7 +266,7 @@ bool BA3700_application::numero_rate(TMask_field& f, KEY k)
return TRUE;
}
bool BA3700_application::mese_commerciale(TMask_field& f, KEY k)
bool TCond_pag_app::mese_commerciale(TMask_field& f, KEY k)
{
// setta mcomm e ricalcola le scadenze
// pag->set_mese_commerciale()
@ -298,7 +295,7 @@ bool BA3700_application::mese_commerciale(TMask_field& f, KEY k)
return TRUE;
}
bool BA3700_application::fixed_scad(TMask_field& f, KEY k)
bool TCond_pag_app::fixed_scad(TMask_field& f, KEY k)
{
// setta mcomm e ricalcola le scadenze
// pag->set_mese_commerciale()
@ -340,7 +337,7 @@ bool BA3700_application::fixed_scad(TMask_field& f, KEY k)
return TRUE;
}
bool BA3700_application::tipo_rata(TMask_field& f, KEY k)
bool TCond_pag_app::tipo_rata(TMask_field& f, KEY k)
{
if (f.mask().query_mode())
return TRUE;
@ -359,7 +356,7 @@ bool BA3700_application::tipo_rata(TMask_field& f, KEY k)
return TRUE;
}
bool BA3700_application::ult_class(TMask_field& f, KEY k)
bool TCond_pag_app::ult_class(TMask_field& f, KEY k)
{
if (f.mask().query_mode())
return TRUE;
@ -378,7 +375,7 @@ bool BA3700_application::ult_class(TMask_field& f, KEY k)
}
// qui viene il belloccio
bool BA3700_application::sheet_action(TSheet_field&, int r, KEY k)
bool TCond_pag_app::sheet_action(TSheet_field&, int r, KEY k)
{
bool doit = TRUE, m_perc = FALSE, m_pag = FALSE;
bool m_scad = FALSE, m_tipo = FALSE, m_ulc = FALSE, mod = FALSE;
@ -489,7 +486,7 @@ bool BA3700_application::sheet_action(TSheet_field&, int r, KEY k)
}
int BA3700_application::rewrite(const TMask& m)
int TCond_pag_app::rewrite(const TMask& m)
{
TTable& tab_cpg = (TTable&)_rel->lfile();
TTable& tab_rpg = (TTable&)_rel->lfile(-ALIAS);
@ -500,7 +497,7 @@ int BA3700_application::rewrite(const TMask& m)
return _rel->lfile().rewrite();
}
int BA3700_application::write(const TMask& m)
int TCond_pag_app::write(const TMask& m)
{
TTable& tab_cpg = (TTable&)_rel->lfile();
TTable& tab_rpg = (TTable&)_rel->lfile(-ALIAS);
@ -511,15 +508,59 @@ int BA3700_application::write(const TMask& m)
return _rel->lfile().write();
}
bool BA3700_application::remove()
bool TCond_pag_app::remove()
{
TTable& tab_rpg = (TTable&)_rel->lfile(-ALIAS);
return _pag->remove(tab_rpg) == NOERR && _rel->lfile().remove() == NOERR;
}
void TCond_pag_app::ini2sheet(TConfig& ini, TSheet_field &sheet)
{
const TMask& m = sheet.mask();
const int nrate = m.get_int(F_NUM_RATE);
TString16 par;
for (int r = 0; r < nrate; r++)
{
par.format("%d,%d", LF_TABCOM, r+1);
if (ini.set_paragraph(par))
{
TToken_string& row = sheet.row(r);
row = ini.get("I0");
row.add(ini.get("R0"));
row.add(ini.get("I1"));
row.add(ini.get("S1"));
}
}
}
void TCond_pag_app::sheet2ini(TSheet_field &sheet,TConfig& ini)
{
const TMask& m = sheet.mask();
const int nrate = m.get_int(F_NUM_RATE);
TString16 par;
for (int r = 0; r < nrate; r++)
{
par.format("%d,%d", LF_TABCOM, r+1);
ini.set_paragraph(par);
TToken_string& row = sheet.row(r);
ini.set("I0", row.get(0));
ini.set("R0", row.get());
ini.set("I2", row.get());
ini.set("S1", row.get());
}
for ( ; ; r++)
{
par.format("%d,%d", LF_TABCOM, r+1);
if (ini.set_paragraph(par))
ini.remove_all();
else
break;
}
}
int ba3700(int argc, char* argv[])
{
BA3700_application a;
TCond_pag_app a;
a.run(argc, argv, "Condizioni di pagamento");
return 0;
}

View File

@ -15,15 +15,15 @@ BEGIN
FIELD B1
END
GROUPBOX DLG_NULL 71 4
GROUPBOX DLG_NULL 78 4
BEGIN
PROMPT 4 0 ""
PROMPT 1 0 ""
FLAGS "R"
END
STRING F_CODICE 4
BEGIN
PROMPT 6 1 "Codice "
PROMPT 2 1 "Codice "
HELP "Codice condizione di pagamento"
FLAGS "U#"
FIELD CODTAB
@ -40,7 +40,7 @@ END
STRING F_DESC 50
BEGIN
PROMPT 6 2 "Descrizione "
PROMPT 2 2 "Descrizione "
HELP "Descrizione condizione di pagamento"
FIELD S0
USE %CPG KEY 2
@ -53,34 +53,31 @@ BEGIN
ADD NONE
END
GROUPBOX DLG_NULL 71 7
GROUPBOX DLG_NULL 78 7
BEGIN
PROMPT 4 4 ""
PROMPT 1 4 ""
END
STRING F_INIZIOSCAD 1
LIST F_INIZIOSCAD 1 12
BEGIN
PROMPT 5 5 "Inizio calcolo "
HELP "Modalita' di inizio conteggio calcolo scadenza"
PROMPT 2 5 "Inizio calcolo "
FIELD S1
SHEET "Cod|Descrizione@30"
INPUT F_INIZIOSCAD
OUTPUT F_INIZIOSCAD
ITEM "F|Data fattura"
ITEM "M|Fine mese"
ITEM "I|Da impostare"
WARNING "La partenza del calcolo deve essere specificata"
FLAGS "U"
END
STRING F_TIPO_PRIMA_RATA 1
NUMBER F_INT_RATE 3
BEGIN
PROMPT 28 5 "Tipo prima rata "
HELP "Tipo di conteggio per la prima rata"
PROMPT 58 5 "Intervallo rate "
HELP "Giorni di intervallo tra una data e l'altra"
FIELD I3
END
LIST F_TIPO_PRIMA_RATA 1 45
BEGIN
PROMPT 2 6 "Tipo prima rata "
FIELD S3
SHEET "Cod|Descrizione@60"
INPUT F_TIPO_PRIMA_RATA
OUTPUT F_TIPO_PRIMA_RATA
ITEM " |Totale documento ripartito tra tutte le rate"
ITEM "1|Tutte le imposte sulla prima rata"
ITEM "2|Tutte le spese sulla prima rata"
@ -90,17 +87,9 @@ BEGIN
ITEM "6|Imposte + spese"
END
NUMBER F_INT_RATE 3
BEGIN
PROMPT 53 5 "Intervallo rate "
HELP "Giorni di intervallo tra una data e l'altra"
FIELD I3
FLAGS "R"
END
LIST F_RATE_DIFF 1 30
BEGIN
PROMPT 5 6 "Rate "
PROMPT 2 7 "Rate "
ITEM "1|Differenziate" MESSAGE "X",909|DISABLE,F_NUM_RATE|CLEAR,F_ULT_CLASS
ITEM "2|Uguali (obbligate dalla 2a)" MESSAGE "",909|ENABLE,F_NUM_RATE|ENABLE,F_ULT_CLASS
ITEM "3|Uguali dalla prossima modif." MESSAGE "X",909|DISABLE,F_NUM_RATE|ENABLE,F_ULT_CLASS
@ -109,29 +98,28 @@ END
NUMBER F_NUM_RATE 3
BEGIN
PROMPT 57 6 "Numero rate "
PROMPT 62 7 "Numero rate "
HELP "Numero delle rate"
FLAGS "R"
END
LIST F_TIPO_RATA 1 29
LIST F_TIPO_RATA 1 30
BEGIN
PROMPT 5 7 "Tipo rata "
ITEM "1|Rimessa diretta o contanti"
ITEM "2|Tratta"
ITEM "3|Ricevuta bancaria"
ITEM "4|Cessione"
ITEM "5|Paghero'"
ITEM "6|Lettera di credito"
ITEM "7|Tratta accettata"
ITEM "8|Rapporti interban. diretti"
ITEM "9|Bonifici"
PROMPT 2 8 "Tipo rata "
ITEM "1|1-Rimessa diretta o contanti"
ITEM "2|2-Tratta"
ITEM "3|3-Ricevuta bancaria"
ITEM "4|4-Cessione"
ITEM "5|5-Paghero'"
ITEM "6|6-Lettera di credito"
ITEM "7|7-Tratta accettata"
ITEM "8|8-Rapporti interban. diretti"
ITEM "9|9-Bonifici"
FIELD S4
END
STRING F_ULT_CLASS 1
BEGIN
PROMPT 57 7 "Ult. class. "
PROMPT 53 8 "Ulteriore classific. "
FLAGS "U"
USE %CLR
INPUT CODTAB[1,1] F_TIPO_RATA SELECT
@ -146,28 +134,28 @@ END
NUMBER F_FIXSCAD_1 2
BEGIN
PROMPT 5 9 "Giorni scadenza fissi (1) "
PROMPT 2 9 "Giorni scadenza fissi (1) "
FIELD I0
HELP "Giorno scadenza obbligato: prima alternativa"
END
NUMBER F_FIXSCAD_2 2
BEGIN
PROMPT 36 9 "(2) "
PROMPT 32 9 "(2) "
FIELD I1
HELP "Giorno scadenza obbligato: seconda alternativa"
END
NUMBER F_FIXSCAD_3 2
BEGIN
PROMPT 44 9 "(3) "
PROMPT 40 9 "(3) "
FIELD I2
HELP "Giorno scadenza obbligato: terza alternativa"
END
BOOLEAN F_MESECOMM
BEGIN
PROMPT 54 9 "Mese commerciale"
PROMPT 53 9 "Mese commerciale"
HELP "Indicare se si utilizza il mese commerciale (30 gg)"
FIELD B0
END
@ -240,12 +228,12 @@ BEGIN
FLAGS "D"
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

View File

@ -14,8 +14,6 @@
#include "ba3.h"
#include "ba3800.h"
TString256 tmp;
class BA3800_application : public TPrintapp
{
struct bil_ivd
@ -51,7 +49,8 @@ class BA3800_application : public TPrintapp
bool _sbilancio_patr_gia_stampato,_attivo_o_passivo;
TString _causale_ap, _causale_chi, _totale;
char _liv;
TString tmp;
public:
bool menu (MENU_TAG m) { return TPrintapp::menu(m) ; }

View File

@ -92,8 +92,8 @@ void Stampa_condizioni_pagamento_application::print_header()
set_header (soh++, "");
set_header (soh++, "@bCONDIZIONI DI PAGAMENTO @r@107gData @> Pag. @#");
set_header (soh++, "");
set_header (soh++, "@47gTp @53gInizio @66gMese @73gGiorni@89gIntervallo@108gScadenze");
set_header (soh++, "Cod. @12gDescrizione @47gdoc.@53gcalcolo@66gcomm. @73gsc. fissa@92grate@103gNr. gg. %% Td. ult. cl.");
set_header (soh++, "@47gTipo@53gInizio@66gMese@73gGiorni@89gIntervallo@108gScadenze@118gTipo@123gUlter.");
set_header (soh++, "Cod.@12gDescrizione@47gdoc.@53gcalcolo@66gcomm.@73gsc. fissa@92grate@103gNr. gg. %% @118grata@123gclass.");
set_header(soh,"");
set_background(format("W2l{1,3,132,3}l{1,%d,132,%d}", soh, soh));
}

View File

@ -1,2 +1,2 @@
#include <default.url>
#include <mainmenu.url>

View File

@ -207,16 +207,16 @@ HIDDEN bool stato_hnd(TMask_field& f, KEY key)
return TRUE;
}
HIDDEN bool corr_hnd(TMask_field& f, bool giuridica)
HIDDEN bool corr_hnd(TMask_field& f)
{
TMask & m = f.mask();
if (f.get().empty())
if (f.empty())
{
TMask & m = f.mask();
const bool giuridica = ((TPersone_app&)main_app()).ana_giu();
m.set(giuridica ? FLD_AG2_CIVCORR : FLD_AF2_CIVCORR,
m.get(giuridica ? FLD_AG2_CIVRES : FLD_AF1_CIVRES));
const TString80 s(m.get(giuridica ? FLD_AG2_COMRES : FLD_AF1_COMRES));
if (s.not_empty())
{
m.set(giuridica ? FLD_AG2_STATOCORR : FLD_AF2_STATOCORR, m.get(F_STATORES));
@ -240,11 +240,11 @@ HIDDEN bool clear_cap(TMask_field& f, KEY key)
if (dlg != FLD_AG2_COMRES && dlg != FLD_AF1_COMRES && !f.to_check(key, TRUE))
return TRUE;
const bool giuridica = ((TPersone_app&)main_app()).ana_giu();
if (dlg == FLD_AG2_COMCORR || dlg == FLD_AF2_COMCORR)
corr_hnd(f, giuridica);
corr_hnd(f);
const TString16 val(f.get());
const bool giuridica = ((TPersone_app&)main_app()).ana_giu();
if ( giuridica )
{

View File

@ -355,7 +355,6 @@ void TDitte_application::init_query_mode(TMask& m)
m.hide(FLD_GD1_RAGSOCH);
}
init_insert_mode(m);
m.disable(FLD_GD1_VALUTA); // La valuta si decide solo in creazione
}
void TDitte_application::init_insert_mode(TMask& m)
@ -383,15 +382,22 @@ void TDitte_application::init_insert_mode(TMask& m)
m.disable(DLG_REG);
m.disable(DLG_REG1);
_oldattprev = "";
m.enable(FLD_GD1_VALUTA); // La valuta si decide solo in creazione
// La valuta si decide già in creazione: la valuta della prima ditta memorizzata
TEdit_field& val = m.efield(FLD_GD1_VALUTA);
TLocalisamfile& ditte = get_relation()->lfile();
if (ditte.first() == NOERR)
{
val.set(ditte.get("VALUTA"));
val.disable();
}
else
val.enable();
}
void TDitte_application::enable_reg(TMask& m)
{
const long codditta = m.get_long(FLD_GD1_CODDITTA);
const long codditta = m.get_long(FLD_GD1_CODDITTA);
m.enable(DLG_REG, codditta > 0 && prefix().exist(codditta));
}

View File

@ -244,7 +244,7 @@ BEGIN
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT FLD_GD1_VALUTA CODTAB
CHECKTYPE NORMAL
CHECKTYPE REQUIRED
FLAGS "DU"
END

View File

@ -1,2 +1,3 @@
#include <default.url>
#include <mainmenu.url>

View File

@ -1,2 +1,2 @@
#include <default.url>
#include <mainmenu.url>

View File

@ -13,6 +13,7 @@
#include <utility.h>
#include <os_dep.h>
#include <viswin.h>
#include <browfile.h>
#define NO_MFC
#include <netsock.h>
@ -40,7 +41,6 @@ TString& set_ini_var(int cfg, const char* para,
inline TString& get_ini_var(int cfg, const char* para, const char* var)
{ return set_ini_var(cfg, para, var, NULL); }
///////////////////////////////////////////////////////////
// TMail_box
///////////////////////////////////////////////////////////
@ -196,7 +196,9 @@ int TMail_box::get(TMail_messages& m)
TString_array a;
list(a);
TString buf, boundary;
TString buf, boundary, msg_line;
m.destroy();
FOR_EACH_ARRAY_ROW(a, r, row)
{
TMail_message* msgptr = new TMail_message(user());
@ -241,7 +243,8 @@ int TMail_box::get(TMail_messages& m)
case enc_base64:
{
unsigned val = 0;
int bits = 0;
int bits = 0;
msg_line.cut(0);
for (const char* s = buf; *s && *s != '='; s++)
{
if (*s==0x0A || *s==0x0D || *s==0x20 || *s==0x09)
@ -252,14 +255,16 @@ int TMail_box::get(TMail_messages& m)
if (bits >= 8)
{
const char c = char((val >> (bits - 8)) & 0xFF);
msg << c;
msg_line << c;
bits -= 8;
}
}
}
msg.add_line(msg_line);
}
break;
case enc_quoted_printable:
{
msg_line.cut(0);
for (const char* s = buf; *s; s++)
{
if (*s == '=')
@ -268,18 +273,19 @@ int TMail_box::get(TMail_messages& m)
if (*s >= ' ')
{
int c; sscanf(s, "%2X", &c);
msg << char(c);
msg_line << char(c);
s++;
}
}
else
msg << *s;
msg_line << *s;
}
msg.add_line(msg_line);
}
break;
default:
buf.rtrim();
msg << buf << '\n';
msg.add_line(buf);
break;
}
}
@ -405,7 +411,7 @@ TMail_box::~TMail_box()
class TFilter_expr : public TExpression
{
TAutomask& _mask;
TAutomask& _mask;
protected:
virtual bool print_error(const char* msg) const;
@ -453,7 +459,9 @@ class TMailer_mask : public TAutomask
long _timer_id;
long _secs;
int _mail_semaphore;
TViswin * _vv;
TMail_messages _box;
TString _last_file, _last_app; // Used by file2app
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
@ -461,7 +469,7 @@ protected:
protected:
bool file2app(const TString& file, TString& app) const;
void expand_tabs(TString& str, const int tab = 8) const;
void expand_tabs(TMail_message& str, const int tab = 8) const;
void save_sheet(TConfig& ini, short dlg, const char* var) const;
void load_sheet(TConfig& ini, short dlg, const char* var);
@ -469,35 +477,20 @@ protected:
public:
void test_delete();
int fill_messages();
bool exec_app(int & err, const char * appname, const char * msg);
bool save_curr_line(int & err);
bool exec_app(int & err, const char * appname, TMail_message & msg);
bool save_sheet_line(int& err, int line = -1);
void save_all_lines();
void auto_save_all();
void save() const;
void load();
void mail_lock()
{ _mail_semaphore++; }
void mail_unlock()
{ CHECK(_mail_semaphore > 0, "Bad timer unlock"); _mail_semaphore--; }
TMailer_mask();
virtual ~TMailer_mask();
};
class TMail_lock
{
TMailer_mask* _mm;
public:
TMail_lock(TMailer_mask* mm) : _mm(mm) { _mm->mail_lock(); }
~TMail_lock() { _mm->mail_unlock(); }
};
void TMailer_mask::test_delete()
{
TMail_lock ml(this);
TWait_cursor hourglass;
xvt_statbar_set("Eliminazione messaggi POP3...");
@ -544,42 +537,45 @@ void TMailer_mask::test_delete()
do_events();
}
void TMailer_mask::expand_tabs(TString& str, const int tab) const
void TMailer_mask::expand_tabs(TMail_message& msg, const int tab) const
{
int start = 0;
for (int i = 0; str[i]; i++)
const int items = msg.items();
for (int n = 0; n < items; n++)
{
switch(str[i])
TString & str = msg.row(n);
int start = 0;
for (int i = 0; str[i]; i++)
{
case '\n':
case '\r':
start = i+1;
break;
case '\t':
switch(str[i])
{
const int t = tab - ((i-start) % tab) - 1;
str[i] = ' ';
if (t > 0)
case '\n':
case '\r':
start = i+1;
break;
case '\t':
{
TString80 spac; spac.spaces(t);
str.insert(spac, i+1);
i += t;
const int t = tab - ((i-start) % tab) - 1;
str[i] = ' ';
if (t > 0)
{
TString80 spac; spac.spaces(t);
str.insert(spac, i+1);
i += t;
}
}
break;
default:
break;
}
break;
default:
break;
}
}
}
}
int TMailer_mask::fill_messages()
{
TMail_lock ml(this);
TWait_cursor hourglass;
TMail_messages box;
TString server(get(F_SERVER));
TString user(get(F_USER));
TString password(get(F_PASSWORD));
@ -597,21 +593,21 @@ int TMailer_mask::fill_messages()
{
xvt_statbar_set("Ricezione messaggi MAPI...");
do_events();
totmapi = box.get();
totmapi = _box.get();
}
xvt_statbar_set("Ricezione messaggi POP3...");
do_events();
mailbox.logon(server, user, password);
mailbox.get(box);
mailbox.get(_box);
mailbox.logoff();
TSheet_field& sf = sfield(F_MESSAGES);
sf.destroy();
for (int m = 0; m < box.items(); m++)
TString mess;
for (int m = 0; m < _box.items(); m++)
{
TMail_message& msg = box.msg(m);
TMail_message& msg = _box.msg(m);
TToken_string& row = sf.row(m);
row.add(msg.sender(), sf.cid2index(F_SENDER));
row.add(msg.date(), sf.cid2index(F_DATE));
@ -619,7 +615,15 @@ int TMailer_mask::fill_messages()
row.add(t.string("@@:@@:@@"), sf.cid2index(F_TIME));
row.add(msg.subject(), sf.cid2index(F_SUBJECT));
expand_tabs(msg);
row.add(msg, sf.cid2index(F_BODY));
mess.cut(0);
FOR_EACH_ARRAY_ROW(msg, i, msgrow)
{
mess << *msgrow;
if (mess.len() >= 1024)
break;
}
row.add(mess, sf.cid2index(F_BODY));
row.add(m<totmapi?"MAPI":"POP3", sf.cid2index(F_MAILER));
if (m < totmapi)
{
@ -640,46 +644,117 @@ int TMailer_mask::fill_messages()
}
bool TMailer_mask::file2app(const TString& file, TString& app) const
{
{
bool ok = FALSE;
if (isdigit(file[0]))
if (file != _last_file)
{
const int filenum = atoi(file);
if (filenum >= LF_USER && filenum < prefix().items())
if (isdigit(file[0]))
{
TLocalisamfile isf(filenum);
ok = isf.get_relapp(app);
const int filenum = atoi(file);
if (filenum >= LF_USER && filenum < prefix().items())
{
TLocalisamfile isf(filenum);
ok = isf.get_relapp(app);
}
}
else
{
const int len = file.len();
if (len == 3 || (len == 4 && file[0] == '%'))
{
TTable table(file);
ok = table.get_relapp(app);
}
}
// Fool const directive
(TString&)_last_file = file;
(TString&)_last_app = app;
}
else
{
const int len = file.len();
if (len == 3 || (len == 4 && file[0] == '%'))
{
TTable table(file);
ok = table.get_relapp(app);
}
app = _last_app;
ok = TRUE;
}
return ok;
}
bool TMailer_mask::exec_app(int & err, const char * appname, const char * msg)
bool is_incomplete(const TString& l)
{
if (l[0] == '[')
return FALSE;
const char a = l.right(1)[0];
if (a == '=')
return TRUE;
const int eq = l.find("= '");
if (eq > 0 && eq < 20)
return a != '\'';
return FALSE;
}
void adjust_long_lines(const TFilename& tmp)
{
TFilename dst_name; dst_name.temp();
ofstream dst(dst_name);
bool adjusted = FALSE;
TScanner org(tmp);
while (TRUE)
{
const TString& l = org.line();
if (l.empty())
break;
if (is_incomplete(l))
{
adjusted = TRUE;
dst << l;
org.line();
while (l.right(1)[0] != '\'')
{
dst << l;
org.line();
}
}
dst << l << '\n';
}
org.close();
dst.close();
if (adjusted)
fcopy(dst_name, tmp);
remove(dst_name);
}
bool TMailer_mask::exec_app(int & err, const char * appname, TMail_message & msg)
{
TFilename tmp; tmp.temp();
{
ofstream outf(tmp);
TString message(msg);
message.replace('\r', '\n');
outf << message;
const int items = msg.items();
bool long_lines = FALSE;
TString message;
for (int i = 0; i < items; i++)
{
message = msg.row(i);
message.replace('\r', '\n');
outf << message;
}
outf.close();
}
adjust_long_lines(tmp);
TConfig ini(tmp, "Transaction");
ini.set("From", msg.sender());
}
TString command_line(appname);
command_line << " /i" << tmp << " -u" << ::dongle().administrator();
command_line << " /i" << tmp;
TExternal_app app(command_line);
err = app.run();
os_sleep(1000);
bool ok = err == NOERR;
if (ok)
{
TConfig ini(tmp, "Transaction");
@ -689,18 +764,21 @@ bool TMailer_mask::exec_app(int & err, const char * appname, const char * msg)
else
err = ini.get_int("Error");
}
::remove(tmp);
return ok;
}
bool TMailer_mask::save_curr_line(int & err)
bool TMailer_mask::save_sheet_line(int& err, int nrow)
{
TMail_lock ml(this);
TSheet_field& sf = sfield(F_MESSAGES);
TMask& m = sf.sheet_mask();
const int nrow = sf.selected();
if (nrow < 0)
nrow = sf.selected();
else
sf.update_mask(nrow);
TToken_string& row = sf.row(nrow);
const TString& msg = m.get(F_BODY);
@ -709,27 +787,33 @@ bool TMailer_mask::save_curr_line(int & err)
err = NOT_TRANS;
return FALSE; // It's not a transaction
}
TString subj = m.get(F_SUBJECT);
if (isalpha(subj[0])) // Controlla se la tabella in realtà è comune ed aggiunge il simbolino %
{
TString8 para; para << '[' << LF_TABCOM << ']';
if (msg.find(para) > 0)
subj.insert("%");
}
TFilename appname;
const TString& subj = m.get(F_SUBJECT);
if (!file2app(subj, appname)) // It hasn't a valid application
{
err = NOT_GEST;
return FALSE;
}
const TString old_mailto = set_ini_var(CONFIG_INSTALL, "Main", "MailTo", "");
bool ok = exec_app(err, appname, msg);
if (!ok && err == 204)
// const TString old_mailto = set_ini_var(CONFIG_INSTALL, "Main", "MailTo", "");
TMail_message& full_msg = _box.msg(nrow);
bool ok = exec_app(err, appname, full_msg);
if (!ok && err == _iskeynotfound)
{
TString insmsg(msg);
int pos = insmsg.find("MODIFY");
TString & first_row = full_msg.row(0);
int pos = first_row.find("MODIFY");
if (pos > 0)
{
insmsg.overwrite("INSERT", pos);
ok = exec_app(err, appname, insmsg);
first_row.overwrite("INSERT", pos);
ok = exec_app(err, appname, full_msg);
}
}
@ -748,20 +832,16 @@ bool TMailer_mask::save_curr_line(int & err)
}
// Restore mail recipient
if (old_mailto.not_empty())
set_ini_var(CONFIG_INSTALL, "Main", "MailTo", old_mailto);
// if (old_mailto.not_empty())
// set_ini_var(CONFIG_INSTALL, "Main", "MailTo", old_mailto);
return ok;
}
void TMailer_mask::save_all_lines()
{
CHECK(_vv == NULL,"Viswin already open ?");
mail_lock();
TViswin viswin(NULL, "Registrazione documenti", FALSE, TRUE, TRUE);
viswin.open_modal();
_vv = &viswin;
TBrowsefile_field& bf = (TBrowsefile_field&)field(F_LOG);
TViswin& vv = bf.vis_win();
TSheet_field& sf = sfield(F_MESSAGES);
TString body, msg;
@ -769,11 +849,10 @@ void TMailer_mask::save_all_lines()
time_t tempo;
time(&tempo);
const struct tm* d = localtime(&tempo);
msg.format("Inizio elaborazione: %02d-%02d-%04d %02d:%02d:%02d",
msg.format("- Inizio elaborazione: %02d-%02d-%04d %02d:%02d:%02d",
d->tm_mday, d->tm_mon+1, 1900+d->tm_year,
d->tm_hour, d->tm_min, d->tm_sec);
viswin.add_line(msg);
viswin.add_line("");
vv.add_line(msg);
bool one_saved = FALSE;
FOR_EACH_SHEET_ROW(sf, nrow, row)
@ -784,9 +863,8 @@ void TMailer_mask::save_all_lines()
row->get(sf.cid2index(F_BODY), body);
if (body.find("[Transaction]") >= 0)
{
sf.select(nrow);
int err = 0;
const bool yes = save_curr_line(err);
const bool yes = save_sheet_line(err, nrow);
if (yes)
{
msg << "elaborato con successo";
@ -800,23 +878,24 @@ void TMailer_mask::save_all_lines()
msg << " definire il programma gestore del file " << m.get(F_SUBJECT);
}
else
msg << "non elaborato a causa di un errore (n.ro " << err << ")";
msg << "non elaborato a causa di un errore (n.ro " << err << ')';
}
else
msg << "ignorato in quanto transazione non riconosciuta";
}
else
msg << "ignorato in quanto già elaborato";
viswin.add_line(msg);
vv.add_line(msg);
}
viswin.add_line("");
viswin.add_line("Fine elaborazione");
viswin.close_print();
viswin.close_modal();
mail_unlock();
viswin.run();
time(&tempo);
d = localtime(&tempo);
msg.format("- Fine elaborazione: %02d-%02d-%04d %02d:%02d:%02d",
d->tm_mday, d->tm_mon+1, 1900+d->tm_year,
d->tm_hour, d->tm_min, d->tm_sec);
vv.add_line(msg);
vv.add_line("");
vv.goto_end();
#ifdef DBG
if (one_saved && yesno_box("Si desidera eliminare i messaggi processati?"))
@ -834,7 +913,7 @@ bool TMailer_mask::on_field_event(TOperable_field& o, TField_event e, long jolly
{
switch (o.dlg())
{
case F_TIMER:
case F_TIMER:
if (e == fe_init || e == fe_modify)
{
if (_timer_id != XVT_TIMER_ERROR)
@ -859,7 +938,8 @@ bool TMailer_mask::on_field_event(TOperable_field& o, TField_event e, long jolly
!field(F_USER).empty() &&
!field(F_PASSWORD).empty())
{
auto_save_all();
// auto_save_all(); // Un po' troppo precipitoso: non permette di intervenire all'accensione
fill_messages();
}
} else
if (e == se_query_add)
@ -872,7 +952,7 @@ bool TMailer_mask::on_field_event(TOperable_field& o, TField_event e, long jolly
if (e == fe_button)
{
int err = 0;
if (!save_curr_line(err))
if (!save_sheet_line(err))
{
if (err == NOT_TRANS)
message_box("Messaggio ignorato in quanto transazione non riconosciuta");
@ -890,11 +970,13 @@ bool TMailer_mask::on_field_event(TOperable_field& o, TField_event e, long jolly
}
break;
case DLG_SAVEREC:
if (e == fe_button)
if (jolly == 0)
{
if (e == fe_button && jolly == 0)
{
if (curr_page() == 0)
save_all_lines();
}
else
save();
}
break;
case DLG_DELREC:
if (e == fe_button)
@ -945,6 +1027,23 @@ bool TMailer_mask::on_field_event(TOperable_field& o, TField_event e, long jolly
}
}
break;
case DLG_DELLOG:
if (e == fe_button)
{
TBrowsefile_field& bf = (TBrowsefile_field&)field(F_LOG);
TViswin& vv = bf.vis_win();
vv.destroy_lines();
}
break;
case DLG_PRINT:
if (e == fe_button)
{
TBrowsefile_field& bf = (TBrowsefile_field&)field(F_LOG);
TViswin& vv = bf.vis_win();
vv.text().print();
return FALSE; // Don't close
}
break;
default:
break;
}
@ -969,13 +1068,19 @@ void TMailer_mask::load_sheet(TConfig& ini, short dlg, const char* var)
void TMailer_mask::auto_save_all()
{
if (_mail_semaphore == 0)
{
mail_lock();
{
#ifdef DBG
if (yesno_box("Si desidera eliminare i messaggi processati?"))
#endif
test_delete();
fill_messages();
mail_unlock();
if (!field(F_TIMER).empty())
save_all_lines();
{
TSheet_field& sf = sfield(F_MESSAGES);
if (sf.items() > 0)
save_all_lines();
}
}
else
NFCHECK("Can't save locked mail");
@ -985,18 +1090,14 @@ void TMailer_mask::handler(WINDOW win, EVENT* ep)
{
if (ep->type == E_TIMER)
{
if (ep->v.timer.id == _timer_id && _mail_semaphore == 0)
{
if (ep->v.timer.id == _timer_id)
{
_secs++;
if (_secs >= get_long(F_TIMER) * 60)
{
if (_vv)
_vv->stop_run(K_ESC);
else
{
_secs = 0L;
_secs = 0L;
if (_mail_semaphore == 0)
auto_save_all();
}
}
}
}

View File

@ -8,6 +8,9 @@
#define F_ADDRESSES 211
#define F_PARAMS 212
#define F_LOG 213
#define DLG_DELLOG 214
#define F_CHECKED 101
#define F_SENDER 102
#define F_DATE 103

View File

@ -4,21 +4,14 @@ TOOLBAR "Toolbar" 0 -3 0 3
BUTTON DLG_SAVEREC 10 2
BEGIN
PROMPT -13 -11 ""
PROMPT -12 -11 ""
PICTURE BMP_SAVEREC
PICTURE BMP_SAVERECDN
END
BUTTON DLG_DELREC 10 2
BEGIN
PROMPT -23 -11 ""
PICTURE BMP_DELREC
PICTURE BMP_DELRECDN
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -33 -11 ""
PROMPT -22 -11 ""
PICTURE BMP_QUIT
PICTURE BMP_QUITDN
END
@ -64,7 +57,7 @@ BEGIN
GROUP G_SUPERUSER
END
SPREADSHEET F_MESSAGES
SPREADSHEET F_MESSAGES 0 -2
BEGIN
PROMPT 0 2 ""
ITEM "@1"
@ -76,8 +69,16 @@ BEGIN
ITEM "Mailer@4"
ITEM "Id@64"
GROUP G_SUPERUSER
FLAGS "|"
END
BUTTON DLG_DELREC 10 2
BEGIN
PROMPT -11 -1 ""
PICTURE BMP_DELREC
PICTURE BMP_DELRECDN
END
ENDPAGE
PAGE "Spedizione" -1 -1 78 20
@ -108,20 +109,44 @@ BEGIN
ITEM "OP@2"
ITEM "Filtro@64"
GROUP G_SUPERUSER
FLAGS "|"
END
ENDPAGE
PAGE "Log" -1 -1 78 20
BROWSEFILE F_LOG 0 -3
BEGIN
PROMPT 0 1 ""
END
BUTTON DLG_DELLOG 10 2
BEGIN
PROMPT -12 -1 ""
PICTURE BMP_DELREC
PICTURE BMP_DELRECDN
END
BUTTON DLG_PRINT 10 2
BEGIN
PROMPT -22 -1 ""
PICTURE BMP_PRINT
END
ENDPAGE
ENDMASK
PAGE "Message" -1 -1 62 19
PAGE "Message" -1 -1 78 19
BOOLEAN F_CHECKED
BEGIN
PROMPT 48 0 "Trasferito"
END
STRING F_SENDER 80 50
STRING F_SENDER 80 66
BEGIN
PROMPT 1 2 "Da "
FLAGS "D"
@ -139,12 +164,12 @@ BEGIN
FLAGS "D"
END
STRING F_SUBJECT 256 50
STRING F_SUBJECT 256 66
BEGIN
PROMPT 1 4 "Soggetto "
END
MEMO F_BODY 60 12
MEMO F_BODY 76 12
BEGIN
PROMPT 1 5 "Messaggio"
END
@ -155,7 +180,7 @@ BEGIN
FLAGS "D"
END
STRING F_ID 512 50
STRING F_ID 512 66
BEGIN
PROMPT 1 1 "Numero "
FLAGS "D"

View File

@ -1080,6 +1080,7 @@ void TConversione_archivi::convert_lia_pim() const
void TConversione_archivi::build_ver_table() const
// Costruisce la tabella %VER con i valori in vigore da Gennaio 1993
{
/* OB600039
TProgind p(10, "Creazione tabella VER", FALSE, FALSE, 10);
TTable ver("%VER");
@ -1097,6 +1098,7 @@ void TConversione_archivi::build_ver_table() const
ver.put("R11","88");ver.put("R12","88");
if (ver.write() != NOERR) ver.rewrite();
*/
}
void TConversione_archivi::convert_ca7_ql() const

View File

@ -1,5 +1,3 @@
#include <default.url>
MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File"
#include <mainmenu.url>

373
ba/baeur.cpp Executable file
View File

@ -0,0 +1,373 @@
#include <applicat.h>
#include <config.h>
#include <currency.h>
#include <prefix.h>
#include <progind.h>
#include <relation.h>
#include <utility.h>
#include <tabutil.h>
#include "../cg/cglib01.h"
#include "baeur.h"
inline TEuro_app& app() { return (TEuro_app&)main_app(); }
///////////////////////////////////////////////////////////
// Utilities
///////////////////////////////////////////////////////////
// Confronta due nomi di directory
bool dir_equal(const char* dir1, const char* dir2)
{
TFilename d1 = dir1; d1.strip("\\/");
TFilename d2 = dir2; d2.strip("\\/");
return d1 == d2;
}
void convert_import(TRectype& rec, const char* str)
{
if (str && *str)
{
TToken_string list = str;
FOR_EACH_TOKEN(list, tok)
{
real r = rec.get(tok);
if (r != ZERO)
{
r /= EURO;
r.round(2);
rec.put(tok, r);
}
}
}
}
void zero_import(TRectype& rec, const char* str)
{
if (str && *str)
{
TToken_string list = str;
FOR_EACH_TOKEN(list, tok)
rec.zero(tok);
}
}
HIDDEN const TString& build_name(int logicnum, bool euro, long firm)
{
TFilename dati, datie;
app().get_aree_dati(dati, datie);
TDir d; d.get(logicnum, _nolock, _nordir, _sysdirop);
TString8 ditta = "com";
if (!d.is_com())
{
if (firm < 0)
firm = app().get_firm();
if (firm > 0)
ditta.format("%05ldA", firm);
}
TFilename name = d.filename();
static TFilename _filename;
_filename = euro ? datie : dati;
_filename.add(ditta);
_filename.add(name.name());
_filename.insert("%", 0);
return _filename;
}
///////////////////////////////////////////////////////////
// Base app
///////////////////////////////////////////////////////////
bool TEuro_app::get_aree_dati(TFilename& lit, TFilename& eur) const
{
TConfig prassis(CONFIG_STUDIO, "Euro");
lit = prassis.get("DatiLire");
eur = prassis.get("DatiEuro");
if (lit.blank())
{
lit = prefix().get_studio();
lit.rtrim(1);
}
bool ok = eur.exist();
return ok;
}
bool TEuro_app::goto_euro(long ditta)
{
TFilename lit, eur;
bool ok = get_aree_dati(lit, eur);
if (ok)
{
TFilename cur = prefix().get_studio(); cur.rtrim(1);
if (ditta < 0)
ditta = get_firm();
if (!dir_equal(cur, eur))
ok = prefix().set_studio(eur, ditta);
else
prefix().set_codditta(ditta);
}
if (!ok)
error_box("Impossibile utilizzare lo studio in euro '%s'", (const char*)eur);
return ok;
}
bool TEuro_app::goto_lire(long ditta)
{
TFilename lit, eur;
get_aree_dati(lit, eur);
bool ok = !lit.blank() && fexist(lit);
if (ok)
{
TFilename cur = prefix().get_studio(); cur.rtrim(1);
if (ditta < 0)
ditta = get_firm();
if (!dir_equal(cur, lit))
ok = prefix().set_studio(lit, ditta);
else
prefix().set_codditta(ditta);
}
if (!ok)
error_box("Impossibile utilizzare lo studio in lire '%s'", (const char*)lit);
return ok;
}
bool TEuro_app::save_round_bill(const TBill& b) const
{
TFilename lit, eur;
bool ok = get_aree_dati(lit, eur);
if (ok)
{
eur.add("config/prassis.ini");
TConfig prassis(eur, "Euro");
TString16 str;
str.format("%d,%d,%ld", b.gruppo(), b.conto(), b.sottoconto());
prassis.set("RoundBill", str);
}
return ok;
}
bool TEuro_app::load_round_bill(TBill& b) const
{
TFilename lit, eur;
bool ok = get_aree_dati(lit, eur);
if (ok)
{
eur.add("config/prassis.ini");
TConfig prassis(eur, "Euro");
TToken_string str(prassis.get("RoundBill"), ',');
const int g = str.get_int();
const int c = str.get_int();
const long s = str.get_long();
b.set(g, c, s);
ok = b.find();
}
return ok;
}
bool TEuro_app::copy_dir(const char* src, const char* dst) const
{
bool ok = TRUE;
if (!fexist(dst))
make_dir(dst);
TString_array files;
TFilename file1, file2;
file1 = src; file1.add("*.*");
list_files(file1, files);
TString str;
str << "Copia da " << src << " a " << dst << "...";
TProgind pi(files.items(), str, FALSE, TRUE);
FOR_EACH_ARRAY_ROW(files, i, file)
{
pi.addstatus(1);
file1 = *file;
file2 = dst; file2.add(file1.name());
ok &= fcopy(file1, file2);
}
return ok;
}
bool TEuro_app::is_com_file(int lf) const
{
TDir d;
d.get(lf, _nolock, _nordir, _sysdirop);
return d.is_com();
}
void TEuro_app::zap_file(int lf, bool euro) const
{
TFilename name = build_name(lf, euro, -1);
if (name[0] == '%') name.ltrim(1);
TExternisamfile f(name);
f.zap();
}
/*
void TEuro_app::zap_table(const char * tab, bool euro)
{
const int lf = tab && *tab == '%' ? LF_TABCOM : LF_TAB;
TFilename name = build_name(lf, euro, -1);
if (name[0] == '%') name.ltrim(1);
TExternisamfile f(name);
if (!f.empty())
{
TString16 tabname(lf == LF_TAB ? tab : tab + 1);
f.put("COD", tabname);
for (f.read(_isgteq); f.good() && tabname == f.get("COD"); f.next())
f.remove();
}
}
*/
void TEuro_app::convert_file(int lf, const char* cnv, const char* res, record_handler rh, void* jolly)
{
// Cursore su file in lire
TRelation rel(lf);
TCursor cur(&rel);
TRectype& curr = rel.curr();
zap_file(lf, TRUE); // Azzera file in euro
// File destinazione in euro
TEuroisamfile fileur(lf, TRUE);
TRectype& receur = fileur.curr();
TString str;
str << "Conversione " << rel.lfile().description() << " ...";
TToken_string conv(cnv);
TToken_string azze(res);
const long items = cur.items();
cur.freeze();
TProgind pi(items, str, FALSE, TRUE);
for (cur = 0L; cur.pos() < items; ++cur)
{
pi.addstatus(1);
receur = curr;
convert_import(receur, conv);
zero_import(receur, azze);
bool do_write = TRUE;
if (rh != NULL)
do_write = rh(receur, jolly);
if (do_write)
fileur.write();
}
}
/*
void TEuro_app::convert_table(const char *tab, const char* cnv, const char* res, record_handler rh, void* jolly)
{
// Cursore su file in lire
TRelation rel(tab);
TCursor cur(&rel);
TRectype& curr = rel.curr();
zap_table(tab, TRUE);
// File destinazione in euro
TEuroisamfile tabeur(tab && *tab == '%' ? LF_TABCOM : LF_TAB, TRUE);
TRectype& receur = tabeur.curr();
TString str;
str << "Conversione " << rel.lfile().description() << " ...";
TToken_string conv(cnv);
TToken_string azze(res);
const long items = cur.items();
cur.freeze();
TProgind pi(items, str, FALSE, TRUE);
for (cur = 0L; cur.pos() < items; ++cur)
{
pi.addstatus(1);
receur = curr;
convert_import(receur, conv);
zero_import(receur, azze);
bool do_write = TRUE;
if (rh != NULL)
do_write = rh(receur, jolly);
if (do_write)
tabeur.write();
}
}
*/
bool TEuro_app::data_adozione_euro(long firm, TDate& adozione, bool& inizio) const
{
TFilename dati, datie;
get_aree_dati(dati, datie);
TString8 ditta;
ditta.format("%05ldA", firm <= 0 ? get_firm() : firm);
TFilename inie = datie;
inie.add(ditta);
inie.add("prassid.ini");
inizio = TRUE; // Supponiamo che adotti l'euro ad inizio esercizio
bool adotta = inie.exist();
if (adotta)
{
TConfig prassid(inie, "Euro");
adozione = prassid.get("DataAdozione");
adotta = adozione.ok();
if (adotta)
{
TEsercizi_contabili esc;
const int anno = esc.date2esc(adozione);
if (anno > 0)
inizio = adozione == esc[anno].inizio();
}
}
return adotta;
}
///////////////////////////////////////////////////////////
// TEuroisamfile
///////////////////////////////////////////////////////////
TEuroisamfile::TEuroisamfile(int logicnum, bool euro, long firm)
: TIsamtempfile(logicnum, build_name(logicnum, euro, firm), FALSE, FALSE)
{
}
///////////////////////////////////////////////////////////
// main
///////////////////////////////////////////////////////////
int main(int argc, char** argv)
{
TApplication::check_parameters(argc, argv);
int a = argc > 1 ? argv[1][1]-'0' : 0;
switch (a)
{
case 1: baeur01(argc, argv); break;
case 2: baeur02(argc, argv); break;
case 3: baeur03(argc, argv); break;
case 4: baeur04(argc, argv); break;
case 5: baeur05(argc, argv); break;
case 6: baeur06(argc, argv); break;
case 7: baeur07(argc, argv); break;
case 8: baeur08(argc, argv); break;
case 9: baeur09(argc, argv); break;
default: baeur00(argc, argv); break;
}
return 0;
}

101
ba/baeur.h Executable file
View File

@ -0,0 +1,101 @@
#ifndef __BAEUR_H
#define __BAEUR_H
#ifndef __APPLICAT_H
#include <applicat.h>
#endif
#ifndef __ISAM_H
#include <isam.h>
#endif
#ifndef __CGLIB01_H
class TBill;
#endif
// Handler personalizzato. Se ritorna true rewrite, altrimenti remove
typedef bool (*record_handler)(TRectype& rec, void* jolly);
class TEuro_app : public TSkeleton_application
{
protected:
bool goto_lire(long ditta = -1);
bool goto_euro(long ditta = -1);
bool copy_dir(const char* src, const char* dst) const;
void convert_file(int lf, const char* cnv, const char* res,
record_handler rh = NULL, void* jolly = NULL);
void zap_file(int lf, bool euro) const;
void zap_table(const char * tab, bool euro);
bool is_com_file(int lf) const;
bool is_firm_file(int lf) const { return !is_com_file(lf); }
public:
bool get_aree_dati(TFilename& lit, TFilename& eur) const;
bool data_adozione_euro(long firm, TDate& adozione, bool& inizio) const;
bool save_round_bill(const TBill& b) const;
bool load_round_bill(TBill& b) const;
};
class TEuroisamfile : public TIsamtempfile
{
public:
TEuroisamfile(int logicnum, bool euro = FALSE, long firm = -1);
};
struct TCG_rmov : public TObject
{
int _gruppo, _conto;
long _sottoconto;
TImporto _importo;
};
class TCG_mov : public TArray
{
enum { MAX_CG_ROWS = 98};
protected:
const TCG_rmov& row(int i) const { return (const TCG_rmov&)*objptr(i); }
void crea_testata(TLocalisamfile& mov, const TString& caus,
const TDate& datareg, const TString& desc) const;
void crea_riga(const TRectype& mov, TRectype& rmov, int r) const;
void update_saldo(const TRectype& mov, const TRectype& rmov, TLocalisamfile& saldi);
public:
void add(int g, int c, long s, char sez, const real& imp);
void add(const TBill& bill, const TImporto& imp);
TImporto save(const TDate& datareg, const TString& caus, const TString& desc,
const TBill& contro, bool adeuro, bool convert, bool invert);
};
class TCG_movs : public TArray
{
public:
int indbil(int g, int c) const;
TCG_mov& mov(int ib);
int add(int g, int c, long s, char sez, const real& imp);
TImporto save(const TDate& datareg, const TString& caus, const TString& desc, const TBill& contro,
bool adeuro, bool convert, bool invert);
};
bool dir_equal(const char* dir1, const char* dir2);
void convert_import(TRectype& rec, const char* str);
void zero_import(TRectype& rec, const char* str);
const real EURO(1936.27);
int baeur00(int argc, char* argv[]);
int baeur01(int argc, char* argv[]);
int baeur02(int argc, char* argv[]);
int baeur03(int argc, char* argv[]);
int baeur04(int argc, char* argv[]);
int baeur05(int argc, char* argv[]);
int baeur06(int argc, char* argv[]);
int baeur07(int argc, char* argv[]);
int baeur08(int argc, char* argv[]);
int baeur09(int argc, char* argv[]);
#endif

3
ba/baeur.url Executable file
View File

@ -0,0 +1,3 @@
#include <default.url>
#include <mainmenu.url>

401
ba/baeur00.cpp Executable file
View File

@ -0,0 +1,401 @@
#include <automask.h>
#include <defmask.h>
#include <prefix.h>
#include <progind.h>
#include <relation.h>
#include <utility.h>
#include <nditte.h>
#include <partite.h>
#include <scadenze.h>
#include <pagsca.h>
#include <saldi.h>
#include <tabutil.h>
#include "baeur.h"
#include "../cg/cglib01.h"
#include "baeur01.h"
#include "baeur02.h"
///////////////////////////////////////////////////////////
// Main app
///////////////////////////////////////////////////////////
class TEuro00_app : public TEuro_app
{
protected:
void set_prassis(const TString& dir, const TMask& m) const;
void reset_770(const TString& dst) const;
void convert_tabcom(const TString& lit, const TString& eur);
void convert_ini();
void convert_ditte(const TString& eur);
void convert_anag();
public:
KEY step1();
KEY step2();
virtual void main_loop();
};
inline TEuro00_app& app() { return (TEuro00_app&)main_app(); }
///////////////////////////////////////////////////////////
// Step 1
///////////////////////////////////////////////////////////
class TEuro01_mask : public TAutomask
{
public:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
TEuro01_mask() : TAutomask("baeur01") { }
};
bool TEuro01_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F01_DATIE:
if (e == fe_close || e == fe_modify)
{
const TFilename n = o.get();
const bool esiste = n.exist();
enable(DLG_QUIT, esiste);
if (strlen(n.name()) > 8)
return error_box("L'area dati in Euro ha un nome troppo lungo: %s", (const char*)n.name());
if (esiste)
return error_box("L'area dati in Euro esiste già");
} else
if (e == fe_init)
{
TFilename lit, eur;
app().get_aree_dati(lit, eur);
set(F01_DATI, lit);
if (eur.empty())
eur << lit << "e";
set(F01_DATIE, eur);
enable(DLG_QUIT, eur.exist());
}
break;
default:
break;
}
return TRUE;
}
void TEuro00_app::set_prassis(const TString& dir, const TMask& m) const
{
TFilename str = dir;
str.add("config/prassis.ini");
TConfig prassis(str, "Euro");
prassis.set("DatiLire", m.get(F01_DATI));
prassis.set("DatiEuro", m.get(F01_DATIE));
}
void TEuro00_app::reset_770(const TString& dst) const
{
TFilename filemask = dst; filemask.add("*.dbf");
TString_array files;
list_files(filemask, files);
FOR_EACH_ARRAY_ROW(files, i, name)
{
TExternisamfile eif(*name);
eif.zap();
}
}
KEY TEuro00_app::step1()
{
goto_lire();
TEuro01_mask* m = new TEuro01_mask;
KEY k = m->run();
if (k == K_ENTER)
{
const TFilename dir1 = m->get(F01_DATI);
const TFilename dir2 = m->get(F01_DATIE);
if (!fexist(dir2))
make_dir(dir2);
TFilename src = dir1; src.add("config");
TFilename dst = dir2; dst.add("config");
copy_dir(src, dst);
set_prassis(dir1, *m);
set_prassis(dir2, *m);
delete m; m = NULL;
TCurrency::force_cache_update(); // Chiude cache valute
prefix().set(NULL); // Chiude tutti i files
src = dir1; src.add("com"); // Copia dati comuni
dst = dir2; dst.add("com");
copy_dir(src, dst);
src = dir1; src.add("std"); // Copia dati standard
dst = dir2; dst.add("std");
copy_dir(src, dst);
src = dir1; src.add("m770"); // Copia dati 770
dst = dir2; dst.add("m770");
copy_dir(src, dst);
goto_lire(); // Necessario per riaccedere ai tracciati
reset_770(dst);
}
if (m) delete m;
return k;
}
///////////////////////////////////////////////////////////
// Step 2
///////////////////////////////////////////////////////////
class TEuro02_mask : public TAutomask
{
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TEuro02_mask() : TAutomask("baeur02") { }
};
bool TEuro02_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F02_LIT:
case F02_EUR:
if (e == fe_init)
{
TEdit_field& ef = (TEdit_field&)o;
TCursor* cur = ef.browse()->cursor();
if (cur != NULL && cur->items() > 0)
{
*cur = 0;
ef.set(cur->curr().get("CODTAB"));
ef.check(STARTING_CHECK);
}
}
break;
default: break;
}
return TRUE;
}
struct TTabcom_data
{
TString4 _lit, _eur;
int _last_stato;
};
HIDDEN bool tabcom_handler(TRectype& curr, void* jolly)
{
bool update = TRUE;
const TString4 cod = curr.get("COD");
if (cod == "CLM")
{
convert_import(curr, "R0|R1|R2|R3");
}
if (cod == "DEL")
{
update = FALSE;
}
if (cod == "LIA")
{
const int anno = atoi(curr.get("CODTAB").mid(5, 4));
if (anno >= 2001)
zero_import(curr, "R0|R1|R2|R3|R5|R15"); // Azzera crediti residui vari
else
update = FALSE;
}
if (cod == "PLA")
{
const int anno = atoi(curr.get("CODTAB").mid(5, 4));
if (anno >= 2001)
zero_import(curr, "R5|R6|R7|R8"); // Azzera prorata
else
update = FALSE;
}
if (cod == "VAL")
{
TTabcom_data* data = (TTabcom_data*)jolly;
const TString& lit = data->_lit;
const TString& eur = data->_eur;
const TString& val = curr.get("CODTAB");
if (val == lit)
{
const real r = 1.0 / EURO;
curr.put("B0", ""); curr.put("B1", "X");
curr.put("S4", EURO); curr.put("R10", r);
} else
if (val == eur)
{
curr.put("B0", "X"); curr.put("B1", "");
curr.put("S4", "1"); curr.put("R10", "1");
}
else
{
curr.put("B0", "");
if (!curr.get_bool("B1"))
{
real c = curr.get("S4");
if (c != ZERO)
{
c = EURO / c;
curr.put("S4", c.string(0,6));
curr.put("B1", "X");
}
curr.zero("R10");
}
}
}
if (cod == "VER")
{
zero_import(curr, "R5|R6|R7|R8|R9|R10");
}
return update;
}
void TEuro00_app::convert_tabcom(const TString& lit, const TString& eur)
{
TTabcom_data data;
data._lit = lit;
data._eur = eur;
TTable stati("%STD");
TTable tipi("%TIP");
stati.last();
const int last_stato = stati.get_int("CODTAB");
for (tipi.first(); tipi.good(); tipi.next())
{
TString80 s2;
s2 = tipi.get("S2");
if (s2.len() < 3 || s2[2] == ' ')
{
const char s[2] = { last_stato + '0', '\0'};
s2.overwrite(s, 2, 1);
tipi.put("S2", s2);
tipi.rewrite();
}
}
convert_file(LF_TABCOM, NULL, NULL, tabcom_handler, &data);
}
HIDDEN void convert_ini_val(TConfig& inilit, TConfig& inieur, const char* name, int index)
{
real val = inilit.get(name, NULL, index);
if (!val.is_zero())
{
val /= EURO;
val.round(2);
inieur.set(name, val.string(0, 2), NULL, TRUE, index);
}
}
void TEuro00_app::convert_ini()
{
TFilename lit, eur;
app().get_aree_dati(lit, eur);
lit.add("config\\prassis.ini");
TConfig inilit(lit, "ve");
eur.add("config\\prassis.ini");
TConfig inieur(eur, "ve");
for (int i = 1; i <= 7; i++)
{
convert_ini_val(inilit, inieur, "SPBOSCA", i);
convert_ini_val(inilit, inieur, "SPBOIMP", i);
}
convert_ini_val(inilit, inieur, "BOLLIES", -1);
convert_ini_val(inilit, inieur, "IMPMINBOLLI", -1);
for (i = 1; i <= 9; i++)
convert_ini_val(inilit, inieur, "IMPSPINC", i);
}
HIDDEN bool ditte_handler(TRectype& curr, void* jolly)
{
TTabcom_data* data = (TTabcom_data*)jolly;
curr.put(NDT_VALUTA, data->_eur);
return TRUE;
}
void TEuro00_app::convert_ditte(const TString& eur)
{
TTabcom_data data;
data._eur = eur;
convert_file(LF_NDITTE, NULL, NULL, ditte_handler, &data);
}
void TEuro00_app::convert_anag()
{
convert_file(LF_ANAGGIU, NULL, "VALNOM|CAPSOC|CAPVER|FATT", NULL, NULL);
convert_file(LF_SOCI, NULL, "EMOLUMENTO", NULL, NULL);
if (is_com_file(LF_CLIFO))
{
convert_file(LF_CLIFO, NULL, "FIDO", NULL, NULL);
convert_file(LF_CFVEN, "IMPMINEFF", "", NULL, NULL);
}
}
KEY TEuro00_app::step2()
{
goto_lire();
TString16 eur, lit;
KEY k = K_QUIT;
{
TEuro02_mask m;
k = m.run();
lit = m.get(F02_LIT);
eur = m.get(F02_EUR);
}
if (k == K_ENTER)
{
convert_tabcom(lit, eur);
convert_ini();
convert_ditte(eur);
convert_anag();
}
return k;
}
///////////////////////////////////////////////////////////
// Main
///////////////////////////////////////////////////////////
void TEuro00_app::main_loop()
{
int step = 1;
while (step >= 1 && step <= 2)
{
KEY k = K_ENTER;
switch (step)
{
case 1: k = step1(); break;
case 2: k = step2(); break;
default: break;
}
if (k == K_ENTER || k == K_QUIT)
step++;
if (k == K_ESC)
step--;
}
}
int baeur00(int argc, char* argv[])
{
TEuro00_app ma;
ma.run(argc, argv, "Creazione Studio Euro");
return 0;
}

736
ba/baeur01.cpp Executable file
View File

@ -0,0 +1,736 @@
#include <applicat.h>
#include <automask.h>
#include <dongle.h>
#include <execp.h>
#include <modaut.h>
#include <prefix.h>
#include <progind.h>
#include <relation.h>
#include <nditte.h>
#include <partite.h>
#include <scadenze.h>
#include <pagsca.h>
#include <saldi.h>
#include "baeur.h"
#include "baeur10.h"
#include "baeur11.h"
#include "../cg/cglib01.h"
#include "../mg/mag.h"
#include "../mg/movmag.h"
#include "../mg/rmovmag.h"
#include "../mg/mglib.h"
///////////////////////////////////////////////////////////
// Main app
///////////////////////////////////////////////////////////
class TEuro01_app : public TEuro_app
{
protected:
void convert_saldi(const TDate& adozione, const TBill& arrotino);
void convert_partite();
virtual bool create();
public:
KEY convert_firm(long ditta);
virtual void main_loop();
};
inline TEuro01_app& app() { return (TEuro01_app&)main_app(); }
///////////////////////////////////////////////////////////
// Step 3
///////////////////////////////////////////////////////////
class TEuro03_mask : public TAutomask
{
void fill_ditte();
public:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
TEuro03_mask() : TAutomask("baeur10") { }
};
void TEuro03_mask::fill_ditte()
{
TFilename lit, eur;
app().get_aree_dati(lit, eur);
TRelation rel(LF_NDITTE);
TCursor cur(&rel);
const TRectype& curr = rel.curr();
const long items = cur.items();
cur.freeze();
TSheet_field& ditte = sfield(F03_DITTE);
ditte.destroy();
for (cur = 0L; cur.pos() < items; ++cur)
{
const long ditta = curr.get_long(NDT_CODDITTA);
if (prefix().exist(ditta))
{
TToken_string& row = ditte.row(-1);
row.add(" ");
row.add(ditta);
row.add(curr.get(NDT_RAGSOC));
TFilename firm;
firm.format("%s/%05ldA", (const char*)eur, ditta);
COLOR col = COLOR_BLACK;
if (firm.exist())
{
firm.add("prassid.ini");
TConfig ini(firm, "Euro");
TString16 dde = ini.get("DataAdozione");
if (dde.empty())
{
row.add("Creata direttamente in Euro");
col = COLOR_RED;
}
else
{
TString str; str << "Adotta l'Euro dal " << dde;
row.add(str);
col = COLOR_GREEN;
}
}
else
{
row.add("X", 0);
row.add("Non presente in Euro");
}
if (col != COLOR_BLACK)
{
int i = ditte.items()-1;
ditte.set_back_and_fore_color(col, -1, i);
}
}
}
ditte.force_update();
}
bool TEuro03_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F03_DITTE:
if (e == fe_init)
fill_ditte();
if (e == se_query_add || e == se_query_del)
return FALSE;
break;
default:
break;
}
return TRUE;
}
///////////////////////////////////////////////////////////
// Step 4 - Conversione ditta
///////////////////////////////////////////////////////////
class TEuro11_mask : public TAutomask
{
public:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
TEuro11_mask() : TAutomask("baeur11") { }
};
bool TEuro11_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F11_ADOZIONE:
if (e == fe_modify || e == fe_close)
{
TEsercizi_contabili esc;
TDate d = o.get();
if (!d.ok())
return error_box("E' necessario specificare la data di adozione dell'Euro");
const int codesc = esc.date2esc(d);
if (codesc <= 0)
return error_box("E' necessario aprire l'esercizio per l'anno %d", d.year());
/* TLocalisamfile sch(LF_SCHPERC);
if (sch.items() > 0L)
{
bool inizio;
data_adozione_euro(-1L, d, inizio);
if (!inizio)
return error_box("La conversione dei percipienti puó essere effettuata solo a inizio esercizio");
}
*/
if (d.day() != 1)
warning_box("Si consiglia di specificare una data di inizio mese/trimestre");
if (dongle().active(MGAUT))
{
TConfig c(CONFIG_DITTA, "mg");
if (c.get_bool("GESMAG") && d != esc[codesc].inizio())
{
const int prevesc = esc.date2prevesc(d);
if (prevesc > 0)
{
const TDate& cm = esc[prevesc].chiusura_mag();
if (!cm.ok())
return error_box("E' necessario chiudere il magazzino nel %d", prevesc);
}
}
}
}
break;
default: break;
}
return TRUE;
}
///////////////////////////////////////////////////////////
// Conversione ditta
///////////////////////////////////////////////////////////
struct TMag_data
{
int _annoesrif;
TString _fields;
TString _zero_fields;
};
static bool mag_handler(TRectype& rec, void* jolly)
{
TMag_data& mag = *(TMag_data*)jolly;
const int annoesrif = *((int *) jolly);
const int annoes = rec.get_int(MAG_ANNOES);
if (annoes >= mag._annoesrif)
zero_import(rec, mag._zero_fields);
else
convert_import(rec, mag._fields);
return TRUE;
}
static bool movmag_handler(TRectype& rec, void* jolly)
{
TMag_data& mag = *(TMag_data*)jolly;
const int annoesrif = *((int *) jolly);
const int annoes = rec.get_int(MOVMAG_ANNOES);
return annoes >= annoesrif;
}
static bool righemovmag_handler(TRectype& rec, void* jolly)
{
TMag_data& mag = *(TMag_data*)jolly;
const int annoesrif = *((int *) jolly);
TString16 key; key << rec.get_long(RMOVMAG_NUMREG);
const int annoes = atoi(cache().get(LF_MOVMAG, key, MOVMAG_ANNOES));
return annoes >= annoesrif;
}
struct TTab_data
{
int _codes_rif, _annoes_rif;
};
/* static bool perc_handler(TRectype& rec, void* jolly)
{
return app().get_firm() == rec.get_long("CODDITTA");
}
static bool sch_handler(TRectype& rec, void* jolly)
{
bool ok = perc_handler(rec, jolly);
if (ok)
{
}
return ok;
} */
static bool tab_handler(TRectype& rec, void* jolly)
{
const TString& cod = rec.get("COD");
if (cod == "CAM")
return FALSE;
if (cod == "ESC")
{
TTab_data* data = (TTab_data*)jolly;
const int ese = rec.get_int("CODTAB");
return ese >= data->_codes_rif;
}
if (cod == "REG")
{
TTab_data* data = (TTab_data*)jolly;
const int annoes = atoi(rec.get("CODTAB").left(4));
zero_import(rec, "R0|R1|R2");
return annoes >= data->_annoes_rif;
}
if (cod == "SPP" || cod == "PRS")
{
const TString16 val = rec.get("S4");
if (is_firm_value(val))
{
rec.zero("S4");
convert_import(rec, "R0");
}
else
{
if (is_euro_value(val))
rec.zero("S4");
}
return TRUE;
}
if (cod == "RFA")
{
zero_import(rec, "R1|R2");
return TRUE;
}
if (cod == "LAM" || cod == "LIM" || cod == "PIM" || cod == "PUM" || cod == "PAM" ||
cod == "POM" || cod == "PLM" || cod == "PPA" || cod == "PRM")
return FALSE;
return TRUE;
}
static bool conv_condv(TRectype& rec, void* jolly)
{
const TString16 val = rec.get("CODVAL");
if (is_firm_value(val) || is_euro_value(val))
{
rec.zero("CODVAL");
rec.zero("CAMBIO");
rec.zero("CONTROEURO");
}
else
if (!rec.get_bool("CONTROEURO"))
{
real contro_change = EURO / rec.get_real("CAMBIO");
rec.put("CAMBIO", contro_change);
rec.put("CONTROEURO", "X");
}
return TRUE;
}
static bool conv_rcondv(TRectype& rec, void* jolly)
{
TString80 key;
key << rec.get("TIPO");
key << "|" << rec.get("CATVEN");
key << "|" << rec.get("TIPOCF");
key << "|" << rec.get("CODCF");
key << "|" << rec.get("COD");
const TString16 val = cache().get(LF_CONDV, key, "CODVAL");
if (is_firm_value(val))
convert_import(rec, "PREZZO");
return TRUE;
}
KEY TEuro01_app::convert_firm(long ditta)
{
TFilename lit, eur;
get_aree_dati(lit, eur);
prefix().set_studio(lit, ditta);
TString16 firm; firm.format("%05ldA", ditta);
TFilename litf = lit; litf.add(firm);
TFilename eurf = eur; eurf.add(firm);
const bool already_present = eurf.exist();
bool do_copy = !already_present;
bool do_saldi = !already_present;
bool do_partite = !already_present;
bool do_vendite = !already_present;
bool do_magazzino = !already_present;
TDate adozione;
TBill arrotino;
KEY k = K_ENTER;
if (k == K_ENTER)
{
TEuro11_mask m;
m.set(F11_DITTA, ditta, TRUE);
m.set(F11_DATI, lit);
m.set(F11_DATIE, eur);
m.set(F11_COPY, do_copy ? "X" : "");
m.set(F11_SALDI, do_saldi ? "X" : "");
m.set(F11_PARTITE, do_partite ? "X" : "");
m.set(F11_VENDITE, do_vendite ? "X" : "");
m.set(F11_MAGAZZINO, do_magazzino ? "X" : "");
if (already_present)
{
TFilename ini = eurf; ini.add("prassid.ini");
TConfig prassid(ini, "Euro");
adozione = prassid.get("DataAdozione");
m.set(F11_ADOZIONE, adozione);
}
m.enable(-1, already_present); // Abilita i vari checkbox
if (load_round_bill(arrotino))
{
arrotino.set(m, F11_DIFF_G, F11_DIFF_C, F11_DIFF_S);
m.field(F11_DIFF_S).check(STARTING_CHECK);
}
k = m.run();
adozione = m.get(F11_ADOZIONE);
arrotino.get(m, F11_DIFF_G, F11_DIFF_C, F11_DIFF_S);
do_copy = m.get_bool(F11_COPY);
do_saldi = m.get_bool(F11_SALDI);
do_partite = m.get_bool(F11_PARTITE);
do_vendite = m.get_bool(F11_VENDITE);
do_magazzino = m.get_bool(F11_MAGAZZINO);
}
if (k == K_ENTER)
{
if (do_copy && already_present)
do_copy = yesno_box("Si conferma la sovrascrittura della ditta %ld in Euro?", ditta);
TEsercizi_contabili esc;
const int codes_rif = esc.date2prevesc(adozione);
const int annoes_rif = adozione.year()-1;
if (do_copy)
{
TCurrency::force_cache_update(); // Chiude cache valute
prefix().set(NULL); // Chiude files ditta
copy_dir(litf, eurf);
if (adozione.ok()) // Dummy test
{
TFilename ini = eurf; ini.add("prassid.ini");
TConfig prassid(ini, "Euro");
prassid.set("DataAdozione", adozione.string());
}
save_round_bill(arrotino);
prefix().set("."); // Riapre files ditta
set_firm(ditta);
TTab_data data;
data._codes_rif = codes_rif;
data._annoes_rif = annoes_rif;
convert_file(LF_TAB, NULL, NULL, tab_handler, (void*)&data);
if (is_firm_file(LF_CLIFO))
{
convert_file(LF_CLIFO, NULL, "FIDO", NULL, NULL);
convert_file(LF_CFVEN, "IMPMINEFF", "MINORD|MAXORD", NULL, NULL);
}
zap_file(LF_MOV, TRUE); // Cancella movimenti di prima nota dell'area euro
zap_file(LF_RMOV, TRUE); // Cancella righe di prima nota dell'area euro
zap_file(LF_RMOVIVA, TRUE); // Cancella righe iva dell'area euro
zap_file(LF_REFFETTI, TRUE);
zap_file(LF_EFFETTI, TRUE);
zap_file(LF_CESS, TRUE);
zap_file(LF_INTRA, TRUE);
zap_file(LF_RINTRA, TRUE);
zap_file(LF_RIEPRETT, TRUE);
/* convert_file(LF_PERC, NULL, NULL, perc_handler, (void*)&data);
convert_file(LF_SCHPERC, NULL, NULL, sch_handler, (void*)&data);
convert_file(LF_RVER, NULL, NULL, sch_handler, (void*)&data);
convert_file(LF_RPAG, NULL, NULL, sch_handler, (void*)&data); */
}
if (do_saldi)
convert_saldi(adozione, arrotino); // Converti saldi
if (do_partite)
convert_partite(); // Converti partite
if (do_vendite)
{
zap_file(LF_DOC, TRUE);
zap_file(LF_RIGHEDOC, TRUE);
convert_file(LF_ANAMAG, "COSTSTD|ULTCOS1|ULTCOS2|VALSTATUN", "");
convert_file(LF_UMART, "PREZZO", "");
// cvrt condv codval cambio
// cvrt rcondv prezzo
convert_file(LF_RCONDV, "", "", conv_rcondv);
convert_file(LF_CONDV, "", "", conv_condv);
convert_file(LF_SVRIEP, "VALORE", "");
}
if (do_magazzino)
{
TMag_data mag;
mag._annoesrif = esc.date2esc(adozione);
mag._zero_fields << "RIM|VALRIM|ACQ|VALACQ|ENT|VALENT|VEN|VALVEN|USC|VALUSC|GIAC|ORDF|VALORDF|";
mag._zero_fields << "ORDC|VALORDC|INCL|ACL|PRODCOMP|PRODFIN|NLABEL|NDIST|SCARTI|VALSCARTI|";
mag._zero_fields << "USER1|USERVAL1|USER2|USERVAL2|USER3|USERVAL3|";
mag._zero_fields << "USER4|USERVAL4|USER5|USERVAL5|USER6|USERVAL6";
mag._fields << "VALRIM|VALACQ|VALENT|VALVEN|VALUSC|VALORDF|VALORDC|VALSCARTI|";
mag._fields << "USERVAL1|USERVAL2|USERVAL3|USERVAL4|USERVAL5|USERVAL6";
convert_file(LF_MAG, "", "", mag_handler, (void*)&mag);
convert_file(LF_MOVMAG, "", "", movmag_handler, (void*)&mag);
convert_file(LF_RMOVMAG, "PREZZO", "", righemovmag_handler, (void*)&mag);
convert_file(LF_STOMAG, "VALORE|ULTCOS1|COSTSTD|COSTOMEDIO|PRZLIST", "");
convert_file(LF_DIST, "PREZZO", "");
TExternal_app app("baeur -6 S");
app.run();
}
}
return k;
}
///////////////////////////////////////////////////////////
// Conversione saldi
///////////////////////////////////////////////////////////
struct TSaldi_data
{
int _annoes;
TBill _arrot;
TImporto _sld;
};
static bool saldi_handler(TRectype& rec, void* jolly)
{
TSaldi_data& sld = *(TSaldi_data*)jolly;
const int annoes = rec.get_int(SLD_ANNOES);
if (annoes == sld._annoes)
{
const TImporto iniz(rec.get_char(SLD_FLAGSALINI), rec.get_real(SLD_SALDO));
const TImporto pdare('D', rec.get_real(SLD_PDARE));
const TImporto pavere('A', rec.get_real(SLD_PAVERE));
TImporto saldo = iniz; saldo += pdare; saldo += pavere;
if (!saldo.is_zero())
{
saldo.normalize();
rec.put(SLD_FLAGSALINI, saldo.sezione());
rec.put(SLD_SALDO, saldo.valore());
convert_import(rec, "SALDO|FLAGSALFIN|SALDOFIN");
zero_import(rec, "PDARE|PAVERE|PDAREPRO|PAVEREPRO");
sld._sld += TImporto(saldo.sezione(), rec.get_real(SLD_SALDO)); // Somma saldo in euro
return TRUE;
}
}
return FALSE;
}
void TEuro01_app::convert_saldi(const TDate& adozione, const TBill& arrotino)
{
TEsercizi_contabili esc;
TSaldi_data sld;
sld._annoes = esc.date2prevesc(adozione);
sld._arrot = arrotino;
convert_file(LF_SALDI, NULL, NULL, saldi_handler, &sld);
TImporto& saldo = sld._sld;
saldo.valore().round(-2);
if (!saldo.is_zero())
{
TLocalisamfile saldi_lire(LF_SALDI); // Open trc
TEuroisamfile saldi(LF_SALDI, TRUE);
TRectype& curr = saldi.curr();
curr.zero();
curr.put(SLD_ANNOES, sld._annoes);
curr.put(SLD_GRUPPO, arrotino.gruppo());
curr.put(SLD_CONTO, arrotino.conto());
curr.put(SLD_SOTTOCONTO, arrotino.sottoconto());
saldo.normalize();
saldo.swap_section();
curr.put(SLD_FLAGSALINI, saldo.sezione());
curr.put(SLD_SALDO, saldo.valore());
saldi.write();
}
}
///////////////////////////////////////////////////////////
// Conversione partite
///////////////////////////////////////////////////////////
struct TSaldac_data
{
real _totrate;
};
bool partite_handler(TRectype& rec, void* jolly)
{
if (rec.get_bool(PART_CHIUSA) || rec.get_int(PART_NRIGA) == 9999)
return FALSE;
TSaldac_data* data = (TSaldac_data*)jolly;
const TString16 codval = rec.get(PART_CODVAL);
if (::is_firm_value(codval))
{
convert_import(rec, PART_ABBUONI);
zero_import(rec, "CODVAL|IMPORTOVAL|DIFFCAM");
} else
if (::is_euro_value(codval))
{
zero_import(rec, "CODVAL|IMPORTOVAL|DIFFCAM");
} else
if (::is_true_value(codval))
{
const real impval = rec.get(PART_IMPORTOVAL);
if (impval != ZERO)
{
const real impeur = rec.get(PART_IMPORTO);
const real cambio = impeur / impval;
rec.put(PART_CAMBIO, cambio);
}
}
return TRUE;
}
bool scadenze_handler(TRectype& rec, void* jolly)
{
TSaldac_data* sd = (TSaldac_data*)jolly;
TEuroisamfile part(LF_PARTITE, TRUE);
TRectype& curr = part.curr();
curr.zero();
curr.put(PART_TIPOCF, rec.get(SCAD_TIPOCF));
curr.put(PART_GRUPPO, rec.get(SCAD_GRUPPO));
curr.put(PART_CONTO, rec.get(SCAD_CONTO));
curr.put(PART_SOTTOCONTO, rec.get(SCAD_SOTTOCONTO));
curr.put(PART_ANNO, rec.get(SCAD_ANNO));
curr.put(PART_NUMPART, rec.get(SCAD_NUMPART));
curr.put(PART_NRIGA, rec.get(SCAD_NRIGA));
if (part.read() != NOERR)
return FALSE;
const int nrata = rec.get_int(SCAD_NRATA);
if (nrata == 1)
sd->_totrate = ZERO;
sd->_totrate += rec.get_real(SCAD_IMPORTO);
// I problemi di arrotondamento dovrei averli solo con tante rate
if (nrata > 1)
{
TLocalisamfile scad(LF_SCADENZE, FALSE);
scad.curr() = rec;
scad.curr().put(SCAD_NRATA, nrata+1);
if (scad.read() != NOERR) // Sono l'ultima rata
{
real toteur = part.get(PART_IMPTOTDOC);
toteur /= EURO;
toteur.round(2);
const real diff = toteur - sd->_totrate;
if (diff != ZERO)
{
real rata = rec.get(SCAD_IMPORTO);
rata += diff;
rec.put(SCAD_IMPORTO, rata);
}
}
}
return TRUE;
}
bool pagamenti_handler(TRectype& rec, void* jolly)
{
TSaldac_data* sd = (TSaldac_data*)jolly;
TEuroisamfile part(LF_PARTITE, TRUE);
TRectype& curr = part.curr();
curr.zero();
curr.put(PART_TIPOCF, rec.get(PAGSCA_TIPOC));
curr.put(PART_GRUPPO, rec.get(PAGSCA_GRUPPO));
curr.put(PART_CONTO, rec.get(PAGSCA_CONTO));
curr.put(PART_SOTTOCONTO, rec.get(PAGSCA_SOTTOCONTO));
curr.put(PART_ANNO, rec.get(PAGSCA_ANNO));
curr.put(PART_NUMPART, rec.get(PAGSCA_NUMPART));
curr.put(PART_NRIGA, rec.get(PAGSCA_NRIGA));
if (part.read() != NOERR)
return FALSE;
// Ero in lire (ora sono in euro) devo convertire gli abbuoni
if (curr.get_real(PART_IMPORTOVAL) == ZERO)
convert_import(rec, PAGSCA_ABBUONI);
return TRUE;
}
void TEuro01_app::convert_partite()
{
TSaldac_data data;
convert_file(LF_PARTITE, "IMPORTO|IMPOSTA|SPESE|RITENUTE", PART_NREG, partite_handler, &data);
TLocalisamfile part(LF_PARTITE); // Serve ad avere disponibile il tracciato record
convert_file(LF_SCADENZE, "IMPORTO", NULL, scadenze_handler, &data);
convert_file(LF_PAGSCA, "IMPORTO|RITENUTE", NULL, pagamenti_handler, &data);
}
///////////////////////////////////////////////////////////
// Main
///////////////////////////////////////////////////////////
bool TEuro01_app::create()
{
TFilename lit, eur;
if (!app().get_aree_dati(lit, eur))
return error_box("Non esiste lo studio in Euro di destinazione");
return TEuro_app::create();
}
void TEuro01_app::main_loop()
{
KEY k = K_ENTER;
while (k == K_ENTER)
{
TString_array lista;
if (goto_lire())
{
TEuro03_mask m;
k = m.run();
if (k == K_ENTER)
{
TSheet_field& ditte = m.sfield(F03_DITTE);
lista = ditte.rows_array();
}
}
if (lista.items() > 0)
{
FOR_EACH_ARRAY_ROW(lista, r, row) if (*row->get(0) > ' ')
{
const long ditta = row->get_long(1);
KEY t = convert_firm(ditta);
if (t == K_ESC)
break;
}
}
else
break;
}
}
int baeur01(int argc, char* argv[])
{
TEuro01_app ma;
ma.run(argc, argv, "Conversione Ditte Euro");
return 0;
}

4
ba/baeur01.h Executable file
View File

@ -0,0 +1,4 @@
#define F01_DATI 101
#define F01_DATIE 102

46
ba/baeur01.uml Executable file
View File

@ -0,0 +1,46 @@
#include "baeur01.h"
TOOLBAR "" 0 -3 0 3
BUTTON DLG_OK 10 2
BEGIN
PROMPT -13 -11 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -23 -11 "&Salta"
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -33 -11 ""
PICTURE BMP_QUIT
PICTURE BMP_QUITDN
END
ENDPAGE
PAGE "Creazione area dati in Euro" 0 0 80 018
GROUPBOX DLG_NULL 80 4
BEGIN
PROMPT 1 0 "@bAree dati"
END
STRING F01_DATI 80 59
BEGIN
PROMPT 2 1 "Area dati in Lire "
FLAGS "D"
END
STRING F01_DATIE 80 59
BEGIN
PROMPT 2 2 "Area dati in Euro "
CHECKTYPE REQUIRED
WARNING "E' necessario specificare l'area dati in Euro"
END
ENDPAGE
ENDMASK

418
ba/baeur02.cpp Executable file
View File

@ -0,0 +1,418 @@
#include <applicat.h>
#include <automask.h>
#include <recarray.h>
#include "baeur.h"
#include "baeur20.h"
#include "../cg/cglib01.h"
#include <mov.h>
#include <pconti.h>
#include <rmov.h>
#include <saldi.h>
///////////////////////////////////////////////////////////
// Main app
///////////////////////////////////////////////////////////
class TEuro02_app : public TEuro_app
{
protected:
virtual bool create();
public:
virtual void main_loop();
};
inline TEuro02_app& app() { return (TEuro02_app&)main_app(); }
///////////////////////////////////////////////////////////
// Gestione movimenti di apertura e chiusura
///////////////////////////////////////////////////////////
void TCG_mov::add(int g, int c, long s, char sez, const real& imp)
{
TCG_rmov* rmov = new TCG_rmov;
rmov->_gruppo = g;
rmov->_conto = c;
rmov->_sottoconto = s;
rmov->_importo.set(sez, imp);
TArray::add(rmov);
}
void TCG_mov::add(const TBill& bill, const TImporto& imp)
{
int g = bill.gruppo();
int c = bill.conto();
long s = bill.sottoconto();
char sez = imp.sezione();
real val = imp.valore();
add(g, c, s, sez, val);
}
void TCG_mov::crea_testata(TLocalisamfile& mov, const TString& caus,
const TDate& datareg, const TString& desc) const
{
long numreg = 1;
if (mov.last() == NOERR)
numreg = mov.get_long(MOV_NUMREG)+1;
mov.zero();
mov.put(MOV_NUMREG, numreg);
mov.put(MOV_CODCAUS, caus);
mov.put(MOV_DATAREG, datareg);
mov.put(MOV_DATACOMP, datareg);
mov.put(MOV_DESCR, desc);
mov.put(MOV_ANNOIVA, datareg.year());
TEsercizi_contabili esc;
const int annoes = esc.date2esc(datareg);
mov.put(MOV_ANNOES, annoes);
}
void TCG_mov::crea_riga(const TRectype& mov, TRectype& rmov, int r) const
{
rmov.zero();
rmov.put(RMV_NUMREG, mov.get(MOV_NUMREG));
rmov.put(RMV_NUMRIG, r);
rmov.put(RMV_DATAREG, mov.get(MOV_DATAREG));
rmov.put(RMV_ANNOES, mov.get(MOV_ANNOES));
}
void TCG_mov::update_saldo(const TRectype& mov, const TRectype& rmov, TLocalisamfile& saldi)
{
TBill zio; zio.get(rmov);
TRectype& curr = saldi.curr();
curr.zero();
curr.put(SLD_ANNOES, mov.get(MOV_ANNOES));
curr.put(SLD_GRUPPO, zio.gruppo());
curr.put(SLD_CONTO, zio.conto());
curr.put(SLD_SOTTOCONTO, zio.sottoconto());
const bool found = saldi.read() == NOERR;
if (!found)
{
curr.zero();
curr.put(SLD_ANNOES, mov.get(MOV_ANNOES));
curr.put(SLD_GRUPPO, zio.gruppo());
curr.put(SLD_CONTO, zio.conto());
curr.put(SLD_SOTTOCONTO, zio.sottoconto());
}
curr.put(SLD_NUMULTMOV, mov.get(MOV_NUMREG));
curr.put(SLD_DATAULMOV, mov.get(MOV_DATAREG));
const char* field = rmov.get_char(RMV_SEZIONE) == 'D' ? "PDARE" : "PAVERE";
const real importo = rmov.get_real(RMV_IMPORTO);
real saldo = curr.get(field);
saldo += importo;
curr.put(field, saldo);
if (found)
saldi.rewrite();
else
saldi.write();
}
// Salva un movimento di primanota, eventualmente spezzandolo su piu' records se necessario
TImporto TCG_mov::save(const TDate& datareg, const TString& caus, const TString& desc,
const TBill& contro, bool adeuro, bool convert, bool invert)
{
// Apro comunque i file in lire per avere i tracciati
TLocalisamfile lmov(LF_MOV, adeuro);
TLocalisamfile lrmov(LF_RMOV, adeuro);
TLocalisamfile lsaldi(LF_SALDI, adeuro);
TLocalisamfile *pmov, *prmov, *psaldi;
// Apro quelli in euro se necessario
if (adeuro)
{
pmov = new TEuroisamfile(LF_MOV, adeuro);
prmov = new TEuroisamfile(LF_RMOV, adeuro);
psaldi = new TEuroisamfile(LF_SALDI, adeuro);
}
else
{
pmov = &lmov;
prmov = &lrmov;
psaldi = &lsaldi;
}
TLocalisamfile& mov = *pmov;
TLocalisamfile& rmov = *prmov;
TLocalisamfile& saldi = *psaldi;
TImporto bilancio;
for (int i = 0; i < items(); i += MAX_CG_ROWS)
{
const int first_row = i;
int last_row = i + MAX_CG_ROWS;
if (last_row > items())
last_row = items();
crea_testata(mov, caus, datareg, desc);
TImporto totale;
int written = 0;
for (int r = 0; r < last_row; r++)
{
const TCG_rmov& riga = row(r);
TImporto imp = riga._importo;
if (convert)
{
real euro = imp.valore() / EURO;
euro.round(2);
imp.set(imp.sezione(), euro);
}
if (imp.is_zero())
continue;
if (invert)
imp.swap_section();
imp.normalize();
totale += imp;
crea_riga(mov.curr(), rmov.curr(), ++written);
rmov.put(RMV_SEZIONE, imp.sezione());
rmov.put(RMV_IMPORTO, imp.valore());
TBill conto(riga._gruppo, riga._conto, riga._sottoconto);
if (!conto.find())
error_box("Nella riga %d movimento %ld sarebbe utile anche il conto %d %d %ld",
written, mov.get_long(MOV_NUMREG), riga._gruppo, riga._conto, riga._sottoconto);
conto.put(rmov.curr(), FALSE);
contro.put(rmov.curr(), TRUE);
if (rmov.write() == NOERR)
update_saldo(mov.curr(), rmov.curr(), saldi);
}
// Scrittura ultima riga di contropartita
if (written > 0)
{
crea_riga(mov.curr(), rmov.curr(), ++written);
rmov.put(RMV_SEZIONE, totale.sezione() == 'D' ? 'A' : 'D');
rmov.put(RMV_IMPORTO, totale.valore());
contro.put(rmov.curr(), FALSE);
const TCG_rmov& riga = row(0);
const TBill conto(riga._gruppo, riga._conto, riga._sottoconto);
conto.put(rmov.curr(), TRUE);
if (rmov.write() == NOERR)
update_saldo(mov.curr(), rmov.curr(), saldi);
// Scrittura testata
totale.normalize();
mov.put(MOV_TOTDOC, totale.valore());
mov.write();
}
bilancio += totale;
}
if (adeuro)
{
delete pmov;
delete prmov;
delete psaldi;
}
return bilancio;
}
int TCG_movs::indbil(int g, int c) const
{
TString16 key;
key.format("%d|%d", g, c);
const TRectype& rec = cache().get(LF_PCON, key);
int ib = rec.get_int(PCN_INDBIL);
if (ib <= 0)
{
error_box("Manca l'indicatore di bilancio per il conto %d %d", g, c);
ib = 1;
}
return ib;
}
TCG_mov& TCG_movs::mov(int ib)
{
TCG_mov* m = (TCG_mov*)objptr(ib);
if (m == NULL)
{
m = new TCG_mov;
TArray::add(m, ib);
}
return *m;
}
int TCG_movs::add(int g, int c, long s, char sez, const real& imp)
{
const int ib = indbil(g, c); // Determina l'inidicatore di bilancio
mov(ib).add(g, c, s, sez, imp); // Somma il saldo al movimento opportuno
return ib;
}
TImporto TCG_movs::save(const TDate& datareg, const TString& caus, const TString& desc,
const TBill& contro, bool adeuro, bool convert, bool invert)
{
TImporto bilancio;
const int lib = last();
for (int ib = 1; ib <= lib; ib++) if (objptr(ib))
bilancio += mov(ib).save(datareg, caus, desc, contro, adeuro, convert, invert);
return bilancio;
}
///////////////////////////////////////////////////////////
// Main mask
///////////////////////////////////////////////////////////
class TEuro20_mask : public TAutomask
{
public:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
virtual void on_firm_change();
TEuro20_mask() : TAutomask("baeur20") { }
};
bool TEuro20_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
return TRUE;
}
void TEuro20_mask::on_firm_change()
{
const long firm = app().get_firm();
TDate adozione(1,1,2002);
TFilename dati, datie;
app().get_aree_dati(dati, datie);
TString8 ditta;
ditta.format("%05ldA", firm);
TFilename inie = datie;
inie.add(ditta);
inie.add("prassid.ini");
bool adotta = FALSE, inizio = FALSE;
if (inie.exist())
{
set(F20_DATI, dati);
set(F20_DATIE, datie);
adotta = app().data_adozione_euro(firm, adozione, inizio);
set(F20_ADOZIONE, adozione);
if (!adotta || inizio)
{
disable(DLG_OK);
error_box("Non è possibile utilizzare questa procedura:\n"
"la ditta %ld adotta l'Euro da inizio esercizio.", firm);
}
else
enable(DLG_OK);
}
else
{
disable(DLG_OK);
error_box("Non è possibile utilizzare questa procedura:\n"
"la ditta %ld non esiste nello studio in Euro.", firm);
}
TFilename ini = dati;
ini.add(ditta);
ini.add("prassid.ini");
if (ini.exist())
{
TConfig prassid(ini, "cg");
set(F20_CAUS_C, prassid.get("CoCaCh"), TRUE);
set(F20_CAUS_A, prassid.get("CoCaAp"), TRUE);
set(F20_CONTROG_C, prassid.get("CsBiChG"));
set(F20_CONTROC_C, prassid.get("CsBiChC"));
set(F20_CONTROS_C, prassid.get("CsBiChS"), TRUE);
set(F20_CONTROG_A, prassid.get("CsBiApG"));
set(F20_CONTROC_A, prassid.get("CsBiApC"));
set(F20_CONTROS_A, prassid.get("CsBiApS"), TRUE);
}
set(F20_DESC_C, "Chiusura conti");
set(F20_DESC_A, "Apertura conti");
TBill arrotino;
if (app().load_round_bill(arrotino))
{
arrotino.set(*this, F20_DIFF_G, F20_DIFF_C, F20_DIFF_S);
field(F20_DIFF_S).check(STARTING_CHECK);
}
}
///////////////////////////////////////////////////////////
// Main
///////////////////////////////////////////////////////////
bool TEuro02_app::create()
{
set_firm();
bool ok = goto_lire(get_firm());
if (ok)
ok = TSkeleton_application::create();
return ok;
}
static bool saldi_handler(TRectype& rec, void* jolly)
{
TCG_movs* movs = (TCG_movs*)jolly;
const int gruppo = rec.get_int(SLD_GRUPPO);
const int conto = rec.get_int(SLD_CONTO);
const long sottoconto = rec.get_long(SLD_SOTTOCONTO);
TImporto saldo, pdare, pavere;
saldo.set(rec.get_char(SLD_FLAGSALINI), rec.get_real(SLD_SALDO));
pdare.set('D', rec.get_real(SLD_PDARE));
pavere.set('A', rec.get_real(SLD_PAVERE));
saldo += pdare;
saldo += pavere;
saldo.normalize();
if (saldo.is_zero())
return FALSE;
if (gruppo <= 0 || conto <= 0 || sottoconto <= 0)
return error_box("Il file dei saldi contiene il conto errato %d %d %ld", gruppo, conto, sottoconto);
movs->add(gruppo, conto, sottoconto, saldo.sezione(), saldo.valore());
return TRUE;
}
void TEuro02_app::main_loop()
{
TEuro20_mask msk;
msk.on_firm_change(); // Preimposta data adozione euro ed altro
if (msk.run() == K_ENTER)
{
TCG_movs movs;
convert_file(LF_SALDI, "", "", saldi_handler, &movs);
const TDate adozione = msk.get(F20_ADOZIONE);
TBill contro;
contro.get(msk, F20_CONTROG_C, F20_CONTROC_C, F20_CONTROS_C);
movs.save(adozione, msk.get(F20_CAUS_C), msk.get(F20_DESC_C), contro, FALSE, FALSE, TRUE);
contro.get(msk, F20_CONTROG_A, F20_CONTROC_A, F20_CONTROS_A);
TImporto bil_eur = movs.save(adozione, msk.get(F20_CAUS_A), msk.get(F20_DESC_A), contro, TRUE, TRUE, FALSE);
TBill arrotino;
arrotino.get(msk, F20_DIFF_G, F20_DIFF_C, F20_DIFF_S);
save_round_bill(arrotino);
if (!bil_eur.is_zero())
{
TCG_mov mov;
mov.add(arrotino, bil_eur);
mov.save(adozione, msk.get(F20_CAUS_A), msk.get(F20_DESC_A), contro, TRUE, FALSE, FALSE);
}
}
}
int baeur02(int argc, char* argv[])
{
TEuro02_app ma;
ma.run(argc, argv, "Conversione saldi infrannuale");
return 0;
}

7
ba/baeur02.h Executable file
View File

@ -0,0 +1,7 @@
#define F02_LIT 101
#define F02_LIT_DESC 102
#define F02_EUR 103
#define F02_EUR_DESC 104

69
ba/baeur02.uml Executable file
View File

@ -0,0 +1,69 @@
#include "baeur02.h"
TOOLBAR "" 0 -3 0 3
BUTTON DLG_OK 10 2
BEGIN
PROMPT -13 -11 ""
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -23 -11 "&Indietro"
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -33 -11 ""
END
ENDPAGE
PAGE "Conversione dati comuni" 0 0 80 18
GROUPBOX DLG_NULL 80 4
BEGIN
PROMPT 1 1 "@bCodici valuta di riferimento"
END
STRING F02_LIT 3
BEGIN
PROMPT 2 2 "Codice valuta Lire "
USE %VAL SELECT (B0!="X")&&STR(R10==1)
INPUT CODTAB F02_LIT
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F02_LIT CODTAB
OUTPUT F02_LIT_DESC S0
CHECKTYPE REQUIRED
WARNING "Codice LIRE obbligatorio"
END
STRING F02_LIT_DESC 50
BEGIN
PROMPT 29 2 ""
FLAGS "D"
END
STRING F02_EUR 3
BEGIN
PROMPT 2 3 "Codice valuta Euro "
USE %VAL SELECT B0="X"
INPUT CODTAB F02_EUR
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F02_EUR CODTAB
OUTPUT F02_EUR_DESC S0
CHECKTYPE REQUIRED
WARNING "Codice EURO obbligatorio"
END
STRING F02_EUR_DESC 50
BEGIN
PROMPT 29 3 ""
FLAGS "D"
END
ENDPAGE
ENDMASK

399
ba/baeur03.cpp Executable file
View File

@ -0,0 +1,399 @@
#include <applicat.h>
#include <automask.h>
#include <progind.h>
#include <relation.h>
#include "baeur.h"
#include "baeur30.h"
#include "../cg/cglib01.h"
#include "../cg/cglib02.h"
#include <mov.h>
#include <pconti.h>
#include <rmov.h>
#include <saldi.h>
///////////////////////////////////////////////////////////
// Main app
///////////////////////////////////////////////////////////
struct TChiusura_data
{
TDate _data_c, _data_a;
int _anno_c, _anno_a;
TString4 _caus_c, _caus_a;
TCG_movs _movs;
real _totale_saldo;
TBill _proper, _bilchi, _bilape, _pereco, _utieco, _perpat, _utipat, _difarr;
};
class TEuro03_app : public TEuro_app
{
protected:
virtual bool create();
virtual void main_loop();
public:
void scan_saldi(int indbil, record_handler rh, void* jolly);
void salva_movimento_lit(const real& imp, const TBill& c1, const TBill& c2, TChiusura_data& data);
void salva_movimento_eur(const real& imp, const TBill& c1, const TBill& c2,
TChiusura_data& data, const TString& desc);
void chiusura_costi(TChiusura_data& data);
void chiusura_ricavi(TChiusura_data& data);
void chiusura_conto_economico(TChiusura_data& data);
void chiusura_attivita(TChiusura_data& data);
void chiusura_passivita(TChiusura_data& data);
void chiusura_conti_ordine(TChiusura_data& data);
void chiusura_conto_patrimoniale(TChiusura_data& data);
TImporto apertura_attivita(TChiusura_data& data);
TImporto apertura_passivita(TChiusura_data& data);
void apertura_conti_ordine(TChiusura_data& data);
};
inline TEuro03_app& app() { return (TEuro03_app&)main_app(); }
///////////////////////////////////////////////////////////
// Main mask
///////////////////////////////////////////////////////////
class TEuro30_mask : public TAutomask
{
public:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
virtual void on_firm_change();
TEuro30_mask() : TAutomask("baeur30") { }
};
bool TEuro30_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
return TRUE;
}
void TEuro30_mask::on_firm_change()
{
TDate apertura(1,1,2002);
TDate chiusura(31,12,2001);
const long firm = app().get_firm();
TFilename dati, datie;
app().get_aree_dati(dati, datie);
TString8 ditta;
ditta.format("%05ldA", firm);
TFilename inie = datie;
inie.add(ditta);
inie.add("prassid.ini");
bool adotta = FALSE, inizio = FALSE;
if (inie.exist())
{
adotta = app().data_adozione_euro(firm, apertura, inizio);
set(F30_DATI, dati);
set(F30_DATIE, datie);
set(F30_DATA_A, apertura);
set(F30_ANNO_A, apertura.year());
chiusura = apertura; --chiusura;
set(F30_DATA_C, chiusura);
set(F30_ANNO_C, chiusura.year());
if (!adotta || !inizio)
{
disable(DLG_OK);
error_box("Non è possibile utilizzare questa procedura:\n"
"la ditta %ld non adotta l'Euro da inizio esercizio", firm);
}
else
enable(DLG_OK);
}
else
{
disable(DLG_OK);
error_box("Non è possibile utilizzare questa procedura:\n"
"la ditta %ld non esiste nello studio in Euro.", firm);
}
TBill arrotino;
if (app().load_round_bill(arrotino))
arrotino.set(*this, F30_DIFARR_G, F30_DIFARR_C, F30_DIFARR_S);
TFilename ini = dati;
ini.add(ditta);
ini.add("prassid.ini");
if (ini.exist())
{
TConfig prassid(ini, "cg");
set(F30_CAUS_C, prassid.get("CoCaCh"), TRUE);
set(F30_CAUS_A, prassid.get("CoCaAp"), TRUE);
set(F30_BILCHI_G, prassid.get("CsBiChG"));
set(F30_BILCHI_C, prassid.get("CsBiChC"));
set(F30_BILCHI_S, prassid.get("CsBiChS"), TRUE);
set(F30_PROPER_G, prassid.get("CsPrPeG"));
set(F30_PROPER_C, prassid.get("CsPrPeC"));
set(F30_PROPER_S, prassid.get("CsPrPeS"), TRUE);
set(F30_BILAPE_G, prassid.get("CsBiApG"));
set(F30_BILAPE_C, prassid.get("CsBiApC"));
set(F30_BILAPE_S, prassid.get("CsBiApS"), TRUE);
set(F30_UTIPAT_G, prassid.get("CsUeCpG"));
set(F30_UTIPAT_C, prassid.get("CsUeCpC"));
set(F30_UTIPAT_S, prassid.get("CsUeCpS"), TRUE);
set(F30_PERPAT_G, prassid.get("CsPeCpG"));
set(F30_PERPAT_C, prassid.get("CsPeCpC"));
set(F30_PERPAT_S, prassid.get("CsPeCpS"), TRUE);
set(F30_UTIECO_G, prassid.get("CsUeCeG"));
set(F30_UTIECO_C, prassid.get("CsUeCeC"));
set(F30_UTIECO_S, prassid.get("CsUeCeS"), TRUE);
set(F30_PERECO_G, prassid.get("CsPeCeG"));
set(F30_PERECO_C, prassid.get("CsPeCeC"));
set(F30_PERECO_S, prassid.get("CsPeCeS"), TRUE);
}
}
///////////////////////////////////////////////////////////
// Main
///////////////////////////////////////////////////////////
bool TEuro03_app::create()
{
set_firm();
bool ok = goto_lire(get_firm());
if (ok)
ok = TSkeleton_application::create();
return ok;
}
void TEuro03_app::scan_saldi(int indbil, record_handler rh, void* jolly)
{
const TChiusura_data& data = *(TChiusura_data*)jolly;
TRelation rel(LF_SALDI);
TRectype& rec = rel.curr();
rec.put(SLD_ANNOES, data._anno_c);
TCursor cur(&rel, "", 1, &rec, &rec);
const long items = cur.items();
cur.freeze();
TString caption;
caption << "Scansione saldi dell'anno " << data._anno_c
<< " con indicatore di bilancio " << indbil;
TProgind pi(items, caption, FALSE, TRUE);
for (cur = 0L; cur.pos() < items; ++cur)
{
pi.addstatus(1);
const int g = rec.get_int(SLD_GRUPPO);
const int c = rec.get_int(SLD_CONTO);
if (g > 0 && c > 0) // Should be pleonastic, but it's not!
{
if (indbil > 0)
{
const int i = data._movs.indbil(g, c);
if (indbil != i)
continue;
}
rh(rec, jolly);
}
}
}
///////////////////////////////////////////////////////////
// Ricavi
///////////////////////////////////////////////////////////
HIDDEN bool saldi_handler(TRectype& rec, void* jolly)
{
TChiusura_data& data = *(TChiusura_data*)jolly;
const int g = rec.get_int(SLD_GRUPPO);
const int c = rec.get_int(SLD_CONTO);
const long s = rec.get_long(SLD_SOTTOCONTO);
const int indbil = data._movs.indbil(g, c);
TSaldo sld;
sld.ultima_immissione_bilancio(data._anno_c, g, c, s, indbil, 1);
real saldo = sld.saldo();
if (saldo != ZERO)
{
if (indbil != 5) // La somma dei conti d'ordine è sempre ZERO
data._totale_saldo += saldo;
char sez = 'A';
if (saldo < ZERO)
{
sez = 'D';
saldo = -saldo;
}
data._movs.mov(indbil).add(g, c, s, sez, saldo);
}
return TRUE;
}
void TEuro03_app::chiusura_costi(TChiusura_data& data)
{
scan_saldi(3, saldi_handler, &data);
data._movs.mov(3).save(data._data_c, data._caus_c, EMPTY_STRING,
data._proper, FALSE, FALSE, FALSE);
}
void TEuro03_app::chiusura_ricavi(TChiusura_data& data)
{
scan_saldi(4, saldi_handler, &data);
data._movs.mov(4).save(data._data_c, data._caus_c, EMPTY_STRING,
data._proper, FALSE, FALSE, FALSE);
}
void TEuro03_app::salva_movimento_lit(const real& imp, const TBill& c1, const TBill& c2, TChiusura_data& data)
{
TImporto i1('D', imp); i1.normalize();
TCG_mov mov;
mov.add(c1, i1);
mov.save(data._data_c, data._caus_c, EMPTY_STRING, c2, FALSE, FALSE, FALSE);
}
void TEuro03_app::chiusura_conto_economico(TChiusura_data& data)
{
if (data._totale_saldo > 0)
{
salva_movimento_lit(data._totale_saldo, data._pereco, data._proper, data);
salva_movimento_lit(data._totale_saldo, data._perpat, data._pereco, data);
}
else
{
salva_movimento_lit(data._totale_saldo, data._utieco, data._proper, data);
salva_movimento_lit(data._totale_saldo, data._utipat, data._utieco, data);
}
}
void TEuro03_app::chiusura_attivita(TChiusura_data& data)
{
scan_saldi(1, saldi_handler, &data);
const TString desc = "Chiusura attività";
data._movs.mov(1).save(data._data_c, data._caus_c, desc,
data._bilchi, FALSE, FALSE, FALSE);
}
void TEuro03_app::chiusura_passivita(TChiusura_data& data)
{
scan_saldi(2, saldi_handler, &data);
const TString desc = "Chiusura passività";
data._movs.mov(2).save(data._data_c, data._caus_c, desc,
data._bilchi, FALSE, FALSE, FALSE);
}
void TEuro03_app::chiusura_conti_ordine(TChiusura_data& data)
{
scan_saldi(5, saldi_handler, &data);
data._movs.mov(5).save(data._data_c, data._caus_c, EMPTY_STRING,
data._bilchi, FALSE, FALSE, FALSE);
}
void TEuro03_app::chiusura_conto_patrimoniale(TChiusura_data& data)
{
if (data._totale_saldo > 0)
{
salva_movimento_lit(data._totale_saldo, data._utipat, data._bilchi, data);
}
else
{
salva_movimento_lit(data._totale_saldo, data._perpat, data._bilchi, data);
}
}
void TEuro03_app::salva_movimento_eur(const real& imp, const TBill& c1, const TBill& c2,
TChiusura_data& data, const TString& desc)
{
TImporto i1('D', imp); i1.normalize();
TCG_mov mov;
mov.add(c1, i1);
mov.save(data._data_a, data._caus_a, desc, c2, TRUE, FALSE, FALSE);
}
TImporto TEuro03_app::apertura_attivita(TChiusura_data& data)
{
const TString desc = "Apertura attività";
return data._movs.mov(1).save(data._data_a, data._caus_a, desc,
data._bilape, TRUE, TRUE, TRUE);
}
TImporto TEuro03_app::apertura_passivita(TChiusura_data& data)
{
const TString desc = "Apertura passività";
return data._movs.mov(2).save(data._data_a, data._caus_a, desc,
data._bilape, TRUE, TRUE, TRUE);
}
void TEuro03_app::apertura_conti_ordine(TChiusura_data& data)
{
const TString desc = "Apertura conti d'ordine";
data._movs.mov(5).save(data._data_a, data._caus_a, desc,
data._difarr, TRUE, TRUE, TRUE);
}
///////////////////////////////////////////////////////////
// Main app
///////////////////////////////////////////////////////////
void TEuro03_app::main_loop()
{
TEuro30_mask msk;
msk.on_firm_change();
if (msk.run() == K_ENTER)
{
TChiusura_data data;
data._caus_c = msk.get(F30_CAUS_C);
data._data_c = msk.get(F30_DATA_C);
data._anno_c = msk.get_int(F30_ANNO_C);
data._caus_a = msk.get(F30_CAUS_A);
data._data_a = msk.get(F30_DATA_A);
data._anno_a = msk.get_int(F30_ANNO_A);
data._bilchi.get(msk, F30_BILCHI_G, F30_BILCHI_C, F30_BILCHI_S);
data._proper.get(msk, F30_PROPER_G, F30_PROPER_C, F30_PROPER_S);
data._bilape.get(msk, F30_BILAPE_G, F30_BILAPE_C, F30_BILAPE_S);
data._utipat.get(msk, F30_UTIPAT_G, F30_UTIPAT_C, F30_UTIPAT_S);
data._utieco.get(msk, F30_UTIECO_G, F30_UTIECO_C, F30_UTIECO_S);
data._pereco.get(msk, F30_PERECO_G, F30_PERECO_C, F30_PERECO_S);
data._difarr.get(msk, F30_DIFARR_G, F30_DIFARR_C, F30_DIFARR_S);
save_round_bill(data._difarr);
data._totale_saldo = ZERO;
chiusura_costi(data);
chiusura_ricavi(data);
chiusura_conto_economico(data);
data._totale_saldo = ZERO;
chiusura_attivita(data);
chiusura_passivita(data);
chiusura_conti_ordine(data);
TImporto bilancio;
bilancio += apertura_attivita(data);
bilancio += apertura_passivita(data);
apertura_conti_ordine(data); // La cui somma DEVE essere a ZERO (Per non devo sommarla)
// Apertura capitale netto
if (!bilancio.is_zero())
{
const TString desc = "Apertura capitale netto";
bilancio.normalize('D');
salva_movimento_eur(bilancio.valore(), data._bilape, data._difarr, data, desc);
}
}
}
int baeur03(int argc, char* argv[])
{
TEuro03_app ma;
ma.run(argc, argv, "Chiusura/Apertura conti in Euro");
return 0;
}

309
ba/baeur04.cpp Executable file
View File

@ -0,0 +1,309 @@
#include <applicat.h>
#include <automask.h>
#include <execp.h>
#include <relation.h>
#include <tabutil.h>
#include "baeur.h"
#include "baeur40.h"
#include "../ve/velib.h"
#include <doc.h>
#include <rdoc.h>
class TEuro40_mask;
///////////////////////////////////////////////////////////
// Main app
///////////////////////////////////////////////////////////
class TEuro04_app : public TEuro_app
{
protected:
virtual bool create();
virtual void main_loop();
void copy_docs(TEuro40_mask & mask);
public:
};
inline TEuro04_app& app() { return (TEuro04_app&)main_app(); }
///////////////////////////////////////////////////////////
// Main mask
///////////////////////////////////////////////////////////
class TEuro40_mask : public TAutomask
{
public:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
TEuro40_mask() : TAutomask("baeur40") { }
void load_mask();
};
bool TEuro40_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
return TRUE;
}
void TEuro40_mask::load_mask()
{
TTable num("%NUM");
TSheet_field & s = (TSheet_field &) field(F40_DOCSHEET);
for (num.first(); num.good(); num.next())
{
TToken_string & row = s.row(-1);
row.add("");
row.add("");
row.add(num.get("CODTAB"));
row.add("");
row.add("");
row.add("");
row.add(num.get("S0"));
s.check_row(s.items() - 1);
}
TSheet_field & t = (TSheet_field &) field(F40_TIPISHEET);
TTable tip("%TRI");
for (tip.first(); tip.good(); tip.next())
{
const TString16 tipo(tip.get("CODTAB"));
if (*tipo >= 'A')
{
TToken_string & row = t.row(-1);
row.add("");
row.add(tipo);
row.add(tip.get("S0"));
}
}
}
///////////////////////////////////////////////////////////
// Main
///////////////////////////////////////////////////////////
class TNum_data : public TObject
{
public:
int _anno;
int _da_stato;
int _a_stato;
bool _repeat;
TAssoc_array _extra_tipi_riga;
} ;
bool TEuro04_app::create()
{
bool ok = goto_lire(get_firm());
open_files(LF_DOC, LF_RIGHEDOC, LF_CONDV, LF_RCONDV, LF_ANAMAG, LF_SCONTI, LF_UMART,
LF_TAB, LF_TABCOM, LF_CLIFO, LF_CFVEN, LF_INDSP, LF_OCCAS, LF_PCON,
LF_MOVMAG, LF_RMOVMAG, LF_MAG, LF_SVRIEP, LF_AGENTI, LF_PERCPROV, 0);
if (ok)
ok = TSkeleton_application::create();
return ok;
}
static bool doc_handler(TRectype& rec, void* jolly)
{
TAssoc_array * num = (TAssoc_array *) jolly;
TNum_data * data = (TNum_data *) num->objptr(rec.get(DOC_CODNUM));
if (data != NULL)
{
if (data->_anno <= rec.get_int(DOC_ANNO))
{
const int stato = rec.get_int(DOC_STATO);
if (data->_da_stato <= stato && (data->_a_stato == 0 || stato <= data->_a_stato))
{
const TString tipodoc(rec.get(DOC_TIPODOC));
TTipo_documento t(cache().get("%TIP", tipodoc));
if ((!t.is_ordine() || riporta_ordinato()) && !data->_repeat)
rec.put(DOC_STATO, (char) t.stato_bloccato());
const TString16 val = rec.get("CODVAL");
if (is_firm_value(val))
{
rec.zero(DOC_CODVAL);
rec.zero(DOC_CAMBIO);
rec.put(DOC_CONTROEURO, "X");
real imp = rec.get_real(DOC_IMPPAGATO) / EURO;
imp.round(2);
rec.put(DOC_IMPPAGATO, imp);
}
else
if (is_euro_value(val))
{
rec.zero(DOC_CODVAL);
rec.zero(DOC_CAMBIO);
rec.zero(DOC_CONTROEURO);
}
else
if (!rec.get_bool(DOC_CONTROEURO))
{
real contro_change = EURO / rec.get_real(DOC_CAMBIO);
contro_change.round(6);
rec.put(DOC_CAMBIO, contro_change);
rec.put(DOC_CONTROEURO, "X");
}
const TString16 key(rec.get(DOC_MOVMAG));
if (key.not_empty())
{
const TRectype & mov = cache().get(LF_MOVMAG, key);
if (mov.empty())
rec.zero(DOC_MOVMAG);
}
return TRUE;
}
}
}
return FALSE;
}
static bool rdoc_handler(TRectype& rec, void* jolly)
{
TString key;
key << rec.get(RDOC_PROVV);
key << "|" << rec.get(RDOC_ANNO);
key << "|" << rec.get(RDOC_CODNUM);
key << "|" << rec.get(RDOC_NDOC);
TRectype & doc = (TRectype &) cache().get(LF_DOC, key);
bool ok = doc_handler(doc, jolly);
if (doc.get(DOC_MOVMAG).empty())
rec.zero(RDOC_MOVMAG);
if (doc.get(DOC_CODVAL).empty() && doc.get_bool(DOC_CONTROEURO))
{
const TString16 tipo(rec.get(RDOC_TIPORIGA));
if (tipo != "04" && tipo != "05" && tipo != "08")
{
real prezzo = rec.get_real(RDOC_PREZZO) / EURO;
bool is_prezzo = tipo != "07";
bool convert = TRUE;
const int tipoint = atoi(tipo);
if (*tipo >= 'A')
{
TAssoc_array * num = (TAssoc_array *) jolly;
TNum_data * data = (TNum_data *) num->objptr(rec.get(RDOC_CODNUM));
TString * tpc = (TString *)data->_extra_tipi_riga.objptr(tipo);
if (tpc != NULL)
{
if (*tpc == "N")
convert = FALSE;
else
is_prezzo = *tpc == " ";
}
}
else
if (tipo == "02" || tipo == "03" || tipo == "06")
{
TString cod(rec.get(RDOC_CODART));
TSpesa_prest s(cod, tipo == "06" ? 'P' : 'S');
is_prezzo = s.tipo() == 'Q';
convert = s.tipo() != 'P';
}
if (convert)
{
prezzo.round(TCurrency::get_euro_dec(is_prezzo));
rec.put(RDOC_PREZZO, prezzo);
}
}
real impfisso = rec.get_real(RDOC_IMPFISSO) / EURO;
impfisso.round(TCurrency::get_euro_dec());
rec.put(RDOC_IMPFISSO, impfisso);
}
return ok;
}
void TEuro04_app::copy_docs(TEuro40_mask & mask)
{
TSheet_field & t = (TSheet_field &) mask.field(F40_TIPISHEET);
int items = t.items();
TAssoc_array extra_tipi;
for (int i = 0; i < items; i++)
{
TToken_string & row = t.row(i);
TString val(row.get(0));
extra_tipi.add(row.get(), val);
}
TSheet_field & s = (TSheet_field &) mask.field(F40_DOCSHEET);
items = s.items();
TAssoc_array docs2convert;
for (i = 0; i < items; i++)
{
TToken_string & row = s.row(i);
TString selected(row.get(0));
if (selected == "X")
{
TNum_data * d = new TNum_data;
d->_anno = row.get_int();
TString16 codnum(row.get());
d->_da_stato = row.get_int();
d->_a_stato = row.get_int();
d->_repeat = *row.get() == 'X';
d->_extra_tipi_riga = extra_tipi;
docs2convert.add(codnum, d);
}
}
convert_file(LF_DOC, "", "", doc_handler, &docs2convert);
convert_file(LF_RIGHEDOC, "", "", rdoc_handler, &docs2convert);
}
void TEuro04_app::main_loop()
{
TEuro40_mask msk;
TDate apertura(1,1,2002);
TDate chiusura(31,12,2001);
const long firm = get_firm();
TFilename dati, datie;
get_aree_dati(dati, datie);
msk.set(F40_DATI, dati);
msk.set(F40_DATIE, datie);
TString8 ditta;
ditta.format("%05ldA", firm);
TFilename inie = datie;
inie.add(ditta);
inie.add("prassid.ini");
bool adotta = FALSE, inizio = FALSE;
if (inie.exist())
adotta = data_adozione_euro(firm, apertura, inizio);
msk.load_mask();
if (msk.run() == K_ENTER)
{
copy_docs(msk);
TExternal_app app("baeur -6 D");
app.run();
}
}
int baeur04(int argc, char* argv[])
{
TEuro04_app ma;
ma.run(argc, argv, "Conversione documenti");
return 0;
}

163
ba/baeur05.cpp Executable file
View File

@ -0,0 +1,163 @@
#include <applicat.h>
#include <automask.h>
#include <execp.h>
#include <progind.h>
#include <relation.h>
#include "baeur.h"
#include "../mg/mglib.h"
#include "../cg/cglib01.h"
#include <doc.h>
#include <rdoc.h>
///////////////////////////////////////////////////////////
// Main app
///////////////////////////////////////////////////////////
class TEuro05_app : public TEuro_app
{
protected:
virtual bool create();
virtual void main_loop();
void convert_last_mag_eser(int eser);
void convert_last_sto_eser(int eser);
public:
};
inline TEuro05_app& app() { return (TEuro05_app&)main_app(); }
///////////////////////////////////////////////////////////
// Main
///////////////////////////////////////////////////////////
bool TEuro05_app::create()
{
bool ok = goto_lire(get_firm());
if (ok)
ok = TSkeleton_application::create();
return ok;
}
void TEuro05_app::convert_last_mag_eser(int eser)
{
// Cursore su file in lire
TRelation rel(LF_MAG);
TCursor cur(&rel);
TRectype& curr = rel.curr();
curr.put("ANNOES", eser);
cur.setregion(curr, curr);
// zap_file(lf, TRUE); // Azzera file in euro
// File destinazione in euro
TEuroisamfile fileur(LF_MAG, TRUE);
TRectype& receur = fileur.curr();
receur.put("ANNOES", eser);
for (fileur.read(_isgteq); fileur.good() && eser == fileur.get_int("ANNOES"); fileur.next())
fileur.remove();
TString str;
str << "Conversione " << rel.lfile().description() << " anno " << eser << " ... ";
const long items = cur.items();
cur.freeze();
TProgind pi(items, str, FALSE, TRUE);
TString fields;
fields << "VALRIM|VALACQ|VALENT|VALVEN|VALUSC|VALORDF|VALORDF|SCARTI|VALSCARTI|";
fields << "USERVAL1|USERVAL2|USERVAL3|USERVAL4|USERVAL5|USERVAL6";
for (cur = 0L; cur.pos() < items; ++cur)
{
pi.addstatus(1);
receur = curr;
convert_import(receur, fields);
fileur.write();
}
}
void TEuro05_app::convert_last_sto_eser(int eser)
{
// Cursore su file in lire
TRelation rel(LF_STOMAG);
TCursor cur(&rel);
TRectype& curr = rel.curr();
curr.put("ANNOESRIF", eser);
cur.setregion(curr, curr);
// zap_file(lf, TRUE); // Azzera file in euro
// File destinazione in euro
TEuroisamfile fileur(LF_STOMAG, TRUE);
TRectype& receur = fileur.curr();
receur.put("ANNOESRIF", eser);
for (fileur.read(_isgteq); fileur.good() && eser == fileur.get_int("ANNOESRIF"); fileur.next())
fileur.remove();
TString str;
str << "Conversione " << rel.lfile().description() << " anno " << eser << " ... ";
const long items = cur.items();
cur.freeze();
TProgind pi(items, str, FALSE, TRUE);
const TString fields("VALORE|ULTCOS1|COSTSTD|COSTOMEDIO|PRZLIST");
for (cur = 0L; cur.pos() < items; ++cur)
{
pi.addstatus(1);
receur = curr;
convert_import(receur, fields);
fileur.write();
}
}
void TEuro05_app::main_loop()
{
TDate apertura(1,1,2002);
const long firm = get_firm();
TFilename dati, datie;
get_aree_dati(dati, datie);
TString8 ditta;
ditta.format("%05ldA", firm);
TFilename inie = datie;
inie.add(ditta);
inie.add("prassid.ini");
bool adotta = FALSE, inizio = FALSE;
if (inie.exist())
adotta = data_adozione_euro(firm, apertura, inizio);
TEsercizi_contabili esc;
const int annoes = esc.date2prevesc(apertura);
convert_last_mag_eser(annoes);
convert_last_sto_eser(annoes);
{
TExternal_app app("baeur -6 A");
app.run(FALSE, 3);
}
}
int baeur05(int argc, char* argv[])
{
TEuro05_app ma;
ma.run(argc, argv, "Apertura magazzino");
return 0;
}

245
ba/baeur06.cpp Executable file
View File

@ -0,0 +1,245 @@
#include <applicat.h>
#include <automask.h>
#include <execp.h>
#include <progind.h>
#include <relation.h>
#include "baeur.h"
#include "../mg/mglib.h"
#include "../cg/cglib01.h"
#include "../ve/velib.h"
#include <doc.h>
#include <rdoc.h>
class TArticolo_euro : public TArticolo_giacenza
{
public:
bool adjust_storico(const int anno);
TArticolo_euro(const char* codice = NULL) : TArticolo_giacenza(codice) {}
TArticolo_euro(const TRectype& rec) : TArticolo_giacenza(rec) {}
virtual ~TArticolo_euro() {}
};
bool TArticolo_euro::adjust_storico(const int anno)
{
bool updated = FALSE;
TAssoc_array values;
TString16 annoes; annoes << anno;
TRecord_array & s = storico(annoes);
const int sto_items = s.rows();
for (int i = 1; i <= sto_items; i++)
{
TRectype & rec = s[i];
TString16 codmag(rec.get(STOMAG_CODMAG));
real val = rec.get_real(STOMAG_VALORE);
val *= rec.get_real(STOMAG_QUANT);
real * tot = (real *)values.objptr(codmag);
if (tot == NULL)
{
tot = new real;
values.add(codmag, tot);
}
*tot += val;
}
TRecord_array & m = mag(annoes);
const int mag_items = m.rows();
for (i = 1; i <= mag_items; i++)
{
TRectype & rec = m[i];
TString16 codmag(rec.get(MAG_CODMAG));
const real val = rec.get_real(MAG_VALRIM);
real * tot = (real *)values.objptr(codmag);
if (tot == NULL)
{
tot = new real;
values.add(codmag, tot);
}
*tot -= val;
}
for (i = 1; i <= sto_items; i++)
{
TRectype & rec = s[i];
TString16 codmag(rec.get(STOMAG_CODMAG));
real val = rec.get_real(STOMAG_VALORE);
real qta = rec.get_real(STOMAG_QUANT);
val *= qta;
real * corr = (real *)values.objptr(codmag);
if (corr != NULL & *corr != ZERO)
{
corr->round(TCurrency::get_firm_dec(FALSE));
val -= *corr;
val /= qta;
val.round(TCurrency::get_firm_dec(TRUE));
rec.put(STOMAG_VALORE, val);
updated = TRUE;
*corr = ZERO;
}
}
return updated;
}
///////////////////////////////////////////////////////////
// Main app
///////////////////////////////////////////////////////////
class TEuro06_app : public TEuro_app
{
protected:
virtual bool create();
virtual bool destroy();
virtual void main_loop();
void update_stomag();
public:
};
inline TEuro06_app& app() { return (TEuro06_app&)main_app(); }
///////////////////////////////////////////////////////////
// Main
///////////////////////////////////////////////////////////
bool TEuro06_app::create()
{
bool ok = goto_euro(get_firm());
open_files(LF_STOMAG, LF_DOC, LF_RIGHEDOC, LF_CONDV, LF_RCONDV, LF_ANAMAG, LF_SCONTI, LF_UMART,
LF_TAB, LF_TABCOM, LF_CLIFO, LF_CFVEN, LF_INDSP, LF_OCCAS, LF_PCON,
LF_MOVMAG, LF_RMOVMAG, LF_MAG, LF_SVRIEP, LF_AGENTI, LF_PERCPROV, LF_ATTIV, LF_CAUSALI, 0);
if (ok)
ok = TSkeleton_application::create();
return ok;
}
bool TEuro06_app::destroy()
{
goto_lire(get_firm());
return TSkeleton_application::destroy();
}
void TEuro06_app::update_stomag()
{
TEsercizi_contabili e;
TRelation amag(LF_ANAMAG);
TCursor c(&amag);
TArticolo_euro * a = new TArticolo_euro();
TString str;
str << "Aggiornamento storico di magazzino ...";
amag.lfile().set_curr(a);
const long items = c.items();
TProgind pi(items, str, FALSE, TRUE);
for (c = 0L; c.pos() < items; ++c)
{
pi.addstatus(1);
TArticolo_euro & curr_art = (TArticolo_euro &) c.curr();
for (int codes = e.first(); codes > 0; codes = e.next(codes))
{
if (curr_art.adjust_storico(codes))
curr_art.rewrite();
}
}
}
void TEuro06_app::main_loop()
{
TDate apertura(1,1,2002);
const long firm = get_firm();
TFilename dati, datie;
get_aree_dati(dati, datie);
TString8 ditta;
ditta.format("%05ldA", firm);
TFilename inie = datie;
inie.add(ditta);
inie.add("prassid.ini");
bool adotta = FALSE, inizio = FALSE;
if (inie.exist())
adotta = data_adozione_euro(firm, apertura, inizio);
TEsercizi_contabili esc;
TString16 command(argv(2));
if (command == "A")
{
update_stomag();
TExternal_app app("mg1 -3");
app.run();
}
else
if (command == "S")
{
const int annoes = esc.date2esc(apertura);
TString16 codes; codes << annoes;
rebuild_balances(codes);
update_stomag();
}
else
if (command == "D")
{
TRelation doc(LF_DOC);
TCursor c(&doc);
TDocumento * d = new TDocumento();
TString str;
str << "Riesamina " << doc.lfile().description() << " ...";
doc.lfile().set_curr(d);
const long items = c.items();
TProgind pi(items, str, FALSE, TRUE);
for (c = 0L; c.pos() < items; ++c)
{
pi.addstatus(1);
TDocumento & curr_doc = (TDocumento &) c.curr();
if (curr_doc.in_valuta())
{
TString16 val(curr_doc.get("CODVAL"));
const int dec = atoi(cache().get("%VAL", val, "I2"));
if (dec < 6)
{
real change = curr_doc.get_real(DOC_CAMBIO);
change.round(dec);
curr_doc.put(DOC_CAMBIO, change);
const int err = curr_doc.rewrite();
}
}
else
if (curr_doc.get_bool(DOC_CONTROEURO))
{
curr_doc.dirty_fields();
curr_doc.put(DOC_CONTROEURO, "");
const int err = curr_doc.rewrite();
}
}
}
}
int baeur06(int argc, char* argv[])
{
TEuro06_app ma;
ma.run(argc, argv, "");
return 0;
}

76
ba/baeur07.cpp Executable file
View File

@ -0,0 +1,76 @@
#include <applicat.h>
#include <prefix.h>
#include <utility.h>
#include "baeur.h"
#include "../mg/mglib.h"
#include "../mg/mg4200a.h"
///////////////////////////////////////////////////////////
// Main app
///////////////////////////////////////////////////////////
class TInventario_euro : public TStampa_inventario
{
bool get_aree_dati(TFilename& lit, TFilename& eur) const;
bool goto_lire(long ditta = -1);
virtual bool create();
virtual void set_def_valuta(TForm_inventario & f);
public:
TInventario_euro() {}
};
bool TInventario_euro::get_aree_dati(TFilename& lit, TFilename& eur) const
{
TConfig prassis(CONFIG_STUDIO, "Euro");
lit = prassis.get("DatiLire");
eur = prassis.get("DatiEuro");
if (lit.blank())
{
lit = prefix().get_studio();
lit.rtrim(1);
}
bool ok = eur.exist();
return ok;
}
bool TInventario_euro::goto_lire(long ditta)
{
TFilename lit, eur;
get_aree_dati(lit, eur);
bool ok = !lit.blank() && fexist(lit);
if (ok)
{
TFilename cur = prefix().get_studio(); cur.rtrim(1);
if (ditta < 0)
ditta = get_firm();
if (!dir_equal(cur, lit))
ok = prefix().set_studio(lit, ditta);
else
prefix().set_codditta(ditta);
}
if (!ok)
error_box("Impossibile utilizzare lo studio in lire '%s'", (const char*)lit);
return ok;
}
bool TInventario_euro::create()
{
goto_lire();
return TStampa_inventario:: create();
}
void TInventario_euro::set_def_valuta(TForm_inventario & f)
{
f.set_output_exchange("EUR", EURO, _exchange_base);
}
int baeur07(int argc, char* argv[])
{
TInventario_euro ma;
ma.run(argc, argv, "Stampa inventario in Euro");
return 0;
}

76
ba/baeur08.cpp Executable file
View File

@ -0,0 +1,76 @@
#include <applicat.h>
#include <prefix.h>
#include <utility.h>
#include "baeur.h"
#include "../mg/mglib.h"
#include "../mg/mg3500a.h"
///////////////////////////////////////////////////////////
// Main app
///////////////////////////////////////////////////////////
class TStampa_storico_euro : public TStampa_storgiac
{
bool get_aree_dati(TFilename& lit, TFilename& eur) const;
bool goto_lire(long ditta = -1);
virtual bool create();
virtual void set_def_valuta(TForm_storgiac & f);
public:
TStampa_storico_euro() {}
};
bool TStampa_storico_euro::get_aree_dati(TFilename& lit, TFilename& eur) const
{
TConfig prassis(CONFIG_STUDIO, "Euro");
lit = prassis.get("DatiLire");
eur = prassis.get("DatiEuro");
if (lit.blank())
{
lit = prefix().get_studio();
lit.rtrim(1);
}
bool ok = eur.exist();
return ok;
}
bool TStampa_storico_euro::goto_lire(long ditta)
{
TFilename lit, eur;
get_aree_dati(lit, eur);
bool ok = !lit.blank() && fexist(lit);
if (ok)
{
TFilename cur = prefix().get_studio(); cur.rtrim(1);
if (ditta < 0)
ditta = get_firm();
if (!dir_equal(cur, lit))
ok = prefix().set_studio(lit, ditta);
else
prefix().set_codditta(ditta);
}
if (!ok)
error_box("Impossibile utilizzare lo studio in lire '%s'", (const char*)lit);
return ok;
}
bool TStampa_storico_euro::create()
{
goto_lire();
return TStampa_storgiac:: create();
}
void TStampa_storico_euro::set_def_valuta(TForm_storgiac & f)
{
f.set_output_exchange("EUR", EURO, _exchange_base);
}
int baeur08(int argc, char* argv[])
{
TStampa_storico_euro ma;
ma.run(argc, argv, "Stampa storico in Euro");
return 0;
}

195
ba/baeur09.cpp Executable file
View File

@ -0,0 +1,195 @@
#include <automask.h>
#include <saldi.h>
#include "baeur.h"
#include "baeur11.h"
#include "../cg/cglib01.h"
///////////////////////////////////////////////////////////
// Main app declaration
///////////////////////////////////////////////////////////
class TApertura_saldi_euro : public TEuro_app
{
protected:
void convert_saldi(const TDate& adozione, const TBill& arrotino);
public:
virtual void main_loop();
};
TApertura_saldi_euro& app() { return (TApertura_saldi_euro&)main_app(); }
///////////////////////////////////////////////////////////
// Main mask
///////////////////////////////////////////////////////////
class TEuro90_mask : public TAutomask
{
public:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
virtual void on_firm_change();
TEuro90_mask();
};
bool TEuro90_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F11_ADOZIONE:
if (e == fe_modify || e == fe_close)
{
TEsercizi_contabili esc;
TDate d = o.get();
if (!d.ok())
return error_box("E' necessario specificare la data di adozione dell'Euro");
const int codesc = esc.date2esc(d);
if (codesc <= 0)
return error_box("E' necessario aprire l'esercizio per l'anno %d", d.year());
if (d.day() != 1)
warning_box("Si consiglia di specificare una data di inizio mese/trimestre");
}
break;
default: break;
}
return TRUE;
}
void TEuro90_mask::on_firm_change()
{
TAutomask::on_firm_change();
TDate adozione;
bool inizio;
app().data_adozione_euro(0, adozione, inizio);
set(F11_ADOZIONE, adozione);
TBill arrotino;
if (app().load_round_bill(arrotino))
{
arrotino.set(*this, F11_DIFF_G, F11_DIFF_C, F11_DIFF_S);
field(F11_DIFF_S).check(STARTING_CHECK);
}
}
TEuro90_mask::TEuro90_mask() : TAutomask("baeur11")
{
for (int i = fields()-1; i > 0; i--)
{
TMask_field& f = fld(i);
if (f.in_group(1))
{
if (f.dlg() == F11_SALDI)
{
f.set("X");
f.disable();
}
else
f.hide();
}
}
}
///////////////////////////////////////////////////////////
// Main app implementation
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
// Conversione saldi copiata pari pari da baeur01
///////////////////////////////////////////////////////////
struct TSaldi_data
{
int _annoes;
TBill _arrot;
TImporto _sld;
};
static bool saldi_handler(TRectype& rec, void* jolly)
{
TSaldi_data& sld = *(TSaldi_data*)jolly;
const int annoes = rec.get_int(SLD_ANNOES);
if (annoes == sld._annoes)
{
const TImporto iniz(rec.get_char(SLD_FLAGSALINI), rec.get_real(SLD_SALDO));
const TImporto pdare('D', rec.get_real(SLD_PDARE));
const TImporto pavere('A', rec.get_real(SLD_PAVERE));
TImporto saldo = iniz; saldo += pdare; saldo += pavere;
if (!saldo.is_zero())
{
saldo.normalize();
rec.put(SLD_FLAGSALINI, saldo.sezione());
rec.put(SLD_SALDO, saldo.valore());
convert_import(rec, "SALDO|FLAGSALFIN|SALDOFIN");
zero_import(rec, "PDARE|PAVERE|PDAREPRO|PAVEREPRO");
sld._sld += TImporto(saldo.sezione(), rec.get_real(SLD_SALDO)); // Somma saldo in euro
return TRUE;
}
}
return FALSE;
}
void TApertura_saldi_euro::convert_saldi(const TDate& adozione, const TBill& arrotino)
{
TEsercizi_contabili esc;
TSaldi_data sld;
sld._annoes = esc.date2prevesc(adozione);
sld._arrot = arrotino;
convert_file(LF_SALDI, NULL, NULL, saldi_handler, &sld);
TImporto& saldo = sld._sld;
saldo.valore().round(-2);
if (!saldo.is_zero())
{
TLocalisamfile saldi_lire(LF_SALDI); // Open trc
TEuroisamfile saldi(LF_SALDI, TRUE);
TRectype& curr = saldi.curr();
curr.zero();
curr.put(SLD_ANNOES, sld._annoes);
curr.put(SLD_GRUPPO, arrotino.gruppo());
curr.put(SLD_CONTO, arrotino.conto());
curr.put(SLD_SOTTOCONTO, arrotino.sottoconto());
saldo.normalize();
saldo.swap_section();
curr.put(SLD_FLAGSALINI, saldo.sezione());
curr.put(SLD_SALDO, saldo.valore());
saldi.write();
}
}
void TApertura_saldi_euro::main_loop()
{
if (set_firm())
{
TEuro90_mask m;
TFilename lit, eur;
get_aree_dati(lit, eur);
m.set(F11_DATI, lit);
m.set(F11_DATIE, eur);
m.on_firm_change();
while (m.run() == K_ENTER)
{
TDate adozione = m.get(F11_ADOZIONE);
TBill arrotino;
arrotino.get(m, F11_DIFF_G, F11_DIFF_C, F11_DIFF_S);
convert_saldi(adozione, arrotino);
}
}
}
int baeur09(int argc, char* argv[])
{
TApertura_saldi_euro ase;
ase.run(argc, argv, "Ricalcolo saldi Lire/Euro");
return 0;
}

9
ba/baeur10.h Executable file
View File

@ -0,0 +1,9 @@
#define F03_DITTE 201
#define S03_SEL 101
#define S03_DITTA 102
#define S03_RAGSOC 103
#define S03_NOTE 104

68
ba/baeur10.uml Executable file
View File

@ -0,0 +1,68 @@
#include "baeur10.h"
TOOLBAR "" 0 -3 0 3
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -11 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -11 ""
END
ENDPAGE
PAGE "Selezione Ditte" 0 0 80 018
SPREADSHEET F03_DITTE
BEGIN
PROMPT 0 1 ""
ITEM "@1"
ITEM "Ditta"
ITEM "Ragione Sociale@50"
ITEM "Note@30"
END
ENDPAGE
ENDMASK
PAGE "Ditta" -1 -1 64 6
BOOLEAN S03_SEL
BEGIN
PROMPT 1 1 "Richiesta conversione"
END
NUMBER S03_DITTA 5
BEGIN
PROMPT 1 2 "Ditta "
FLAGS "D"
END
STRINGA S03_RAGSOC 50
BEGIN
PROMPT 1 3 "Rag. Soc. "
END
STRING S03_NOTE 50
BEGIN
PROMPT 1 4 "Note "
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK

18
ba/baeur11.h Executable file
View File

@ -0,0 +1,18 @@
#define F11_DITTA 101
#define F11_RAGSOC 102
#define F11_DATI 103
#define F11_DATIE 104
#define F11_ADOZIONE 105
#define F11_DIFF_G 201
#define F11_DIFF_C 202
#define F11_DIFF_S 203
#define F11_DIFF_D 204
#define F11_COPY 301
#define F11_SALDI 302
#define F11_PARTITE 303
#define F11_VENDITE 304
#define F11_MAGAZZINO 305

149
ba/baeur11.uml Executable file
View File

@ -0,0 +1,149 @@
#include "baeur11.h"
TOOLBAR "" 0 -3 0 3
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -11 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -11 ""
END
ENDPAGE
PAGE "Conversione ditta" 0 0 80 18
GROUPBOX DLG_NULL 78 6
BEGIN
PROMPT 1 1 "@bDitta da convertire"
END
NUMBER F11_DITTA 5
BEGIN
PROMPT 2 2 "Ditta "
USE LF_NDITTE
INPUT CODDITTA F11_DITTA
OUTPUT F11_RAGSOC RAGSOC
CHECKTYPE NORMAL
FLAGS "DF"
END
STRING F11_RAGSOC 50
BEGIN
PROMPT 21 2 ""
FLAGS "D"
END
STRING F11_DATI 50
BEGIN
PROMPT 2 3 "Area dati in Lire "
FLAGS "D"
END
STRING F11_DATIE 50
BEGIN
PROMPT 2 4 "Area dati in Euro "
FLAGS "D"
END
DATE F11_ADOZIONE
BEGIN
PROMPT 2 5 "Data adozione Euro "
USE ESC
INPUT D0 F11_ADOZIONE
DISPLAY "Codice Esercizio" CODTAB
DISPLAY "Inizio Esercizio" D0
DISPLAY "Fine Esercizio" D1
OUTPUT F11_ADOZIONE D0
CHECKTYPE SEARCH
END
GROUPBOX DLG_NULL 78 3
BEGIN
PROMPT 1 7 "@bConto Differenza Arrotondamenti"
END
NUMBER F11_DIFF_G 3
BEGIN
PROMPT 2 8 ""
END
NUMBER F11_DIFF_C 3
BEGIN
PROMPT 7 8 ""
END
NUMBER F11_DIFF_S 6
BEGIN
PROMPT 12 8 ""
USE LF_PCON SELECT SOTTOCONTO!=""
INPUT GRUPPO F11_DIFF_G
INPUT CONTO F11_DIFF_C
INPUT SOTTOCONTO F11_DIFF_S
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT F11_DIFF_G GRUPPO
OUTPUT F11_DIFF_C CONTO
OUTPUT F11_DIFF_S SOTTOCONTO
OUTPUT F11_DIFF_D DESCR
CHECKTYPE REQUIRED
WARNING "E' necessario specificare il conto per gli arrotondamenti"
ADD RUN cg0 -0
END
STRING F11_DIFF_D 50
BEGIN
PROMPT 25 8 ""
USE LF_PCON KEY 2 SELECT SOTTOCONTO!=""
INPUT DESCR F11_DIFF_D
DISPLAY "Descrizione@50" DESCR
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
COPY OUTPUT F11_DIFF_S
CHECKTYPE REQUIRED
WARNING "E' necessario specificare il conto per gli arrotondamenti"
ADD RUN cg0 -0
END
GROUPBOX DLG_NULL 78 7
BEGIN
PROMPT 1 10 "@bOperazioni"
END
BOOLEAN F11_COPY
BEGIN
PROMPT 2 11 "Copia e conversione ditta da lire ad euro"
GROUP 1
END
BOOLEAN F11_SALDI
BEGIN
PROMPT 2 12 "Apertura saldi esercizio precedente in euro"
GROUP 1
END
BOOLEAN F11_PARTITE
BEGIN
PROMPT 2 13 "Copia e conversione partite aperte"
GROUP 1
END
BOOLEAN F11_VENDITE
BEGIN
PROMPT 2 14 "Conversione documenti di vendita"
GROUP 1
END
BOOLEAN F11_MAGAZZINO
BEGIN
PROMPT 2 15 "Conversione Magazzino"
GROUP 1
END
ENDMASK

28
ba/baeur20.h Executable file
View File

@ -0,0 +1,28 @@
#define F20_DITTA 101
#define F20_RAGSOC 102
#define F20_DATI 103
#define F20_DATIE 104
#define F20_ADOZIONE 105
#define F20_CAUS_C 201
#define F20_DESCAUS_C 202
#define F20_DESC_C 203
#define F20_CONTROG_C 204
#define F20_CONTROC_C 205
#define F20_CONTROS_C 206
#define F20_CONTROD_C 207
#define F20_CAUS_A 301
#define F20_DESCAUS_A 302
#define F20_DESC_A 303
#define F20_CONTROG_A 304
#define F20_CONTROC_A 305
#define F20_CONTROS_A 306
#define F20_CONTROD_A 307
#define F20_DIFF_G 401
#define F20_DIFF_C 402
#define F20_DIFF_S 403
#define F20_DIFF_D 404

266
ba/baeur20.uml Executable file
View File

@ -0,0 +1,266 @@
#include "baeur20.h"
TOOLBAR "" 0 -3 0 3
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -11 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -11 ""
END
ENDPAGE
PAGE "Conversione saldi" 0 0 80 18
GROUPBOX DLG_NULL 78 6
BEGIN
PROMPT 1 1 "@bDitta da convertire"
END
NUMBER F20_DITTA 5
BEGIN
PROMPT 2 2 "Ditta "
USE LF_NDITTE
INPUT CODDITTA F20_DITTA
OUTPUT F20_RAGSOC RAGSOC
CHECKTYPE REQUIRED
FLAGS "DF"
END
STRING F20_RAGSOC 50
BEGIN
PROMPT 21 2 ""
FLAGS "D"
END
STRING F20_DATI 50
BEGIN
PROMPT 2 3 "Area dati in Lire "
FLAGS "D"
END
STRING F20_DATIE 50
BEGIN
PROMPT 2 4 "Area dati in Euro "
FLAGS "D"
END
DATE F20_ADOZIONE
BEGIN
PROMPT 2 5 "Data adozione Euro "
FLAGS "D"
END
GROUPBOX DLG_NULL 78 6
BEGIN
PROMPT 1 7 "@bChiusura"
END
STRING F20_CAUS_C 3
BEGIN
PROMPT 2 8 "Causale chiusura "
FLAGS "U"
USE LF_CAUSALI SELECT MOVAP="C"
INPUT CODCAUS F20_CAUS_C
DISPLAY "Codice" CODCAUS
DISPLAY "Descrizione@50" DESCR
OUTPUT F20_CAUS_C CODCAUS
OUTPUT F20_DESCAUS_C DESCR
CHECKTYPE REQUIRED
END
STRING F20_DESCAUS_C 50
BEGIN
PROMPT 25 8 ""
USE LF_CAUSALI KEY 2 SELECT MOVAP="C"
INPUT DESCR F20_DESCAUS_C
DISPLAY "Descrizione@50" DESCR
DISPLAY "Codice" CODCAUS
COPY OUTPUT F20_CAUS_C
END
STRING F20_DESC_C 50
BEGIN
PROMPT 2 9 "Descrizione aggiuntiva "
END
NUMBER F20_CONTROG_C 3
BEGIN
PROMPT 2 10 "Contropartita "
FLAGS "U"
END
NUMBER F20_CONTROC_C 3
BEGIN
PROMPT 30 10 ""
FLAGS "U"
END
NUMBER F20_CONTROS_C 6
BEGIN
PROMPT 36 10 ""
USE LF_PCON SELECT SOTTOCONTO!=""
INPUT GRUPPO F20_CONTROG_C
INPUT CONTO F20_CONTROC_C
INPUT SOTTOCONTO F20_CONTROS_C
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" GRUPPO
DISPLAY "Descrizione@50" DESCR
OUTPUT F20_CONTROG_C GRUPPO
OUTPUT F20_CONTROC_C CONTO
OUTPUT F20_CONTROS_C SOTTOCONTO
OUTPUT F20_CONTROD_C DESCR
CHECKTYPE REQUIRED
ADD RUN cg0 -0
END
STRING F20_CONTROD_C 50
BEGIN
PROMPT 25 11 ""
USE LF_PCON KEY 2 SELECT SOTTOCONTO!=""
INPUT DESCR F20_CONTROD_C
DISPLAY "Descrizione@50" DESCR
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" GRUPPO
COPY OUTPUT F20_CONTROS_C
CHECKTYPE REQUIRED
ADD RUN cg0 -0
END
GROUPBOX DLG_NULL 78 6
BEGIN
PROMPT 1 13 "@bApertura"
END
STRING F20_CAUS_A 3
BEGIN
PROMPT 2 14 "Causale apertura "
FLAGS "U"
USE LF_CAUSALI SELECT MOVAP="A"
INPUT CODCAUS F20_CAUS_A
DISPLAY "Codice" CODCAUS
DISPLAY "Descrizione@50" DESCR
OUTPUT F20_CAUS_A CODCAUS
OUTPUT F20_DESCAUS_A DESCR
CHECKTYPE REQUIRED
END
STRING F20_DESCAUS_A 50
BEGIN
PROMPT 25 14 ""
USE LF_CAUSALI KEY 2 SELECT MOVAP="A"
INPUT DESCR F20_DESCAUS_A
DISPLAY "Descrizione@50" DESCR
DISPLAY "Codice" CODCAUS
COPY OUTPUT F20_CAUS_A
END
STRING F20_DESC_A 50
BEGIN
PROMPT 2 15 "Descrizione aggiuntiva "
END
NUMBER F20_CONTROG_A 3
BEGIN
PROMPT 2 16 "Contropartita "
FLAGS "U"
END
NUMBER F20_CONTROC_A 3
BEGIN
PROMPT 30 16 ""
FLAGS "U"
END
NUMBER F20_CONTROS_A 6
BEGIN
PROMPT 36 16 ""
USE LF_PCON SELECT SOTTOCONTO!=""
INPUT GRUPPO F20_CONTROG_A
INPUT CONTO F20_CONTROC_A
INPUT SOTTOCONTO F20_CONTROS_A
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT F20_CONTROG_A GRUPPO
OUTPUT F20_CONTROC_A CONTO
OUTPUT F20_CONTROS_A SOTTOCONTO
OUTPUT F20_CONTROD_A DESCR
CHECKTYPE REQUIRED
ADD RUN cg0 -0
END
STRING F20_CONTROD_A 50
BEGIN
PROMPT 25 17 ""
USE LF_PCON KEY 2 SELECT SOTTOCONTO!=""
INPUT DESCR F20_CONTROD_A
DISPLAY "Descrizione@50" DESCR
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
COPY OUTPUT F20_CONTROS_A
CHECKTYPE REQUIRED
ADD RUN cg0 -0
END
GROUPBOX DLG_NULL 78 3
BEGIN
PROMPT 1 19 "@bConto Differenza Arrotondamenti"
END
NUMBER F20_DIFF_G 3
BEGIN
PROMPT 2 20 ""
FLAGS "U"
END
NUMBER F20_DIFF_C 3
BEGIN
PROMPT 7 20 ""
FLAGS "U"
END
NUMBER F20_DIFF_S 6
BEGIN
PROMPT 12 20 ""
FLAGS "U"
USE LF_PCON SELECT SOTTOCONTO!=""
INPUT GRUPPO F20_DIFF_G
INPUT CONTO F20_DIFF_C
INPUT SOTTOCONTO F20_DIFF_S
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" GRUPPO
DISPLAY "Descrizione@50" DESCR
OUTPUT F20_DIFF_G GRUPPO
OUTPUT F20_DIFF_C CONTO
OUTPUT F20_DIFF_S SOTTOCONTO
OUTPUT F20_DIFF_D DESCR
CHECKTYPE REQUIRED
WARNING "E' necessario specificare il conto per gli arrotondamenti"
ADD RUN cg0 -0
END
STRING F20_DIFF_D 50
BEGIN
PROMPT 25 20 ""
USE LF_PCON KEY 2 SELECT SOTTOCONTO!=""
INPUT DESCR F20_DIFF_D
DISPLAY "Descrizione@50" DESCR
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" GRUPPO
COPY OUTPUT F20_DIFF_S
CHECKTYPE REQUIRED
ADD RUN cg0 -0
END
ENDMASK

50
ba/baeur30.h Executable file
View File

@ -0,0 +1,50 @@
#define F30_DITTA 101
#define F30_RAGSOC 102
#define F30_DATI 103
#define F30_DATIE 104
#define F30_CAUS_C 105
#define F30_DATA_C 106
#define F30_ANNO_C 107
#define F30_CAUS_A 108
#define F30_DATA_A 109
#define F30_ANNO_A 110
#define F30_BILCHI_G 201
#define F30_BILCHI_C 202
#define F30_BILCHI_S 203
#define F30_BILCHI_D 204
#define F30_PROPER_G 206
#define F30_PROPER_C 207
#define F30_PROPER_S 208
#define F30_PROPER_D 209
#define F30_BILAPE_G 211
#define F30_BILAPE_C 212
#define F30_BILAPE_S 213
#define F30_BILAPE_D 214
#define F30_UTIPAT_G 216
#define F30_UTIPAT_C 217
#define F30_UTIPAT_S 218
#define F30_UTIPAT_D 219
#define F30_PERPAT_G 221
#define F30_PERPAT_C 222
#define F30_PERPAT_S 223
#define F30_PERPAT_D 224
#define F30_UTIECO_G 226
#define F30_UTIECO_C 227
#define F30_UTIECO_S 228
#define F30_UTIECO_D 229
#define F30_PERECO_G 231
#define F30_PERECO_C 232
#define F30_PERECO_S 233
#define F30_PERECO_D 234
#define F30_DIFARR_G 236
#define F30_DIFARR_C 237
#define F30_DIFARR_S 238
#define F30_DIFARR_D 239

455
ba/baeur30.uml Executable file
View File

@ -0,0 +1,455 @@
#include "baeur30.h"
TOOLBAR "" 0 -3 0 3
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -11 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -11 ""
END
ENDPAGE
PAGE "Chiusura/Apertura Euro" 0 0 0 -3
GROUPBOX DLG_NULL 78 5
BEGIN
PROMPT 1 1 "@bDitta corrente"
END
NUMBER F30_DITTA 5
BEGIN
PROMPT 2 2 "Ditta "
USE LF_NDITTE
INPUT CODDITTA F30_DITTA
OUTPUT F30_RAGSOC RAGSOC
CHECKTYPE REQUIRED
FLAGS "DF"
END
STRING F30_RAGSOC 50
BEGIN
PROMPT 21 2 ""
FLAGS "D"
END
STRING F30_DATI 50
BEGIN
PROMPT 2 3 "Area dati in Lire "
FLAGS "D"
END
STRING F30_DATIE 50
BEGIN
PROMPT 2 4 "Area dati in Euro "
FLAGS "D"
END
GROUPBOX DLG_NULL 78 4
BEGIN
PROMPT 1 6 "@bChiusura e apertura"
END
STRING F30_CAUS_C 3
BEGIN
PROMPT 2 7 "Causale chiusura "
FLAGS "U"
USE LF_CAUSALI SELECT MOVAP="C"
INPUT CODCAUS F30_CAUS_C
DISPLAY "Codice" CODCAUS
DISPLAY "Descrizione@50" DESCR
OUTPUT F30_CAUS_C CODCAUS
CHECKTYPE REQUIRED
END
DATE F30_DATA_C
BEGIN
PROMPT 32 7 "Data chiusura "
FLAGS "D"
END
NUMBER F30_ANNO_C 4
BEGIN
PROMPT 62 7 "Esercizio "
FLAGS "D"
END
STRING F30_CAUS_A 3
BEGIN
PROMPT 2 8 "Causale aperura "
FLAGS "U"
USE LF_CAUSALI SELECT MOVAP="A"
INPUT CODCAUS F30_CAUS_A
DISPLAY "Codice" CODCAUS
DISPLAY "Descrizione@50" DESCR
OUTPUT F30_CAUS_A CODCAUS
CHECKTYPE REQUIRED
END
DATE F30_DATA_A
BEGIN
PROMPT 32 8 "Data apertura "
FLAGS "D"
END
NUMBER F30_ANNO_A 4
BEGIN
PROMPT 62 8 "Esercizio "
FLAGS "D"
END
GROUPBOX DLG_NULL 78 10
BEGIN
PROMPT 1 10 "@bConti"
END
NUMBER F30_BILCHI_G 3
BEGIN
PROMPT 2 11 "Bilancio di chiusura "
END
NUMBER F30_BILCHI_C 3
BEGIN
PROMPT 30 11 ""
END
NUMBER F30_BILCHI_S 6
BEGIN
PROMPT 35 11 ""
USE LF_PCON SELECT SOTTOCONTO!=""
INPUT GRUPPO F30_BILCHI_G
INPUT CONTO F30_BILCHI_C
INPUT SOTTOCONTO F30_BILCHI_S
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT F30_BILCHI_G GRUPPO
OUTPUT F30_BILCHI_C CONTO
OUTPUT F30_BILCHI_S SOTTOCONTO
OUTPUT F30_BILCHI_D DESCR
CHECKTYPE REQUIRED
ADD RUN cg0 -0
END
STRING F30_BILCHI_D 50 30
BEGIN
PROMPT 45 11 ""
USE LF_PCON SELECT SOTTOCONTO!=""
INPUT DESCR F30_BILCHI_D
DISPLAY "Descrizione@50" DESCR
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
COPY OUTPUT F30_BILCHI_S
CHECKTYPE REQUIRED
ADD RUN cg0 -0
END
NUMBER F30_PROPER_G 3
BEGIN
PROMPT 2 12 "Profitti e perdite "
END
NUMBER F30_PROPER_C 3
BEGIN
PROMPT 30 12 ""
END
NUMBER F30_PROPER_S 6
BEGIN
PROMPT 35 12 ""
USE LF_PCON SELECT SOTTOCONTO!=""
INPUT GRUPPO F30_PROPER_G
INPUT CONTO F30_PROPER_C
INPUT SOTTOCONTO F30_PROPER_S
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT F30_PROPER_G GRUPPO
OUTPUT F30_PROPER_C CONTO
OUTPUT F30_PROPER_S SOTTOCONTO
OUTPUT F30_PROPER_D DESCR
CHECKTYPE REQUIRED
ADD RUN cg0 -0
END
STRING F30_PROPER_D 50 30
BEGIN
PROMPT 45 12 ""
USE LF_PCON SELECT SOTTOCONTO!=""
INPUT DESCR F30_PROPER_D
DISPLAY "Descrizione@50" DESCR
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
COPY OUTPUT F30_PROPER_S
CHECKTYPE REQUIRED
ADD RUN cg0 -0
END
NUMBER F30_BILAPE_G 3
BEGIN
PROMPT 2 13 "Bilancio di chiusura "
END
NUMBER F30_BILAPE_C 3
BEGIN
PROMPT 30 13 ""
END
NUMBER F30_BILAPE_S 6
BEGIN
PROMPT 35 13 ""
USE LF_PCON SELECT SOTTOCONTO!=""
INPUT GRUPPO F30_BILAPE_G
INPUT CONTO F30_BILAPE_C
INPUT SOTTOCONTO F30_BILAPE_S
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT F30_BILAPE_G GRUPPO
OUTPUT F30_BILAPE_C CONTO
OUTPUT F30_BILAPE_S SOTTOCONTO
OUTPUT F30_BILAPE_D DESCR
CHECKTYPE REQUIRED
ADD RUN cg0 -0
END
STRING F30_BILAPE_D 50 30
BEGIN
PROMPT 45 13 ""
USE LF_PCON SELECT SOTTOCONTO!=""
INPUT DESCR F30_BILAPE_D
DISPLAY "Descrizione@50" DESCR
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
COPY OUTPUT F30_BILAPE_S
CHECKTYPE REQUIRED
ADD RUN cg0 -0
END
NUMBER F30_UTIPAT_G 3
BEGIN
PROMPT 2 14 "Utile esercizio patr. "
END
NUMBER F30_UTIPAT_C 3
BEGIN
PROMPT 30 14 ""
END
NUMBER F30_UTIPAT_S 6
BEGIN
PROMPT 35 14 ""
USE LF_PCON SELECT SOTTOCONTO!=""
INPUT GRUPPO F30_UTIPAT_G
INPUT CONTO F30_UTIPAT_C
INPUT SOTTOCONTO F30_UTIPAT_S
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT F30_UTIPAT_G GRUPPO
OUTPUT F30_UTIPAT_C CONTO
OUTPUT F30_UTIPAT_S SOTTOCONTO
OUTPUT F30_UTIPAT_D DESCR
CHECKTYPE REQUIRED
ADD RUN cg0 -0
END
STRING F30_UTIPAT_D 50 30
BEGIN
PROMPT 45 14 ""
USE LF_PCON SELECT SOTTOCONTO!=""
INPUT DESCR F30_UTIPAT_D
DISPLAY "Descrizione@50" DESCR
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
COPY OUTPUT F30_UTIPAT_S
CHECKTYPE REQUIRED
ADD RUN cg0 -0
END
NUMBER F30_PERPAT_G 3
BEGIN
PROMPT 2 15 "Perdita esercizio patr."
END
NUMBER F30_PERPAT_C 3
BEGIN
PROMPT 30 15 ""
END
NUMBER F30_PERPAT_S 6
BEGIN
PROMPT 35 15 ""
USE LF_PCON SELECT SOTTOCONTO!=""
INPUT GRUPPO F30_PERPAT_G
INPUT CONTO F30_PERPAT_C
INPUT SOTTOCONTO F30_PERPAT_S
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT F30_PERPAT_G GRUPPO
OUTPUT F30_PERPAT_C CONTO
OUTPUT F30_PERPAT_S SOTTOCONTO
OUTPUT F30_PERPAT_D DESCR
CHECKTYPE REQUIRED
ADD RUN cg0 -0
END
STRING F30_PERPAT_D 50 30
BEGIN
PROMPT 45 15 ""
USE LF_PCON SELECT SOTTOCONTO!=""
INPUT DESCR F30_PERPAT_D
DISPLAY "Descrizione@50" DESCR
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
COPY OUTPUT F30_PERPAT_S
CHECKTYPE REQUIRED
ADD RUN cg0 -0
END
NUMBER F30_UTIECO_G 3
BEGIN
PROMPT 2 16 "Utile esercizio econ. "
END
NUMBER F30_UTIECO_C 3
BEGIN
PROMPT 30 16 ""
END
NUMBER F30_UTIECO_S 6
BEGIN
PROMPT 35 16 ""
USE LF_PCON SELECT SOTTOCONTO!=""
INPUT GRUPPO F30_UTIECO_G
INPUT CONTO F30_UTIECO_C
INPUT SOTTOCONTO F30_UTIECO_S
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT F30_UTIECO_G GRUPPO
OUTPUT F30_UTIECO_C CONTO
OUTPUT F30_UTIECO_S SOTTOCONTO
OUTPUT F30_UTIECO_D DESCR
CHECKTYPE REQUIRED
ADD RUN cg0 -0
END
STRING F30_UTIECO_D 50 30
BEGIN
PROMPT 45 16 ""
USE LF_PCON SELECT SOTTOCONTO!=""
INPUT DESCR F30_UTIECO_D
DISPLAY "Descrizione@50" DESCR
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
COPY OUTPUT F30_UTIECO_S
CHECKTYPE REQUIRED
ADD RUN cg0 -0
END
NUMBER F30_PERECO_G 3
BEGIN
PROMPT 2 17 "Perdita esercizio econ."
END
NUMBER F30_PERECO_C 3
BEGIN
PROMPT 30 17 ""
END
NUMBER F30_PERECO_S 6
BEGIN
PROMPT 35 17 ""
USE LF_PCON SELECT SOTTOCONTO!=""
INPUT GRUPPO F30_PERECO_G
INPUT CONTO F30_PERECO_C
INPUT SOTTOCONTO F30_PERECO_S
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT F30_PERECO_G GRUPPO
OUTPUT F30_PERECO_C CONTO
OUTPUT F30_PERECO_S SOTTOCONTO
OUTPUT F30_PERECO_D DESCR
CHECKTYPE REQUIRED
ADD RUN cg0 -0
END
STRING F30_PERECO_D 50 30
BEGIN
PROMPT 45 17 ""
USE LF_PCON SELECT SOTTOCONTO!=""
INPUT DESCR F30_PERECO_D
DISPLAY "Descrizione@50" DESCR
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
COPY OUTPUT F30_PERECO_S
CHECKTYPE REQUIRED
ADD RUN cg0 -0
END
NUMBER F30_DIFARR_G 3
BEGIN
PROMPT 2 18 "Differenza arrotondam. "
END
NUMBER F30_DIFARR_C 3
BEGIN
PROMPT 30 18 ""
END
NUMBER F30_DIFARR_S 6
BEGIN
PROMPT 35 18 ""
USE LF_PCON SELECT SOTTOCONTO!=""
INPUT GRUPPO F30_DIFARR_G
INPUT CONTO F30_DIFARR_C
INPUT SOTTOCONTO F30_DIFARR_S
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" GRUPPO
DISPLAY "Descrizione@50" DESCR
OUTPUT F30_DIFARR_G GRUPPO
OUTPUT F30_DIFARR_C CONTO
OUTPUT F30_DIFARR_S SOTTOCONTO
OUTPUT F30_DIFARR_D DESCR
CHECKTYPE REQUIRED
WARNING "E' necessario specificare il conto per gli arrotondamenti"
ADD RUN cg0 -0
END
STRING F30_DIFARR_D 50 30
BEGIN
PROMPT 45 18 ""
USE LF_PCON KEY 2 SELECT SOTTOCONTO!=""
INPUT DESCR F30_DIFARR_D
DISPLAY "Descrizione@50" DESCR
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" GRUPPO
COPY OUTPUT F30_DIFARR_S
CHECKTYPE REQUIRED
ADD RUN cg0 -0
END
ENDMASK

18
ba/baeur40.h Executable file
View File

@ -0,0 +1,18 @@
#define F40_DITTA 101
#define F40_RAGSOC 102
#define F40_DATI 103
#define F40_DATIE 104
#define F40_DOCSHEET 105
#define F40_TIPISHEET 106
#define F40_CHECK 101
#define F40_ANNO 102
#define F40_CODNUM 103
#define F40_DASTATO 104
#define F40_ASTATO 105
#define F40_REPEAT 106
#define F40_DESCR 107
#define F40_CONV 101
#define F40_TIPO 102
#define F40_DESCRT 103

185
ba/baeur40.uml Executable file
View File

@ -0,0 +1,185 @@
#include "baeur40.h"
TOOLBAR "" 0 -3 0 3
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -11 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -11 ""
END
ENDPAGE
PAGE "Conversione documenti" 0 0 0 -3
GROUPBOX DLG_NULL 78 5
BEGIN
PROMPT 1 1 "@bDitta corrente"
END
NUMBER F40_DITTA 5
BEGIN
PROMPT 2 2 "Ditta "
USE LF_NDITTE
INPUT CODDITTA F40_DITTA
OUTPUT F40_RAGSOC RAGSOC
CHECKTYPE REQUIRED
FLAGS "DF"
END
STRING F40_RAGSOC 50
BEGIN
PROMPT 21 2 ""
FLAGS "D"
END
STRING F40_DATI 50
BEGIN
PROMPT 2 3 "Area dati in Lire "
FLAGS "D"
END
STRING F40_DATIE 50
BEGIN
PROMPT 2 4 "Area dati in Euro "
FLAGS "D"
END
SPREADSHEET F40_DOCSHEET 78
BEGIN
PROMPT 1 6 ""
ITEM "Sel."
ITEM "Anno"
ITEM "Cod."
ITEM "Da stato"
ITEM "A stato"
ITEM "Ripetibile"
ITEM "Numerazione@50"
END
ENDPAGE
PAGE "Tipi riga non standard" 0 0 0 -3
SPREADSHEET F40_TIPISHEET 78
BEGIN
PROMPT 1 4 ""
ITEM "Tipo conversione"
ITEM "Tipo riga"
ITEM "Descrizione@50"
END
ENDPAGE
ENDMASK
PAGE "" -1 -1 73 16
BOOLEAN F40_CHECK
BEGIN
PROMPT 2 1 "Selezionato "
MESSAGE FALSE CLEAR,1@
MESSAGE TRUE ENABLE,1@
END
NUMBER F40_ANNO 4
BEGIN
PROMPT 2 3 "Da anno "
GROUP 1
END
STRING F40_CODNUM 4
BEGIN
PROMPT 2 5 "Codice numerazione "
FLAGS "D"
END
STRING F40_DESCR 50
BEGIN
PROMPT 2 7 "Descrizione "
FLAGS "D"
END
NUMBER F40_DASTATO 1
BEGIN
PROMPT 2 9 "Da stato "
USE %STD
INPUT CODTAB F40_DASTATO
DISPLAY "Stato documento" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F40_DASTATO CODTAB
CHECKTYPE NORMAL
GROUP 1
END
NUMBER F40_ASTATO 1
BEGIN
PROMPT 2 11 "A stato "
USE %STD
INPUT CODTAB F40_ASTATO
DISPLAY "Stato documento" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F40_ASTATO CODTAB
CHECKTYPE NORMAL
GROUP 1
END
BOOLEAN F40_REPEAT
BEGIN
PROMPT 2 13 "Ripetibile"
GROUP 1
END
BUTTON DLG_OK 9 2
BEGIN
PROMPT -13 -1 ""
END
BUTTON DLG_CANCEL 9 2
BEGIN
PROMPT -23 -1 ""
END
ENDPAGE
ENDMASK
PAGE "" -1 -1 73 8
LIST F40_CONV 1 14
BEGIN
PROMPT 2 1 "Tipo conversione "
ITEM " |Prezzo"
ITEM "V|Valore"
ITEM "N|Non convertire"
END
STRING F40_TIPO 2
BEGIN
PROMPT 2 3 "Tipo riga "
FLAGS "D"
END
STRING F40_DESCRT 50
BEGIN
PROMPT 2 5 "Descrizione "
FLAGS "D"
END
BUTTON DLG_OK 9 2
BEGIN
PROMPT -13 -1 ""
END
BUTTON DLG_CANCEL 9 2
BEGIN
PROMPT -23 -1 ""
END
ENDPAGE
ENDMASK

View File

@ -2,6 +2,7 @@
#define QAPPNAME "EASYFAX"
#include <default.url>
//#include <mainmenu.url>
MENUBAR MENU_BAR(0)

View File

@ -1,7 +1,4 @@
#include <default.url>
/* bainst BA */
MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File"
#include <mainmenu.url>

View File

@ -12,7 +12,7 @@ END
BOOL F_USAMENUAVIS
BEGIN
FLAGS "D"
PROMPT 2 2 "Usa menu' AVIS"
PROMPT 2 3 "Usa menu' AVIS"
END
/*GROUPBOX DLG_NULL 60 4

View File

@ -3,6 +3,7 @@
#include <utility.h>
#include <prefix.h>
#include <isam.h>
#include <tabutil.h>
#include "bainst.h"
#include "bainst38.h"
@ -10,12 +11,53 @@ class TInstall_SV : public TInstallmodule_app
{
protected:
virtual int module_number() const {return 38;}
virtual bool install_com() {return TRUE;} // no com installation
virtual bool install_firm() {return TRUE;}
virtual bool install_com();
public:
virtual ~TInstall_SV () {}
};
bool TInstall_SV ::install_com()
{
// ciclo su ogni ditta
TStd_filename txtfile(module_code());
txtfile << "tab.txt";
if (txtfile.check(TRUE))
{
// carica le tabelle nei file di default
TLocalisamfile tampone(LF_TABCOM);
TSystemtempfile tabstd(LF_TABCOM);
TFilename stdtabname(prefix().get_studio());
stdtabname << "STD\\lf0005.txt";
tabstd.load(txtfile);
tabstd.load(stdtabname);
tabstd.set_autodel();
TFilename tempfile;
tempfile.temp();
// riconverte le macro delle date
tabstd.dump(tempfile);
TScanner scan(tempfile);
FILE *dest=fopen((const char *)stdtabname,"w");
while (TRUE) {
TString &line=scan.line();
if (line.empty()) break;
int pos=(line.find("-0000"));
while (pos >= 0 )
{
line.overwrite("%yr%",pos+1);
pos=(line.find("-0000"));
}
line << '\n' ;
fputs((const char * )line,dest);
}
fclose(dest);
}
return TRUE;
}
int bainst38(int argc, char** argv)
{
TInstall_SV app;

View File

@ -96,6 +96,7 @@ Item_04 = "Attivazione moduli", "ba1 -4", ""
Item_05 = "Installazione moduli", "ba1 -6", ""
Item_06 = "Creazione dischi di installazione", "ba1 -5", ""
Item_07 = "Backup", "ba2 -1", ""
Item_08 = "Conversione all'Euro", [PRASSI_883]
[PRASSI_019]
Caption = "Comunicazione"
@ -106,6 +107,28 @@ Item_02 = "Gestione Fax", "bafax -s", ""
Item_03 = "Archivio fax spediti e ricevuti", disabled
Item_04 = "Archivio contatti telefonici", disabled
[PRASSI_883]
Caption = "Conversione all'Euro"
Picture = <ba00.bmp>
Module = 0
Item_01 = "Creazione nuova area dati in Euro", "baeur -0"
Item_02 = "Conversione ditte in Euro", "baeur -1"
Item_03 = "Ricalcolo saldi Lire/Euro", "baeur -9", "F"
Item_04 = "Conversione saldi infrannuale", "baeur -2", "F"
Item_05 = "Chiusura/Apertura in Euro", "baeur -3", "F"
Item_06 = "Conversione documenti", "baeur -4", "F"
Item_07 = "Apertura magazzino", "baeur -5", "F"
Item_08 = "Stampe magazzino",[PRASSI_884], ""
[PRASSI_884]
Caption = "Stampe magazzino in Euro"
Picture = <mg00.bmp>
Module = 32
Item_01 = "Stampa inventario", "baeur -7"
Item_02 = "Stampa storico", "baeur -8"

View File

@ -13,4 +13,4 @@ Tabella Cambi Giornalieri
1|CODTAB[1,3]|@2g@3s
1|D0|@15g@ld
1|-200->S0|@30g@50,ls
1|R10|@82g@15,rpn|##########,@@@@@
1|R10|@82g@15,rpn|##########,@@@@@@

View File

@ -9,6 +9,6 @@ Tabella valute
[Rows]
1|CODTAB|@2g@13,ls
1|S0|@17g@25,ls
1|R10|@44g@pn|###.###.###,@@@@@
1|S4|@44g@pn|###.###.##@,@@@@@
1|D0|@65g@d

View File

@ -34,8 +34,7 @@ BOOLEAN VAL_EURO
BEGIN
PROMPT 40 2 "Codice valuta dell'EURO"
FIELD B0
MESSAGE FALSE ENABLE,VAL_INEURO|ENABLE,VAL_DECIMALS
MESSAGE TRUE CLEAR,VAL_INEURO|CLEAR,VAL_DECIMALS|"2",VAL_DECIMALS
GROUP 3
END
STRING VAL_DESC 50
@ -67,6 +66,7 @@ BEGIN
ITEM "2|2 decimali"
ITEM "3|3 decimali"
FIELD I0
GROUP 3
END
LIST VAL_DECIMALS_PRICES 1 10
@ -79,6 +79,7 @@ BEGIN
FIELD I1
NUM_EXPR #THIS_FIELD>=#VAL_DECIMALS
WARNING "Si devono specificare almeno tanti decimali quanti quelli degli importi"
GROUP 3
END
GROUPBOX DLG_NULL 78 4
@ -102,6 +103,7 @@ BOOLEAN VAL_INEURO
BEGIN
PROMPT 40 11 "Espresso Contro EURO"
FIELD B1
GROUP 3
END
NUMBER VAL_CHANGE 15 5

View File

@ -1,13 +1,2 @@
#include <default.url>
/* ba1 -0 */
MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File"
/* ba1 -1 */
MENUBAR MENU_BAR(1)
MENU MENU_BAR(1)
SUBMENU MENU_FILE "~File"
#include <mainmenu.url>

View File

@ -1,3 +1,3 @@
106
1
cesp/ditcb|0|0|92|10011|Tabella ditte per cespiti|||
cesp/ditcb|0|0|93|10000|Tabella ditte per cespiti|||

View File

@ -1,5 +1,5 @@
106
14
15
CBCDD|3|5|0|
CBDTI|5|8|0|
CBDTF|5|8|0|
@ -14,5 +14,6 @@ SPMAN25S|4|13|0|
SPMAN5E|4|13|0|
SPMAN25E|4|13|0|
DTCALSP|5|8|0|
ESART14|2|1|0|
1
CBCDD+CBDTI+CBDTF+CBCGR+CBCSP|

31
ce/ammce.h Executable file
View File

@ -0,0 +1,31 @@
#define AMMCE_IDCESPITE "IDCESPITE"
#define AMMCE_CODES "CODES"
#define AMMCE_TPSALDO "TPSALDO"
#define AMMCE_TPAMM "TPAMM"
#define AMMCE_SCELTE "SCELTE"
#define AMMCE_AMMRIT "AMMRIT"
#define AMMCE_CSCEN "CSCEN"
#define AMMCE_FZPER "FZPER"
#define AMMCE_PNOR "PNOR"
#define AMMCE_PACC "PACC"
#define AMMCE_PANT "PANT"
#define AMMCE_FZQUO "FZQUO"
#define AMMCE_QNOR "QNOR"
#define AMMCE_QACC "QACC"
#define AMMCE_QANT "QANT"
#define AMMCE_QPERSE "QPERSE"
#define AMMCE_FPRIVATO "FPRIVATO"
#define AMMCE_QPPRIVATE "QPPRIVATE"
#define AMMCE_QNORP "QNORP"
#define AMMCE_QACCP "QACCP"
#define AMMCE_QANTP "QANTP"
#define AMMCE_QPERSEP "QPERSEP"
#define AMMCE_FPRIVATOP "FPRIVATOP"
#define AMMCE_QPPRIVATEP "QPPRIVATEP"
#define AMMCE_MSG01 "MSG01"
#define AMMCE_MSG02 "MSG02"
#define AMMCE_MSG03 "MSG03"
#define AMMCE_MSG04 "MSG04"
#define AMMCE_MSG05 "MSG05"
#define AMMCE_MSGD05 "MSGD05"
#define AMMCE_MSG06 "MSG06"

20
ce/ammmv.h Executable file
View File

@ -0,0 +1,20 @@
#define AMMMV_IDCESPITE "IDCESPITE"
#define AMMMV_IDMOV "IDMOV"
#define AMMMV_TPAMM "TPAMM"
#define AMMMV_FZPER "FZPER"
#define AMMMV_PNOR "PNOR"
#define AMMMV_PACC "PACC"
#define AMMMV_PANT "PANT"
#define AMMMV_PENOR "PENOR"
#define AMMMV_PEACC "PEACC"
#define AMMMV_PEANT "PEANT"
#define AMMMV_FZQUO "FZQUO"
#define AMMMV_QNOR "QNOR"
#define AMMMV_QACC "QACC"
#define AMMMV_QANT "QANT"
#define AMMMV_QPERSE "QPERSE"
#define AMMMV_MINUS "MINUS"
#define AMMMV_PLUS "PLUS"
#define AMMMV_QPPRIVATE "QPPRIVATE"
#define AMMMV_FPRIVATO "FPRIVATO"
#define AMMMV_NOTE "NOTE"

24
ce/catdi.h Executable file
View File

@ -0,0 +1,24 @@
#define CATDI_CODES "CODES"
#define CATDI_CODCGRA "CODCGRA"
#define CATDI_CODSPA "CODSPA"
#define CATDI_CODCGR "CODCGR"
#define CATDI_CODSP "CODSP"
#define CATDI_CODCAT "CODCAT"
#define CATDI_PFNORVN "PFNORVN"
#define CATDI_PFANTVN "PFANTVN"
#define CATDI_PCNORVN "PCNORVN"
#define CATDI_PCANTVN "PCANTVN"
#define CATDI_PFNORVT "PFNORVT"
#define CATDI_PFANTVT "PFANTVT"
#define CATDI_PCNORVT "PCNORVT"
#define CATDI_PCANTVT "PCANTVT"
#define CATDI_PFNORNT "PFNORNT"
#define CATDI_PFANTNT "PFANTNT"
#define CATDI_PCNORNT "PCNORNT"
#define CATDI_PCANTNT "PCANTNT"
#define CATDI_PFACC "PFACC"
#define CATDI_PCACC "PCACC"
#define CATDI_AMMRIT "AMMRIT"
#define CATDI_CSCEN "CSCEN"
#define CATDI_DATE "DATE"
#define CATDI_TPOP "TPOP"

10
ce/ce0.h Executable file
View File

@ -0,0 +1,10 @@
#ifndef __CE0_H
#define __CE0_H
int ce0100(int argc, char* argv[]);
int ce0400(int argc, char* argv[]);
int ce0500(int argc, char* argv[]);
int ce0900(int argc, char* argv[]);
#endif // __CE0_H

291
ce/ce0100.cpp Executable file
View File

@ -0,0 +1,291 @@
#include <automask.h>
#include <execp.h>
#include <mailbox.h>
#include <tabutil.h>
#include <tabapp.h>
#include "ce0.h"
#include "cetbtmc.h"
#include "cetbcac.h"
#include "cetbcce.h"
#include "cetbccb.h"
#define MIN_CAT_COM 40
#ifndef TTable_application
#define TTable_application Tab_application
#endif
TTable_application& app() { return (TTable_application&)main_app(); }
///////////////////////////////////////////////////////////
// TTMC_mask
///////////////////////////////////////////////////////////
class TTMC_mask : public TAutomask
{
public:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
TTMC_mask() : TAutomask("cetbtmc") { }
virtual ~TTMC_mask() { }
};
bool TTMC_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F_APPLICABLE1:
if (e == fe_close && !query_mode())
{
if ((!get_bool(F_APPLICABLE1)) && (!get_bool(F_APPLICABLE2)) && (!get_bool(F_APPLICABLE3)))
return error_box("E' necessario specificare almeno un'applicabilita'");
}
default:
break;
}
return TRUE;
}
///////////////////////////////////////////////////////////
// TCAC_mask
///////////////////////////////////////////////////////////
class TCAC_mask : public TAutomask
{
public:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
TCAC_mask() : TAutomask("cetbcac") { }
virtual ~TCAC_mask() { }
};
bool TCAC_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F_TIPOCE:
if (e == fe_modify)
{
const int tipo_cesp = get_int(F_TIPOCE);
if (tipo_cesp == 1)
field(F_TIPOAMMO).on_hit();
}
break;
case F_NUMANNI:
if ((e == fe_close && !query_mode()))
{
if (get(F_NUMANNI).empty())
{
const int tipo_cesp = get_int(F_TIPOCE);
const int tipo_vinc = get_int(F_TIPOVINC);
const real pmin = get_real(F_PERC_MINAMF2);
const real pmax = get_real(F_PERC_MAXAMF2);
if (tipo_cesp == 1 || (tipo_cesp == 2 && tipo_vinc != 3 && pmin == ZERO &&
pmax == ZERO))
return error_box("Numero di anni per ammortamento costi obbligatori");
}
}
break;
case F_CODCAT:
if (e == fe_close && query_mode())
{
const int codgr = get_int(F_CODGR);
const int codsp = get_int(F_CODSP);
const int codcat = get_int(F_CODCAT);
if (codgr == 0 && codsp == 0)
{
// categorie comuni
if (codcat < MIN_CAT_COM)
return error_box("Le categorie comuni non possono avere\n un codice inferiore a %d", MIN_CAT_COM);
}
else
{
// categorie noncomuni
if (codcat >= MIN_CAT_COM)
return error_box("I codici categoria superiori o uguali\n a %d sono riservati alle Categorie Comuni",MIN_CAT_COM);
}
}
default:
break;
}
return TRUE;
}
///////////////////////////////////////////////////////////
// TCCE_mask
///////////////////////////////////////////////////////////
class TCCE_mask : public TAutomask
{
public:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
TCCE_mask() : TAutomask("cetbcce") { }
virtual ~TCCE_mask() { }
};
bool TCCE_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case DLG_ATTIV:
if (e == fe_button)
{
TString app("ce0 -0 CCB");
TMailbox mail;
TString body; body.format("%d|%d=%s|%d=%s|%d=%s", F_CODSP_CCB, F_CODESER_CCB, (const char *)get(F_CODESER),
F_DATAINI_CCB, (const char *)get(F_DATAINI),
F_DATAFINE_CCB, (const char *)get(F_DATAFINE));
TMessage msg(app, MSG_FS, body);
mail.send(msg);
TExternal_app a(app);
a.run();
}
default:
break;
}
return TRUE;
}
///////////////////////////////////////////////////////////
// TCEtables
///////////////////////////////////////////////////////////
class TCEtables : public TTable_application
{
protected:
virtual TString& get_mask_name(TString& name) const;
virtual TMask* set_mask(TMask* m);
virtual int read(TMask& m);
virtual int write(const TMask& m);
virtual int rewrite(const TMask& m);
virtual bool remove();
virtual bool protected_record(TRectype& rec);
virtual void init_query_mode(TMask& m);
virtual void init_query_insert_mode(TMask& m);
};
TString& TCEtables::get_mask_name(TString& name) const
{
name = get_tabname();
if (name[0] == '%')
name = name.mid(1);
name.insert("cetb", 0);
return name;
}
TMask* TCEtables::set_mask(TMask* m)
{
if (m == NULL)
{
if (get_tabname() == "%TMC")
m = new TTMC_mask();
else
if (get_tabname() == "%CAC")
m = new TCAC_mask();
else
if (get_tabname() == "CCE")
m = new TCCE_mask();
else
{
TString name; get_mask_name(name);
m = new TMask(name);
}
}
return TTable_application::set_mask(m);
}
int TCEtables::read(TMask& m)
{
const int err = TTable_application::read(m);
return err;
}
int TCEtables::write(const TMask& m)
{
const int err = TTable_application::write(m);
return err;
}
int TCEtables::rewrite(const TMask& m)
{
const int err = TTable_application::rewrite(m);
return err;
}
bool TCEtables::remove()
{
const bool ok = TTable_application::remove();
return ok;
}
bool TCEtables::protected_record(TRectype& rec)
{
if (get_tabname() == "%CGR")
{
TTable cat("%CAT");
const bool prot = FALSE;
const TString16 key(rec.get("CODTAB"));
cat.put("CODTAB", key);
if (cat.read(_isgteq) == NOERR)
return key == cat.get("CODTAB").left(2);
}
else
if (get_tabname() == "%CAT")
{
TTable cac("%CAC");
const bool prot = FALSE;
const TString16 key(rec.get("CODTAB"));
cac.put("CODTAB", key);
if (cac.read(_isgteq) == NOERR)
{
TString16 keyfound = cac.get("CODTAB").left(6); keyfound.trim();
return key == keyfound;
}
}
return TTable_application::protected_record(rec);
}
void TCEtables::init_query_mode(TMask& m)
{
if (get_tabname() == "CCE")
{
m.show(F_CODESER,TRUE);
m.show(F_CODESERCONT,FALSE);
}
}
void TCEtables::init_query_insert_mode(TMask& m)
{
if (get_tabname() == "CCE")
{
m.show(F_CODESER,FALSE);
m.show(F_CODESERCONT,TRUE);
}
}
int ce0100(int argc, char* argv[])
{
if (argc > 2)
{
TString name;
name << "Tabella " << argv[2];
TCEtables a;
a.run(argc, argv, name);
}
return 0;
}

57
ce/ce0400.cpp Executable file
View File

@ -0,0 +1,57 @@
#include <confapp.h>
#include <tabutil.h>
#include "ce0400a.h"
class CE0_App : public TConfig_application
{
char _current;
protected:
virtual bool user_create();
//virtual bool preprocess_config (TMask& mask, TConfig& config);
public:
CE0_App() : TConfig_application(CONFIG_DITTA) {}
virtual ~CE0_App() {}
};
bool CE0_App::user_create( )
{
const char* param = argv(2);
_current = param ? toupper(*param) : 'P'; //prendi terzo argomento, primo carattere, fallo maiuscolo; (se vuoto mettilo = P)
TConfig conf(CONFIG_DITTA, "ce"); // si posiziona sul paragrafo "ce" dei parametri ditta
switch( _current )
{
case 'C':
conf.set( "EdMask", "ce0400b");
break;
default:
conf.set( "EdMask", "ce0400a");
break;
}
return TRUE;
}
/*
bool CE0_App::preprocess_config (TMask& mask, TConfig& config)
{
if (_current == 'P')
{
TTable tab("CCE");
for (int err = tab.first() ; err == NOERR; err = tab.next())
{
if (tab.get_bool("B6"))
{
mask.set(F_ESERCORR,tab.get("CODTAB"));
break;
}
}
}
return TRUE;
}
*/
int ce0400 (int argc, char* argv[])
{
CE0_App appc;
appc.run(argc, argv, "Parametri Ditta");
return 0;
}

11
ce/ce0400a.h Executable file
View File

@ -0,0 +1,11 @@
// campi maschera ce0400a.msk
#define F_DATACONS 101
#define F_ANNOTUIR 102
#define F_ESERCORR 103
#define F_DATAINIZIO 104
#define F_DATAFINE 105
#define F_GRUPPOCORR 106
#define F_SPECIECORR 107
#define F_D_GRUPPOCORR 108
#define F_D_SPECIECORR 109

111
ce/ce0400a.uml Executable file
View File

@ -0,0 +1,111 @@
#include "ce0400a.h"
TOOLBAR "" 0 -2 0 2
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -11 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -11 ""
END
ENDPAGE
PAGE "Parametri Ditta" -1 -1 78 10
DATE F_DATACONS
BEGIN
PROMPT 1 1 "Data conseguimento primi ricavi "
FIELD CADTR
END
RADIOBUTTON F_ANNOTUIR 30
BEGIN
FLAGS "Z"
PROMPT 1 3 "Anno inizio applicazione TUIR"
ITEM "0|1988"
ITEM "1|1989"
FIELD CATSU
END
GROUPBOX DLG_NULL 76 5
BEGIN
PROMPT 1 6 "Esercizio/Attivita' corrente"
FLAGS "R"
END
NUMBER F_ESERCORR 4
BEGIN
PROMPT 2 7 "Esercizio "
FIELD CODESCORR
FLAGS "Z"
USE CCE
JOIN ESC ALIAS 105 INTO CODTAB==CODTAB
INPUT CODTAB F_ESERCORR
DISPLAY "Codice esercizio" CODTAB
DISPLAY "Data inizio" 105@->D0
DISPLAY "Data fine@10" 105@->D1
OUTPUT F_ESERCORR CODTAB
OUTPUT F_DATAINIZIO 105@->D0
OUTPUT F_DATAFINE 105@->D1
CHECKTYPE REQUIRED
END
DATE F_DATAINIZIO
BEGIN
PROMPT 20 7 "Data inizio "
FLAGS "D"
END
DATE F_DATAFINE
BEGIN
PROMPT 45 7 "Data fine "
FLAGS "D"
END
NUMBER F_GRUPPOCORR 2
BEGIN
PROMPT 2 8 "Gruppo "
FIELD GRUPPOCORR
FLAGS "Z"
USE CCB KEY 1
JOIN %CGR ALIAS 106 INTO CODTAB==CODTAB[5,6]
JOIN %CAT ALIAS 107 INTO CODTAB==CODTAB[5,10]
INPUT CODTAB[1,4] F_ESERCORR SELECT
INPUT CODTAB[5,6] F_GRUPPOCORR
INPUT CODTAB[7,10] F_SPECIECORR
DISPLAY "Gruppo" CODTAB[5,6]
DISPLAY "Specie" CODTAB[7,10]
DISPLAY "Descrizione@60" 107@->S0
OUTPUT F_GRUPPOCORR CODTAB[5,6]
OUTPUT F_D_GRUPPOCORR 106@->S0
OUTPUT F_SPECIECORR CODTAB[7,10]
OUTPUT F_D_SPECIECORR 107@->S0
CHECKTYPE NORMAL
END
STRING F_D_GRUPPOCORR 60 58
BEGIN
PROMPT 17 8 ""
FLAGS "D"
END
STRING F_SPECIECORR 4
BEGIN
PROMPT 2 9 "Specie "
FIELD SPECIECORR
FLAGS "_"
COPY ALL F_GRUPPOCORR
CHECKTYPE NORMAL
END
STRING F_D_SPECIECORR 60 58
BEGIN
PROMPT 17 9 ""
FLAGS "D"
END

41
ce/ce0400b.h Executable file
View File

@ -0,0 +1,41 @@
// campi maschera ce0400b.msk
#define F_PLUSMINUS 101
#define F_TIPOSCRIT 102
#define F_ELIMCESP 104
#define F_D_ELIMCESP 105
#define F_RIL_DIFF 106
#define F_D_RIL_DIFF 107
#define F_RIL_QUOT 108
#define F_D_RIL_QUOT 109
#define F_RIL_PLUS 110
#define F_D_RIL_PLUS 111
#define F_RIL_MIN 112
#define F_D_RIL_MIN 113
#define F_SOPR_PAS_GR 120
#define F_SOPR_PAS_CO 121
#define F_SOPR_PAS_SO 122
#define F_SOPR_PAS_D 123
#define F_DIFF_QUO_GR 124
#define F_DIFF_QUO_CO 125
#define F_DIFF_QUO_SO 126
#define F_DIFF_QUO_D 127
#define F_DIFF_FON_GR 128
#define F_DIFF_FON_CO 129
#define F_DIFF_FON_SO 130
#define F_DIFF_FON_D 131
#define F_PLUSVAL_GR 132
#define F_PLUSVAL_CO 133
#define F_PLUSVAL_SO 134
#define F_PLUSVAL_D 135
#define F_MINUSVAL_GR 136
#define F_MINUSVAL_CO 137
#define F_MINUSVAL_SO 138
#define F_MINUSVAL_D 139
#define F_VEND_CESP_GR 140
#define F_VEND_CESP_CO 141
#define F_VEND_CESP_SO 142
#define F_VEND_CESP_D 143

606
ce/ce0400b.uml Executable file
View File

@ -0,0 +1,606 @@
#include "ce0400b.h"
TOOLBAR "" 0 -2 0 2
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -11 ""
PICTURE BMP_SAVEREC
PICTURE BMP_SAVERECDN
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -11 ""
END
ENDPAGE
PAGE " Collegamenti contabili parametri per ditta " -1 -1 60 6
RADIOBUTTON F_PLUSMINUS 40
BEGIN
FLAGS "Z"
PROMPT 2 1 "Genera anche movimenti plus/minusvalenza"
ITEM "0|SI"
MESSAGE ENABLE,F_RIL_PLUS|ENABLE,F_D_RIL_PLUS|ENABLE,F_RIL_MIN|ENABLE,F_D_RIL_MIN|ENABLE,F_TIPOSCRIT
MESSAGE REQUIRED,F_PLUSVAL_SO|REQUIRED,F_MINUSVAL_SO
ITEM "1|NO"
MESSAGE CLEAR,F_RIL_PLUS|CLEAR,F_D_RIL_PLUS|CLEAR,F_RIL_MIN|CLEAR,F_D_RIL_MIN|CLEAR,F_TIPOSCRIT
MESSAGE NORMAL,F_PLUSVAL_SO|NORMAL,F_MINUSVAL_SO
FIELD COPLMN
END
LISTBOX F_TIPOSCRIT 1 16
BEGIN
PROMPT 2 4 "Tipo scrittura per vendita cespite "
ITEM "0|Su Conto Vendite"
MESSAGE ENABLE,F_VEND_CESP_GR|ENABLE,F_VEND_CESP_CO|ENABLE,F_VEND_CESP_SO|ENABLE,F_VEND_CESP_D
ITEM "1|Su Conto Cespite"
MESSAGE CLEAR,F_VEND_CESP_GR|CLEAR,F_VEND_CESP_CO|CLEAR,F_VEND_CESP_SO|CLEAR,F_VEND_CESP_D
FIELD COR5PM
END
GROUPBOX DLG_NULL 78 7
BEGIN
PROMPT 1 6 "@B Cod. Causali"
FLAGS "R"
END
STRING F_ELIMCESP 3
BEGIN
PROMPT 2 7 "Eliminazione cespite "
FIELD COAUEL
USE LF_CAUSALI SELECT ((SOSPESO=="")&&(TIPODOC=="")&&(COLLCESP==""))
INPUT CODCAUS F_ELIMCESP
DISPLAY "Codice" CODCAUS
DISPLAY "Descrizione@50" DESCR
OUTPUT F_ELIMCESP CODCAUS
OUTPUT F_D_ELIMCESP DESCR
ADD RUN CG0 -4
CHECKTYPE REQUIRED
END
STRING F_D_ELIMCESP 50 35
BEGIN
PROMPT 40 7 ""
USE LF_CAUSALI KEY 2
INPUT DESCR F_D_ELIMCESP
DISPLAY "Descrizione@50" DESCR
DISPLAY "Codice" CODCAUS
COPY OUTPUT F_ELIMCESP
ADD RUN CG0 -4
CHECKTYPE REQUIRED
END
STRING F_RIL_DIFF 3
BEGIN
PROMPT 2 8 "Rilevazione differenze "
FIELD COAUDI
USE LF_CAUSALI SELECT ((SOSPESO=="")&&(TIPODOC=="")&&(COLLCESP==""))
INPUT CODCAUS F_RIL_DIFF
DISPLAY "Codice" CODCAUS
DISPLAY "Descrizione@50" DESCR
OUTPUT F_RIL_DIFF CODCAUS
OUTPUT F_D_RIL_DIFF DESCR
ADD RUN CG0 -4
CHECKTYPE REQUIRED
END
STRING F_D_RIL_DIFF 50 35
BEGIN
PROMPT 40 8 ""
USE LF_CAUSALI KEY 2
INPUT DESCR F_D_RIL_DIFF
DISPLAY "Descrizione@50" DESCR
DISPLAY "Codice" CODCAUS
COPY OUTPUT F_RIL_DIFF
ADD RUN CG0 -4
CHECKTYPE REQUIRED
END
STRING F_RIL_QUOT 3
BEGIN
PROMPT 2 9 "Rilevazione quote ammortamento "
FIELD COAUQU
USE LF_CAUSALI SELECT ((SOSPESO=="")&&(TIPODOC=="")&&(COLLCESP==""))
INPUT CODCAUS F_RIL_QUOT
DISPLAY "Codice" CODCAUS
DISPLAY "Descrizione@50" DESCR
OUTPUT F_RIL_QUOT CODCAUS
OUTPUT F_D_RIL_QUOT DESCR
ADD RUN CG0 -4
CHECKTYPE REQUIRED
END
STRING F_D_RIL_QUOT 50 35
BEGIN
PROMPT 40 9 ""
USE LF_CAUSALI KEY 2
INPUT DESCR F_D_RIL_QUOT
DISPLAY "Descrizione@50" DESCR
DISPLAY "Codice" CODCAUS
COPY OUTPUT F_RIL_QUOT
ADD RUN CG0 -4
CHECKTYPE REQUIRED
END
STRING F_RIL_PLUS 3
BEGIN
PROMPT 2 10 "Rilevazione plusvalenze "
FIELD COAUPL
USE LF_CAUSALI SELECT ((SOSPESO=="")&&(TIPODOC=="")&&(COLLCESP==""))
INPUT CODCAUS F_RIL_PLUS
DISPLAY "Codice" CODCAUS
DISPLAY "Descrizione@50" DESCR
OUTPUT F_RIL_PLUS CODCAUS
OUTPUT F_D_RIL_PLUS DESCR
ADD RUN CG0 -4
CHECKTYPE REQUIRED
END
STRING F_D_RIL_PLUS 50 35
BEGIN
PROMPT 40 10 ""
USE LF_CAUSALI KEY 2
INPUT DESCR F_D_RIL_PLUS
DISPLAY "Descrizione@50" DESCR
DISPLAY "Codice" CODCAUS
COPY OUTPUT F_RIL_PLUS
ADD RUN CG0 -4
CHECKTYPE REQUIRED
END
STRING F_RIL_MIN 3
BEGIN
PROMPT 2 11 "Rilevazione minusvalenze "
FIELD COAUM
USE LF_CAUSALI SELECT ((SOSPESO=="")&&(TIPODOC=="")&&(COLLCESP==""))
INPUT CODCAUS F_RIL_MIN
DISPLAY "Codice" CODCAUS
DISPLAY "Descrizione@50" DESCR
OUTPUT F_RIL_MIN CODCAUS
OUTPUT F_D_RIL_MIN DESCR
ADD RUN CG0 -4
CHECKTYPE REQUIRED
END
STRING F_D_RIL_MIN 50 35
BEGIN
PROMPT 40 11 ""
USE LF_CAUSALI KEY 2
INPUT DESCR F_D_RIL_MIN
DISPLAY "Descrizione@50" DESCR
DISPLAY "Codice" CODCAUS
COPY OUTPUT F_RIL_MIN
ADD RUN CG0 -4
CHECKTYPE REQUIRED
END
GROUPBOX DLG_NULL 78 8
BEGIN
PROMPT 1 14 "@B Gr. Co. S.co. Descrizione"
FLAGS "R"
END
NUMBER F_SOPR_PAS_GR 3
BEGIN
PROMPT 2 15 "Sopravvenienze passive "
FIELD GRCOTELI
FLAGS "R"
USE LF_PCON KEY 1 SELECT CONTO=""
INPUT GRUPPO F_SOPR_PAS_GR
DISPLAY "Gruppo" GRUPPO
DISPLAY "Descrizione@50" DESCR
OUTPUT F_SOPR_PAS_GR GRUPPO
ADD RUN CG0 -0
CHECKTYPE REQUIRED
END
NUMBER F_SOPR_PAS_CO 3
BEGIN
PROMPT 31 15 ""
FIELD COCOTELI
FLAGS "R"
USE LF_PCON KEY 1 SELECT ((CONTO!="")&&(SOTTOCONTO=""))
COPY INPUT F_SOPR_PAS_GR
INPUT CONTO F_SOPR_PAS_CO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT F_SOPR_PAS_GR GRUPPO
OUTPUT F_SOPR_PAS_CO CONTO
ADD RUN CG0 -0
CHECKTYPE REQUIRED
VALIDATE REQIF_FUNC 1 F_SOPR_PAS_SO
WARNING "Manca il conto"
END
NUMBER F_SOPR_PAS_SO 6
BEGIN
PROMPT 37 15 ""
FIELD SOCOTELI
FLAGS "R"
USE LF_PCON KEY 1 SELECT SOTTOCONTO!=""
COPY INPUT F_SOPR_PAS_CO
INPUT SOTTOCONTO F_SOPR_PAS_SO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Sosp." SOSPESO
DISPLAY "Descrizione@50" DESCR
OUTPUT F_SOPR_PAS_SO SOTTOCONTO
OUTPUT F_SOPR_PAS_GR GRUPPO
OUTPUT F_SOPR_PAS_CO CONTO
OUTPUT F_SOPR_PAS_D DESCR
ADD RUN CG0 -0
CHECKTYPE REQUIRED
END
STRING F_SOPR_PAS_D 50 29
BEGIN
PROMPT 46 15 ""
USE LF_PCON KEY 2
INPUT DESCR F_SOPR_PAS_D
DISPLAY "Descrizione@50" DESCR
DISPLAY "Sosp." SOSPESO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
COPY OUTPUT F_SOPR_PAS_SO
ADD RUN CG0 -0
CHECKTYPE REQUIRED
WARNING "Manca la descrizione"
END
NUMBER F_DIFF_QUO_GR 3
BEGIN
PROMPT 2 16 "Differenze su quote "
FIELD GRCOTDIQ
FLAGS "R"
USE LF_PCON KEY 1 SELECT CONTO=""
INPUT GRUPPO F_DIFF_QUO_GR
DISPLAY "Gruppo" GRUPPO
DISPLAY "Descrizione@50" DESCR
OUTPUT F_DIFF_QUO_GR GRUPPO
ADD RUN CG0 -0
CHECKTYPE REQUIRED
END
NUMBER F_DIFF_QUO_CO 3
BEGIN
PROMPT 31 16 ""
FIELD COCOTDIQ
FLAGS "R"
USE LF_PCON KEY 1 SELECT ((CONTO!="")&&(SOTTOCONTO=""))
COPY INPUT F_DIFF_QUO_GR
INPUT CONTO F_DIFF_QUO_CO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT F_DIFF_QUO_GR GRUPPO
OUTPUT F_DIFF_QUO_CO CONTO
ADD RUN CG0 -0
CHECKTYPE REQUIRED
VALIDATE REQIF_FUNC 1 F_DIFF_QUO_SO
WARNING "Manca il conto"
END
NUMBER F_DIFF_QUO_SO 6
BEGIN
PROMPT 37 16 ""
FIELD SOCOTDIQ
FLAGS "R"
USE LF_PCON KEY 1 SELECT SOTTOCONTO!=""
COPY INPUT F_DIFF_QUO_CO
INPUT SOTTOCONTO F_DIFF_QUO_SO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Sosp." SOSPESO
DISPLAY "Descrizione@50" DESCR
OUTPUT F_DIFF_QUO_SO SOTTOCONTO
OUTPUT F_DIFF_QUO_GR GRUPPO
OUTPUT F_DIFF_QUO_CO CONTO
OUTPUT F_DIFF_QUO_D DESCR
ADD RUN CG0 -0
CHECKTYPE REQUIRED
END
STRING F_DIFF_QUO_D 50 29
BEGIN
PROMPT 46 16 ""
USE LF_PCON KEY 2
INPUT DESCR F_DIFF_QUO_D
DISPLAY "Descrizione@50" DESCR
DISPLAY "Sosp." SOSPESO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
COPY OUTPUT F_DIFF_QUO_SO
ADD RUN CG0 -0
CHECKTYPE REQUIRED
WARNING "Manca la descrizione"
END
NUMBER F_DIFF_FON_GR 3
BEGIN
PROMPT 2 17 "Differenze su fondi "
FIELD GRCOTDIF
FLAGS "R"
USE LF_PCON KEY 1 SELECT CONTO=""
INPUT GRUPPO F_DIFF_FON_GR
DISPLAY "Gruppo" GRUPPO
DISPLAY "Descrizione@50" DESCR
OUTPUT F_DIFF_FON_GR GRUPPO
ADD RUN CG0 -0
CHECKTYPE REQUIRED
END
NUMBER F_DIFF_FON_CO 3
BEGIN
PROMPT 31 17 ""
FIELD COCOTDIF
FLAGS "R"
USE LF_PCON KEY 1 SELECT ((CONTO!="")&&(SOTTOCONTO=""))
COPY INPUT F_DIFF_FON_GR
INPUT CONTO F_DIFF_FON_CO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT F_DIFF_FON_GR GRUPPO
OUTPUT F_DIFF_FON_CO CONTO
ADD RUN CG0 -0
CHECKTYPE REQUIRED
VALIDATE REQIF_FUNC 1 F_DIFF_FON_SO
WARNING "Manca il conto"
END
NUMBER F_DIFF_FON_SO 6
BEGIN
PROMPT 37 17 ""
FIELD SOCOTDIF
FLAGS "R"
USE LF_PCON KEY 1 SELECT SOTTOCONTO!=""
COPY INPUT F_DIFF_FON_CO
INPUT SOTTOCONTO F_DIFF_FON_SO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Sosp." SOSPESO
DISPLAY "Descrizione@50" DESCR
OUTPUT F_DIFF_FON_SO SOTTOCONTO
OUTPUT F_DIFF_FON_GR GRUPPO
OUTPUT F_DIFF_FON_CO CONTO
OUTPUT F_DIFF_FON_D DESCR
ADD RUN CG0 -0
CHECKTYPE REQUIRED
END
STRING F_DIFF_FON_D 50 29
BEGIN
PROMPT 46 17 ""
USE LF_PCON KEY 2
INPUT DESCR F_DIFF_FON_D
DISPLAY "Descrizione@50" DESCR
DISPLAY "Sosp." SOSPESO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
COPY OUTPUT F_DIFF_FON_SO
ADD RUN CG0 -0
CHECKTYPE REQUIRED
WARNING "Manca la descrizione"
END
NUMBER F_PLUSVAL_GR 3
BEGIN
PROMPT 2 18 "Plusvalenze "
FIELD GRCOTPLU
FLAGS "R"
USE LF_PCON KEY 1 SELECT CONTO=""
INPUT GRUPPO F_PLUSVAL_GR
DISPLAY "Gruppo" GRUPPO
DISPLAY "Descrizione@50" DESCR
OUTPUT F_PLUSVAL_GR GRUPPO
ADD RUN CG0 -0
CHECKTYPE NORMAL
END
NUMBER F_PLUSVAL_CO 3
BEGIN
PROMPT 31 18 ""
FIELD COCOTPLU
FLAGS "R"
USE LF_PCON KEY 1 SELECT ((CONTO!="")&&(SOTTOCONTO="")&&(INDBIL==4))
COPY INPUT F_PLUSVAL_GR
INPUT CONTO F_PLUSVAL_CO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT F_PLUSVAL_GR GRUPPO
OUTPUT F_PLUSVAL_CO CONTO
ADD RUN CG0 -0
CHECKTYPE NORMAL
VALIDATE REQIF_FUNC 1 F_PLUSVAL_SO
WARNING "Manca il conto"
END
NUMBER F_PLUSVAL_SO 6
BEGIN
PROMPT 37 18 ""
FIELD SOCOTPLU
FLAGS "R"
USE LF_PCON KEY 1 SELECT SOTTOCONTO!=""
INPUT GRUPPO F_PLUSVAL_GR SELECT
INPUT CONTO F_PLUSVAL_CO SELECT
INPUT SOTTOCONTO F_PLUSVAL_SO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Sosp." SOSPESO
DISPLAY "Descrizione@50" DESCR
OUTPUT F_PLUSVAL_SO SOTTOCONTO
OUTPUT F_PLUSVAL_GR GRUPPO
OUTPUT F_PLUSVAL_CO CONTO
OUTPUT F_PLUSVAL_D DESCR
ADD RUN CG0 -0
CHECKTYPE NORMAL
END
STRING F_PLUSVAL_D 50 29
BEGIN
PROMPT 46 18 ""
USE LF_PCON KEY 2
INPUT DESCR F_PLUSVAL_D
DISPLAY "Descrizione@50" DESCR
DISPLAY "Sosp." SOSPESO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
COPY OUTPUT F_PLUSVAL_SO
ADD RUN CG0 -0
CHECKTYPE NORMAL
WARNING "Manca la descrizione"
END
NUMBER F_MINUSVAL_GR 3
BEGIN
PROMPT 2 19 "Minusvalenze "
FIELD GRCOTMIN
FLAGS "R"
USE LF_PCON KEY 1 SELECT CONTO=""
INPUT GRUPPO F_MINUSVAL_GR
DISPLAY "Gruppo" GRUPPO
DISPLAY "Descrizione@50" DESCR
OUTPUT F_MINUSVAL_GR GRUPPO
ADD RUN CG0 -0
CHECKTYPE NORMAL
END
NUMBER F_MINUSVAL_CO 3
BEGIN
PROMPT 31 19 ""
FIELD COCOTMIN
FLAGS "R"
USE LF_PCON KEY 1 SELECT ((CONTO!="")&&(SOTTOCONTO="")&&(INDBIL==3))
COPY INPUT F_MINUSVAL_GR
INPUT CONTO F_MINUSVAL_CO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT F_MINUSVAL_GR GRUPPO
OUTPUT F_MINUSVAL_CO CONTO
ADD RUN CG0 -0
CHECKTYPE NORMAL
VALIDATE REQIF_FUNC 1 F_MINUSVAL_SO
WARNING "Manca il conto"
END
NUMBER F_MINUSVAL_SO 6
BEGIN
PROMPT 37 19 ""
FIELD SOCOTMIN
FLAGS "R"
USE LF_PCON KEY 1 SELECT SOTTOCONTO!=""
INPUT GRUPPO F_MINUSVAL_GR SELECT
INPUT CONTO F_MINUSVAL_CO SELECT
INPUT SOTTOCONTO F_MINUSVAL_SO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Sosp." SOSPESO
DISPLAY "Descrizione@50" DESCR
OUTPUT F_MINUSVAL_SO SOTTOCONTO
OUTPUT F_MINUSVAL_GR GRUPPO
OUTPUT F_MINUSVAL_CO CONTO
OUTPUT F_MINUSVAL_D DESCR
ADD RUN CG0 -0
CHECKTYPE NORMAL
END
STRING F_MINUSVAL_D 50 29
BEGIN
PROMPT 46 19 ""
USE LF_PCON KEY 2
INPUT DESCR F_MINUSVAL_D
DISPLAY "Descrizione@50" DESCR
DISPLAY "Sosp." SOSPESO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
COPY OUTPUT F_MINUSVAL_SO
ADD RUN CG0 -0
CHECKTYPE NORMAL
WARNING "Manca la descrizione"
END
NUMBER F_VEND_CESP_GR 3
BEGIN
PROMPT 2 20 "Vendite cespiti "
FIELD GRCOTVEN
FLAGS "R"
USE LF_PCON KEY 1 SELECT CONTO=""
INPUT GRUPPO F_VEND_CESP_GR
DISPLAY "Gruppo" GRUPPO
DISPLAY "Descrizione@50" DESCR
OUTPUT F_VEND_CESP_GR GRUPPO
ADD RUN CG0 -0
CHECKTYPE REQUIRED
END
NUMBER F_VEND_CESP_CO 3
BEGIN
PROMPT 31 20 ""
FIELD COCOTVEN
FLAGS "R"
USE LF_PCON KEY 1 SELECT ((CONTO!="")&&(SOTTOCONTO=""))
COPY INPUT F_VEND_CESP_GR
INPUT CONTO F_VEND_CESP_CO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT F_VEND_CESP_GR GRUPPO
OUTPUT F_VEND_CESP_CO CONTO
ADD RUN CG0 -0
CHECKTYPE REQUIRED
VALIDATE REQIF_FUNC 1 F_VEND_CESP_SO
WARNING "Manca il conto"
END
NUMBER F_VEND_CESP_SO 6
BEGIN
PROMPT 37 20 ""
FIELD SOCOTVEN
FLAGS "R"
USE LF_PCON KEY 1 SELECT SOTTOCONTO!=""
COPY INPUT F_VEND_CESP_CO
INPUT SOTTOCONTO F_VEND_CESP_SO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Sosp." SOSPESO
DISPLAY "Descrizione@50" DESCR
OUTPUT F_VEND_CESP_SO SOTTOCONTO
OUTPUT F_VEND_CESP_GR GRUPPO
OUTPUT F_VEND_CESP_CO CONTO
OUTPUT F_VEND_CESP_D DESCR
ADD RUN CG0 -0
CHECKTYPE REQUIRED
END
STRING F_VEND_CESP_D 50 29
BEGIN
PROMPT 46 20 ""
USE LF_PCON KEY 2
INPUT DESCR F_VEND_CESP_D
DISPLAY "Descrizione@50" DESCR
DISPLAY "Sosp." SOSPESO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
COPY OUTPUT F_VEND_CESP_SO
ADD RUN CG0 -0
CHECKTYPE REQUIRED
WARNING "Manca la descrizione"
END

90
ce/ce0500.cpp Executable file
View File

@ -0,0 +1,90 @@
#include <automask.h>
#include <relapp.h>
#include "ce0.h"
class TQuery_mask : public TAutomask
{
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TQuery_mask() : TAutomask("ce0500a") { }
};
bool TQuery_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
return TRUE;
}
class TEdit_mask : public TAutomask
{
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TEdit_mask() : TAutomask("ce0500b") { }
};
bool TEdit_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
return TRUE;
}
class TAnacespi : public TRelation_application
{
TRelation* _cespiti;
TQuery_mask* _qmask;
TEdit_mask* _emask;
protected:
// @cmember Inizializzazione dei dati dell'utente
virtual bool user_create();
// @cmember Distruzione dei dati dell'utente
virtual bool user_destroy();
virtual bool changing_mask(int mode);
// @cmember Richiede la maschera da usare
virtual TMask* get_mask(int mode);
// @cmember Ritorna la relazione da modificare
virtual TRelation* get_relation() const;
};
bool TAnacespi::changing_mask(int)
{
return TRUE;
}
TMask* TAnacespi::get_mask(int mode)
{
return mode == MODE_QUERY ? (TMask*)_qmask : (TMask*)_emask;
}
TRelation* TAnacespi::get_relation() const
{
return _cespiti;
}
bool TAnacespi::user_create()
{
open_files(LF_TABCOM, LF_TAB, LF_CESPI, LF_SALCE, 0);
_cespiti = new TRelation(LF_CESPI);
_qmask = new TQuery_mask;
_emask = new TEdit_mask;
return TRUE;
}
bool TAnacespi::user_destroy()
{
delete _emask;
delete _qmask;
delete _cespiti;
return TRUE;
}
int ce0500(int argc, char* argv[])
{
TAnacespi a;
a.run(argc, argv, "Anagrafica cespiti");
return 0;
}

836
ce/ce0900.cpp Executable file
View File

@ -0,0 +1,836 @@
#include <applicat.h>
#include <automask.h>
#include <isam.h>
#include <mask.h>
#include <prefix.h>
#include <progind.h>
#include <relation.h>
#include <sheet.h>
#include <tabutil.h>
#include <nditte.h>
#include "ce0.h"
#include "ce0900a.h"
#include "../cg/cglib01.h"
#define CAMPODITTA "CAMPODITTA"
class TConversione_ce_mask : public TAutomask
{
TRelation* _rel;
TCursor* _cur;
TCursor_sheet* _sheet;
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TCursor_sheet& sheet() {return *_sheet;}
void lista_ditte(TAssoc_array& ditte);
TConversione_ce_mask();
~TConversione_ce_mask();
};
static bool esiste_ditta(const TRelation* rel)
{
const long ditta = rel->curr().get_long(NDT_CODDITTA);
return prefix().exist(ditta);
}
bool TConversione_ce_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F_SCELTADITTE:
if (e == fe_button)
{
sheet().run();
set(F_DITTESELEZ, sheet().checked());
}
if (e == fe_close)
if (sheet().checked() == 0)
return error_box("Non sono state selezionate ditte da convertire");
break;
case F_DITTESELEZ:
if (e == fe_init)
o.set(sheet().checked());
break;
case F_MINISTERIALI:
if (e == fe_init)
{
TTable cgr("%CGR");
const bool empty = cgr.first() != NOERR;
o.set(empty ? "X": " ");
}
break;
default:
break;
}
return TRUE;
}
void TConversione_ce_mask::lista_ditte(TAssoc_array& ditte)
{
ditte.destroy();
for (long i = sheet().items()-1; i >= 0; i--)
{
if (sheet().checked(i))
{
const char* codditta = sheet().row(i).get(1);
ditte.add(codditta);
}
}
}
TConversione_ce_mask::TConversione_ce_mask()
: TAutomask("ce0900a")
{
_rel = new TRelation(LF_NDITTE);
_cur = new TCursor(_rel);
_cur->set_filterfunction(esiste_ditta);
_sheet = new TCursor_sheet(_cur, " |CODDITTA|RAGSOC", "Selezione ditte", "@1|Codice|Ragione sociale@50", 0, 1);
_sheet->check(-1);
}
TConversione_ce_mask::~TConversione_ce_mask()
{
delete _sheet;
delete _cur;
delete _rel;
}
class TConversione_cespiti: public TSkeleton_application
{
FILE * _log;
TAssoc_array _ditte;
protected:
virtual bool create(void);
virtual void main_loop();
virtual bool destroy(void) ;
void open_log();
void write_log(const char * line);
void close_log();
int zap_file(int lf) const;
public:
bool daconvertire(const long ditta);
int conv_file(const TFilename& ofname, int nflogicnum);
int conv_inifile(const TFilename& ofname, const char* ofpar, int nflogicnum);
int conv_tab(const TFilename& ofname, const char* cod);
int conv_par(const TFilename& ofname, const char* ofpar, int which_config);
int get_codesc(const TDate& date, const bool fatal = TRUE);
const char conv_imptmc(int cod);
TConversione_cespiti() {}
virtual ~TConversione_cespiti() {}
};
bool TConversione_cespiti::create()
{
return TSkeleton_application::create();
}
bool TConversione_cespiti::destroy()
{
return TSkeleton_application::destroy();
}
bool TConversione_cespiti::daconvertire(const long ditta)
{
TString16 strditta;
strditta.format("%ld", ditta);
return _ditte.is_key(strditta);
}
void TConversione_cespiti::main_loop()
{
TConversione_ce_mask msk;
if (msk.run() == K_ENTER)
{
if (yesno_box("Confermare la conversione dei cespiti?"))
{
msk.lista_ditte(_ditte);
open_log();
TString80 s;
write_log("");
write_log("**********************************");
s.format("Conversione cespiti del %s", (const char *) TDate(TODAY).string());
write_log(s);
write_log("**********************************");
write_log("");
const char* studio = prefix().get_studio();
const bool converti_ministeriali = msk.get_bool(F_MINISTERIALI);
// conversione archivi
TFilename file = studio;
file << "cesp/ammce";
conv_file(file, 136);
file = studio;
file << "cesp/ammmv";
conv_file(file, 137);
file = studio;
file << "cesp/catdi";
conv_file(file, 138);
file = studio;
file << "cesp/cespi";
conv_file(file, 139);
file = studio;
file << "cesp/movam";
conv_file(file, 141);
file = studio;
file << "cesp/movce";
conv_file(file, 142);
file = studio;
file << "cesp/salce";
conv_file(file, 143);
file = studio;
file << "cesp/coll01";
conv_inifile(file, "COLL01", 140);
// conversione tabelle
file = studio;
file << "cesp/ditcb";
conv_tab(file, "CCB");
file = studio;
file << "cesp/ditce";
conv_tab(file, "CCE");
file = studio;
file << "cesp/tabimp";
conv_tab(file, "CIM");
file = studio;
file << "cesp/tabloc";
conv_tab(file, "LOC");
if (converti_ministeriali)
{
file = studio;
file << "cesp/tabat";
conv_tab(file, "%CAT");
file = studio;
file << "cesp/tabca";
conv_tab(file, "%CAC");
file = studio;
file << "cesp/tabgr";
conv_tab(file, "%CGR");
file = studio;
file << "cesp/limit";
conv_tab(file, "%CLM");
file = studio;
file << "cesp/tmvce";
conv_tab(file, "%TMC");
}
// conversione parametri
file = studio;
file << "cesp/ditc01";
conv_par(file, "DITC01", CONFIG_DITTA);
file = studio;
file << "cesp/ditca";
conv_par(file, "DITCA", CONFIG_DITTA);
message_box("Conversione completata");
close_log();
}
}
}
void TConversione_cespiti::open_log()
{
TFilename log;
log << "ceconv.log";
_log = fopen(log,"a");
if (_log == NULL)
fatal_box("Non posso aprire il file di log della conversione(%s)", (const char *) log);
}
void TConversione_cespiti::write_log(const char * line)
{
fprintf(_log,"%s\n", line);
}
void TConversione_cespiti::close_log()
{
fclose(_log);
}
int TConversione_cespiti::conv_file(const TFilename& ofname, int nflogicnum)
{
long oldditta = -1;
long ditta;
TDir d;
d.get(nflogicnum);
d.eod() = 0L;
d.put(nflogicnum);
//resetta i files di destinazione prima di scriverci sopra
int err = zap_file(nflogicnum);
if (err == NOERR)
{
TExternisamfile* oldfile = new TExternisamfile(ofname, FALSE, FALSE);
TLocalisamfile* newfile = new TLocalisamfile(nflogicnum);
TRectype oldrec = oldfile->curr();
TRectype newrec = newfile->curr();
TProgind *pi;
TString80 message;
message.format("Conversione tabella %s", (const char*) ofname);
pi = new TProgind(oldfile->eod(),message, FALSE, TRUE, 10);
pi->setstatus(1);
bool to_convert = FALSE;
for (int err = oldfile->first(); err == NOERR; err = oldfile->next())
{
pi->addstatus(1);
// mi posiziono sulla ditta indicata
ditta = oldfile->get_long("CODDITTA");
// i record sono ordinati per ditta!
if (oldditta != ditta)
{
oldditta = ditta;
to_convert = daconvertire(ditta);
if (to_convert)
set_firm(ditta);
else
{
TString s;
s.format("La ditta %ld indicata nel file %s non é stata selezionata per la conversione", ditta, (const char*) ofname);
write_log(s);
}
}
if (!to_convert)
continue;
// creo nuovo record
newrec.zero();
// setto i campi con lo stesso nome
for (int i = 0; i < oldrec.items(); i++)
{
const char* fieldname = oldrec.fieldname(i);
if (newrec.exist(fieldname))
{
newrec.put(fieldname, oldfile->get(fieldname));
if ((newrec.type(fieldname) != oldrec.type(fieldname)) && (newrec.type(fieldname)==_alfafld))
{
TString stringa = newrec.get(fieldname);
stringa.right_just(newrec.length(fieldname),'0');
newrec.put(fieldname, stringa);
}
}
}
// setto i campi che vanno elaborati pirsunalmente di pirsuna (nomi diversi)
switch (nflogicnum)
{
case 136:
{
TString80 codes;
codes.format("%04d",get_codesc(oldfile->get_date("DTINES")));
newrec.put("CODES", codes);
}
break;
case 138:
{
TString80 codes;
codes.format("%04d",get_codesc(oldfile->get_date("DTINES")));
newrec.put("CODES", codes);
}
break;
case 139:
{
newrec.put("CODCGRA", oldfile->get("AG0CGR"));
newrec.put("CODSPA", oldfile->get("ATACSP"));
newrec.put("CODCGR", oldfile->get("G0CGR"));
newrec.put("CODSP", oldfile->get("TACSP"));
newrec.put("CODCAT", oldfile->get("G0CCT"));
}
break;
case 142:
{
newrec.put("CODMOV", oldfile->get("TPMOV"));
newrec.put("STAMPATO", oldfile->get("STBOLLATO"));
}
break;
case 143:
{
TString8 codes;
codes.format("%04d",get_codesc(oldfile->get_date("DTINES")));
newrec.put("CODES", codes);
}
break;
}
// scrivo il record sul nuovo file
int errore = newrec.write(*newfile);
}
delete pi;
delete newfile;
delete oldfile;
}
else
error_box("Errore in compattamento dati.\nFile %d : %d", nflogicnum,err);
return 0;
}
int TConversione_cespiti::conv_tab(const TFilename& ofname, const char* tab)
{
long oldditta = -1;
long ditta;
TExternisamfile* oldfile = new TExternisamfile(ofname, FALSE, FALSE);
const bool tabella_comune = (tab[0] == '%');
TTable* newtab = new TTable(tab);
for (newtab->first(); !newtab->eof(); newtab->next())
newtab->remove();
delete newtab;
int err;
if (tabella_comune)
{
TSystemisamfile f(LF_TABCOM);
err = f.pack();
}
else
{
TSystemisamfile f(LF_TAB);
err = f.pack();
}
if (err == NOERR)
{
TTable* newfile = new TTable(tab);
TConfig config("ce0900.ini", tab);
TAssoc_array& fieldlist = config.list_variables();
TString16 campoditta = (TString&) config.get(CAMPODITTA);
TString fieldname, fieldvalue;
TRectype oldrec = oldfile->curr();
TRectype newrec = newfile->curr();
TProgind *pi;
TString80 message;
message.format("Conversione tabella %s", (const char*) ofname);
pi = new TProgind(oldfile->eod(),message, FALSE, TRUE, 10);
pi->setstatus(1);
for (int err = oldfile->first(); err == NOERR; err = oldfile->next())
{
pi->addstatus(1);
if (tabella_comune)
ditta = -1;
else
ditta = oldfile->get_long(campoditta);
// mi posiziono sulla ditta indicata
// i record sono ordinati per ditta!
if (oldditta != ditta)
{
oldditta = ditta;
if (daconvertire(ditta))
set_firm(ditta);
else
{
TString256 s;
s.format("La ditta %ld indicata nel file %s non é stata selezionata per la conversione", ditta, (const char*) ofname);
write_log(s);
continue;
}
}
// creo nuovo record
newrec.zero();
// setto i campi indicati
FOR_EACH_ASSOC_STRING(fieldlist, obj, key, str)
{
fieldname = key;
fieldvalue = str;
if ((fieldname != CAMPODITTA) && (fieldvalue[0]!='!') && (fieldvalue[0]!='?'))
newrec.put(key, oldfile->get(str));
else
{
if (fieldvalue[0] == '?')
newrec.put(key,fieldvalue.sub(1));
else if (fieldvalue == "!_ESERCIZIO2")
{
TString80 codtab, tmp;
codtab.format("%04d",get_codesc(oldfile->get_date("CBDTI")));
tmp = oldfile->get("CBCGR");
tmp.right_just(2,'0');
codtab << tmp;
tmp = oldfile->get("CBCSP");
codtab << tmp;
newrec.put(key, codtab);
}
else if (fieldvalue == "!_ESERCIZIO")
{
TString80 codtab;
codtab.format("%04d",get_codesc(oldfile->get_date("CADTI")));
newrec.put(key, codtab);
}
else if (fieldvalue == "!_CODIMP")
{
TString80 codtab;
codtab.format("%10d",oldfile->get_long("CODIMP"));
codtab.right_just(10,'0');
newrec.put(key, codtab);
}
else if (fieldvalue == "!_CODLOC")
{
TString80 codtab;
codtab.format("%10d",oldfile->get_long("CODLOC"));
codtab.right_just(10,'0');
newrec.put(key, codtab);
}
else if (fieldvalue == "!_CAT1")
{
TString16 codtab;
const int gruppo = oldfile->get_int("TACGR");
const TString16 specie(oldfile->get("TACSP"));
codtab.format("%02d%s", gruppo,(const char*) specie);
newrec.put(key, codtab);
}
else if (fieldvalue == "!_CAC1")
{
TString16 codtab;
const int gruppo = oldfile->get_int("G0CGR");
const TString16 specie(oldfile->get("TACSP"));
const int categoria(oldfile->get_int("G0CCT"));
if (gruppo == 0)
codtab.format(" %02d",categoria);
else
codtab.format("%02d%-4s%02d", gruppo,(const char*) specie, categoria);
newrec.put(key, codtab);
}
else if (fieldvalue == "!_CAC2")
{
TString80 codtab;
int cod = oldfile->get_int("G0TCS");
newrec.put(key, cod - 1);
}
else if (fieldvalue == "!_CLM1")
{
TString80 codtab;
TDate data = oldfile->get_date("DTVALIM");
codtab.format("%04d%2d%02d",data.year(),data.month(),data.day());
newrec.put(key, codtab);
}
else if (fieldvalue == "!_CGR1")
{
TString80 codtab;
codtab.format("%02d",oldfile->get_int("G0CGR"));
newrec.put(key, codtab);
}
else if (fieldvalue == "!_TMC1")
{
TString80 cod = "";
cod << conv_imptmc(oldfile->get_int("IMP01"));
cod << " ";
cod << conv_imptmc(oldfile->get_int("IMP03"));
cod << conv_imptmc(oldfile->get_int("IMP04"));
cod << conv_imptmc(oldfile->get_int("IMP05"));
cod << conv_imptmc(oldfile->get_int("IMP06"));
cod << conv_imptmc(oldfile->get_int("IMP07"));
cod << conv_imptmc(oldfile->get_int("IMP08"));
cod << conv_imptmc(oldfile->get_int("IMP09"));
cod << conv_imptmc(oldfile->get_int("IMP10"));
cod << conv_imptmc(oldfile->get_int("IMP11"));
cod << conv_imptmc(oldfile->get_int("IMP12"));
cod << conv_imptmc(oldfile->get_int("IMP13"));
newrec.put(key, cod);
}
else if (fieldvalue == "!_TMC2")
{
int num = oldfile->get_int("M0TTBL");
TString16 cod;
switch (num)
{
case 1:
cod = "I";
break;
case 2:
cod = "E";
break;
case 3:
cod = "P";
break;
case 4:
cod = "R";
break;
case 5:
cod = " ";
break;
default:
cod = " ";
}
newrec.put(key, cod);
}
else if (fieldvalue == "!_TMC3")
{
TString16 cod;
int num = oldfile->get_int("M0SEGN");
switch (num)
{
case 1:
cod = "=";
break;
case 2:
cod = "+";
break;
case 3:
cod = "-";
break;
default:
cod = " ";
}
newrec.put(key, cod);
}
else if (fieldvalue == "!_CCE1")
{
TString16 cod;
int num = oldfile->get_int("CATAR");
switch (num)
{
case 1:
cod = "+";
break;
case 2:
cod = "-";
break;
case 3:
cod = "/";
break;
default:
cod = " ";
}
newrec.put(key, cod);
}
}
}
// scrivo il record sul nuovo file
int errore = newrec.write(*newfile);
}
delete pi;
delete newfile;
}
delete oldfile;
return 0;
}
int TConversione_cespiti::conv_inifile(const TFilename& ofname, const char* ofpar, int nflogicnum)
{
long oldditta = -1;
long ditta;
TDir d;
d.get(nflogicnum);
d.eod() = 0L;
d.put(nflogicnum);
TSystemisamfile f(nflogicnum);
int err = f.pack();
if (err == NOERR)
{
TExternisamfile* oldfile = new TExternisamfile(ofname, FALSE, FALSE);
TLocalisamfile* newfile = new TLocalisamfile(nflogicnum);
TConfig config("ce0900.ini", (const char*) ofpar);
TAssoc_array& fieldlist = config.list_variables();
TString& campoditta = (TString&) config.get(CAMPODITTA);
TString fieldname, fieldvalue;
TRectype oldrec = oldfile->curr();
TRectype newrec = newfile->curr();
TProgind *pi;
TString80 message;
message.format("Conversione tabella %s", (const char*) ofname);
pi = new TProgind(oldfile->eod(),message, FALSE, TRUE, 10);
pi->setstatus(1);
for (int err = oldfile->first(); err == NOERR; err = oldfile->next())
{
pi->addstatus(1);
// mi posiziono sulla ditta indicata
ditta = oldfile->get_long(campoditta);
// i record sono ordinati per ditta!
if (oldditta != ditta)
{
oldditta = ditta;
if (daconvertire(ditta))
set_firm(ditta);
else
{
TString256 s;
s.format("La ditta %ld indicata nel file %s non é stata selezionata per la conversione", ditta, (const char*) ofname);
write_log(s);
continue;
}
}
// creo nuovo record
newrec.zero();
// setto i campi indicati
FOR_EACH_ASSOC_STRING(fieldlist, obj, key, str)
{
fieldname = key;
fieldvalue = str;
if ((fieldname != CAMPODITTA) && (fieldvalue[0]!='!'))
newrec.put(key, oldfile->get(str));
else
{
if (fieldvalue.mid(0,4) == "!_GR")
{
TString80 tmp;
tmp = oldfile->get(fieldvalue.mid(5));
newrec.put(key,atoi(tmp.mid(0,3)));
}
else if (fieldvalue.mid(0,4) == "!_CO")
{
TString80 tmp;
tmp = oldfile->get(fieldvalue.mid(5));
newrec.put(key,atoi(tmp.mid(3,3)));
}
else if (fieldvalue.sub(0,4) == "!_SO")
{
TString80 tmp;
tmp = oldfile->get(fieldvalue.mid(5));
newrec.put(key,atol(tmp.mid(6,6)));
}
}
}
// scrivo il record sul nuovo file
int errore = newrec.write(*newfile);
}
delete pi;
delete newfile;
delete oldfile;
}
else
error_box("Errore in compattamento dati.\nFile %d : %d", nflogicnum,err);
return 0;
}
int TConversione_cespiti::conv_par(const TFilename& ofname, const char* ofpar, int which_config)
{
long oldditta = -1;
long ditta;
TExternisamfile* oldfile = new TExternisamfile(ofname, FALSE, FALSE);
TConfig newconfig(which_config, "ce");
TConfig config("ce0900.ini", (const char*) ofpar);
TAssoc_array& fieldlist = config.list_variables();
TString& campoditta = (TString&) config.get(CAMPODITTA);
TString fieldname, fieldvalue;
TRectype oldrec = oldfile->curr();
TProgind *pi;
TString80 message;
message.format("Conversione tabella %s", (const char*) ofname);
pi = new TProgind(oldfile->eod(),message, FALSE, TRUE, 10);
pi->setstatus(1);
for (int err = oldfile->first(); err == NOERR; err = oldfile->next())
{
pi->addstatus(1);
if (campoditta.not_empty())
{
// mi posiziono sulla ditta indicata
ditta = oldfile->get_long(campoditta);
// i record sono ordinati per ditta!
if (oldditta != ditta)
{
oldditta = ditta;
if (daconvertire(ditta))
{
set_firm(ditta);
newconfig.set_paragraph("cg");
newconfig = TConfig(which_config, "ce");
}
else
{
TString256 s;
s.format("La ditta %ld indicata nel file %s non é stata selezionata per la conversione", ditta, (const char*) ofname);
write_log(s);
continue;
}
}
}
// setto i campi indicati
FOR_EACH_ASSOC_STRING(fieldlist, obj, key, str)
{
fieldname = key;
fieldvalue = str;
if ((fieldname != CAMPODITTA) && (fieldvalue[0]!='!'))
newconfig.set(key, oldfile->get(str));
else
{
if (fieldvalue.mid(0,4) == "!_GR")
{
TString80 tmp;
tmp = oldfile->get(fieldvalue.mid(5));
newconfig.set(key,atoi(tmp.mid(0,3)));
}
else if (fieldvalue.mid(0,4) == "!_CO")
{
TString80 tmp;
tmp = oldfile->get(fieldvalue.mid(5));
newconfig.set(key,atoi(tmp.mid(3,3)));
}
else if (fieldvalue.sub(0,4) == "!_SO")
{
TString80 tmp;
tmp = oldfile->get(fieldvalue.mid(5));
newconfig.set(key,atol(tmp.mid(6,6)));
}
else if (fieldvalue.sub(0,4) == "!_ES")
newconfig.set(key,get_codesc(oldfile->get_date(fieldvalue.mid(5)),FALSE));
else if (fieldvalue.sub(0,4) == "!_AN")
{
TString80 tmp;
tmp = oldfile->get(fieldvalue.mid(5));
newconfig.set(key,tmp.mid(6));
}
}
}
// verificare se occorre registrare (di solito si cambia paragrafo)
}
delete pi;
delete oldfile;
return 0;
}
int TConversione_cespiti::get_codesc(const TDate& date, const bool fatal)
{
TEsercizi_contabili esercizi;
int esc = esercizi.date2esc(date);
if (esc == 0)
{
TString80 s;
s.format("Non esiste il codice esercizio con data iniziale %s", (const char*) date.string());
write_log(s);
if (fatal)
fatal_box(s);
}
return esc;
}
const char TConversione_cespiti::conv_imptmc(int cod)
{
switch (cod)
{
case 1:
return 'S';
break;
case 2:
return 'N';
break;
case 3:
return 'O';
break;
default:
return ' ';
}
return ' ';
}
//funzione che ritorna il nome del file dei dati da resettare con la zap_file
HIDDEN const TString& build_name(int logicnum)
{
TDir d; d.get(logicnum, _nolock, _nordir, _sysdirop);
static TFilename _filename;
_filename = d.filename();
return _filename;
}
//funzione per resettare i files e gli indici
int TConversione_cespiti::zap_file(int lf) const
{
TFilename name = build_name(lf);
if (name[0] == '%') name.ltrim(1);
TExternisamfile f(name);
return f.zap();
}
int ce0900(int argc, char* argv[])
{
TConversione_cespiti a ;
a.run(argc, argv, "Conversione cespiti");
return 0;
}

189
ce/ce0900.ini Executable file
View File

@ -0,0 +1,189 @@
[CCB]
B0 = CBLEA
B1 = CBBOL
B2 = CACHE
B3 = CBMOV
D0 = DTCALSP
I0 = ESART14
R0 = SPMAN5S
R1 = SPMAN25S
R2 = SPMAN5E
R3 = SPMAN25E
CAMPODITTA = CBCDD
CODTAB = !_ESERCIZIO2
COD = ?CCB
[CCE]
B0 = CAPRO
B1 = CAESC
B2 = CAPRR
B3 = CAAMV
B4 = CARMP
B5 = CASAI
COD = ?CCE
CODTAB = !_ESERCIZIO
CAMPODITTA = CACDD
D0 = CEDTTR
I0 = CATPA
I1 = CATPR
B6 = ESART14
I3 = DURES
I4 = DURANNO
R0 = CEA01
R1 = CEA02
R2 = CEA03
R3 = CEA04
R4 = CEA05
R5 = CEA06
R6 = CEA07
R7 = CEA08
S5 = COEFFES
S6 = !_CCE1
S7 = CETPTR
[CIM]
COD = ?CIM
CAMPODITTA = CODDITTA
CODTAB = !_CODIMP
S0 = DESCIMP
S1 = !_CODLOC
[LOC]
COD = ?LOC
CAMPODITTA = CODDITTA
CODTAB = !_CODLOC
I0 = CODULC
S0 = STABILIM
S1 = REPARTO
S2 = UFFICIO
S3 = PERRIF
[COLL01]
CAMPODITTA= CGCDIT
CODGRUPPO = CGCDGR
CODSPECIE = CGCDSP
TIPO = CGTIPO
IDCESPITE = CGCESP
CODCAT = CGCDCT
COMPL = CGCOMP
TIPOTRAS = CGTRAS
CODCC = CGCCCE
GRUPPO = !_GR,CGRCES
CONTO = !_CO,CGRCES
SOTTOC = !_SO,CGRCES
GRUPPOQNO = !_GR,CGQNOR
CONTOQNO = !_CO,CGQNOR
SOTTOCQNO = !_SO,CGQNOR
GRUPPOQAN = !_GR,CGQANT
CONTOQAN = !_CO,CGQANT
SOTTOCQAN = !_SO,CGQANT
GRUPPOQAC = !_GR,CGQACC
CONTOQAC = !_CO,CGQACC
SOTTOCQAC = !_SO,CGQACC
GRUPPOFN = !_GR,CGFNOR
CONTOFN = !_CO,CGFNOR
SOTTOCFN = !_SO,CGFNOR
GRUPPOFA = !_GR,CGFANT
CONTOFA = !_CO,CGFANT
SOTTOCFA = !_SO,CGFANT
GRUPPOACC = !_GR,CGFACC
CONTOACC = !_CO,CGFACC
SOTTOCACC = !_SO,CGFACC
TRASF = CGMOVI
[%CAT]
B0 = TAANN
COD = ?CAT
CODTAB = !_CAT1
FPC = TAPRO
S0 = TADCT
[%CAC]
B0 = G0NAM
B1 = G0DEA
B2 = G0FLE
B3 = G0FLN
COD = ?CAC
CODTAB = !_CAC1
D0 = G0DAL
D1 = G0SCA
FPC = G0PRO
I0 = !_CAC2
I1 = G0ANI
I2 = G0VNP
I3 = G0ANP
R10 = G0PIN
R11 = G0PFS
R12 = G0PFI
R13 = G0PIM
R14 = G0MPP
R15 = G0XPP
S0 = G0DCT
[%CGR]
B0 = G0ANN
COD = ?CGR
CODTAB = !_CGR1
FPC = G0PRO
S0 = G0DCT
[%TMC]
B0 = CLS01
B1 = CLS02
B2 = CLS03
B3 = M0NWCS
B4 = M0AMMO
B5 = M0PLMN
COD = ?TMC
CODTAB = M0CDMV
I0 = P0TPM
S0 = M0DESC
S5 = !_TMC1
S6 = !_TMC2
S7 = !_TMC3
S8 = M0RETT
[%CLM]
COD = ?CLM
CODTAB = !_CLM1
R0 = LIMAUT1
R1 = LIMAUT2
R2 = LIMMOTO
R3 = LIMCICL
[DITC01]
CAMPODITTA=COCDDT
COMVCO=COMVCO
COPLMN=COPLMN
GRCOTELI=!_GR,COTELI
COCOTELI=!_CO,COTELI
SOCOTELI=!_SO,COTELI
GRCOTDIQ=!_GR,COTDIQ
COCOTDIQ=!_CO,COTDIQ
SOCOTDIQ=!_SO,COTDIQ
GRCOTDIF=!_GR,COTDIF
COCOTDIF=!_CO,COTDIF
SOCOTDIF=!_SO,COTDIF
GRCOTPLU=!_GR,COTPLU
COCOTPLU=!_CO,COTPLU
SOCOTPLU=!_SO,COTPLU
GRCOTMIN=!_GR,COTMIN
COCOTMIN=!_CO,COTMIN
SOCOTMIN=!_SO,COTMIN
GRCOTVEN=!_GR,COTVEN
COCOTVEN=!_CO,COTVEN
SOCOTVEN=!_SO,COTVEN
COAUEL=COAUEL
COAUDI=COAUDI
COAUQU=COAUQU
COAUPL=COAUPL
COAUMI=COAUMI
COR5PM=COR5PM
[DITCA]
CAMPODITTA=CACDD
CADTR=CADTR
CATSU=!_AN,CATSU
CODESCORR=!_ES,CADTI
CACSP=CACSP
CAULP=CAULP

3
ce/ce0900a.h Executable file
View File

@ -0,0 +1,3 @@
#define F_SCELTADITTE 101
#define F_DITTESELEZ 102
#define F_MINISTERIALI 103

52
ce/ce0900a.uml Executable file
View File

@ -0,0 +1,52 @@
#include "ce0900a.h"
PAGE "Conversione cespiti" -1 -1 78 14
GROUPBOX DLG_NULL 76 6
BEGIN
PROMPT 1 0 ""
END
TEXT DLG_NULL
BEGIN
PROMPT 31 1 "@bATTENZIONE"
END
TEXT DLG_NULL
BEGIN
PROMPT 6 3 "@bLa conversione sovrascrivera' tutti gli archivi dei cespiti."
END
TEXT DLG_NULL
BEGIN
PROMPT 18 4 "@bSiate certi di voler proseguire."
END
BUTTON F_SCELTADITTE 30 2
BEGIN
PROMPT 6 7 "Scelta ditte da convertire"
END
NUMBER F_DITTESELEZ 3
BEGIN
PROMPT 45 8 "Ditte selezionate "
FLAG "D"
END
BOOLEAN F_MINISTERIALI
BEGIN
PROMPT 6 10 "Carica le tabelle ministeriali"
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK

18
ce/ce2.cpp Executable file
View File

@ -0,0 +1,18 @@
#include <xvt.h>
#include "ce2.h"
int main(int argc,char** argv)
{
const int n = (argc > 1) ? (argv[1][1]-'0') : 0;
switch(n)
{
case 1:
break;
default:
ce2100(argc, argv); break;
}
exit(0);
return 0;
}

2
ce/ce2.h Executable file
View File

@ -0,0 +1,2 @@
int ce2100(int argc, char* argv[]);

2
ce/ce2.url Executable file
View File

@ -0,0 +1,2 @@
#include <default.url>
#include <mainmenu.url>

156
ce/ce2100.cpp Executable file
View File

@ -0,0 +1,156 @@
#include <applicat.h>
#include <automask.h>
#include <config.h>
#include <progind.h>
#include <relation.h>
#include "ce2100a.h"
#include "ce2101.h"
#include "celib.h"
#include "cespi.h"
class TCalcamm_mask : public TAutomask
{
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
void recalc_spese();
TCalcamm_mask() : TAutomask("ce2100a") { }
};
void TCalcamm_mask::recalc_spese()
{
TCurrency r0; get_currency(F_SPMS_MATGEN, r0);
TCurrency r1; get_currency(F_SPMS_AUTOTRAS, r1);
TCurrency r2; get_currency(F_MSPD_MATGEN, r2);
TCurrency r3; get_currency(F_MSPD_AUTOTRAS, r3);
TCurrency r4 = r0 > r2 ? r0-r2 : ZERO;
TCurrency r5 = r1 > r3 ? r1-r3 : ZERO;
set(F_SPME_MATGEN, r4);
set(F_SPME_AUTOTRAS, r5);
}
bool TCalcamm_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F_ESERCIZIO:
case F_SPMS_MATGEN:
case F_SPMS_AUTOTRAS:
if (e == fe_modify)
recalc_spese();
break;
default: break;
}
return TRUE;
}
class TCalcamm : public TSkeleton_application
{
TCalcamm_mask* _mask;
protected:
virtual void main_loop();
virtual bool create();
virtual bool destroy();
public:
bool calcola_ammortamenti();
};
bool TCalcamm::calcola_ammortamenti()
{
const TString& esercizio = _mask->get(F_ESERCIZIO);
const TString& gruppo = _mask->get(F_GRUPPO);
const TString& specie = _mask->get(F_SPECIE);
const TDate data_limite = _mask->get(F_FINE_ES);
TRectype filter(LF_CESPI);
filter.put(CESPI_CODCGRA, gruppo);
if (!specie.blank())
filter.put(CESPI_CODSPA, specie);
TRelation ccb("CCB");
TRectype& ccq = ccb.curr();
TString16 key;
key << esercizio << gruppo << specie;
ccq.put("CODTAB", key);
if (ccb.read() == NOERR)
{
// Azzera monte spese di manutenzione
ccq.zero("R2");
ccq.zero("R3");
ccq.put("D0", TDate(TODAY));
ccb.rewrite();
}
TRelation cespiti(LF_CESPI);
TCursor cur(&cespiti, "", 2, &filter, &filter);
const long items = cur.items();
cur.freeze();
TProgind pi(items, "Calcolo ammortamenti...", TRUE, TRUE);
for (cur = 0L; cur.pos() < items; ++cur)
{
pi.addstatus(1);
if (pi.iscancelled())
break;
TCespite cespite(cur.curr());
for (int tipo_sit = 1; tipo_sit <= 3; tipo_sit++)
cespite.calc_amm(tipo_sit, TRUE, data_limite);
}
// Aggiorna maschera
ccq.put("CODTAB", key);
if (ccb.read() == NOERR)
_mask->autoload(ccb);
return TRUE;
}
bool TCalcamm::create()
{
open_files(LF_TABCOM, LF_TAB, LF_CESPI, LF_AMMCE, LF_AMMMV, LF_SALCE, LF_MOVCE, 0);
_mask = new TCalcamm_mask;
return TSkeleton_application::create();
}
bool TCalcamm::destroy()
{
delete _mask;
return TRUE;
}
void TCalcamm::main_loop()
{
KEY k = K_ENTER;
while (k == K_ENTER)
{
TDitta_cespiti& dc = ditta_cespiti();
dc.init_mask(*_mask);
_mask->field(F_SPECIE).check(RUNNING_CHECK);
_mask->recalc_spese();
k = _mask->run();
if (k == K_ENTER)
{
const int ese = _mask->get_int(F_ESERCIZIO);
const TString& gru = _mask->get(F_GRUPPO);
const TString& spe = _mask->get(F_SPECIE);
dc.set_attivita(ese, gru, spe);
calcola_ammortamenti();
}
}
}
int ce2100(int argc, char* argv[])
{
TCalcamm a;
a.run(argc, argv, "Calcolo ammortamenti");
return 0;
}

15
ce/ce2100a.h Executable file
View File

@ -0,0 +1,15 @@
#define F_DITTA 101
#define F_RAGSOC 102
#define F_ESERCIZIO 103
#define F_INIZIO_ES 104
#define F_FINE_ES 105
#define F_GRUPPO 106
#define F_SPECIE 107
#define F_DESC_GRSP 108
#define F_DATA_CALC 109
#define F_SPMS_MATGEN 110
#define F_SPMS_AUTOTRAS 111
#define F_MSPD_MATGEN 112
#define F_MSPD_AUTOTRAS 113
#define F_SPME_MATGEN 114
#define F_SPME_AUTOTRAS 115

169
ce/ce2100a.uml Executable file
View File

@ -0,0 +1,169 @@
#include "ce2100a.h"
TOOLBAR "Toolbar" 0 -3 0 3
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -11 ""
PICTURE BMP_ELABORA
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -11 ""
END
ENDPAGE
PAGE "Calcolo ammortamenti" -1 -1 78 18
GROUPBOX DLG_NULL 78 6
BEGIN
PROMPT 0 1 "@bParametri ditta"
END
NUMBER F_DITTA 5
BEGIN
PROMPT 1 2 "Ditta "
FLAGS "DF"
END
STRING F_RAGSOC 50
BEGIN
PROMPT 26 2 ""
USE LF_NDITTE
INPUT CODDITTA F_DITTA
OUTPUT F_RAGSOC RAGSOC
CHECKTYPE NORMAL
FLAGS "D"
END
NUMBER F_ESERCIZIO 4
BEGIN
PROMPT 1 3 "Esercizio "
FLAGS "AZ"
USE ESC
INPUT CODTAB F_ESERCIZIO
DISPLAY "Codice esercizio" CODTAB
DISPLAY "Inizio esercizio" D0
DISPLAY "Fine esercizio" D1
OUTPUT F_ESERCIZIO CODTAB
OUTPUT F_INIZIO_ES D0
OUTPUT F_FINE_ES D1
CHECKTYPE REQUIRED
FIELD CODTAB[1,4]
END
DATE F_INIZIO_ES
BEGIN
PROMPT 26 3 "Inizio "
FLAGS "D"
END
DATE F_FINE_ES
BEGIN
PROMPT 50 3 "Fine "
FLAGS "D"
END
NUMBER F_GRUPPO 2
BEGIN
PROMPT 1 4 "Gruppo "
FLAGS "Z"
FIELD CODTAB[5,6]
END
STRING F_SPECIE 4
BEGIN
PROMPT 16 4 "Specie "
FLAGS "_"
USE CCB
JOIN %CAT ALIAS 400 INTO CODTAB=CODTAB[5,10]
INPUT CODTAB[1,4] F_ESERCIZIO SELECT
INPUT CODTAB[5,6] F_GRUPPO
INPUT CODTAB[7,10] F_SPECIE
DISPLAY "Gruppo" CODTAB[5,6]
DISPLAY "Specie" CODTAB[7,10]
DISPLAY "Descrizione@50" 400@->S0
OUTPUT F_GRUPPO CODTAB[5,6]
OUTPUT F_SPECIE CODTAB[7,10]
OUTPUT F_DESC_GRSP 400@->S0
OUTPUT F_DATA_CALC D0
OUTPUT F_SPMS_MATGEN R0
OUTPUT F_SPMS_AUTOTRAS R1
OUTPUT F_MSPD_MATGEN R2
OUTPUT F_MSPD_AUTOTRAS R3
CHECKTYPE REQUIRED
FIELD CODTAB[7,10]
END
STRING F_DESC_GRSP 60 45
BEGIN
PROMPT 31 4 ""
FLAGS "D"
END
DATA F_DATA_CALC
BEGIN
PROMPT 1 5 "Data ultimo calcolo ammortamento "
FLAGS "D"
FIELD D0
END
GROUPBOX DLG_NULL 78 4
BEGIN
PROMPT 0 7 "@bSpese di manutenzione sostenute"
END
CURRENCY F_SPMS_MATGEN 18
BEGIN
PROMPT 1 8 "Per beni materiali generici (deduz. al 5%) "
FIELD R0
END
CURRENCY F_SPMS_AUTOTRAS 18
BEGIN
PROMPT 1 9 "Per autotrasporti c/terzi (deduz. al 25%) "
FIELD R1
END
GROUPBOX DLG_NULL 78 4
BEGIN
PROMPT 0 11 "@bMonte spese deducibili"
END
CURRENCY F_MSPD_MATGEN 18
BEGIN
PROMPT 1 12 "Per beni materiali generici (deduz. al 5%) "
FLAGS "D"
FIELD R2
END
CURRENCY F_MSPD_AUTOTRAS 18
BEGIN
PROMPT 1 13 "Per autotrasporti c/terzi (deduz. al 25%) "
FLAGS "D"
FIELD R3
END
GROUPBOX DLG_NULL 78 4
BEGIN
PROMPT 0 15 "@bSpese di manutenzione eccedenti"
FLAGS "D"
END
CURRENCY F_SPME_MATGEN 18
BEGIN
PROMPT 1 16 "Per beni materiali generici (deduz. al 5%) "
FLAGS "D"
END
CURRENCY F_SPME_AUTOTRAS 18
BEGIN
PROMPT 1 17 "Per autotrasporti c/terzi (deduz. al 25%) "
FLAGS "D"
END
ENDPAGE
ENDMASK

1521
ce/ce2101.cpp Executable file

File diff suppressed because it is too large Load Diff

71
ce/ce2101.h Executable file
View File

@ -0,0 +1,71 @@
#ifndef __CE2101_H
#define __CE2101_H
#ifndef __RELATION_H
#include <relation.h>
#endif
enum TTipo_cespite { tc_materiale, tc_immateriale, tc_pluriennale };
class TCespite : public TRectype
{
TRectype _salini, _salpro;
TRectype _ammini, _ammpro;
protected:
real un_milione() const;
void fill_sal_key(TRectype& ammce, int esercizio, int tpsal) const;
void read_sal(int esercizio);
void save_sal() const;
void fill_amm_key(TRectype& ammce, int esercizio, int tpsal, int tpamm) const;
void read_amm(int esercizio, int tipo);
void save_amm() const;
const TRectype& categoria() const;
void set_msg05(const char* msg);
bool valido(int tipo_sit);
real get_limit() const;
void prepara_saldi(int tipo_sit, bool is_valid);
real val_amm(int tiposit) const;
real res_amm(int tiposit) const;
real mov_val_amm(const TRectype& tmv) const;
real mov_res_amm(const TRectype& tmv, const TRectype& tmvam) const;
real calcola_spese_manutenzione(const real& valamm);
void rip_jolly(TRelation& rel, TRectype& tmv, TRectype& tmvam, const real& num, const real& den);
void rip_elem(TRelation& rel, TRectype& tmv, TRectype& tmvam);
void rip_costo(TRelation& rel, TRectype& tmv, TRectype& tmvam);
void calc_perc(TRelation& rel, const TRectype& tmv, const TRectype& tmvam, int tipo_sit);
void calc_anni(TRectype& ammmv, const TRectype& tmv, const TRectype& tmvam);
void amm_mov_ven(TRelation& rel, const TRectype& tmv, const TRectype& tmvam, int tipo_sit);
void elabora_mov_neg(TRelation& rel, TRectype& tmv, TRectype& tmvam, int tipo_sit, bool is_valid);
real calc_quota(const real& valamm, const real& perric, const real& residuo,
real& pereff, TRelation* mov = NULL);
real calc_quote_perse(const real& valamm, const real& peric, const real& residuo,
const real& quotamm, bool amm_rit, bool mov_vend, const TDate& dtmov);
void agg_quota(int tipo_sit, const real& valamm, TRectype& rec, const char* field, bool calcq);
void incr_field(TRectype& dst, const char* fdst, const TRectype& src, const char* fsrc, char segno) const;
void applica_rettifiche(TRectype& tmv, TRectype& tmvam, int tipo_sit);
void aggiorna_salpro(const TRectype& tmv, const TRectype& tmvam, char segno);
void scansione_movimenti(int tipo_sit, const TDate& data_limite, bool is_valid);
void calc_amm_residui(int tipo_sit, bool is_valid);
void agg_spe_man(int tipo_sit, bool is_valid);
public:
bool calc_amm(int tipo_sit, bool calc_spe_man, const TDate& data_limite);
TTipo_cespite tipo() const; // 1 = Materiale, 2 = Immateriale, 3 = Pluriennale
int read(const char* id);
TCespite();
TCespite(const char* id);
TCespite(const TRectype& rec);
virtual ~TCespite() { }
};
#endif

18
ce/ce3.cpp Executable file
View File

@ -0,0 +1,18 @@
#include <xvt.h>
#include "ce3.h"
int main(int argc,char** argv)
{
const int r = (argc > 1) ? (argv[1][1]-'0') : 0;
switch (r)
{
case 1:
ce3200(argc,argv) ; break;
case 2:
ce3300(argc,argv) ; break;
default:
ce3100(argc,argv) ; break;
}
return 0;
}

9
ce/ce3.h Executable file
View File

@ -0,0 +1,9 @@
#ifndef __CE3_H
#define __CE3_H
int ce3100(int argc, char* argv[]);
int ce3200(int argc, char* argv[]);
int ce3300(int argc, char* argv[]);
#endif // __CE3_H

3
ce/ce3.url Executable file
View File

@ -0,0 +1,3 @@
#include <default.url>
#include <mainmenu.url>

542
ce/ce3100.cpp Executable file
View File

@ -0,0 +1,542 @@
#include <applicat.h>
#include <automask.h>
#include <form.h>
#include <printer.h>
#include <recarray.h>
#include <utility.h>
#include "ce3.h"
#include "ammce.h"
#include "ammmv.h"
#include "cespi.h"
#include "movam.h"
#include "movce.h"
#include "salce.h"
#include "ce3100a.h"
#include "ce3100.h"
#include "celib.h"
#include "..\cg\cglib01.h"
class TForm_registroce : public TForm_cespiti
{
TRelation* _newrelation;
TCursor* _newcursor;
public:
virtual bool validate(TForm_item& fld, TToken_string& val);
TForm_registroce(const char *name);
virtual ~TForm_registroce();
void set_testata() { set_header(1, TRUE); };
void set_piede() { set_footer(0,FALSE); set_footer(0, TRUE);};
void set_pagina() { set_footer(0, TRUE);};
TPrint_section& get_testata_cespite() { return section('H', odd_page); };
TPrint_section& get_testata_categoria() { return section('H', even_page); };
TPrint_section& get_piede_categoria() { return section('F', even_page); };
TPrint_section& get_piede_registro() { return section('F', odd_page); };
TPrint_section& get_saldiiniziali() { return section('H', last_page); };
TPrint_section& get_movimenti() { return section('B', first_page); };
TPrint_section& get_valorifinali() { return section('B', even_page); };
TPrint_section& get_totali() { return section('B', odd_page); };
virtual TCursor* cursor() const {return _newcursor; };
virtual TRelation* relation() const {return _newrelation; };
};
TForm_registroce::TForm_registroce(const char *name):
TForm_cespiti(name)
{
_newrelation = new TRelation(LF_CESPI);
_newrelation->add("%CAC","CODTAB[1,2]==CODCGRA|CODTAB[3,6]==CODSPA|CODTAB[7,8]==CODCAT",1,0,101);
_newrelation->add(LF_SALCE,"IDCESPITE==IDCESPITE",1,0,102);
_newrelation->add("ESC","CODTAB==CODES",1,LF_SALCE,103);
_newrelation->add(LF_AMMCE,"IDCESPITE==IDCESPITE|CODES==CODES|TPSALDO==TPSALDO",1,LF_SALCE,104);
_newrelation->add(LF_MOVCE,"IDCESPITE==IDCESPITE",2,0,105);
_newrelation->add(LF_MOVAM,"IDCESPITE==IDCESPITE|IDMOV==IDMOV",1,LF_MOVCE,106);
_newrelation->add(LF_AMMMV,"IDCESPITE==IDCESPITE|IDMOV==IDMOV",1,LF_MOVCE,107);
_newrelation->add("%TMC","CODTAB==CODMOV",1,LF_MOVCE,108);
_newcursor = new TCursor(_newrelation,"",2);
}
TForm_registroce::~TForm_registroce()
{
delete _newrelation;
delete _newcursor;
}
bool TForm_registroce::validate(TForm_item& fld, TToken_string& val)
{
return TForm_cespiti::validate(fld, val);
}
/////////////////////////////////////////////////////
// Applicazione
/////////////////////////////////////////////////////
class TRegistro_cespiti : public TSkeleton_application
{
TMask* _mask;
TForm_registroce* _form;
TDitta_cespiti* _dittace;
int _tipoamm;
bool _bollato;
TEsercizi_contabili _esc;
protected:
virtual bool create();
virtual bool destroy();
virtual void main_loop();
static bool attivita_handler(TMask_field& f, KEY k);
public:
void header_registro();
void footer_registro();
void footer_categoria();
void header_categoria(const int categoria);
void print_cespite();
void header_cespite();
void print_saldiiniziali();
void print_movimenti();
void print_valorifinali();
void aggiorna_bollato();
void stampa_movimento(TRectype& removce, TRectype& removam, TRectype& recammmv);
void stampa_sezione(TPrint_section& section);
TRegistro_cespiti() {}
virtual ~TRegistro_cespiti() {};
};
bool TRegistro_cespiti::create()
{
open_files(LF_CESPI,0);
_mask = new TMask("ce3100a");
_mask->set_handler(F_SPECIE,attivita_handler);
_dittace = new TDitta_cespiti();
_dittace->init_mask(*_mask);
_form = new TForm_registroce("ce3100a");
return TSkeleton_application::create();
}
bool TRegistro_cespiti::destroy()
{
delete _form;
delete _dittace;
delete _mask;
return TSkeleton_application::destroy();
}
bool TRegistro_cespiti::attivita_handler(TMask_field& f, KEY k)
{
TMask& m = f.mask();
if (f.to_check(k) || (k == K_TAB && !m.is_running()))
{
const int esercizio = m.get_int(F_ESERCIZIO);
const TString16 gruppo = m.get(F_GRUPPO);
const TString16 specie = m.get(F_SPECIE);
TString80 key; key.format("%4d%s%s",esercizio, (const char*) gruppo, (const char*) specie);
const TRectype& ccb = cache().get("CCB", key);
TDate dataultcalc = ccb.get_date("D0");
m.set(F_DATAULTCALC, dataultcalc);
if (ccb.get_bool("B2"))
{
if (m.is_running())
return f.error_box("Attenzione! Esercizio chiuso. \nNon é possibile stampare il registro.");
}
else
{
if (dataultcalc.empty())
{
m.set(F_CALCOLO, "X");
m.disable(F_CALCOLO);
m.set(F_TIPOREGISTRO,"B");
m.disable(F_TIPOREGISTRO);
}
if (ccb.get_bool("B1"))
{
m.set(F_TIPOREGISTRO,"B");
m.disable(F_TIPOREGISTRO);
m.disable(F_CALCOLO);
}
}
}
return TRUE;
}
void TRegistro_cespiti::main_loop()
{
while (_mask->run() == K_ENTER)
{
TRectype darec(LF_CESPI),arec(LF_CESPI);
TString filtro;
// filtro sulla attivitá e categorie
const int esercizio = _mask->get_int(F_ESERCIZIO);
const int catini = _mask->get_int(F_CATINI);
const int catfin = _mask->get_int(F_CATFIN);
darec.put(CESPI_CODCGRA, _mask->get_int(F_GRUPPO));
darec.put(CESPI_CODSPA, _mask->get(F_SPECIE));
darec.put(CESPI_CODCAT, _mask->get_int(F_CATINI));
arec.put(CESPI_CODCGRA, _mask->get_int(F_GRUPPO));
arec.put(CESPI_CODSPA, _mask->get(F_SPECIE));
arec.put(CESPI_CODCAT, _mask->get_int(F_CATFIN));
// filtro sulle date di acquisizione e alienazione
const TDate datainizio = _mask->get_date(F_DATAINIZIO);
const TDate datafine = _mask->get_date(F_DATAFINE);
filtro.format("(ANSI(%d->DTCOMP)<=\"",LF_CESPI) << datafine.string(ANSI) << "\")";
filtro << format(" && ((ANSI(%d->DTALIEN)>=\"",LF_CESPI) << datainizio.string(ANSI);
filtro << format("\") || (%d->DTALIEN==\"\"))",LF_CESPI);
// filtro su ammortamenti fiscali o civilistici
_tipoamm = _mask->get_int(F_AMMORTAMENTI);
_form->find_field('H', last_page, FR_SI_RIVGF).enable(_tipoamm==1);
_form->find_field('H', last_page, FR_SI_RIVGC).enable(_tipoamm==2);
_form->find_field('B', first_page, FR_MV_RIVGF).enable(_tipoamm==1);
_form->find_field('B', first_page, FR_MV_RIVGC).enable(_tipoamm==2);
_form->find_field('B', even_page, FR_FE_RIVGF).enable(_tipoamm==1);
_form->find_field('B', even_page, FR_FE_RIVGC).enable(_tipoamm==2);
_form->find_field('H', last_page, FR_SI_RIVGF).hide();
_form->find_field('H', last_page, FR_SI_RIVGC).hide();
_form->find_field('B', first_page, FR_MV_RIVGF).hide();
_form->find_field('B', first_page, FR_MV_RIVGC).hide();
_form->find_field('B', even_page, FR_FE_RIVGF).hide();
_form->find_field('B', even_page, FR_FE_RIVGC).hide();
// flag bollato per aggiornamenti
_bollato = (_mask->get_int(F_TIPOREGISTRO)==1);
_form->cursor()->setregion(darec,arec);
_form->cursor()->setfilter(filtro,TRUE);
long num = _form->cursor()->items();
_form->cursor()->freeze();
printer().open();
header_registro();
TRectype& reccesp = _form->cursor()->curr();
int catatt = -1;
for (*_form->cursor()=0; _form->cursor()->pos()<num; ++(*_form->cursor()))
{
if (catatt != reccesp.get_int(CESPI_CODCAT))
{
if (catatt != -1)
footer_categoria();
catatt = reccesp.get_int(CESPI_CODCAT);
header_categoria(catatt);
}
print_cespite();
}
if (catatt != -1)
{
footer_categoria();
footer_registro();
}
_form->cursor()->freeze(FALSE);
printer().close();
if (_bollato)
aggiorna_bollato();
}
return ;
}
void TRegistro_cespiti::aggiorna_bollato()
{
return;
}
void TRegistro_cespiti::header_registro()
{
_form->find_field('H', first_page, FR_CODDITTA).set(_mask->get(F_CODDITTA));
_form->find_field('H', first_page, FR_RAGSOC).set(_mask->get(F_RAGSOC));
_form->find_field('H', first_page, FR_GRUPPO).set(_mask->get(F_GRUPPO));
_form->find_field('H', first_page, FR_D_GRUPPO).set(_mask->get(F_D_GRUPPO));
_form->find_field('H', first_page, FR_SPECIE).set(_mask->get(F_SPECIE));
_form->find_field('H', first_page, FR_D_SPECIE).set(_mask->get(F_D_SPECIE));
_form->find_field('H', first_page, FR_DATAINIZIO).set(_mask->get(F_DATAINIZIO));
_form->find_field('H', first_page, FR_DATAFINE).set(_mask->get(F_DATAFINE));
TString80 key; key.format("%04d",_mask->get_int(F_ESERCIZIO));
const TRectype& cce = cache().get("CCE", key);
_form->find_field('H', first_page, FR_NUMGIORNI).set(cce.get("I3"));
long giorni = (_mask->get_date(F_DATAFINE) - _mask->get_date(F_DATAINIZIO) + 1);
key.format("%3d",giorni);
_form->find_field('H', first_page, FR_NUMGIOSOL).set(key);
_form->find_field('H', first_page, FR_LIBROCESPITI).enable(_bollato);
_form->set_testata();
_form->set_piede();
}
void TRegistro_cespiti::print_cespite()
{
// stampa i dati del cespite
const long pos = _form->cursor()->pos(); //memorizza posizione cursore
header_cespite();
print_saldiiniziali();
print_movimenti();
print_valorifinali();
*_form->cursor() = pos; //riposiziona il cursore
return;
}
void TRegistro_cespiti::header_cespite()
{
// intestazione cespite
TPrint_section& section = _form->get_testata_cespite();
section.update();
_form->set_pagina();
for (word i = 0; i < section.height(); i++)
printer().print(section.row(i));
return;
}
void TRegistro_cespiti::print_saldiiniziali()
{
// saldi iniziali cespite (da salce e ammce con tpsaldo=1(saldo iniziale) ed esercizio = esercizio selezionato)
const int esercizio = _mask->get_int(F_ESERCIZIO);
TRectype& recsalce = _form->cursor()->curr(LF_SALCE);
bool continua = _form->cursor()->is_first_match(LF_SALCE);
while (continua && (recsalce.get_int(SALCE_TPSALDO) != 1 || recsalce.get_int(SALCE_CODES) != esercizio))
continua = _form->cursor()->next_match(LF_SALCE);
if (!continua)
recsalce.zero();
TRectype& recammce = _form->cursor()->curr(LF_AMMCE);
continua = _form->cursor()->is_first_match(LF_AMMCE);
while (continua && recammce.get_int(AMMCE_TPAMM)!= _tipoamm) //l'esercizio é quello selezionato poiché é nella chiave
continua = _form->cursor()->next_match(LF_AMMCE);
if (!continua)
_form->cursor()->curr(LF_AMMCE).zero();
TPrint_section& section = _form->get_saldiiniziali();
section.update();
_form->set_pagina();
for (word i = 0; i < section.height(); i++)
printer().print(section.row(i));
return;
}
void TRegistro_cespiti::stampa_sezione(TPrint_section& section)
{
section.update();
_form->set_pagina();
word y1 = section.find_field(FR_MV_QNOR).y();
word y2 = section.find_field(FR_MV_QANT).y();
for (word i = 0; i < section.height(); i++)
{
if (i+1>=y1 && i+1<= y2)
{
TPrintrow& row = section.row(i);
TString rowstr = row.row();
if (!rowstr.blank())
printer().print(section.row(i));
}
else
printer().print(section.row(i));
}
}
void TRegistro_cespiti::stampa_movimento(TRectype& recmovce, TRectype& recmovam, TRectype& recammmv)
{
TPrint_section& section = _form->get_movimenti();
_form->cursor()->curr(LF_MOVCE) = recmovce; //
_form->cursor()->curr(LF_MOVAM) = recmovam; //copia il record del cursore che scannerizza movimenti e rettifiche nel
_form->cursor()->curr(LF_AMMMV) = recammmv; //cursore principale del form
if (recmovce.get_char(MOVCE_SEGNO)=='-')
{
section.find_field(FR_MV_SEGNO).set("-1");
// section.find_field(FR_MV_QNORMENO).enable();
// section.find_field(FR_MV_QACCMENO).enable();
// section.find_field(FR_MV_QANTMENO).enable();
// section.find_field(FR_MV_MINUSVALENZA).enable();
// section.find_field(FR_MV_PLUSVALENZA).enable();
}
else
{
section.find_field(FR_MV_SEGNO).set("1");
// section.find_field(FR_MV_QNORMENO).disable();
// section.find_field(FR_MV_QACCMENO).disable();
// section.find_field(FR_MV_QANTMENO).disable();
// section.find_field(FR_MV_MINUSVALENZA).disable();
// section.find_field(FR_MV_PLUSVALENZA).disable();
}
section.update();
_form->set_pagina();
for (word i = 0; i < section.height(); i++)
{
TPrintrow& row = section.row(i);
TString rowstr = row.row();
if (!rowstr.blank())
printer().print(row);
}
}
void TRegistro_cespiti::print_movimenti()
{
TPrint_section& totali = _form->get_totali();
// movimenti
for (bool ok=_form->cursor()->is_first_match(LF_MOVCE); ok; ok=_form->cursor()->next_match(LF_MOVCE))
{
TRectype& recmovce = _form->cursor()->curr(LF_MOVCE);
const TString16 idret = recmovce.get(MOVCE_IDRET);
if (idret.not_empty())
continue;
const TDate dtmov = recmovce.get(MOVCE_DTMOV);
const int esmov = _esc.date2esc(dtmov);
if (_mask->get_int(F_ESERCIZIO) != esmov)
continue;
for(word t = 0; t < totali.fields(); t++) //azzera i campi dei totali
totali.field(t).set("");
TRectype& recmovam = _form->cursor()->curr(LF_MOVAM);
bool continua = _form->cursor()->is_first_match(LF_MOVAM);
while (recmovam.get_int(MOVAM_TPAMM) != _tipoamm && continua)
continua = _form->cursor()->next_match(LF_MOVAM);
if (!continua) recmovam.zero();
TRectype& recammmv = _form->cursor()->curr(LF_AMMMV);
continua = _form->cursor()->is_first_match(LF_AMMMV);
while (recammmv.get_int(AMMMV_TPAMM) != _tipoamm && continua)
continua = _form->cursor()->next_match(LF_AMMMV);
if (!continua) recammmv.zero();
stampa_movimento(recmovce,recmovam,recammmv); //stampa i movimenti SENZA rettifiche
// rettifiche (é necessario utilizzare un nuovo cursore, quindi si comincia con la relazione...)
TRelation rel_rettif(LF_MOVCE);
TString expr; expr << "IDCESPITE==IDCESPITE|IDMOV==IDMOV|TPAMM==\"" << _tipoamm << '"';
rel_rettif.add(LF_MOVAM, expr);
rel_rettif.add(LF_AMMMV, expr);
const TString16 id = recmovce.get(MOVCE_IDCESPITE);
// e quindi si passa al cursore...; notare che il cursore delle rettifiche usa la chiave 2: IDCESPITE+IDMOV;
// per cui parte per selezionare le possibili rettifiche del movimento da rettificare da lui...
TRectype fromret(LF_MOVCE);
fromret.put(MOVCE_IDCESPITE, id); //IDCESPITE della chiave 2
fromret.put(MOVCE_IDMOV, recmovce.get(MOVCE_IDMOV)); //IDMOV della chiave 2
//...in poi
TRectype toret(LF_MOVCE);
toret.put(MOVCE_IDCESPITE, id);
TString filtro;
filtro << MOVCE_IDRET << "==" << recmovce.get(MOVCE_IDMOV); //confronta numericamente IDRET e IDMOV
//ed ecco il cursore!
TCursor rettcur(&rel_rettif, filtro, 2, &fromret, &toret);
const long items = rettcur.items();
if (items > 0)
{
rettcur.freeze();
for (rettcur = 0l ; rettcur.pos()<items; ++rettcur)
stampa_movimento(rettcur.curr(LF_MOVCE), rettcur.curr(LF_MOVAM), rettcur.curr(LF_AMMMV));
}
stampa_sezione(totali);
}
return;
}
void TRegistro_cespiti::print_valorifinali()
{
// valori a fine esercizio cespite (da salce e ammce con tpsaldo=2)
const int esercizio = _mask->get_int(F_ESERCIZIO);
TRectype& recsalce = _form->cursor()->curr(LF_SALCE);
const TString16 idcespite = _form->cursor()->curr().get(CESPI_IDCESPITE);
bool continua = recsalce.get(SALCE_IDCESPITE) == idcespite;
while (continua && (recsalce.get_int(SALCE_TPSALDO) !=2 || recsalce.get_int(SALCE_CODES) != esercizio))
continua = _form->cursor()->next_match(LF_SALCE);
if (!continua)
recsalce.zero();
TRectype& recammce = _form->cursor()->curr(LF_AMMCE);
continua = recammce.get(AMMCE_IDCESPITE) == idcespite;
while (recammce.get_int(AMMCE_TPAMM) != _tipoamm && continua)
continua = _form->cursor()->next_match(LF_AMMCE);
if (!continua)
recammce.zero();
TPrint_section& section = _form->get_valorifinali();
bool msg = _form->cursor()->curr(LF_AMMCE).get_bool(AMMCE_MSG01);
section.find_field(FR_FE_MSG1).enable(msg);
msg = _form->cursor()->curr(LF_AMMCE).get_bool(AMMCE_MSG02);
TString80 key; key.format("%04d",_mask->get_int(F_ESERCIZIO));
const TRectype& cce = cache().get("CCE", key);
long giorni = (_mask->get_date(F_DATAFINE) - _mask->get_date(F_DATAINIZIO) + 1);
key.format("Amm.to ragguagliato all'esercizio di %3d giorni su %3d",giorni, cce.get("I3"));
section.find_field(FR_FE_MSG2).set(key);
section.find_field(FR_FE_MSG2).enable(msg);
msg = _form->cursor()->curr(LF_AMMCE).get_bool(AMMCE_MSG03);
const int usoprom = _form->cursor()->curr().get_int(CESPI_USOPROM);
if (usoprom==2 || usoprom==4)
key="Ammortamento ridotto al 50% per bene in uso promiscuo";
else if (usoprom==3 || usoprom==5)
key="Ammortamento ridotto all'80% per bene in uso promiscuo";
section.find_field(FR_FE_MSG3).set(key);
section.find_field(FR_FE_MSG3).enable(msg);
msg = _form->cursor()->curr(LF_AMMCE).get_bool(AMMCE_MSG04);
section.find_field(FR_FE_MSG4).enable(msg);
msg = _form->cursor()->curr(LF_AMMCE).get_bool(AMMCE_MSG05);
section.find_field(FR_FE_MSG5).enable(msg);
msg = _form->cursor()->curr(LF_AMMCE).get_bool(AMMCE_MSG06);
section.find_field(FR_FE_MSG6).enable(msg);
section.update();
_form->set_pagina();
word y1 = section.find_field(FR_FE_QNOR).y();
word y2 = section.find_field(FR_FE_MSG6).y();
for (word i = 0; i < section.height(); i++)
{
if (i+1>=y1 && i+1<= y2)
{
TPrintrow& row = section.row(i);
TString256 rowstr = row.row();
if (!rowstr.blank())
printer().print(section.row(i));
}
else
printer().print(section.row(i));
}
return;
}
void TRegistro_cespiti::header_categoria(const int categoria)
{
// intestazione della categoria
TPrint_section& section = _form->get_testata_categoria();
section.update();
_form->set_pagina();
for (word i = 0; i < section.height(); i++)
printer().print(section.row(i));
return ;
}
void TRegistro_cespiti::footer_categoria()
{
// stampa il footer della categoria
TPrint_section& section = _form->get_piede_categoria();
section.update();
_form->set_pagina();
for (word i = 0; i < section.height(); i++)
printer().print(section.row(i));
return ;
}
void TRegistro_cespiti::footer_registro()
{
// stampa il footer del registro (totali generali)
TPrint_section& section = _form->get_piede_registro();
section.update();
_form->set_pagina();
for (word i = 0; i < section.height(); i++)
printer().print(section.row(i));
return ;
}
int ce3100(int argc, char* argv[])
{
TRegistro_cespiti a;
a.run(argc,argv,"Stampa registro cespiti");
return 0;
}

119
ce/ce3100.h Executable file
View File

@ -0,0 +1,119 @@
//-------------------------------------
// campi form registro cespiti (ce3100)
//-------------------------------------
#define FR_CODDITTA 1
#define FR_RAGSOC 2
#define FR_GRUPPO 3
#define FR_D_GRUPPO 4
#define FR_SPECIE 5
#define FR_D_SPECIE 6
#define FR_DATAINIZIO 7
#define FR_DATAFINE 8
#define FR_NUMGIORNI 9
#define FR_NUMGIOSOL 10
#define FR_LIBROCESPITI 11
#define FR_CAT 21
#define FR_D_CAT 22
#define FR_SI_CSTO 31
#define FR_SI_VNONAMM 32
#define FR_SI_TOTRIV 33
#define FR_SI_VALAMM 34
#define FR_SI_RIVGF 35
#define FR_SI_RIVGC 36
#define FR_MV_SEGNO 41
#define FR_MV_NUMELE 42
#define FR_MV_CSTO 43
#define FR_MV_VNONAMM 44
#define FR_MV_IMPVEN 45
#define FR_MV_RIVGF 46
#define FR_MV_RIVGC 47
#define FR_MV_TOTRIV 48
#define FR_MV_VALAMM 49
#define FR_MV_RESAMM 50
#define FR_MV_PLUSREIN 51
#define FR_MV_FONDOAMM 52
#define FR_MV_QNONAMM 53
#define FR_MV_QNOR 54
#define FR_MV_QACC 55
#define FR_MV_QANT 56
#define FR_MV_TOTFONDOAMM 57
#define FR_MV_QNOR_SEGNO 58
#define FR_MV_QACC_SEGNO 59
#define FR_MV_QANT_SEGNO 60
#define FR_MV_MINUSVALENZA 61
#define FR_MV_PLUSVALENZA 62
#define FR_MV_VALAMM_SEGNO 63
#define FR_FE_NUMELE 71
#define FR_FE_CSTO 72
#define FR_FE_VNONAMM 73
#define FR_FE_RIVGF 74
#define FR_FE_RIVGC 75
#define FR_FE_TOTRIV 76
#define FR_FE_VALAMM 77
#define FR_FE_RESAMM 78
#define FR_FE_PLUSREIN 79
#define FR_FE_FONDOAMM 80
#define FR_FE_QNONAMM 81
#define FR_FE_VSPMANU 82
#define FR_FE_PNOR 83
#define FR_FE_PACC 84
#define FR_FE_PANT 85
#define FR_FE_QNOR 86
#define FR_FE_FPRIVATO1 87
#define FR_FE_QACC 88
#define FR_FE_FPRIVATO2 89
#define FR_FE_QANT 90
#define FR_FE_FPRIVATO3 91
#define FR_FE_MSG1 92
#define FR_FE_MSG2 93
#define FR_FE_MSG3 94
#define FR_FE_MSG4 95
#define FR_FE_MSG5 96
#define FR_FE_MSG6 97
#define FR_VB_FONDOAMM 98
#define FR_VB_QNONAMM 99
#define FR_AE_NORMALE 100
#define FR_AE_ACCELERATO 101
#define FR_AE_ANTICIPATO 102
#define FR_AR_NORMALE 103
#define FR_AR_ACCELERATO 104
#define FR_AR_ANTICIPATO 105
#define FR_TC_ELEM 111
#define FR_TC_CSTO 112
#define FR_TC_VNONAMM 113
#define FR_TC_TOTRIV 114
#define FR_TC_VALAMM 115
#define FR_TC_RESAMM 116
#define FR_TC_PLUSREIN 117
#define FR_TC_FONDOAMM 118
#define FR_TC_QNONAMM 119
#define FR_TC_VSPMANU 120
#define FR_TC_AE_NORMALE 121
#define FR_TC_AE_ACCELERATO 122
#define FR_TC_AE_ANTICIPATO 123
#define FR_TC_AR_NORMALE 124
#define FR_TC_AR_ACCELERATO 125
#define FR_TC_AR_ANTICIPATO 126
#define FR_TG_ELEM 151
#define FR_TG_CSTO 152
#define FR_TG_VNONAMM 153
#define FR_TG_TOTRIV 154
#define FR_TG_VALAMM 155
#define FR_TG_RESAMM 156
#define FR_TG_PLUSREIN 157
#define FR_TG_FONDOAMM 158
#define FR_TG_QNONAMM 159
#define FR_TG_VSPMANU 160
#define FR_TG_AE_NORMALE 161
#define FR_TG_AE_ACCELERATO 162
#define FR_TG_AE_ANTICIPATO 163
#define FR_TG_AR_NORMALE 164
#define FR_TG_AR_ACCELERATO 165
#define FR_TG_AR_ANTICIPATO 166

1747
ce/ce3100a.frm Executable file

File diff suppressed because it is too large Load Diff

22
ce/ce3100a.h Executable file
View File

@ -0,0 +1,22 @@
// campi maschera ce3100a
#define F_CODDITTA 101
#define F_RAGSOC 102
#define F_ESERCIZIO 103
#define F_DATAINIZIO 104
#define F_DATAFINE 105
#define F_GRUPPO 106
#define F_SPECIE 107
#define F_D_GRUPPO 108
#define F_D_SPECIE 109
#define F_DATAULTCALC 110
#define F_CATINI 111
#define F_D_CATINI 112
#define F_CATFIN 113
#define F_D_CATFIN 114
#define F_TIPOREGISTRO 115
#define F_CODREG 116
#define F_CALCOLO 117
#define F_AMMORTAMENTI 118
#define F_TIPOSTAMPA 119

208
ce/ce3100a.uml Executable file
View File

@ -0,0 +1,208 @@
#include "ce3100a.h"
TOOLBAR "" 0 -2 0 2
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
PAGE "Stampa Registro cespiti" -1 -1 78 6
GROUPBOX DLG_NULL 77 6
BEGIN
PROMPT 1 0 ""
FLAGS "R"
END
NUMBER F_CODDITTA 5
BEGIN
PROMPT 2 1 "Ditta "
FLAGS "DF"
USE LF_NDITTE
INPUT CODDITTA F_CODDITTA
OUTPUT F_RAGSOC RAGSOC
CHECKTYPE REQUIRED
END
STRING F_RAGSOC 50
BEGIN
PROMPT 15 1 ""
FLAGS "D"
END
NUMBER F_ESERCIZIO 4
BEGIN
PROMPT 2 2 "Esercizio "
FLAGS "Z"
USE CCE
JOIN ESC ALIAS 105 INTO CODTAB==CODTAB
INPUT CODTAB F_ESERCIZIO
DISPLAY "Codice esercizio" CODTAB
DISPLAY "Data inizio" 105@->D0
DISPLAY "Data fine@10" 105@->D1
OUTPUT F_ESERCIZIO CODTAB
OUTPUT F_DATAINIZIO 105@->D0
OUTPUT F_DATAFINE 105@->D1
CHECKTYPE REQUIRED
END
DATE F_DATAINIZIO
BEGIN
PROMPT 20 2 "Data inizio "
FLAGS "D"
END
DATE F_DATAFINE
BEGIN
PROMPT 45 2 "Data fine "
FLAGS "D"
END
NUMBER F_GRUPPO 2
BEGIN
PROMPT 2 3 "Gruppo "
FLAGS "Z"
USE CCB KEY 1
JOIN %CGR ALIAS 106 INTO CODTAB==CODTAB[5,6]
INPUT CODTAB[1,4] F_ESERCIZIO SELECT
INPUT CODTAB[5,6] F_GRUPPO
INPUT CODTAB[7,10] F_SPECIE
DISPLAY "Codice" CODTAB[5,6]
DISPLAY "Descrizione@60" 106@->S0
OUTPUT F_GRUPPO CODTAB[5,6]
OUTPUT F_D_GRUPPO 106@->S0
CHECKTYPE NORMAL
END
STRING F_SPECIE 4
BEGIN
PROMPT 2 4 "Specie "
FLAGS "_"
USE CCB KEY 1
JOIN %CAT ALIAS 107 INTO CODTAB[1,2]==CODTAB[5,6] CODTAB[3,6]==CODTAB[7,10]
INPUT CODTAB[1,4] F_ESERCIZIO SELECT
INPUT CODTAB[5,6] F_GRUPPO SELECT
INPUT CODTAB[7,10] F_SPECIE
DISPLAY "Gruppo" CODTAB[5,6]
DISPLAY "Specie" CODTAB[7,10]
DISPLAY "Descrizione@60" 107@->S0
OUTPUT F_SPECIE CODTAB[7,10]
OUTPUT F_D_SPECIE 107@->S0
CHECKTYPE NORMAL
END
STRING F_D_GRUPPO 60 55
BEGIN
PROMPT 20 3 ""
FLAGS "D"
END
STRING F_D_SPECIE 60 55
BEGIN
PROMPT 20 4 ""
FLAGS "D"
END
DATE F_DATAULTCALC
BEGIN
PROMPT 2 6 "Data ultimo calcolo ammortamenti "
FLAGS "D"
END
STRING F_CATINI 2
BEGIN
PROMPT 2 7 "Da categoria "
USE %CAC SELECT ((CODTAB[1,2]==#F_GRUPPO) && (CODTAB[3,6]==#F_SPECIE)) || (CODTAB[1,6]==" ")
INPUT CODTAB[1,2] F_GRUPPO
INPUT CODTAB[3,6] F_SPECIE
INPUT CODTAB[7,8] F_CATINI
DISPLAY "Gruppo" CODTAB[1,2]
DISPLAY "Specie" CODTAB[3,6]
DISPLAY "Cat." CODTAB[7,8]
DISPLAY "Descrizione@60" S0
OUTPUT F_CATINI CODTAB[7,8]
OUTPUT F_D_CATINI S0
CHECKTYPE SEARCH
END
STRING F_D_CATINI 60 50
BEGIN
PROMPT 22 7 ""
USE %CAC SELECT ((CODTAB[1,2]==#F_GRUPPO) && (CODTAB[3,6]==#F_SPECIE)) || (CODTAB[1,6]==" ")
INPUT S0 F_D_CATINI
DISPLAY "Descrizione@50" S0
DISPLAY "Categoria" CODTAB[7,8]
DISPLAY "Gruppo" CODTAB[1,2]
DISPLAY "Specie" CODTAB[3,6]
COPY OUTPUT F_CATINI
CHECKTYPE SEARCH
END
STRING F_CATFIN 2
BEGIN
PROMPT 2 8 "A categoria "
USE %CAC SELECT ((CODTAB[1,2]==#F_GRUPPO) && (CODTAB[3,6]==#F_SPECIE)) || (CODTAB[1,6]==" ")
INPUT CODTAB[1,2] F_GRUPPO
INPUT CODTAB[3,6] F_SPECIE
INPUT CODTAB[7,8] F_CATFIN
DISPLAY "Gruppo" CODTAB[1,2]
DISPLAY "Specie" CODTAB[3,6]
DISPLAY "Cat." CODTAB[7,8]
DISPLAY "Descrizione@60" S0
OUTPUT F_CATFIN CODTAB[7,8]
OUTPUT F_D_CATFIN S0
CHECKTYPE SEARCH
END
STRING F_D_CATFIN 60 50
BEGIN
PROMPT 22 8 ""
USE %CAC SELECT ((CODTAB[1,2]==#F_GRUPPO) && (CODTAB[3,6]==#F_SPECIE)) || (CODTAB[1,6]==" ")
INPUT S0 F_D_CATFIN
DISPLAY "Descrizione@50" S0
DISPLAY "Categoria" CODTAB[7,8]
DISPLAY "Gruppo" CODTAB[1,2]
DISPLAY "Specie" CODTAB[3,6]
COPY OUTPUT F_CATFIN
CHECKTYPE SEARCH
END
RADIOBUTTON F_TIPOREGISTRO 30
BEGIN
PROMPT 2 9 "Stampa registro"
ITEM "1|di Prova"
MESSAGE CLEAR,F_CODREG|DISABLE,F_CODREG
MESSAGE ENABLE, F_AMMORTAMENTI
ITEM "2|Bollato"
MESSAGE ENABLE,F_CODREG
MESSAGE "1",F_AMMORTAMENTI|DISABLE,F_AMMORTAMENTI
FLAGS "Z"
END
STRING F_CODREG 3
BEGIN
PROMPT 35 10 "Cod.registro "
FLAGS "D"
END
BOOLEAN F_CALCOLO
BEGIN
PROMPT 2 12 "Esegui calcolo ammortamenti prima di stampare"
END
RADIOBUTTON F_AMMORTAMENTI 16
BEGIN
PROMPT 2 13 "Ammortamenti"
ITEM "1|Fiscali"
ITEM "2|Civilistici"
END
ENDPAGE

594
ce/ce3200.cpp Executable file
View File

@ -0,0 +1,594 @@
#include <applicat.h>
#include <automask.h>
#include <form.h>
#include <printer.h>
#include <recarray.h>
#include <utility.h>
#include "..\cg\cglib01.h"
#include "ce3.h"
#include "ce3200a.h"
#include "ce3200.h"
#include "celib.h"
#include "cespi.h"
#include "movce.h"
//-----FORM--------------------------------------------------------------------------------------//
class TForm_schedacesp : public TForm_cespiti
{
public:
virtual bool validate(TForm_item &cf, TToken_string &s);
void set_testata() {set_header(1,TRUE);}
void set_pedata() {set_footer(1,FALSE); set_footer(1,TRUE);}
TForm_schedacesp();
TPrint_section& get_rigauno() {return section('B', first_page);}
TPrint_section& get_rigadue() {return section('B', odd_page);}
TPrint_section& get_rigadueven() {return section('B', even_page);}
TPrint_section& get_rigatre() {return section('B', last_page);}
TPrint_section& get_rigatot() {return section('F', odd_page);}
TPrint_section& get_footer() {return section('F', first_page);}
virtual ~TForm_schedacesp();
};
TForm_schedacesp::TForm_schedacesp() :TForm_cespiti ("ce3200a") //costruttore con relazione..
{
}
TForm_schedacesp::~TForm_schedacesp()
{
}
bool TForm_schedacesp::validate(TForm_item &cf, TToken_string &s)
{
return TForm_cespiti::validate(cf,s); //richiama la validate standard della classe genitore (TForm_cespiti)
}
//-----AUTOMASK---------------------------------------------------------------------------------//
class TStampastorico_mask : public TAutomask
{
TRelation * _rel;
TCursor * _cur;
protected:
bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TStampastorico_mask();
virtual ~TStampastorico_mask(){};
};
TStampastorico_mask::TStampastorico_mask() :TAutomask ("ce3200a")
{
ditta_cespiti().init_mask(* this);
}
bool TStampastorico_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F_SITFISC :
if (e == fe_close)
{
if (!get_bool(F_SITFISC) && !get_bool(F_SITCIV) && !get_bool(F_SITGEST))
return error_box("Selezionare almeno una delle Situazioni da stampare");
}
break;
default: break;
}
return TRUE;
}
//-----SKELETON APPLICATION------------------------------------------------------------------------------------------//
class TStampa_storico : public TSkeleton_application
{
TStampastorico_mask * _mask;
TForm_schedacesp * _form;
bool _ammvenduti;
protected:
virtual bool create();
virtual bool destroy();
virtual void main_loop();
void print_header( const int tipo );
void print_footer();
void print_percespite( const int tipo );
void stampa_rigauno( bool errore );
public:
TStampa_storico() {}
};
bool TStampa_storico::create()
{
open_files(LF_CESPI, LF_SALCE, LF_AMMCE, LF_MOVCE, LF_AMMMV, 0);
_mask = new TStampastorico_mask;
_form = new TForm_schedacesp();
return TSkeleton_application::create();
}
bool TStampa_storico::destroy()
{
delete _mask;
delete _form;
return TSkeleton_application::destroy();
}
void TStampa_storico::print_header( const int tipo )
{
_form->find_field('H', odd_page, FF_CODDITTA).set(_mask->get(F_CODDITTA));
_form->find_field('H', odd_page, FF_DESCRDITTA).set(_mask->get(F_DESCRDITTA));
_form->find_field('H', odd_page, FF_GRUPPO).set(_mask->get(F_GRUPPO));
_form->find_field('H', odd_page, FF_D_GRUPPO).set(_mask->get(F_D_GRUPPO));
_form->find_field('H', odd_page, FF_SPECIE).set(_mask->get(F_SPECIE));
_form->find_field('H', odd_page, FF_D_SPECIE).set(_mask->get(F_D_SPECIE));
TDate inies = _mask->get(F_INIZIO_ES);
--inies;
_form->find_field('H', odd_page, FF_DATASIT).set(inies.string());
switch(tipo) //in base al(ai) tipo(i) di situazione cambia una riga dell'header
{
case 1:
_form->find_field('H', odd_page, FF_SITUAZIONE).set("fiscale");
break;
case 2:
_form->find_field('H', odd_page, FF_SITUAZIONE).set("civilistica");
break;
case 3:
_form->find_field('H', odd_page, FF_SITUAZIONE).set("gestionale");
break;
}
_form->set_testata();
}
void TStampa_storico::print_footer()
{
_form->set_pedata();
}
void TStampa_storico::stampa_rigauno( bool errore)
{
TRectype& recsalce = _form->cursor()->curr(LF_SALCE);
TDate datasaldo = _form->cursor()->curr(-102).get_date("D0");
real numele = recsalce.get_real("NUMELE");
TPrint_section& section1 = _form->get_rigauno(); //preparazione stampa riga dettaglio 1
TDate dtcomp = _form->cursor()->curr(LF_CESPI).get_date("DTCOMP");
section1.reset();
if ((datasaldo >= dtcomp && numele > 0) || (datasaldo == dtcomp && numele == 0)) //datasaldo >= data acquisto
{
section1.find_field(FF_DATAUNO).set(datasaldo);
section1.find_field(FF_DESCRUNO).set("Ripresa saldi");
section1.find_field(FF_NUMELEUNO).set(_form->cursor()->curr(LF_SALCE).get("NUMELE"));
real sum = recsalce.get_real("CSTO");
sum -= recsalce.get_real("VNONAMM");
sum += recsalce.get_real("RIV75");
sum += recsalce.get_real("RIV83");
sum += recsalce.get_real("RIV90");
sum += recsalce.get_real("RIV91");
sum += recsalce.get_real("RIVGF");
section1.find_field(FF_VALOREUNO).set(sum.string());
sum = 0;
TRectype& recammce = _form->cursor()->curr(LF_AMMCE);
sum = recammce.get_real("QNOR");
sum += recammce.get_real("QANT");
sum += recammce.get_real("QACC");
section1.find_field(FF_FONDIUNO).set(sum.string());
}
else // se datasaldo < data acquisto sono sbagliate le date
{
section1.find_field(FF_DESCRUNO).set("Date non congruenti sui saldi iniziali");
errore = TRUE;
}
section1.update();
for (word i = 0; i < section1.height(); i++) // stampa le righe tipo 1 (solo nel caso che dtmov != dtcomp)
printer().print(section1.row(i)); // in caso contrario passa semplicemente alle righe tipo 2
}
void TStampa_storico::print_percespite( const int tipo)
{
bool ho_stampato_qualcosa = FALSE;
print_header(tipo); // stampa l'intestazione;tipo si riferisce al tipo di situazione da stampare
print_footer(); //stampa data e pagenumber
const int esercizio = _mask->get_int(F_ESERCIZIO);
const long pos = _form->cursor()->pos(); //memorizza posizione cursore
TRectype& recammce = _form->cursor()->curr(LF_AMMCE); //scelta dei tipi ammort. su AMMCE
bool continua = _form->cursor()->is_first_match(LF_AMMCE);
while (recammce.get_int("TPAMM") != tipo && continua)
continua = _form->cursor()->next_match(LF_AMMCE);
TRectype& recammmv = _form->cursor()->curr(LF_AMMMV); //scelta dei tipi ammort. su AMMMV
continua = _form->cursor()->is_first_match(LF_AMMMV);
while (recammmv.get_int("TPAMM") != tipo && continua)
continua = _form->cursor()->next_match(LF_AMMMV);
TPrint_section& sectot = _form->get_rigatot(); //resetta il totale elementi,valore,fondo amm.
sectot.find_field(FF_TOTELEM).set("");
sectot.find_field(FF_TOTVALORE).set("");
sectot.find_field(FF_TOTAMMO).set("");
TRectype& recmovce = _form->cursor()->curr(LF_MOVCE); // riga dettaglio 2
TRelation& rel = *_form->relation();
if (rel.is_first_match(LF_MOVCE))
{
bool errore = FALSE; //variabile che indica se le date del cespite sono congruenti per essere stampate
TDate dtmov = _form->cursor()->curr(-105).get_date("DTMOV");
TDate dtcomp = _form->cursor()->curr(LF_CESPI).get_date("DTCOMP");
TEsercizi_contabili esc;
const TDate& inies = esc[esercizio].inizio();
if (dtmov < inies)
{
if (dtmov != dtcomp) //la riga tipo 1 va scritta solo se dtmov != dtcomp (in caso contrario é una tipo 2)
{
stampa_rigauno( errore );
ho_stampato_qualcosa = TRUE;
errore = !rel.next_match(LF_MOVCE);
}
}
if (!errore) do //se non c'é incongruenza di date procede alla stampa righe 2
{
TDate datamov = rel.curr(LF_MOVCE).get("DTMOV");
if (datamov >= inies) break;
bool ammven = FALSE;
if (_ammvenduti) // caso in cui la ditta ha "ammort. su venduti" = SI
{ // controlla su %tmc se il movimento é una vendita
TString16 tipomov = recmovce.get("CODMOV");
const TRectype& tmc = cache().get("%TMC" , tipomov);
ammven = tmc.get_bool("B4");
}
real aliqnor = recammmv.get_real("PENOR");
real aliqant = recammmv.get_real("PEANT");
real aliqacc = recammmv.get_real("PEACC");
if (ammven) // se é un movimento di vendita...
{
TPrint_section& section2ven = _form->get_rigadueven();
if (_form->cursor()->curr(LF_MOVCE).get_char("SEGNO")=='-') //controlla se c'é il - in movce
{
section2ven.find_field(FF_SEGNO).set("-1");
}
else
{
section2ven.find_field(FF_SEGNO).set("1");
}
int r = 1;
if (aliqnor != ZERO)
{
section2ven.find_field(FF_VPENOR).show();
section2ven.find_field(FF_VPENOR).y() = r+1;
section2ven.find_field(FF_VALINOR).show();
section2ven.find_field(FF_VALINOR).y() = r+1;
section2ven.find_field(FF_VQNOR).show();
section2ven.find_field(FF_VQNOR).y() = r+1;
r++;
}
else
{
section2ven.find_field(FF_VPENOR).hide();
section2ven.find_field(FF_VALINOR).hide();
section2ven.find_field(FF_VQNOR).hide();
}
if (aliqant != ZERO)
{
section2ven.find_field(FF_VPEANT).show();
section2ven.find_field(FF_VPEANT).y() = r+1;
section2ven.find_field(FF_VALIANT).show();
section2ven.find_field(FF_VALIANT).y() = r+1;
section2ven.find_field(FF_VQANT).show();
section2ven.find_field(FF_VQANT).y() = r+1;
r++;
}
else
{
section2ven.find_field(FF_VPEANT).hide();
section2ven.find_field(FF_VALIANT).hide();
section2ven.find_field(FF_VQANT).hide();
}
if (aliqacc != ZERO)
{
section2ven.find_field(FF_VPEACC).show();
section2ven.find_field(FF_VPEACC).y() = r+1;
section2ven.find_field(FF_VALIACC).show();
section2ven.find_field(FF_VALIACC).y() = r+1;
section2ven.find_field(FF_VQACC).show();
section2ven.find_field(FF_VQACC).y() = r+1;
r++;
}
else
{
section2ven.find_field(FF_VPEACC).hide();
section2ven.find_field(FF_VALIACC).hide();
section2ven.find_field(FF_VQACC).hide();
}
section2ven.update();
for (int i = 0; i < r; i++) // stampa le righe 2 con i movimenti vendita
printer().print(section2ven.row(i));
ho_stampato_qualcosa = TRUE;
}
else // se é un movimento NON di vendita...
{
TPrint_section& section2 = _form->get_rigadue();
if (_form->cursor()->curr(LF_MOVCE).get_char("SEGNO")=='-') //controlla se c'é il - in movce (es. sono le rettifiche su acquisti)
{
section2.find_field(FF_SEGNO).set("-1");
}
else
{
section2.find_field(FF_SEGNO).set("1");
}
//decide quante righe stampare in base al numero di aliquote presenti
int r = 1;
if (aliqnor != ZERO)
{
section2.find_field(FF_PENOR).show();
section2.find_field(FF_PENOR).y() = r;
section2.find_field(FF_ALINOR).show();
section2.find_field(FF_ALINOR).y() = r;
section2.find_field(FF_QNOR).show();
section2.find_field(FF_QNOR).y() = r;
r++;
}
else
{
section2.find_field(FF_PENOR).hide();
section2.find_field(FF_ALINOR).hide();
section2.find_field(FF_QNOR).hide();
}
if (aliqant != ZERO)
{
section2.find_field(FF_PEANT).show();
section2.find_field(FF_PEANT).y() = r;
section2.find_field(FF_ALIANT).show();
section2.find_field(FF_ALIANT).y() = r;
section2.find_field(FF_QANT).show();
section2.find_field(FF_QANT).y() = r;
r++;
}
else
{
section2.find_field(FF_PEANT).hide();
section2.find_field(FF_ALIANT).hide();
section2.find_field(FF_QANT).hide();
}
if (aliqacc != ZERO)
{
section2.find_field(FF_PEACC).show();
section2.find_field(FF_PEACC).y() = r;
section2.find_field(FF_ALIACC).show();
section2.find_field(FF_ALIACC).y() = r;
section2.find_field(FF_QACC).show();
section2.find_field(FF_QACC).y() = r;
r++;
}
else
{
section2.find_field(FF_PEACC).hide();
section2.find_field(FF_ALIACC).hide();
section2.find_field(FF_QACC).hide();
}
section2.update();
for (int i = 0; i < r; i++) // stampa le righe con tutti i movimenti (righe tipo 2)
printer().print(section2.row(i));
ho_stampato_qualcosa = TRUE;
}
} while (rel.next_match(LF_MOVCE));
if (!errore)
{
TDate dataelim = _form->cursor()->curr(LF_CESPI).get_date("DTALIEN");
TDate datafinees = _form->cursor()->curr(-102).get_date("D1");
if (dataelim.empty() || dataelim > datafinees) // qui ci va l'if con la condizione di scrittura riga3
{
TRectype& recsalce = _form->cursor()->curr(LF_SALCE);
bool continua = _form->cursor()->is_first_match(LF_SALCE);;
while (recsalce.get_int("TPSALDO") != 2 && continua)
continua = _form->cursor()->next_match(LF_SALCE);
real aliqnort = recammce.get_real("PNOR");
real aliqantt = recammce.get_real("PANT");
real aliqacct = recammce.get_real("PACC");
real qnort = recammce.get_real("QNOR");
real qantt = recammce.get_real("QANT");
real qacct = recammce.get_real("QACC");
bool scrivo_unarigatre = FALSE;
TPrint_section& section3 = _form->get_rigatre();
//controllo sulla scrittura di piú righe causa diverse aliquote
int r = 1;
if (aliqnort != ZERO || qnort != ZERO)
{
section3.find_field(FF_TPNOR).show();
section3.find_field(FF_TPNOR).y() = r;
section3.find_field(FF_TALINOR).show();
section3.find_field(FF_TALINOR).y() = r;
section3.find_field(FF_TQNOR).show();
section3.find_field(FF_TQNOR).y() = r;
r++;
scrivo_unarigatre = TRUE;
}
else
{
section3.find_field(FF_TPNOR).hide();
section3.find_field(FF_TALINOR).hide();
section3.find_field(FF_TQNOR).hide();
}
if (aliqantt != ZERO || qantt != ZERO)
{
section3.find_field(FF_TPANT).show();
section3.find_field(FF_TPANT).y() = r;
section3.find_field(FF_TALIANT).show();
section3.find_field(FF_TALIANT).y() = r;
section3.find_field(FF_TQANT).show();
section3.find_field(FF_TQANT).y() = r;
r++;
scrivo_unarigatre = TRUE;
}
else
{
section3.find_field(FF_TPANT).hide();
section3.find_field(FF_TALIANT).hide();
section3.find_field(FF_TQANT).hide();
}
if (aliqacct != ZERO || qacct != ZERO)
{
section3.find_field(FF_TPACC).show();
section3.find_field(FF_TPACC).y() = r;
section3.find_field(FF_TALIACC).show();
section3.find_field(FF_TALIACC).y() = r;
section3.find_field(FF_TQACC).show();
section3.find_field(FF_TQACC).y() = r;
r++;
scrivo_unarigatre = TRUE;
}
else
{
section3.find_field(FF_TPACC).hide();
section3.find_field(FF_TALIACC).hide();
section3.find_field(FF_TQACC).hide();
}
if (scrivo_unarigatre) //stampa la riga3 solo se ha trovato almeno una cosa da stampare
{
TDate inies = _mask->get(F_INIZIO_ES);
--inies;
_form->find_field('B', last_page, FF_DATASIT).set(inies.string());
section3.update();
for (int i = 0; i < r ; i++) // stampa riga tipo 3
printer().print(section3.row(i));
ho_stampato_qualcosa = TRUE;
}
}
if (ho_stampato_qualcosa) //controlla se ha stampato qualcosa (riga1, righe2, riga3)..
{
sectot.update();
for (word i = 0; i < sectot.height(); i++) //..e in caso affermativo stampa riga totale
printer().print(sectot.row(i));
}
}
}
else //é l'else di if(rel.is_first_match(LF_MOVCE)):
{ //serve nel caso il cespite non abbia movimenti ma solo saldi
bool errore = FALSE;
stampa_rigauno( errore );
ho_stampato_qualcosa = TRUE;
}
if (ho_stampato_qualcosa)
printer().formfeed(); //salta una pagina alla fine della scheda
*_form->cursor() = pos; //riposiziona il cursore
}
void TStampa_storico::main_loop()
{
_mask->set(F_SITFISC,"X");
while (_mask->run() == K_ENTER)
{
TRectype rec(LF_CESPI);
TString filtro;
TCursor& cursore = *_form->cursor();
const int esercizio = _mask->get_int(F_ESERCIZIO); //controlla il booleano _ammvenduti nell'esercizio corrente
TString80 key; key.format("%04d",esercizio);
const TRectype& cce = cache().get("CCE", key);
_ammvenduti = cce.get_bool("B3");
const int r = _mask->get_int(F_TIPOSTAMPA); //in base al tipo di stampa selezionato setta il cursore
switch (r)
{
case 0:
cursore.setkey(1); // setta la chiave (nel caso si fosse scelta in precedenza la 2)
if (!_mask->field(F_CODCESP).empty())
rec.put("IDCESPITE", _mask->get(F_CODCESP));
filtro.format("(CODCGRA==%d)&&(CODSPA==\"%s\")", _mask->get_int(F_GRUPPO), (const char *) _mask->get(F_SPECIE));
break;
case 1:
cursore.setkey(2); // setta la chiave 2
rec.put("CODCGRA", _mask->get_int(F_GRUPPO));
rec.put("CODSPA", _mask->get(F_SPECIE));
if (!_mask->field(F_CATCESP).empty())
rec.put("CODCAT", _mask->get_int(F_CATCESP));
break;
case 2:
cursore.setkey(1);
filtro.format("(CODCGRA==%d)&&(CODSPA==\"%s\")", _mask->get_int(F_GRUPPO), (const char *) _mask->get(F_SPECIE));
if (!_mask->field(F_IMPCESP).empty())
filtro << format("&&(CODIMP==\"%s\")", (const char *) _mask->get(F_IMPCESP)); //estende il filtro con il campo CODIMP
break;
default:
break;
}
cursore.setregion(rec,rec,0x2);
cursore.setfilter(filtro,TRUE);
long num = cursore.items();
cursore.freeze();
printer().open();
for (cursore=0; cursore.pos()<num; ++cursore)
{
if (_mask->get_bool(F_SITFISC))
print_percespite(1);
if (_mask->get_bool(F_SITCIV))
print_percespite(2);
if (_mask->get_bool(F_SITGEST))
print_percespite(3);
}
printer().close();
cursore.freeze(FALSE);
}
}
int ce3200(int argc, char* argv[])
{
TStampa_storico a;
a.run(argc,argv,"Stampa schede cespiti");
return 0;
}

64
ce/ce3200.h Executable file
View File

@ -0,0 +1,64 @@
// campi form schede cespiti
#define FF_CODDITTA 1
#define FF_DESCRDITTA 2
#define FF_GRUPPO 3
#define FF_D_GRUPPO 4
#define FF_SPECIE 5
#define FF_D_SPECIE 6
#define FF_CODCAT 7
#define FF_DESCRCAT 8
#define FF_CODCESP 9
#define FF_DESCRCESP 10
#define FF_ACQ 11
#define FF_ENTFUNZ 12
#define FF_SITUAZIONE 13
#define FF_DATASIT 14
#define FF_DESCRGR 15
#define FF_SEGNO 16
#define FF_DATAUNO 20
#define FF_DESCRUNO 21
#define FF_TIPODOCUNO 22
#define FF_NUMDOCUNO 23
#define FF_NUMELEUNO 25
#define FF_VALOREUNO 26
#define FF_FONDIUNO 27
#define FF_TOTELEM 31
#define FF_TOTVALORE 32
#define FF_TOTAMMO 33
#define FF_MINUS 35
#define FF_MINUSVEN 36
#define FF_DATE 40
#define FF_PAGE 41
#define FF_PENOR 50
#define FF_PEANT 51
#define FF_PEACC 52
#define FF_ALINOR 53
#define FF_ALIANT 54
#define FF_ALIACC 55
#define FF_QNOR 56
#define FF_QANT 57
#define FF_QACC 58
#define FF_VPENOR 60
#define FF_VPEANT 61
#define FF_VPEACC 62
#define FF_VALINOR 63
#define FF_VALIANT 64
#define FF_VALIACC 65
#define FF_VQNOR 66
#define FF_VQANT 67
#define FF_VQACC 68
#define FF_TPNOR 70
#define FF_TPANT 71
#define FF_TPACC 72
#define FF_TALINOR 73
#define FF_TALIANT 74
#define FF_TALIACC 75
#define FF_TQNOR 76
#define FF_TQANT 77
#define FF_TQACC 78

Some files were not shown because too many files have changed in this diff Show More