1994-12-23 11:56:34 +00:00
|
|
|
#include "cg5500.h"
|
|
|
|
|
|
|
|
#include <browfile.h>
|
|
|
|
#include <prefix.h>
|
|
|
|
#include <msksheet.h>
|
|
|
|
#include <mailbox.h>
|
|
|
|
#include <execp.h>
|
|
|
|
#include <progind.h>
|
|
|
|
#include <urldefid.h>
|
1995-02-01 11:49:54 +00:00
|
|
|
#include <relation.h>
|
|
|
|
#include <sheet.h>
|
|
|
|
#include <utility.h>
|
1994-12-23 11:56:34 +00:00
|
|
|
|
|
|
|
#include "cg5500a.h"
|
|
|
|
|
|
|
|
const char* Visliq_app::itoname(int m)
|
|
|
|
{
|
1995-02-01 11:49:54 +00:00
|
|
|
const char* mn;
|
|
|
|
if (m == 13)
|
|
|
|
return "Annuale";
|
|
|
|
|
1994-12-23 11:56:34 +00:00
|
|
|
if (_freqviva == "M")
|
|
|
|
return itom(m);
|
|
|
|
|
|
|
|
switch(m)
|
|
|
|
{
|
|
|
|
case 3:
|
|
|
|
mn = "1 Trimestre";
|
|
|
|
break;
|
|
|
|
case 6:
|
|
|
|
mn = "2 Trimestre";
|
|
|
|
break;
|
|
|
|
case 9:
|
|
|
|
mn = "3 Trimestre";
|
|
|
|
break;
|
|
|
|
case 12:
|
|
|
|
mn = "4 Trimestre";
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
return mn;
|
|
|
|
}
|
|
|
|
|
|
|
|
void Visliq_app::set_freqviva()
|
|
|
|
{
|
|
|
|
if (look_lia())
|
|
|
|
_freqviva = _lia->get("S7");
|
|
|
|
else
|
|
|
|
{
|
|
|
|
TLocalisamfile ditte(LF_NDITTE,TRUE);
|
|
|
|
ditte.zero();
|
|
|
|
ditte.put("CODDITTA", get_firm());
|
|
|
|
ditte.read();
|
|
|
|
_freqviva = ditte.get("FREQVIVA");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
bool Visliq_app::create()
|
|
|
|
{
|
|
|
|
TApplication::create();
|
1995-02-01 11:49:54 +00:00
|
|
|
|
|
|
|
_firm = get_firm();
|
|
|
|
TDate oggi(TODAY);
|
|
|
|
_year = oggi.year();
|
|
|
|
_nditte = new TRelation(LF_NDITTE);
|
|
|
|
_ditte = new TArray_sheet(-1, -1, 0, 0, "Selezione Ditte",
|
|
|
|
"Cod.@5|Ragione Sociale@50|Vers.");
|
1994-12-23 11:56:34 +00:00
|
|
|
|
|
|
|
_del = new TTable("%DEL");
|
1995-02-14 10:03:05 +00:00
|
|
|
_lia = new TTable("%LIA");
|
1994-12-23 11:56:34 +00:00
|
|
|
_lim = new TTable("LIM");
|
1995-03-09 08:47:36 +00:00
|
|
|
_lam = new TTable("LAM");
|
1994-12-23 11:56:34 +00:00
|
|
|
_del_r = &(_del->curr());
|
|
|
|
_lim_r = &(_lim->curr());
|
1995-03-09 08:47:36 +00:00
|
|
|
_lam_r = &(_lam->curr());
|
1994-12-23 11:56:34 +00:00
|
|
|
_del_ditta = new TRecfield(*_del_r,"CODTAB",0,4);
|
|
|
|
_del_anno = new TRecfield(*_del_r,"CODTAB",5,8);
|
|
|
|
_del_mese = new TRecfield(*_del_r,"CODTAB",9,10);
|
|
|
|
_del_tipo = new TRecfield(*_del_r,"CODTAB",11,11);
|
|
|
|
_lim_anno = new TRecfield(*_lim_r,"CODTAB",0,3);
|
|
|
|
_lim_mese = new TRecfield(*_lim_r,"CODTAB",4,6);
|
1995-03-09 08:47:36 +00:00
|
|
|
_lam_anno = new TRecfield(*_lam_r,"CODTAB",0,3);
|
|
|
|
_lam_mese = new TRecfield(*_lam_r,"CODTAB",4,6);
|
1994-12-23 11:56:34 +00:00
|
|
|
|
1995-02-01 11:49:54 +00:00
|
|
|
begin_wait();
|
|
|
|
build_nomiditte();
|
|
|
|
build_ditte_sheet();
|
|
|
|
end_wait();
|
|
|
|
|
1994-12-23 11:56:34 +00:00
|
|
|
dispatch_e_menu(BAR_ITEM(1));
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool Visliq_app::destroy()
|
|
|
|
{
|
|
|
|
delete _lim_mese;
|
|
|
|
delete _lim_anno;
|
1995-03-09 08:47:36 +00:00
|
|
|
delete _lam_mese;
|
|
|
|
delete _lam_anno;
|
1994-12-23 11:56:34 +00:00
|
|
|
delete _del_tipo;
|
|
|
|
delete _del_mese;
|
|
|
|
delete _del_ditta;
|
|
|
|
delete _lim_r;
|
1995-03-09 08:47:36 +00:00
|
|
|
delete _lam_r;
|
1994-12-23 11:56:34 +00:00
|
|
|
delete _del_r;
|
|
|
|
delete _lim;
|
1995-03-09 08:47:36 +00:00
|
|
|
delete _lam;
|
1994-12-23 11:56:34 +00:00
|
|
|
delete _del;
|
1995-02-01 11:49:54 +00:00
|
|
|
delete _ditte;
|
|
|
|
delete _nditte;
|
1994-12-23 11:56:34 +00:00
|
|
|
|
|
|
|
return TApplication::destroy();
|
|
|
|
}
|
|
|
|
|
1995-02-01 11:49:54 +00:00
|
|
|
bool Visliq_app::ch_year_handler(TMask_field& f, KEY key)
|
|
|
|
{
|
|
|
|
if (key == K_TAB && f.focusdirty())
|
|
|
|
{
|
|
|
|
app().begin_wait();
|
|
|
|
app().set_year(f.get());
|
|
|
|
app().build_nomiditte();
|
|
|
|
app().build_ditte_sheet();
|
|
|
|
app().reset_fields();
|
|
|
|
app().end_wait();
|
|
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void Visliq_app::build_ditte_sheet()
|
|
|
|
{
|
|
|
|
// build sheet
|
|
|
|
_ditte->destroy();
|
|
|
|
for (int i = 0; i < _nomiditte.items(); i++)
|
|
|
|
{
|
|
|
|
TToken_string* d = new TToken_string(64);
|
|
|
|
*d = (TToken_string&)_nomiditte[i];
|
|
|
|
const char vers = d->get_char(2);
|
|
|
|
bool selectable = vers == '?';
|
|
|
|
const long pos = _ditte->add(d);
|
|
|
|
if (selectable) _ditte->disable(pos);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Visliq_app::reset_fields()
|
|
|
|
{
|
|
|
|
_mask->field(F_CODDITTA).set("");
|
|
|
|
_mask->field(F_RAGSOC).set("");
|
|
|
|
}
|
|
|
|
|
|
|
|
void Visliq_app::build_nomiditte()
|
|
|
|
{
|
|
|
|
_nomiditte.destroy();
|
|
|
|
// ricostruire _nomiditte e rifare build_ditte_sheet
|
|
|
|
TLocalisamfile& dt = _nditte->lfile();
|
|
|
|
TString fr(2);
|
1995-02-14 10:03:05 +00:00
|
|
|
TTable lia("%LIA");
|
1995-02-01 11:49:54 +00:00
|
|
|
|
|
|
|
for (dt.first(); !dt.eof(); dt.next())
|
|
|
|
{
|
|
|
|
// check no archivi
|
|
|
|
fr = "??";
|
1995-03-01 09:41:39 +00:00
|
|
|
bool good = prefhndl->exist(dt.get_long("CODDITTA"));
|
1995-02-01 11:49:54 +00:00
|
|
|
|
|
|
|
if (good)
|
|
|
|
{
|
|
|
|
// check no parametri liquidazione
|
1995-02-14 10:03:05 +00:00
|
|
|
lia.put("CODTAB", format("%05ld%d",dt.get_long("CODDITTA"),_year));
|
1995-02-01 11:49:54 +00:00
|
|
|
if (lia.read() != NOERR) good = FALSE;
|
|
|
|
else fr = lia.get("S7");
|
|
|
|
}
|
1995-03-13 09:17:50 +00:00
|
|
|
else continue;
|
1995-03-13 10:56:27 +00:00
|
|
|
|
1995-02-01 11:49:54 +00:00
|
|
|
TToken_string* d = new TToken_string(64);
|
|
|
|
|
|
|
|
// add record
|
|
|
|
d->add(dt.get("CODDITTA"));
|
|
|
|
d->add(dt.get("RAGSOC"));
|
|
|
|
d->add(fr);
|
|
|
|
|
|
|
|
_nomiditte.add(d);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
1994-12-23 11:56:34 +00:00
|
|
|
void Visliq_app::set_mask_freq(TMask& m)
|
|
|
|
{
|
|
|
|
if (_freqviva == "M")
|
|
|
|
{
|
|
|
|
m.show(F_MONTHS);
|
|
|
|
m.hide(F_TRIMS);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
m.hide(F_MONTHS);
|
|
|
|
m.show(F_TRIMS);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool Visliq_app::sheet_action(int r, KEY k)
|
|
|
|
{
|
|
|
|
// non si possono cancellare o aggiungere righe
|
|
|
|
return (k != K_DEL && k != K_INS);
|
|
|
|
}
|
|
|
|
|
1995-02-01 11:49:54 +00:00
|
|
|
bool Visliq_app::vers_action(int r, KEY k)
|
|
|
|
{
|
1995-02-03 11:51:44 +00:00
|
|
|
// non si possono cancellare o aggiungere righe
|
1995-02-01 11:49:54 +00:00
|
|
|
return (k != K_DEL && k != K_INS);
|
|
|
|
}
|
|
|
|
|
1994-12-23 11:56:34 +00:00
|
|
|
const char* Visliq_app::link_handler(TMask& m,
|
|
|
|
int n, const char* txt, bool doubleclick)
|
|
|
|
{
|
|
|
|
// con click visualizza, con double click modifica
|
|
|
|
TString st(txt);
|
|
|
|
bool iscred = FALSE;
|
|
|
|
static int group;
|
|
|
|
int firstfoc;
|
|
|
|
|
|
|
|
if (group != 0) m.hide(group);
|
|
|
|
|
|
|
|
if (st.find("rimborso") != -1)
|
|
|
|
{ group = -1; firstfoc = F_RIMBORSO; }
|
|
|
|
else if (st.find("debito") != -1 || st.find("credito") != -1)
|
|
|
|
{ group = -2; firstfoc = F_RETTIFICA; }
|
|
|
|
else if (st.find("acconto") != -1)
|
1995-02-06 11:50:20 +00:00
|
|
|
{ group = -3; firstfoc = F_ACCONTO; }
|
|
|
|
else if (st.find("Versamenti") != -1)
|
|
|
|
{ group = -4; firstfoc = F_DELDATE; }
|
1994-12-23 11:56:34 +00:00
|
|
|
|
|
|
|
m.show(group);
|
|
|
|
m.enable(group);
|
|
|
|
|
|
|
|
if (doubleclick) m.field(firstfoc).set_focus();
|
|
|
|
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool Visliq_app::menu(MENU_TAG m)
|
|
|
|
{
|
|
|
|
if (m == BAR_ITEM(1))
|
|
|
|
return vis_liq();
|
|
|
|
|
|
|
|
return TApplication::menu(m);
|
|
|
|
}
|
|
|
|
|
|
|
|
// handlers
|
|
|
|
bool Visliq_app::set_ditta(TMask_field& f, KEY k)
|
1995-02-01 11:49:54 +00:00
|
|
|
{
|
|
|
|
bool found = TRUE;
|
|
|
|
if (k == K_TAB && f.focusdirty())
|
1994-12-23 11:56:34 +00:00
|
|
|
{
|
1995-02-01 11:49:54 +00:00
|
|
|
found = FALSE;
|
|
|
|
TString ditta = f.get();
|
|
|
|
TArray_sheet* sh = app().get_ditte_sheet();
|
|
|
|
for (int i = 0; i < sh->items(); i++)
|
|
|
|
{
|
|
|
|
TToken_string& row = sh->row(i);
|
|
|
|
if (ditta == row.get(0))
|
|
|
|
{
|
|
|
|
if (sh->enabled(i))
|
|
|
|
{
|
|
|
|
f.mask().field(F_CODDITTA).set(row.get(0));
|
|
|
|
f.mask().field(F_RAGSOC).set(row.get(1));
|
|
|
|
app().set_freqviva(row.get(2));
|
|
|
|
app().set_mask_freq(f.mask());
|
|
|
|
found = TRUE;
|
|
|
|
}
|
|
|
|
else { f.reset(); beep(); }
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return found;
|
1994-12-23 11:56:34 +00:00
|
|
|
}
|
|
|
|
|
1995-02-01 11:49:54 +00:00
|
|
|
bool Visliq_app::set_ragsoc(TMask_field& f, KEY k)
|
1994-12-23 11:56:34 +00:00
|
|
|
{
|
1995-02-01 11:49:54 +00:00
|
|
|
bool found = TRUE;
|
|
|
|
if (k == K_TAB && f.focusdirty())
|
|
|
|
{
|
|
|
|
found = FALSE;
|
|
|
|
TString ditta = f.get();
|
|
|
|
TArray_sheet* sh = app().get_ditte_sheet();
|
|
|
|
for (int i = 0; i < sh->items(); i++)
|
|
|
|
{
|
|
|
|
TToken_string& row = sh->row(i);
|
|
|
|
TString ts(row.get(1));
|
|
|
|
if (ts.find(ditta) != -1)
|
|
|
|
{
|
|
|
|
if (sh->enabled(i))
|
|
|
|
{
|
|
|
|
f.mask().field(F_CODDITTA).set(row.get(0));
|
|
|
|
f.mask().field(F_RAGSOC).set(row.get(1));
|
|
|
|
app().set_freqviva(row.get(2));
|
|
|
|
app().set_mask_freq(f.mask());
|
|
|
|
found = TRUE;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return found;
|
1994-12-23 11:56:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool Visliq_app::sel_mese_sh1 (TMask_field& f, KEY k)
|
|
|
|
{
|
|
|
|
if (k != K_SPACE) return TRUE;
|
|
|
|
|
1995-02-03 11:51:44 +00:00
|
|
|
TMask& m = *(app().get_main_mask());
|
1994-12-23 11:56:34 +00:00
|
|
|
TSheet_field& sh = (TSheet_field&)m.field(F_VISLIQ1);
|
|
|
|
int month = sh.selected()+1;
|
1995-01-09 12:14:11 +00:00
|
|
|
TToken_string& tt = sh.row(sh.selected());
|
1995-02-01 11:49:54 +00:00
|
|
|
if (sh.items() == 4) month *= 3;
|
1995-03-09 08:47:36 +00:00
|
|
|
|
|
|
|
bool ok = FALSE;
|
|
|
|
if (m.dirty())
|
|
|
|
{
|
|
|
|
KEY k = yesnocancel_box("Registrazione modifiche effettuate?");
|
|
|
|
if (k == K_YES)
|
|
|
|
app().write_general(m);
|
|
|
|
else if (k == K_NO)
|
|
|
|
app().read_general(m);
|
|
|
|
ok = (k == K_YES || k == K_NO);
|
|
|
|
}
|
|
|
|
else ok = TRUE;
|
|
|
|
|
|
|
|
if (ok) app().vis_one(month);
|
|
|
|
|
1995-01-10 11:43:57 +00:00
|
|
|
TMask& sm = sh.sheet_mask();
|
|
|
|
|
1995-03-13 10:56:27 +00:00
|
|
|
sm.field(103).set(tt.get(2));
|
|
|
|
sm.field(104).set(tt.get(3));
|
|
|
|
sm.field(105).set(tt.get(4));
|
|
|
|
sm.field(106).set(tt.get(5));
|
|
|
|
sm.field(107).set(tt.get(6));
|
1995-03-09 08:47:36 +00:00
|
|
|
|
1994-12-23 11:56:34 +00:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
1995-03-09 08:47:36 +00:00
|
|
|
|
1994-12-23 11:56:34 +00:00
|
|
|
bool Visliq_app::sel_mese_sh2 (TMask_field& f, KEY k)
|
|
|
|
{
|
|
|
|
if (k != K_SPACE) return TRUE;
|
|
|
|
|
1995-02-03 11:51:44 +00:00
|
|
|
TMask& m = *(app().get_main_mask());
|
1994-12-23 11:56:34 +00:00
|
|
|
TSheet_field& sh = (TSheet_field&)m.field(F_VISLIQ2);
|
|
|
|
int month = sh.selected()+1;
|
|
|
|
if (sh.items() == 4) month *= 3;
|
1995-03-09 08:47:36 +00:00
|
|
|
|
|
|
|
bool ok = FALSE;
|
|
|
|
if (m.dirty())
|
|
|
|
{
|
|
|
|
KEY k = yesnocancel_box("Registrazione modifiche effettuate?");
|
|
|
|
if (k == K_YES)
|
|
|
|
app().write_general(m);
|
|
|
|
else if (k == K_NO)
|
|
|
|
app().read_general(m);
|
|
|
|
ok = k == K_YES || k == K_NO;
|
|
|
|
}
|
|
|
|
else ok = TRUE;
|
|
|
|
|
|
|
|
if (ok) app().vis_one(month);
|
|
|
|
|
1994-12-23 11:56:34 +00:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
1995-01-09 12:14:11 +00:00
|
|
|
|
1994-12-23 11:56:34 +00:00
|
|
|
bool Visliq_app::vis_liq()
|
|
|
|
{
|
|
|
|
long ditta = get_firm();
|
|
|
|
set_freqviva();
|
1995-02-01 11:49:54 +00:00
|
|
|
KEY k;
|
1994-12-23 11:56:34 +00:00
|
|
|
|
|
|
|
TMask m("cg5500a");
|
1995-02-01 11:49:54 +00:00
|
|
|
_mask = &m;
|
1994-12-23 11:56:34 +00:00
|
|
|
|
|
|
|
m.set_handler(F_CODDITTA, set_ditta);
|
1995-02-01 11:49:54 +00:00
|
|
|
m.set_handler(F_RAGSOC, set_ragsoc);
|
|
|
|
m.set_handler(F_YEAR, ch_year_handler);
|
1994-12-23 11:56:34 +00:00
|
|
|
|
|
|
|
set_mask_freq(m);
|
|
|
|
_year = m.get_int(F_YEAR);
|
|
|
|
|
1995-02-01 11:49:54 +00:00
|
|
|
while ((k = m.run()) != K_ESC)
|
|
|
|
{
|
|
|
|
if (k == DLG_SELECT)
|
|
|
|
{
|
|
|
|
if (_ditte->run() == K_ENTER)
|
|
|
|
{
|
|
|
|
TToken_string& row = _ditte->row(_ditte->selected());
|
|
|
|
m.field(F_CODDITTA).set(row.get(0));
|
|
|
|
m.field(F_RAGSOC).set(row.get(1));
|
|
|
|
set_freqviva(row.get(2));
|
|
|
|
set_mask_freq(m);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (k == K_ENTER)
|
|
|
|
{
|
|
|
|
long dtt = m.get_long(F_CODDITTA);
|
|
|
|
|
|
|
|
set_firm(dtt);
|
|
|
|
int month = m.get_int(_freqviva == "M" ? F_MONTHS : F_TRIMS);
|
|
|
|
if (month == 0)
|
|
|
|
vis_all();
|
|
|
|
else
|
|
|
|
vis_one(month);
|
|
|
|
_mask = &m;
|
|
|
|
}
|
1994-12-23 11:56:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
set_firm(ditta);
|
|
|
|
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool Visliq_app::vis_all()
|
|
|
|
{
|
|
|
|
if (!look_lia())
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
// mask diverse per trimestrale e annuale
|
1995-03-09 08:47:36 +00:00
|
|
|
TMask m(_freqviva == "M" ? "cg5500b" : "cg5500c");
|
1994-12-23 11:56:34 +00:00
|
|
|
_mask = &m;
|
|
|
|
|
|
|
|
TSheet_field& sh = (TSheet_field&)m.field(F_VISLIQ1);
|
|
|
|
TSheet_field& sv = (TSheet_field&)m.field(F_VISLIQ2);
|
|
|
|
|
1995-02-03 11:51:44 +00:00
|
|
|
_liq_sheet = &sh;
|
|
|
|
_vers_sheet = &sv;
|
|
|
|
|
1994-12-23 11:56:34 +00:00
|
|
|
// disabilita aggiunta/eliminazione righe
|
|
|
|
sh.set_notify(sheet_action);
|
1995-02-03 11:51:44 +00:00
|
|
|
// qui occorre modificare le deleghe
|
1995-02-01 11:49:54 +00:00
|
|
|
sv.set_notify(vers_action);
|
1994-12-23 11:56:34 +00:00
|
|
|
|
1995-03-13 10:56:27 +00:00
|
|
|
sh.sheet_mask().set_handler(101,sel_mese_sh1);
|
|
|
|
sv.sheet_mask().set_handler(101,sel_mese_sh2);
|
1994-12-23 11:56:34 +00:00
|
|
|
|
1995-03-09 08:47:36 +00:00
|
|
|
// fill the mask in
|
|
|
|
read_general(m);
|
1994-12-23 11:56:34 +00:00
|
|
|
|
1995-03-09 08:47:36 +00:00
|
|
|
for (bool stop = FALSE; !stop;)
|
1995-02-03 11:51:44 +00:00
|
|
|
{
|
1995-03-09 08:47:36 +00:00
|
|
|
KEY k = m.run();
|
|
|
|
|
|
|
|
switch(k)
|
1995-02-03 11:51:44 +00:00
|
|
|
{
|
1995-03-09 08:47:36 +00:00
|
|
|
case K_ESC:
|
|
|
|
case K_QUIT:
|
|
|
|
if (m.dirty())
|
1995-02-03 11:51:44 +00:00
|
|
|
{
|
1995-03-09 08:47:36 +00:00
|
|
|
KEY k = yesnocancel_box("Registrazione modifiche effettuate?");
|
1995-02-03 11:51:44 +00:00
|
|
|
|
1995-03-09 08:47:36 +00:00
|
|
|
if (k == K_YES)
|
|
|
|
write_general(m);
|
|
|
|
else
|
|
|
|
read_general(m);
|
|
|
|
|
|
|
|
if (k == K_YES || k == K_NO)
|
|
|
|
stop = TRUE;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
else stop = TRUE;
|
|
|
|
break;
|
|
|
|
case K_SAVE:
|
|
|
|
// write values
|
|
|
|
write_general(m);
|
|
|
|
break;
|
|
|
|
}
|
1995-02-03 11:51:44 +00:00
|
|
|
}
|
|
|
|
|
1995-03-09 08:47:36 +00:00
|
|
|
_mask = NULL;
|
|
|
|
_vers_sheet = NULL;
|
|
|
|
_liq_sheet = NULL;
|
|
|
|
|
1994-12-23 11:56:34 +00:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool Visliq_app::vis_one(int m)
|
|
|
|
{
|
1995-01-09 12:14:11 +00:00
|
|
|
begin_wait();
|
1994-12-23 11:56:34 +00:00
|
|
|
TMask msk("cg5500d");
|
1995-03-09 08:47:36 +00:00
|
|
|
|
|
|
|
bool recorded = TRUE;
|
1995-02-01 11:49:54 +00:00
|
|
|
TString nomem("Liquidazione IVA ");
|
1995-03-09 08:47:36 +00:00
|
|
|
|
1995-02-01 11:49:54 +00:00
|
|
|
nomem << itoname(m);
|
|
|
|
nomem << " " << _year;
|
1994-12-23 11:56:34 +00:00
|
|
|
|
1995-03-09 08:47:36 +00:00
|
|
|
// ricalcolo liquidazione
|
1994-12-23 11:56:34 +00:00
|
|
|
TFilename f;
|
1995-01-05 10:31:00 +00:00
|
|
|
f.temp("prliq");
|
1994-12-23 11:56:34 +00:00
|
|
|
|
|
|
|
TToken_string body(36);
|
|
|
|
body.add(_year);
|
|
|
|
body.add(m);
|
|
|
|
body.add(get_firm());
|
|
|
|
body.add("V"); // visualizzazione: no ff alla fine, zeri stampati
|
|
|
|
body.add("");
|
|
|
|
body.add(f);
|
|
|
|
|
1995-03-09 08:47:36 +00:00
|
|
|
TMessage msg("cg4 -2 -S", "RCL", body);
|
1994-12-23 11:56:34 +00:00
|
|
|
msg.send();
|
|
|
|
|
|
|
|
TBrowsefile_field& brw = (TBrowsefile_field&)msk.field(F_VISFLQ);
|
|
|
|
brw.set_link_handler(link_handler);
|
|
|
|
brw.enable_link("Modifica: ", 'r');
|
|
|
|
|
|
|
|
look_lim(m);
|
1995-03-09 08:47:36 +00:00
|
|
|
look_lia();
|
|
|
|
|
1994-12-23 11:56:34 +00:00
|
|
|
real rimborso = _lim->get_real("R1");
|
|
|
|
real rettifica = _lim->get_real("R5");
|
|
|
|
TString desc1(_lim->get("S0"));
|
1995-03-09 08:47:36 +00:00
|
|
|
TString desc2(_lim->get("S1"));
|
1994-12-23 11:56:34 +00:00
|
|
|
|
1995-03-09 08:47:36 +00:00
|
|
|
if (_lim->get_bool("B2"))
|
|
|
|
nomem << " (diritto al rimborso infraannuale)";
|
|
|
|
|
|
|
|
real acconto(0.0);
|
|
|
|
if (m == 12) acconto = _lia->get_real("R4");
|
1994-12-23 11:56:34 +00:00
|
|
|
|
1995-02-01 11:49:54 +00:00
|
|
|
msk.field(F_YEAR).set(nomem);
|
1994-12-23 11:56:34 +00:00
|
|
|
msk.field(F_RIMBORSO).set(rimborso.string());
|
|
|
|
if (rettifica.sign() < 0)
|
|
|
|
{
|
|
|
|
msk.field(F_RETTIFICA).set(abs(rettifica).string());
|
|
|
|
msk.field(F_DEBCRE).set("C");
|
|
|
|
}
|
1995-03-09 08:47:36 +00:00
|
|
|
else if (rettifica.sign() > 0)
|
1994-12-23 11:56:34 +00:00
|
|
|
{
|
|
|
|
msk.field(F_RETTIFICA).set(rettifica.string());
|
|
|
|
msk.field(F_DEBCRE).set("D");
|
1995-03-09 08:47:36 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
msk.field(F_RETTIFICA).set("");
|
|
|
|
msk.field(F_DEBCRE).set("");
|
|
|
|
}
|
1994-12-23 11:56:34 +00:00
|
|
|
|
|
|
|
msk.field(F_DESCR1).set(desc1);
|
|
|
|
msk.field(F_DESCR2).set(desc1);
|
|
|
|
msk.field(F_ACCONTO).set(acconto.string());
|
|
|
|
|
|
|
|
TExternal_app liq("cg4 -2");
|
1995-03-09 08:47:36 +00:00
|
|
|
|
1995-01-09 12:14:11 +00:00
|
|
|
end_wait();
|
1995-03-09 08:47:36 +00:00
|
|
|
TProgind* pp = new TProgind(10l,"Estrazione liquidazione: prego attendere",
|
|
|
|
FALSE,FALSE);
|
|
|
|
liq.run();
|
1994-12-23 11:56:34 +00:00
|
|
|
if (liq.error())
|
|
|
|
{
|
|
|
|
beep();
|
|
|
|
return FALSE;
|
1995-01-05 10:31:00 +00:00
|
|
|
}
|
1995-03-09 08:47:36 +00:00
|
|
|
|
1995-01-05 10:31:00 +00:00
|
|
|
begin_wait();
|
1995-03-09 08:47:36 +00:00
|
|
|
brw.set_text(f, "CALCOLO LIQUIDAZIONE D'IMPOSTA");
|
1994-12-23 11:56:34 +00:00
|
|
|
brw.goto_pos(brw.lines()-16l, 9);
|
1995-03-09 08:47:36 +00:00
|
|
|
delete pp;
|
|
|
|
|
1994-12-23 11:56:34 +00:00
|
|
|
TViswin* vsw = brw.vis_win();
|
1995-03-09 08:47:36 +00:00
|
|
|
bool is_delega = FALSE;
|
|
|
|
|
|
|
|
real vers; TDate date; TString abi(5), cab(5), con(3);
|
1995-02-06 11:50:20 +00:00
|
|
|
|
|
|
|
if (is_delega = look_del(m,1))
|
|
|
|
{
|
|
|
|
vers = _del->get_real("R0") + _del->get_real("R1");
|
|
|
|
date = _del->get_date("D0");
|
|
|
|
abi = _del->get("S7");
|
|
|
|
cab = _del->get("S8");
|
|
|
|
con = _del->get("S9");
|
|
|
|
}
|
1995-03-09 08:47:36 +00:00
|
|
|
|
1995-02-06 11:50:20 +00:00
|
|
|
msk.field(F_DELDATE).set(date.string());
|
|
|
|
msk.field(F_DELIMP).set(vers.string());
|
|
|
|
msk.field(F_DELABI).set(abi);
|
|
|
|
msk.field(F_DELCAB).set(cab);
|
|
|
|
msk.field(F_DELCON).set(con);
|
1994-12-23 11:56:34 +00:00
|
|
|
|
1995-01-05 10:31:00 +00:00
|
|
|
end_wait();
|
1995-03-09 08:47:36 +00:00
|
|
|
|
|
|
|
bool l_mod = FALSE;
|
|
|
|
bool d_mod = FALSE;
|
|
|
|
|
1994-12-23 11:56:34 +00:00
|
|
|
for(;;)
|
|
|
|
{
|
|
|
|
KEY k = msk.run();
|
|
|
|
|
1995-03-09 08:47:36 +00:00
|
|
|
if (k == K_ESC) break;
|
|
|
|
|
|
|
|
real n_acconto (msk.get(F_ACCONTO));
|
|
|
|
real n_rimborso (msk.get(F_RIMBORSO));
|
|
|
|
real n_rettifica(msk.get(F_RETTIFICA));
|
|
|
|
real n_delimp(msk.get(F_DELIMP));
|
|
|
|
TString n_desc1 (msk.get(F_DESCR1));
|
|
|
|
TString n_desc2 (msk.get(F_DESCR2));
|
|
|
|
real n_vers (msk.get(F_DELIMP));
|
|
|
|
TDate n_date (msk.get(F_DELDATE));
|
|
|
|
TString n_abi (msk.get(F_DELABI));
|
|
|
|
TString n_cab (msk.get(F_DELCAB));
|
|
|
|
TString n_con (msk.get(F_DELCON));
|
|
|
|
|
|
|
|
if (msk.field(F_DEBCRE).get()[0] == 'C' && !n_rettifica.is_zero())
|
|
|
|
n_rettifica = -n_rettifica;
|
|
|
|
|
|
|
|
if (msk.field(F_RETTIFICA).dirty() || msk.field(F_DEBCRE).dirty())
|
|
|
|
{
|
|
|
|
rettifica = n_rettifica;
|
|
|
|
l_mod = TRUE;
|
|
|
|
}
|
|
|
|
if (msk.field(F_ACCONTO).dirty())
|
|
|
|
{
|
|
|
|
acconto = n_acconto;
|
|
|
|
l_mod = TRUE;
|
|
|
|
}
|
|
|
|
if (msk.field(F_RIMBORSO).dirty())
|
|
|
|
{
|
|
|
|
rimborso = n_rimborso;
|
|
|
|
l_mod = TRUE;
|
|
|
|
}
|
|
|
|
if (msk.field(F_DESCR1).dirty())
|
|
|
|
{
|
|
|
|
desc1 = n_desc1;
|
|
|
|
l_mod = TRUE;
|
|
|
|
}
|
|
|
|
if (msk.field(F_DESCR2).dirty())
|
|
|
|
{
|
|
|
|
desc2 = n_desc2;
|
|
|
|
l_mod = TRUE;
|
|
|
|
}
|
|
|
|
if (msk.field(F_DELDATE).dirty())
|
|
|
|
{
|
|
|
|
date = n_date;
|
|
|
|
d_mod = TRUE;
|
|
|
|
}
|
|
|
|
if (msk.field(F_DELIMP).dirty())
|
|
|
|
{
|
|
|
|
vers = n_vers;
|
|
|
|
d_mod = TRUE;
|
|
|
|
}
|
|
|
|
if (msk.field(F_DELABI).dirty())
|
|
|
|
{
|
|
|
|
abi = n_abi;
|
|
|
|
d_mod = TRUE;
|
|
|
|
}
|
|
|
|
if (msk.field(F_DELCAB).dirty())
|
|
|
|
{
|
|
|
|
cab = n_cab;
|
|
|
|
d_mod = TRUE;
|
|
|
|
}
|
|
|
|
if (msk.field(F_DELCON).dirty())
|
|
|
|
{
|
|
|
|
con = n_con;
|
|
|
|
d_mod = TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (recorded) recorded = !(d_mod || l_mod);
|
|
|
|
|
1995-01-27 11:00:50 +00:00
|
|
|
if (k == K_INS || k == K_SAVE)
|
1995-03-09 08:47:36 +00:00
|
|
|
{
|
|
|
|
recalc_liq_data(vsw, rimborso, rettifica, vers,
|
|
|
|
acconto, desc1, desc2, date, abi,
|
|
|
|
cab, con);
|
|
|
|
}
|
|
|
|
if (k == K_SAVE)
|
|
|
|
{
|
|
|
|
if (l_mod) { write_liq(); recalc_next_liq(m, _liq_sheet, _vers_sheet); }
|
|
|
|
if (d_mod) { write_del(); }
|
|
|
|
l_mod = d_mod = FALSE;
|
|
|
|
recorded = TRUE;
|
|
|
|
}
|
|
|
|
if (k == K_QUIT)
|
|
|
|
{
|
|
|
|
if (!recorded)
|
1994-12-23 11:56:34 +00:00
|
|
|
{
|
1995-03-09 08:47:36 +00:00
|
|
|
KEY kk = yesnocancel_box("Modifiche non registrate: salvare?");
|
|
|
|
if (kk == K_YES)
|
|
|
|
{
|
|
|
|
if (l_mod) { write_liq(); recalc_next_liq(m, _liq_sheet, _vers_sheet); }
|
|
|
|
if (d_mod) { write_del(); }
|
|
|
|
l_mod = d_mod = FALSE;
|
|
|
|
recorded = TRUE;
|
|
|
|
}
|
|
|
|
if (kk == K_YES || kk == K_NO)
|
|
|
|
break;
|
1994-12-23 11:56:34 +00:00
|
|
|
}
|
1995-03-09 08:47:36 +00:00
|
|
|
else break;
|
|
|
|
}
|
|
|
|
}
|
1995-01-09 12:14:11 +00:00
|
|
|
|
1995-03-09 08:47:36 +00:00
|
|
|
remove(f);
|
|
|
|
|
|
|
|
return recorded;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void Visliq_app::recalc_liq_data(TViswin* vsw, real& rimb, real& rett, real& vers,
|
|
|
|
real& acc, TString& d1, TString& d2, TDate& date, TString&
|
|
|
|
abi, TString& cab, TString& con)
|
|
|
|
{
|
|
|
|
// ricalcola tutto, scrive nei lim, NON salva e riaggiusta
|
|
|
|
// la paginata della liquidazione
|
|
|
|
// Descrizione Da ricalcolare
|
|
|
|
// -------------------------------------------------------------------------------
|
|
|
|
real iva_ven = _lam->get_real("R0"); // IVA acquisti no
|
|
|
|
real iva_acq = _lam->get_real("R1"); // IVA vendite no
|
|
|
|
real cre_pre = _lam->get_real("R2"); // credito precedente no (solo dopo)
|
|
|
|
real deb_pre = _lam->get_real("R3"); // debito precedente no (solo dopo)
|
|
|
|
real ris = _lim->get_real("R0"); // risultato si
|
|
|
|
real rmb = _lim->get_real("R1"); // rimborso si
|
|
|
|
real rtt = _lim->get_real("R5"); // rettifica si
|
|
|
|
real udt = _lim->get_real("R6"); // ult. detrazioni no
|
|
|
|
real cgp = _lim->get_real("R7"); // conguaglio prorata no
|
|
|
|
real vrs = _lim->get_real("R8"); // versamenti si
|
|
|
|
real vri = _lim->get_real("R9"); // versamenti integrativi no
|
|
|
|
real itt = _lim->get_real("R10"); // tasso interesse no
|
|
|
|
real act = _lim->get_real("R11"); // acconto si
|
|
|
|
real crd = _lim->get_real("R12"); // totale a credito si
|
|
|
|
real dbt = _lim->get_real("R13"); // totale a debito si
|
|
|
|
real itr = _lim->get_real("R14"); // interesse totale si
|
|
|
|
// -------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
// calcola vecchio risultato: se e' diverso da R0 ci sono cazzi strani
|
|
|
|
// e invalidiamo B0 cosi' impara
|
|
|
|
real risul = iva_ven - iva_acq - udt + rmb - vri + cgp + rtt -
|
|
|
|
act - cre_pre + deb_pre;
|
|
|
|
|
|
|
|
if (risul != ris)
|
|
|
|
{
|
|
|
|
#ifdef DBG
|
|
|
|
yesnofatal_box("Ostia vacca! Risultato non coincidente! Porco iddio?");
|
|
|
|
#endif
|
|
|
|
_lim->put("B0", "X");
|
|
|
|
}
|
|
|
|
|
|
|
|
// calcola nuovi dati
|
|
|
|
real riscr = iva_acq + udt + vers + acc + cre_pre;
|
|
|
|
real risdb = iva_ven + rimb + deb_pre;
|
|
|
|
|
|
|
|
if (rett.sign() < 0) riscr -= rett;
|
|
|
|
else risdb += rett;
|
|
|
|
if (cgp.sign() < 0) riscr -= cgp;
|
|
|
|
else riscr += cgp;
|
|
|
|
|
|
|
|
risul = risdb - riscr;
|
|
|
|
|
|
|
|
real intr(0.0);
|
|
|
|
|
|
|
|
if (!itt.is_zero())
|
|
|
|
{
|
|
|
|
// calcola interesse
|
|
|
|
intr = risul * (itt/real(100.0));
|
|
|
|
}
|
|
|
|
|
|
|
|
// riaggiusta LIM
|
|
|
|
_lim->put("R0", risul);
|
|
|
|
_lim->put("R1", rimb);
|
|
|
|
_lim->put("R5", rett);
|
|
|
|
_lim->put("R8", vers);
|
|
|
|
_lim->put("R11", acc);
|
|
|
|
_lim->put("R12", riscr);
|
|
|
|
_lim->put("R13", risdb);
|
|
|
|
_lim->put("R14", intr);
|
|
|
|
|
|
|
|
// i dati dei versamenti si schiaffano in LIM:
|
|
|
|
// D0 la data, S4/5/6 le tre cazzate ABI CAB CON
|
|
|
|
_lim->put("D0", date);
|
|
|
|
_lim->put("S4", abi);
|
|
|
|
_lim->put("S5", cab);
|
|
|
|
_lim->put("S6", con);
|
|
|
|
|
|
|
|
// non scrive e si sciroppa la viswin
|
|
|
|
TString256 ln;
|
|
|
|
ln.spaces();
|
|
|
|
|
|
|
|
// determina righe da cambiare
|
|
|
|
// una sburlata di search ......
|
|
|
|
int x = 0;
|
|
|
|
long lvers = -1l;
|
|
|
|
long line = vsw->search("CALCOLO LIQUIDAZIONE D'IMPOSTA", x);
|
|
|
|
int wasdebt = ris.sign();
|
|
|
|
long lrivr = vsw->search("Versamenti effettuati",x,line,TRUE);
|
|
|
|
long lrisd = vsw->search("RISULTATO", x, line, TRUE); // RISULTATO a debito
|
|
|
|
long lrisc = vsw->search("RISULTATO", x, lrisd+1l, TRUE); // credito
|
|
|
|
long lrettc = vsw->search("Rettifiche IVA a credito",x,line,TRUE);
|
|
|
|
long lrettd = vsw->search("Rettifiche IVA a debito", x,line,TRUE);
|
|
|
|
long lacct = vsw->search("Versamento acconto dicembre",x,line,TRUE);
|
|
|
|
long lrimb = vsw->search("Iva chiesta a rimborso",x,line,TRUE);
|
|
|
|
|
|
|
|
if (wasdebt != 0)
|
|
|
|
lvers = vsw->search(wasdebt < 0 ? "CREDITO ATTUALE" : "IVA DA VERSARE",
|
|
|
|
x, line, TRUE);
|
|
|
|
if (lvers == -1l)
|
|
|
|
lvers = vsw->search("IVA A DEBITO DA NON VERSARE", x, line, TRUE);
|
|
|
|
if (lvers == -1l)
|
|
|
|
lvers = lrisc+1l;
|
|
|
|
|
|
|
|
// ... seguita da una sburlata di replace
|
|
|
|
vsw->replace(lrimb, rimb.string("###.###.###.###"), 75);
|
|
|
|
vsw->replace(lrisd, risdb.string("###.###.###.###"), 75);
|
|
|
|
vsw->replace(lrisc, riscr.string("###.###.###.###"), 58);
|
|
|
|
vsw->replace(lacct, acc.string("###.###.###.###"), 58);
|
|
|
|
vsw->replace(lrivr, vers.string("###.###.###.###"), 58);
|
|
|
|
|
|
|
|
if (rett.sign() > 0)
|
|
|
|
{
|
|
|
|
vsw->replace(lrettd, rett.string("###.###.###.###"), 75);
|
|
|
|
vsw->replace(lrettc, " ", 58);
|
|
|
|
}
|
|
|
|
else if (rett.sign() < 0)
|
|
|
|
{
|
|
|
|
vsw->replace(lrettc, abs(rett).string("###.###.###.###"), 58);
|
|
|
|
vsw->replace(lrettd, " ", 75);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
vsw->replace(lrettc, " ", 58);
|
|
|
|
vsw->replace(lrettd, " ", 75);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (risul.sign() < 0)
|
|
|
|
{
|
|
|
|
ln.overwrite("CREDITO ATTUALE", 23);
|
|
|
|
ln.overwrite(abs(risul).string("###.###.###.###"), 58);
|
|
|
|
}
|
|
|
|
else if (risul.sign() > 0)
|
|
|
|
{
|
|
|
|
ln.overwrite("IVA DA VERSARE", 23);
|
|
|
|
ln.overwrite(risul.string("###.###.###.###"), 75);
|
|
|
|
}
|
|
|
|
vsw->replace(lvers, ln, 0);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
void Visliq_app::recalc_next_liq(int start_month, TSheet_field* sl, TSheet_field* sv)
|
|
|
|
{
|
|
|
|
// riaggiusta le liquidazioni successive da li' in poi finche' ce n'e'
|
|
|
|
// rimette a posto i valori nelle tokenstrunz dello sheet
|
|
|
|
// soltanto nello start_month i valori di LIM sono stati cambiati
|
|
|
|
|
|
|
|
int step = _freqviva == "M" ? 1 : 3;
|
|
|
|
real rstart = _lim->get("R0");
|
|
|
|
|
|
|
|
for (int i = start_month; i < 13; i += step)
|
|
|
|
{
|
|
|
|
int row = (i/step) - 1;
|
|
|
|
|
|
|
|
if (i > start_month)
|
|
|
|
{
|
|
|
|
if (!look_lim(i))
|
|
|
|
break;
|
|
|
|
|
|
|
|
// ricalcola LIM e LAM
|
|
|
|
real cred = _lam->get_real("R2");
|
|
|
|
real debt = _lam->get_real("R3");
|
|
|
|
real risl = _lim->get_real("R0");
|
|
|
|
real vers = _lim->get_real("R8");
|
|
|
|
real risc = _lim->get_real("R12");
|
|
|
|
real risd = _lim->get_real("R13");
|
|
|
|
real intt = _lim->get_real("R10");
|
|
|
|
|
|
|
|
// toglie vecchio credito e debito
|
|
|
|
risl += cred;
|
|
|
|
risl -= debt;
|
|
|
|
risc -= cred;
|
|
|
|
risd -= debt;
|
|
|
|
|
|
|
|
// aggiunge nuovo credito o debito
|
|
|
|
if (rstart.sign() < 0 || (rstart.sign() > 0 && rstart < IVA_DA_RIPORTARE))
|
|
|
|
risl += rstart;
|
|
|
|
|
|
|
|
real newcred(0.0);
|
|
|
|
real newdebt(0.0);
|
|
|
|
if (rstart.sign() < 0)
|
|
|
|
{
|
|
|
|
newcred = -rstart;
|
|
|
|
risc -= rstart;
|
1994-12-23 11:56:34 +00:00
|
|
|
}
|
1995-03-09 08:47:36 +00:00
|
|
|
if (rstart.sign() > 0 && rstart < IVA_DA_RIPORTARE)
|
1994-12-23 11:56:34 +00:00
|
|
|
{
|
1995-03-09 08:47:36 +00:00
|
|
|
newdebt = rstart;
|
|
|
|
risd += rstart;
|
|
|
|
}
|
1995-02-06 11:50:20 +00:00
|
|
|
|
1995-03-09 08:47:36 +00:00
|
|
|
_lam->put("R2", newcred);
|
|
|
|
_lam->put("R3", newdebt);
|
|
|
|
_lim->put("R0", risl);
|
|
|
|
_lim->put("R12", risc);
|
|
|
|
_lim->put("R13", risd);
|
|
|
|
// interessi
|
|
|
|
if (intt.sign() > 0)
|
1995-02-06 11:50:20 +00:00
|
|
|
{
|
1995-03-09 08:47:36 +00:00
|
|
|
real intr = risl * (intt/real(100.0));
|
|
|
|
_lim->put("R14",intr);
|
|
|
|
}
|
|
|
|
|
|
|
|
_lim->rewrite();
|
|
|
|
_lam->rewrite();
|
|
|
|
|
|
|
|
rstart = risl;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (sl != NULL)
|
|
|
|
{
|
|
|
|
TToken_string& t = sl->row(row);
|
|
|
|
|
|
|
|
int sr0 = (_lim->get_real("R0")).sign();
|
|
|
|
int sr5 = (_lim->get_real("R5")).sign();
|
|
|
|
|
1995-03-13 10:56:27 +00:00
|
|
|
t.add(abs(_lim->get_real("R0")).string(),2);
|
|
|
|
t.add(sr0 == 0 ? "" : (sr0 > 0 ? "D" : "C"), 3);
|
|
|
|
t.add((_lim->get_real("R1")).string(),4);
|
|
|
|
t.add(abs(_lim->get_real("R5")).string(),5);
|
|
|
|
t.add(sr5 == 0 ? "" : (sr5 > 0 ? "D" : "C"),6);
|
1995-03-09 08:47:36 +00:00
|
|
|
|
|
|
|
sl->force_update(row);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// se non si fa questa non scrive una delega,
|
|
|
|
// bensi' una bovazza
|
|
|
|
look_lim(start_month);
|
|
|
|
}
|
|
|
|
|
|
|
|
void Visliq_app::write_liq()
|
|
|
|
{
|
|
|
|
// piccola, ma simpatica
|
|
|
|
_lim->rewrite();
|
|
|
|
}
|
|
|
|
|
|
|
|
void Visliq_app::write_del()
|
|
|
|
{
|
|
|
|
int month = atoi(*_lim_mese);
|
|
|
|
TString abi(_lim->get("S4"));
|
|
|
|
TString cab(_lim->get("S5"));
|
|
|
|
TString con(_lim->get("S6"));
|
|
|
|
TDate date(_lim->get("D0"));
|
|
|
|
real vers(_lim->get_real("R8"));
|
|
|
|
|
|
|
|
bool wasdel = look_del(month,1,TRUE);
|
|
|
|
|
|
|
|
_del->put("R0",vers);
|
|
|
|
_del->put("R1","");
|
|
|
|
_del->put("D0",date);
|
|
|
|
_del->put("S7",abi);
|
|
|
|
_del->put("S8",cab);
|
|
|
|
_del->put("S9",con);
|
|
|
|
|
|
|
|
int ctri = _freqviva == "M" ? 6000 + month : 6030 + (month/3);
|
|
|
|
_del->put("S6", format("%d",ctri));
|
|
|
|
|
|
|
|
if (wasdel) _del->write();
|
|
|
|
else _del->rewrite();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void Visliq_app::read_general(TMask& m)
|
|
|
|
{
|
|
|
|
TString abi(5);
|
|
|
|
TString cab(5);
|
|
|
|
TString cnc(5);
|
|
|
|
|
|
|
|
TSheet_field& sh = (TSheet_field&)m.field(F_VISLIQ1);
|
|
|
|
TSheet_field& sv = (TSheet_field&)m.field(F_VISLIQ2);
|
|
|
|
|
|
|
|
m.field(F_CREDPREC).set(_lia->get_real("R0").string());
|
|
|
|
|
|
|
|
// set sheet
|
|
|
|
for (int i = 1; i <= 12; i++)
|
|
|
|
{
|
|
|
|
if (!is_month_ok(i))
|
|
|
|
continue;
|
|
|
|
|
|
|
|
if (!look_lim(i))
|
|
|
|
{
|
|
|
|
if (sh.items() < i)
|
|
|
|
sh.row(i-1) = *(new TToken_string("||||||"));
|
|
|
|
else
|
|
|
|
sh.row(i-1) = "||||||";
|
1995-02-06 11:50:20 +00:00
|
|
|
|
1995-03-09 08:47:36 +00:00
|
|
|
sh.disable_cell(i-1, -1);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
TToken_string* tt;
|
|
|
|
if (sh.items() < i) tt = new TToken_string(80);
|
|
|
|
else tt = &(sh.row(i-1));
|
|
|
|
|
1995-03-13 10:56:27 +00:00
|
|
|
tt->add(""); // questo e' il bottone
|
1995-03-09 08:47:36 +00:00
|
|
|
tt->add(itoname(i));
|
|
|
|
tt->add(abs(_lim->get_real("R0")).string());
|
|
|
|
|
|
|
|
int sr0 = (_lim->get_real("R0")).sign();
|
|
|
|
int sr5 = (_lim->get_real("R5")).sign();
|
|
|
|
|
|
|
|
tt->add(sr0 == 0 ? "" : (sr0 > 0 ? "D" : "C"));
|
|
|
|
tt->add(_lim->get_real("R1").string());
|
|
|
|
tt->add(abs(_lim->get_real("R5")).string());
|
|
|
|
tt->add(sr5 == 0 ? "" : (sr5 > 0 ? "D" : "C"));
|
|
|
|
|
|
|
|
sh.row(i-1) = (*tt);
|
|
|
|
}
|
|
|
|
|
|
|
|
// calcola versamenti
|
|
|
|
real versamenti[13];
|
|
|
|
TDate date[13];
|
|
|
|
TToken_string banche[13];
|
|
|
|
|
|
|
|
for (_del->first(); !_del->eof(); _del->next())
|
|
|
|
{
|
|
|
|
if (atol(*_del_ditta) != get_firm() ||
|
|
|
|
atoi(*_del_anno) != _year)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
// uso solo deleghe normali (tipo == 1) e acconti (tipo == 7)
|
|
|
|
int tipod = atoi(*_del_tipo);
|
|
|
|
if (tipod != 1 && tipod != 7)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
// somma versamenti nel mese adeguato
|
|
|
|
int m = atoi(*_del_mese);
|
|
|
|
|
|
|
|
if (m >= 12)
|
|
|
|
m = tipod == 7 ? 12 : 13;
|
|
|
|
|
|
|
|
versamenti[m-1] += _del->get_real("R0") + _del->get_real("R1");
|
|
|
|
date[m-1] = _del->get_date("D0");
|
|
|
|
banche[m-1].add(_del->get("S7"),0);
|
|
|
|
banche[m-1].add(_del->get("S8"),1);
|
|
|
|
banche[m-1].add(_del->get("S9"),2);
|
|
|
|
}
|
|
|
|
|
|
|
|
TString nomemese(26);
|
|
|
|
|
|
|
|
for (i = 1; i <= 13; i++)
|
|
|
|
{
|
|
|
|
if (!is_month_ok(i))
|
|
|
|
continue;
|
|
|
|
|
|
|
|
TToken_string* tt;
|
|
|
|
if (sv.items() < i) tt = new TToken_string(80);
|
|
|
|
else tt = &(sv.row(i-1));
|
|
|
|
nomemese = itoname(i == 13 ? 12 : i);
|
|
|
|
|
|
|
|
if (i == 12) nomemese << " acconto";
|
|
|
|
if (i == 13) nomemese << " saldo";
|
|
|
|
|
1995-03-13 10:56:27 +00:00
|
|
|
tt->add(""); // questo e' il bottone
|
1995-03-09 08:47:36 +00:00
|
|
|
tt->add(nomemese); // mese
|
|
|
|
tt->add(date[i-1].string()); // data vers.
|
|
|
|
tt->add(banche[i-1].get(0)); // azienda
|
|
|
|
tt->add(banche[i-1].get(1)); // dipendenza
|
|
|
|
tt->add(banche[i-1].get(2)); // concessionaria
|
|
|
|
tt->add(versamenti[i-1].string());// versamenti
|
|
|
|
|
|
|
|
sv.row(i-1) = (*tt);
|
|
|
|
}
|
|
|
|
|
|
|
|
sh.enable_column(0, FALSE);
|
|
|
|
sv.enable_column(0, FALSE);
|
|
|
|
|
|
|
|
sh.force_update();
|
|
|
|
sv.force_update();
|
|
|
|
|
|
|
|
// save initial rows
|
|
|
|
_vers_rows = sv.rows_array();
|
|
|
|
_liq_rows = sh.rows_array();
|
|
|
|
|
|
|
|
m.field(F_CREDPREC).set_dirty(FALSE);
|
|
|
|
m.field(F_VISLIQ1).set_dirty(FALSE);
|
|
|
|
m.field(F_VISLIQ2).set_dirty(FALSE);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void Visliq_app::write_general(TMask& m)
|
|
|
|
{
|
|
|
|
TSheet_field& sh = (TSheet_field&)m.field(F_VISLIQ1);
|
|
|
|
TSheet_field& sv = (TSheet_field&)m.field(F_VISLIQ2);
|
|
|
|
|
|
|
|
if (m.field(F_CREDPREC).dirty())
|
|
|
|
{
|
|
|
|
real r(m.get(F_CREDPREC));
|
|
|
|
_lia->put("R0",r);
|
|
|
|
_lia->rewrite();
|
|
|
|
}
|
|
|
|
|
|
|
|
// credito iniziale
|
|
|
|
real rstart = _lia->get("R0");
|
|
|
|
if (!rstart.is_zero()) rstart = -rstart;
|
|
|
|
|
|
|
|
// indicatore ricalcolo crediti e debiti OK
|
|
|
|
int step = _freqviva == "M" ? 1 : 3;
|
|
|
|
bool carry = TRUE;
|
|
|
|
|
|
|
|
for (int i = step; i < 13; i += step)
|
|
|
|
{
|
|
|
|
// this is a true bordel
|
|
|
|
int row = (i/step) - 1;
|
|
|
|
|
|
|
|
TToken_string& tt_lo = (TToken_string&)_liq_rows[row];
|
|
|
|
TToken_string& tt_ln = sh.row(row);
|
|
|
|
// saltare una riga se dicembre (riga 11 == acconto)
|
|
|
|
TToken_string& tt_vo = (TToken_string&)_vers_rows[i == 12 ? row + 1 : row];
|
|
|
|
TToken_string& tt_vn = sv.row(row);
|
|
|
|
|
|
|
|
// traduci contenuto righe in real pila
|
1995-03-13 10:56:27 +00:00
|
|
|
real orett(tt_lo.get(5));
|
|
|
|
real nrett(tt_ln.get(5));
|
|
|
|
real orimb(tt_lo.get(4));
|
|
|
|
real nrimb(tt_ln.get(4));
|
|
|
|
real overs(tt_vo.get(6));
|
|
|
|
real nvers(tt_vn.get(6));
|
|
|
|
TDate odate(tt_vn.get(2));
|
|
|
|
TDate ndate(tt_vn.get(2));
|
|
|
|
TString odbcr(tt_lo.get(6));
|
|
|
|
TString ndbcr(tt_ln.get(6));
|
|
|
|
TString oabi (tt_vo.get(3));
|
|
|
|
TString nabi (tt_vn.get(3));
|
|
|
|
TString ocab (tt_vo.get(4));
|
|
|
|
TString ncab (tt_vn.get(4));
|
|
|
|
TString ocon (tt_vo.get(5));
|
|
|
|
TString ncon (tt_vn.get(5));
|
1995-03-09 08:47:36 +00:00
|
|
|
|
|
|
|
if (odbcr == "C") orett = -orett;
|
|
|
|
if (ndbcr == "C") nrett = -nrett;
|
|
|
|
|
|
|
|
// acconto (si considerera' solo a dicembre)
|
|
|
|
TToken_string& vo = (TToken_string&)_vers_rows[_freqviva == "M" ? 11 : 3];
|
|
|
|
TToken_string& vn = sv.row(_freqviva == "M" ? 11 : 3);
|
1995-03-13 10:56:27 +00:00
|
|
|
real oacct (vo.get(6));
|
|
|
|
real nacct (vn.get(6));
|
|
|
|
TDate aodate(vn.get(2));
|
|
|
|
TDate andate(vn.get(2));
|
|
|
|
TString aoabi (vo.get(3));
|
|
|
|
TString anabi (vn.get(3));
|
|
|
|
TString aocab (vo.get(4));
|
|
|
|
TString ancab (vn.get(4));
|
|
|
|
TString aocon (vo.get(5));
|
|
|
|
TString ancon (vn.get(5));
|
1995-03-09 08:47:36 +00:00
|
|
|
|
|
|
|
if (!look_lim(i))
|
|
|
|
// blocca riporto crediti e debiti
|
|
|
|
carry = FALSE;
|
|
|
|
|
|
|
|
// ricalcola crediti e debiti se non ci sono
|
|
|
|
// liquidazioni non calcolate in mezzo
|
|
|
|
if (carry)
|
|
|
|
{
|
|
|
|
bool rt_mod = FALSE, rm_mod = FALSE, vr_mod = FALSE;
|
|
|
|
|
|
|
|
real risl = _lim->get_real("R0");
|
|
|
|
real vers = _lim->get_real("R8");
|
|
|
|
real risc = _lim->get_real("R12");
|
|
|
|
real risd = _lim->get_real("R13");
|
|
|
|
|
|
|
|
// ricalcola acconto se occorre
|
|
|
|
// e crea/aggiorna la delega
|
|
|
|
if (i == 12)
|
|
|
|
{
|
|
|
|
bool ac_mod = FALSE;
|
|
|
|
if (oacct != nacct)
|
1995-02-06 11:50:20 +00:00
|
|
|
{
|
1995-03-09 08:47:36 +00:00
|
|
|
risc -= oacct;
|
|
|
|
risc += nacct;
|
|
|
|
risl += oacct;
|
|
|
|
risl -= nacct;
|
|
|
|
_lim->put("R11", nacct);
|
|
|
|
ac_mod = TRUE;
|
|
|
|
}
|
|
|
|
if (ndate != odate || anabi != aoabi || ancab != aocab || ancon != aocon)
|
|
|
|
ac_mod = TRUE;
|
|
|
|
// write delega acconto
|
|
|
|
if (ac_mod)
|
1995-02-06 11:50:20 +00:00
|
|
|
{
|
1995-03-09 08:47:36 +00:00
|
|
|
bool was = look_del(12,7,TRUE);
|
|
|
|
_del->put("R0",nacct);
|
|
|
|
_del->put("R1","");
|
|
|
|
_del->put("S7",anabi);
|
|
|
|
_del->put("S8",ancab);
|
|
|
|
_del->put("S9",ancon);
|
|
|
|
_del->put("S6","6013");
|
|
|
|
if (was) _del->rewrite();
|
|
|
|
else _del->write();
|
|
|
|
}
|
1995-02-06 11:50:20 +00:00
|
|
|
}
|
1995-03-09 08:47:36 +00:00
|
|
|
|
|
|
|
// ricalcola versamenti se occorre
|
|
|
|
// e crea/aggiorna le deleghe
|
|
|
|
if (nvers != overs)
|
|
|
|
{
|
|
|
|
risc -= overs;
|
|
|
|
risc += nvers;
|
|
|
|
risl += overs;
|
|
|
|
risl -= nvers;
|
|
|
|
vr_mod = TRUE;
|
|
|
|
}
|
|
|
|
if (vr_mod || ndate != odate || nabi != oabi ||
|
|
|
|
ncab != ocab || ncon != ocon)
|
|
|
|
{
|
|
|
|
_lim->put("R8", nvers);
|
|
|
|
_lim->put("D0", ndate);
|
|
|
|
_lim->put("S4", nabi);
|
|
|
|
_lim->put("S5", ncab);
|
|
|
|
_lim->put("S6", ncon);
|
|
|
|
write_del();
|
|
|
|
vr_mod = TRUE;
|
1995-02-06 11:50:20 +00:00
|
|
|
}
|
1995-03-09 08:47:36 +00:00
|
|
|
|
|
|
|
// se modificate rettifiche
|
|
|
|
// sistemare
|
|
|
|
if (nrett != orett)
|
|
|
|
{
|
|
|
|
// toglie vecchie
|
|
|
|
risl -= orett;
|
|
|
|
if (orett.sign() < 0)
|
|
|
|
risc += orett;
|
|
|
|
else
|
|
|
|
risd -= orett;
|
|
|
|
// aggiunge nuove
|
|
|
|
risl += nrett;
|
|
|
|
if (orett.sign() < 0)
|
|
|
|
risc -= nrett;
|
|
|
|
else
|
|
|
|
risd += nrett;
|
|
|
|
// scrivi
|
|
|
|
_lim->put("R5",nrett);
|
1995-02-06 11:50:20 +00:00
|
|
|
}
|
|
|
|
|
1995-03-09 08:47:36 +00:00
|
|
|
|
|
|
|
// controlla se qualcosa e' modificato e scrivi
|
|
|
|
// il valore; check compatibilita' versamenti e rimborsi
|
|
|
|
|
|
|
|
// rileggi dati
|
|
|
|
real cred = _lam->get_real("R2");
|
|
|
|
real debt = _lam->get_real("R3");
|
|
|
|
real intt = _lim->get_real("R10");
|
|
|
|
|
|
|
|
// toglie vecchio credito e debito
|
|
|
|
risl += cred;
|
|
|
|
risl -= debt;
|
|
|
|
risc -= cred;
|
|
|
|
risd -= debt;
|
1995-02-06 11:50:20 +00:00
|
|
|
|
1995-03-09 08:47:36 +00:00
|
|
|
// aggiunge nuovo credito o debito
|
|
|
|
if (rstart.sign() < 0 || (rstart.sign() > 0 && rstart < IVA_DA_RIPORTARE))
|
|
|
|
risl += rstart;
|
|
|
|
|
|
|
|
real newcred(0.0);
|
|
|
|
real newdebt(0.0);
|
|
|
|
if (rstart.sign() < 0)
|
1995-02-09 11:33:29 +00:00
|
|
|
{
|
1995-03-09 08:47:36 +00:00
|
|
|
newcred = -rstart;
|
|
|
|
risc -= rstart;
|
1995-02-09 11:33:29 +00:00
|
|
|
}
|
1995-03-09 08:47:36 +00:00
|
|
|
if (rstart.sign() > 0 && rstart < IVA_DA_RIPORTARE)
|
1994-12-23 11:56:34 +00:00
|
|
|
{
|
1995-03-09 08:47:36 +00:00
|
|
|
newdebt = rstart;
|
|
|
|
risd += rstart;
|
1995-01-05 10:31:00 +00:00
|
|
|
}
|
1995-03-09 08:47:36 +00:00
|
|
|
|
|
|
|
// se modificato rimborso sistemare
|
|
|
|
if (nrimb != orimb)
|
1995-01-11 10:19:32 +00:00
|
|
|
{
|
1995-03-09 08:47:36 +00:00
|
|
|
// check compatibilita'
|
|
|
|
bool ok = (_lim->get_bool("B2") && risc > risd) || nrimb.is_zero();
|
|
|
|
if (!ok)
|
|
|
|
ok = yesno_box("Non risulta diritto al rimborso per il mese %d. Si conferma"
|
|
|
|
" ugualmente il rimborso?", i);
|
|
|
|
if (ok)
|
1995-01-27 11:00:50 +00:00
|
|
|
{
|
1995-03-09 08:47:36 +00:00
|
|
|
// togli vecchio
|
|
|
|
risd -= orimb;
|
|
|
|
risl -= orimb;
|
|
|
|
// aggiungi nuovo
|
|
|
|
risd += nrimb;
|
|
|
|
risl += nrimb;
|
|
|
|
// scrivi
|
|
|
|
_lim->put("R1", nrimb);
|
1995-01-27 11:00:50 +00:00
|
|
|
}
|
1995-03-09 08:47:36 +00:00
|
|
|
}
|
|
|
|
// TBI controlla compatibilita' versamenti
|
1994-12-23 11:56:34 +00:00
|
|
|
|
1995-03-09 08:47:36 +00:00
|
|
|
_lam->put("R2", newcred);
|
|
|
|
_lam->put("R3", newdebt);
|
|
|
|
_lim->put("R0", risl);
|
|
|
|
_lim->put("R12", risc);
|
|
|
|
_lim->put("R13", risd);
|
1994-12-23 11:56:34 +00:00
|
|
|
|
1995-03-09 08:47:36 +00:00
|
|
|
// interessi
|
|
|
|
if (intt.sign() > 0)
|
|
|
|
{
|
|
|
|
real intr = risl * (intt/real(100.0));
|
|
|
|
_lim->put("R14",intr);
|
|
|
|
}
|
1994-12-23 11:56:34 +00:00
|
|
|
|
1995-03-09 08:47:36 +00:00
|
|
|
_lim->rewrite();
|
|
|
|
_lam->rewrite();
|
|
|
|
|
|
|
|
rstart = risl;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
// salva i valori modificati senza fare controlli
|
|
|
|
// e rimetti a lui i suoi debiti mettendo B0 a FALSE
|
|
|
|
if (orett != nrett)
|
|
|
|
_lim->put("R5", nrett);
|
|
|
|
if (orimb != nrimb)
|
|
|
|
_lim->put("R1", nrimb);
|
|
|
|
_lim->put("B0", "");
|
|
|
|
_lim->rewrite();
|
|
|
|
}
|
|
|
|
|
|
|
|
// Rimetti a posto righe sheet se serve
|
|
|
|
int sr0 = (_lim->get_real("R0")).sign();
|
|
|
|
int sr5 = (_lim->get_real("R5")).sign();
|
|
|
|
|
1995-03-13 10:56:27 +00:00
|
|
|
tt_ln.add(abs(_lim->get_real("R0")).string(),2);
|
|
|
|
tt_ln.add(sr0 == 0 ? "" : (sr0 > 0 ? "D" : "C"), 3);
|
|
|
|
tt_ln.add((_lim->get_real("R1")).string(),4);
|
|
|
|
tt_ln.add(abs(_lim->get_real("R5")).string(),5);
|
|
|
|
tt_ln.add(sr5 == 0 ? "" : (sr5 > 0 ? "D" : "C"),6);
|
1995-03-09 08:47:36 +00:00
|
|
|
|
|
|
|
sh.force_update(row);
|
|
|
|
|
|
|
|
} // for mese liq. (riga sheet)
|
|
|
|
|
|
|
|
// Rileggi array righe vecchie
|
|
|
|
_vers_rows = sv.rows_array();
|
|
|
|
_liq_rows = sh.rows_array();
|
1994-12-23 11:56:34 +00:00
|
|
|
|
1995-03-09 08:47:36 +00:00
|
|
|
// m.dirty() deve ritornare FALSE
|
|
|
|
m.field(F_CREDPREC).set_dirty(FALSE);
|
|
|
|
m.field(F_VISLIQ1).set_dirty(FALSE);
|
|
|
|
m.field(F_VISLIQ2).set_dirty(FALSE);
|
1994-12-23 11:56:34 +00:00
|
|
|
}
|
|
|
|
|
1995-03-09 08:47:36 +00:00
|
|
|
|
|
|
|
|
1994-12-23 11:56:34 +00:00
|
|
|
int cg5500(int argc, char* argv[])
|
|
|
|
{
|
|
|
|
Visliq_app app;
|
|
|
|
app.run(argc, argv, "Visualizzazione Liquidazione");
|
|
|
|
return 0;
|
|
|
|
}
|