Gestione scadenze in valuta

git-svn-id: svn://10.65.10.50/trunk@1880 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1995-09-22 12:29:00 +00:00
parent 32fbac862b
commit 0a0939e127
14 changed files with 1739 additions and 1453 deletions

View File

@ -178,7 +178,7 @@ END
NUMBER F_STATOCF 3
BEGIN
PROMPT 2 8 "Comune:Stato "
PROMPT 2 8 "Comune: Stato "
FIELD LF_CLIFO->STATOCF
FLAGS "Z"
USE %STA

View File

@ -97,6 +97,8 @@ TMask* TPrimanota_application::load_mask(int n)
ps.set_notify(pag_notify);
m->set_handler(FS_RESET, reset_handler);
m->set_handler(FS_NRATE, nrate_handler);
m->set_handler(FS_NSCAB, codcab_handler);
m->set_handler(FS_VSCAB, codcab_handler);
}
case 1:
if (m)

View File

@ -1646,16 +1646,12 @@ bool TPrimanota_application::clifo_handler(TMask_field& f, KEY key)
TMask& m = f.mask();
const char cf = app().clifo();
TLocalisamfile& clifo = ((TEdit_field&)f).browse()->cursor()->file();
if (clifo.get_char(CLI_TIPOCF) != cf || clifo.get(CLI_CODCF) != f.get())
{
clifo.setkey(1);
TRelation cliforel(LF_CLIFO); cliforel.add(LF_CFVEN, "TIPOCF=TIPOCF|CODCF=CODCF");
TRectype& clifo = cliforel.curr();
clifo.put(CLI_TIPOCF, cf);
clifo.put(CLI_CODCF, f.get());
clifo.read();
CHECK(clifo.good(), "Impossibile ritrovare il clifo");
}
cliforel.read();
if (!suspended_handler(f, key))
return FALSE;
@ -1671,6 +1667,21 @@ bool TPrimanota_application::clifo_handler(TMask_field& f, KEY key)
const TString& s = clifo.get(CLI_CODPAG);
if (s.not_empty()) m.set(F_CODPAG, s, TRUE);
if (app().is_saldaconto())
{
if (m.field(S_VALUTA).active())
{
const TString& valuta = clifo.get(CLI_CODVAL);
if (valuta.not_empty())
m.set(S_VALUTA, valuta, TRUE);
}
m.set(FS_VSABI, clifo.get(CLI_CODABI));
m.set(FS_VSCAB, clifo.get(CLI_CODCAB));
m.send_key(K_TAB, FS_VSCAB);
m.set(FS_AGENTE, cliforel.curr(LF_CFVEN).get(CLI_CODAG), TRUE);
m.send_key(K_TAB, FS_AGENTE);
}
}
const bool occas = clifo.get_bool(CLI_OCCAS);
@ -1682,18 +1693,6 @@ bool TPrimanota_application::clifo_handler(TMask_field& f, KEY key)
if (f.focusdirty())
{
app().add_cgs_tot(m);
if (m.field(S_VALUTA).active())
{
const TString16 valuta(clifo.get("CODVAL"));
if (valuta.not_empty() && valuta != m.get(S_VALUTA))
{
TTable val("%val");
val.put("CODTAB", valuta);
if (val.read() == NOERR)
m.set(S_VALUTA, valuta);
}
}
if (occas && app().occas_mask().get(O_CODICE).empty())
m.send_key(K_SPACE, F_OCCASEDIT); // Lancia maschera occasionali
}

View File

@ -113,6 +113,7 @@ class TPrimanota_application : public TRelation_application
static bool codpag_handler(TMask_field& f, KEY key);
static bool reset_handler(TMask_field& f, KEY key);
static bool nrate_handler(TMask_field& f, KEY key);
static bool codcab_handler(TMask_field& f, KEY key);
static bool iva_notify(TSheet_field& s, int r, KEY key);
static bool iva_handler(TMask_field& f, KEY key);

View File

