Corretta gestione dell causali contabili,

git-svn-id: svn://10.65.10.50/trunk@24 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1994-08-17 14:04:23 +00:00
parent 33be7ac1be
commit 10852c6b02

View File

@ -70,7 +70,8 @@ const real& TPrimanota_application::cod2IVA(const char* codiva)
real TPrimanota_application::scorpora(real& imponibile, const real& percent)
{
real imposta = imponibile * percent / (percent + 100.0); imposta.ceil();
real imposta = abs(imponibile) * percent / (percent + 100.0); imposta.ceil();
if (imponibile.sign() < 0) imposta = -imposta;
imponibile -= imposta;
return imposta;
}
@ -111,19 +112,7 @@ bool TPrimanota_application::detraibile(int tipodet)
const TSheet_field& iva = app().ivas();
TString16 chiave;
chiave = iva.mask().get(F_ANNOIVA);
chiave << iva.mask().get(F_CODREG);
TTable reg("REG");
reg.put("CODTAB", chiave);
reg.read();
#ifdef DBG
if(reg.status() != NOERR)
error_box("La minchia che trovo il registro '%s'", (const char*)chiave);
#endif
const char* att = reg.get("S8");
chiave.cut(4); chiave << att;
TString16 chiave(iva.mask().get(F_ANNOIVA)); chiave << app().causale().reg().attivita();
TTable pla("PLA");
pla.put("CODTAB", chiave);
@ -186,6 +175,7 @@ int TPrimanota_application::bill2contr(const TConto& conto, char sezione) const
}
// Controlla se un conto e' usato nelle righe IVA
bool TPrimanota_application::bill_used(const TConto& conto) const
{
const TArray& rows = ivas().rows_array();
@ -457,7 +447,7 @@ void TPrimanota_application::set_ivas_row(int nriga, const char* codiva, TConto&
TToken_string& riga = ivas().row(nriga);
riga = " "; // Importo
riga.add (codiva); // codiva
riga.add (" | | "); // Imposta - C/R - Det
riga.add (" | | "); // Det - Imposta - C/R
riga.add(tc.string(0x3)); // Conto
riga.add(desc); // Descrizione
}
@ -467,13 +457,19 @@ bool TPrimanota_application::imponibile_handler(TMask_field& f, KEY key)
{
if (key == K_TAB && f.dirty())
{
const TString& iva = f.mask().get(102);
TString16 iva(f.mask().get(102));
if (iva.empty())
{
iva = app().mask().get(F_CODIVA);
f.mask().set(102, iva);
}
if (iva.not_empty()) // Se c'e' il codice IVA
{
const real& percent = cod2IVA(iva);
const real imponibile(f.get());
real imposta = imponibile * percent / 100.0; imposta.ceil();
f.mask().set(103, imposta.string());
real imposta = abs(imponibile) * percent / 100.0; imposta.ceil();
if (imponibile.sign() < 0) imposta = -imposta;
f.mask().set(104, imposta.string());
}
}
@ -499,15 +495,17 @@ bool TPrimanota_application::imposta_handler(TMask_field& f, KEY key)
{
const real imponibile(f.mask().get(101));
const real& percent = cod2IVA(f.mask().get(102));
real imposta = imponibile * percent / 100.0; imposta.ceil();
real imposta = abs(imponibile) * percent / 100.0;
imposta.ceil();
if (imponibile.sign() < 0) imposta = -imposta;
const real val(f.get());
if (val != imposta)
{
const TString16 wrong(val.string("."));
const TString16 right(imposta.string("."));
if (f.yesno_box("Imposta di '%s' errata: modificare in '%s'?",
(const char*)wrong, (const char*)right))
f.set(imposta.string());
if (f.warning_box("Imposta di '%s' errata: dovrebbe essere '%s'",
(const char*)wrong, (const char*)right));
}
} else
if (key == K_F8 && f.get().empty())
@ -515,8 +513,8 @@ bool TPrimanota_application::imposta_handler(TMask_field& f, KEY key)
real imponibile(f.mask().get(101));
const real& percent = cod2IVA(f.mask().get(102));
const real imposta = scorpora(imponibile, percent);
f.set(imposta.string());
f.mask().set(101, imponibile.string());
f.set(imposta.string());
}
return TRUE;
@ -541,12 +539,12 @@ bool TPrimanota_application::iva_notify(int r, KEY k)
oldpos = bill2pos(oldconto, 'I');
oldimp = imp2sez(real(row.get(0)));
oldposiva = type2pos(detraibile(row.get_int(4)) ? 'D' : 'N');
oldiva = imp2sez(real(row.get(2)));
oldiva = imp2sez(real(row.get(3)));
}
if (k == K_DEL)
{
row.add("0", 0); // Azzera imponibile
row.add("0", 2); // Azzera imposta
row.add("0", 3); // Azzera imposta
k = K_ENTER; // Elegante o Sporco trucco
}
if (k == K_ENTER)
@ -575,7 +573,7 @@ bool TPrimanota_application::iva_notify(int r, KEY k)
// Aggiorna conto IVA sulla riga contabile
imp = imp2sez(real(row.get(2))); // Imposta
imp = imp2sez(real(row.get(3))); // Imposta
const bool detrarre = detraibile(row.get_int(4)); // Determina se IVA detraibile
app().causale().bill(detrarre ? 3 : 4, conto);
const char tipod = detrarre ? 'D' : 'N';
@ -605,8 +603,7 @@ bool TPrimanota_application::iva_handler(TMask_field& f, KEY k)
{
TToken_string& row = app().ivas().row(r);
imp += real(row.get(0)); // imponibile
row.get(); // IVA
imp += real(row.get()); // imposta
imp += real(row.get(3)); // imposta
}
const TMask& m = f.mask();
@ -619,7 +616,7 @@ bool TPrimanota_application::iva_handler(TMask_field& f, KEY k)
TString16 t(tot.string("."));
TString16 i(imp.string("."));
return error_box("La somma del totale documento e delle ritenute (%s) e' diverso dalla "
"somma degli imponibili e delle imposte (%s)", t, i);
"somma degli imponibili e delle imposte (%s)", (const char*)t, (const char*)i);
}
return TRUE;
@ -647,7 +644,7 @@ bool TPrimanota_application::num_handler(TMask_field& f, KEY key)
// Handler of the F_CODCAUS field on the query mask
// Certified 90%
// Certified 99%
bool TPrimanota_application::caus_query_handler(TMask_field& f, KEY key)
{
if (!f.mask().is_running()) return TRUE;
@ -657,12 +654,12 @@ bool TPrimanota_application::caus_query_handler(TMask_field& f, KEY key)
const int ann = f.mask().get_int(F_ANNOIVA);
const char* cau = f.get();
const TipoIVA i = cau2IVA(cau, ann);
const TipoIVA i = cau2IVA(cau, ann); // Cerca causale e suo tipo
if (i != iva_errata)
{
const bool ok = suspended_handler(f, key);
const bool ok = suspended_handler(f, key); // Controlla sospensione
if (ok)
dispatch_e_char(f.parent(), K_INS);
dispatch_e_char(f.parent(), K_INS); // Entra in modo inserimento
}
}
@ -711,9 +708,11 @@ bool TPrimanota_application::datareg_handler(TMask_field& f, KEY key)
if (m.query_mode())
{
if (ae == 0) return f.error_box("La data dell'operazione non appartiene a nessun esercizio");
if (ae == 0)
return f.error_box("La data dell'operazione non appartiene a nessun esercizio");
ok = app().giornale().read(ae);
if (!ok) return f.error_box("Non esiste il libro giornale dell'esercizio %d", ae);
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 "
@ -738,7 +737,7 @@ bool TPrimanota_application::datareg_handler(TMask_field& f, KEY key)
}
// Handler of the F_DATACOMP field on the modify mask
// Certified 70%
// Certified 90%
bool TPrimanota_application::datacomp_handler(TMask_field& f, KEY key)
{
if (!f.to_check(key, TRUE))
@ -771,7 +770,7 @@ bool TPrimanota_application::datacomp_handler(TMask_field& f, KEY key)
}
// Handler of the F_DATA74TER field on the modify mask
// Certified 70%
// Certified 90%
bool TPrimanota_application::data74ter_handler(TMask_field& f, KEY key)
{
if (!f.to_check(key)) return TRUE;
@ -885,10 +884,10 @@ void TPrimanota_application::add_cgs_tot(TMask& m)
{
iva_notify(0, K_SPACE);
const real imposta = scorpora(tot, iva.percentuale());
row.add(tot.string(), 0);
row.add(iva.codice(), 1);
row.add(imposta.string(), 2);
row.add(" | ");
row.add(tot.string(), 0); // imponibile
row.add(iva.codice(), 1); // imposta
row.add(imposta.string(), 3); // imposta
TConto bill; // Conto della prima riga IVA
const TString& tipo = iva.tipo();
@ -903,7 +902,12 @@ void TPrimanota_application::add_cgs_tot(TMask& m)
if (!bill.ok())
_causale.bill(2, bill);
row.add(bill.string(0x3));
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);
}