Correzione errori segnalati da Gabri
git-svn-id: svn://10.65.10.50/trunk@183 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
228233db31
commit
60064f97d3
@ -52,6 +52,7 @@ TMask* TPrimanota_application::load_mask(int n)
|
||||
m->set_handler(F_TOTALE, totale_handler);
|
||||
m->set_handler(F_RITFIS, ritfis_handler);
|
||||
m->set_handler(F_RITSOC, ritsoc_handler);
|
||||
m->set_handler(F_CODIVA, main_codiva_handler);
|
||||
m->set_handler(F_VISVAL, visval_handler);
|
||||
m->set_handler(F_OCCASEDIT, occas_handler);
|
||||
m->set_handler(F_SOLAIVA, solaiva_handler);
|
||||
@ -152,16 +153,20 @@ bool TPrimanota_application::user_destroy()
|
||||
bool TPrimanota_application::read_caus(const char* cod, int year)
|
||||
{
|
||||
const bool ok = causale().read(cod, year);
|
||||
|
||||
bool nob = FALSE, dob = FALSE;
|
||||
if (ok)
|
||||
{
|
||||
TMask& m = *load_mask(_iva == nessuna_iva ? 1 : 2);
|
||||
|
||||
TEdit_field& nd = (TEdit_field&)m.field(F_NUMDOC); // Numero documento obbligatorio?
|
||||
nd.check_type(_causale.num_doc() ? CHECK_REQUIRED : CHECK_NORMAL);
|
||||
|
||||
TEdit_field& dd = (TEdit_field&)m.field(F_DATADOC); // Data documento obbligatoria?
|
||||
dd.check_type(_causale.data_doc() ? CHECK_REQUIRED : CHECK_NORMAL);
|
||||
nob = _causale.num_doc();
|
||||
dob = _causale.data_doc();
|
||||
}
|
||||
|
||||
TMask& m = *load_mask(causale().iva() == nessuna_iva ? 1 : 2);
|
||||
TEdit_field& nd = (TEdit_field&)m.field(F_NUMDOC); // Numero documento obbligatorio?
|
||||
nd.check_type(nob ? CHECK_REQUIRED : CHECK_NORMAL);
|
||||
TEdit_field& dd = (TEdit_field&)m.field(F_DATADOC); // Data documento obbligatoria?
|
||||
dd.check_type(dob ? CHECK_REQUIRED : CHECK_NORMAL);
|
||||
|
||||
return ok;
|
||||
}
|
||||
|
||||
|
@ -32,7 +32,7 @@ END
|
||||
|
||||
NUMBER F_NUMREG 7
|
||||
BEGIN
|
||||
PROMPT 1 3 "Operazione n. "
|
||||
PROMPT 57 3 "Operazione n."
|
||||
FIELD NUMREG
|
||||
FLAGS "RD"
|
||||
KEY 1
|
||||
@ -40,44 +40,44 @@ END
|
||||
|
||||
DATE F_DATAREG
|
||||
BEGIN
|
||||
PROMPT 44 3 "Data operazione "
|
||||
PROMPT 1 3 "Data operazione "
|
||||
FIELD DATAREG
|
||||
END
|
||||
|
||||
STRING F_NUMDOC 7
|
||||
BEGIN
|
||||
PROMPT 1 4 "Documento n. "
|
||||
FIELD NUMDOC
|
||||
WARNING "La causale impone di specificare il numero documento"
|
||||
END
|
||||
|
||||
DATE F_DATACOMP
|
||||
BEGIN
|
||||
PROMPT 44 4 "Data di competenza "
|
||||
PROMPT 1 4 "Data di competenza "
|
||||
FIELD DATACOMP
|
||||
END
|
||||
|
||||
NUMBER F_ANNOES 4
|
||||
BEGIN
|
||||
PROMPT 1 5 "Esercizio "
|
||||
PROMPT 57 4 "Esercizio "
|
||||
FIELD ANNOES
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
DATE F_DATADOC
|
||||
BEGIN
|
||||
PROMPT 1 5 "Data del documento "
|
||||
FIELD DATADOC
|
||||
WARNING "Specificare una data del documento non superiore a quella di registrazione"
|
||||
VALIDATE DATE_CMP_FUNC <= F_DATAREG
|
||||
END
|
||||
|
||||
STRING F_NUMDOC 7
|
||||
BEGIN
|
||||
PROMPT 57 5 "Documento n. "
|
||||
FIELD NUMDOC
|
||||
WARNING "La causale impone di specificare il numero documento"
|
||||
END
|
||||
|
||||
NUMBER F_ANNOIVA 4
|
||||
BEGIN
|
||||
FLAGS "H"
|
||||
END
|
||||
|
||||
DATE F_DATADOC
|
||||
BEGIN
|
||||
PROMPT 44 5 "Data del documento "
|
||||
FIELD DATADOC
|
||||
FLAGS "A"
|
||||
WARNING "Specificare una data del documento non superiore a quella di registrazione"
|
||||
VALIDATE DATE_CMP_FUNC <= F_DATAREG
|
||||
END
|
||||
|
||||
STRING F_DESCAGG 5
|
||||
BEGIN
|
||||
PROMPT 1 6 "Descrizione "
|
||||
|
@ -53,6 +53,15 @@ BEGIN
|
||||
FLAGS "DG"
|
||||
END
|
||||
|
||||
NUMBER F_NUMREG 6
|
||||
BEGIN
|
||||
PROMPT 57 3 "Operazione n. "
|
||||
FIELD NUMREG
|
||||
FLAGS "RDG"
|
||||
KEY 1
|
||||
MESSAGE COPY,H_NUMREG
|
||||
END
|
||||
|
||||
DATE F_DATAREG
|
||||
BEGIN
|
||||
PROMPT 1 3 "Data operazione "
|
||||
@ -97,15 +106,6 @@ BEGIN
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER F_NUMREG 6
|
||||
BEGIN
|
||||
PROMPT 57 3 "Operazione n. "
|
||||
FIELD LF_MOV->NUMREG
|
||||
FLAGS "DG"
|
||||
KEY 1
|
||||
MESSAGE COPY,H_NUMREG
|
||||
END
|
||||
|
||||
STRING F_NUMDOC 7
|
||||
BEGIN
|
||||
PROMPT 57 5 "Documento n. "
|
||||
@ -373,7 +373,7 @@ END
|
||||
|
||||
STRING F_CODPAG 4
|
||||
BEGIN
|
||||
PROMPT 61 11 "Pagamento "
|
||||
PROMPT 60 11 "Pagamento "
|
||||
USE %CPG
|
||||
INPUT CODTAB F_CODPAG
|
||||
DISPLAY "Codice" CODTAB
|
||||
@ -382,9 +382,33 @@ BEGIN
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
NUMBER F_TOTALE 15
|
||||
BEGIN
|
||||
PROMPT 1 12 "Totale documento "
|
||||
FIELD TOTDOC
|
||||
FLAGS "RV"
|
||||
PICTURE "."
|
||||
END
|
||||
|
||||
NUMBER F_RITFIS 15
|
||||
BEGIN
|
||||
PROMPT 1 13 "Ritenute fiscali "
|
||||
FIELD RITFIS
|
||||
FLAGS "RV"
|
||||
PICTURE "."
|
||||
END
|
||||
|
||||
NUMBER F_RITSOC 15
|
||||
BEGIN
|
||||
PROMPT 1 14 "Ritenute sociali "
|
||||
FIELD LF_MOV->RITSOC
|
||||
FLAGS "RV"
|
||||
PICTURE "."
|
||||
END
|
||||
|
||||
STRING F_CODIVA 4
|
||||
BEGIN
|
||||
PROMPT 1 12 "Codice IVA "
|
||||
PROMPT 60 12 "Codice IVA "
|
||||
FLAGS "U"
|
||||
USE %IVA
|
||||
INPUT CODTAB F_CODIVA
|
||||
@ -396,48 +420,23 @@ BEGIN
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
NUMBER F_TOTALE 15
|
||||
BEGIN
|
||||
PROMPT 45 12 "Totale documento "
|
||||
FIELD TOTDOC
|
||||
FLAGS "RV"
|
||||
PICTURE "."
|
||||
END
|
||||
|
||||
NUMBER F_RITFIS 15
|
||||
BEGIN
|
||||
PROMPT 45 13 "Ritenute fiscali "
|
||||
FIELD RITFIS
|
||||
FLAGS "RV"
|
||||
PICTURE "."
|
||||
END
|
||||
|
||||
NUMBER F_RITSOC 15
|
||||
BEGIN
|
||||
PROMPT 45 14 "Ritenute sociali "
|
||||
FIELD LF_MOV->RITSOC
|
||||
FLAGS "RV"
|
||||
PICTURE "."
|
||||
END
|
||||
|
||||
DATE F_DATA74TER
|
||||
BEGIN
|
||||
PROMPT 1 13 "Data 74/ter "
|
||||
PROMPT 54 13 "Data 74/ter "
|
||||
CHECKTYPE REQUIRED
|
||||
FIELD DATA74TER
|
||||
END
|
||||
|
||||
|
||||
NUMBER F_ANNORIF 4
|
||||
BEGIN
|
||||
PROMPT 1 14 "Rif.partita "
|
||||
PROMPT 45 14 "Rif.partita "
|
||||
FLAGS "A"
|
||||
HELP "Anno di riferimento partita"
|
||||
END
|
||||
|
||||
NUMBER F_NUMRIF 7
|
||||
BEGIN
|
||||
PROMPT 20 14 "/"
|
||||
PROMPT 69 14 "/"
|
||||
HELP "Numero documento (o protocollo IVA) di riferimento"
|
||||
END
|
||||
|
||||
|
@ -186,14 +186,18 @@ int TMovimentoPN::write(bool force, TDate&)
|
||||
iva(i).put("TIPOATT", tipoatt);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
_oldcg = _oldiva = 0;
|
||||
int err = registra(FALSE, force);
|
||||
|
||||
if (err == NOERR)
|
||||
{
|
||||
const TDate datareg(r.get("DATAREG"));
|
||||
TLibro_giornale gio(datareg.year());
|
||||
gio.update(0L, datareg); // Aggiorna data registrazione sul libro giornale
|
||||
|
||||
if (reg.not_empty())
|
||||
{
|
||||
{ // Aggiorna data registrazione e protocollo IVA sul registro
|
||||
const long protiva = r.get_long("PROTIVA");
|
||||
const long uprotiva = r.get_long("UPROTIVA");
|
||||
const TDate datareg = r.get_date("DATAREG");
|
||||
|
88
cg/cg2101.h
88
cg/cg2101.h
@ -1,44 +1,44 @@
|
||||
#ifndef __RELATION_H
|
||||
#include <relation.h>
|
||||
#endif
|
||||
|
||||
class TMovimentoPN : public TRelation
|
||||
{
|
||||
// class TMovimentoPN : public TRelation
|
||||
// @END
|
||||
|
||||
// @DPRIV
|
||||
TArray _cg, _iva;
|
||||
int _oldcg, _oldiva;
|
||||
real _balance;
|
||||
// @END
|
||||
|
||||
protected:
|
||||
// @FPROT
|
||||
int write_rec(bool re, const TRectype&r, TLocalisamfile* f);
|
||||
int cancella(TLocalisamfile* f, int da, int a);
|
||||
int registra(bool re, bool force);
|
||||
int read_mov_rows();
|
||||
// @END
|
||||
|
||||
public:
|
||||
// @FPUB
|
||||
virtual int next(TReclock lockop = _nolock) { return (file()->next(lockop) || read_mov_rows()); }
|
||||
virtual int prev(TReclock lockop = _nolock) { return (file()->prev(lockop) || read_mov_rows()); }
|
||||
virtual int first(TReclock lockop = _nolock) { return (file()->first(lockop) || read_mov_rows()); }
|
||||
virtual int last(TReclock lockop = _nolock) { return (file()->last(lockop) || read_mov_rows()); }
|
||||
virtual int skip(TRecnotype nrec, TReclock lockop = _nolock) { return (file()->skip(nrec, lockop) || read_mov_rows()); }
|
||||
virtual int read(TIsamop op = _isgteq, TReclock lockop = _nolock, TDate& atdate = botime);
|
||||
virtual int write (bool force = TRUE, TDate& atdate = botime);
|
||||
virtual int rewrite(bool force = TRUE, TDate& atdate = botime);
|
||||
virtual int remove (TDate& atdate = botime);
|
||||
|
||||
TRectype& cg(int i);
|
||||
TRectype& iva(int i);
|
||||
int cg_items() const { return _cg.items(); }
|
||||
int iva_items() const { return _iva.items(); }
|
||||
void destroy_rows();
|
||||
|
||||
TMovimentoPN();
|
||||
virtual ~TMovimentoPN() {}
|
||||
};
|
||||
#ifndef __RELATION_H
|
||||
#include <relation.h>
|
||||
#endif
|
||||
|
||||
class TMovimentoPN : public TRelation
|
||||
{
|
||||
// class TMovimentoPN : public TRelation
|
||||
// @END
|
||||
|
||||
// @DPRIV
|
||||
TArray _cg, _iva;
|
||||
int _oldcg, _oldiva;
|
||||
real _balance;
|
||||
// @END
|
||||
|
||||
protected:
|
||||
// @FPROT
|
||||
int write_rec(bool re, const TRectype&r, TLocalisamfile* f);
|
||||
int cancella(TLocalisamfile* f, int da, int a);
|
||||
int registra(bool re, bool force);
|
||||
int read_mov_rows();
|
||||
// @END
|
||||
|
||||
public:
|
||||
// @FPUB
|
||||
virtual int next(TReclock lockop = _nolock) { return (file()->next(lockop) || read_mov_rows()); }
|
||||
virtual int prev(TReclock lockop = _nolock) { return (file()->prev(lockop) || read_mov_rows()); }
|
||||
virtual int first(TReclock lockop = _nolock) { return (file()->first(lockop) || read_mov_rows()); }
|
||||
virtual int last(TReclock lockop = _nolock) { return (file()->last(lockop) || read_mov_rows()); }
|
||||
virtual int skip(TRecnotype nrec, TReclock lockop = _nolock) { return (file()->skip(nrec, lockop) || read_mov_rows()); }
|
||||
virtual int read(TIsamop op = _isgteq, TReclock lockop = _nolock, TDate& atdate = (TDate&)botime);
|
||||
virtual int write (bool force = TRUE, TDate& atdate = (TDate&)botime);
|
||||
virtual int rewrite(bool force = TRUE, TDate& atdate = (TDate&)botime);
|
||||
virtual int remove (TDate& atdate = (TDate&)botime);
|
||||
|
||||
TRectype& cg(int i);
|
||||
TRectype& iva(int i);
|
||||
int cg_items() const { return _cg.items(); }
|
||||
int iva_items() const { return _iva.items(); }
|
||||
void destroy_rows();
|
||||
|
||||
TMovimentoPN();
|
||||
virtual ~TMovimentoPN() {}
|
||||
};
|
||||
|
201
cg/cg2102.cpp
201
cg/cg2102.cpp
@ -53,18 +53,19 @@ int TPrimanota_application::date2esc(const TDate& d, int* prevesc)
|
||||
|
||||
// Calcolo della percentuale di un dato codice IVA
|
||||
// Certified 99%
|
||||
const real& TPrimanota_application::cod2IVA(const char* codiva)
|
||||
const real& TPrimanota_application::cod2IVA(const TMask& m)
|
||||
{
|
||||
static TString16 _codiva;
|
||||
static real _percent;
|
||||
|
||||
|
||||
const TString& codiva = m.get(102);
|
||||
if (_codiva != codiva)
|
||||
{
|
||||
_codiva = codiva;
|
||||
TCodiceIVA c(_codiva);
|
||||
_percent = c.percentuale();
|
||||
}
|
||||
|
||||
|
||||
return _percent;
|
||||
}
|
||||
|
||||
@ -76,6 +77,23 @@ real TPrimanota_application::scorpora(real& imponibile, const real& percent)
|
||||
return imposta;
|
||||
}
|
||||
|
||||
real TPrimanota_application::totale_documento()
|
||||
{
|
||||
const TMask& m = mask();
|
||||
|
||||
const bool swapt = test_swap(FALSE); // Totale invertito ?
|
||||
const bool swaps = test_swap(TRUE); // Ritenute sociali invertite ?
|
||||
|
||||
real tot(m.get(F_TOTALE));
|
||||
tot += real(m.get(F_RITFIS));
|
||||
|
||||
real ritsoc(m.get(F_RITSOC));
|
||||
if (swapt ^ swaps)
|
||||
ritsoc = -ritsoc;
|
||||
|
||||
tot += ritsoc;
|
||||
return tot;
|
||||
}
|
||||
|
||||
// Determina se un codice sospeso o no
|
||||
// Certified 50%
|
||||
@ -452,6 +470,14 @@ bool TPrimanota_application::cg_notify(int r, KEY k)
|
||||
cg.sheet_mask().enable(DLG_DELREC, tipo == ' ');
|
||||
break;
|
||||
case K_ENTER:
|
||||
if (r == 0 && app().iva() == nessuna_iva && cg.row(1).empty_items())
|
||||
{
|
||||
TImporto i; i = row; i.swap_section();
|
||||
TConto contro(row, 9, 0x3);
|
||||
app().set_cgs_row(1, i, contro, "", ' ');
|
||||
TConto conto(cg.row(1), 2, 0x3);
|
||||
conto.add_to(cg.row(1), 2, 0x3);
|
||||
}
|
||||
app().calcola_saldo();
|
||||
break;
|
||||
case K_DEL:
|
||||
@ -522,7 +548,7 @@ bool TPrimanota_application::imponibile_handler(TMask_field& f, KEY key)
|
||||
}
|
||||
if (iva.not_empty()) // Se c'e' il codice IVA
|
||||
{
|
||||
const real& percent = cod2IVA(iva);
|
||||
const real& percent = cod2IVA(f.mask());
|
||||
const real imponibile(f.get());
|
||||
real imposta = abs(imponibile) * percent / 100.0; imposta.ceil();
|
||||
if (imponibile.sign() < 0) imposta = -imposta;
|
||||
@ -556,7 +582,7 @@ bool TPrimanota_application::imposta_handler(TMask_field& f, KEY key)
|
||||
if (key == K_ENTER)
|
||||
{
|
||||
const real imponibile(f.mask().get(101));
|
||||
const real& percent = cod2IVA(f.mask().get(102));
|
||||
const real& percent = cod2IVA(f.mask());
|
||||
real imposta = abs(imponibile) * percent / 100.0;
|
||||
imposta.ceil();
|
||||
if (imponibile < ZERO) imposta = -imposta;
|
||||
@ -564,7 +590,7 @@ bool TPrimanota_application::imposta_handler(TMask_field& f, KEY key)
|
||||
const real val(f.get());
|
||||
if (val != imposta)
|
||||
{
|
||||
if (val != 0.0 || !app().causale().reg().corrispettivi())
|
||||
if (val != 0.0 || !app().causale().corrispettivi())
|
||||
{
|
||||
const TString16 wrong(val.string("."));
|
||||
const TString16 right(imposta.string("."));
|
||||
@ -576,7 +602,7 @@ bool TPrimanota_application::imposta_handler(TMask_field& f, KEY key)
|
||||
if (key == K_F8 && f.get().empty())
|
||||
{
|
||||
real imponibile(f.mask().get(101));
|
||||
const real& percent = cod2IVA(f.mask().get(102));
|
||||
const real& percent = cod2IVA(f.mask());
|
||||
const real imposta = scorpora(imponibile, percent);
|
||||
f.mask().set(101, imponibile.string());
|
||||
f.set(imposta.string());
|
||||
@ -704,18 +730,7 @@ bool TPrimanota_application::iva_handler(TMask_field& f, KEY k)
|
||||
if (k != K_ENTER) return TRUE;
|
||||
|
||||
const real imp = app().calcola_imp();
|
||||
|
||||
const TMask& m = f.mask();
|
||||
|
||||
const bool swapt = app().test_swap(FALSE);
|
||||
const bool swaps = app().test_swap(TRUE);
|
||||
|
||||
real tot(m.get(F_TOTALE));
|
||||
tot += real(m.get(F_RITFIS));
|
||||
if (swapt ^ swaps)
|
||||
tot -= real(m.get(F_RITSOC));
|
||||
else
|
||||
tot += real(m.get(F_RITSOC));
|
||||
const real tot = app().totale_documento();
|
||||
|
||||
if (imp != tot)
|
||||
{
|
||||
@ -822,24 +837,36 @@ bool TPrimanota_application::datareg_handler(TMask_field& f, KEY key)
|
||||
|
||||
if (!ok)
|
||||
return f.error_box("Non esiste il libro giornale dell'esercizio %d", ae);
|
||||
|
||||
if (dr < app().giornale().last_print())
|
||||
return f.error_box("La data dell'operazione e' antecedente alla "
|
||||
"data di stampa del libro giornale dell'esercizio %d", ae);
|
||||
|
||||
const TLibro_giornale& gio = app().giornale();
|
||||
const TDate ljp(gio.global_last_print());
|
||||
if (dr <= ljp)
|
||||
return f.error_box("La data dell'operazione e' antecedente alla data\n"
|
||||
"dell'ultima stampa del libro giornale: %s", ljp.string());
|
||||
if (dr < gio.last_reg())
|
||||
warning_box("La data dell'operazione e' antecedente al %s, ultima registrazione\n"
|
||||
"sul libro giornale del %d",
|
||||
gio.last_reg().string(), ae);
|
||||
|
||||
if (!m.query_mode() && app().iva() != nessuna_iva)
|
||||
{
|
||||
const int annoiva = m.get_int(F_ANNOIVA);
|
||||
if (dr.year() != annoiva)
|
||||
TRegistro& reg = app().causale().reg();
|
||||
const TString16 codreg(reg.name());
|
||||
|
||||
if (reg.year() != dr.year())
|
||||
{
|
||||
TRegistro& reg = app().causale().reg();
|
||||
const TString16 codreg(reg.name());
|
||||
ok = reg.read(codreg, dr.year());
|
||||
if (ok && dr < reg.last_reg())
|
||||
warning_box("La data dell'operazione e' antecedente al %s, ultima registrazione "
|
||||
"sul registro '%s' del %d",
|
||||
reg.last_reg().string(), (const char*)codreg, dr.year());
|
||||
const bool ok = reg.read(codreg, dr.year());
|
||||
if (!ok) return FALSE;
|
||||
}
|
||||
|
||||
if (dr <= reg.last_print())
|
||||
return error_box("La data dell'operazione e' antecedente al %s, ultima\n"
|
||||
"data di stampa del registro '%s' dell'anno %d",
|
||||
reg.last_print().string(), (const char*)codreg, dr.year());
|
||||
if (dr < reg.last_reg())
|
||||
warning_box("La data dell'operazione e' antecedente al %s, ultima registrazione\n"
|
||||
"sul registro '%s' dell'anno %d",
|
||||
reg.last_reg().string(), (const char*)codreg, dr.year());
|
||||
}
|
||||
}
|
||||
return ok;
|
||||
@ -989,7 +1016,7 @@ void TPrimanota_application::add_cgs_tot(TMask& m)
|
||||
conto = bill.conto(); m.set(F_CONTOCLIFO, conto);
|
||||
}
|
||||
|
||||
if (tipo == 'C' && causale().reg().corrispettivi())
|
||||
if (tipo == 'C' && causale().corrispettivi())
|
||||
tipo = ' ';
|
||||
TConto c(gruppo, conto, codice, tipo);
|
||||
real tot(m.get(F_TOTALE));
|
||||
@ -997,41 +1024,6 @@ void TPrimanota_application::add_cgs_tot(TMask& m)
|
||||
// Creazione/Aggiornamento riga totale
|
||||
const int pos = type2pos('T');
|
||||
set_cgs_row(pos, real2imp(tot, 'T'), c, "Totale documento", 'T');
|
||||
|
||||
const TCodiceIVA iva(m.get(F_CODIVA));
|
||||
TToken_string& row = ivas().row(0);
|
||||
|
||||
const real imp(row.get(0));
|
||||
if (imp == ZERO && iva.ok())
|
||||
{
|
||||
iva_notify(0, K_SPACE);
|
||||
const real imposta = scorpora(tot, iva.percentuale());
|
||||
|
||||
row.add(tot.string(), 0); // imponibile
|
||||
row.add(iva.codice(), 1); // codice IVA
|
||||
row.add(imposta.string(), 3); // imposta
|
||||
|
||||
TConto bill; // Conto della prima riga IVA
|
||||
const TString& tipo = iva.tipo();
|
||||
if (tipo.not_empty())
|
||||
{
|
||||
if (tipo == "ES") _causale.bill(5, bill); else
|
||||
if (tipo == "NI") _causale.bill(6, bill); else
|
||||
if (tipo == "NS") _causale.bill(7, bill);
|
||||
}
|
||||
if (!bill.ok() && !causale().reg().corrispettivi())
|
||||
bill.set(m.get_int(F_GRUPPORIC), m.get_int(F_CONTORIC), m.get_long(F_SOTTOCONTORIC));
|
||||
if (!bill.ok())
|
||||
_causale.bill(2, bill);
|
||||
row.add(bill.tipo(), 5);
|
||||
row.add(bill.gruppo(), 6);
|
||||
row.add(bill.conto(), 7);
|
||||
row.add(bill.sottoconto(), 8);
|
||||
row.add(bill.descrizione(), 9);
|
||||
|
||||
app().ivas().force_update(0);
|
||||
iva_notify(0, K_ENTER);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1054,17 +1046,68 @@ bool TPrimanota_application::clifo_handler(TMask_field& f, KEY key)
|
||||
}
|
||||
|
||||
|
||||
// Handler of the F_CODIVA
|
||||
// Certified 99%
|
||||
bool TPrimanota_application::main_codiva_handler(TMask_field& f, KEY key)
|
||||
{
|
||||
if (key == K_TAB && f.focusdirty() && f.get().not_empty())
|
||||
{
|
||||
TToken_string& row = app().ivas().row(0);
|
||||
const real imp(row.get(0));
|
||||
if (imp == ZERO)
|
||||
{
|
||||
iva_notify(0, K_SPACE);
|
||||
|
||||
const TCodiceIVA iva(f.get());
|
||||
real tot = app().totale_documento();
|
||||
|
||||
real imposta;
|
||||
if (!app().causale().corrispettivi())
|
||||
imposta = app().scorpora(tot, iva.percentuale());
|
||||
|
||||
row.add(tot.string(), 0); // imponibile
|
||||
row.add(iva.codice(), 1); // codice IVA
|
||||
row.add(imposta.string(), 3); // imposta
|
||||
|
||||
TConto bill; // Conto della prima riga IVA
|
||||
const TString& tipo = iva.tipo();
|
||||
if (tipo.not_empty())
|
||||
{
|
||||
if (tipo == "ES") app().causale().bill(5, bill); else
|
||||
if (tipo == "NI") app().causale().bill(6, bill); else
|
||||
if (tipo == "NS") app().causale().bill(7, bill);
|
||||
}
|
||||
if (!bill.ok() && !app().causale().corrispettivi())
|
||||
{
|
||||
const TMask& m = f.mask();
|
||||
bill.set(m.get_int(F_GRUPPORIC), m.get_int(F_CONTORIC), m.get_long(F_SOTTOCONTORIC));
|
||||
}
|
||||
if (!bill.ok())
|
||||
app().causale().bill(2, bill);
|
||||
row.add(bill.tipo(), 5);
|
||||
row.add(bill.gruppo(), 6);
|
||||
row.add(bill.conto(), 7);
|
||||
row.add(bill.sottoconto(), 8);
|
||||
row.add(bill.descrizione(), 9);
|
||||
|
||||
app().ivas().force_update(0);
|
||||
iva_notify(0, K_ENTER);
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// Handler of the F_TOTALE
|
||||
// Certified 99%
|
||||
bool TPrimanota_application::totale_handler(TMask_field& f, KEY key)
|
||||
{
|
||||
bool ok = TRUE;
|
||||
if (key == K_TAB && f.focusdirty())
|
||||
{
|
||||
app().add_cgs_tot(f.mask());
|
||||
} else
|
||||
if (key == K_ENTER && f.get().empty())
|
||||
return f.yesno_box("Totale documento nullo: continuare ugualmente?");
|
||||
return TRUE;
|
||||
|
||||
if (key == K_ENTER && f.get().empty())
|
||||
ok = f.yesno_box("Totale documento nullo: continuare ugualmente?");
|
||||
return ok;
|
||||
}
|
||||
|
||||
|
||||
@ -1130,8 +1173,7 @@ bool TPrimanota_application::solaiva_handler(TMask_field& f, KEY key)
|
||||
TMask& m = f.mask();
|
||||
const bool anchecg = !m.get_bool(F_SOLAIVA);
|
||||
|
||||
m.enable_page(2, anchecg);
|
||||
app().cgs().enable(anchecg);
|
||||
app().cgs().show(anchecg);
|
||||
|
||||
if (m.is_running() && anchecg)
|
||||
{
|
||||
@ -1144,11 +1186,16 @@ bool TPrimanota_application::solaiva_handler(TMask_field& f, KEY key)
|
||||
if (m.get(F_RITFIS).not_empty()) app().add_cgs_rit(TRUE);
|
||||
if (m.get(F_RITSOC).not_empty()) app().add_cgs_rit(FALSE);
|
||||
|
||||
TToken_string oldrow(128);
|
||||
for (int i = 0; i < righe; i++)
|
||||
{
|
||||
if (!iva.row(i).empty_items())
|
||||
{
|
||||
TToken_string& r = iva.row(i);
|
||||
if (!r.empty_items())
|
||||
{
|
||||
oldrow = r;
|
||||
r = "";
|
||||
iva_notify(i, K_SPACE);
|
||||
r = oldrow;
|
||||
iva_notify(i, K_ENTER);
|
||||
}
|
||||
pi.setstatus(i+1);
|
||||
|
@ -58,11 +58,13 @@ class TPrimanota_application : public TRelation_application
|
||||
static bool totale_handler(TMask_field& f, KEY key);
|
||||
static bool ritfis_handler(TMask_field& f, KEY key);
|
||||
static bool ritsoc_handler(TMask_field& f, KEY key);
|
||||
static bool main_codiva_handler(TMask_field& f, KEY key);
|
||||
static bool visval_handler(TMask_field& f, KEY key);
|
||||
static bool occas_code_handler(TMask_field& f, KEY key);
|
||||
static bool occas_handler(TMask_field& f, KEY key);
|
||||
static bool solaiva_handler(TMask_field& f, KEY key);
|
||||
static bool descr_handler(TMask_field& f, KEY k);
|
||||
|
||||
static bool imponibile_handler(TMask_field& f, KEY key);
|
||||
static bool codiva_handler(TMask_field& f, KEY key);
|
||||
static bool imposta_handler(TMask_field& f, KEY key);
|
||||
@ -111,7 +113,7 @@ protected:
|
||||
static TipoIVA reg2IVA(const char* registro, int anno);
|
||||
static TipoIVA cau2IVA(const char* causale, int anno);
|
||||
static int type2pos(char tipo);
|
||||
static const real& cod2IVA(const char* codiva);
|
||||
static const real& cod2IVA(const TMask& m);
|
||||
static real scorpora(real& imponibile, const real& percentuale);
|
||||
static int date2esc(const TDate& d, int* prev = NULL);
|
||||
static bool detraibile(int tipodet);
|
||||
@ -126,6 +128,7 @@ protected:
|
||||
|
||||
bool test_swap(bool ritsoc);
|
||||
TImporto real2imp(const real& r, char tipo);
|
||||
real totale_documento();
|
||||
|
||||
void set_cgs_imp(int n, const TImporto& importo);
|
||||
TImporto get_cgs_imp(int n);
|
||||
|
@ -11,13 +11,17 @@ const char* iva2name(TipoIVA iva)
|
||||
const char* i;
|
||||
switch(iva)
|
||||
{
|
||||
case nessuna_iva : i = "Nessuna IVA"; break;
|
||||
case iva_acquisti: i = "IVA Acquisti"; break;
|
||||
case iva_vendite : i = "IVA Vendite"; break;
|
||||
case iva_generica: i = "IVA Generica"; break;
|
||||
default : i = "IVA ERRATA!"; break;
|
||||
}
|
||||
|
||||
case nessuna_iva:
|
||||
i = "Nessuna IVA"; break;
|
||||
case iva_acquisti:
|
||||
i = "IVA Acquisti"; break;
|
||||
case iva_vendite:
|
||||
i = "IVA Vendite"; break;
|
||||
case iva_generica:
|
||||
i = "IVA Generica"; break;
|
||||
default:
|
||||
i = "IVA ERRATA!"; break;
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
@ -193,6 +197,23 @@ bool TLibro_giornale::read(int y)
|
||||
return found;
|
||||
}
|
||||
|
||||
TDate TLibro_giornale::global_last_print() const
|
||||
{
|
||||
TTable reg("REG");
|
||||
reg.setkey(1);
|
||||
|
||||
TDate last(botime);
|
||||
for (int err = reg.first(); err == NOERR; err = reg.next())
|
||||
{
|
||||
if (reg.get_int("I0") == libro_giornale)
|
||||
{
|
||||
const TDate l(reg.get("D3"));
|
||||
if (l > last) last = l;
|
||||
}
|
||||
}
|
||||
return last;
|
||||
}
|
||||
|
||||
TLibro_giornale::TLibro_giornale(int y)
|
||||
{
|
||||
read(y);
|
||||
@ -352,6 +373,7 @@ TipoIVA TCausale::iva() const
|
||||
i = (TipoIVA)tpd.get_int("I0"); // IVA acquisti, vendite, generica
|
||||
if (i == iva_generica)
|
||||
i = _reg.iva();
|
||||
((TCausale*)this)->_corrisp = tpd.get_bool("B0"); // Ricorda flag per la prossima volta
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -360,6 +382,11 @@ TipoIVA TCausale::iva() const
|
||||
return _iva;
|
||||
}
|
||||
|
||||
bool TCausale::corrispettivi() const
|
||||
{
|
||||
if (_iva == iva_errata) iva();
|
||||
return _corrisp;
|
||||
}
|
||||
|
||||
bool TCausale::similar(const TCausale& c) const
|
||||
{
|
||||
@ -450,10 +477,9 @@ const TImporto& TImporto::operator -= (const TImporto& i)
|
||||
return *this;
|
||||
}
|
||||
|
||||
const TImporto& TImporto::swap()
|
||||
const TImporto& TImporto::swap_section()
|
||||
{
|
||||
_sezione = (_sezione == 'D') ? 'A' : 'D';
|
||||
_valore = -_valore;
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
@ -58,6 +58,8 @@ class TLibro_giornale : public TRegistro
|
||||
{
|
||||
public:
|
||||
bool read(int year);
|
||||
TDate global_last_print() const;
|
||||
|
||||
TLibro_giornale(int year = 0);
|
||||
virtual ~TLibro_giornale() {}
|
||||
};
|
||||
@ -69,6 +71,7 @@ class TCausale : public TArray
|
||||
TRegistro _reg;
|
||||
|
||||
TipoIVA _iva;
|
||||
bool _corrisp;
|
||||
char _sezione_clifo, _sezione_ritsoc;
|
||||
|
||||
protected:
|
||||
@ -89,6 +92,7 @@ public:
|
||||
|
||||
TRegistro& reg() { return _reg; }
|
||||
TipoIVA iva() const;
|
||||
bool corrispettivi() const;
|
||||
|
||||
virtual bool ok() const { return !_rec.empty(); }
|
||||
bool similar(const TCausale& c) const;
|
||||
@ -127,8 +131,7 @@ public:
|
||||
const TImporto& operator=(TToken_string& sv);
|
||||
const TImporto& operator+=(const TImporto& i);
|
||||
const TImporto& operator-=(const TImporto& i);
|
||||
const TImporto& swap();
|
||||
const TImporto& TImporto::normalize() { if (_valore < ZERO) swap(); return *this; }
|
||||
const TImporto& swap_section();
|
||||
|
||||
const TImporto& set(char s, const real& v);
|
||||
const TImporto& add_to(TToken_string& s) const;
|
||||
|
@ -4,7 +4,7 @@
|
||||
#include "cg4400.h"
|
||||
#include "cg4400a.h"
|
||||
|
||||
TFixed_string TMP (__tmp, MAXSTR);
|
||||
static TString256 TMP;
|
||||
|
||||
CG4400_application * app() { return (CG4400_application*) MainApp(); }
|
||||
|
||||
@ -310,7 +310,7 @@ const char * CG4400_application::descr_doc(const char * tipo)
|
||||
else
|
||||
TMP = "";
|
||||
|
||||
return __tmp;
|
||||
return TMP;
|
||||
}
|
||||
|
||||
const char * CG4400_application::descr_iva(const char * cod)
|
||||
@ -325,7 +325,7 @@ const char * CG4400_application::descr_iva(const char * cod)
|
||||
else
|
||||
TMP = "";
|
||||
|
||||
return __tmp;
|
||||
return TMP;
|
||||
}
|
||||
|
||||
const char * CG4400_application::desc_attivita(const char * codatt)
|
||||
@ -338,7 +338,7 @@ const char * CG4400_application::desc_attivita(const char * codatt)
|
||||
TMP = attiv.get("S0");
|
||||
else
|
||||
TMP = "";
|
||||
return __tmp;
|
||||
return TMP;
|
||||
}
|
||||
|
||||
const char * CG4400_application::ricerca_cf(char tipocf, long codcf)
|
||||
@ -350,7 +350,7 @@ const char * CG4400_application::ricerca_cf(char tipocf, long codcf)
|
||||
TMP = _clifo->get(CLI_RAGSOC);
|
||||
else
|
||||
TMP = "";
|
||||
return __tmp;
|
||||
return TMP;
|
||||
}
|
||||
|
||||
const char * CG4400_application::ricerca_occ(const char * occ)
|
||||
@ -364,7 +364,7 @@ const char * CG4400_application::ricerca_occ(const char * occ)
|
||||
TMP = occas.get(OCC_RAGSOC);
|
||||
else
|
||||
TMP = "";
|
||||
return __tmp;
|
||||
return TMP;
|
||||
}
|
||||
|
||||
void CG4400_application::user_create()
|
||||
|
@ -24,9 +24,6 @@
|
||||
|
||||
#include "cglib03.h"
|
||||
|
||||
const int MAXSTR = 128;
|
||||
static char __tmp[MAXSTR];
|
||||
|
||||
//enum STAMPA { bollati=1, unici=2 };
|
||||
const int TABREG = (int)TTable::name2log("REG");
|
||||
|
||||
|
217
cg/cg4401.cpp
217
cg/cg4401.cpp
@ -1,113 +1,112 @@
|
||||
// cg4401.cpp
|
||||
//
|
||||
|
||||
#include <applicat.h>
|
||||
#include <isam.h>
|
||||
#include <strings.h>
|
||||
#include <lffiles.h>
|
||||
#include <utility.h>
|
||||
|
||||
#include <nditte.h>
|
||||
#include <anagr.h>
|
||||
#include <comuni.h>
|
||||
|
||||
#include "cg4400.h"
|
||||
|
||||
static TFixed_string tmp(__tmp, MAXSTR);
|
||||
|
||||
TRectype& TDati_ditta::look_com(const char * cod)
|
||||
{
|
||||
_comuni->zero();
|
||||
_comuni->put(COM_COM,cod);
|
||||
_comuni->read();
|
||||
if (_comuni->bad()) _comuni->zero();
|
||||
return _comuni->curr();
|
||||
}
|
||||
|
||||
TDati_ditta::TDati_ditta(long cod_ditta, int stampa_width)
|
||||
{
|
||||
_stampa_width = stampa_width;
|
||||
_codditta = cod_ditta;
|
||||
_nditte = new TLocalisamfile(LF_NDITTE);
|
||||
_anag = new TLocalisamfile(LF_ANAG);
|
||||
_comuni = new TLocalisamfile(LF_COMUNI);
|
||||
}
|
||||
|
||||
TDati_ditta::~TDati_ditta()
|
||||
{
|
||||
delete _anag; delete _nditte; delete _comuni;
|
||||
}
|
||||
|
||||
void TDati_ditta::get_dati_ditta ()
|
||||
{
|
||||
TString codanagr;
|
||||
TString tipoa;
|
||||
|
||||
_nditte->zero();
|
||||
_nditte->put(NDT_CODDITTA, _codditta);
|
||||
_nditte->read();
|
||||
|
||||
if (_nditte->bad()) _nditte->zero();
|
||||
|
||||
_ragsoc = _nditte->get(NDT_RAGSOC);
|
||||
codanagr = _nditte->curr().get(NDT_CODANAGR);
|
||||
tipoa = _nditte->curr().get(NDT_TIPOA);
|
||||
|
||||
_anag->setkey(1);
|
||||
_anag->zero();
|
||||
_anag->put (ANA_TIPOA, tipoa);
|
||||
_anag->put (ANA_CODANAGR, codanagr);
|
||||
_anag->read();
|
||||
if (_anag->bad()) _anag->zero();
|
||||
|
||||
_cofi = _anag->get(ANA_COFI);
|
||||
_paiva = _anag->get(ANA_PAIV);
|
||||
_comunefis = _anag->get(ANA_COMRF);
|
||||
|
||||
if (_comunefis.trim().empty())
|
||||
_comunefis = _anag->get(ANA_COMRES);
|
||||
|
||||
TRectype dep = look_com (_comunefis);
|
||||
|
||||
_comunefis = dep.get(COM_DENCOM);
|
||||
_provfis = dep.get(COM_PROVCOM);
|
||||
_cap = dep.get(COM_CAPCOM);
|
||||
if (_comunefis.trim().empty())
|
||||
{
|
||||
_viafis = _anag->get(ANA_INDRF);
|
||||
_viafis.rtrim();
|
||||
_viafis << " " << _anag->curr().get (ANA_CIVRF);
|
||||
}
|
||||
else
|
||||
{
|
||||
_viafis = _anag->get(ANA_INDRES);
|
||||
_viafis.rtrim();
|
||||
_viafis << " " << _anag->get (ANA_CIVRES);
|
||||
// cg4401.cpp
|
||||
//
|
||||
|
||||
#include <applicat.h>
|
||||
#include <isam.h>
|
||||
#include <strings.h>
|
||||
#include <lffiles.h>
|
||||
#include <utility.h>
|
||||
|
||||
#include <nditte.h>
|
||||
#include <anagr.h>
|
||||
#include <comuni.h>
|
||||
|
||||
#include "cg4400.h"
|
||||
|
||||
static TString256 tmp;
|
||||
|
||||
TRectype& TDati_ditta::look_com(const char * cod)
|
||||
{
|
||||
_comuni->zero();
|
||||
_comuni->put(COM_COM,cod);
|
||||
_comuni->read();
|
||||
if (_comuni->bad()) _comuni->zero();
|
||||
return _comuni->curr();
|
||||
}
|
||||
|
||||
TDati_ditta::TDati_ditta(long cod_ditta, int stampa_width)
|
||||
{
|
||||
_stampa_width = stampa_width;
|
||||
_codditta = cod_ditta;
|
||||
_nditte = new TLocalisamfile(LF_NDITTE);
|
||||
_anag = new TLocalisamfile(LF_ANAG);
|
||||
_comuni = new TLocalisamfile(LF_COMUNI);
|
||||
}
|
||||
|
||||
TDati_ditta::~TDati_ditta()
|
||||
{
|
||||
delete _anag; delete _nditte; delete _comuni;
|
||||
}
|
||||
|
||||
void TDati_ditta::get_dati_ditta ()
|
||||
{
|
||||
TString16 codanagr;
|
||||
char tipoa;
|
||||
|
||||
_nditte->zero();
|
||||
_nditte->put(NDT_CODDITTA, _codditta);
|
||||
_nditte->read();
|
||||
|
||||
if (_nditte->bad()) _nditte->zero();
|
||||
|
||||
_ragsoc = _nditte->get(NDT_RAGSOC);
|
||||
codanagr = _nditte->get(NDT_CODANAGR);
|
||||
tipoa = _nditte->get_char(NDT_TIPOA);
|
||||
|
||||
_anag->setkey(1);
|
||||
_anag->zero();
|
||||
_anag->put (ANA_TIPOA, tipoa);
|
||||
_anag->put (ANA_CODANAGR, codanagr);
|
||||
_anag->read();
|
||||
if (_anag->bad()) _anag->zero();
|
||||
|
||||
_cofi = _anag->get(ANA_COFI);
|
||||
_paiva = _anag->get(ANA_PAIV);
|
||||
_comunefis = _anag->get(ANA_COMRF);
|
||||
|
||||
if (_comunefis.trim().empty())
|
||||
_comunefis = _anag->get(ANA_COMRES);
|
||||
|
||||
TRectype dep = look_com (_comunefis);
|
||||
|
||||
_comunefis = dep.get(COM_DENCOM);
|
||||
_provfis = dep.get(COM_PROVCOM);
|
||||
_cap = dep.get(COM_CAPCOM);
|
||||
if (_comunefis.trim().empty())
|
||||
{
|
||||
_viafis = _anag->get(ANA_INDRF);
|
||||
_viafis.rtrim();
|
||||
_viafis << " " << _anag->curr().get (ANA_CIVRF);
|
||||
}
|
||||
else
|
||||
{
|
||||
_viafis = _anag->get(ANA_INDRES);
|
||||
_viafis.rtrim();
|
||||
_viafis << " " << _anag->get (ANA_CIVRES);
|
||||
}
|
||||
}
|
||||
|
||||
const char * TDati_ditta::prima_riga()
|
||||
{
|
||||
TString riga(_stampa_width);
|
||||
tmp = "";
|
||||
get_dati_ditta();
|
||||
|
||||
riga.format("Ditta %d %s Via %s %s %s %s", _codditta,
|
||||
(const char *)_ragsoc,(const char *)_viafis, (const char *)_cap,
|
||||
(const char *)_comunefis, (const char *)_provfis);
|
||||
tmp = riga;
|
||||
return __tmp;
|
||||
}
|
||||
|
||||
const char * TDati_ditta::seconda_riga()
|
||||
{
|
||||
TString riga(_stampa_width);
|
||||
tmp = "";
|
||||
riga = "Data @<";
|
||||
riga.right_just(_stampa_width-15);
|
||||
riga.overwrite (format ("Partita iva %s @26gCodice fiscale %s",
|
||||
(const char*)_paiva, (const char*)_cofi));
|
||||
tmp = riga;
|
||||
return __tmp;
|
||||
}
|
||||
|
||||
const char * TDati_ditta::prima_riga()
|
||||
{
|
||||
get_dati_ditta();
|
||||
/*
|
||||
tmp.format("Ditta %d %s Via %s %s %s %s", _codditta,
|
||||
(const char *)_ragsoc,(const char *)_viafis, (const char *)_cap,
|
||||
(const char *)_comunefis, (const char *)_provfis);
|
||||
*/
|
||||
tmp << "Ditta " << _codditta << ' ' << _ragsoc << " Via " << _viafis << ' '
|
||||
<< _cap << ' ' << _comunefis << ' ' << _provfis;
|
||||
return tmp;
|
||||
}
|
||||
|
||||
|
||||
const char * TDati_ditta::seconda_riga()
|
||||
{
|
||||
tmp = "Data @<";
|
||||
tmp.right_just(_stampa_width-15);
|
||||
tmp.overwrite (format ("Partita iva %s @26gCodice fiscale %s",
|
||||
(const char*)_paiva, (const char*)_cofi));
|
||||
return tmp;
|
||||
}
|
||||
|
||||
|
859
cg/cg4600.cpp
859
cg/cg4600.cpp
File diff suppressed because it is too large
Load Diff
12
cg/conto.cpp
12
cg/conto.cpp
@ -52,6 +52,18 @@ TConto& TConto::set(int g, int c, long s, char t, const char* d)
|
||||
return *this;
|
||||
}
|
||||
|
||||
const TConto& TConto::add_to(TToken_string& ts, int from, int mode)
|
||||
{
|
||||
if (mode & 0x1)
|
||||
ts.add(_tipo, from++);
|
||||
ts.add(_gruppo, from++);
|
||||
ts.add(_conto, from++);
|
||||
ts.add(_sottoconto, from++);
|
||||
if (mode & 0x2)
|
||||
ts.add(descrizione(), from);
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
// Certified 100%
|
||||
bool TConto::ok() const
|
||||
|
@ -33,8 +33,10 @@ public:
|
||||
virtual ~TConto() {}
|
||||
|
||||
TConto& set(int g = 0, int c = 0, long s = 0L, char t = ' ', const char* d = NULL);
|
||||
const TConto& add_to(TToken_string& ts, int from, int mode = 0);
|
||||
|
||||
virtual bool ok() const; // Gruppo, Conto e Sottoconto non nulli
|
||||
|
||||
real& dare() { return _dare; }
|
||||
real& avere() { return _avere; }
|
||||
real& darepro() { return _darepro; }
|
||||
|
Loading…
x
Reference in New Issue
Block a user