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:
guy 1994-09-07 16:59:33 +00:00
parent 228233db31
commit 60064f97d3
15 changed files with 979 additions and 613 deletions

View File

@ -52,6 +52,7 @@ TMask* TPrimanota_application::load_mask(int n)
m->set_handler(F_TOTALE, totale_handler); m->set_handler(F_TOTALE, totale_handler);
m->set_handler(F_RITFIS, ritfis_handler); m->set_handler(F_RITFIS, ritfis_handler);
m->set_handler(F_RITSOC, ritsoc_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_VISVAL, visval_handler);
m->set_handler(F_OCCASEDIT, occas_handler); m->set_handler(F_OCCASEDIT, occas_handler);
m->set_handler(F_SOLAIVA, solaiva_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) bool TPrimanota_application::read_caus(const char* cod, int year)
{ {
const bool ok = causale().read(cod, year); const bool ok = causale().read(cod, year);
bool nob = FALSE, dob = FALSE;
if (ok) if (ok)
{ {
TMask& m = *load_mask(_iva == nessuna_iva ? 1 : 2); nob = _causale.num_doc();
dob = _causale.data_doc();
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);
} }
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; return ok;
} }

View File

@ -32,7 +32,7 @@ END
NUMBER F_NUMREG 7 NUMBER F_NUMREG 7
BEGIN BEGIN
PROMPT 1 3 "Operazione n. " PROMPT 57 3 "Operazione n."
FIELD NUMREG FIELD NUMREG
FLAGS "RD" FLAGS "RD"
KEY 1 KEY 1
@ -40,44 +40,44 @@ END
DATE F_DATAREG DATE F_DATAREG
BEGIN BEGIN
PROMPT 44 3 "Data operazione " PROMPT 1 3 "Data operazione "
FIELD DATAREG FIELD DATAREG
END 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 DATE F_DATACOMP
BEGIN BEGIN
PROMPT 44 4 "Data di competenza " PROMPT 1 4 "Data di competenza "
FIELD DATACOMP FIELD DATACOMP
END END
NUMBER F_ANNOES 4 NUMBER F_ANNOES 4
BEGIN BEGIN
PROMPT 1 5 "Esercizio " PROMPT 57 4 "Esercizio "
FIELD ANNOES FIELD ANNOES
FLAGS "D" FLAGS "D"
END 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 NUMBER F_ANNOIVA 4
BEGIN BEGIN
FLAGS "H" FLAGS "H"
END 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 STRING F_DESCAGG 5
BEGIN BEGIN
PROMPT 1 6 "Descrizione " PROMPT 1 6 "Descrizione "

View File

@ -53,6 +53,15 @@ BEGIN
FLAGS "DG" FLAGS "DG"
END 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 DATE F_DATAREG
BEGIN BEGIN
PROMPT 1 3 "Data operazione " PROMPT 1 3 "Data operazione "
@ -97,15 +106,6 @@ BEGIN
FLAGS "D" FLAGS "D"
END 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 STRING F_NUMDOC 7
BEGIN BEGIN
PROMPT 57 5 "Documento n. " PROMPT 57 5 "Documento n. "
@ -373,7 +373,7 @@ END
STRING F_CODPAG 4 STRING F_CODPAG 4
BEGIN BEGIN
PROMPT 61 11 "Pagamento " PROMPT 60 11 "Pagamento "
USE %CPG USE %CPG
INPUT CODTAB F_CODPAG INPUT CODTAB F_CODPAG
DISPLAY "Codice" CODTAB DISPLAY "Codice" CODTAB
@ -382,9 +382,33 @@ BEGIN
CHECKTYPE NORMAL CHECKTYPE NORMAL
END 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 STRING F_CODIVA 4
BEGIN BEGIN
PROMPT 1 12 "Codice IVA " PROMPT 60 12 "Codice IVA "
FLAGS "U" FLAGS "U"
USE %IVA USE %IVA
INPUT CODTAB F_CODIVA INPUT CODTAB F_CODIVA
@ -396,48 +420,23 @@ BEGIN
CHECKTYPE NORMAL CHECKTYPE NORMAL
END 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 DATE F_DATA74TER
BEGIN BEGIN
PROMPT 1 13 "Data 74/ter " PROMPT 54 13 "Data 74/ter "
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
FIELD DATA74TER FIELD DATA74TER
END END
NUMBER F_ANNORIF 4 NUMBER F_ANNORIF 4
BEGIN BEGIN
PROMPT 1 14 "Rif.partita " PROMPT 45 14 "Rif.partita "
FLAGS "A" FLAGS "A"
HELP "Anno di riferimento partita" HELP "Anno di riferimento partita"
END END
NUMBER F_NUMRIF 7 NUMBER F_NUMRIF 7
BEGIN BEGIN
PROMPT 20 14 "/" PROMPT 69 14 "/"
HELP "Numero documento (o protocollo IVA) di riferimento" HELP "Numero documento (o protocollo IVA) di riferimento"
END END

