Gestione saldaconto

git-svn-id: svn://10.65.10.50/trunk@2365 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1995-12-29 11:55:59 +00:00
parent f4ea67e046
commit cb27a9beae
12 changed files with 218 additions and 151 deletions

@ -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);

@ -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);