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

@ -96,7 +96,9 @@ TMask* TPrimanota_application::load_mask(int n)
TSheet_field& ps = (TSheet_field&)m->field(FS_RATESHEET);
ps.set_notify(pag_notify);
m->set_handler(FS_RESET, reset_handler);
m->set_handler(FS_NRATE, nrate_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

@ -15,7 +15,7 @@ END
BOOLEAN F_STAMPATO
BEGIN
FIELD STAMPATO
FIELD STAMPATO
FLAGS "H"
END

View File

@ -1644,18 +1644,14 @@ bool TPrimanota_application::clifo_handler(TMask_field& f, KEY key)
if (key == K_TAB && f.active())
{
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);
clifo.put(CLI_TIPOCF, cf);
clifo.put(CLI_CODCF, f.get());
clifo.read();
CHECK(clifo.good(), "Impossibile ritrovare il clifo");
}
const char cf = app().clifo();
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());
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();
@ -319,8 +348,28 @@ bool TPrimanota_application::read_scadenze(TMask& m)
const TDate scad = scadenza.get(SCAD_DATASCAD);
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);
const TString16 ulc = scadenza.get(SCAD_ULTCLASS);
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,10 +409,10 @@ 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);
const TBill clifo(cgs().row(0), 2, 0x3);
newgame = new TPartita(clifo, anno, numpart);
const int row = newgame->prima_fattura(nreg);
@ -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++)
{
{
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));
scadenza.put(SCAD_IMPORTO, pag.tpay_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,85 +1,183 @@
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 "
PICTURE "."
FLAGS "DR"
PROMPT 1 1 "Imponibili "
PICTURE "."
FLAGS "DR"
END
NUMBER FS_IMPOSTE 15
BEGIN
PROMPT 29 2 "Imposte "
PICTURE "."
FLAGS "DR"
PROMPT 29 1 "Imposte "
PICTURE "."
FLAGS "DR"
END
NUMBER FS_SPESE 15
BEGIN
PROMPT 54 2 "Spese "
PICTURE "."
FLAGS "DR"
PROMPT 54 1 "Spese "
PICTURE "."
FLAGS "DR"
END
RADIOBUTTON FS_RDIFFER 31
BEGIN
PROMPT 1 4 "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
ITEM "4|Uguali finche' possibile" MESSAGE DISABLE,FS_NRATE
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
ITEM "4|Uguali finche' possibile" MESSAGE DISABLE,FS_NRATE
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"
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"
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"
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 "
FLAGS "D"
PROMPT 36 3 "Pagamento "
FLAGS "D"
END
STRING FS_TIPOPR 27
BEGIN
PROMPT 36 6 "Tipo prima rata "
FLAGS "D"
PROMPT 36 4 "Tipo prima rata "
FLAGS "D"
END
NUMBER FS_NSABI 5
BEGIN
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
SPREADSHEET FS_RATESHEET 0 8
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 1 10 "Rate"
ITEM "Scadenza@10"
ITEM "Importo@15"
ITEM "Percentuale@12"
ITEM "Tipo"
ITEM "Pagamento@32"
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
BEGIN
PROMPT 1 -1 "Reset"
PROMPT 1 -1 "Reset"
END
ENDPAGE

File diff suppressed because it is too large Load Diff

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);}
TDate data_rata(int n) const { return _rata_dfield(n,3);}
real tpay_rata(int n) const { return _rata_rfield(n,4);}
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
{
TImporto imp(importo_da_pagare(TRUE));
imp += importo_pagato(TRUE, 0x3);
return imp.is_zero();
bool TRiga_scadenze::chiusa(bool update) const
{
bool chiusa;
if (update)
{
TImporto imp(importo_da_pagare(TRUE));
imp += importo_pagato(TRUE, 0x3);
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;