View File

@ -186,14 +186,18 @@ int TMovimentoPN::write(bool force, TDate&)
iva(i).put("TIPOATT", tipoatt); iva(i).put("TIPOATT", tipoatt);
} }
} }
_oldcg = _oldiva = 0; _oldcg = _oldiva = 0;
int err = registra(FALSE, force); int err = registra(FALSE, force);
if (err == NOERR) 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()) if (reg.not_empty())
{ { // Aggiorna data registrazione e protocollo IVA sul registro
const long protiva = r.get_long("PROTIVA"); const long protiva = r.get_long("PROTIVA");
const long uprotiva = r.get_long("UPROTIVA"); const long uprotiva = r.get_long("UPROTIVA");
const TDate datareg = r.get_date("DATAREG"); const TDate datareg = r.get_date("DATAREG");

View File

@ -1,44 +1,44 @@
#ifndef __RELATION_H #ifndef __RELATION_H
#include <relation.h> #include <relation.h>
#endif #endif
class TMovimentoPN : public TRelation class TMovimentoPN : public TRelation
{ {
// class TMovimentoPN : public TRelation // class TMovimentoPN : public TRelation
// @END // @END
// @DPRIV // @DPRIV
TArray _cg, _iva; TArray _cg, _iva;
int _oldcg, _oldiva; int _oldcg, _oldiva;
real _balance; real _balance;
// @END // @END
protected: protected:
// @FPROT // @FPROT
int write_rec(bool re, const TRectype&r, TLocalisamfile* f); int write_rec(bool re, const TRectype&r, TLocalisamfile* f);
int cancella(TLocalisamfile* f, int da, int a); int cancella(TLocalisamfile* f, int da, int a);
int registra(bool re, bool force); int registra(bool re, bool force);
int read_mov_rows(); int read_mov_rows();
// @END // @END
public: public:
// @FPUB // @FPUB
virtual int next(TReclock lockop = _nolock) { return (file()->next(lockop) || read_mov_rows()); } 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 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 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 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 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 read(TIsamop op = _isgteq, TReclock lockop = _nolock, TDate& atdate = (TDate&)botime);
virtual int write (bool force = TRUE, TDate& atdate = botime); virtual int write (bool force = TRUE, TDate& atdate = (TDate&)botime);
virtual int rewrite(bool force = TRUE, TDate& atdate = botime); virtual int rewrite(bool force = TRUE, TDate& atdate = (TDate&)botime);
virtual int remove (TDate& atdate = botime); virtual int remove (TDate& atdate = (TDate&)botime);
TRectype& cg(int i); TRectype& cg(int i);
TRectype& iva(int i); TRectype& iva(int i);
int cg_items() const { return _cg.items(); } int cg_items() const { return _cg.items(); }
int iva_items() const { return _iva.items(); } int iva_items() const { return _iva.items(); }
void destroy_rows(); void destroy_rows();
TMovimentoPN(); TMovimentoPN();
virtual ~TMovimentoPN() {} virtual ~TMovimentoPN() {}
}; };

View File

@ -53,18 +53,19 @@ int TPrimanota_application::date2esc(const TDate& d, int* prevesc)
// Calcolo della percentuale di un dato codice IVA // Calcolo della percentuale di un dato codice IVA
// Certified 99% // Certified 99%
const real& TPrimanota_application::cod2IVA(const char* codiva) const real& TPrimanota_application::cod2IVA(const TMask& m)
{ {
static TString16 _codiva; static TString16 _codiva;
static real _percent; static real _percent;
const TString& codiva = m.get(102);
if (_codiva != codiva) if (_codiva != codiva)
{ {
_codiva = codiva; _codiva = codiva;
TCodiceIVA c(_codiva); TCodiceIVA c(_codiva);
_percent = c.percentuale(); _percent = c.percentuale();
} }
return _percent; return _percent;
} }
@ -76,6 +77,23 @@ real TPrimanota_application::scorpora(real& imponibile, const real& percent)
return imposta; 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 // Determina se un codice sospeso o no
// Certified 50% // Certified 50%
@ -452,6 +470,14 @@ bool TPrimanota_application::cg_notify(int r, KEY k)
cg.sheet_mask().enable(DLG_DELREC, tipo == ' '); cg.sheet_mask().enable(DLG_DELREC, tipo == ' ');
break; break;
case K_ENTER: 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(); app().calcola_saldo();
break; break;
case K_DEL: 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 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()); const real imponibile(f.get());
real imposta = abs(imponibile) * percent / 100.0; imposta.ceil(); real imposta = abs(imponibile) * percent / 100.0; imposta.ceil();
if (imponibile.sign() < 0) imposta = -imposta; if (imponibile.sign() < 0) imposta = -imposta;
@ -556,7 +582,7 @@ bool TPrimanota_application::imposta_handler(TMask_field& f, KEY key)
if (key == K_ENTER) if (key == K_ENTER)
{ {
const real imponibile(f.mask().get(101)); 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; real imposta = abs(imponibile) * percent / 100.0;
imposta.ceil(); imposta.ceil();
if (imponibile < ZERO) imposta = -imposta; if (imponibile < ZERO) imposta = -imposta;
@ -564,7 +590,7 @@ bool TPrimanota_application::imposta_handler(TMask_field& f, KEY key)
const real val(f.get()); const real val(f.get());
if (val != imposta) 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 wrong(val.string("."));
const TString16 right(imposta.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()) if (key == K_F8 && f.get().empty())
{ {
real imponibile(f.mask().get(101)); 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); const real imposta = scorpora(imponibile, percent);
f.mask().set(101, imponibile.string()); f.mask().set(101, imponibile.string());
f.set(imposta.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; if (k != K_ENTER) return TRUE;
const real imp = app().calcola_imp(); const real imp = app().calcola_imp();
const real tot = app().totale_documento();
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));
if (imp != tot) if (imp != tot)
{ {
@ -822,24 +837,36 @@ bool TPrimanota_application::datareg_handler(TMask_field& f, KEY key)
if (!ok) if (!ok)
return f.error_box("Non esiste il libro giornale dell'esercizio %d", ae); return f.error_box("Non esiste il libro giornale dell'esercizio %d", ae);
if (dr < app().giornale().last_print()) const TLibro_giornale& gio = app().giornale();
return f.error_box("La data dell'operazione e' antecedente alla " const TDate ljp(gio.global_last_print());
"data di stampa del libro giornale dell'esercizio %d", ae); 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) if (!m.query_mode() && app().iva() != nessuna_iva)
{ {
const int annoiva = m.get_int(F_ANNOIVA); TRegistro& reg = app().causale().reg();
if (dr.year() != annoiva) const TString16 codreg(reg.name());
if (reg.year() != dr.year())
{ {
TRegistro& reg = app().causale().reg(); const bool ok = reg.read(codreg, dr.year());
const TString16 codreg(reg.name()); if (!ok) return FALSE;
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());
} }
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; return ok;
@ -989,7 +1016,7 @@ void TPrimanota_application::add_cgs_tot(TMask& m)
conto = bill.conto(); m.set(F_CONTOCLIFO, conto); conto = bill.conto(); m.set(F_CONTOCLIFO, conto);
} }
if (tipo == 'C' && causale().reg().corrispettivi()) if (tipo == 'C' && causale().corrispettivi())
tipo = ' '; tipo = ' ';
TConto c(gruppo, conto, codice, tipo); TConto c(gruppo, conto, codice, tipo);
real tot(m.get(F_TOTALE)); real tot(m.get(F_TOTALE));
@ -997,41 +1024,6 @@ void TPrimanota_application::add_cgs_tot(TMask& m)
// Creazione/Aggiornamento riga totale // Creazione/Aggiornamento riga totale
const int pos = type2pos('T'); const int pos = type2pos('T');
set_cgs_row(pos, real2imp(tot, 'T'), c, "Totale documento", '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 // Handler of the F_TOTALE
// Certified 99% // Certified 99%
bool TPrimanota_application::totale_handler(TMask_field& f, KEY key) bool TPrimanota_application::totale_handler(TMask_field& f, KEY key)
{ {
bool ok = TRUE;
if (key == K_TAB && f.focusdirty()) if (key == K_TAB && f.focusdirty())
{
app().add_cgs_tot(f.mask()); app().add_cgs_tot(f.mask());
} else
if (key == K_ENTER && f.get().empty()) if (key == K_ENTER && f.get().empty())
return f.yesno_box("Totale documento nullo: continuare ugualmente?"); ok = f.yesno_box("Totale documento nullo: continuare ugualmente?");
return TRUE; return ok;
} }
@ -1130,8 +1173,7 @@ bool TPrimanota_application::solaiva_handler(TMask_field& f, KEY key)
TMask& m = f.mask(); TMask& m = f.mask();
const bool anchecg = !m.get_bool(F_SOLAIVA); const bool anchecg = !m.get_bool(F_SOLAIVA);
m.enable_page(2, anchecg); app().cgs().show(anchecg);
app().cgs().enable(anchecg);
if (m.is_running() && 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_RITFIS).not_empty()) app().add_cgs_rit(TRUE);
if (m.get(F_RITSOC).not_empty()) app().add_cgs_rit(FALSE); if (m.get(F_RITSOC).not_empty()) app().add_cgs_rit(FALSE);
TToken_string oldrow(128);
for (int i = 0; i < righe; i++) 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); iva_notify(i, K_SPACE);
r = oldrow;
iva_notify(i, K_ENTER); iva_notify(i, K_ENTER);
} }
pi.setstatus(i+1); pi.setstatus(i+1);

