Corretta gestione extra-contabile
git-svn-id: svn://10.65.10.50/trunk@2652 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
10b377cf0a
commit
f2770ff0cb
@ -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"
|
||||
|
168
cg/cg2105.cpp
168
cg/cg2105.cpp
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user