Files correlati :771.exe Ricompilazione Demo : [ ] Commento :corretti errori compilazione AGA 32 bit git-svn-id: svn://10.65.10.50/trunk@10687 c028cbd2-c16b-5b4b-a496-9718f37d4682
1350 lines
35 KiB
C++
Executable File
1350 lines
35 KiB
C++
Executable File
// 771230.cpp - Quadri C, D, D bis, D1, E, E1, E2,
|
||
// Dal 2002 il Quadro LA riassume SC ed SE, che a loro volta erano D e D1)
|
||
|
||
#include <msksheet.h>
|
||
#include <progind.h>
|
||
#include <recarray.h>
|
||
#include <relapp.h>
|
||
|
||
#include "77lib.h"
|
||
#include "771230.h"
|
||
#include "774200.h"
|
||
#include "defmask.h"
|
||
|
||
#include <anagr.h>
|
||
#include "caus77.h"
|
||
#include "quadroc.h"
|
||
#include "quadrod.h"
|
||
#include "quadrod1.h"
|
||
#include "quadroe.h"
|
||
#include "quadroe1.h"
|
||
#include "prospe1.h"
|
||
#include "rpag.h"
|
||
#include "scperc.h"
|
||
|
||
TString _quadronuovo;
|
||
|
||
///////////////////////////////////////////////////////////
|
||
// Righe pagamento delle schede percipienti
|
||
///////////////////////////////////////////////////////////
|
||
|
||
// Somma tutti i campi contenenti importi
|
||
TRectype& operator += (TRectype& dst, const TRectype& src)
|
||
{
|
||
for (int i = dst.items()-1; i >= 0; i--)
|
||
{
|
||
const char* name = dst.fieldname(i);
|
||
if (dst.type(name) == _realfld && dst.length(name) >= 9)
|
||
{
|
||
real num = dst.get_real(name);
|
||
num += src.get_real(name);
|
||
dst.put(name, num);
|
||
}
|
||
}
|
||
return dst;
|
||
}
|
||
|
||
class TRighe_pagamento : public TAssoc_array
|
||
{
|
||
TString _quadro; // Codice quadro
|
||
TArray _prosp_e1; // Righe prospetto e1
|
||
|
||
public:
|
||
void add_riga(const TRectype& scheda, const TRectype& riga);
|
||
|
||
const TRectype* prospetto_e1(char caus);
|
||
|
||
TRighe_pagamento(const char* quadro);
|
||
virtual ~TRighe_pagamento() { }
|
||
};
|
||
|
||
TRighe_pagamento::TRighe_pagamento(const char* quadro)
|
||
: _quadro(quadro)
|
||
{ }
|
||
|
||
const TRectype* TRighe_pagamento::prospetto_e1(char caus)
|
||
{
|
||
const int index = caus - 'C';
|
||
return (const TRectype*)_prosp_e1.objptr(index);
|
||
}
|
||
|
||
void TRighe_pagamento::add_riga(const TRectype& scheda, const TRectype& riga)
|
||
{
|
||
TString16 chiave;
|
||
|
||
const char causqua = toupper(scheda.get_char(SPR_CAUSQUA));
|
||
chiave << causqua;
|
||
if (_quadro == "C")
|
||
chiave << scheda.get(SPR_FLAGTS); else
|
||
if (_quadro == "E1")
|
||
{
|
||
// Le righe del prospetto vengono trattate a parte
|
||
if (causqua >= 'C')
|
||
{
|
||
const int index = causqua - 'C';
|
||
TRectype* rec = (TRectype*)_prosp_e1.objptr(index);
|
||
if (rec)
|
||
*rec += riga;
|
||
else
|
||
_prosp_e1.add(riga, index);
|
||
return;
|
||
}
|
||
chiave << riga.get("PERC");
|
||
}
|
||
|
||
TRectype* rec = (TRectype*)objptr(chiave);
|
||
if (rec)
|
||
{
|
||
*rec += riga;
|
||
if (_quadro == "C") // Nel caso di quadro C somma anche i giorni detr dip.
|
||
{
|
||
const int gglav = rec->get_int(PAG_GIOLAVDIP) + riga.get_int(PAG_GIOLAVDIP);
|
||
rec->put(PAG_GIOLAVDIP,gglav);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
rec = new TRectype(riga);
|
||
add(chiave, rec);
|
||
}
|
||
|
||
if (_quadro == "DB")
|
||
{
|
||
// Calcola il flag per il contributo del 10%
|
||
// Esso deve essere A se tutte le righe sono A,
|
||
// C se tutte sono C, B in tutti gli altri casi
|
||
char cod10 = toupper(riga.get_char(PAG_COD10)); // Valore scheda attuale
|
||
if (cod10 < 'A' || cod10 > 'C') // Mette a posto archivi incompleti
|
||
cod10 = 'B';
|
||
char lcq = rec->get_char(PAG_COD10); // Valore ultima scheda
|
||
switch (lcq)
|
||
{
|
||
case 'A':
|
||
if (cod10 != 'A')
|
||
lcq = 'B';
|
||
break;
|
||
case 'B':
|
||
break;
|
||
case 'C':
|
||
if (cod10 != 'C')
|
||
lcq = 'B';
|
||
break;
|
||
default:
|
||
lcq = cod10;
|
||
break;
|
||
}
|
||
rec->put(PAG_COD10, lcq); // Aggiorna valore
|
||
}
|
||
}
|
||
|
||
///////////////////////////////////////////////////////////
|
||
// Gestione quadri C - E2
|
||
///////////////////////////////////////////////////////////
|
||
|
||
class TQuadroC_E2 : public TRelation_application
|
||
{
|
||
private:
|
||
TString8 _quadro; // Codice del quadro in gestione
|
||
int _file;
|
||
bool _registra; // Se TRUE fa i riporti
|
||
TRelation* _rel;
|
||
TMask* _msk, *_mskp;
|
||
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"; }
|
||
bool QuadroLA() const { return _quadro == "LA"; }
|
||
|
||
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_query_insert_mode (TMask&);
|
||
virtual void init_insert_mode (TMask&);
|
||
virtual void init_modify_mode (TMask&);
|
||
|
||
protected:
|
||
void fill_sheet(const TMask& m);
|
||
void pack_sheet(const TMask& m);
|
||
|
||
TSheet_field& find_sheet(const TMask& m) const;
|
||
void read_sheet(TMask& m) const;
|
||
int write_sheet(const TMask& m, bool re) const;
|
||
int remove_sheet(const TMask& m) const;
|
||
|
||
void genera_aliquota(TRectype& quadro, const char* aliquota,
|
||
const char* imponibile, const char* imposta) const;
|
||
void genera_c(TRectype& quadro, const TRectype& riga) const;
|
||
void genera_d(TRectype& quadro, const TRectype& riga) const;
|
||
void genera_d_bis(TRectype& quadro, const TRectype& riga) const;
|
||
void genera_d1(TRectype& quadro, const TRectype& riga) const;
|
||
void genera_e(TRectype& quadro, const TRectype& riga) const;
|
||
void genera_e1(TRectype& quadro, const TRectype& riga) const;
|
||
void genera_la(TRectype& quadro, const TRectype& riga) const;
|
||
void genera_righe(TRighe_pagamento& righe) const;
|
||
void distruzione() const;
|
||
void generazione();
|
||
|
||
static bool codice_handler(TMask_field& f, KEY key);
|
||
static bool genera_handler(TMask_field& f, KEY key);
|
||
static bool prospbtn_handler(TMask_field& f, KEY key);
|
||
|
||
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_la(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() const;
|
||
void read_prospetto_e1() const;
|
||
int write_prospetto_e1() const;
|
||
|
||
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), _mskp(NULL), _rel(NULL), _quadro(quadro), _file(0)
|
||
{
|
||
}
|
||
|
||
TSheet_field& TQuadroC_E2::find_sheet(const TMask& m) const
|
||
{
|
||
for (int f = m.fields()-1; f > 0; f--)
|
||
{
|
||
if (m.fld(f).is_kind_of(CLASS_SHEET_FIELD))
|
||
break;
|
||
}
|
||
CHECK(f > 0, "Cant' find the spreadsheet");
|
||
return (TSheet_field&)m.fld(f);
|
||
}
|
||
|
||
void TQuadroC_E2::read_sheet(TMask& m) const
|
||
{
|
||
TSheet_field& sheet = find_sheet(m);
|
||
sheet.destroy();
|
||
TRectype key(get_relation()->curr());
|
||
key.zero("NPROG");
|
||
TRecord_array a(key, "NPROG");
|
||
|
||
TMask& sm = sheet.sheet_mask();
|
||
for (int r = 0; r < a.rows(); r++)
|
||
{
|
||
const TRectype& rec = a.row(r+1);
|
||
TToken_string& row = sheet.row(r);
|
||
for (short id = 101; ; id++)
|
||
{
|
||
const int pos = sm.id2pos(id);
|
||
if (pos >= 0)
|
||
{
|
||
TMask_field& mf = sm.fld(pos);
|
||
const TFieldref* fr = mf.field();
|
||
if (fr)
|
||
row.add(fr->read(rec));
|
||
else
|
||
row.add("");
|
||
}
|
||
else
|
||
break;
|
||
}
|
||
sheet.check_row(r);
|
||
}
|
||
}
|
||
|
||
int TQuadroC_E2::write_sheet(const TMask& m, bool re) const
|
||
{
|
||
TRectype rec(get_relation()->curr());
|
||
rec.zero("NPROG");
|
||
TRecord_array a(rec, "NPROG");
|
||
a.destroy_rows();
|
||
|
||
TSheet_field& sheet = find_sheet(m);
|
||
TMask& sm = sheet.sheet_mask();
|
||
|
||
TString val;
|
||
for (int r = 0; r < sheet.items(); r++)
|
||
{
|
||
TToken_string& row = sheet.row(r);
|
||
rec.put("NPROG", r+1);
|
||
for (short id = FIRST_FIELD; ; id++)
|
||
{
|
||
const int pos = sm.id2pos(id);
|
||
if (pos >= 0)
|
||
{
|
||
TMask_field& mf = sm.fld(pos);
|
||
const TFieldref* fr = mf.field();
|
||
if (fr)
|
||
{
|
||
val = row.get(id - FIRST_FIELD);
|
||
fr->write(val, rec);
|
||
}
|
||
}
|
||
else
|
||
break;
|
||
}
|
||
a.add_row(rec);
|
||
}
|
||
return a.write(re);
|
||
}
|
||
|
||
int TQuadroC_E2::remove_sheet(const TMask& m) const
|
||
{
|
||
TSheet_field& sheet = find_sheet(m);
|
||
sheet.destroy();
|
||
return write_sheet(m, TRUE);
|
||
}
|
||
|
||
int TQuadroC_E2::rewrite(const TMask& m)
|
||
{
|
||
pack_sheet(m);
|
||
int err = TRelation_application::rewrite(m);
|
||
if (err == NOERR)
|
||
err = write_sheet(m, TRUE);
|
||
if (err == NOERR)
|
||
_registra = TRUE;
|
||
return err;
|
||
}
|
||
|
||
int TQuadroC_E2::read(TMask& m)
|
||
{
|
||
int err = TRelation_application::read(m);
|
||
if (err == NOERR)
|
||
read_sheet(m);
|
||
return err;
|
||
}
|
||
|
||
int TQuadroC_E2::write(const TMask& m)
|
||
{
|
||
pack_sheet(m);
|
||
int err = TRelation_application::write(m);
|
||
if (err == NOERR)
|
||
err = write_sheet(m, FALSE);
|
||
if (err == NOERR)
|
||
_registra = TRUE;
|
||
return err;
|
||
}
|
||
|
||
bool TQuadroC_E2::remove()
|
||
{
|
||
bool ok = TRelation_application::remove();
|
||
if (ok)
|
||
{
|
||
remove_sheet(curr_mask());
|
||
_registra = TRUE;
|
||
}
|
||
return ok;
|
||
}
|
||
|
||
bool TQuadroC_E2::user_create()
|
||
{
|
||
_codditta = get_firm_770();
|
||
_registra = FALSE;
|
||
|
||
TString8 name("771230");
|
||
name << _quadro;
|
||
_msk = new TMask(name);
|
||
|
||
_msk->first_focus(F_CODANAGR);
|
||
set_search_field(F_CODANAGR);
|
||
_msk->set_handler(F_CODANAGR, codice_handler);
|
||
|
||
if (_msk->id2pos(F_GENERA) >= 0)
|
||
_msk->set_handler(F_GENERA, genera_handler);
|
||
|
||
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()) // Obsoleto dal 2002: confluito in LA
|
||
{
|
||
_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()) // Obsoleto dal 2002: confluito in LA
|
||
{
|
||
_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(103, ricalcola_imposte_e);
|
||
m.set_handler(104, ricalcola_imposte_e);
|
||
} else
|
||
if (QuadroE1())
|
||
{
|
||
_msk->set_handler(F_PROSPBTN, prospbtn_handler);
|
||
_file = LF_QUAE1;
|
||
m.set_handler(105, ricalcola_imposte_e1);
|
||
m.set_handler(106, ricalcola_imposte_e1);
|
||
_mskp = new TMask("771230pr");
|
||
TSheet_field& s = (TSheet_field&)_mskp->field(F_PROSPETTO);
|
||
s.set_notify(prospetto_e1_notify);
|
||
read_prospetto_e1();
|
||
} 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);
|
||
} else
|
||
if (QuadroLA()) // Nuovo del 2002: riassume SC ed SE
|
||
{
|
||
_file = LF_QUALA;
|
||
m.set_handler(102, ricalcola_imposte_la);
|
||
m.set_handler(105, ricalcola_imposte_la);
|
||
m.set_handler(106, ricalcola_imposte_la);
|
||
m.set_handler(107, ricalcola_imposte_la);
|
||
m.set_handler(108, ricalcola_imposte_la);
|
||
}
|
||
|
||
_rel = new TRelation(_file);
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
bool TQuadroC_E2::user_destroy()
|
||
{
|
||
if (_registra)
|
||
{
|
||
TRiporti rip;
|
||
rip.set(_quadro);
|
||
}
|
||
|
||
delete _rel;
|
||
delete _msk;
|
||
if (_mskp)
|
||
delete _mskp;
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
void TQuadroC_E2::init_query_mode(TMask& m)
|
||
{
|
||
m.set(F_CODDITTA, _codditta);
|
||
|
||
if (_msk->id2pos(F_GENERA) >= 0)
|
||
m.show(F_GENERA);
|
||
|
||
m.show(F_CODANAGR);
|
||
m.hide(H_CODANAGR);
|
||
|
||
TSheet_field& sf = (TSheet_field&)m.field(F_RIGHE);
|
||
sf.destroy();
|
||
}
|
||
|
||
void TQuadroC_E2::init_query_insert_mode(TMask& m)
|
||
{
|
||
m.set(F_CODDITTA, _codditta);
|
||
m.show(H_CODANAGR);
|
||
m.hide(F_CODANAGR);
|
||
}
|
||
|
||
void TQuadroC_E2::init_insert_mode(TMask& m)
|
||
{
|
||
if (m.id2pos(F_GENERA) >= 0)
|
||
m.hide(F_GENERA);
|
||
fill_sheet(m);
|
||
}
|
||
|
||
void TQuadroC_E2::init_modify_mode(TMask& m)
|
||
{
|
||
if (m.id2pos(F_GENERA) >= 0)
|
||
m.hide(F_GENERA);
|
||
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);
|
||
|
||
if (QuadroD() || QuadroDbis())
|
||
{
|
||
TLocalisamfile anagr(LF_ANAG);
|
||
anagr.put(ANA_TIPOA, m.get(F_TIPOA));
|
||
anagr.put(ANA_CODANAGR, m.get(F_CODANAGR));
|
||
bool estero = FALSE;
|
||
if (anagr.read() == NOERR)
|
||
estero = anagr.get_bool(ANA_SOGGNRES);
|
||
TMask& sm = sf.sheet_mask();
|
||
sm.enable(106, estero); // Somme non sogg. reg. conv.
|
||
sf.enable_column(106, estero);
|
||
}
|
||
}
|
||
|
||
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);
|
||
}
|
||
}
|
||
|
||
void TQuadroC_E2::distruzione() const
|
||
{
|
||
TWait_cursor hourglass;
|
||
TRelation rel(_file);
|
||
TRectype& curr = rel.curr();
|
||
curr.put("CODDITTA", _codditta);
|
||
|
||
const char* filter = "";
|
||
if (curr.exist("GENERATA"))
|
||
filter = "GENERATA=\"X\"";
|
||
|
||
TCursor cur(&rel, filter, 1, &curr, &curr);
|
||
long items = cur.items();
|
||
cur.freeze();
|
||
for (cur = 0L; cur.pos() < items; ++cur)
|
||
rel.remove();
|
||
cur.freeze(FALSE);
|
||
|
||
if (QuadroE1())
|
||
{
|
||
TLocalisamfile prosp(LF_PROSPE1);
|
||
prosp.put("CODDITTA", _codditta);
|
||
|
||
for (int err = prosp.read(_isgteq); err == NOERR; err = prosp.next())
|
||
{
|
||
if (prosp.get_long("CODDITTA") != _codditta)
|
||
break;
|
||
prosp.remove();
|
||
}
|
||
}
|
||
|
||
if (curr.exist("NPROG"))
|
||
{
|
||
items = cur.items();
|
||
cur.freeze();
|
||
TRectype last(_file);
|
||
long nextnumber = 1;
|
||
for (cur = 0L; cur.pos() < items; ++cur)
|
||
{
|
||
if (!curr.same_key(last,1,1))
|
||
{
|
||
nextnumber = 1;
|
||
last = curr;
|
||
}
|
||
long nprog = curr.get_long("NPROG");
|
||
if (nprog > nextnumber)
|
||
{
|
||
rel.remove();
|
||
curr.put("NPROG", nextnumber);
|
||
rel.write();
|
||
}
|
||
nextnumber++;
|
||
}
|
||
}
|
||
//bool same_key(const TRectype& rec, int key = 1, int skip_last = 0) const
|
||
}
|
||
|
||
void TQuadroC_E2::genera_aliquota(TRectype& quadro, const char* aliquota,
|
||
const char* imponibile, const char* imposta) const
|
||
{
|
||
real aliq = quadro.get_real(aliquota);
|
||
if (aliq == ZERO)
|
||
{
|
||
const real impon = quadro.get(imponibile);
|
||
if (impon != ZERO)
|
||
{
|
||
const real impos = quadro.get(imposta);
|
||
aliq = impos * 100.0 / impon;
|
||
if (aliq % real(1.0) == ZERO)
|
||
quadro.put(aliquota, aliq);
|
||
}
|
||
}
|
||
}
|
||
|
||
void TQuadroC_E2::genera_c(TRectype& quadro, const TRectype& riga) const
|
||
{
|
||
quadro.put(QUC_PERC, riga.get(PAG_PERC));
|
||
|
||
real ammlordo = riga.get(PAG_IMPONIBILE);
|
||
ammlordo += riga.get_real(PAG_SOMNSRIT);
|
||
ammlordo += riga.get_real(PAG_CONTROBB);
|
||
ammlordo += riga.get_real(PAG_SOMREGCONV);
|
||
quadro.put(QUC_AMMLORDO, ammlordo); // 13
|
||
|
||
quadro.put(QUC_CONTROBB, riga.get(PAG_CONTROBB)); // 14
|
||
|
||
real somme = riga.get_real(PAG_COMPENSO);
|
||
somme -= riga.get_real(PAG_IMPONIBILE);
|
||
somme += riga.get_real(PAG_SPESA);
|
||
somme -= riga.get_real(PAG_IMPCPA);
|
||
somme -= riga.get_real(PAG_SOMREGCONV);
|
||
quadro.put(QUC_SOMNONSOGG, somme); // 15
|
||
|
||
quadro.put(QUC_IMPONIBILE, riga.get(PAG_IMPONIBILE)); // 16
|
||
quadro.put(QUC_IMPOSTA, riga.get(PAG_RITLORDA)); // 17
|
||
quadro.put(QUC_DETCARFAM, riga.get(PAG_DETFAMIL)); // 18
|
||
quadro.put(QUC_GGLAVDIP, riga.get(PAG_GIOLAVDIP)); // 19
|
||
quadro.put(QUC_DETLAVDIP, riga.get(PAG_DETLAVDIP)); // 20
|
||
quadro.put(QUC_TOTDET, riga.get(PAG_TOTDET)); // 21
|
||
quadro.put(QUC_RITENUTE, riga.get(PAG_RITENUTA)); // 22
|
||
|
||
genera_aliquota(quadro, QUC_PERC, QUC_IMPONIBILE, QUC_IMPOSTA);
|
||
}
|
||
|
||
void TQuadroC_E2::genera_d(TRectype& quadro, const TRectype& riga) const
|
||
{
|
||
quadro.put(QUD_PERC, riga.get(PAG_PERC));
|
||
|
||
real ammlordo = riga.get(PAG_IMPONIBILE);
|
||
ammlordo += riga.get_real(PAG_SOMNSRIT);
|
||
ammlordo += riga.get_real(PAG_CONTROBB);
|
||
ammlordo += riga.get_real(PAG_SOMREGCONV);
|
||
quadro.put(QUD_TOTALE, ammlordo); // 16
|
||
|
||
real somme = riga.get_real(PAG_COMPENSO);
|
||
somme -= riga.get_real(PAG_IMPONIBILE);
|
||
somme += riga.get_real(PAG_SPESA);
|
||
somme -= riga.get_real(PAG_IMPCPA);
|
||
somme -= riga.get_real(PAG_SOMREGCONV);
|
||
quadro.put(QUD_SOMME, somme); // 17
|
||
|
||
quadro.put(QUD_SOMREGCONV, riga.get(PAG_SOMREGCONV)); // 18
|
||
quadro.put(QUD_IMPONIBILE, riga.get(PAG_IMPONIBILE)); // 19
|
||
quadro.put(QUD_IMPORTO, riga.get(PAG_RITENUTA)); // 20
|
||
|
||
genera_aliquota(quadro, QUD_PERC, QUD_IMPONIBILE, QUD_IMPORTO);
|
||
}
|
||
|
||
void TQuadroC_E2::genera_d_bis(TRectype& quadro, const TRectype& riga) const
|
||
{
|
||
genera_d(quadro, riga);
|
||
quadro.put("CONTR10", riga.get(PAG_COD10));
|
||
}
|
||
|
||
void TQuadroC_E2::genera_d1(TRectype& quadro, const TRectype& riga) const
|
||
{
|
||
quadro.put(QD1_PERC, riga.get(PAG_PERC));
|
||
|
||
real ammlordo = riga.get(PAG_IMPONIBILE);
|
||
ammlordo += riga.get_real(PAG_SOMNSRIT);
|
||
ammlordo += riga.get_real(PAG_CONTROBB);
|
||
ammlordo += riga.get_real(PAG_SOMREGCONV);
|
||
quadro.put(QD1_TOTALE, ammlordo); // 12
|
||
|
||
quadro.put(QD1_SPESEANT, riga.get_real(PAG_SPESA)); // 13
|
||
|
||
real quota = riga.get_real(PAG_SOMNSRIT);
|
||
quota -= riga.get_real(PAG_SPESA);
|
||
quadro.put(QD1_QUOTAPRO, quota); // 14
|
||
|
||
quadro.put(QD1_IMPONIBILE, riga.get_real(PAG_IMPONIBILE)); // 15
|
||
quadro.put(QD1_IMPORTO, riga.get(PAG_RITENUTA)); // 16
|
||
|
||
genera_aliquota(quadro, QD1_PERC, QD1_IMPONIBILE, QD1_IMPORTO);
|
||
}
|
||
|
||
void TQuadroC_E2::genera_e(TRectype& quadro, const TRectype& riga) const
|
||
{
|
||
quadro.put(QUE_PERC, riga.get(PAG_PERC));
|
||
|
||
quadro.put(QUE_IMPONIBILE, riga.get(PAG_IMPONIBILE)); // 12
|
||
quadro.put(QUE_IMPORTO, riga.get(PAG_RITENUTA)); // 14
|
||
|
||
real netto = riga.get(PAG_IMPONIBILE);
|
||
netto -= riga.get_real(PAG_RITENUTA);
|
||
quadro.put(QUE_NETTO, netto); // 15
|
||
|
||
real nonsog = riga.get(PAG_COMPENSO);
|
||
nonsog -= riga.get_real(PAG_IMPONIBILE);
|
||
nonsog += riga.get_real(PAG_SPESA);
|
||
quadro.put(QUE_SOMME, nonsog); // 16
|
||
|
||
genera_aliquota(quadro, QUE_PERC, QUE_IMPONIBILE, QUE_IMPORTO); // 13
|
||
}
|
||
|
||
void TQuadroC_E2::genera_e1(TRectype& quadro, const TRectype& riga) const
|
||
{
|
||
quadro.put(QE1_PERC, riga.get(PAG_PERC));
|
||
|
||
real somme = riga.get(PAG_COMPENSO);
|
||
somme += riga.get_real(PAG_SPESA);
|
||
quadro.put(QE1_SOMME, somme); // 12
|
||
|
||
quadro.put(QE1_AMMONTARE, riga.get(PAG_IMPONIBILE)); // 13
|
||
|
||
quadro.put(QE1_IMPORTO, riga.get(PAG_RITENUTA)); // 15
|
||
|
||
quadro.put(QE1_NETTO, riga.get(PAG_NETTO)); // 16
|
||
|
||
genera_aliquota(quadro, QE1_PERC, QE1_AMMONTARE, QUE_IMPORTO); // 14
|
||
}
|
||
|
||
void TQuadroC_E2::genera_la(TRectype& quadro, const TRectype& riga) const
|
||
{
|
||
quadro.put(QUD_PERC, riga.get(PAG_PERC));
|
||
|
||
real ammlordo = riga.get(PAG_IMPONIBILE);
|
||
ammlordo += riga.get_real(PAG_SOMNSRIT);
|
||
ammlordo += riga.get_real(PAG_CONTROBB);
|
||
ammlordo += riga.get_real(PAG_SOMREGCONV);
|
||
quadro.put(QUD_TOTALE, ammlordo); // 16
|
||
|
||
real somme = riga.get_real(PAG_COMPENSO);
|
||
somme -= riga.get_real(PAG_IMPONIBILE);
|
||
somme += riga.get_real(PAG_SPESA);
|
||
somme -= riga.get_real(PAG_IMPCPA);
|
||
somme -= riga.get_real(PAG_SOMREGCONV);
|
||
quadro.put(QUD_SOMME, somme); // 17
|
||
|
||
quadro.put(QUD_SOMREGCONV, riga.get(PAG_SOMREGCONV)); // 18
|
||
quadro.put(QUD_IMPONIBILE, riga.get(PAG_IMPONIBILE)); // 19
|
||
quadro.put(QUD_IMPORTO, riga.get(PAG_RITENUTA)); // 20
|
||
|
||
genera_aliquota(quadro, QUD_PERC, QUD_IMPONIBILE, QUD_IMPORTO);
|
||
}
|
||
|
||
|
||
void TQuadroC_E2::genera_righe(TRighe_pagamento& righe) const
|
||
{
|
||
TLocalisamfile file(_file);
|
||
TRectype& curr = file.curr();
|
||
int nriga = 1;
|
||
righe.restart();
|
||
for (THash_object* ho = righe.get_hashobj(); ho; ho = righe.get_hashobj(), nriga++)
|
||
{
|
||
const TString& chiave = ho->key();
|
||
const TRectype& riga = (const TRectype&)ho->obj();
|
||
|
||
curr.zero();
|
||
curr.put(PAG_CODDITTA, riga.get(PAG_CODDITTA));
|
||
curr.put(PAG_TIPOA, riga.get(PAG_TIPOA));
|
||
curr.put(PAG_CODANAGR, riga.get(PAG_CODANAGR));
|
||
curr.put("NPROG", nriga);
|
||
curr.put("CAUSALE", chiave[0]);
|
||
curr.put("GENERATA", bool(TRUE));
|
||
|
||
switch (_quadro[0])
|
||
{
|
||
case 'C':
|
||
curr.put("TASSAZIONE", chiave[1]);
|
||
genera_c(curr, riga);
|
||
break;
|
||
case 'D':
|
||
switch(_quadro[1])
|
||
{
|
||
case '1': genera_d1(curr, riga); break;
|
||
case 'B': genera_d_bis(curr, riga); break;
|
||
default : genera_d(curr, riga); break;
|
||
}
|
||
break;
|
||
case 'E':
|
||
if (_quadro[1] == '1')
|
||
genera_e1(curr, riga);
|
||
else
|
||
{
|
||
if (_quadro[1] == '\0')
|
||
genera_e(curr, riga);
|
||
}
|
||
break;
|
||
case 'L':
|
||
if (_quadro[1] == 'A')
|
||
genera_la(curr, riga);
|
||
break;
|
||
default:
|
||
CHECK(FALSE, "Quadro non generabile dalle schede");
|
||
break;
|
||
}
|
||
|
||
int err = file.write();
|
||
while (err == _isreinsert)
|
||
{
|
||
curr.put("NPROG",++nriga);
|
||
err = file.write();
|
||
}
|
||
if (err != NOERR)
|
||
error_box("Errore %d durante la scrittura della riga %d", err, nriga);
|
||
}
|
||
|
||
// genera prospetto e1;
|
||
if (QuadroE1())
|
||
{
|
||
TLocalisamfile prospe1(LF_PROSPE1);
|
||
TRectype& rec = prospe1.curr();
|
||
|
||
bool first = TRUE;
|
||
for (char caus = 'C'; caus <= 'E'; caus++)
|
||
{
|
||
const TRectype* riga = righe.prospetto_e1(caus);
|
||
if (riga != NULL)
|
||
{
|
||
rec.put(PRE_CODDITTA, _codditta);
|
||
rec.put(PRE_CODCAUS, caus);
|
||
int err = prospe1.read();
|
||
|
||
if (err != NOERR || first)
|
||
{
|
||
rec.put(PRE_CODDITTA, _codditta);
|
||
rec.put(PRE_CODCAUS, caus);
|
||
rec.zero(PRE_COMPENSO);
|
||
rec.zero(PRE_IMPONIBILE);
|
||
rec.zero(PRE_RITENUTA);
|
||
}
|
||
|
||
real val = rec.get_real(PRE_COMPENSO) + riga->get_real(PAG_COMPENSO) + riga->get_real(PAG_SPESA);
|
||
rec.put(PRE_COMPENSO, val);
|
||
|
||
val = rec.get_real(PRE_IMPONIBILE) + riga->get_real(PAG_IMPONIBILE);
|
||
rec.put(PRE_IMPONIBILE, val);
|
||
|
||
val = rec.get_real(PRE_RITENUTA) + riga->get_real(PAG_RITENUTA);
|
||
rec.put(PRE_RITENUTA, val);
|
||
|
||
if (err == NOERR)
|
||
err = prospe1.rewrite();
|
||
else
|
||
err = prospe1.write();
|
||
|
||
if (err != NOERR)
|
||
error_box("Errore %d durante la scrittura della riga %c del prospetto",
|
||
err, caus);
|
||
}
|
||
|
||
first = FALSE;
|
||
}
|
||
read_prospetto_e1();
|
||
}
|
||
}
|
||
|
||
void TQuadroC_E2::generazione()
|
||
{
|
||
TRelation rel(LF_SCPERC);
|
||
rel.add(LF_RPAG, "CODDITTA=CODDITTA|TIPOA=TIPOA|CODANAGR=CODANAGR|NPROG=NPROG");
|
||
rel.add("%CA7", "CODTAB=CODCAUS");
|
||
|
||
TRectype rec(LF_SCPERC);
|
||
rec.put(SPR_CODDITTA, _codditta);
|
||
|
||
TCursor cur(&rel, NULL, 1, &rec, &rec);
|
||
|
||
TString16 filter; filter.format("(%d->S1=\"%s\")", LF_TABCOM, (const char*)_quadronuovo);
|
||
cur.setfilter(filter, TRUE);
|
||
|
||
const int anno770 = anno_770();
|
||
const long items = cur.items();
|
||
const TRectype& scheda = cur.curr();
|
||
const TRectype& riga = cur.curr(LF_RPAG);
|
||
|
||
TProgind pi (items, "Generazionde da schede.", TRUE, TRUE, 60);
|
||
|
||
distruzione();
|
||
|
||
char last_type = ' ';
|
||
long last_code = 0L;
|
||
|
||
TRighe_pagamento righe(_quadro);
|
||
|
||
for (cur = 0; cur.pos() < items; ++cur)
|
||
{
|
||
pi.addstatus(1);
|
||
if (pi.iscancelled())
|
||
break;
|
||
|
||
const char tipoa = scheda.get_char(SPR_TIPOA);
|
||
const long codanagr = scheda.get_long(SPR_CODANAGR);
|
||
if (tipoa != last_type || codanagr != last_code)
|
||
{
|
||
if (righe.items() > 0)
|
||
{
|
||
genera_righe(righe);
|
||
righe.destroy();
|
||
}
|
||
last_type = tipoa;
|
||
last_code = codanagr;
|
||
}
|
||
|
||
bool ok = cur.is_first_match(LF_RPAG);
|
||
while (ok)
|
||
{
|
||
const TDate datapag = riga.get(PAG_DATAPAG);
|
||
if (datapag.year() == anno770)
|
||
righe.add_riga(scheda, riga);
|
||
ok = cur.next_match(LF_RPAG);
|
||
}
|
||
}
|
||
|
||
if (righe.items() > 0)
|
||
genera_righe(righe);
|
||
_registra = TRUE;
|
||
}
|
||
|
||
bool TQuadroC_E2::codice_handler(TMask_field& f, KEY key)
|
||
{
|
||
bool ok = TRUE;
|
||
if (key == K_TAB && f.to_check(key))
|
||
{
|
||
TEdit_field& e = f.mask().efield(H_CODANAGR);
|
||
e.set(f.get());
|
||
if (!e.check())
|
||
return f.error_box(e.get_warning());
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
bool TQuadroC_E2::genera_handler(TMask_field& f, KEY key)
|
||
{
|
||
if (key == K_SPACE)
|
||
{
|
||
if (yesno_box("Il quadro verr<72> completamente eliminato:\n"
|
||
"Confermare la generazione dalle schede"))
|
||
app().generazione();
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
bool TQuadroC_E2::prospbtn_handler(TMask_field& f, KEY key)
|
||
{
|
||
if (key == K_SPACE)
|
||
{
|
||
if (app()._mskp->run() == K_ENTER)
|
||
app().write_prospetto_e1();
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
bool TQuadroC_E2::ricalcola_imposte_c(TMask_field& f, KEY key)
|
||
{
|
||
if (key == K_F8)
|
||
{
|
||
f.reset();
|
||
f.set_dirty();
|
||
key = K_TAB;
|
||
}
|
||
|
||
if (key == K_TAB && f.focusdirty() ||
|
||
key == K_ENTER && f.dlg() == 105)
|
||
{
|
||
TMask& m = f.mask();
|
||
|
||
const real imponibile_v = m.get_real(105) - m.get_real(106) - m.get_real(107);
|
||
real imponibile = m.get(108);
|
||
if (imponibile.is_zero())
|
||
{
|
||
imponibile = imponibile_v;
|
||
m.set(108, imponibile_v);
|
||
}
|
||
else
|
||
{
|
||
if (key == K_ENTER && imponibile != imponibile_v)
|
||
f.warning_box("L'imponibile dovrebbe essere %s", imponibile_v.string("."));
|
||
}
|
||
|
||
const real imposta_v = m.get_real(102) * imponibile / 100.0;
|
||
real imposta = m.get(109);
|
||
if (imposta.is_zero())
|
||
{
|
||
imposta = imposta_v;
|
||
m.set(109, imposta);
|
||
}
|
||
else
|
||
{
|
||
if (key == K_ENTER && imposta != imposta_v)
|
||
f.warning_box("L'imposta dovrebbe essere %s", imposta_v.string("."));
|
||
}
|
||
|
||
real totdet = m.get_real(110) + m.get_real(112);
|
||
if (totdet > imposta) totdet = imposta;
|
||
m.set(113, totdet);
|
||
|
||
const real ritenute_v = imposta - totdet;
|
||
real ritenute = m.get(114);
|
||
if (ritenute.is_zero())
|
||
{
|
||
ritenute = ritenute_v;
|
||
m.set(114, ritenute);
|
||
}
|
||
else
|
||
if (key == K_ENTER && ritenute != ritenute_v)
|
||
f.warning_box("Le ritenute dovrebbero essere %s", ritenute_v.string("."));
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
bool TQuadroC_E2::ricalcola_imposte_d(TMask_field& f, KEY key)
|
||
{
|
||
if (key == K_F8)
|
||
{
|
||
f.reset();
|
||
f.set_dirty();
|
||
key = K_TAB;
|
||
}
|
||
|
||
if (key == K_TAB && f.focusdirty() ||
|
||
key == K_ENTER && f.dlg() == 104)
|
||
{
|
||
TMask& m = f.mask();
|
||
|
||
const real imponibile_v = m.get_real(104) - m.get_real(105) - m.get_real(106);
|
||
real imponibile = m.get(107);
|
||
if (imponibile.is_zero())
|
||
{
|
||
imponibile = imponibile_v;
|
||
m.set(107, imponibile);
|
||
}
|
||
else
|
||
{
|
||
if (key == K_ENTER && imponibile != imponibile_v)
|
||
{
|
||
const TCurrency imponibile_c(imponibile_v);
|
||
f.warning_box("L'imponibile dovrebbe essere %s", imponibile_c.string(TRUE));
|
||
}
|
||
}
|
||
|
||
const real imposta_v = m.get_real(102) * imponibile / 100.0;
|
||
real imposta = m.get(108);
|
||
if (imposta.is_zero())
|
||
{
|
||
imposta = imposta_v;
|
||
m.set(108, imposta);
|
||
}
|
||
else
|
||
{
|
||
if (key == K_ENTER && imposta != imposta_v)
|
||
{
|
||
const TCurrency imposta_c(imposta_v);
|
||
f.warning_box("L'imposta dovrebbe essere %s", imposta_c.string(TRUE));
|
||
}
|
||
}
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
bool TQuadroC_E2::ricalcola_imposte_dbis(TMask_field& f, KEY key)
|
||
{
|
||
return ricalcola_imposte_d(f, key);
|
||
}
|
||
|
||
bool TQuadroC_E2::ricalcola_imposte_e(TMask_field& f, KEY key)
|
||
{
|
||
if (key == K_F8)
|
||
{
|
||
f.reset();
|
||
f.set_dirty();
|
||
key = K_TAB;
|
||
}
|
||
|
||
if (key == K_TAB && f.focusdirty() || key == K_ENTER && f.dlg() == 104)
|
||
{
|
||
TMask& m = f.mask();
|
||
const real ritenuta_v = m.get_real(103) * m.get_real(104) / 100.0;
|
||
real ritenuta = m.get(105);
|
||
if (ritenuta.is_zero())
|
||
{
|
||
ritenuta = ritenuta_v;
|
||
m.set(105, ritenuta);
|
||
}
|
||
else
|
||
{
|
||
if (key == K_ENTER && ritenuta != ritenuta_v)
|
||
f.warning_box("L'imposta dovrebbe essere %s", ritenuta_v.string("."));
|
||
}
|
||
|
||
const real somme_v = m.get_real(103) - ritenuta;
|
||
real somme = m.get(106);
|
||
if (somme.is_zero())
|
||
{
|
||
somme = somme_v;
|
||
m.set(106, somme);
|
||
}
|
||
else
|
||
{
|
||
if (key == K_ENTER && somme != somme_v)
|
||
f.warning_box("Il netto corrisposto dovrebbe essere %s",
|
||
somme.string("."));
|
||
}
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
bool TQuadroC_E2::ricalcola_imposte_e1(TMask_field& f, KEY key)
|
||
{
|
||
if (key == K_F8)
|
||
{
|
||
f.reset();
|
||
f.set_dirty();
|
||
key = K_TAB;
|
||
}
|
||
|
||
if (key == K_TAB && f.focusdirty() || key == K_ENTER && f.dlg() == 105)
|
||
{
|
||
TMask& m = f.mask();
|
||
const real ritenuta_v = m.get_real(105) * m.get_real(106) / 100.0;
|
||
real ritenuta = m.get(107);
|
||
if (ritenuta.is_zero())
|
||
{
|
||
ritenuta = ritenuta_v;
|
||
m.set(107, ritenuta);
|
||
}
|
||
else
|
||
{
|
||
if (key == K_ENTER && ritenuta != ritenuta_v)
|
||
f.warning_box("L'imposta dovrebbe essere %s", ritenuta_v.string("."));
|
||
}
|
||
|
||
const real somme_v = m.get_real(105) - ritenuta;
|
||
real somme = m.get(108);
|
||
if (somme.is_zero())
|
||
{
|
||
somme = somme_v;
|
||
m.set(108, somme);
|
||
}
|
||
else
|
||
{
|
||
if (key == K_ENTER && somme != somme_v)
|
||
f.warning_box("Il netto corrisposto dovrebbe essere %s",
|
||
somme.string("."));
|
||
}
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
bool TQuadroC_E2::ricalcola_imposte_e2(TMask_field& f, KEY key)
|
||
{
|
||
if (key == K_F8)
|
||
{
|
||
f.reset();
|
||
f.set_dirty();
|
||
key = K_TAB;
|
||
}
|
||
|
||
if (key == K_TAB && f.focusdirty() || key == K_ENTER && f.dlg() == 103)
|
||
{
|
||
TMask& m = f.mask();
|
||
const real imposta_v = m.get_real(103) * m.get_real(104) / 100.0;
|
||
real imposta = m.get(105);
|
||
if (imposta.is_zero())
|
||
{
|
||
imposta = imposta_v;
|
||
m.set(105, imposta);
|
||
}
|
||
else
|
||
{
|
||
if (key == K_ENTER && imposta != imposta_v)
|
||
f.warning_box("L'imposta dovrebbe essere %s", imposta_v.string("."));
|
||
}
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
bool TQuadroC_E2::ricalcola_imposte_la(TMask_field& f, KEY key)
|
||
{
|
||
if (key == K_F8)
|
||
{
|
||
f.reset();
|
||
f.set_dirty();
|
||
key = K_TAB;
|
||
}
|
||
|
||
if (key == K_TAB && f.focusdirty() ||
|
||
key == K_ENTER && f.dlg() == 105)
|
||
{
|
||
TMask& m = f.mask();
|
||
|
||
const real imponibile_v = m.get_real(105) - m.get_real(106) - m.get_real(107);
|
||
real imponibile = m.get(108);
|
||
if (imponibile.is_zero())
|
||
{
|
||
imponibile = imponibile_v;
|
||
m.set(108, imponibile);
|
||
}
|
||
else
|
||
{
|
||
if (key == K_ENTER && imponibile != imponibile_v)
|
||
{
|
||
const TCurrency imponibile_c(imponibile_v);
|
||
f.warning_box("L'imponibile dovrebbe essere %s", imponibile_c.string(TRUE));
|
||
}
|
||
}
|
||
|
||
const real imposta_v = m.get_real(102) * imponibile / 100.0;
|
||
real imposta = m.get(109);
|
||
if (imposta.is_zero())
|
||
{
|
||
imposta = imposta_v;
|
||
m.set(109, imposta);
|
||
}
|
||
else
|
||
{
|
||
if (key == K_ENTER && imposta != imposta_v)
|
||
{
|
||
const TCurrency imposta_c(imposta_v);
|
||
f.warning_box("L'imposta dovrebbe essere %s", imposta_c.string(TRUE));
|
||
}
|
||
}
|
||
}
|
||
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 imposta = m.get_real(103) * m.get_real(104) / 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::read_prospetto_e1() const
|
||
{
|
||
if (_mskp == NULL)
|
||
return;
|
||
TSheet_field& s = (TSheet_field&)_mskp->field(F_PROSPETTO);
|
||
TLocalisamfile prosp(LF_PROSPE1);
|
||
TRectype& curr = prosp.curr();
|
||
curr.put("CODDITTA", _codditta);
|
||
for (int r = 0; r < 3; r++)
|
||
{
|
||
TToken_string& row = s.row(r);
|
||
row.cut(0);
|
||
row << char('C'+r);
|
||
curr.put("CODCAUS", char('C'+r));
|
||
if (prosp.read() == NOERR)
|
||
{
|
||
row.add(curr.get("COMPENSO"));
|
||
row.add(curr.get("IMPONIBILE"));
|
||
row.add(curr.get("RITENUTA"));
|
||
}
|
||
}
|
||
}
|
||
|
||
int TQuadroC_E2::write_prospetto_e1() const
|
||
{
|
||
if (_mskp == NULL)
|
||
return NOERR;
|
||
int error = NOERR;
|
||
TSheet_field& s = (TSheet_field&)_mskp->field(F_PROSPETTO);
|
||
TLocalisamfile prosp(LF_PROSPE1);
|
||
TRectype& curr = prosp.curr();
|
||
for (int r = 0; r < 3; 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 << "Riepilogo ";
|
||
const char* nome_quadro = argv[2];
|
||
if (strnicmp(nome_quadro, "C", 1) == 0)
|
||
taitol << "C"; else
|
||
if (strnicmp(nome_quadro, "DB", 2) == 0)
|
||
taitol << "SG"; else
|
||
if (strnicmp(nome_quadro, "D1", 2) == 0)
|
||
{
|
||
_quadronuovo = "SE";
|
||
taitol << "SE";
|
||
} else
|
||
if (strnicmp(nome_quadro, "D", 1) == 0)
|
||
{
|
||
_quadronuovo = "SC";
|
||
taitol << "SC";
|
||
} else
|
||
if (strnicmp(nome_quadro, "E1", 2) == 0)
|
||
{
|
||
_quadronuovo = "SG";
|
||
taitol << "SG";
|
||
} else
|
||
if (strnicmp(nome_quadro, "E", 1) == 0)
|
||
{
|
||
_quadronuovo = "SF";
|
||
taitol << "SF";
|
||
}
|
||
else
|
||
{
|
||
_quadronuovo = nome_quadro;
|
||
taitol << nome_quadro;
|
||
}
|
||
|
||
TQuadroC_E2 a(nome_quadro);
|
||
a.run(argc, argv, taitol);
|
||
return TRUE;
|
||
}
|