View File

@ -58,11 +58,13 @@ class TPrimanota_application : public TRelation_application
static bool totale_handler(TMask_field& f, KEY key); static bool totale_handler(TMask_field& f, KEY key);
static bool ritfis_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 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 visval_handler(TMask_field& f, KEY key);
static bool occas_code_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 occas_handler(TMask_field& f, KEY key);
static bool solaiva_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 descr_handler(TMask_field& f, KEY k);
static bool imponibile_handler(TMask_field& f, KEY key); static bool imponibile_handler(TMask_field& f, KEY key);
static bool codiva_handler(TMask_field& f, KEY key); static bool codiva_handler(TMask_field& f, KEY key);
static bool imposta_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 reg2IVA(const char* registro, int anno);
static TipoIVA cau2IVA(const char* causale, int anno); static TipoIVA cau2IVA(const char* causale, int anno);
static int type2pos(char tipo); 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 real scorpora(real& imponibile, const real& percentuale);
static int date2esc(const TDate& d, int* prev = NULL); static int date2esc(const TDate& d, int* prev = NULL);
static bool detraibile(int tipodet); static bool detraibile(int tipodet);
@ -126,6 +128,7 @@ protected:
bool test_swap(bool ritsoc); bool test_swap(bool ritsoc);
TImporto real2imp(const real& r, char tipo); TImporto real2imp(const real& r, char tipo);
real totale_documento();
void set_cgs_imp(int n, const TImporto& importo); void set_cgs_imp(int n, const TImporto& importo);
TImporto get_cgs_imp(int n); TImporto get_cgs_imp(int n);

