Gestione rate
git-svn-id: svn://10.65.10.50/trunk@2374 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
1f4b90ec98
commit
090e470352
16
cg/cg0.cpp
16
cg/cg0.cpp
@ -10,14 +10,14 @@ int main(int argc, char** argv)
|
|||||||
int res = 1;
|
int res = 1;
|
||||||
switch (op)
|
switch (op)
|
||||||
{
|
{
|
||||||
case 1: res = cg0100(argc,argv) ; break;
|
case 1: res = cg0100(argc,argv) ; break;
|
||||||
case 2: res = cg0200(argc,argv) ; break;
|
case 2: res = cg0200(argc,argv) ; break;
|
||||||
case 3: res = cg0300(argc,argv) ; break;
|
case 3: res = cg0300(argc,argv) ; break;
|
||||||
case 4: res = cg0400(argc,argv) ; break;
|
case 4: res = cg0400(argc,argv) ; break;
|
||||||
case 5: res = cg0500(argc,argv) ; break;
|
case 5: res = cg0500(argc,argv) ; break;
|
||||||
// case 6: res = cg0600(argc,argv) ; break;
|
// case 6: res = cg0600(argc,argv) ; break;
|
||||||
default: error_box(usage, argv[0]); break;
|
default: error_box(usage, argv[0]); break;
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -575,23 +575,20 @@ void TPrimanota_application::init_insert_mode(TMask& m)
|
|||||||
m.set(F_DATA74TER, m.get(F_DATAREG));
|
m.set(F_DATA74TER, m.get(F_DATAREG));
|
||||||
|
|
||||||
if (iva() != nessuna_iva)
|
if (iva() != nessuna_iva)
|
||||||
{
|
|
||||||
occas_mask().reset();
|
occas_mask().reset();
|
||||||
|
|
||||||
if (is_fattura())
|
partite().destroy();
|
||||||
{
|
if (is_fattura())
|
||||||
const TString16 dt(m.get(F_DATADOC));
|
{
|
||||||
set_pagamento(NULL,dt);
|
const TString16 dt(m.get(F_DATADOC));
|
||||||
set_scadenze(m);
|
set_pagamento(NULL,dt);
|
||||||
}
|
set_scadenze(m);
|
||||||
else
|
|
||||||
set_pagamento(NULL,NULL); // Annulla pagamento
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
partite().destroy();
|
set_pagamento(NULL,NULL); // Annulla pagamento
|
||||||
set_pagamento(NULL,NULL); // Annulla pagamento
|
}
|
||||||
}
|
|
||||||
_saldi.reset(); // Inizializza saldi
|
_saldi.reset(); // Inizializza saldi
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -987,22 +984,22 @@ bool TPrimanota_application::remove()
|
|||||||
_saldi.registra();
|
_saldi.registra();
|
||||||
check_saldi();
|
check_saldi();
|
||||||
|
|
||||||
if (_is_saldaconto)
|
if (is_saldaconto())
|
||||||
{
|
{
|
||||||
if (iva() == nessuna_iva)
|
TMask& m = curr_mask();
|
||||||
{
|
if (is_fattura())
|
||||||
const long nreg = curr_mask().get_long(F_NUMREG);
|
|
||||||
partite().add_numreg(nreg);
|
|
||||||
notify_cgline_deletion(-1); // Notify deletion of all cg lines
|
|
||||||
partite().rewrite();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
TMask& m = curr_mask();
|
|
||||||
m.reset(F_ANNORIF);
|
m.reset(F_ANNORIF);
|
||||||
m.reset(F_NUMRIF);
|
m.reset(F_NUMRIF);
|
||||||
write_scadenze(m);
|
write_scadenze(m);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const long nreg = m.get_long(F_NUMREG);
|
||||||
|
partite().add_numreg(nreg);
|
||||||
|
notify_cgline_deletion(-1); // Notify deletion of all cg lines
|
||||||
|
partite().rewrite();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ok;
|
return ok;
|
||||||
|
@ -493,8 +493,7 @@ NUMBER F_ANNORIF 4
|
|||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 50 15 "Rif.partita "
|
PROMPT 50 15 "Rif.partita "
|
||||||
FIELD LF_PARTITE->ANNO
|
FIELD LF_PARTITE->ANNO
|
||||||
VALIDATE REQIF_FUNC 1 F_NUMRIF
|
FLAGS "U"
|
||||||
WARNING "Manca l'anno relativo al numero partita"
|
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_NUMRIF 7
|
STRING F_NUMRIF 7
|
||||||
|
@ -212,7 +212,7 @@ BEGIN
|
|||||||
PROMPT 41 3 "Data reg. "
|
PROMPT 41 3 "Data reg. "
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING 110 5
|
STRING 110 7
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 4 "Numero doc. "
|
PROMPT 1 4 "Numero doc. "
|
||||||
END
|
END
|
||||||
|
@ -103,6 +103,14 @@ BEGIN
|
|||||||
WARNING "L'importo deve essere specificato"
|
WARNING "L'importo deve essere specificato"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
NUMBER S_RITENUTE 15
|
||||||
|
BEGIN
|
||||||
|
PROMPT 38 8 "Ritenute professionali "
|
||||||
|
PICTURE "."
|
||||||
|
FIELD RITENUTE
|
||||||
|
MESSAGE DIRTY,S_IMPORTO|K_TAB,S_IMPORTO
|
||||||
|
END
|
||||||
|
|
||||||
NUMBER S_IMPORTOVAL 15 3
|
NUMBER S_IMPORTOVAL 15 3
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 9 "Importo in valuta "
|
PROMPT 2 9 "Importo in valuta "
|
||||||
@ -113,13 +121,37 @@ BEGIN
|
|||||||
WARNING "L'importo in valuta deve essere specificato"
|
WARNING "L'importo in valuta deve essere specificato"
|
||||||
END
|
END
|
||||||
|
|
||||||
NUMBER S_RITENUTE 15
|
STRING S_VALUTA 3
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 38 8 "Ritenute professionali "
|
PROMPT 37 8 "Valuta "
|
||||||
PICTURE "."
|
FLAGS "DHUZ"
|
||||||
FIELD RITENUTE
|
GROUP 4
|
||||||
MESSAGE DIRTY,S_IMPORTO|K_TAB,S_IMPORTO
|
END
|
||||||
END
|
|
||||||
|
DATE S_DATACAMBIO
|
||||||
|
BEGIN
|
||||||
|
PROMPT 52 8 "Data cambio "
|
||||||
|
FLAGS "HR"
|
||||||
|
USE CAM
|
||||||
|
INPUT CODTAB[1,3] S_VALUTA SELECT
|
||||||
|
INPUT CODTAB[4,11] S_DATACAMBIO
|
||||||
|
DISPLAY "Valuta" CODTAB[1,3]
|
||||||
|
DISPLAY "Data@10" D0
|
||||||
|
DISPLAY "Cambio@18" R10
|
||||||
|
OUTPUT S_DATACAMBIO D0
|
||||||
|
OUTPUT S_CAMBIO R10
|
||||||
|
GROUP 4
|
||||||
|
CHECKTYPE SEARCH
|
||||||
|
END
|
||||||
|
|
||||||
|
NUMBER S_CAMBIO 15 5
|
||||||
|
BEGIN
|
||||||
|
PROMPT 37 9 "Cambio "
|
||||||
|
FLAGS "HRU"
|
||||||
|
GROUP 4
|
||||||
|
PICTURE ".5"
|
||||||
|
CHECKTYPE REQUIRED
|
||||||
|
END
|
||||||
|
|
||||||
RADIOBUTTON S_SALDOACC 1 24
|
RADIOBUTTON S_SALDOACC 1 24
|
||||||
BEGIN
|
BEGIN
|
||||||
@ -218,38 +250,6 @@ BEGIN
|
|||||||
GROUP 2
|
GROUP 2
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING S_VALUTA 3
|
|
||||||
BEGIN
|
|
||||||
PROMPT 2 12 "Valuta "
|
|
||||||
FLAGS "DHUZ"
|
|
||||||
GROUP 4
|
|
||||||
END
|
|
||||||
|
|
||||||
DATE S_DATACAMBIO
|
|
||||||
BEGIN
|
|
||||||
PROMPT 24 12 "Data cambio "
|
|
||||||
FLAGS "RH"
|
|
||||||
USE CAM
|
|
||||||
INPUT CODTAB[1,3] S_VALUTA SELECT
|
|
||||||
INPUT CODTAB[4,11] S_DATACAMBIO
|
|
||||||
DISPLAY "Valuta" CODTAB[1,3]
|
|
||||||
DISPLAY "Data@10" D0
|
|
||||||
DISPLAY "Cambio@18" R10
|
|
||||||
OUTPUT S_DATACAMBIO D0
|
|
||||||
OUTPUT S_CAMBIO R10
|
|
||||||
GROUP 4
|
|
||||||
CHECKTYPE SEARCH
|
|
||||||
END
|
|
||||||
|
|
||||||
NUMBER S_CAMBIO 15 5
|
|
||||||
BEGIN
|
|
||||||
PROMPT 51 12 "Cambio "
|
|
||||||
FLAGS "HRU"
|
|
||||||
GROUP 4
|
|
||||||
PICTURE ".5"
|
|
||||||
CHECKTYPE REQUIRED
|
|
||||||
END
|
|
||||||
|
|
||||||
STRING S_CODDESC 5
|
STRING S_CODDESC 5
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 14 "Descriz. agg. "
|
PROMPT 2 14 "Descriz. agg. "
|
||||||
|
@ -1625,7 +1625,7 @@ bool TPrimanota_application::doc_handler(TMask_field& f, KEY key)
|
|||||||
if (!app().npart_is_prot())
|
if (!app().npart_is_prot())
|
||||||
{
|
{
|
||||||
if (m.get(F_NUMRIF).empty())
|
if (m.get(F_NUMRIF).empty())
|
||||||
m.set(F_NUMRIF, val); // copia numero documento
|
m.set(F_NUMRIF, val, TRUE); // copia numero documento
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1725,9 +1725,30 @@ bool TPrimanota_application::clifo_handler(TMask_field& f, KEY key)
|
|||||||
if (key == K_TAB && f.active())
|
if (key == K_TAB && f.active())
|
||||||
{
|
{
|
||||||
TMask& m = f.mask();
|
TMask& m = f.mask();
|
||||||
const char cf = app().clifo();
|
|
||||||
|
if (f.focusdirty() && app().is_nota_credito())
|
||||||
|
{
|
||||||
|
TPartite_array& p = app().partite();
|
||||||
|
if (m.edit_mode())
|
||||||
|
p.add_numreg(m.get_long(F_NUMREG));
|
||||||
|
|
||||||
|
const TPartita* game = p.first();
|
||||||
|
if (game != NULL)
|
||||||
|
{
|
||||||
|
const bool del = f.yesno_box("Si desidera cancellare i pagamenti effettuati?");
|
||||||
|
if (!del) // Ripristina codice copiandolo dalla prima partita
|
||||||
|
{
|
||||||
|
TString cod; cod << game->conto().sottoconto();
|
||||||
|
f.set(cod);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
app().notify_cgline_deletion(-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const char cf = app().clifo();
|
||||||
const long codice = atol(f.get());
|
const long codice = atol(f.get());
|
||||||
|
|
||||||
if (codice == 0)
|
if (codice == 0)
|
||||||
{
|
{
|
||||||
m.hide(F_OCCASEDIT); // Spegni bottone occasionali
|
m.hide(F_OCCASEDIT); // Spegni bottone occasionali
|
||||||
@ -1764,8 +1785,8 @@ bool TPrimanota_application::clifo_handler(TMask_field& f, KEY key)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (app().is_fattura() && f.focusdirty())
|
if (app().is_fattura() && f.focusdirty())
|
||||||
{
|
{
|
||||||
if (m.field(SK_VALUTA).active())
|
if (m.field(SK_VALUTA).active() && m.get(SK_VALUTA).empty())
|
||||||
{
|
{
|
||||||
const TString& valuta = clifo.get(CLI_CODVAL);
|
const TString& valuta = clifo.get(CLI_CODVAL);
|
||||||
if (valuta.not_empty())
|
if (valuta.not_empty())
|
||||||
@ -1876,29 +1897,32 @@ bool TPrimanota_application::main_codiva_handler(TMask_field& f, KEY key)
|
|||||||
// Riempie i campi valuta a zero in base agli altri
|
// Riempie i campi valuta a zero in base agli altri
|
||||||
void TPrimanota_application::gioca_cambi(int force)
|
void TPrimanota_application::gioca_cambi(int force)
|
||||||
{
|
{
|
||||||
TMask& m = curr_mask();
|
TMask& m = curr_mask();
|
||||||
|
const TValuta cambio(m, SK_VALUTA, SK_DATACAMBIO, SK_CAMBIO);
|
||||||
|
if (cambio.in_lire())
|
||||||
|
return;
|
||||||
|
|
||||||
const real totale = m.get(F_TOTALE);
|
const real totale = m.get(F_TOTALE);
|
||||||
const real totval = m.get(SK_TOTDOCVAL);
|
const real totval = m.get(SK_TOTDOCVAL);
|
||||||
const real cambio = m.get(SK_CAMBIO);
|
|
||||||
|
|
||||||
if ( (force == 0x1 || totale.is_zero()) && !(totval.is_zero() || cambio.is_zero()) )
|
if ( (force == 0x1 || totale.is_zero()) && !(totval.is_zero() || cambio.cambio() == 1.0) )
|
||||||
{
|
{
|
||||||
real new_totale = totval * cambio; new_totale.round(0);
|
const real new_totale = cambio.val2lit(totval);
|
||||||
if (new_totale != totale)
|
if (new_totale != totale)
|
||||||
m.set(F_TOTALE, new_totale, TRUE);
|
m.set(F_TOTALE, new_totale, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( (force == 0x2 || totval.is_zero()) && !(totale.is_zero() || cambio.is_zero()))
|
if ( (force == 0x2 || totval.is_zero()) && !(totale.is_zero() || cambio.cambio() == 1.0) )
|
||||||
{
|
{
|
||||||
real new_totval = totale / cambio; new_totval.round(3);
|
const real new_totval = cambio.lit2val(totale);
|
||||||
if (new_totval != totval)
|
if (new_totval != totval)
|
||||||
m.set(SK_TOTDOCVAL, new_totval, TRUE);
|
m.set(SK_TOTDOCVAL, new_totval, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( (force == 0x4 || cambio.is_zero()) && !(totale.is_zero() || totval.is_zero()))
|
if ( (force == 0x4 || cambio.cambio() == 1.0) && !(totale.is_zero() || totval.is_zero()))
|
||||||
{
|
{
|
||||||
real new_cambio = totale / totval; new_cambio.round(5);
|
real new_cambio = totale / totval; new_cambio.round(5);
|
||||||
if (new_cambio != cambio)
|
if (new_cambio != cambio.cambio())
|
||||||
m.set(SK_CAMBIO, new_cambio, TRUE);
|
m.set(SK_CAMBIO, new_cambio, TRUE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
164
cg/cg2104.cpp
164
cg/cg2104.cpp
@ -172,8 +172,12 @@ bool TPrimanota_application::pag_sheet_handler(TMask_field& f, KEY key)
|
|||||||
bool ok = TRUE;
|
bool ok = TRUE;
|
||||||
if (key == K_TAB || key == K_ENTER)
|
if (key == K_TAB || key == K_ENTER)
|
||||||
{
|
{
|
||||||
|
TMask& m = f.mask();
|
||||||
|
|
||||||
TPagamento& pag = app().pagamento();
|
TPagamento& pag = app().pagamento();
|
||||||
const word err = pag.validate();
|
word err = pag.validate();
|
||||||
|
if (m.edit_mode())
|
||||||
|
err &= ~(P_RSUM | P_TOTNC); // Ignora totale importi e rate
|
||||||
if (err != P_OK)
|
if (err != P_OK)
|
||||||
{
|
{
|
||||||
TString s(256);
|
TString s(256);
|
||||||
@ -181,21 +185,20 @@ bool TPrimanota_application::pag_sheet_handler(TMask_field& f, KEY key)
|
|||||||
ok = error_box(s);
|
ok = error_box(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
TMask& m = f.mask();
|
|
||||||
if (key == K_ENTER && m.edit_mode())
|
if (key == K_ENTER && m.edit_mode())
|
||||||
{
|
{
|
||||||
const bool valuta = m.get(SK_CAMBIO).not_empty();
|
const bool in_valuta = m.get(SK_VALUTA).not_empty();
|
||||||
const real tot = m.get(valuta ? SK_TOTDOCVAL : F_TOTALE);
|
const real tot = m.get(in_valuta ? SK_TOTDOCVAL : F_TOTALE);
|
||||||
real imp;
|
real imp;
|
||||||
for (int r = pag.n_rate()-1; r >= 0; r--)
|
for (int r = pag.n_rate()-1; r >= 0; r--)
|
||||||
imp += pag.tpay_rata(r);
|
imp += pag.tpay_rata(r);
|
||||||
if (imp != tot)
|
if (imp != tot)
|
||||||
{
|
{
|
||||||
const char* const pic = valuta ? ".3" : ".";
|
const char* const pic = in_valuta ? ".3" : ".";
|
||||||
const TString is(imp.string(pic));
|
const TString is(imp.string(pic));
|
||||||
const TString ts(tot.string(pic));
|
const TString ts(tot.string(pic));
|
||||||
const bool recalc = yesno_box("Il totale delle rate e' %s mentre\n"
|
const bool recalc = yesno_box("Il totale delle rate e' %s mentre\n"
|
||||||
"il totale del documento e' %s.\n"
|
"il totale del documento in valuta e' %s.\n"
|
||||||
"Si desidera ricalcolare le rate e poi\n"
|
"Si desidera ricalcolare le rate e poi\n"
|
||||||
"registrare in un secondo momento?",
|
"registrare in un secondo momento?",
|
||||||
(const char*)is, (const char*)ts);
|
(const char*)is, (const char*)ts);
|
||||||
@ -205,6 +208,21 @@ bool TPrimanota_application::pag_sheet_handler(TMask_field& f, KEY key)
|
|||||||
ok = FALSE; // Permette di guardare il risultato prima di registrare
|
ok = FALSE; // Permette di guardare il risultato prima di registrare
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (in_valuta)
|
||||||
|
{
|
||||||
|
const real totlit = m.get(F_TOTALE);
|
||||||
|
imp = ZERO;
|
||||||
|
for (int r = pag.n_rate()-1; r >= 0; r--)
|
||||||
|
imp += pag.tlit_rata(r);
|
||||||
|
if (imp != totlit)
|
||||||
|
{
|
||||||
|
const TString is(imp.string("."));
|
||||||
|
const TString ts(totlit.string("."));
|
||||||
|
warning_box("Il totale in lire delle rate e' %s mentre\n"
|
||||||
|
"il totale del documento e' %s.");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ok;
|
return ok;
|
||||||
@ -263,7 +281,8 @@ bool TPrimanota_application::annorif_handler(TMask_field& f, KEY key)
|
|||||||
bool ok = TRUE;
|
bool ok = TRUE;
|
||||||
const TMask& m = f.mask();
|
const TMask& m = f.mask();
|
||||||
|
|
||||||
if (f.to_check(key) && f.get().empty() && m.insert_mode())
|
if (f.to_check(key) && f.get().empty() &&
|
||||||
|
(m.insert_mode() || m.get(F_NUMRIF).not_empty()))
|
||||||
{
|
{
|
||||||
const TString& anno = m.get(F_DATADOC).right(4);
|
const TString& anno = m.get(F_DATADOC).right(4);
|
||||||
f.set(anno);
|
f.set(anno);
|
||||||
@ -277,12 +296,13 @@ bool TPrimanota_application::annorif_handler(TMask_field& f, KEY key)
|
|||||||
bool TPrimanota_application::numrif_handler(TMask_field& f, KEY key)
|
bool TPrimanota_application::numrif_handler(TMask_field& f, KEY key)
|
||||||
{
|
{
|
||||||
bool ok = TRUE;
|
bool ok = TRUE;
|
||||||
if (f.to_check(key))
|
|
||||||
|
if (f.to_check(key, TRUE))
|
||||||
{
|
{
|
||||||
TMask& m = f.mask();
|
TMask& m = f.mask();
|
||||||
const bool empty = f.get().blank();
|
const bool empty = f.get().blank();
|
||||||
|
|
||||||
if (empty && m.insert_mode())
|
if (empty && f.focusdirty() && m.insert_mode())
|
||||||
{
|
{
|
||||||
f.set(m.get(app()._npart_is_prot ? F_PROTIVA : F_NUMDOC));
|
f.set(m.get(app()._npart_is_prot ? F_PROTIVA : F_NUMDOC));
|
||||||
if (m.get(F_CODPAG).empty())
|
if (m.get(F_CODPAG).empty())
|
||||||
@ -290,12 +310,13 @@ bool TPrimanota_application::numrif_handler(TMask_field& f, KEY key)
|
|||||||
TMask_field& clifo = m.field(app().iva() == iva_vendite ? F_CLIENTE : F_FORNITORE);
|
TMask_field& clifo = m.field(app().iva() == iva_vendite ? F_CLIENTE : F_FORNITORE);
|
||||||
clifo.on_hit();
|
clifo.on_hit();
|
||||||
}
|
}
|
||||||
return error_box("Il numero di riferimento partita e' obbligatorio!\n"
|
ok = error_box("Il numero di riferimento partita e' obbligatorio!\n"
|
||||||
"Se possibile esso verra' proposto, ma potra'\n"
|
"Se possibile esso verra' proposto, ma potra'\n"
|
||||||
"essere modificato prima di registrare il movimento.");
|
"essere modificato prima di registrare il movimento.");
|
||||||
}
|
}
|
||||||
|
m.enable_page(2, !f.get().blank());
|
||||||
if (m.edit_mode())
|
|
||||||
|
if (key == K_ENTER && m.edit_mode())
|
||||||
{
|
{
|
||||||
const TPartita* old = app().partite().first();
|
const TPartita* old = app().partite().first();
|
||||||
if (old && empty) // Se esisteva una partita ma ora non piu'
|
if (old && empty) // Se esisteva una partita ma ora non piu'
|
||||||
@ -317,7 +338,6 @@ bool TPrimanota_application::numrif_handler(TMask_field& f, KEY key)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m.enable_page(2, !f.get().blank());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ok;
|
return ok;
|
||||||
@ -554,9 +574,6 @@ bool TPrimanota_application::read_scadenze(TMask& m)
|
|||||||
const TDate datadoc = testa.get_date(MOV_DATADOC);
|
const TDate datadoc = testa.get_date(MOV_DATADOC);
|
||||||
|
|
||||||
const TRectype& prima = _rel->cg(0);
|
const TRectype& prima = _rel->cg(0);
|
||||||
// const char sezione = prima.get_char("SEZIONE"); // Dare/Avere
|
|
||||||
// const int nriga = 1;
|
|
||||||
// const int numrig = 1;
|
|
||||||
|
|
||||||
TBill clifo; clifo.get(prima);
|
TBill clifo; clifo.get(prima);
|
||||||
const int anno = m.get_int(F_ANNORIF);
|
const int anno = m.get_int(F_ANNORIF);
|
||||||
@ -577,43 +594,26 @@ bool TPrimanota_application::read_scadenze(TMask& m)
|
|||||||
codpag = primarata.get(SCAD_CODPAG);
|
codpag = primarata.get(SCAD_CODPAG);
|
||||||
}
|
}
|
||||||
set_pagamento(codpag, datadoc.string());
|
set_pagamento(codpag, datadoc.string());
|
||||||
|
|
||||||
real imponibile, imposta;
|
|
||||||
const real spese(0.0);
|
|
||||||
|
|
||||||
const real cambio(partita.get(PART_CAMBIO));
|
const TValuta cambio(partita);
|
||||||
const bool in_valuta = partita.in_valuta();
|
const bool in_valuta = cambio.in_valuta();
|
||||||
if (in_valuta)
|
|
||||||
{
|
|
||||||
imponibile = m.get_real(SK_TOTDOCVAL);
|
|
||||||
imposta = m.get_real(F_IMPOSTE); imposta /= cambio; imposta.round(3);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
imposta = m.get_real(F_IMPOSTE);
|
|
||||||
imponibile = m.get_real(F_TOTALE) - imposta;
|
|
||||||
}
|
|
||||||
|
|
||||||
// se la maschera contiene importi diversi da quelli
|
const real totale = m.get(in_valuta ? SK_TOTDOCVAL : F_TOTALE);
|
||||||
// registrati si passa la palla al culano/a
|
if (totale != partita.importo(in_valuta).valore() ||
|
||||||
// TBC controllo se imponibile deve contenere le spese
|
m.get_real(F_IMPOSTE) != partita.get_real(PART_IMPOSTA))
|
||||||
if ((imponibile + imposta) != partita.importo(in_valuta).valore() ||
|
|
||||||
imposta != partita.get_real(PART_IMPOSTA) ||
|
|
||||||
spese != partita.get_real(PART_SPESE))
|
|
||||||
{
|
{
|
||||||
warning_box("Gli importi delle scadenze non corrispondono al totale documento");
|
warning_box("Gli importi delle scadenze non corrispondono al totale documento");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
real imponibile = partita.importo(in_valuta).valore();
|
||||||
|
real imposta = partita.get_real(PART_IMPOSTA);
|
||||||
|
real spese(0.0);
|
||||||
if (in_valuta)
|
if (in_valuta)
|
||||||
{
|
{
|
||||||
imposta = partita.get_real(PART_IMPOSTA); imposta /= cambio; imposta.round(3);
|
cambio.lit2val(imposta);
|
||||||
imponibile = partita.importo(TRUE).valore() - imposta;
|
cambio.lit2val(spese);
|
||||||
}
|
}
|
||||||
else
|
imponibile -= imposta;
|
||||||
{
|
|
||||||
imposta = partita.get_real(PART_IMPOSTA);
|
|
||||||
imponibile = partita.importo(FALSE).valore() - imposta;
|
|
||||||
}
|
|
||||||
|
|
||||||
TPagamento& pag = pagamento();
|
TPagamento& pag = pagamento();
|
||||||
pag.set_total(imponibile, imposta, spese);
|
pag.set_total(imponibile, imposta, spese);
|
||||||
@ -629,7 +629,7 @@ bool TPrimanota_application::read_scadenze(TMask& m)
|
|||||||
const int tipop = scadenza.get_int(SCAD_TIPOPAG);
|
const int tipop = scadenza.get_int(SCAD_TIPOPAG);
|
||||||
const bool paid = scadenza.get_bool(SCAD_PAGATA);
|
const bool paid = scadenza.get_bool(SCAD_PAGATA);
|
||||||
const TString16 ulc = scadenza.get(SCAD_ULTCLASS);
|
const TString16 ulc = scadenza.get(SCAD_ULTCLASS);
|
||||||
if (scadenza.in_valuta())
|
if (in_valuta)
|
||||||
{
|
{
|
||||||
const real impval(scadenza.get(SCAD_IMPORTOVAL));
|
const real impval(scadenza.get(SCAD_IMPORTOVAL));
|
||||||
pag.set_rata(i-1, impval, importo, scad, tipop, ulc, paid);
|
pag.set_rata(i-1, impval, importo, scad, tipop, ulc, paid);
|
||||||
@ -675,10 +675,6 @@ void TPrimanota_application::write_scadenze(const TMask& m)
|
|||||||
|
|
||||||
if (anno > 0 && !numpart.blank())
|
if (anno > 0 && !numpart.blank())
|
||||||
{
|
{
|
||||||
real imponibile(0.0);
|
|
||||||
real imposta(0.0);
|
|
||||||
real spese(0.0);
|
|
||||||
|
|
||||||
const TString ndoc(m.get(F_NUMDOC));
|
const TString ndoc(m.get(F_NUMDOC));
|
||||||
const int tmov = causale().tipomov();
|
const int tmov = causale().tipomov();
|
||||||
const TDate ddoc(m.get(F_DATADOC));
|
const TDate ddoc(m.get(F_DATADOC));
|
||||||
@ -688,50 +684,54 @@ void TPrimanota_application::write_scadenze(const TMask& m)
|
|||||||
const TString codpag(m.get(F_CODPAG));
|
const TString codpag(m.get(F_CODPAG));
|
||||||
const long protiva = m.get_long(F_PROTIVA);
|
const long protiva = m.get_long(F_PROTIVA);
|
||||||
const TString codcaus(causale().codice());
|
const TString codcaus(causale().codice());
|
||||||
const TString codval (m.get(SK_VALUTA));
|
const TValuta cambio (m, SK_VALUTA, SK_DATACAMBIO, SK_CAMBIO);
|
||||||
const real cambio (m.get(SK_CAMBIO));
|
|
||||||
const TString agente (m.get(FS_AGENTE));
|
const TString agente (m.get(FS_AGENTE));
|
||||||
const char sezione = get_cgs_imp(0).sezione(); // Dare/Avere
|
const char sezione = get_cgs_imp(0).sezione(); // Dare/Avere
|
||||||
|
|
||||||
const TBill clifo(cgs().row(0), 2, 0x3);
|
const TBill clifo(cgs().row(0), 2, 0x3);
|
||||||
newgame = new TPartita(clifo, anno, numpart);
|
newgame = new TPartita(clifo, anno, numpart);
|
||||||
|
|
||||||
const int row = newgame->prima_fattura(nreg);
|
const int row = newgame->prima_fattura(nreg); // Riga fattura di questo movimento
|
||||||
TRiga_partite& partita = row <= 0 ? newgame->new_row() : newgame->riga(row);
|
TRiga_partite& partita = row <= 0 ? newgame->new_row() : newgame->riga(row);
|
||||||
TPagamento& pag = pagamento();
|
TPagamento& pag = pagamento();
|
||||||
|
|
||||||
// put data on partita
|
// put data on partita
|
||||||
partita.put(PART_TIPOMOV, tmov);
|
partita.put(PART_TIPOMOV, tmov);
|
||||||
partita.put(PART_NREG, nreg);
|
partita.put(PART_NREG, nreg);
|
||||||
partita.put(PART_NUMRIG, 1);
|
partita.put(PART_NUMRIG, 1);
|
||||||
partita.put(PART_DATAREG, dreg);
|
partita.put(PART_DATAREG, dreg);
|
||||||
partita.put(PART_DATADOC, ddoc);
|
partita.put(PART_DATADOC, ddoc);
|
||||||
partita.put(PART_NUMDOC, ndoc);
|
partita.put(PART_NUMDOC, ndoc);
|
||||||
partita.put(PART_DESCR, desc);
|
partita.put(PART_DESCR, desc);
|
||||||
partita.put(PART_CODCAUS, codcaus);
|
partita.put(PART_CODCAUS, codcaus);
|
||||||
partita.put(PART_REG, reg);
|
partita.put(PART_REG, reg);
|
||||||
partita.put(PART_PROTIVA, protiva);
|
partita.put(PART_PROTIVA, protiva);
|
||||||
partita.put(PART_SEZ, sezione);
|
partita.put(PART_SEZ, sezione);
|
||||||
partita.put(PART_CODVAL, codval);
|
partita.put(PART_IMPTOTDOC, m.get(F_TOTALE));
|
||||||
partita.put(PART_CAMBIO, cambio);
|
cambio.put(partita);
|
||||||
|
const bool in_valuta = cambio.in_valuta();
|
||||||
if (partita.in_valuta())
|
|
||||||
{
|
real imponibile, imponibile_val;
|
||||||
partita.put(PART_IMPORTO, m.get(F_TOTALE));
|
for (int i = pag.n_rate()-1; i >= 0; i--)
|
||||||
partita.put(PART_IMPORTOVAL, pag.imponibile());
|
{
|
||||||
partita.zero(PART_IMPOSTA);
|
if (in_valuta)
|
||||||
|
{
|
||||||
|
imponibile_val += pag.tpay_rata(i);
|
||||||
|
imponibile += pag.tlit_rata(i);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
imponibile += pag.tpay_rata(i);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
partita.put(PART_IMPORTO, imponibile);
|
||||||
partita.put(PART_IMPORTO, real(pag.imponibile()+pag.imposta()));
|
partita.put(PART_IMPORTOVAL, imponibile_val);
|
||||||
partita.zero(PART_IMPORTOVAL);
|
partita.put(PART_IMPOSTA, m.get(F_IMPOSTE));
|
||||||
partita.put(PART_IMPOSTA, pag.imposta());
|
|
||||||
}
|
|
||||||
partita.put(PART_SPESE, pag.spese());
|
partita.put(PART_SPESE, pag.spese());
|
||||||
|
|
||||||
TSheet_field& ps = (TSheet_field&)m.field(FS_RATESHEET);
|
TSheet_field& ps = (TSheet_field&)m.field(FS_RATESHEET);
|
||||||
|
|
||||||
partita.elimina_rata(-1);
|
partita.elimina_rata(-1);
|
||||||
for (int i = 0; i < pag.n_rate(); i++)
|
for (i = 0; i < pag.n_rate(); i++)
|
||||||
{
|
{
|
||||||
TToken_string& row = ps.row(i);
|
TToken_string& row = ps.row(i);
|
||||||
|
|
||||||
|
192
cg/cg2105.cpp
192
cg/cg2105.cpp
@ -28,6 +28,8 @@ protected:
|
|||||||
static bool cambio_handler(TMask_field& f, KEY k);
|
static bool cambio_handler(TMask_field& f, KEY k);
|
||||||
static bool datapag_handler(TMask_field& f, KEY k);
|
static bool datapag_handler(TMask_field& f, KEY k);
|
||||||
|
|
||||||
|
void gioca_cambi(int force = 0x0);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void set_pag(const TRectype& oldpag, const TRiga_scadenze& scad, const TImporto& importo);
|
void set_pag(const TRectype& oldpag, const TRiga_scadenze& scad, const TImporto& importo);
|
||||||
void get_pag(TRectype& oldpag) const;
|
void get_pag(TRectype& oldpag) const;
|
||||||
@ -77,7 +79,7 @@ void TPay_mask::set_pag(const TRectype& oldpag, const TRiga_scadenze& scad,
|
|||||||
_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);
|
TReal_field& res = (TReal_field&)field(S_RESIDUORATA);
|
||||||
res.set_decimals(in_valuta ? 2 : 0);
|
res.set_decimals(in_valuta ? 3 : 0);
|
||||||
if (get(S_SALDOACC)[0] != 'S')
|
if (get(S_SALDOACC)[0] != 'S')
|
||||||
res.set(_da_pagare.string());
|
res.set(_da_pagare.string());
|
||||||
|
|
||||||
@ -136,17 +138,18 @@ void TPay_mask::set_pag(const TRectype& oldpag, const TRiga_scadenze& scad,
|
|||||||
enable(S_SALDOACC, sa);
|
enable(S_SALDOACC, sa);
|
||||||
|
|
||||||
show(-3, in_valuta); // Attiva campi relativi alla valuta
|
show(-3, in_valuta); // Attiva campi relativi alla valuta
|
||||||
|
show(-4, in_valuta); // Attiva campi relativi al cambio
|
||||||
|
|
||||||
#ifdef __EXTRA__
|
#ifdef __EXTRA__
|
||||||
set_handler(S_CAMBIO, cambio_handler);
|
set_handler(S_CAMBIO, cambio_handler);
|
||||||
hide(S_RESIDUOPAG);
|
hide(S_RESIDUOPAG);
|
||||||
|
|
||||||
const bool mostra_conto = FALSE;
|
const bool mostra_conto = FALSE;
|
||||||
show(-4, in_valuta); // Attiva campi relativi al cambio
|
|
||||||
#else
|
#else
|
||||||
|
disable(-4);
|
||||||
|
|
||||||
_datadoc = sum.get_date(PART_DATADOC);
|
_datadoc = sum.get_date(PART_DATADOC);
|
||||||
set_handler(S_DATAPAG, datapag_handler);
|
set_handler(S_DATAPAG, datapag_handler);
|
||||||
|
|
||||||
const bool mostra_conto = !sum.is_nota_credito();
|
const bool mostra_conto = !sum.is_nota_credito();
|
||||||
#endif
|
#endif
|
||||||
show(-2, mostra_conto); // mostra/nasconde conto contropartita
|
show(-2, mostra_conto); // mostra/nasconde conto contropartita
|
||||||
@ -163,6 +166,36 @@ void TPay_mask::get_pag(TRectype& newpag) const
|
|||||||
newpag = rel.curr();
|
newpag = rel.curr();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Riempie i campi valuta a zero in base agli altri
|
||||||
|
void TPay_mask::gioca_cambi(int force)
|
||||||
|
{
|
||||||
|
const real totale = get(S_IMPORTO);
|
||||||
|
const real totval = get(S_IMPORTOVAL);
|
||||||
|
const TValuta cambio(*this, S_VALUTA, S_DATACAMBIO, S_CAMBIO);
|
||||||
|
|
||||||
|
if ( (force == 0x1 || totale.is_zero()) && !(totval.is_zero() || cambio.in_lire()) )
|
||||||
|
{
|
||||||
|
const real new_totale = cambio.val2lit(totval);
|
||||||
|
if (new_totale != totale)
|
||||||
|
set(S_IMPORTO, new_totale, TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( (force == 0x2 || totval.is_zero()) && !(totale.is_zero() || cambio.in_lire()))
|
||||||
|
{
|
||||||
|
const real new_totval = cambio.lit2val(totale);
|
||||||
|
if (new_totval != totval)
|
||||||
|
set(S_IMPORTOVAL, new_totval, TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( (force == 0x4 || cambio.in_lire()) && !(totale.is_zero() || totval.is_zero()))
|
||||||
|
{
|
||||||
|
real new_cambio = totale / totval; new_cambio.round(5);
|
||||||
|
if (new_cambio != cambio.cambio())
|
||||||
|
set(S_CAMBIO, new_cambio, TRUE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool TPay_mask::importo_handler(TMask_field& f, KEY k)
|
bool TPay_mask::importo_handler(TMask_field& f, KEY k)
|
||||||
{
|
{
|
||||||
TPay_mask& m = (TPay_mask&)f.mask();
|
TPay_mask& m = (TPay_mask&)f.mask();
|
||||||
@ -183,7 +216,10 @@ bool TPay_mask::importo_handler(TMask_field& f, KEY k)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (k == K_TAB && f.focusdirty())
|
if (k == K_TAB && f.focusdirty())
|
||||||
{
|
{
|
||||||
|
if (m.field(S_IMPORTOVAL).active())
|
||||||
|
m.gioca_cambi();
|
||||||
|
|
||||||
real i(f.get());
|
real i(f.get());
|
||||||
if (m.field(S_RITENUTE).active())
|
if (m.field(S_RITENUTE).active())
|
||||||
i += real(m.get(S_RITENUTE));
|
i += real(m.get(S_RITENUTE));
|
||||||
@ -201,31 +237,20 @@ bool TPay_mask::importo_handler(TMask_field& f, KEY k)
|
|||||||
|
|
||||||
const real residuopag(m._pagabile - i);
|
const real residuopag(m._pagabile - i);
|
||||||
m.set(S_RESIDUOPAG, residuopag);
|
m.set(S_RESIDUOPAG, residuopag);
|
||||||
|
|
||||||
if (f.dlg() == S_IMPORTOVAL)
|
|
||||||
{
|
|
||||||
const TValuta val(m, 0, 0, S_CAMBIO);
|
|
||||||
val.val2lit(i);
|
|
||||||
m.set(S_IMPORTO, i);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TPay_mask::importolire_handler(TMask_field& f, KEY k)
|
bool TPay_mask::importolire_handler(TMask_field& f, KEY k)
|
||||||
{
|
{
|
||||||
|
TPay_mask& m = (TPay_mask&)f.mask();
|
||||||
|
|
||||||
|
if (k == K_F8)
|
||||||
|
m.send_key(k, S_IMPORTOVAL);
|
||||||
|
|
||||||
if (f.to_check(k))
|
if (f.to_check(k))
|
||||||
{
|
m.gioca_cambi();
|
||||||
TPay_mask& m = (TPay_mask&)f.mask();
|
|
||||||
const real implit(f.get());
|
|
||||||
if (!implit.is_zero() && m.get(S_IMPORTOVAL).empty())
|
|
||||||
{
|
|
||||||
const TValuta val(m, 0, 0, S_CAMBIO);
|
|
||||||
const real impval = val.lit2val(implit);
|
|
||||||
m.set(S_IMPORTOVAL, impval);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -233,9 +258,8 @@ bool TPay_mask::cambio_handler(TMask_field& f, KEY k)
|
|||||||
{
|
{
|
||||||
if (k == K_TAB && f.focusdirty())
|
if (k == K_TAB && f.focusdirty())
|
||||||
{
|
{
|
||||||
TMask_field& i = f.mask().field(S_IMPORTOVAL);
|
TPay_mask& m = (TPay_mask&)f.mask();
|
||||||
i.set_dirty();
|
m.gioca_cambi(0x1);
|
||||||
i.on_hit();
|
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@ -298,8 +322,10 @@ protected:
|
|||||||
int nuovo_pagamento(TPartita& partita, int nriga, int rata) const;
|
int nuovo_pagamento(TPartita& partita, int nriga, int rata) const;
|
||||||
bool edit_pagamento(TPartita& p, int nriga, int nrata, int nrigp) const;
|
bool edit_pagamento(TPartita& p, int nriga, int nrata, int nrigp) const;
|
||||||
|
|
||||||
|
void align_number(TMask_field& f) const;
|
||||||
long number_distance(const char* key, const char* num) const;
|
long number_distance(const char* key, const char* num) const;
|
||||||
bool same_number(const char* key, const char* num) const;
|
bool same_number(const char* key, const char* num) const;
|
||||||
|
void append_conto(TString& s) const;
|
||||||
|
|
||||||
#ifdef __EXTRA__
|
#ifdef __EXTRA__
|
||||||
bool edit_fattura(TPartita& p, int nriga);
|
bool edit_fattura(TPartita& p, int nriga);
|
||||||
@ -322,18 +348,27 @@ public:
|
|||||||
virtual ~TGame_mask() {}
|
virtual ~TGame_mask() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void TGame_mask::append_conto(TString& s) const
|
||||||
|
{
|
||||||
|
switch (conto().tipo())
|
||||||
|
{
|
||||||
|
case 'C':
|
||||||
|
s << "Cliente"; break;
|
||||||
|
case 'F':
|
||||||
|
s << "Fornitore"; break;
|
||||||
|
default:
|
||||||
|
s << "Conto " << conto().gruppo() << ' ' << conto().conto(); break;
|
||||||
|
}
|
||||||
|
s << ' ' << conto().sottoconto();
|
||||||
|
}
|
||||||
|
|
||||||
TGame_mask::TGame_mask(const TBill& bill, long numreg, int riga)
|
TGame_mask::TGame_mask(const TBill& bill, long numreg, int riga)
|
||||||
: TMask("cg2100p"), _conto(bill), _numreg(numreg), _numrig(riga),
|
: TMask("cg2100p"), _conto(bill), _numreg(numreg), _numrig(riga),
|
||||||
_changed(FALSE), _valfirst(FALSE), _causali(LF_CAUSALI, "CODCAUS", "DESCR")
|
_changed(FALSE), _valfirst(FALSE), _causali(LF_CAUSALI, "CODCAUS", "DESCR")
|
||||||
{
|
{
|
||||||
TString descr(80);
|
TString descr(80);
|
||||||
switch (_conto.tipo())
|
append_conto(descr);
|
||||||
{
|
descr << ' ' << ((TBill&)_conto).descrizione();
|
||||||
case 'C': descr = "Cliente"; break;
|
|
||||||
case 'F': descr = "Fornitore"; break;
|
|
||||||
default: descr = "Conto"; break;
|
|
||||||
}
|
|
||||||
descr << ' ' << _conto.sottoconto() << ' ' << ((TBill&)_conto).descrizione();
|
|
||||||
set(P_DESCR, descr);
|
set(P_DESCR, descr);
|
||||||
|
|
||||||
TValuta val;
|
TValuta val;
|
||||||
@ -342,6 +377,14 @@ TGame_mask::TGame_mask(const TBill& bill, long numreg, int riga)
|
|||||||
val.get(cm, SK_VALUTA, SK_DATACAMBIO, SK_CAMBIO);
|
val.get(cm, SK_VALUTA, SK_DATACAMBIO, SK_CAMBIO);
|
||||||
cerca_valuta(val);
|
cerca_valuta(val);
|
||||||
val.set(*this, P_VALUTA, P_DATACAMBIO, P_CAMBIO);
|
val.set(*this, P_VALUTA, P_DATACAMBIO, P_CAMBIO);
|
||||||
|
|
||||||
|
const TCausale& causale = app().causale();
|
||||||
|
const tipo_movimento tm = (tipo_movimento)causale.tipomov();
|
||||||
|
if (tm == tm_nota_credito)
|
||||||
|
{
|
||||||
|
set(P_ANNO, cm.get(F_ANNORIF));
|
||||||
|
set(P_NUMERO, cm.get(F_NUMRIF));
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
enable(-3, val.in_valuta());
|
enable(-3, val.in_valuta());
|
||||||
|
|
||||||
@ -1007,6 +1050,13 @@ bool TGame_mask::edit_scadenza_handler(TMask_field& f, KEY k)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TGame_mask::align_number(TMask_field& f) const
|
||||||
|
{
|
||||||
|
const TPartita game(conto(), 0, "*");
|
||||||
|
const char a = game.allineamento_richiesto();
|
||||||
|
f.set_justify(a == 'R');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool TGame_mask::nuovo_handler(TMask_field& f, KEY k)
|
bool TGame_mask::nuovo_handler(TMask_field& f, KEY k)
|
||||||
{
|
{
|
||||||
@ -1016,48 +1066,48 @@ bool TGame_mask::nuovo_handler(TMask_field& f, KEY k)
|
|||||||
int anno;
|
int anno;
|
||||||
TString numero;
|
TString numero;
|
||||||
|
|
||||||
// Graffa tattica per distruggere la maschera new_game alla fine del blocco
|
TMask* new_game = new TMask("cg2100n"); // We must create mask on the heap!
|
||||||
{
|
gm.align_number(new_game->field(P_NUMERO));
|
||||||
TMask new_game("cg2100n");
|
new_game->first_focus(P_NUMERO);
|
||||||
new_game.first_focus(P_NUMERO);
|
|
||||||
|
|
||||||
#ifndef __EXTRA__
|
#ifndef __EXTRA__
|
||||||
const TMask& cm = app().curr_mask();
|
const TMask& cm = app().curr_mask();
|
||||||
new_game.disable(-1);
|
new_game->disable(-1);
|
||||||
gm._tipomov = (tipo_movimento)app().causale().tipomov();
|
gm._tipomov = (tipo_movimento)app().causale().tipomov();
|
||||||
new_game.set(P_NUOVO, gm._tipomov);
|
new_game->set(P_NUOVO, gm._tipomov);
|
||||||
new_game.set(P_SEZIONE, gm._importo.sezione());
|
new_game->set(P_SEZIONE, gm._importo.sezione());
|
||||||
new_game.set(P_RESIDUO, gm.get(P_RESIDUO));
|
new_game->set(P_RESIDUO, gm.get(P_RESIDUO));
|
||||||
new_game.set(P_DATADOC, cm.get(F_DATADOC));
|
new_game->set(P_DATADOC, cm.get(F_DATADOC));
|
||||||
new_game.set(P_NUMDOC, cm.get(F_NUMDOC));
|
new_game->set(P_NUMDOC, cm.get(F_NUMDOC));
|
||||||
new_game.set(P_DESCR, cm.get(F_DESCR));
|
new_game->set(P_DESCR, cm.get(F_DESCR));
|
||||||
if (gm._tipomov < 3)
|
if (gm._tipomov < 3)
|
||||||
new_game.set(P_CODPAG,cm.get(F_CODPAG));
|
new_game->set(P_CODPAG,cm.get(F_CODPAG));
|
||||||
if (gm._tipomov == 2)
|
if (gm._tipomov == 2)
|
||||||
{
|
{
|
||||||
new_game.set(P_ANNO, cm.get(F_ANNORIF));
|
new_game->set(P_ANNO, cm.get(F_ANNORIF));
|
||||||
new_game.set(P_NUMERO, cm.get(F_NUMRIF));
|
new_game->set(P_NUMERO, cm.get(F_NUMRIF));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
k = new_game.run();
|
k = new_game->run();
|
||||||
anno = new_game.get_int(P_ANNO);
|
anno = new_game->get_int(P_ANNO);
|
||||||
numero = new_game.get(P_NUMERO);
|
numero = new_game->get(P_NUMERO);
|
||||||
|
|
||||||
gm._tipomov = (tipo_movimento)new_game.get_int(P_NUOVO);
|
gm._tipomov = (tipo_movimento)new_game->get_int(P_NUOVO);
|
||||||
gm._codpag = new_game.get(P_CODPAG);
|
gm._codpag = new_game->get(P_CODPAG);
|
||||||
gm._sezione = new_game.get(P_SEZIONE)[0];
|
gm._sezione = new_game->get(P_SEZIONE)[0];
|
||||||
gm._importo.set(gm._sezione, real(new_game.get(P_RESIDUO)));
|
gm._importo.set(gm._sezione, real(new_game->get(P_RESIDUO)));
|
||||||
gm._numdoc = new_game.get(P_NUMDOC);
|
gm._numdoc = new_game->get(P_NUMDOC);
|
||||||
gm._datadoc = new_game.get(P_DATADOC);
|
gm._datadoc = new_game->get(P_DATADOC);
|
||||||
gm._descr = new_game.get(P_DESCR);
|
gm._descr = new_game->get(P_DESCR);
|
||||||
}
|
|
||||||
|
delete new_game; new_game = NULL;
|
||||||
|
|
||||||
if (k == K_ENTER)
|
if (k == K_ENTER)
|
||||||
{
|
{
|
||||||
TPartita& game = app().partite().partita(gm.conto(), anno, numero);
|
TPartita& game = app().partite().partita(gm.conto(), anno, numero);
|
||||||
|
|
||||||
if (gm._tipomov > 1)
|
if (gm._tipomov != tm_fattura)
|
||||||
{
|
{
|
||||||
if (game.ok())
|
if (game.ok())
|
||||||
return error_box("La partita %d '%s' esiste gia'.", anno, (const char*)game.numero());
|
return error_box("La partita %d '%s' esiste gia'.", anno, (const char*)game.numero());
|
||||||
@ -1218,12 +1268,7 @@ void TGame_mask::update_saldo_clifo()
|
|||||||
add_importo(r, pag);
|
add_importo(r, pag);
|
||||||
add_importo(r, imp);
|
add_importo(r, imp);
|
||||||
r.add("Saldo ");
|
r.add("Saldo ");
|
||||||
|
append_conto(r);
|
||||||
if (conto().tipo() == 'C')
|
|
||||||
r << "cliente";
|
|
||||||
else
|
|
||||||
r << "fornitore";
|
|
||||||
r << ' ' << conto().sottoconto();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
long TGame_mask::number_distance(const char* k, const char* n) const
|
long TGame_mask::number_distance(const char* k, const char* n) const
|
||||||
@ -1233,12 +1278,12 @@ long TGame_mask::number_distance(const char* k, const char* n) const
|
|||||||
TString16 num(n); num.upper(); num.trim();
|
TString16 num(n); num.upper(); num.trim();
|
||||||
const int nl = num.len();
|
const int nl = num.len();
|
||||||
long dist = 0;
|
long dist = 0;
|
||||||
for (int i = max(kl, nl)-1; i >= 0; i--)
|
for (int i = kl-1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
const char kc = i < kl ? key[i] : 0;
|
const char kc = i < kl ? key[i] : 0;
|
||||||
const char nc = i < nl ? num[i] : 0;
|
const char nc = i < nl ? num[i] : 0;
|
||||||
const int d = kc - nc;
|
const long d = abs(kc - nc) * (kl - i) * 32;
|
||||||
dist += d*d;
|
dist += d;
|
||||||
}
|
}
|
||||||
return dist;
|
return dist;
|
||||||
}
|
}
|
||||||
@ -1323,14 +1368,15 @@ bool TGame_mask::edit_pagamento(TPartita& p, int nriga, int nrata, int nrigp) co
|
|||||||
TRectype oldpag = p.pagamento(nriga, nrata, nrigp);
|
TRectype oldpag = p.pagamento(nriga, nrata, nrigp);
|
||||||
TRiga_partite& somma = p.riga(nrigp);
|
TRiga_partite& somma = p.riga(nrigp);
|
||||||
|
|
||||||
TPay_mask* pm = new TPay_mask;
|
TPay_mask* pm = new TPay_mask; // We must create maskson the heap
|
||||||
TPay_mask& m = *pm;
|
TPay_mask& m = *pm;
|
||||||
|
|
||||||
if (nriga == TPartita::UNASSIGNED)
|
if (nriga == TPartita::UNASSIGNED)
|
||||||
{
|
{
|
||||||
nriga = p.primo_pagamento();
|
nriga = p.primo_pagamento();
|
||||||
TRiga_partite& riga = p.riga(nriga);
|
TRiga_partite& riga = p.riga(nriga);
|
||||||
const TRiga_scadenze& scaden = riga.new_row(); // Crea una rata falsa
|
TRiga_scadenze& scaden = riga.new_row(); // Crea una rata falsa
|
||||||
|
scaden.put(SCAD_DATASCAD, somma.get(PART_DATADOC));
|
||||||
m.set_pag(oldpag, scaden, _importo);
|
m.set_pag(oldpag, scaden, _importo);
|
||||||
riga.destroy_rows(); // Distrugge la rata falsa
|
riga.destroy_rows(); // Distrugge la rata falsa
|
||||||
}
|
}
|
||||||
@ -1382,10 +1428,10 @@ bool TGame_mask::edit_pagamento(TPartita& p, int nriga, int nrata, int nrigp) co
|
|||||||
else
|
else
|
||||||
app().notify_edit_pagamento(p, newpag, val);
|
app().notify_edit_pagamento(p, newpag, val);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
delete pm;
|
delete pm;
|
||||||
|
|
||||||
return key != K_ESC;
|
return key != K_ESC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -134,10 +134,15 @@ TValuta::TValuta() : _cod(""), _dat(TODAY), _cam(1.0)
|
|||||||
|
|
||||||
void TValuta::adjust()
|
void TValuta::adjust()
|
||||||
{
|
{
|
||||||
if (_cam <= 1.0)
|
if (_cod.empty() || _cod == "LIT")
|
||||||
|
{
|
||||||
|
_cod.cut(0);
|
||||||
|
_cam = 1.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_cam <= ZERO)
|
||||||
{
|
{
|
||||||
_cod = "";
|
_cod = "";
|
||||||
_dat = TDate(TODAY);
|
|
||||||
_cam = 1.0;
|
_cam = 1.0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -190,8 +195,8 @@ void TValuta::set(TMask& m, short v, short d, short c) const
|
|||||||
|
|
||||||
void TValuta::get(const TMask& m, short v, short d, short c)
|
void TValuta::get(const TMask& m, short v, short d, short c)
|
||||||
{
|
{
|
||||||
if (v > 0) _cod = m.get(v);
|
_cod = m.get(v);
|
||||||
if (d > 0) _dat = m.get(d);
|
_dat = m.get(d);
|
||||||
_cam = m.get_real(c);
|
_cam = m.get_real(c);
|
||||||
adjust();
|
adjust();
|
||||||
}
|
}
|
||||||
@ -576,12 +581,14 @@ TRiga_scadenze& TRiga_partite::new_row(int r)
|
|||||||
return scad;
|
return scad;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Elimina la rata r ed i suoi pagamenti, se r < 1 allora elimina tutte le rate
|
||||||
|
// Certified 99%
|
||||||
void TRiga_partite::elimina_rata(int r)
|
void TRiga_partite::elimina_rata(int r)
|
||||||
{
|
{
|
||||||
const int from = r <= 0 ? 1 : r;
|
const int from = r <= 0 ? 1 : r;
|
||||||
const int to = r <= 0 ? rate() : r;
|
const int to = r <= 0 ? rate() : r;
|
||||||
for (r = from; r <= to; r++)
|
for (r = to; r >= from; r--) // E' necessario andare all'indietro perche'
|
||||||
{
|
{ // il metodo rate() funzioni sempre correttamente
|
||||||
TRiga_scadenze& scad = rata(r);
|
TRiga_scadenze& scad = rata(r);
|
||||||
for (int p = scad.last(); p > 0; p = scad.pred(p))
|
for (int p = scad.last(); p > 0; p = scad.pred(p))
|
||||||
scad.elimina_pagamento(p);
|
scad.elimina_pagamento(p);
|
||||||
@ -589,6 +596,8 @@ void TRiga_partite::elimina_rata(int r)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ritorna il numero dell'ultima rata pagata o 0 se non ce ne sono
|
||||||
|
// Certified 100%
|
||||||
int TRiga_partite::ultima_ratapagata() const
|
int TRiga_partite::ultima_ratapagata() const
|
||||||
{
|
{
|
||||||
for (int r = rate(); r > 0; r--)
|
for (int r = rate(); r > 0; r--)
|
||||||
@ -596,6 +605,8 @@ int TRiga_partite::ultima_ratapagata() const
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ritorna il tipo movimento di una riga di partita
|
||||||
|
// Certified 100%
|
||||||
tipo_movimento TRiga_partite::tipo() const
|
tipo_movimento TRiga_partite::tipo() const
|
||||||
{
|
{
|
||||||
const tipo_movimento tm = (tipo_movimento)get_int(PART_TIPOMOV);
|
const tipo_movimento tm = (tipo_movimento)get_int(PART_TIPOMOV);
|
||||||
@ -603,6 +614,8 @@ tipo_movimento TRiga_partite::tipo() const
|
|||||||
return tm;
|
return tm;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Legge le rate relative ad una riga di fattura
|
||||||
|
// Certified 99%
|
||||||
int TRiga_partite::read(TBaseisamfile& f, word op)
|
int TRiga_partite::read(TBaseisamfile& f, word op)
|
||||||
{
|
{
|
||||||
int err = TRectype::read(f, op);
|
int err = TRectype::read(f, op);
|
||||||
@ -617,30 +630,41 @@ int TRiga_partite::read(TBaseisamfile& f, word op)
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Registra una riga e le sue eventuali rate
|
||||||
|
// Certified 100%
|
||||||
int TRiga_partite::write(TBaseisamfile& f) const
|
int TRiga_partite::write(TBaseisamfile& f) const
|
||||||
{
|
{
|
||||||
const int err = is_fattura() ? TTree_rectype::write(f) : TRectype::write(f);
|
const int err = is_fattura() ? TTree_rectype::write(f) : TRectype::write(f);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Aggiorna una riga e le sue eventuali rate
|
||||||
|
// Certified 100%
|
||||||
int TRiga_partite::rewrite(TBaseisamfile& f) const
|
int TRiga_partite::rewrite(TBaseisamfile& f) const
|
||||||
{
|
{
|
||||||
const int err = is_fattura() ? TTree_rectype::rewrite(f) : TRectype::rewrite(f);
|
const int err = is_fattura() ? TTree_rectype::rewrite(f) : TRectype::rewrite(f);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Elimina una riga e le sue eventuali rate
|
||||||
|
// Certified 100%
|
||||||
int TRiga_partite::remove(TBaseisamfile& f) const
|
int TRiga_partite::remove(TBaseisamfile& f) const
|
||||||
{
|
{
|
||||||
const int err = is_fattura() ? TTree_rectype::remove(f) : TRectype::remove(f);
|
const int err = is_fattura() ? TTree_rectype::remove(f) : TRectype::remove(f);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ritorna l'indice dell'ultimo pagamento della rata r o 0 se non ce ne sono
|
||||||
|
// Certified 100%
|
||||||
int TRiga_partite::ultimo_pagamento(int r) const
|
int TRiga_partite::ultimo_pagamento(int r) const
|
||||||
{
|
{
|
||||||
const TRiga_scadenze& s = rata(r);
|
const TRiga_scadenze& s = rata(r);
|
||||||
return s.last();
|
return s.last();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Aggiorna il campo field contenente un totale sottraendo il corrispondente valore di
|
||||||
|
// un record prima (vec) e dopo la sua modifica (nuo)
|
||||||
|
// Certified 100%
|
||||||
bool TRiga_partite::update(const TRectype& vec, const TRectype& nuo, const char* field)
|
bool TRiga_partite::update(const TRectype& vec, const TRectype& nuo, const char* field)
|
||||||
{
|
{
|
||||||
real totale(get(field));
|
real totale(get(field));
|
||||||
@ -671,6 +695,9 @@ bool TRiga_partite::update(const TImporto& vec, const TImporto& nuo,
|
|||||||
return zero;
|
return zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Cerca una rata con abbuoni o differenze cambio
|
||||||
|
// Certified 99%
|
||||||
int TRiga_partite::rata_con_abbuoni_diffcam() const
|
int TRiga_partite::rata_con_abbuoni_diffcam() const
|
||||||
{
|
{
|
||||||
int found = 0;
|
int found = 0;
|
||||||
@ -680,16 +707,21 @@ int TRiga_partite::rata_con_abbuoni_diffcam() const
|
|||||||
for (int p = scad.last(); p > 0; p = scad.pred(p))
|
for (int p = scad.last(); p > 0; p = scad.pred(p))
|
||||||
{
|
{
|
||||||
const TRectype& pag = scad.row(p);
|
const TRectype& pag = scad.row(p);
|
||||||
if (!pag.get_real(PART_ABBUONI).is_zero() || !pag.get_real(PART_DIFFCAM).is_zero())
|
if (pag.get_char(PAGSCA_ACCSAL) == 'S')
|
||||||
{
|
{
|
||||||
found = s;
|
if (!pag.get_real(PAGSCA_ABBUONI).is_zero() ||
|
||||||
break;
|
!pag.get_real(PAGSCA_DIFFCAM).is_zero())
|
||||||
|
{
|
||||||
|
found = s;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return found;
|
return found;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Determina se una riga e' in valuta in base al codice valuta
|
||||||
bool TRiga_partite::in_valuta() const
|
bool TRiga_partite::in_valuta() const
|
||||||
{
|
{
|
||||||
const TString& cod = get(PART_CODVAL);
|
const TString& cod = get(PART_CODVAL);
|
||||||
@ -815,6 +847,7 @@ char TPartita::allineamento_richiesto() const
|
|||||||
#endif
|
#endif
|
||||||
carica_allineamento();
|
carica_allineamento();
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (conto().tipo())
|
switch (conto().tipo())
|
||||||
{
|
{
|
||||||
case 'C': all = _cli_align; break;
|
case 'C': all = _cli_align; break;
|
||||||
|
@ -86,8 +86,8 @@ public:
|
|||||||
real val2lit(const real& val) const;
|
real val2lit(const real& val) const;
|
||||||
void val2lit(real& val) const;
|
void val2lit(real& val) const;
|
||||||
void val2lit(TImporto& imp) const;
|
void val2lit(TImporto& imp) const;
|
||||||
bool in_lire() const { return _cam == 1.0; }
|
bool in_lire() const { return _cod.empty(); }
|
||||||
bool in_valuta() const { return _cam != 1.0; }
|
bool in_valuta() const { return _cod.not_empty(); }
|
||||||
|
|
||||||
void get(const TRectype& rec);
|
void get(const TRectype& rec);
|
||||||
void put(TRectype& rec) const;
|
void put(TRectype& rec) const;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user