5fde0436de
Nuovi dari per CU git-svn-id: svn://10.65.10.50/branches/R_10_00@23176 c028cbd2-c16b-5b4b-a496-9718f37d4682
360 lines
8.1 KiB
C++
Executable File
360 lines
8.1 KiB
C++
Executable File
// Programma per la gestione e la stampa della dichiarazione periodica IVA
|
|
#include <applicat.h>
|
|
#include <automask.h>
|
|
#include <form.h>
|
|
#include <recarray.h>
|
|
#include <reprint.h>
|
|
#include <sheet.h>
|
|
|
|
#include <nditte.h>
|
|
|
|
#include "cg5800.h"
|
|
#include "cglib03.h"
|
|
|
|
class TQuadro_VT_selfirm_mask : public TAutomask
|
|
{
|
|
TArray_sheet * _ditte;
|
|
int _year;
|
|
|
|
protected:
|
|
bool select_button();
|
|
void build_ditte_sheet();
|
|
|
|
public:
|
|
const int get_year() const { return _year; }
|
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
|
TQuadro_VT_selfirm_mask();
|
|
~TQuadro_VT_selfirm_mask();
|
|
};
|
|
|
|
TQuadro_VT_selfirm_mask::TQuadro_VT_selfirm_mask() : TAutomask("cg5800a")
|
|
{
|
|
_ditte = new TArray_sheet(-1, -1, -4, -4, TR("Selezione Ditte"), HR("Cod.@5|Ragione Sociale@50"));
|
|
const TDate oggi(TODAY);
|
|
_year = oggi.year();
|
|
|
|
build_ditte_sheet();
|
|
}
|
|
|
|
TQuadro_VT_selfirm_mask::~TQuadro_VT_selfirm_mask()
|
|
{
|
|
delete _ditte;
|
|
}
|
|
|
|
void TQuadro_VT_selfirm_mask::build_ditte_sheet()
|
|
{
|
|
TTable pum("PUM");
|
|
|
|
_ditte->destroy();
|
|
TPointer_array firms;
|
|
TPrefix::firms(firms);
|
|
|
|
long good_company = -1;
|
|
|
|
FOR_EACH_ARRAY_ITEM(firms, i, obj)
|
|
{
|
|
TToken_string* d = new TToken_string(63);
|
|
const long codditta = firms.get_long(i);
|
|
d->add(codditta);
|
|
d->add(cache().get(LF_NDITTE, codditta, NDT_RAGSOC));
|
|
const long pos = _ditte->add(d);
|
|
|
|
pum.put("CODTAB", _year);
|
|
if (pum.read(_isgteq) == NOERR && atoi(pum.get("CODTAB").left(4)) == _year)
|
|
{
|
|
if (good_company <= 0)
|
|
good_company = pos;
|
|
}
|
|
else
|
|
_ditte->disable_row(pos);
|
|
}
|
|
|
|
if (good_company >= 0)
|
|
{
|
|
TToken_string& row = _ditte->row(good_company);
|
|
set(F_CODDITTA, row.get(0));
|
|
set(F_RAGSOC, row.get(1));
|
|
}
|
|
else
|
|
{
|
|
reset(F_CODDITTA);
|
|
reset(F_RAGSOC);
|
|
}
|
|
|
|
}
|
|
|
|
bool TQuadro_VT_selfirm_mask::select_button()
|
|
{
|
|
if (_ditte->run() == K_ENTER)
|
|
{
|
|
TToken_string& row = _ditte->row(_ditte->selected());
|
|
set(F_CODDITTA, row.get(0));
|
|
set(F_RAGSOC, row.get(1));
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool TQuadro_VT_selfirm_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
|
{
|
|
switch (o.dlg())
|
|
{
|
|
case F_CODDITTA:
|
|
if (e == fe_button)
|
|
return select_button();
|
|
|
|
if (e == fe_modify)
|
|
{
|
|
bool found = false;
|
|
TString16 ditta = o.get();
|
|
for (int i = 0; i < _ditte->items(); i++)
|
|
{
|
|
TToken_string& row = _ditte->row(i);
|
|
if (ditta == row.get(0))
|
|
{
|
|
if (_ditte->row_enabled(i))
|
|
{
|
|
set(F_CODDITTA, row.get(0));
|
|
set(F_RAGSOC, row.get(1));
|
|
found = true;
|
|
}
|
|
else
|
|
{
|
|
warning_box(FR("Non sono definiti i parametri liquidazione per la ditta %ld"),
|
|
atol(ditta));
|
|
o.reset();
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
if (!found)
|
|
o.reset();
|
|
return found;
|
|
}
|
|
break;
|
|
case F_RAGSOC:
|
|
if (e == fe_button)
|
|
return select_button();
|
|
if (e == fe_modify)
|
|
{
|
|
bool found = false;
|
|
TString8 ditta = o.get();
|
|
for (int i = 0; i < _ditte->items(); i++)
|
|
{
|
|
TToken_string& row = _ditte->row(i);
|
|
TString ts(row.get(1));
|
|
if (ts.find(ditta) != -1)
|
|
{
|
|
if (_ditte->row_enabled(i))
|
|
{
|
|
set(F_CODDITTA, row.get(0));
|
|
set(F_RAGSOC, row.get(1));
|
|
found = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (!found) o.reset();
|
|
return found;
|
|
}
|
|
break;
|
|
case F_YEAR:
|
|
if (e == fe_modify)
|
|
{
|
|
_year = atoi(o.get());
|
|
build_ditte_sheet();
|
|
set(F_CODDITTA, "");
|
|
set(F_RAGSOC, "");
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
class TQuadro_VT_iva_form : public TForm
|
|
{
|
|
public:
|
|
TQuadro_VT_iva_form() : TForm("cg5800a") {}
|
|
};
|
|
|
|
class TQuadro_VT_iva_mask : public TAutomask
|
|
{
|
|
TQuadro_VT_selfirm_mask* _sf;
|
|
|
|
protected:
|
|
void read_iva_data();
|
|
|
|
public:
|
|
void set_prospect();
|
|
void print_prospect();
|
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
|
TQuadro_VT_iva_mask(TQuadro_VT_selfirm_mask *m) : TAutomask("cg5800b"), _sf(m) { }
|
|
};
|
|
|
|
void TQuadro_VT_iva_mask::read_iva_data()
|
|
{
|
|
TTable pem("PEM");
|
|
real tprimp, tpriva, timp, tiva;
|
|
TString16 key;
|
|
|
|
key.format("%04d00", _sf->get_year());
|
|
pem.put("CODTAB", key);
|
|
int err = pem.read();
|
|
|
|
|
|
if (err == NOERR)
|
|
{
|
|
set(F_TOTIVIMP, pem.get("R0"));
|
|
set(F_TOTIVIVA, pem.get("R1"));
|
|
timp += pem.get_real("R0");
|
|
tiva += pem.get_real("R1");
|
|
|
|
for (int codreg = 1;codreg < 23; codreg++)
|
|
{
|
|
key.format("%04d%02d", _sf->get_year(), codreg);
|
|
pem.put("CODTAB", key);
|
|
err = pem.read();
|
|
|
|
if (err == NOERR)
|
|
{
|
|
set(F_REGIMP(codreg - 1), pem.get("R0"));
|
|
set(F_REGIVA(codreg - 1), pem.get("R1"));
|
|
tprimp += pem.get_real("R0");
|
|
tpriva += pem.get_real("R1");
|
|
timp += pem.get_real("R0");
|
|
tiva += pem.get_real("R1");
|
|
}
|
|
}
|
|
set(F_TOTIMP, timp);
|
|
set(F_TOTIVA, tiva);
|
|
set(F_TOTPRIMP, tprimp);
|
|
set(F_TOTPRIVA, tpriva);
|
|
}
|
|
else
|
|
warning_box(FR("Risultati liquidazione non presenti o da ricalcolare per l'anno %d."), _sf->get_year());
|
|
}
|
|
|
|
void TQuadro_VT_iva_mask::print_prospect()
|
|
{
|
|
const int anno = _sf->get_int(F_YEAR);
|
|
TQuadro_VT_iva_form frm;
|
|
|
|
frm.find_field('B', odd_page, FF_YEAR).set(get(F_YEAR));
|
|
frm.find_field('B', odd_page, FF_TOTIMP).set(get(F_TOTIMP));
|
|
frm.find_field('B', odd_page, FF_TOTIVA).set(get(F_TOTIVA));
|
|
frm.find_field('B', odd_page, FF_TOTPRIMP).set(get(F_TOTPRIMP));
|
|
frm.find_field('B', odd_page, FF_TOTPRIVA).set(get(F_TOTPRIVA));
|
|
frm.find_field('B', odd_page, FF_TOTIVIMP).set(get(F_TOTIVIMP));
|
|
frm.find_field('B', odd_page, FF_TOTIVIVA).set(get(F_TOTIVIVA));
|
|
|
|
for (int reg = 0; reg < 22; reg++)
|
|
{
|
|
frm.find_field('B', odd_page, FF_REGIMP(reg)).set(get(F_REGIMP(reg)));
|
|
frm.find_field('B', odd_page, FF_REGIVA(reg)).set(get(F_REGIVA(reg)));
|
|
}
|
|
|
|
TRectype f(LF_NDITTE);
|
|
f.put(NDT_CODDITTA, get(F_CODDITTA));
|
|
|
|
frm.cursor()->setregion(f,f);
|
|
frm.print();
|
|
}
|
|
|
|
bool TQuadro_VT_iva_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
|
{
|
|
switch (o.dlg())
|
|
{
|
|
case DLG_PRELPR:
|
|
if (e == fe_button)
|
|
{
|
|
TReport rep;
|
|
if (rep.load("cg5800ra.rep"))
|
|
{
|
|
TRecordset* r = rep.recordset();
|
|
if (r != NULL)
|
|
{
|
|
const TVariant var = get(F_YEAR);
|
|
r->set_var("#ANNO", var);
|
|
}
|
|
rep.print_or_preview();
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
void TQuadro_VT_iva_mask::set_prospect()
|
|
{
|
|
CHECK(_sf, "Invalid mask");
|
|
|
|
const int anno = _sf->get_year();
|
|
const long ditta = _sf->get_long(F_CODDITTA);
|
|
|
|
set(F_YEAR, anno);
|
|
set(F_CODDITTA, ditta);
|
|
set(F_RAGSOC, _sf->get(F_RAGSOC));
|
|
|
|
TFirm frm(ditta);
|
|
|
|
TIva_round ir;
|
|
ir.set_default_iva_mode(anno, false, ditta);
|
|
|
|
read_iva_data();
|
|
}
|
|
|
|
class TQuadro_VT_iva_app : public TSkeleton_application
|
|
{
|
|
protected:
|
|
virtual bool create();
|
|
virtual void main_loop();
|
|
public:
|
|
virtual bool firm_change_enabled() const { return false; }
|
|
};
|
|
|
|
bool TQuadro_VT_iva_app::create()
|
|
{
|
|
open_files(LF_TAB, LF_TABCOM, LF_NDITTE, 0);
|
|
return TSkeleton_application::create();
|
|
}
|
|
|
|
void TQuadro_VT_iva_app::main_loop()
|
|
{
|
|
const long ditta = get_firm();
|
|
|
|
TQuadro_VT_selfirm_mask* m1 = new TQuadro_VT_selfirm_mask();
|
|
while (m1->run() != K_QUIT)
|
|
{
|
|
if (m1->get(F_CODDITTA).empty() || m1->get(F_RAGSOC).empty())
|
|
{
|
|
error_box(TR("Selezionare una ditta"));
|
|
continue;
|
|
}
|
|
|
|
set_firm(m1->get_long(F_CODDITTA));
|
|
|
|
TQuadro_VT_iva_mask* m2 = new TQuadro_VT_iva_mask(m1);
|
|
m2->reset();
|
|
m2->enable_default();
|
|
m2->set_prospect();
|
|
if (m2->run() == K_ENTER)
|
|
m2->print_prospect();
|
|
delete m2;
|
|
}
|
|
delete m1;
|
|
|
|
set_firm(ditta);
|
|
}
|
|
|
|
int cg5800(int argc, char* argv[])
|
|
{
|
|
TQuadro_VT_iva_app a;
|
|
a.run(argc, argv, TR("Quadro VT"));
|
|
return 0;
|
|
} |