View File

@ -11,13 +11,17 @@ const char* iva2name(TipoIVA iva)
const char* i; const char* i;
switch(iva) switch(iva)
{ {
case nessuna_iva : i = "Nessuna IVA"; break; case nessuna_iva:
case iva_acquisti: i = "IVA Acquisti"; break; i = "Nessuna IVA"; break;
case iva_vendite : i = "IVA Vendite"; break; case iva_acquisti:
case iva_generica: i = "IVA Generica"; break; i = "IVA Acquisti"; break;
default : i = "IVA ERRATA!"; break; case iva_vendite:
} i = "IVA Vendite"; break;
case iva_generica:
i = "IVA Generica"; break;
default:
i = "IVA ERRATA!"; break;
}
return i; return i;
} }
@ -193,6 +197,23 @@ bool TLibro_giornale::read(int y)
return found; 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) TLibro_giornale::TLibro_giornale(int y)
{ {
read(y); read(y);
@ -352,6 +373,7 @@ TipoIVA TCausale::iva() const
i = (TipoIVA)tpd.get_int("I0"); // IVA acquisti, vendite, generica i = (TipoIVA)tpd.get_int("I0"); // IVA acquisti, vendite, generica
if (i == iva_generica) if (i == iva_generica)
i = _reg.iva(); 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; return _iva;
} }
bool TCausale::corrispettivi() const
{
if (_iva == iva_errata) iva();
return _corrisp;
}
bool TCausale::similar(const TCausale& c) const bool TCausale::similar(const TCausale& c) const
{ {
@ -450,10 +477,9 @@ const TImporto& TImporto::operator -= (const TImporto& i)
return *this; return *this;
} }
const TImporto& TImporto::swap() const TImporto& TImporto::swap_section()
{ {
_sezione = (_sezione == 'D') ? 'A' : 'D'; _sezione = (_sezione == 'D') ? 'A' : 'D';
_valore = -_valore;
return *this; return *this;
} }

