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:
parent
5fca30b8ed
commit
8a05210c2d
132
ba/ba0.cpp
132
ba/ba0.cpp
@ -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();
|
||||
|
||||
33
ba/ba0.url
33
ba/ba0.url
@ -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"
|
||||
|
||||
@ -97,7 +97,7 @@ END
|
||||
|
||||
BUTTON 114 10 2
|
||||
BEGIN
|
||||
PROMT 19 -1 "Font"
|
||||
PROMPT 19 -1 "Font"
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 14 8
|
||||
|
||||
@ -77,4 +77,5 @@ END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
ENDMASK
|
||||
|
||||
|
||||
12
ba/ba1.url
12
ba/ba1.url
@ -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>
|
||||
|
||||
235
ba/ba1100.cpp
235
ba/ba1100.cpp
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
17
ba/ba1500a.h
17
ba/ba1500a.h
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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"
|
||||
|
||||
24
ba/ba2.url
24
ba/ba2.url
@ -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)
|
||||
|
||||
@ -1,2 +1,3 @@
|
||||
#include <default.url>
|
||||
#include <mainmenu.url>
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
123
ba/ba3700.cpp
123
ba/ba3700.cpp
@ -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;
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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) ; }
|
||||
|
||||
@ -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));
|
||||
}
|
||||
|
||||
@ -1,2 +1,2 @@
|
||||
#include <default.url>
|
||||
|
||||
#include <mainmenu.url>
|
||||
|
||||
@ -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 )
|
||||
{
|
||||
|
||||
@ -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));
|
||||
}
|
||||
|
||||
|
||||
@ -244,7 +244,7 @@ BEGIN
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT FLD_GD1_VALUTA CODTAB
|
||||
CHECKTYPE NORMAL
|
||||
CHECKTYPE REQUIRED
|
||||
FLAGS "DU"
|
||||
END
|
||||
|
||||
|
||||
@ -1,2 +1,3 @@
|
||||
#include <default.url>
|
||||
#include <mainmenu.url>
|
||||
|
||||
|
||||
@ -1,2 +1,2 @@
|
||||
#include <default.url>
|
||||
|
||||
#include <mainmenu.url>
|
||||
|
||||
359
ba/ba7100.cpp
359
ba/ba7100.cpp
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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
|
||||
|
||||
@ -1,5 +1,3 @@
|
||||
#include <default.url>
|
||||
|
||||
MENU TASK_MENUBAR
|
||||
SUBMENU MENU_FILE "~File"
|
||||
#include <mainmenu.url>
|
||||
|
||||
|
||||
373
ba/baeur.cpp
Executable file
373
ba/baeur.cpp
Executable 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
101
ba/baeur.h
Executable 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
3
ba/baeur.url
Executable file
@ -0,0 +1,3 @@
|
||||
#include <default.url>
|
||||
#include <mainmenu.url>
|
||||
|
||||
401
ba/baeur00.cpp
Executable file
401
ba/baeur00.cpp
Executable 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
736
ba/baeur01.cpp
Executable 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
4
ba/baeur01.h
Executable file
@ -0,0 +1,4 @@
|
||||
#define F01_DATI 101
|
||||
#define F01_DATIE 102
|
||||
|
||||
|
||||
46
ba/baeur01.uml
Executable file
46
ba/baeur01.uml
Executable 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
418
ba/baeur02.cpp
Executable 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
7
ba/baeur02.h
Executable 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
69
ba/baeur02.uml
Executable 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
399
ba/baeur03.cpp
Executable 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
309
ba/baeur04.cpp
Executable 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
163
ba/baeur05.cpp
Executable 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
245
ba/baeur06.cpp
Executable 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
76
ba/baeur07.cpp
Executable 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
76
ba/baeur08.cpp
Executable 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
195
ba/baeur09.cpp
Executable 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
9
ba/baeur10.h
Executable 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
68
ba/baeur10.uml
Executable 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
18
ba/baeur11.h
Executable 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
149
ba/baeur11.uml
Executable 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
28
ba/baeur20.h
Executable 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
266
ba/baeur20.uml
Executable 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
50
ba/baeur30.h
Executable 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
455
ba/baeur30.uml
Executable 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
18
ba/baeur40.h
Executable 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
185
ba/baeur40.uml
Executable 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
|
||||
@ -2,6 +2,7 @@
|
||||
#define QAPPNAME "EASYFAX"
|
||||
|
||||
#include <default.url>
|
||||
//#include <mainmenu.url>
|
||||
|
||||
MENUBAR MENU_BAR(0)
|
||||
|
||||
|
||||
@ -1,7 +1,4 @@
|
||||
#include <default.url>
|
||||
|
||||
/* bainst BA */
|
||||
MENU TASK_MENUBAR
|
||||
SUBMENU MENU_FILE "~File"
|
||||
#include <mainmenu.url>
|
||||
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -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|##########,@@@@@@
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
13
ba/cgdll.url
13
ba/cgdll.url
@ -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>
|
||||
|
||||
@ -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|||
|
||||
|
||||
@ -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
31
ce/ammce.h
Executable 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
20
ce/ammmv.h
Executable 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
24
ce/catdi.h
Executable 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
10
ce/ce0.h
Executable 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
291
ce/ce0100.cpp
Executable 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
57
ce/ce0400.cpp
Executable 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
11
ce/ce0400a.h
Executable 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
111
ce/ce0400a.uml
Executable 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
41
ce/ce0400b.h
Executable 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
606
ce/ce0400b.uml
Executable 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
90
ce/ce0500.cpp
Executable 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
836
ce/ce0900.cpp
Executable 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
189
ce/ce0900.ini
Executable 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
3
ce/ce0900a.h
Executable file
@ -0,0 +1,3 @@
|
||||
#define F_SCELTADITTE 101
|
||||
#define F_DITTESELEZ 102
|
||||
#define F_MINISTERIALI 103
|
||||
52
ce/ce0900a.uml
Executable file
52
ce/ce0900a.uml
Executable 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
18
ce/ce2.cpp
Executable 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.url
Executable file
2
ce/ce2.url
Executable file
@ -0,0 +1,2 @@
|
||||
#include <default.url>
|
||||
#include <mainmenu.url>
|
||||
156
ce/ce2100.cpp
Executable file
156
ce/ce2100.cpp
Executable 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
15
ce/ce2100a.h
Executable 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
169
ce/ce2100a.uml
Executable 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
1521
ce/ce2101.cpp
Executable file
File diff suppressed because it is too large
Load Diff
71
ce/ce2101.h
Executable file
71
ce/ce2101.h
Executable 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
18
ce/ce3.cpp
Executable 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
9
ce/ce3.h
Executable 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
3
ce/ce3.url
Executable file
@ -0,0 +1,3 @@
|
||||
#include <default.url>
|
||||
#include <mainmenu.url>
|
||||
|
||||
542
ce/ce3100.cpp
Executable file
542
ce/ce3100.cpp
Executable 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
119
ce/ce3100.h
Executable 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
1747
ce/ce3100a.frm
Executable file
File diff suppressed because it is too large
Load Diff
22
ce/ce3100a.h
Executable file
22
ce/ce3100a.h
Executable 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
208
ce/ce3100a.uml
Executable 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
594
ce/ce3200.cpp
Executable 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
64
ce/ce3200.h
Executable 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
Loading…
x
Reference in New Issue
Block a user