@ -27,6 +27,7 @@ bool TPrimanota_application::pag_notify(TSheet_field&, int r, KEY k)
// ts contiene la vecchia riga, ns la nuova
TToken_string ts(36), ns(36);
TString16 banca;
bool doit = TRUE, m_imp = FALSE, m_perc = FALSE, m_pag = FALSE;
bool m_scad = FALSE, m_tipo = FALSE, mod = FALSE;
@ -39,16 +40,14 @@ bool TPrimanota_application::pag_notify(TSheet_field&, int r, KEY k)
switch (k)
{
case K_SPACE:
break;
case K_ENTER:
ns = ps.row(r);
ts = rws.row(r);
news = ns.get(0);
newp = ns.get(2);
newi = ns.get(1);
newt = ns.get(3);
newi = ns.get();
newp = ns.get();
newt = ns.get();
// qui viene il bello, si fa per dire
if (news != ts.get(0)) // modificata data scadenza
@ -71,6 +70,11 @@ bool TPrimanota_application::pag_notify(TSheet_field&, int r, KEY k)
{
mod = m_tipo = TRUE;
}
banca = ns.get(5); ts.add(banca, 6);
banca = ns.get(6); ts.add(banca, 7);
banca = ns.get(7); ts.add(banca, 8);
banca = ns.get(8); ts.add(banca, 9);
break;
case K_DEL:
case K_INS:
@ -99,7 +103,7 @@ bool TPrimanota_application::pag_notify(TSheet_field&, int r, KEY k)
rdiff, mcomm, need_recalc);
// see if rdiff changed
msk->set(FS_RDIFFER, pag.rate_differenziate() ? "1" : "2");
msk->set(FS_NRATE, format("%d", pag.n_rate()));
msk->set(FS_NRATE, pag.n_rate());
}
if (!recalc)
{
@ -107,10 +111,10 @@ bool TPrimanota_application::pag_notify(TSheet_field&, int r, KEY k)
// put data as they are
TToken_string& trw = pag.rata(r);
TToken_string srw = trw;
if (m_scad) trw.add(news,3);
if (m_perc) trw.add(newp,1);
if (m_imp) trw.add(newi,4);
if (m_tipo) trw.add(newt,2);
if (m_scad) trw.add(news,3);
if (m_imp) trw.add(newi,4);
// validate the payment
if ((ahiahi = pag.validate()) != P_OK)
pag.rata(r) = srw;
@ -130,7 +134,6 @@ bool TPrimanota_application::pag_notify(TSheet_field&, int r, KEY k)
ps.row(r) = rws.row(r);
ps.force_update(r);
}
else if (recalc && mod && need_recalc)
{
// ridefinisci lo sheet sulla base delle nuove rate
@ -171,10 +174,10 @@ bool TPrimanota_application::reset_handler(TMask_field& f, KEY key)
bool TPrimanota_application::nrate_handler(TMask_field& f, KEY key)
{
TMask& m = f.mask();
TSheet_field& ps = (TSheet_field&)m.field(FS_RATESHEET);
if (key == K_TAB && m.is_running() && app().is_saldaconto())
{
TSheet_field& ps = (TSheet_field&)m.field(FS_RATESHEET);
if (app().pagamento() != NULL)
{
app().pagamento()->set_numero_rate(atoi(f.get()), /*TBI*/-1);
@ -186,6 +189,28 @@ bool TPrimanota_application::nrate_handler(TMask_field& f, KEY key)
return TRUE;
}
bool TPrimanota_application::codcab_handler(TMask_field& f, KEY key)
{
if (key == K_TAB && f.focusdirty())
{
const TMask& m = f.mask();
const short id = f.dlg() == FS_NSCAB ? FS_NSABI : FS_VSABI;
const int pos = id == FS_NSABI ? 5 : 7;
const TString16 abi = m.get(id);
const TString16 cab = m.get(id+1);
TSheet_field& ps = (TSheet_field&)m.field(FS_RATESHEET);
for (int i = ps.items()-1; i >= 0; i--)
{
TToken_string& row = ps.row(i);
row.add(abi, pos);
row.add(cab, pos+1);
}
ps.force_update();
}
return TRUE;
}
void TPrimanota_application::reset_pagamento()
{
@ -208,8 +233,10 @@ void TPrimanota_application::set_scadenze(TMask& m)
const real imponibile(m.get(F_IMPONIBILI));
const real imposta(m.get(F_IMPOSTE));
const real spese(0.0);
const real cambio(m.get(S_CAMBIO));
TPagamento& pag = *pagamento();
pag.set_cambio(cambio);
m.set(FS_RDIFFER, pag.rate_differenziate() ? "1" : "2");
m.set(FS_NAMEPAG, pag.name());
@ -226,6 +253,7 @@ void TPrimanota_application::set_scadenze(TMask& m)
// prepara lo sheet
pag.set_sheet(ps);
_pag_rows = ps.rows_array();
m.set(FS_NRATE, pag.n_rate());
@ -267,7 +295,6 @@ bool TPrimanota_application::read_scadenze(TMask& m)
const TString16 codval (testa.get("CODVAL"));
const real cambio(testa.get("CAMBIO"));
const TRectype& prima = _rel->cg(0);
const char sezione = prima.get_char("SEZIONE"); // Dare/Avere
const int nriga = 1;
@ -282,7 +309,7 @@ bool TPrimanota_application::read_scadenze(TMask& m)
int npart = part.prima_fattura(nreg);
bool fromscratch = FALSE;
if (npart != -1) // la gh'e'
if (npart > 0) // la gh'e'
{
const TRiga_partite& partita = part.riga(npart);
@ -308,7 +335,9 @@ bool TPrimanota_application::read_scadenze(TMask& m)
if(!fromscratch) m.field(FS_RECALC).set("");
}
if (fromscratch)
{
pag.set_rate_auto();
}
else
{
pag.zap_rate();
@ -320,7 +349,27 @@ bool TPrimanota_application::read_scadenze(TMask& m)
const int tipop = scadenza.get_int(SCAD_TIPOPAG);
const bool paid = scadenza.get_bool(SCAD_PAGATA);
const TString16 ulc = scadenza.get(SCAD_ULTCLASS);
pag.set_rata(i-1, importo, scad, tipop, ulc, paid);
if (scadenza.in_valuta())
{
const real impval(scadenza.get(SCAD_IMPORTOVAL));
pag.set_rata(i-1, impval, importo, scad, tipop, ulc, paid);
}
else
pag.set_rata(i-1, importo, ZERO, scad, tipop, ulc, paid);
TToken_string& str = ps.row(i-1);
str.add(scadenza.get(SCAD_CODABIPR), 6);
str.add(scadenza.get(SCAD_CODCABPR), 7);
str.add(scadenza.get(SCAD_CODABI), 8);
str.add(scadenza.get(SCAD_CODCAB), 9);
if (i == 1)
{
m.set(FS_NSABI, str.get(6));
m.set(FS_NSCAB, str.get(7));
m.set(FS_VSABI, str.get(8));
m.set(FS_VSCAB, str.get(9));
m.set(FS_AGENTE, scadenza.get(SCAD_CODAG));
}
}
} //else
}
@ -360,8 +409,8 @@ void TPrimanota_application::write_scadenze(const TMask& m)
const TString16 codcaus(causale().codice());
const TString16 codval (m.get(S_VALUTA));
const real cambio (m.get(S_CAMBIO));
const TString16 agente (m.get(FS_AGENTE));
const char sezione = get_cgs_imp(0).sezione(); // Dare/Avere
CHECK(sezione > ' ', "Invalid section in row 0");
const TBill clifo(cgs().row(0), 2, 0x3);
newgame = new TPartita(clifo, anno, numpart);
@ -377,10 +426,10 @@ void TPrimanota_application::write_scadenze(const TMask& m)
partita.put(PART_DATAREG, dreg);
partita.put(PART_DATADOC, ddoc);
partita.put(PART_NUMDOC, ndoc);
partita.put(PART_REG, reg);
partita.put(PART_DESCR, desc);
partita.put(PART_PROTIVA, protiva);
partita.put(PART_CODCAUS, codcaus);
partita.put(PART_REG, reg);
partita.put(PART_PROTIVA, protiva);
partita.put(PART_SEZ, sezione);
partita.put(PART_CODVAL, codval);
partita.put(PART_CAMBIO, cambio);
@ -388,19 +437,33 @@ void TPrimanota_application::write_scadenze(const TMask& m)
partita.put(PART_IMPOSTA, pag.imposta());
partita.put(PART_SPESE, pag.spese());
TSheet_field& ps = (TSheet_field&)m.field(FS_RATESHEET);
partita.elimina_rate();
for (int i = 0; i < pag.n_rate(); i++)
{
TRiga_scadenze& scadenza = partita.new_row();
TToken_string& row = ps.row(i);
TRiga_scadenze& scadenza = partita.new_row();
scadenza.put(SCAD_CODPAG, pag.code());
scadenza.put(SCAD_TIPOPAG, pag.tipo_rata(i));
scadenza.put(SCAD_ULTCLASS, pag.ulc_rata(i));
if (partita.in_valuta())
{
scadenza.put(SCAD_IMPORTO, pag.tlit_rata(i));
scadenza.put(SCAD_IMPORTOVAL, pag.tpay_rata(i));
}
else
{
scadenza.put(SCAD_IMPORTO, pag.tpay_rata(i));
scadenza.zero(SCAD_IMPORTOVAL);
}
scadenza.put(SCAD_DATASCAD, pag.data_rata(i));
scadenza.put(SCAD_CODABIPR, row.get(5));
scadenza.put(SCAD_CODCABPR, row.get(6));
scadenza.put(SCAD_CODABI, row.get(7));
scadenza.put(SCAD_CODCAB, row.get(8));
scadenza.put(SCAD_PAGATA, pag.ratapagata(i));
// scadenza.put(SCAD_CODABIPR, pag.codabipr(i)); // TBI
// scadenza.put(SCAD_CODCABPR, pag.codcabpr(i)); // TBI
scadenza.put(SCAD_CODAG, agente);
}
}

View File

@ -970,23 +970,6 @@ int TPrimanota_application::nuovo_pagamento(TPartita& partita, int nriga, int ra
causale().bill(caus = 1, contro); // ... prende il primo
contro.put(pagamento, TRUE); // Scrive conto contropartita
/* TBG Da regalare a Ferdinando
if (conto.tipo() > ' ') // Se cliente o fornitore cerca sua banca
{
TRelation cliforel(LF_CLIFO);
cliforel.add(LF_CFVEN, "TIPOCF=TIPOCF|CODCF=CODCF");
TRectype& clifo = cliforel.curr();
clifo.put(CLI_TIPOCF, conto.tipo());
clifo.put(CLI_CODCF, conto.codclifo());
const int err = cliforel.read();
CHECK(err == NOERR, "Chiss'e' fregato il clifo");
pagamento.put(PAGSCA_CODABI, clifo.get(CLI_CODABI));
pagamento.put(PAGSCA_CODCAB, clifo.get(CLI_CODCAB));
pagamento.put(PAGSCA_CODAG, cliforel.lfile(LF_CFVEN).get(CLI_CODAG));
}
*/
return nrigp;
}

View File

@ -1,4 +1,4 @@
PAGE "Rata pagamento" -1 -1 50 8
PAGE "Rata pagamento" -1 -1 50 13
DATE 101
BEGIN
@ -12,18 +12,31 @@ BEGIN
FLAGS "R"
END
NUMBER 103 8 3
BOOLEAN 111
BEGIN
PROMPT 41 3 "Pagata"
FLAGS "D"
END
NUMBER 103 15 2
BEGIN
PROMPT 1 4 "Importo valuta "
PICTURE ".2"
FLAGS "R"
END
NUMBER 104 8 3
BEGIN
PROMPT 1 2 "Percentuale "
PICTURE ".3"
FLAGS "R"
END
NUMBER 104 2 0
NUMBER 105 2 0
BEGIN
PROMPT 1 4 "Tipo pagamento "
PROMPT 1 5 "Tipo pagamento "
SHEET "Codice|Tipo pagamento@32"
INPUT 104
INPUT 105
ITEM "1|Rimessa diretta o contanti"
ITEM "2|Tratta"
ITEM "3|Ricevuta Bancaria"
@ -32,16 +45,84 @@ BEGIN
ITEM "6|Lettera di credito"
ITEM "7|Tratta accettata"
ITEM "8|Altro pagamento"
OUTPUT 104
OUTPUT 105
OUTPUT 106
END
STRING 105 32
STRING 106 32
BEGIN
PROMPT 1 5 "Descrizione "
PROMPT 1 6 "Descrizione "
FLAGS "D"
END
NUMBER 107 5
BEGIN
PROMPT 1 7 "Ns. Banca ABI "
FLAGS "Z"
USE %BAN
INPUT CODTAB[1,5] 107
INPUT CODTAB[6,10] 108
DISPLAY "ABI@5" CODTAB[1,5]
DISPLAY "CAB@5" CODTAB[6,10]
DISPLAY "Denominazione@50" S0
OUTPUT 107 CODTAB[1,5]
OUTPUT 108 CODTAB[6,10]
OUTPUT 126 S0
CHECKTYPE NORMAL
END
NUMBER 108 5
BEGIN
PROMPT 27 8 "Ns. Banca CAB "
FLAGS "Z"
COPY ALL 107
CHECKTYPE NORMAL
END
STRING 126 50 45
BEGIN
PROMPT 1 8 ""
USE %BAN KEY 2
INPUT S0 126
DISPLAY "Denominazione@50" S0
DISPLAY "ABI@5" CODTAB[1,5]
DISPLAY "CAB@5" CODTAB[6,10]
COPY OUTPUT 107
CHECKTYPE NORMAL
END
NUMBER 109 5
BEGIN
PROMPT 1 9 "Vs. Banca ABI "
FLAGS "Z"
COPY USE 107
INPUT CODTAB[1,5] 109
INPUT CODTAB[6,10] 110
COPY DISPLAY 107
OUTPUT 108 CODTAB[1,5]
OUTPUT 109 CODTAB[6,10]
OUTPUT 128 S0
CHECKTYPE NORMAL
END
NUMBER 110 5
BEGIN
PROMPT 27 9 "Vs. Banca CAB "
FLAGS "Z"
COPY ALL 109
CHECKTYPE NORMAL
END
STRING 128 50 45
BEGIN
PROMPT 1 10 ""
COPY USE 109
INPUT S0 128
COPY DISPLAY 126
COPY OUTPUT 109
CHECKTYPE NORMAL
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -12 -1 ""
@ -53,4 +134,5 @@ BEGIN
END
ENDPAGE
ENDMASK

View File

@ -10,3 +10,12 @@
#define FS_MCOMM 510
#define FS_RESET 511
#define FS_NRATE 512
#define FS_NSABI 513
#define FS_NSCAB 514
#define FS_DESCNSABI 515
#define FS_VSABI 516
#define FS_VSCAB 517
#define FS_DESCVSABI 518
#define FS_AGENTE 519
#define FS_DESCAGENTE 520

View File

@ -1,27 +1,27 @@
PAGE "Registrazione Scadenze" -1 -1 77 20
GROUPBOX DLG_NULL 79 3
TEXT DLG_NULL
BEGIN
PROMPT 0 1 "@bScadenzario"
PROMPT 1 0 "@bGestione scadenzario"
END
NUMBER FS_IMPONIBILI 15
BEGIN
PROMPT 1 2 "Imponibili "
PROMPT 1 1 "Imponibili "
PICTURE "."
FLAGS "DR"
END
NUMBER FS_IMPOSTE 15
BEGIN
PROMPT 29 2 "Imposte "
PROMPT 29 1 "Imposte "
PICTURE "."
FLAGS "DR"
END
NUMBER FS_SPESE 15
BEGIN
PROMPT 54 2 "Spese "
PROMPT 54 1 "Spese "
PICTURE "."
FLAGS "DR"
END
@ -29,7 +29,7 @@ END
RADIOBUTTON FS_RDIFFER 31
BEGIN
PROMPT 1 4 "Opzioni ricalcolo rate"
PROMPT 1 2 "Opzioni ricalcolo rate"
ITEM "1|Differenziate" MESSAGE DISABLE,FS_NRATE
ITEM "2|Uguali (obbligate dalla 2a)" MESSAGE ENABLE,FS_NRATE
ITEM "3|Uguali dall'ultima modificata" MESSAGE DISABLE,FS_NRATE
@ -38,12 +38,12 @@ END
NUMBER FS_NRATE 3 0
BEGIN
PROMPT 36 8 "Numero di rate "
PROMPT 36 6 "Numero di rate "
END
BOOLEAN FS_RECALC
BEGIN
PROMPT 58 7 "Ricalcolo automatico"
PROMPT 58 5 "Ricalcolo automatico"
MESSAGE TRUE ENABLE,FS_RDIFFER|ENABLE,FS_MCOMM|K_SPACE,FS_RDIFFER
MESSAGE FALSE DISABLE,FS_RDIFFER|DISABLE,FS_MCOMM|DISABLE,FS_NRATE
HELP "Attiva/disattiva il ricalcolo automatico delle scadenze"
@ -51,30 +51,128 @@ END
BOOLEAN FS_MCOMM
BEGIN
PROMPT 36 7 "Mese commerciale"
PROMPT 36 5 "Mese commerciale"
END
STRING FS_NAMEPAG 27
BEGIN
PROMPT 36 5 "Pagamento "
PROMPT 36 3 "Pagamento "
FLAGS "D"
END
STRING FS_TIPOPR 27
BEGIN
PROMPT 36 6 "Tipo prima rata "
PROMPT 36 4 "Tipo prima rata "
FLAGS "D"
END
SPREADSHEET FS_RATESHEET 0 8
NUMBER FS_NSABI 5
BEGIN
PROMPT 1 10 "Rate"
PROMPT 2 8 "Ns. Banca ABI "
FLAGS "Z"
USE %BAN
INPUT CODTAB[1,5] FS_NSABI
INPUT CODTAB[6,10] FS_NSCAB
DISPLAY "ABI@5" CODTAB[1,5]
DISPLAY "CAB@5" CODTAB[6,10]
DISPLAY "Denominazione@50" S0
OUTPUT FS_NSABI CODTAB[1,5]
OUTPUT FS_NSCAB CODTAB[6,10]
OUTPUT FS_DESCNSABI S0
CHECKTYPE NORMAL
END
NUMBER FS_NSCAB 5
BEGIN
PROMPT 25 8 "CAB "
FLAGS "Z"
COPY ALL FS_NSABI
CHECKTYPE NORMAL
END
STRING FS_DESCNSABI 50 37
BEGIN
PROMPT 40 8 ""
USE %BAN KEY 2
INPUT S0 FS_DESCNSABI
DISPLAY "Denominazione@50" S0
DISPLAY "ABI@5" CODTAB[1,5]
DISPLAY "CAB@5" CODTAB[6,10]
COPY OUTPUT FS_NSABI
CHECKTYPE NORMAL
END
NUMBER FS_VSABI 5
BEGIN
PROMPT 2 9 "Vs. Banca ABI "
FLAGS "Z"
COPY USE FS_NSABI
INPUT CODTAB[1,5] FS_VSABI
INPUT CODTAB[6,10] FS_VSCAB
COPY DISPLAY FS_NSABI
OUTPUT FS_VSABI CODTAB[1,5]
OUTPUT FS_VSCAB CODTAB[6,10]
OUTPUT FS_DESCVSABI S0
CHECKTYPE NORMAL
END
NUMBER FS_VSCAB 5
BEGIN
PROMPT 25 9 "CAB "
FLAGS "Z"
COPY ALL FS_VSABI
CHECKTYPE NORMAL
END
STRING FS_DESCVSABI 50 37
BEGIN
PROMPT 40 9 ""
COPY USE FS_DESCNSABI
INPUT S0 FS_DESCVSABI
COPY DISPLAY FS_DESCNSABI
COPY OUTPUT FS_VSABI
CHECKTYPE NORMAL
END
STRING FS_AGENTE 5
BEGIN
PROMPT 2 10 "Agente "
FLAGS "UZ"
USE AGE
INPUT CODTAB FS_AGENTE
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione @50" S0
OUTPUT FS_AGENTE CODTAB
OUTPUT FS_DESCAGENTE S0
CHECKTYPE NORMAL
END
STRING FS_DESCAGENTE 50
BEGIN
PROMPT 27 10 ""
USE AGE KEY 2
INPUT S0 FS_DESCAGENTE
DISPLAY "Descrizione @50" S0
DISPLAY "Codice" CODTAB
COPY OUTPUT FS_AGENTE
CHECKTYPE NORMAL
END
SPREADSHEET FS_RATESHEET
BEGIN
PROMPT 0 11 "Rate"
ITEM "Scadenza@10"
ITEM "Importo@15"
ITEM "In Valuta@15"
ITEM "Percentuale@12"
ITEM "Tipo"
ITEM "Pagamento@32"
ITEM "Ns.ABI"
ITEM "Ns.CAB"
ITEM "Vs.ABI"
ITEM "Vs.CAB"
ITEM "Pagata"
END
BUTTON FS_RESET 7 1

View File

@ -1,6 +1,4 @@
#include <utility.h>
#include <relapp.h>
#include "pagament.h"
#include <mov.h>
@ -8,13 +6,18 @@
#include <scadenze.h>
#include <pagsca.h>
int TPagamento::_rata_ifield(int n, int f) const
{
TToken_string& t = (TToken_string&)_rate[n];
return t.get_int(f);
}
long TPagamento::_rata_lfield(int n, int f) const
{
TToken_string& t = (TToken_string&)_rate[n];
return t.get_long(f);
}
real TPagamento::_rata_rfield(int n, int f) const
{
TToken_string& t = (TToken_string&)_rate[n];
@ -29,21 +32,16 @@ TDate TPagamento::_rata_dfield(int n, int f) const
const char* TPagamento::_rata_sfield(int n, int f) const
{
static char kak[6];
static char kak[16];
TToken_string& t = (TToken_string&)_rate[n];
strcpy(kak,t.get(f));
const char* k = t.get(f);
if (k != NULL)
strncpy(kak, k, 16);
else
kak[0] = '\0';
return kak;
}
bool TPagamento::ratapagata(int n)
{
TToken_string& t = (TToken_string&)_rate[n];
return t.items() > 6;
}
void TPagamento::set_intervallo_rate(int in)
{
_dirty = TRUE;
@ -53,8 +51,7 @@ void TPagamento::set_intervallo_rate(int in)
for (int i = 0; i < n_rate(); i++)
{
TToken_string& ts = rata(i);
ts.add(i == 0 ? (scad_rata(0) == 0 ? "0" : format("%d",in))
: format("%d",in), 0);
ts.add(i == 0 ? (scad_rata(0) == 0 ? 0 : in) : in, 0);
}
}
@ -62,7 +59,7 @@ void TPagamento::set_mese_commerciale(bool v, int& sscad)
{
_dirty = FALSE;
if (_mcomm == v) return;
if (sscad == -1) sscad = 30;
if (sscad < 0) sscad = 30;
if ((sscad % 30) != 0) sscad = 30 * ((sscad/30)+1);
set_intervallo_rate(sscad);
@ -83,7 +80,7 @@ void TPagamento::set_rate_differenziate(int v)
TToken_string& tt = rata(i);
tt.add(p,1);
}
_rdiff = !(v == 2);
_rdiff = (v != 2);
_dirty = TRUE;
}
}
@ -102,25 +99,26 @@ void TPagamento::set_tipo_prima_rata(int v, int sscad)
tt.add(tipo_rata(i-1),2);
tt.add(ulc_rata(i-1),5);
}
_rate.add(NULL,0);
_rate.destroy(0);
_rate.pack();
}
else if ( _tpr < 4 && v > 3)
else
if ( _tpr < 4 && v > 3)
{
TToken_string* ttn = new TToken_string(32);
ttn->add(0,0);
ttn->add(0,1);
ttn->add(1,2);
ttn->add("",3);
ttn->add("",4);
ttn->add("",5);
ttn->add(0, 0);
ttn->add(0, 1);
ttn->add(1, 2);
ttn->add("", 3);
ttn->add("", 4);
ttn->add("", 5);
_rate.insert(ttn,0);
for (int i = 0; i < (n_rate()-1); i++)
{
TToken_string& tt = rata(i);
tt.add(scad_rata(i+1),0);
tt.add(tipo_rata(i+1),2);
tt.add(ulc_rata(i+1),5);
tt.add(ulc_rata(i+1), 5);
}
}
_tpr = v;
@ -192,10 +190,8 @@ void TPagamento::set_numero_rate(int n, int sscad, int rdiff)
}
}
}
else
{
for (i = first; sum < real(100.0); i++)
{
if ((real(100.0) - sum) < p)
@ -221,12 +217,21 @@ void TPagamento::set_numero_rate(int n, int sscad, int rdiff)
}
// erase remaining
for (; i < nr; i++)
_rate.add(NULL,i);
_rate.destroy(i);
_rate.pack();
_dirty = TRUE;
}
void TPagamento::set_cambio(const real& cambio)
{
if (cambio.sign() <= 0)
_cambio = 1.0;
else
_cambio = cambio;
set_round(_cambio == 1.0 ? 0 : 2);
}
void TPagamento::next_scad(TDate& d, int scad, bool mcomm, int rata)
{
@ -322,7 +327,7 @@ void TPagamento::remove_rata(int i)
{
// non fa nessun ricalcolo, si limita ad impacchettare se
// necessario
_rate.add(NULL,i);
_rate.destroy(i);
_rate.pack();
_dirty = TRUE;
}
@ -330,31 +335,39 @@ void TPagamento::remove_rata(int i)
TToken_string& TPagamento::add_rata(real perc, int day, int type, const char* ulc)
{
TToken_string* tt = new TToken_string(16);
tt->add(day); // scadenza
tt->add(perc.string()); // percentuale
tt->add(type); // tipo
tt->add("");
tt->add("");
tt->add(ulc);
tt->add(""); // data
tt->add(""); // importo
tt->add(ulc); // ulc
_rate.add(tt);
_dirty = TRUE;
return *tt;
}
TToken_string& TPagamento::set_rata (int index, real perc, int day, int type,
const char* ulc, const char* imp,
const char* data)
const char* ulc, const char* imp, const char* data)
{
TToken_string* tt = (TToken_string*)_rate.objptr(index);
const bool nwr = (tt == NULL);
if (nwr) tt = new TToken_string(16);
if (nwr) tt = new TToken_string(64);
tt->add(day,0); // scadenza
tt->add(perc.string(),1); // percentuale
tt->add(type,2); // tipo
tt->add(data == NULL ? "" : data,3);
tt->add(imp == NULL ? "" : imp,4);
tt->add(ulc == NULL ? "" : ulc,5);
tt->add(data == NULL ? "" : data, 3);
tt->add(imp == NULL ? "" : imp, 4);
tt->add(ulc == NULL ? "" : ulc, 5);
if (imp && *imp > ' ' && _cambio != 1.0)
{
real implit(imp);
implit *= _cambio;
implit.round();
tt->add(implit.string(), 7);
}
if (!nwr)
{
@ -392,7 +405,7 @@ void TPagamento::set_percrata(int i, real r)
}
TToken_string& TPagamento::set_rata(int index, real& howmuch,
TToken_string& TPagamento::set_rata(int index, const real& howmuch, const real& quanto,
const TDate& date, int type,const char* ulc, bool pagato)
{
// calcola percentuali e scadenze a partire dagli importi
@ -401,31 +414,29 @@ TToken_string& TPagamento::set_rata(int index, real& howmuch,
const bool nwr = (tt == NULL); // nuova rata
if (nwr) tt = new TToken_string(16);
if (nwr) tt = new TToken_string(64);
TDate oldd = index > 0 ? data_rata(index -1) : _inizio;
int day = date - oldd;
real toshare(_tpr < 4 ? _firstr : _secndr);
real hm = howmuch;
if (index == first && _tpr > 0 && _tpr < 4)
howmuch -= _secndr;
real perc = (_tpr > 3 && index == 0) ? ZERO : howmuch/toshare;
if (index == first && _tpr > 0 && _tpr < 4)
howmuch += _secndr;
hm -= _secndr;
real perc = (_tpr > 3 && index == 0) ? ZERO : hm/toshare;
perc *= real(100.0);
perc.round(2);
tt->add(day,0); // scadenza
tt->add(perc.string(),1); // percentuale
tt->add(type,2); // tipo
tt->add(date.string(),3);
tt->add(howmuch.string(),4);
tt->add(ulc,5);
if (pagato) tt->add("X",6);
tt->cut(0);
tt->add(day); // 0 - scadenza
tt->add(perc.string()); // 1 - percentuale
tt->add(type); // 2 - tipo
tt->add(date.string()); // 3 - data
tt->add(howmuch.string()); // 4 - importo
tt->add(ulc); // 5 - ulc(era?)
tt->add(pagato ? "X" : " "); // 6 - pagata
tt->add(quanto.string()); // 7 - Importo in lire
if (!nwr)
{
if (index > _rate.items())
@ -542,7 +553,7 @@ const char* TPagamento::desc_tipo(int i) const
case 7: o = "Tratta accettata"; break;
case 8: o = "Rapporti interban. diretti"; break;
case 9: o = "Bonifici"; break;
case 10: o = "Altro pagamento"; break;
default: o = "Altro pagamento"; break;
}
return o;
}
@ -569,7 +580,7 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified,
int oldscad = scad_rata(0);
TDate lastdate = data_rata(0);
int first = _tpr < 4 ? 0 : 1;
TArray srate(_rate); // rate come erano
TString_array srate(_rate); // rate come erano
if (srate.items() > 1)
{
@ -578,13 +589,13 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified,
oldscad = scad_rata(1);
}
if (oldscad == 0) oldscad = 30;
if (oldtype == 0) oldtype = 1;
if (oldscad <= 0) oldscad = 30;
if (oldtype <= 0) oldtype = 1;
if (new_value != NULL)
{
newv = new_value;
rmax = is_perc_modified? real(100.0) : (_tpr < 4 ? _firstr : _secndr);
rmax = is_perc_modified ? real(100.0) : (_tpr < 4 ? _firstr : _secndr);
if (newv > rmax) return P_RSUM;
}
@ -703,13 +714,13 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified,
TToken_string& trt = rata(row+1);
trt.add(remainder.string(), is_perc_modified ? 1 : 4);
for(int j = row+2; j < srate.items(); j++)
_rate.add(NULL,j);
_rate.destroy(j);
}
else
{
// l'importante e' esagerare
for(int j = row+1; j < srate.items(); j++)
_rate.add(NULL,j);
_rate.destroy(j);
TToken_string& trt = add_rata(is_perc_modified ? remainder : (real) 0.0,
oldscad, oldtype);
@ -738,7 +749,7 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified,
// cancelliamo tutto, va'
for (int j = frs; j < srate.items(); j++)
_rate.add(NULL,j);
_rate.destroy(j);
if (rdiff == 2 && srate.items() > 1)
{
@ -914,7 +925,7 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified,
else // exhausted
{
for(int j = row+1; j < srate.items(); j++)
_rate.add(NULL,j);
_rate.destroy(j);
}
@ -1014,7 +1025,7 @@ bool TPagamento::read(TTable* t, TTable* r)
t = new TTable("%CPG");
istnew = TRUE;
}
t->zero(); t->put("CODTAB",_code);
t->zero(); t->put("CODTAB", _code);
if (t->read() != NOERR) return FALSE;
_rate.destroy();
@ -1046,13 +1057,14 @@ bool TPagamento::read(TTable* t, TTable* r)
r = new TTable("%RPG");
isrnew = TRUE;
}
TString s(16);
TString16 s;
for (int i = 0; ;i++)
{
r->zero(); s.format("%s%3d",(const char*)_code, i);
r->put("CODTAB", (const char*)s);
if (r->read() != NOERR) break;
if (r->read() != NOERR)
break;
TToken_string* tt = new TToken_string(16);
tt->add((const char*)(r->get("I0"))); // scadenza
tt->add((const char*)(r->get("R0"))); // percentuale
@ -1079,12 +1091,13 @@ int TPagamento::write(TTable& r)
// Scrive soltanto le righe di pagamento; si assume sia stata chiamata da una
// relapp, che ha scritto il file principale
TString s(16); int err = NOERR;
TString16 s;
int err = NOERR;
for (int i = 0; err == NOERR && i < n_rate(); i++)
{
r.zero(); s.format("%s%3d",(const char*)_code, i);
r.put("CODTAB", (const char*)s);
r.put("CODTAB", s);
r.put("I0", (long)scad_rata(i));
r.put("R0", perc_rata(i).string());
r.put("I1", (long)tipo_rata(i));
@ -1096,12 +1109,12 @@ int TPagamento::write(TTable& r)
int TPagamento::rewrite(TTable& r)
{
TString s(16); int err = NOERR;
TString16 s; int err = NOERR;
for (int i = 0; err == NOERR && i < n_rate(); i++)
{
r.zero(); s.format("%s%3d",(const char*)_code, i);
r.put("CODTAB", (const char*)s);
r.put("CODTAB", s);
bool was = (r.read() == NOERR);
r.zero(); s.format("%s%3d",(const char*)_code, i);
r.put("CODTAB", (const char*)s);
@ -1111,6 +1124,7 @@ int TPagamento::rewrite(TTable& r)
r.put("S1", ulc_rata(i));
err = (was ? r.rewrite() : r.write());
}
// erase possible rates > current n. rates
for (;err == NOERR;i++)
{
@ -1242,28 +1256,48 @@ void TPagamento::set_total(const real& imponibile, const real& imposta, const re
void TPagamento::set_sheet(TSheet_field& sf, int sscad)
{
sf.destroy(-1);
if (_inited && _rate.items() > 0)
{
const bool in_valuta = _cambio != 1.0;
// si istanzia uno sheet di primanota
for (int i = 0; i < n_rate(); i++)
{
TToken_string& ts = sf.row(-1);
TToken_string& ts = sf.row(i);
// istanzia, o stronzo
ts.add((const char*)data_rata(i));
ts.add(tpay_rata(i).string());
ts.add(perc_rata(i).string());
ts.add(tipo_rata(i));
ts.add(desc_tipo(tipo_rata(i)));
if (ratapagata(i))
ts.add((const char*)data_rata(i), 0); // 0 - Data scadenza
if (in_valuta)
{
sf.disable_cell(1,1); // importo
sf.disable_cell(1,2); // percentuale
ts.add(tlit_rata(i).string(), 1); // 1 - Importo in lire
ts.add(tpay_rata(i).string(), 2); // 2 - Importo in valuta
}
}
}
else if (_rate.items() > 0) // not inited: set edit sheet
else
{
ts.add(tpay_rata(i).string(), 1); // 1 - Importo
ts.add("", 2);
}
ts.add(perc_rata(i).string(), 3); // 3 - Percentuale
ts.add(tipo_rata(i), 4); // 4 - Tipo rata
ts.add(desc_tipo(tipo_rata(i)), 5); // 5 - Descrizione tipo rata
// 6,7,8,9 - Banche
const bool paid = ratapagata(i);
ts.add(paid ? "X" : "", 10); // 10 - Pagaya
if (paid)
{
sf.disable_cell(i,1); // importo
sf.disable_cell(i,2); // in valuta
sf.disable_cell(i,3); // percentuale
}
}
for (; i < sf.items(); i++)
sf.destroy(i);
sf.enable_column(2, in_valuta);
}
else
if (_rate.items() > 0) // not inited: set edit sheet
{
sf.destroy();
for (int i = 0, scr = 0; i < n_rate(); i++)
{
TToken_string& s = sf.row(-1);
@ -1294,6 +1328,7 @@ void TPagamento::set_sheet(TSheet_field& sf, int sscad)
s.add(ulc_rata(i));
}
}
if (_tpr > 3)
{
// disabilita campi da non toccare sulla prima rata
@ -1307,12 +1342,13 @@ void TPagamento::set_sheet(TSheet_field& sf, int sscad)
sf.disable_cell(0,1); // percentuale
}
}
sf.force_update();
}
TPagamento::TPagamento(const char* codtab, const char* data) :
_slicer(0.0,0), _new(FALSE), _imponibile(0.0), _imposta(0.0),
_spese(0.0), _code(codtab), _dirty(FALSE), _inited(FALSE),
_spese(0.0), _cambio(1.0), _code(codtab), _dirty(FALSE), _inited(FALSE),
_def_tpr(1), _def_ulc(""), _round(0), _int_rate(30)
{
_fixd[0] = _fixd[1] = _fixd[2] = 0;

View File

@ -29,9 +29,10 @@ class TPagamento : public TObject
real _imponibile; // imponibile da affettare
real _imposta; // imposta da affettare
real _spese; // spese da affettare
real _cambio; // cambio valuta
TDistrib _slicer; // affettatrice
bool _new; // non letto da database
TArray _rate; // rate medesime
TString_array _rate; // rate medesime
char _inscad; // inizio scadenze: S1
bool _mcomm; // mese commerciale: B0
bool _rdiff; // rate differenziate: B1
@ -47,6 +48,7 @@ class TPagamento : public TObject
int _int_rate;
int _rata_ifield(int n, int f) const;
long _rata_lfield(int n, int f) const;
real _rata_rfield(int n, int f) const;
TDate _rata_dfield(int n, int f) const;
const char* _rata_sfield(int n, int f) const;
@ -65,21 +67,21 @@ public:
real imposta() const { return _imposta; }
real spese() const { return _spese; }
int tipo_rata(int n) const { return _rata_ifield(n,2);}
real perc_rata(int n) const { return _rata_rfield(n,1);}
int scad_rata(int n) const { return _rata_ifield(n,0);}
real perc_rata(int n) const { return _rata_rfield(n,1);}
int tipo_rata(int n) const { return _rata_ifield(n,2);}
TDate data_rata(int n) const { return _rata_dfield(n,3);}
real tpay_rata(int n) const { return _rata_rfield(n,4);}
const char* ulc_rata(int n) const { return _rata_sfield(n,5);}
bool ratapagata(int n) const { return _rata_sfield(n,6)[0] > ' ';}
real tlit_rata(int n) const { return _rata_rfield(n,7);}
char inizio_scadenza() const { return _inscad; }
bool mese_commerciale() const { return _mcomm; }
bool rate_differenziate() const { return _rdiff; }
int tipo_prima_rata() const { return _tpr; }
int decs() const { return _round; }
// mi scuso per la mancanza di underscore, ma mi piaceva cosi'
bool ratapagata(int n);
const TString& name() const { return _name; }
const TString& code() const { return _code; }
const char* desc_tpr() const;
@ -101,6 +103,7 @@ public:
void set_inizio_scadenza(char v) { _inscad = v; }
void set_code(const char* c) { _code = c; }
void set_round(int n) { _round = n; }
void set_cambio(const real& ex);
// check consistency: returns word with errors flagged, 0 if ok
word validate() const;
@ -121,9 +124,10 @@ public:
TToken_string& set_rata (int index, real perc, int day, int type,
const char* ulc = NULL, const char* imp = NULL,
const char* data = NULL);
// questa calcola percentuali e scadenze a partire dagli importi
TToken_string& set_rata (int index, real& howmuch, const TDate& date, int type,
const char* ulc, bool pagato);
TToken_string& set_rata(int index, const real& howmuch, const real& quanto,
const TDate& date, int type, const char* ulc, bool pagata);
// settano tipo rata e ult. class default per le rate; se bool = TRUE
// modificano anche le eventuali rate esistenti

View File

@ -229,11 +229,20 @@ bool TRiga_scadenze::in_valuta() const
}
// Controlla se la rata e' stata completamente pagata
bool TRiga_scadenze::chiusa() const
bool TRiga_scadenze::chiusa(bool update) const
{
bool chiusa;
if (update)
{
TImporto imp(importo_da_pagare(TRUE));
imp += importo_pagato(TRUE, 0x3);
return imp.is_zero();
chiusa = imp.is_zero();
((TRectype*)this)->put(SCAD_PAGATA, chiusa ? "X" : "");
}
else
chiusa = get_bool(SCAD_PAGATA);
return chiusa;
}
// Calcola il totale dei pagamenti (eventualmente in valuta)
@ -877,7 +886,7 @@ bool TPartita::chiusa(bool update)
for (int r = part.last(); r > 0; r--)
{
const TRiga_scadenze& scad = part.rata(r);
if (!scad.chiusa())
if (!scad.chiusa(update))
{
forse_chiusa = FALSE;
break;

View File

@ -125,7 +125,7 @@ protected: // TRecord_tree
virtual TObject* dup() const { return new TRiga_scadenze(*this); }
public:
bool chiusa() const;
bool chiusa(bool update = FALSE) const;
bool in_valuta() const;