View File

@ -58,6 +58,8 @@ class TLibro_giornale : public TRegistro
{ {
public: public:
bool read(int year); bool read(int year);
TDate global_last_print() const;
TLibro_giornale(int year = 0); TLibro_giornale(int year = 0);
virtual ~TLibro_giornale() {} virtual ~TLibro_giornale() {}
}; };
@ -69,6 +71,7 @@ class TCausale : public TArray
TRegistro _reg; TRegistro _reg;
TipoIVA _iva; TipoIVA _iva;
bool _corrisp;
char _sezione_clifo, _sezione_ritsoc; char _sezione_clifo, _sezione_ritsoc;
protected: protected:
@ -89,6 +92,7 @@ public:
TRegistro& reg() { return _reg; } TRegistro& reg() { return _reg; }
TipoIVA iva() const; TipoIVA iva() const;
bool corrispettivi() const;
virtual bool ok() const { return !_rec.empty(); } virtual bool ok() const { return !_rec.empty(); }
bool similar(const TCausale& c) const; bool similar(const TCausale& c) const;
@ -127,8 +131,7 @@ public:
const TImporto& operator=(TToken_string& sv); const TImporto& operator=(TToken_string& sv);
const TImporto& operator+=(const TImporto& i); const TImporto& operator+=(const TImporto& i);
const TImporto& operator-=(const TImporto& i); const TImporto& operator-=(const TImporto& i);
const TImporto& swap(); const TImporto& swap_section();
const TImporto& TImporto::normalize() { if (_valore < ZERO) swap(); return *this; }
const TImporto& set(char s, const real& v); const TImporto& set(char s, const real& v);
const TImporto& add_to(TToken_string& s) const; const TImporto& add_to(TToken_string& s) const;

View File

