campo-sirio/m770/771230.cpp
alex ba705bffeb 1o Merge della 97.02
git-svn-id: svn://10.65.10.50/trunk@4705 c028cbd2-c16b-5b4b-a496-9718f37d4682
1997-06-18 09:52:29 +00:00

452 lines
11 KiB
C++
Executable File

// 771230.cpp - Quadri C, D, D bis, D1, E, E1, E2
#include <relapp.h>
#include <msksheet.h>
#include "caus77.h"
#include "77lib.h"
#include "scperc.h"
#include "defmask.h"
#include "771230.h"
#include "774200.h"
class TQuadroC_E2 : public TRelation_application
{
private:
TString16 _quadro; // Codice del quadro in gestione
int _file;
bool _registra; // Se TRUE fa i riporti
TRelation* _rel;
TMask* _msk;
long _codditta;
private:
bool QuadroC() const { return _quadro == "C"; }
bool QuadroD() const { return _quadro == "D"; }
bool QuadroDbis() const { return _quadro == "DB"; }
bool QuadroD1() const { return _quadro == "D1"; }
bool QuadroE() const { return _quadro == "E"; }
bool QuadroE1() const { return _quadro == "E1"; }
bool QuadroE2() const { return _quadro == "E2"; }
protected:
virtual bool user_create();
virtual bool user_destroy();
virtual int read(TMask& m);
virtual int rewrite(const TMask& m);
virtual int write (const TMask& m);
virtual bool remove();
virtual TRelation* get_relation() const { return _rel; }
virtual bool changing_mask(int mode) { return FALSE; }
virtual TMask* get_mask(int mode) { return _msk; }
virtual void init_query_mode (TMask&);
virtual void init_insert_mode (TMask&);
virtual void init_modify_mode (TMask&);
protected:
void fill_sheet(const TMask&);
void pack_sheet(const TMask&);
static bool ricalcola_imposte_c(TMask_field& f, KEY key);
static bool ricalcola_imposte_d(TMask_field& f, KEY key);
static bool ricalcola_imposte_dbis(TMask_field& f, KEY key);
static bool ricalcola_imposte_e(TMask_field& f, KEY key);
static bool ricalcola_imposte_e1(TMask_field& f, KEY key);
static bool prospetto_e1_notify(TSheet_field& s, int r, KEY k);
void reset_prospetto_e1();
void read_prospetto_e1();
int write_prospetto_e1();
static bool ricalcola_imposte_e2(TMask_field& f, KEY key);
static bool ritenute_handler_e2(TMask_field& f, KEY key);
public:
TQuadroC_E2(const char* quadro);
virtual ~TQuadroC_E2() {};
};
inline TQuadroC_E2& app() { return (TQuadroC_E2&)main_app(); }
TQuadroC_E2::TQuadroC_E2(const char* quadro)
: _msk(NULL), _rel(NULL), _quadro(quadro), _file(0)
{
}
int TQuadroC_E2::rewrite(const TMask& m)
{
pack_sheet(m);
int err = TRelation_application::rewrite(m);
if (err == NOERR && QuadroE1())
err = write_prospetto_e1();
if (err == NOERR)
_registra = TRUE;
return err;
}
int TQuadroC_E2::read(TMask& m)
{
int err = TRelation_application::read(m);
if (err == NOERR && QuadroE1())
read_prospetto_e1();
return err;
}
int TQuadroC_E2::write(const TMask& m)
{
pack_sheet(m);
int err = TRelation_application::write(m);
if (err == NOERR && QuadroE1())
err = write_prospetto_e1();
if (err == NOERR)
_registra = TRUE;
return err;
}
bool TQuadroC_E2::remove()
{
bool ok = TRelation_application::remove();
if (ok && QuadroE1())
{
reset_prospetto_e1();
write_prospetto_e1();
_registra = TRUE;
}
return ok;
}
bool TQuadroC_E2::user_create()
{
_codditta = get_firm_770();
_registra = FALSE;
TFilename name("771230");
name << _quadro;
_msk = new TMask(name);
set_search_field(F_CODANAGR);
TSheet_field& s = (TSheet_field&)_msk->field(F_RIGHE);
TMask& m = s.sheet_mask();
if (QuadroC())
{
_file = LF_QUAC;
m.set_handler(102, ricalcola_imposte_c);
m.set_handler(105, ricalcola_imposte_c);
m.set_handler(107, ricalcola_imposte_c);
m.set_handler(108, ricalcola_imposte_c);
} else
if (QuadroD())
{
_file = LF_QUAD;
m.set_handler(102, ricalcola_imposte_d);
m.set_handler(104, ricalcola_imposte_d);
m.set_handler(105, ricalcola_imposte_d);
m.set_handler(106, ricalcola_imposte_d);
m.set_handler(107, ricalcola_imposte_d);
} else
if (QuadroD1())
{
_file = LF_QUAD1;
m.set_handler(102, ricalcola_imposte_d);
m.set_handler(104, ricalcola_imposte_d);
m.set_handler(105, ricalcola_imposte_d);
m.set_handler(106, ricalcola_imposte_d);
m.set_handler(107, ricalcola_imposte_d);
} else
if (QuadroDbis())
{
_file = LF_QUADBIS;
m.set_handler(102, ricalcola_imposte_dbis);
m.set_handler(104, ricalcola_imposte_dbis);
m.set_handler(105, ricalcola_imposte_dbis);
m.set_handler(106, ricalcola_imposte_dbis);
m.set_handler(107, ricalcola_imposte_dbis);
} else
if (QuadroE())
{
_file = LF_QUAE;
m.set_handler(104, ricalcola_imposte_e);
m.set_handler(105, ricalcola_imposte_e);
} else
if (QuadroE1())
{
_file = LF_QUAE1;
m.set_handler(105, ricalcola_imposte_e1);
m.set_handler(106, ricalcola_imposte_e1);
TSheet_field& s = (TSheet_field&)_msk->field(F_PROSPETTO);
s.set_notify(prospetto_e1_notify);
} else
if (QuadroE2())
{
_file = LF_QUAE2;
m.set_handler(103, ricalcola_imposte_e2);
m.set_handler(104, ricalcola_imposte_e2);
m.set_handler(105, ritenute_handler_e2);
}
_rel = new TRelation(_file);
return TRUE;
}
bool TQuadroC_E2::user_destroy()
{
if (_registra)
{
TRiporti rip;
rip.set(_quadro);
}
delete _rel;
delete _msk;
return TRUE;
}
void TQuadroC_E2::init_query_mode(TMask& m)
{
m.set(F_CODDITTA, _codditta);
TSheet_field& sf = (TSheet_field&)m.field(F_RIGHE);
sf.destroy();
if (QuadroE1())
reset_prospetto_e1();
}
void TQuadroC_E2::init_insert_mode(TMask& m)
{
fill_sheet(m);
}
void TQuadroC_E2::init_modify_mode(TMask& m)
{
fill_sheet(m);
}
void TQuadroC_E2::fill_sheet(const TMask& m)
{
TSheet_field& sf = (TSheet_field&)m.field(F_RIGHE);
for (int r = sf.items(); r < 16; r++)
sf.row(r);
}
void TQuadroC_E2::pack_sheet(const TMask& m)
{
TSheet_field& sf = (TSheet_field&)m.field(F_RIGHE);
for (int r = sf.items(); r >= 0; r--)
{
TToken_string& row = sf.row(r);
if (row.empty_items())
sf.destroy(r);
}
}
bool TQuadroC_E2::ricalcola_imposte_c(TMask_field& f, KEY key)
{
if (key == K_TAB && f.focusdirty())
{
TMask& m = f.mask();
if (m.get_bool(115) == FALSE) // Calcola solo se non generata dalle schede
{
if (f.dlg() == 105 || f.dlg() == 107)
{
real amm_lordo = m.get(105);
real somme_non = m.get(107);
real imponibile = amm_lordo - somme_non;
m.set(108, imponibile);
}
real aliquota = m.get(102);
real imponibile = m.get(108);
real imposta = aliquota * imponibile / 100.0;
m.set(109, imposta, TRUE);
}
}
return TRUE;
}
bool TQuadroC_E2::ricalcola_imposte_d(TMask_field& f, KEY key)
{
if (key == K_TAB && f.focusdirty())
{
TMask& m = f.mask();
if (m.get_bool(109) == FALSE) // Calcola solo se non generata dalle schede
{
if (f.dlg() >= 104 && f.dlg() <= 106 )
{
real imponibile = m.get(104); // Ammontare lordo
imponibile -= m.get_real(105); // Somme non soggette
imponibile -= m.get_real(106); // " " " reg. conv.
m.set(107, imponibile);
}
real aliquota = m.get(102);
real imponibile = m.get(107);
real imposta = imponibile * aliquota / 100.0;
m.set(108, imposta);
}
}
return TRUE;
}
bool TQuadroC_E2::ricalcola_imposte_dbis(TMask_field& f, KEY key)
{
if (key == K_TAB && f.focusdirty())
{
TMask& m = f.mask();
if (m.get_bool(110) == FALSE) // Calcola solo se non generata dalle schede
{
if (f.dlg() >= 104 && f.dlg() <= 106 )
{
real imponibile = m.get(104); // Ammontare lordo
imponibile -= m.get_real(105); // Somme non soggette
imponibile -= m.get_real(106); // " " " reg. conv.
m.set(107, imponibile);
}
real aliquota = m.get(102);
real imponibile = m.get(107);
real imposta = imponibile * aliquota / 100.0;
m.set(108, imposta);
}
}
return TRUE;
}
bool TQuadroC_E2::ricalcola_imposte_e(TMask_field& f, KEY key)
{
if (key == K_TAB && f.focusdirty())
{
TMask& m = f.mask();
real aliquota = m.get(105);
real imponibile = m.get(104);
real imposta = imponibile * aliquota / 100.0;
m.set(106, imposta, TRUE);
}
return TRUE;
}
bool TQuadroC_E2::ricalcola_imposte_e1(TMask_field& f, KEY key)
{
if (key == K_TAB && f.focusdirty())
{
TMask& m = f.mask();
real imponibile = m.get(105);
real aliquota = m.get(106);
real imposta = imponibile * aliquota / 100.0;
m.set(107, imposta, TRUE);
}
return TRUE;
}
bool TQuadroC_E2::ricalcola_imposte_e2(TMask_field& f, KEY key)
{
if (key == K_TAB && f.focusdirty())
{
TMask& m = f.mask();
real imponibile = m.get(103);
real aliquota = m.get(104);
real imposta = imponibile * aliquota / 100.0;
m.set(105, imposta);
}
return TRUE;
}
bool TQuadroC_E2::ritenute_handler_e2(TMask_field& f, KEY key)
{
if (key == K_TAB && f.focusdirty() || key == K_ENTER)
{
TMask& m = f.mask();
real imponibile = m.get(103);
real aliquota = m.get(104);
real imposta = imponibile * aliquota / 100.0;
real imp = f.get();
if (imposta != imp)
f.warning_box("Importo ritenuta non corretto");
}
return TRUE;
}
bool TQuadroC_E2::prospetto_e1_notify(TSheet_field& s, int r, KEY k)
{
bool ok = TRUE;
if (k == K_INS || k == K_DEL)
ok = FALSE;
return ok;
}
void TQuadroC_E2::reset_prospetto_e1()
{
TSheet_field& s = (TSheet_field&)_msk->field(F_PROSPETTO);
s.row(0) = "C";
s.row(1) = "D";
}
void TQuadroC_E2::read_prospetto_e1()
{
TSheet_field& s = (TSheet_field&)_msk->field(F_PROSPETTO);
TLocalisamfile prosp(LF_PROSPE1);
TRectype& curr = prosp.curr();
curr.put("CODDITTA", _codditta);
for (int r = 0; r < 2; r++)
{
curr.put("CODCAUS", char('C'+r));
if (prosp.read() == NOERR)
{
TToken_string& row = s.row(r);
row.cut(0);
row << char('C'+r);
row.add(curr.get("COMPENSO"));
row.add(curr.get("IMPONIBILE"));
row.add(curr.get("RITENUTA"));
}
}
}
int TQuadroC_E2::write_prospetto_e1()
{
int error = NOERR;
TSheet_field& s = (TSheet_field&)_msk->field(F_PROSPETTO);
TLocalisamfile prosp(LF_PROSPE1);
TRectype& curr = prosp.curr();
for (int r = 0; r < 2; r++)
{
TToken_string& row = s.row(r);
real compenso = row.get(1);
real imponibile = row.get();
real ritenuta = row.get();
bool empty = compenso.is_zero() && imponibile.is_zero() && ritenuta.is_zero();
curr.put("CODDITTA", _codditta);
curr.put("CODCAUS", char('C'+r));
if (!empty)
{
curr.put("COMPENSO", compenso);
curr.put("IMPONIBILE", imponibile);
curr.put("RITENUTA", ritenuta);
int err = prosp.rewrite();
if (err != NOERR)
err = prosp.write();
if (err != NOERR)
error = err;
}
else
prosp.remove();
}
return error;
}
int quadriC_E2(int argc, char* argv[])
{
TString16 taitol;
taitol << "Quadro ";
if (strnicmp(argv[2], "DB", 2) == 0)
taitol << "D bis";
else
taitol << argv[2];
TQuadroC_E2 a(argv[2]);
a.run(argc, argv, taitol);
return TRUE;
}