Gestione saldaconto
git-svn-id: svn://10.65.10.50/trunk@2365 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
f4ea67e046
commit
cb27a9beae
@ -107,6 +107,7 @@ TMask* TPrimanota_application::load_mask(int n)
|
||||
ism.set_handler(103, detrazione_handler);
|
||||
ism.set_handler(104, imposta_handler);
|
||||
ism.set_handler(109, iva_sottoconto_handler);
|
||||
ism.set_handler(110, iva_sottoconto_handler);
|
||||
ism.set_handler(209, sheet_clifo_handler);
|
||||
ism.set_handler(309, sheet_clifo_handler);
|
||||
|
||||
|
@ -229,7 +229,6 @@ END
|
||||
NUMBER F_CLIENTE 6
|
||||
BEGIN
|
||||
PROMPT 1 10 "Cliente "
|
||||
FLAGS "R"
|
||||
FIELD CODCF
|
||||
GROUP 1
|
||||
USE LF_CLIFO KEY 1
|
||||
@ -254,7 +253,6 @@ END
|
||||
NUMBER F_FORNITORE 6
|
||||
BEGIN
|
||||
PROMPT 1 10 "Fornitore "
|
||||
FLAGS "R"
|
||||
FIELD CODCF
|
||||
GROUP 2
|
||||
USE LF_CLIFO KEY 1
|
||||
|
@ -27,7 +27,6 @@ END
|
||||
STRING P_VALUTA 3
|
||||
BEGIN
|
||||
PROMPT 1 2 "Valuta "
|
||||
HELP "Codice della valuta per movimento"
|
||||
FLAGS "DUZ"
|
||||
END
|
||||
|
||||
@ -43,13 +42,13 @@ BEGIN
|
||||
DISPLAY "Cambio@18" R10
|
||||
OUTPUT P_DATACAMBIO D0
|
||||
OUTPUT P_CAMBIO R10
|
||||
CHECKTYPE SEARCH
|
||||
GROUP 3
|
||||
END
|
||||
|
||||
NUMBER P_CAMBIO 15 5
|
||||
BEGIN
|
||||
PROMPT 48 2 "Cambio "
|
||||
HELP "Cambio della valuta"
|
||||
FLAGS "DRU"
|
||||
GROUP 3
|
||||
PICTURE ".5"
|
||||
@ -95,9 +94,9 @@ BEGIN
|
||||
PROMPT 0 11 ""
|
||||
ITEM "Riga"
|
||||
ITEM "Rata"
|
||||
ITEM "Data scad."
|
||||
ITEM "Data doc.@10"
|
||||
ITEM "Descrizione@20"
|
||||
ITEM "Data scad."
|
||||
ITEM "Descrizione@16"
|
||||
ITEM "Importo Lire@14"
|
||||
ITEM "Importo Valuta@14"
|
||||
ITEM "Num. reg."
|
||||
@ -105,7 +104,7 @@ BEGIN
|
||||
ITEM "Num. doc."
|
||||
ITEM "Prot. IVA"
|
||||
ITEM "Pagamento"
|
||||
// FLAGS "D"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
BOOLEAN P_SHOWALL
|
||||
@ -198,7 +197,7 @@ BEGIN
|
||||
PROMPT 1 2 "Riga pagamento "
|
||||
END
|
||||
|
||||
DATE 104
|
||||
DATE 103
|
||||
BEGIN
|
||||
PROMPT 41 2 "Data documento "
|
||||
END
|
||||
@ -213,7 +212,7 @@ BEGIN
|
||||
PROMPT 41 3 "Data reg. "
|
||||
END
|
||||
|
||||
NUMBER 110 5
|
||||
STRING 110 5
|
||||
BEGIN
|
||||
PROMPT 1 4 "Numero doc. "
|
||||
END
|
||||
@ -223,7 +222,7 @@ BEGIN
|
||||
PROMPT 41 5 "Protocollo IVA "
|
||||
END
|
||||
|
||||
DATE 103
|
||||
DATE 104
|
||||
BEGIN
|
||||
PROMPT 41 4 "Data scad. "
|
||||
END
|
||||
|
@ -67,10 +67,10 @@ BEGIN
|
||||
FLAGS "DR"
|
||||
END
|
||||
|
||||
NUMBER S_IMPORTOVAL_SCAD 15 2
|
||||
NUMBER S_IMPORTOVAL_SCAD 15 3
|
||||
BEGIN
|
||||
PROMPT 43 4 "Importo in valuta "
|
||||
PICTURE ".2"
|
||||
PICTURE ".3"
|
||||
FLAGS "DRV"
|
||||
GROUP 3
|
||||
END
|
||||
@ -103,10 +103,10 @@ BEGIN
|
||||
WARNING "L'importo deve essere specificato"
|
||||
END
|
||||
|
||||
NUMBER S_IMPORTOVAL 15 2
|
||||
NUMBER S_IMPORTOVAL 15 3
|
||||
BEGIN
|
||||
PROMPT 2 9 "Importo in valuta "
|
||||
PICTURE ".2"
|
||||
PICTURE ".3"
|
||||
FIELD IMPORTOVAL
|
||||
GROUP 3
|
||||
VALIDATE REQIF_FUNC 1 S_IMPORTO
|
||||
@ -235,11 +235,10 @@ BEGIN
|
||||
DISPLAY "Valuta" CODTAB[1,3]
|
||||
DISPLAY "Data@10" D0
|
||||
DISPLAY "Cambio@18" R10
|
||||
OUTPUT S_VALUTA CODTAB[1,3]
|
||||
OUTPUT S_DATACAMBIO D0
|
||||
OUTPUT S_CAMBIO R10
|
||||
GROUP 4
|
||||
CHECKTYPE NORMAL
|
||||
CHECKTYPE SEARCH
|
||||
END
|
||||
|
||||
NUMBER S_CAMBIO 15 5
|
||||
|
@ -567,14 +567,18 @@ bool TPrimanota_application::cg_handler(TMask_field& f, KEY k)
|
||||
const char s(app().causale().sezione(2));
|
||||
const real t(f.mask().get(F_TOTALE));
|
||||
const TImporto totdoc(s, t);
|
||||
if (totdoc != saldaconto)
|
||||
TImporto residuo(totdoc); residuo += saldaconto; residuo.normalize();
|
||||
if (!residuo.is_zero())
|
||||
{
|
||||
const TString st(totdoc.valore().string("."));
|
||||
const TString ss(saldaconto.valore().string("."));
|
||||
return f.error_box("Il totale documento inserito e' %s %c mentre\n"
|
||||
"i pagamenti e le spese ammontano a %s %c",
|
||||
const TString sr(residuo.valore().string("."));
|
||||
return f.error_box("Il totale documento inserito e' %s %c,\n"
|
||||
"i pagamenti e le spese ammontano a %s %c,\n"
|
||||
"per cui il residuo e' %s.",
|
||||
(const char*)st, totdoc.sezione(),
|
||||
(const char*)ss, saldaconto.sezione());
|
||||
(const char*)ss, saldaconto.sezione(),
|
||||
(const char*)sr);
|
||||
}
|
||||
}
|
||||
|
||||
@ -877,8 +881,9 @@ TBill& TPrimanota_application::ivas_bill(TBill& c)
|
||||
const int spric = c.tipo_cr();
|
||||
if (spric == 2 || spric == 3)
|
||||
{
|
||||
const TFixed_string td(causale().tipo_doc());
|
||||
if (td == "FV" || td == "NC") c.tipo_cr(4);
|
||||
const TString& td = causale().tipo_doc();
|
||||
if (td == "FV" || td == "NC")
|
||||
c.tipo_cr(4);
|
||||
}
|
||||
return c;
|
||||
}
|
||||
@ -1274,21 +1279,27 @@ bool TPrimanota_application::cg_conto_handler(TMask_field& f, KEY key)
|
||||
}
|
||||
|
||||
// Gestore del sottoconto dello sheet IVA
|
||||
// Attenzione questo handler e' agganciato anche alla descrizione del sottoconto
|
||||
bool TPrimanota_application::iva_sottoconto_handler(TMask_field& f, KEY key)
|
||||
{
|
||||
if (!suspended_handler(f, key))
|
||||
return FALSE;
|
||||
|
||||
if (key == K_TAB && f.dirty())
|
||||
{
|
||||
const TLocalisamfile& piano = ((TEdit_field&)f).browse()->cursor()->file();
|
||||
{
|
||||
TMask& m = f.mask();
|
||||
const TEdit_field& sotto = m.efield(109);
|
||||
const TRectype& piano = sotto.browse()->cursor()->curr();
|
||||
const TCausale& caus = app().causale();
|
||||
int spric = piano.get_int("TIPOSPRIC");
|
||||
if ((spric == 2 || spric == 3) && !app().causale().corrispettivi())
|
||||
if ((spric == 2 || spric == 3) && !caus.corrispettivi())
|
||||
{
|
||||
const TFixed_string td(app().causale().tipo_doc());
|
||||
const TString& td = caus.tipo_doc();
|
||||
if (td == "FV" || td == "NC") spric = 4;
|
||||
}
|
||||
f.mask().set(105, spric > 0 ? format("%d", spric) : "", TRUE);
|
||||
}
|
||||
|
||||
TString16 s; if (spric > 0) s << spric;
|
||||
m.set(105, s, TRUE); // Setta il campo spesa-ricavo della riga IVA
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
@ -1604,13 +1615,11 @@ bool TPrimanota_application::doc_handler(TMask_field& f, KEY key)
|
||||
{
|
||||
if (f.dlg() == F_DATADOC)
|
||||
{
|
||||
const TDate dd(val); // Fattura o nota credito
|
||||
if (m.get(F_ANNORIF).empty())
|
||||
m.set(F_ANNORIF, dd.year()); // copia anno documento
|
||||
if (app().is_fattura())
|
||||
{
|
||||
const TDate dd(val);
|
||||
if (m.get(F_ANNORIF).empty())
|
||||
m.set(F_ANNORIF, dd.year()); // copia anno documento
|
||||
app().recalc_scadenze(dd);
|
||||
}
|
||||
}
|
||||
else
|
||||
if (!app().npart_is_prot())
|
||||
@ -1760,11 +1769,7 @@ bool TPrimanota_application::clifo_handler(TMask_field& f, KEY key)
|
||||
{
|
||||
const TString& valuta = clifo.get(CLI_CODVAL);
|
||||
if (valuta.not_empty())
|
||||
{
|
||||
m.set(SK_VALUTA, valuta, TRUE);
|
||||
if (m.get(SK_DATACAMBIO).empty())
|
||||
m.set(SK_DATACAMBIO, m.get(F_DATADOC), TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
if (clifo.get(CLI_CODCAB).not_empty())
|
||||
@ -1878,21 +1883,21 @@ void TPrimanota_application::gioca_cambi(int force)
|
||||
|
||||
if ( (force == 0x1 || totale.is_zero()) && !(totval.is_zero() || cambio.is_zero()) )
|
||||
{
|
||||
const real new_totale = totval * cambio;
|
||||
real new_totale = totval * cambio; new_totale.round(0);
|
||||
if (new_totale != totale)
|
||||
m.set(F_TOTALE, new_totale, TRUE);
|
||||
}
|
||||
|
||||
if ( (force == 0x2 || totval.is_zero()) && !(totale.is_zero() || cambio.is_zero()))
|
||||
{
|
||||
const real new_totval = totale / cambio;
|
||||
real new_totval = totale / cambio; new_totval.round(3);
|
||||
if (new_totval != totval)
|
||||
m.set(SK_TOTDOCVAL, new_totval, TRUE);
|
||||
}
|
||||
|
||||
if ( (force == 0x4 || cambio.is_zero()) && !(totale.is_zero() || totval.is_zero()))
|
||||
{
|
||||
const real new_cambio = totale / totval;
|
||||
real new_cambio = totale / totval; new_cambio.round(5);
|
||||
if (new_cambio != cambio)
|
||||
m.set(SK_CAMBIO, new_cambio, TRUE);
|
||||
}
|
||||
@ -1947,7 +1952,7 @@ bool TPrimanota_application::totdocval_handler(TMask_field& f, KEY key)
|
||||
{
|
||||
if (key == K_TAB && f.focusdirty())
|
||||
{
|
||||
app().gioca_cambi(0x1);
|
||||
app().gioca_cambi();
|
||||
|
||||
const TMask& m = f.mask();
|
||||
if (app().is_fattura() && m.insert_mode()) // Se e' una vera fattura
|
||||
|
@ -376,10 +376,10 @@ bool TCausale::intra() const
|
||||
bool TCausale::valintra() const
|
||||
{ return _rec.get_bool(CAU_VALINTRA); }
|
||||
|
||||
const char* TCausale::causale_inc_imm() const
|
||||
const TString& TCausale::causale_inc_imm() const
|
||||
{ return _rec.get(CAU_CODCAUSIM); }
|
||||
|
||||
const char* TCausale::tipo_doc() const
|
||||
const TString& TCausale::tipo_doc() const
|
||||
{ return _rec.get(CAU_TIPODOC); }
|
||||
|
||||
int TCausale::tipomov() const
|
||||
@ -437,11 +437,10 @@ void TCausale::calcIVA()
|
||||
TipoIVA i = nessuna_iva; // Tipo IVA di default
|
||||
bool c = FALSE; // Corrispettivi di default
|
||||
|
||||
const TString16 td(tipo_doc());
|
||||
const TString& td = tipo_doc();
|
||||
if (td.not_empty())
|
||||
{
|
||||
TTable tpd("%TPD");
|
||||
tpd.setkey(1);
|
||||
tpd.put("CODTAB", td);
|
||||
if (tpd.read() == NOERR)
|
||||
{
|
||||
@ -468,6 +467,7 @@ bool TCausale::similar(const TCausale& c) const
|
||||
if (sezionale() != c.sezionale()) err = "il segnale di sezionale";
|
||||
if (intra() != c.intra()) err = "la gestione dei movimenti intra";
|
||||
if (valuta() != c.valuta()) err = "la gestione valuta";
|
||||
if (valintra() != c.valintra()) err = "la gestione valuta intracomunitaria";
|
||||
if (corrispettivi() != c.corrispettivi()) err = "la gestione dei corrispettivi";
|
||||
if (iva() != c.iva()) err = "il tipo di IVA";
|
||||
if (tipomov() != c.tipomov()) err = "il tipo di movimento";
|
||||
|
@ -110,8 +110,8 @@ public:
|
||||
bool valuta() const;
|
||||
bool intra() const;
|
||||
bool valintra() const;
|
||||
const char* causale_inc_imm() const;
|
||||
const char* tipo_doc() const;
|
||||
const TString& causale_inc_imm() const;
|
||||
const TString& tipo_doc() const;
|
||||
|
||||
TRegistro& reg() const { return (TRegistro&)_reg; }
|
||||
TipoIVA iva() const { return _iva; }
|
||||
|
@ -277,6 +277,7 @@ bool TPrimanota_application::numrif_handler(TMask_field& f, KEY key)
|
||||
{
|
||||
TMask& m = f.mask();
|
||||
const bool empty = f.get().blank();
|
||||
|
||||
if (empty && m.insert_mode())
|
||||
{
|
||||
f.set(m.get(app()._npart_is_prot ? F_PROTIVA : F_NUMDOC));
|
||||
@ -289,26 +290,31 @@ bool TPrimanota_application::numrif_handler(TMask_field& f, KEY key)
|
||||
"Se possibile esso verra' proposto, ma potra'\n"
|
||||
"essere modificato prima di registrare il movimento.");
|
||||
}
|
||||
|
||||
const TPartita* old = app().partite().first();
|
||||
if (old && empty) // Se esisteva una partita ma ora non piu'
|
||||
{
|
||||
const KEY k = yesnocancel_box("Attenzione la fattura della partita %d %s verra' eliminata.\n"
|
||||
"Premere SI per cancellarla, NO per ripristinarla, ANNULLA modificarla",
|
||||
old->anno(), (const char*)old->numero());
|
||||
switch (k)
|
||||
{
|
||||
case K_NO:
|
||||
m.set(F_ANNORIF, old->anno());
|
||||
m.set(F_NUMRIF, old->numero());
|
||||
break;
|
||||
case K_ESC:
|
||||
ok = FALSE;
|
||||
default:
|
||||
f.reset();
|
||||
break;
|
||||
|
||||
if (m.edit_mode())
|
||||
{
|
||||
const TPartita* old = app().partite().first();
|
||||
if (old && empty) // Se esisteva una partita ma ora non piu'
|
||||
{
|
||||
const KEY k = yesnocancel_box("Attenzione la fattura della partita %d %s verra' eliminata.\n"
|
||||
"Premere SI per cancellarla, NO per ripristinarla, ANNULLA per modificarla",
|
||||
old->anno(), (const char*)old->numero());
|
||||
switch (k)
|
||||
{
|
||||
case K_NO:
|
||||
f.set(old->numero());
|
||||
if (m.get(F_ANNORIF).empty())
|
||||
m.set(F_ANNORIF, old->anno());
|
||||
break;
|
||||
case K_ESC:
|
||||
ok = FALSE;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
m.enable_page(2, !f.get().blank());
|
||||
}
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
@ -337,6 +343,8 @@ bool TPrimanota_application::cambio_handler(TMask_field& f, KEY key)
|
||||
{
|
||||
if (key == K_TAB && f.focusdirty())
|
||||
{
|
||||
app().gioca_cambi(0x1); // Forza il ricalcolo del totale in lire
|
||||
|
||||
if (app().is_fattura())
|
||||
{
|
||||
TPagamento& pag = app().pagamento();
|
||||
@ -355,8 +363,6 @@ bool TPrimanota_application::cambio_handler(TMask_field& f, KEY key)
|
||||
// Copio la valuta a pagina 3
|
||||
const TValuta val(m, SK_VALUTA, SK_DATACAMBIO, SK_CAMBIO);
|
||||
val.set(m, FS_VALUTA, FS_DATACAMBIO, FS_CAMBIO);
|
||||
|
||||
app().gioca_cambi(0x1); // Forza il ricalcolo del totale in lire
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
@ -572,7 +578,7 @@ bool TPrimanota_application::read_scadenze(TMask& m)
|
||||
const real spese(0.0);
|
||||
|
||||
const real cambio(partita.get(PART_CAMBIO));
|
||||
const bool in_valuta = cambio > 1.0;
|
||||
const bool in_valuta = partita.in_valuta();
|
||||
if (in_valuta)
|
||||
{
|
||||
imponibile = m.get_real(SK_TOTDOCVAL);
|
||||
|
121
cg/cg2105.cpp
121
cg/cg2105.cpp
@ -18,13 +18,15 @@
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
class TPay_mask : public TMask
|
||||
{
|
||||
{
|
||||
TDate _datadoc;
|
||||
real _da_pagare, _pagabile;
|
||||
|
||||
protected:
|
||||
static bool importo_handler(TMask_field& f, KEY k);
|
||||
static bool importolire_handler(TMask_field& f, KEY k);
|
||||
static bool cambio_handler(TMask_field& f, KEY k);
|
||||
static bool datapag_handler(TMask_field& f, KEY k);
|
||||
|
||||
public:
|
||||
void set_pag(const TRectype& oldpag, const TRiga_scadenze& scad, const TImporto& importo);
|
||||
@ -72,7 +74,7 @@ void TPay_mask::set_pag(const TRectype& oldpag, const TRiga_scadenze& scad,
|
||||
|
||||
const bool in_valuta = scad.in_valuta();
|
||||
|
||||
_da_pagare = scad.residuo(in_valuta).valore(); // Calcola residuo in valuta
|
||||
_da_pagare = scad.residuo(in_valuta).valore(); // Calcola residuo in valuta
|
||||
|
||||
TReal_field& res = (TReal_field&)field(S_RESIDUORATA);
|
||||
res.set_decimals(in_valuta ? 2 : 0);
|
||||
@ -94,14 +96,14 @@ void TPay_mask::set_pag(const TRectype& oldpag, const TRiga_scadenze& scad,
|
||||
// Ricorda l'importo da pagare
|
||||
_da_pagare += oldimp;
|
||||
|
||||
TValuta val; val.get(sum);
|
||||
const TValuta val(sum);
|
||||
val.set(*this, S_VALUTA, S_DATACAMBIO, S_CAMBIO);
|
||||
|
||||
const long numreg = sum.get_long(PART_NREG);
|
||||
const int numrig = sum.get_int(PART_NUMRIG);
|
||||
|
||||
TReal_field& resp = (TReal_field&)field(S_RESIDUOPAG);
|
||||
resp.set_decimals(in_valuta ? 2 : 0);
|
||||
resp.set_decimals(in_valuta ? 3 : 0);
|
||||
TImporto r(importo);
|
||||
r -= app().partite().importo_speso(numreg, numrig);
|
||||
if (in_valuta)
|
||||
@ -138,12 +140,16 @@ void TPay_mask::set_pag(const TRectype& oldpag, const TRiga_scadenze& scad,
|
||||
#ifdef __EXTRA__
|
||||
set_handler(S_CAMBIO, cambio_handler);
|
||||
hide(S_RESIDUOPAG);
|
||||
|
||||
const bool mostra_conto = FALSE;
|
||||
show(-4, in_valuta); // Attiva campi relativi al cambio
|
||||
#else
|
||||
_datadoc = sum.get_date(PART_DATADOC);
|
||||
set_handler(S_DATAPAG, datapag_handler);
|
||||
|
||||
const bool mostra_conto = !sum.is_nota_credito();
|
||||
#endif
|
||||
show(-2, mostra_conto); // mostra/nasconde conto contropartita
|
||||
show(-2, mostra_conto); // mostra/nasconde conto contropartita
|
||||
|
||||
const bool mostra_ritenute = !(sum.is_nota_credito() || in_valuta);
|
||||
show(S_RITENUTE, mostra_ritenute); // mostra/nasconde ritenute
|
||||
@ -234,6 +240,19 @@ bool TPay_mask::cambio_handler(TMask_field& f, KEY k)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TPay_mask::datapag_handler(TMask_field& f, KEY k)
|
||||
{
|
||||
if (f.to_check(k))
|
||||
{
|
||||
const TDate datapag(f.get());
|
||||
TPay_mask& m = (TPay_mask&)f.mask();
|
||||
if (datapag < m._datadoc)
|
||||
return f.error_box("La data del pagamento e' inferiore alla data del documento %s",
|
||||
m._datadoc.string());
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Maschera partite
|
||||
@ -246,7 +265,8 @@ class TGame_mask : public TMask
|
||||
int _numrig; // Riga contabile corrente (prima = 1!)
|
||||
TImporto _importo; // Importo riga contabile
|
||||
int _riga_partite; // Riga corrente delle partite
|
||||
bool _changed;
|
||||
bool _changed; // Flag di modifica partite
|
||||
bool _valfirst; // La colonna della valuta precede le lire
|
||||
|
||||
tipo_movimento _tipomov; // Dati per la creazione di un nuovo movimento
|
||||
char _sezione;
|
||||
@ -278,7 +298,8 @@ protected:
|
||||
int nuovo_pagamento(TPartita& partita, int nriga, int rata) const;
|
||||
bool edit_pagamento(TPartita& p, int nriga, int nrata, int nrigp) const;
|
||||
|
||||
bool same_number(const char* s1, const char* s2) const;
|
||||
long number_distance(const char* key, const char* num) const;
|
||||
bool same_number(const char* key, const char* num) const;
|
||||
|
||||
#ifdef __EXTRA__
|
||||
bool edit_fattura(TPartita& p, int nriga);
|
||||
@ -303,7 +324,7 @@ public:
|
||||
|
||||
TGame_mask::TGame_mask(const TBill& bill, long numreg, int riga)
|
||||
: TMask("cg2100p"), _conto(bill), _numreg(numreg), _numrig(riga),
|
||||
_changed(FALSE), _causali(LF_CAUSALI, "CODCAUS", "DESCR")
|
||||
_changed(FALSE), _valfirst(FALSE), _causali(LF_CAUSALI, "CODCAUS", "DESCR")
|
||||
{
|
||||
TString descr(80);
|
||||
switch (_conto.tipo())
|
||||
@ -353,31 +374,35 @@ bool TGame_mask::annopart_handler(TMask_field& f, KEY k)
|
||||
|
||||
bool TGame_mask::numpart_handler(TMask_field& f, KEY k)
|
||||
{
|
||||
if (k == K_TAB && f.dirty())
|
||||
if (k == K_TAB && f.focusdirty())
|
||||
{
|
||||
const TGame_mask& m = (const TGame_mask&)f.mask();
|
||||
|
||||
const int anno = m.get_int(P_ANNO);
|
||||
const TString16 num = f.get();
|
||||
if (anno > 0 && num.not_empty())
|
||||
const int anno = m.get_int(P_ANNO); // Anno partita da cercare
|
||||
if (anno > 0)
|
||||
{
|
||||
const TString key = f.get(); // Numero partita da cercare
|
||||
int best_match = 0; // Partita piu' somigliante
|
||||
long min_dist = 10000000L; // Livello di somiglianza migliore
|
||||
|
||||
TSheet_field& sheet = m.partite();
|
||||
for (int i = 0; i < sheet.items(); i++)
|
||||
{
|
||||
TToken_string& row = sheet.row(i);
|
||||
if (anno == row.get_int(0)) // Se corrisponde l'anno e ...
|
||||
{
|
||||
TString16 n = row.get(); n.trim();
|
||||
if (num == n) // corrisponde il numero partita ...
|
||||
if (anno == row.get_int(0)) // Se corrisponde l'anno e ...
|
||||
{
|
||||
const long dist = m.number_distance(key, row.get());
|
||||
if (dist < min_dist)
|
||||
{
|
||||
sheet.select(i); // ... seleziona la partita
|
||||
partite_notify(sheet, i, K_TAB); // ed esplodi le sue righe
|
||||
break;
|
||||
min_dist = dist;
|
||||
best_match = i;
|
||||
if (dist == 0L)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (i >= sheet.items())
|
||||
f.warning_box("Partita inesistente");
|
||||
sheet.select(best_match); // ... seleziona la partita
|
||||
partite_notify(sheet, best_match, K_TAB); // ed esplodi le sue righe
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
@ -544,6 +569,8 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k)
|
||||
gm.set(P_ANNO, anno); // Aggiorna campi di ricerca
|
||||
gm.set(P_NUMERO, num);
|
||||
|
||||
bool in_valuta = FALSE;
|
||||
|
||||
if (anno > 0)
|
||||
{
|
||||
const TBill& zio = gm.conto(); // Conto cliente/fornitore
|
||||
@ -563,12 +590,12 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k)
|
||||
if (!riga.is_fattura())
|
||||
continue;
|
||||
|
||||
const bool in_valuta = riga.in_valuta();
|
||||
in_valuta = riga.in_valuta();
|
||||
riga_fattura.cut(0);
|
||||
riga_fattura.add(ri);
|
||||
riga_fattura.add("");
|
||||
riga_fattura.add("");
|
||||
riga_fattura.add(riga.get(PART_DATADOC));
|
||||
riga_fattura.add(""); // Data scad
|
||||
gm.add_descrizione(riga_fattura, riga);
|
||||
gm.add_importo(riga_fattura, riga.importo(FALSE, 0x1));
|
||||
if (in_valuta)
|
||||
@ -587,7 +614,7 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k)
|
||||
|
||||
TToken_string& row = scadenze.row(scadenze.add(riga_fattura));
|
||||
row.add(ra, 1);
|
||||
row.add(scad.get(SCAD_DATASCAD), 2);
|
||||
row.add(scad.get(SCAD_DATASCAD), 3);
|
||||
gm.add_importo(row, scad.importo(FALSE), FALSE, 5);
|
||||
if (in_valuta)
|
||||
gm.add_importo(row, scad.importo(TRUE), TRUE, 6);
|
||||
@ -602,8 +629,8 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k)
|
||||
TToken_string& row = scadenze.row(scadenze.add(""));
|
||||
row.add(ri);
|
||||
row.add(ra);
|
||||
row.add(sum.get(PART_DATAPAG));
|
||||
row.add(sum.get(PART_DATADOC));
|
||||
row.add(sum.get(PART_DATAPAG));
|
||||
gm.add_descrizione(row, sum);
|
||||
TImporto imp(sez, pag.get_real(PAGSCA_IMPORTO));
|
||||
if (in_valuta)
|
||||
@ -691,8 +718,8 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k)
|
||||
TToken_string& row = scadenze.row(scadenze.add(""));
|
||||
row.add(pag.get(PAGSCA_NRIGA));
|
||||
row.add(pag.get(PAGSCA_NRATA));
|
||||
row.add(sum.get(PART_DATAPAG));
|
||||
row.add(sum.get(PART_DATADOC));
|
||||
row.add(sum.get(PART_DATAPAG));
|
||||
gm.add_descrizione(row, sum);
|
||||
TImporto i(sum.sezione(), pag.get_real(PAGSCA_IMPORTO));
|
||||
i.valore() += pag.get_real(PAGSCA_RITENUTE);
|
||||
@ -729,6 +756,11 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k)
|
||||
delete game;
|
||||
}
|
||||
|
||||
if (in_valuta != gm._valfirst)
|
||||
{
|
||||
gm.scadenze().swap_columns(106, 107); // Scambia le colonne dell'importo in lire e in valuta
|
||||
gm._valfirst = in_valuta;
|
||||
}
|
||||
gm.scadenze().force_update();
|
||||
}
|
||||
if (k == K_INS)
|
||||
@ -765,7 +797,7 @@ int TGame_mask::nuova_riga(TPartita& partita) const
|
||||
part.put(PART_CONTOCL, conto().conto());
|
||||
|
||||
// Setta il cambio corrente
|
||||
TValuta valuta; valuta.get(*this, P_VALUTA, P_DATACAMBIO, P_CAMBIO);
|
||||
const TValuta valuta(*this, P_VALUTA, P_DATACAMBIO, P_CAMBIO);
|
||||
valuta.put(part);
|
||||
|
||||
#ifdef __EXTRA__
|
||||
@ -1067,7 +1099,15 @@ void TGame_mask::add_importo(TToken_string& s, const TImporto& i, bool valuta, i
|
||||
{
|
||||
TString80 v;
|
||||
TImporto n(i); n.normalize();
|
||||
v << n.valore().string(0, valuta ? 3 : 0) << ' ' << n.sezione();
|
||||
if (valuta)
|
||||
{
|
||||
v = n.valore().string(3);
|
||||
const int sep = v.find('.');
|
||||
v[sep] = ',';
|
||||
}
|
||||
else
|
||||
v = n.valore().string(0);
|
||||
v << ' ' << n.sezione();
|
||||
s.add(v, pos);
|
||||
}
|
||||
}
|
||||
@ -1186,11 +1226,28 @@ void TGame_mask::update_saldo_clifo()
|
||||
r << ' ' << conto().sottoconto();
|
||||
}
|
||||
|
||||
bool TGame_mask::same_number(const char* s1, const char* s2) const
|
||||
long TGame_mask::number_distance(const char* k, const char* n) const
|
||||
{
|
||||
TString16 t1(s1); t1.upper(); t1.trim();
|
||||
TString16 t2(s2); t2.upper(); t2.trim(); t2.cut(t1.len());
|
||||
return t1 == t2;
|
||||
TString16 key(k); key.upper(); key.trim();
|
||||
const int kl = key.len();
|
||||
TString16 num(n); num.upper(); num.trim();
|
||||
const int nl = num.len();
|
||||
long dist = 0;
|
||||
for (int i = max(kl, nl)-1; i >= 0; i--)
|
||||
{
|
||||
const char kc = i < kl ? key[i] : 0;
|
||||
const char nc = i < nl ? num[i] : 0;
|
||||
const int d = kc - nc;
|
||||
dist += d*d;
|
||||
}
|
||||
return dist;
|
||||
}
|
||||
|
||||
bool TGame_mask::same_number(const char* key, const char* num) const
|
||||
{
|
||||
TString16 k(key); k.upper(); k.trim();
|
||||
TString16 n(num); n.upper(); n.trim();
|
||||
return k == n;
|
||||
}
|
||||
|
||||
void TGame_mask::fill_partite(int annorif, const char* numrif)
|
||||
|
@ -94,7 +94,6 @@ END
|
||||
NUMBER 108 3
|
||||
BEGIN
|
||||
PROMPT 38 7 "Conto "
|
||||
HELP "Codice del conto"
|
||||
FIELD CONTO
|
||||
USE LF_PCON SELECT (CONTO!="") && (SOTTOCONTO="")
|
||||
INPUT GRUPPO 107
|
||||
@ -108,7 +107,7 @@ BEGIN
|
||||
OUTPUT 108 CONTO
|
||||
OUTPUT 110 DESCR
|
||||
ADD RUN cg0 -0
|
||||
MESSAGE DIRTY,109|DIRTY,209|DIRTY,309
|
||||
MESSAGE DIRTY,109|DIRTY,209|DIRTY,309
|
||||
CHECKTYPE NORMAL
|
||||
WARNING "Conto assente"
|
||||
END
|
||||
@ -117,7 +116,6 @@ END
|
||||
NUMBER 109 6
|
||||
BEGIN
|
||||
PROMPT 55 7 "Sottoconto "
|
||||
HELP "Codice del sottoconto"
|
||||
FIELD SOTTOCONTO
|
||||
USE LF_PCON SELECT SOTTOCONTO!=""
|
||||
INPUT GRUPPO 107
|
||||
@ -134,7 +132,7 @@ BEGIN
|
||||
OUTPUT 110 DESCR
|
||||
ADD RUN cg0 -0
|
||||
CHECKTYPE NORMAL
|
||||
VALIDATE REQIF_FUNC 1 101
|
||||
VALIDATE REQIF_FUNC 1 101
|
||||
WARNING "Sottoconto assente"
|
||||
END
|
||||
|
||||
@ -155,7 +153,7 @@ BEGIN
|
||||
CHECKTYPE NORMAL
|
||||
ADD RUN cg0 -1 C
|
||||
MESSAGE COPY,109
|
||||
VALIDATE REQIF_FUNC 1 101
|
||||
VALIDATE REQIF_FUNC 1 101
|
||||
WARNING "Cliente assente"
|
||||
END
|
||||
|
||||
@ -175,60 +173,58 @@ BEGIN
|
||||
CHECKTYPE NORMAL
|
||||
ADD RUN cg0 -1 F
|
||||
MESSAGE COPY,109
|
||||
VALIDATE REQIF_FUNC 1 101
|
||||
VALIDATE REQIF_FUNC 1 101
|
||||
WARNING "Fornitore assente"
|
||||
END
|
||||
|
||||
STRING 110 50
|
||||
BEGIN
|
||||
PROMPT 2 8 "Descrizione "
|
||||
HELP "Descrizione del conto"
|
||||
FIELD LF_PCON->DESCR
|
||||
USE LF_PCON KEY 2
|
||||
INPUT DESCR 110
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Conto" CONTO
|
||||
DISPLAY "Sottoconto" SOTTOCONTO
|
||||
COPY OUTPUT 109
|
||||
CHECKTYPE NORMAL
|
||||
ADD RUN cg0 -0
|
||||
PROMPT 2 8 "Descrizione "
|
||||
FIELD LF_PCON->DESCR
|
||||
USE LF_PCON KEY 2
|
||||
INPUT DESCR 110
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Conto" CONTO
|
||||
DISPLAY "Sottoconto" SOTTOCONTO
|
||||
DISPLAY "C/R" TIPOSPRIC
|
||||
COPY OUTPUT 109
|
||||
CHECKTYPE NORMAL
|
||||
ADD RUN cg0 -0
|
||||
END
|
||||
|
||||
STRING 210 50
|
||||
BEGIN
|
||||
PROMPT 2 8 "Cliente "
|
||||
HELP "Ragione sociale del cliente"
|
||||
FIELD LF_CLIFO->RAGSOC
|
||||
USE LF_CLIFO KEY 2
|
||||
INPUT TIPOCF "C"
|
||||
INPUT RAGSOC 210
|
||||
DISPLAY "Ragione Sociale Cliente@50" RAGSOC
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Conto" CONTO
|
||||
DISPLAY "Codice" CODCF
|
||||
COPY OUTPUT 209
|
||||
MESSAGE COPY,110
|
||||
ADD RUN cg0 -1 C
|
||||
CHECKTYPE NORMAL
|
||||
PROMPT 2 8 "Cliente "
|
||||
FIELD LF_CLIFO->RAGSOC
|
||||
USE LF_CLIFO KEY 2
|
||||
INPUT TIPOCF "C"
|
||||
INPUT RAGSOC 210
|
||||
DISPLAY "Ragione Sociale Cliente@50" RAGSOC
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Conto" CONTO
|
||||
DISPLAY "Codice" CODCF
|
||||
COPY OUTPUT 209
|
||||
MESSAGE COPY,110
|
||||
ADD RUN cg0 -1 C
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
STRING 310 50
|
||||
BEGIN
|
||||
PROMPT 2 8 "Fornitore "
|
||||
HELP "Ragione sociale del forntore"
|
||||
FIELD LF_PCON->SOTTOCONTO
|
||||
USE LF_CLIFO KEY 2
|
||||
INPUT TIPOCF "F"
|
||||
INPUT RAGSOC 310
|
||||
DISPLAY "Ragione Sociale Fornitore@50" RAGSOC
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Conto" CONTO
|
||||
DISPLAY "Codice" CODCF
|
||||
COPY OUTPUT 309
|
||||
MESSAGE COPY,110
|
||||
ADD RUN cg0 -1 F
|
||||
CHECKTYPE NORMAL
|
||||
PROMPT 2 8 "Fornitore "
|
||||
FIELD LF_PCON->SOTTOCONTO
|
||||
USE LF_CLIFO KEY 2
|
||||
INPUT TIPOCF "F"
|
||||
INPUT RAGSOC 310
|
||||
DISPLAY "Ragione Sociale Fornitore@50" RAGSOC
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Conto" CONTO
|
||||
DISPLAY "Codice" CODCF
|
||||
COPY OUTPUT 309
|
||||
MESSAGE COPY,110
|
||||
ADD RUN cg0 -1 F
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
LIST 105 1 53
|
||||
@ -259,7 +255,7 @@ END
|
||||
BUTTON DLG_DELREC 9 2
|
||||
BEGIN
|
||||
PROMPT -33 -1 "Elimina"
|
||||
MESSAGE EXIT,K_DEL
|
||||
MESSAGE EXIT,K_DEL
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
@ -192,7 +192,7 @@ void TValuta::get(const TMask& m, short v, short d, short c)
|
||||
{
|
||||
if (v > 0) _cod = m.get(v);
|
||||
if (d > 0) _dat = m.get(d);
|
||||
_cam = real(m.get(c));
|
||||
_cam = m.get_real(c);
|
||||
adjust();
|
||||
}
|
||||
|
||||
@ -690,6 +690,12 @@ int TRiga_partite::rata_con_abbuoni_diffcam() const
|
||||
return found;
|
||||
}
|
||||
|
||||
bool TRiga_partite::in_valuta() const
|
||||
{
|
||||
const TString& cod = get(PART_CODVAL);
|
||||
return cod.not_empty() && cod != "LIT";
|
||||
}
|
||||
|
||||
// Calcola l'importo in lire o in valuta su di una riga di partita
|
||||
// E' possibile considerare o meno IMPORTO, ABBUONI e DIFFCAM
|
||||
TImporto TRiga_partite::importo(bool valuta, int mode) const
|
||||
@ -1062,7 +1068,7 @@ TImporto TPartita::importo_speso(long nreg, int numrig) const
|
||||
{
|
||||
const TRiga_partite& row = riga(r);
|
||||
if (nreg == row.get_long(PART_NREG) && numrig == row.get_int(PART_NUMRIG))
|
||||
imp += row.importo(FALSE, 0x7); // Importo in lire
|
||||
imp += row.importo(FALSE); // Importo in lire
|
||||
}
|
||||
|
||||
return imp;
|
||||
|
@ -198,7 +198,7 @@ public:
|
||||
char sezione() const { return get_char(PART_SEZ); }
|
||||
TImporto importo(bool valuta, int mode = 0xF) const;
|
||||
|
||||
bool in_valuta() const { return get(PART_CODVAL).not_empty(); }
|
||||
bool in_valuta() const;
|
||||
|
||||
bool update(const TRectype& vec, const TRectype& nuo, const char* field);
|
||||
bool update(const TImporto& vec, const TImporto& nuo, const char* sez, const char* val);
|
||||
|
Loading…
x
Reference in New Issue
Block a user