@ -4,7 +4,7 @@
#include "cg4400.h" #include "cg4400.h"
#include "cg4400a.h" #include "cg4400a.h"
TFixed_string TMP (__tmp, MAXSTR); static TString256 TMP;
CG4400_application * app() { return (CG4400_application*) MainApp(); } CG4400_application * app() { return (CG4400_application*) MainApp(); }
@ -310,7 +310,7 @@ const char * CG4400_application::descr_doc(const char * tipo)
else else
TMP = ""; TMP = "";
return __tmp; return TMP;
} }
const char * CG4400_application::descr_iva(const char * cod) const char * CG4400_application::descr_iva(const char * cod)
@ -325,7 +325,7 @@ const char * CG4400_application::descr_iva(const char * cod)
else else
TMP = ""; TMP = "";
return __tmp; return TMP;
} }
const char * CG4400_application::desc_attivita(const char * codatt) 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"); TMP = attiv.get("S0");
else else
TMP = ""; TMP = "";
return __tmp; return TMP;
} }
const char * CG4400_application::ricerca_cf(char tipocf, long codcf) 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); TMP = _clifo->get(CLI_RAGSOC);
else else
TMP = ""; TMP = "";
return __tmp; return TMP;
} }
const char * CG4400_application::ricerca_occ(const char * occ) 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); TMP = occas.get(OCC_RAGSOC);
else else
TMP = ""; TMP = "";
return __tmp; return TMP;
} }
void CG4400_application::user_create() void CG4400_application::user_create()

View File

@ -24,9 +24,6 @@
#include "cglib03.h" #include "cglib03.h"
const int MAXSTR = 128;
static char __tmp[MAXSTR];
//enum STAMPA { bollati=1, unici=2 }; //enum STAMPA { bollati=1, unici=2 };
const int TABREG = (int)TTable::name2log("REG"); const int TABREG = (int)TTable::name2log("REG");

View File

