Corretta gestione extra-contabile

git-svn-id: svn://10.65.10.50/trunk@2652 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1996-02-29 11:14:48 +00:00
parent 10b377cf0a
commit f2770ff0cb
2 changed files with 144 additions and 49 deletions

View File

@ -1239,7 +1239,7 @@ bool TPrimanota_application::iva_notify(TSheet_field& iva, int r, KEY k)
oldpos = bill2pos(oldconto, 'I');
if (oldpos < 0)
{
const TString80 d(cau.desc_agg(2));
const TString d(cau.desc_agg(2));
oldpos = a.set_cgs_row(-1, a.real2imp(ZERO, 'I'), oldconto, d, 'I');
}
}
@ -1307,7 +1307,7 @@ bool TPrimanota_application::iva_notify(TSheet_field& iva, int r, KEY k)
const TImporto val(a.real2imp(imponibile, 'I'));
if (conto.ok() && !val.is_zero()) // Se c'e' imponibile ...
{ // crea una nuova riga contabile
const TString80 d(cau.desc_agg(2));
const TString d(cau.desc_agg(2));
a.set_cgs_row(-1, val, conto, d, 'I');
}
}
@ -1337,7 +1337,7 @@ bool TPrimanota_application::iva_notify(TSheet_field& iva, int r, KEY k)
if (!imposta.is_zero()) // Se c'e' imposta ...
{ // ... crea nuova riga per l'IVA
const TImporto val(a.real2imp(imposta, 'I'));
const TString80 d(cau.desc_agg(ri));
const TString d(cau.desc_agg(ri));
newposiva = a.set_cgs_row(-1, val, contoiva, d, tipod);
}
}
@ -1487,7 +1487,7 @@ bool TPrimanota_application::iva_sottoconto_handler(TMask_field& f, KEY key)
if (td == "FV" || td == "NC") spric = 4;
}
TString16 s; if (spric > 0) s << spric;
TString s; if (spric > 0) s << spric;
m.set(105, s, TRUE); // Setta il campo spesa-ricavo della riga IVA
}
return TRUE;
@ -1598,7 +1598,7 @@ bool TPrimanota_application::caus_query_handler(TMask_field& f, KEY key)
if (f.to_check(key))
{
const TString16 cau = f.get();
const TString cau = f.get();
const int ann = m.get_int(F_ANNOIVA);
const TipoIVA i = app().cau2IVA(cau, ann); // Cerca causale e suo tipo
@ -1625,7 +1625,7 @@ bool TPrimanota_application::caus_modify_handler(TMask_field& f, KEY key)
if (!ok) return FALSE;
const int ann = f.mask().get_int(F_ANNOIVA);
const TString16 cau(f.get());
const TString cau(f.get());
const TCausale c(cau, ann);
if (!c.ok()) return FALSE;
@ -1656,12 +1656,15 @@ bool TPrimanota_application::datareg_handler(TMask_field& f, KEY key)
if (dr > TDate(TODAY))
return f.error_box("La data dell'operazione e' superiore quella di sistema");
const int ae = app()._esercizi.date2esc(dr); // Anno esercizio
TPrimanota_application& a = app();
TLibro_giornale& gio = a.giornale();
const int ae = a._esercizi.date2esc(dr); // Anno esercizio
if (ae <= 0)
return f.error_box("La data dell'operazione non appartiene a nessun esercizio");
if (m.query_mode() || app().giornale().year() != ae)
ok = app().giornale().read(ae);
if (m.query_mode() || gio.year() != ae)
ok = gio.read(ae);
else
ok = TRUE;
@ -1670,13 +1673,11 @@ bool TPrimanota_application::datareg_handler(TMask_field& f, KEY key)
if (key == K_ENTER || f.focusdirty())
{
TPrimanota_application& a = app();
const long numreg = m.get_long(F_NUMREG);
const bool error = numreg == 0 || numreg > a._lastreg;
if (key != K_ENTER && !app()._skip_giornale_check)
if (key != K_ENTER && !a._skip_giornale_check)
{
const TLibro_giornale& gio = a.giornale();
if (dr < gio.last_print())
{
f.error_box("La data dell'operazione e' antecedente al %s,\n"

View File

@ -101,6 +101,7 @@ class TPay_mask : public TMask
const TGame_mask& _parent;
TDecoder _causale;
bool _assigned;
bool _can_solder;
protected:
@ -111,10 +112,21 @@ protected:
static bool conto_handler(TMask_field& f, KEY k);
static bool descr_handler(TMask_field& f, KEY k);
void gioca_cambi(int force = 0x0);
#ifdef __EXTRA__
static bool datareg_handler(TMask_field& f, KEY k);
static bool datadoc_handler(TMask_field& f, KEY k);
static bool numdoc_handler(TMask_field& f, KEY k);
static bool sezione_handler(TMask_field& f, KEY k);
#endif
public:
void set_pag(const TRectype& oldpag, const TRiga_scadenze& scad, const TImporto& importo);
void get_pag(TRectype& oldpag, TRectype& somma) const;
bool assigned() const { return _assigned; }
bool unassigned() const { return !_assigned; }
void attiva_valuta(bool on);
TPay_mask(const TGame_mask& parent, int mode);
virtual ~TPay_mask() {}
@ -134,13 +146,15 @@ TPay_mask::TPay_mask(const TGame_mask& parent, int mod)
enable(DLG_DELREC, edit_mode());
#ifdef __EXTRA__
enable(E_SEZIONE, insert_mode());
hide(E_CODPAG); hide(E_DESPAG);
hide(E_CODPAG); hide(E_DESPAG);
set_handler(E_DATAREG, datareg_handler);
set_handler(E_DATADOC, datadoc_handler);
set_handler(E_NUMDOC, numdoc_handler);
set_handler(E_SEZIONE, sezione_handler);
set_handler(E_TOTALE, TSaldaconto_app::totale_handler);
if (app().gestione_valuta())
{
disable(E_VALUTA); // Non posso cambiare codice valuta!
{
show(-3);
set_handler(E_TOTDOCVAL, TSaldaconto_app::totval_handler);
set_handler(E_VALUTA, TSaldaconto_app::valuta_handler);
set_handler(E_DATACAMBIO, TSaldaconto_app::datacambio_handler);
@ -164,14 +178,38 @@ TPay_mask::TPay_mask(const TGame_mask& parent, int mod)
#endif
}
void TPay_mask::attiva_valuta(bool in_valuta)
{
if (in_valuta)
{
set_handler(S_IMPORTOVAL, importo_handler);
set_handler(S_IMPORTO, importolire_handler);
}
else
set_handler(S_IMPORTO, importo_handler);
enable(S_RITENUTE, !in_valuta); // dis/abilita ritenute
enable(S_IMPORTOVAL, in_valuta);
if (in_valuta)
{
reset(S_RITENUTE);
}
else
{
reset(S_IMPORTOVAL_SCAD);
reset(S_IMPORTOVAL);
}
}
void TPay_mask::set_pag(const TRectype& oldpag, const TRiga_scadenze& scad,
const TImporto& residuo)
{
const TPartita& p = scad.partita();
const int nrigp = oldpag.get_int(PAGSCA_NRIGP);
const TRiga_partite& sum = p.riga(nrigp);
const bool assigned = oldpag.get_int(PAGSCA_NRIGA) != TPartita::UNASSIGNED;
const TRiga_partite& fatt = assigned ? scad.riga() : sum;
_assigned = oldpag.get_int(PAGSCA_NRIGA) != TPartita::UNASSIGNED;
const TRiga_partite& fatt = _assigned ? scad.riga() : sum;
TRelation rel(LF_PAGSCA); // Working relation
rel.add(LF_PARTITE, "ANNO=ANNO|NUMPART=NUMPART");
@ -192,12 +230,13 @@ void TPay_mask::set_pag(const TRectype& oldpag, const TRiga_scadenze& scad,
prompt << ' ' << k.sottoconto() << ' ';
prompt << "Partita:" << p.anno() << ' ' << p.numero()
<< " Riga:" << oldpag.get_int(PAGSCA_NRIGA)
<< " Rata:" << oldpag.get_int(PAGSCA_NRATA)
<< " del ";
if (assigned)
prompt << scad.get_date(SCAD_DATASCAD).string();
<< " Rata:" << oldpag.get_int(PAGSCA_NRATA);
if (assigned())
prompt << " del " << scad.get_date(SCAD_DATASCAD).string();
#ifndef __EXTRA__
else
prompt << sum.get_date(PART_DATAPAG).string();
prompt << " del " << sum.get_date(PART_DATAPAG).string();
#endif
group.set(prompt);
set(S_NUMDOC, fatt.get(PART_NUMDOC)); // Numero documento
@ -215,7 +254,7 @@ void TPay_mask::set_pag(const TRectype& oldpag, const TRiga_scadenze& scad,
const bool in_valuta = fatt.in_valuta();
const char sez_fat = fatt.sezione();
set(S_SEZIONE_SCAD, sez_fat == 'A' ? "A" : "D"); // Sezione della riga
if (assigned)
if (assigned())
{
set(S_IMPORTO_SCAD, scad.get(SCAD_IMPORTO)); // Importo della rata
if (in_valuta)
@ -234,15 +273,8 @@ void TPay_mask::set_pag(const TRectype& oldpag, const TRiga_scadenze& scad,
hide(S_RESIDUORATA); // Se non assegnato nascondi residuo rata
_da_pagare = ZERO;
}
if (in_valuta)
{
set_handler(S_IMPORTOVAL, importo_handler);
set_handler(S_IMPORTO, importolire_handler);
}
else
set_handler(S_IMPORTO, importo_handler);
attiva_valuta(in_valuta);
set_handler(S_SALDOACC, saldo_handler);
real oldimp = oldpag.get_real(in_valuta ? PAGSCA_IMPORTOVAL : PAGSCA_IMPORTO);
@ -252,9 +284,6 @@ void TPay_mask::set_pag(const TRectype& oldpag, const TRiga_scadenze& scad,
// Ricorda l'importo da pagare
_da_pagare += oldimp;
// const long numreg = sum.get_long(PART_NREG);
// const int numrig = sum.get_int(PART_NUMRIG);
#ifndef __EXTRA__
_pagabile = _parent.residuo(in_valuta).valore();
@ -267,7 +296,7 @@ void TPay_mask::set_pag(const TRectype& oldpag, const TRiga_scadenze& scad,
// Il flag di saldo/acconto e' attivo solo se non ci sono acconti, cioe':
// pagamento non assegnato o con data documento antecedente quella della fattura
_can_solder = assigned;
_can_solder = _assigned;
if (_can_solder)
{
const tipo_movimento tm = sum.tipo();
@ -282,13 +311,15 @@ void TPay_mask::set_pag(const TRectype& oldpag, const TRiga_scadenze& scad,
// Mostra saldo solo se non e' ne' un acconto, ne' una nota di credito
enable(S_SALDOACC, _can_solder);
show(-3, in_valuta); // Attiva campi relativi alla valuta
#ifdef __EXTRA__
enable(E_SEZIONE, oldpag.get_char(PAGSCA_ACCSAL) != 'S');
// La valuta puo' essere cambiata solo su partite nuove
const bool on = p.first() == p.last();
enable(E_VALUTA, on);
#else
show(-3, in_valuta); // Attiva campi relativi alla valuta
set_handler(S_GRUPPO, conto_handler);
set_handler(S_CONTO, conto_handler);
const bool mostra_conto = !sum.is_nota_credito();
@ -299,8 +330,8 @@ void TPay_mask::set_pag(const TRectype& oldpag, const TRiga_scadenze& scad,
_datadoc = sum.get_date(PART_DATADOC);
set_handler(S_DATAPAG, datapag_handler);
const bool mostra_ritenute = !(sum.is_nota_credito() || in_valuta);
show(S_RITENUTE, mostra_ritenute); // mostra/nasconde ritenute
const bool mostra_ritenute = !sum.is_nota_credito();
show(S_RITENUTE, mostra_ritenute);
}
void TPay_mask::get_pag(TRectype& newpag, TRectype& sum) const
@ -356,12 +387,21 @@ bool TPay_mask::importo_handler(TMask_field& f, KEY k)
TPay_mask& m = (TPay_mask&)f.mask();
if (k == K_F8)
{
{
real imp;
#ifdef __EXTRA__
const bool in_valuta = m.field(S_IMPORTOVAL).active();
m._pagabile = m.get_real(in_valuta ? E_TOTDOCVAL : E_TOTALE);
if (m._assigned)
imp = fnc_min(m._da_pagare, m._pagabile);
else
imp = m._pagabile;
#else
if (m.field(S_RESIDUORATA).shown() && m.field(S_RESIDUOPAG).shown())
imp = fnc_min(m._da_pagare, m._pagabile);
else
imp = m.field(S_RESIDUORATA).shown() ? m._da_pagare : m._pagabile;
#endif
if (m.field(S_RITENUTE).active())
imp -= real(m.get(S_RITENUTE));
@ -411,8 +451,15 @@ bool TPay_mask::importolire_handler(TMask_field& f, KEY k)
TPay_mask& m = (TPay_mask&)f.mask();
if (k == K_F8)
{
#ifdef __EXTRA__
if (m.unassigned())
f.set(m.get(E_TOTALE));
else
#endif
m.send_key(k, S_IMPORTOVAL);
}
if (f.to_check(k))
m.gioca_cambi();
return TRUE;
@ -432,6 +479,55 @@ bool TPay_mask::saldo_handler(TMask_field& f, KEY k)
return TRUE;
}
bool TPay_mask::numdoc_handler(TMask_field& f, KEY k)
{
if (f.to_check(k))
{
TPay_mask& m = (TPay_mask&)f.mask();
if (!m._assigned)
m.set(S_NUMDOC, f.get());
}
return TRUE;
}
bool TPay_mask::datareg_handler(TMask_field& f, KEY k)
{
if (k == K_TAB && f.focusdirty())
{
TMask& m = f.mask();
if (m.get(S_DATAPAG).empty())
m.set(S_DATAPAG, f.get());
}
return TRUE;
}
bool TPay_mask::datadoc_handler(TMask_field& f, KEY k)
{
if (f.to_check(k))
{
TPay_mask& m = (TPay_mask&)f.mask();
m._datadoc = f.get();
if (!m._assigned)
m.set(S_DATADOC, m._datadoc);
if (m.get(S_DATAPAG).empty())
m.set(S_DATAPAG, m._datadoc);
}
return TRUE;
}
bool TPay_mask::sezione_handler(TMask_field& f, KEY k)
{
if (k == K_SPACE)
{
TPay_mask& m = (TPay_mask&)f.mask();
if (!m._assigned)
m.set(S_SEZIONE_SCAD, f.get());
}
return TRUE;
}
bool TPay_mask::datapag_handler(TMask_field& f, KEY k)
{
if (f.to_check(k))
@ -481,7 +577,7 @@ bool TNew_mask::tipomov_handler(TMask_field& f, KEY k)
{
TNew_mask& m = (TNew_mask&)f.mask();
if (!m._allow_fatt && f.get() == "1")
return f.error_box("Non e' possibile utilizzare una fattura per un pagamento");
return f.error_box("Non e' possibile utilizzare una fattura come pagamento");
}
return TRUE;
@ -1071,7 +1167,7 @@ char TGame_mask::calcola_sezione(tipo_movimento tm) const
int TGame_mask::nuova_riga(TPartita& partita, tipo_movimento tm) const
{
const int prima_riga = partita.first(); // Memorizza prima riga
const int una_riga = partita.last(); // Memorizza una riga valida
TRiga_partite& part = partita.new_row(); // Creazione nuova riga vuota
const int nriga = part.get_int(PART_NRIGA); // Nuova riga
@ -1086,9 +1182,9 @@ int TGame_mask::nuova_riga(TPartita& partita, tipo_movimento tm) const
part.put(PART_TIPOMOV, (int)tm);
if (prima_riga > 0)
if (una_riga > 0)
{
const char* valuta = partita.riga(prima_riga).get(PART_CODVAL);
const char* valuta = partita.riga(una_riga).get(PART_CODVAL);
part.put(PART_CODVAL, valuta);
}
@ -1097,8 +1193,6 @@ int TGame_mask::nuova_riga(TPartita& partita, tipo_movimento tm) const
const char* s = oggi.string();
part.put(PART_DATADOC, s);
part.put(PART_DATAREG, s);
if (tm != tm_fattura)
part.put(PART_DATAPAG, s);
#else
// Setta il cambio corrente
const TValuta valuta(*this, P_VALUTA, P_DATACAMBIO, P_CAMBIO);