@ -1,113 +1,112 @@
// cg4401.cpp // cg4401.cpp
// //
#include <applicat.h> #include <applicat.h>
#include <isam.h> #include <isam.h>
#include <strings.h> #include <strings.h>
#include <lffiles.h> #include <lffiles.h>
#include <utility.h> #include <utility.h>
#include <nditte.h> #include <nditte.h>
#include <anagr.h> #include <anagr.h>
#include <comuni.h> #include <comuni.h>
#include "cg4400.h" #include "cg4400.h"
static TFixed_string tmp(__tmp, MAXSTR); static TString256 tmp;
TRectype& TDati_ditta::look_com(const char * cod) TRectype& TDati_ditta::look_com(const char * cod)
{ {
_comuni->zero(); _comuni->zero();
_comuni->put(COM_COM,cod); _comuni->put(COM_COM,cod);
_comuni->read(); _comuni->read();
if (_comuni->bad()) _comuni->zero(); if (_comuni->bad()) _comuni->zero();
return _comuni->curr(); return _comuni->curr();
} }
TDati_ditta::TDati_ditta(long cod_ditta, int stampa_width) TDati_ditta::TDati_ditta(long cod_ditta, int stampa_width)
{ {
_stampa_width = stampa_width; _stampa_width = stampa_width;
_codditta = cod_ditta; _codditta = cod_ditta;
_nditte = new TLocalisamfile(LF_NDITTE); _nditte = new TLocalisamfile(LF_NDITTE);
_anag = new TLocalisamfile(LF_ANAG); _anag = new TLocalisamfile(LF_ANAG);
_comuni = new TLocalisamfile(LF_COMUNI); _comuni = new TLocalisamfile(LF_COMUNI);
} }
TDati_ditta::~TDati_ditta() TDati_ditta::~TDati_ditta()
{ {
delete _anag; delete _nditte; delete _comuni; delete _anag; delete _nditte; delete _comuni;
} }
void TDati_ditta::get_dati_ditta () void TDati_ditta::get_dati_ditta ()
{ {
TString codanagr; TString16 codanagr;
TString tipoa; char tipoa;
_nditte->zero(); _nditte->zero();
_nditte->put(NDT_CODDITTA, _codditta); _nditte->put(NDT_CODDITTA, _codditta);
_nditte->read(); _nditte->read();
if (_nditte->bad()) _nditte->zero(); if (_nditte->bad()) _nditte->zero();
_ragsoc = _nditte->get(NDT_RAGSOC); _ragsoc = _nditte->get(NDT_RAGSOC);
codanagr = _nditte->curr().get(NDT_CODANAGR); codanagr = _nditte->get(NDT_CODANAGR);
tipoa = _nditte->curr().get(NDT_TIPOA); tipoa = _nditte->get_char(NDT_TIPOA);
_anag->setkey(1); _anag->setkey(1);
_anag->zero(); _anag->zero();
_anag->put (ANA_TIPOA, tipoa); _anag->put (ANA_TIPOA, tipoa);
_anag->put (ANA_CODANAGR, codanagr); _anag->put (ANA_CODANAGR, codanagr);
_anag->read(); _anag->read();
if (_anag->bad()) _anag->zero(); if (_anag->bad()) _anag->zero();
_cofi = _anag->get(ANA_COFI); _cofi = _anag->get(ANA_COFI);
_paiva = _anag->get(ANA_PAIV); _paiva = _anag->get(ANA_PAIV);
_comunefis = _anag->get(ANA_COMRF); _comunefis = _anag->get(ANA_COMRF);
if (_comunefis.trim().empty()) if (_comunefis.trim().empty())
_comunefis = _anag->get(ANA_COMRES); _comunefis = _anag->get(ANA_COMRES);
TRectype dep = look_com (_comunefis); TRectype dep = look_com (_comunefis);
_comunefis = dep.get(COM_DENCOM); _comunefis = dep.get(COM_DENCOM);
_provfis = dep.get(COM_PROVCOM); _provfis = dep.get(COM_PROVCOM);
_cap = dep.get(COM_CAPCOM); _cap = dep.get(COM_CAPCOM);
if (_comunefis.trim().empty()) if (_comunefis.trim().empty())
{ {
_viafis = _anag->get(ANA_INDRF); _viafis = _anag->get(ANA_INDRF);
_viafis.rtrim(); _viafis.rtrim();
_viafis << " " << _anag->curr().get (ANA_CIVRF); _viafis << " " << _anag->curr().get (ANA_CIVRF);
} }
else else
{ {
_viafis = _anag->get(ANA_INDRES); _viafis = _anag->get(ANA_INDRES);
_viafis.rtrim(); _viafis.rtrim();
_viafis << " " << _anag->get (ANA_CIVRES); _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 * TDati_ditta::prima_riga()
(const char *)_ragsoc,(const char *)_viafis, (const char *)_cap, {
(const char *)_comunefis, (const char *)_provfis); get_dati_ditta();
tmp = riga; /*
return __tmp; 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);
const char * TDati_ditta::seconda_riga() */
{ tmp << "Ditta " << _codditta << ' ' << _ragsoc << " Via " << _viafis << ' '
TString riga(_stampa_width); << _cap << ' ' << _comunefis << ' ' << _provfis;
tmp = ""; return tmp;
riga = "Data @<"; }
riga.right_just(_stampa_width-15);
riga.overwrite (format ("Partita iva %s @26gCodice fiscale %s",
(const char*)_paiva, (const char*)_cofi)); const char * TDati_ditta::seconda_riga()
tmp = riga; {
return __tmp; 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;
}

File diff suppressed because it is too large Load Diff

View File

@ -52,6 +52,18 @@ TConto& TConto::set(int g, int c, long s, char t, const char* d)
return *this; 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% // Certified 100%
bool TConto::ok() const bool TConto::ok() const

View File

@ -33,8 +33,10 @@ public:
virtual ~TConto() {} virtual ~TConto() {}
TConto& set(int g = 0, int c = 0, long s = 0L, char t = ' ', const char* d = NULL); 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 virtual bool ok() const; // Gruppo, Conto e Sottoconto non nulli
real& dare() { return _dare; } real& dare() { return _dare; }
real& avere() { return _avere; } real& avere() { return _avere; }
real& darepro() { return _darepro; } real& darepro() { return _darepro; }