Gestione saldaconto
git-svn-id: svn://10.65.10.50/trunk@1776 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
e6a4caa2fa
commit
e0f1f18c7e
@ -312,7 +312,7 @@ bool TPrimanota_application::read_caus(const char* cod, int year)
|
|||||||
char tipr = ' ';
|
char tipr = ' ';
|
||||||
if (_is_saldaconto)
|
if (_is_saldaconto)
|
||||||
{
|
{
|
||||||
if (nriga < 12 && nriga != 10) continue; // Si considerano solo le spese
|
if (nriga < 13 && nriga != 10) continue; // Si considerano solo le spese
|
||||||
tipr = 'G';
|
tipr = 'G';
|
||||||
}
|
}
|
||||||
const int pos = set_cgs_row(-1, zero, tc, desc, tipr);
|
const int pos = set_cgs_row(-1, zero, tc, desc, tipr);
|
||||||
@ -564,6 +564,7 @@ void TPrimanota_application::init_modify_mode(TMask& m)
|
|||||||
{
|
{
|
||||||
const long numreg = m.get_long(F_NUMREG);
|
const long numreg = m.get_long(F_NUMREG);
|
||||||
partite().add_numreg(numreg);
|
partite().add_numreg(numreg);
|
||||||
|
remove_unassigned();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,7 +7,8 @@
|
|||||||
#define P_ANNO 107
|
#define P_ANNO 107
|
||||||
#define P_NUMERO 108
|
#define P_NUMERO 108
|
||||||
#define P_SHOWALL 180
|
#define P_SHOWALL 180
|
||||||
#define P_SCAMBIO 190
|
#define P_SCAMBIO 181
|
||||||
|
#define P_NUOVO 182
|
||||||
#define P_PARTITE 201
|
#define P_PARTITE 201
|
||||||
#define P_SCADENZE 202
|
#define P_SCADENZE 202
|
||||||
|
|
||||||
|
@ -2,9 +2,10 @@
|
|||||||
|
|
||||||
TOOLBAR "" 0 20 0 2
|
TOOLBAR "" 0 20 0 2
|
||||||
|
|
||||||
BUTTON DLG_NEWREC 10 2
|
BUTTON P_NUOVO 10 2
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT -12 -1 "~Nuovo"
|
PROMPT -12 -1 "~Nuovo"
|
||||||
|
PICTURE 105
|
||||||
END
|
END
|
||||||
|
|
||||||
BUTTON DLG_OK 10 2
|
BUTTON DLG_OK 10 2
|
||||||
|
@ -125,10 +125,7 @@ BEGIN
|
|||||||
PROMPT 2 8 "Importo pagamento "
|
PROMPT 2 8 "Importo pagamento "
|
||||||
PICTURE "."
|
PICTURE "."
|
||||||
FLAGS "U"
|
FLAGS "U"
|
||||||
WARNING "Inserire un importo inferiore al residuo"
|
|
||||||
FIELD IMPORTO
|
FIELD IMPORTO
|
||||||
MESSAGE EMPTY CLEAR,S_RITENUTE
|
|
||||||
MESSAGE ENABLE,S_RITENUTE
|
|
||||||
END
|
END
|
||||||
|
|
||||||
NUMBER S_IMPORTOVAL 15 2
|
NUMBER S_IMPORTOVAL 15 2
|
||||||
|
@ -224,6 +224,7 @@ protected:
|
|||||||
bool notify_cgline_deletion(int numrig);
|
bool notify_cgline_deletion(int numrig);
|
||||||
|
|
||||||
bool notify_edit_pagamento(TPartita& partita, TRectype& new_pag, int deleting = -1);
|
bool notify_edit_pagamento(TPartita& partita, TRectype& new_pag, int deleting = -1);
|
||||||
|
bool remove_unassigned();
|
||||||
|
|
||||||
long calcola_m770(int tipo_coll, real& spese, real& compenso, real& iva, real& ritfis);
|
long calcola_m770(int tipo_coll, real& spese, real& compenso, real& iva, real& ritfis);
|
||||||
bool link_m770();
|
bool link_m770();
|
||||||
|
259
cg/cg2105.cpp
259
cg/cg2105.cpp
@ -60,7 +60,7 @@ TGame_mask::TGame_mask(const TBill& bill) : TMask("cg2100p"), _conto(bill)
|
|||||||
set_handler(P_NUMERO, numpart_handler);
|
set_handler(P_NUMERO, numpart_handler);
|
||||||
set_handler(P_SHOWALL, show_all_handler);
|
set_handler(P_SHOWALL, show_all_handler);
|
||||||
set_handler(P_SCAMBIO, scambio_handler);
|
set_handler(P_SCAMBIO, scambio_handler);
|
||||||
set_handler(DLG_NEWREC, nuovo_handler);
|
set_handler(P_NUOVO, nuovo_handler);
|
||||||
|
|
||||||
partite().set_notify(partite_notify);
|
partite().set_notify(partite_notify);
|
||||||
scadenze().sheet_mask().set_handler(100, edit_scadenza_handler);
|
scadenze().sheet_mask().set_handler(100, edit_scadenza_handler);
|
||||||
@ -206,8 +206,8 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k)
|
|||||||
row.add(rigp.get(PART_NREG));
|
row.add(rigp.get(PART_NREG));
|
||||||
row.add(rigp.get(PART_DATAREG));
|
row.add(rigp.get(PART_DATAREG));
|
||||||
row.add(scad.get(SCAD_DATASCAD));
|
row.add(scad.get(SCAD_DATASCAD));
|
||||||
row.add(pag.get_real(SCAD_IMPORTO).string());
|
row.add(pag.get_real(PAGSCA_IMPORTO).string());
|
||||||
row.add(in_valuta ? pag.get_real(SCAD_IMPORTOVAL).string(0, 2) : "");
|
row.add(in_valuta ? pag.get_real(PAGSCA_IMPORTOVAL).string(0, 2) : "");
|
||||||
row.add(rigp.get(PART_DESCR));
|
row.add(rigp.get(PART_DESCR));
|
||||||
row.add(rigp.get(PART_NUMDOC));
|
row.add(rigp.get(PART_NUMDOC));
|
||||||
row.add("");
|
row.add("");
|
||||||
@ -229,6 +229,28 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k)
|
|||||||
}
|
}
|
||||||
sal.add("Saldo della rata "); sal << ra;
|
sal.add("Saldo della rata "); sal << ra;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TRecord_array& unas = game->unassigned();
|
||||||
|
const int lastp = unas.last_row();
|
||||||
|
for (int pa = unas.first_row(); pa <= lastp; pa = unas.succ_row(pa))
|
||||||
|
{
|
||||||
|
const TRectype& pag = unas.row(pa);
|
||||||
|
const TRiga_partite& rigp = game->riga(pa);
|
||||||
|
|
||||||
|
TToken_string& row = scadenze.row(scadenze.add(""));
|
||||||
|
row.add(pag.get(PAGSCA_NRIGA));
|
||||||
|
row.add(pag.get(PAGSCA_NRATA));
|
||||||
|
row.add(rigp.get(PART_DATADOC));
|
||||||
|
row.add(rigp.get(PART_NREG));
|
||||||
|
row.add(rigp.get(PART_DATAREG));
|
||||||
|
row.add("");
|
||||||
|
row.add(pag.get_real(PAGSCA_IMPORTO).string());
|
||||||
|
row.add(in_valuta ? pag.get_real(PAGSCA_IMPORTOVAL).string(0, 2) : "");
|
||||||
|
row.add(rigp.get(PART_DESCR));
|
||||||
|
row.add(rigp.get(PART_NUMDOC));
|
||||||
|
row.add("");
|
||||||
|
row.add(pa);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gm.scadenze().force_update();
|
gm.scadenze().force_update();
|
||||||
@ -260,9 +282,9 @@ bool TGame_mask::edit_scadenza_handler(TMask_field& f, KEY k)
|
|||||||
int nrigp = m.get_int(112);
|
int nrigp = m.get_int(112);
|
||||||
if (nrigp == 0)
|
if (nrigp == 0)
|
||||||
{
|
{
|
||||||
nrigp = app().nuovo_pagamento(game, nriga, nrata, rmov);
|
if (game.rata_pagata(nriga, nrata))
|
||||||
if (nrigp < 1)
|
|
||||||
return f.error_box("La rata %d e' gia' stata pagata", nrata);
|
return f.error_box("La rata %d e' gia' stata pagata", nrata);
|
||||||
|
nrigp = app().nuovo_pagamento(game, nriga, nrata, rmov);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -272,8 +294,7 @@ bool TGame_mask::edit_scadenza_handler(TMask_field& f, KEY k)
|
|||||||
if (cur_reg != nreg)
|
if (cur_reg != nreg)
|
||||||
return f.error_box("Il movimento corrente e' il %ld", cur_reg);
|
return f.error_box("Il movimento corrente e' il %ld", cur_reg);
|
||||||
|
|
||||||
const TRiga_scadenze& scad = game.rata(nriga, nrata);
|
const int paga = game.rata_pagata(nriga, nrata);
|
||||||
const int paga = scad.pagata();
|
|
||||||
if (paga != 0 && paga != nrigp)
|
if (paga != 0 && paga != nrigp)
|
||||||
return f.error_box("Pagamento non modificabile");
|
return f.error_box("Pagamento non modificabile");
|
||||||
}
|
}
|
||||||
@ -295,21 +316,34 @@ bool TGame_mask::nuovo_handler(TMask_field& f, KEY k)
|
|||||||
{
|
{
|
||||||
if (k == K_SPACE)
|
if (k == K_SPACE)
|
||||||
{
|
{
|
||||||
TMask new_game("Nuova partita", 1, 24, 6);
|
TMask new_game("Nuova partita", 1, 24, 5);
|
||||||
new_game.add_number(101, 0, "Anno ", 1, 1, 4);
|
new_game.add_number(P_ANNO, 0, "Anno ", 1, 1, 4, "A");
|
||||||
new_game.add_string(102, 0, "Partita ", 1, 2, 7);
|
new_game.add_string(P_NUMERO, 0, "Partita ", 1, 2, 7);
|
||||||
new_game.add_button(DLG_OK, 0, "", -12, -1, 8);
|
new_game.add_button(DLG_OK, 0, "", -12, 3, 8, 2);
|
||||||
new_game.add_button(DLG_CANCEL, 0, "", -22, -1, 8);
|
new_game.add_button(DLG_CANCEL, 0, "", -22, 3, 8, 2);
|
||||||
new_game.set(101, TDate(TODAY).year());
|
|
||||||
|
|
||||||
if (new_game.run() == K_ENTER)
|
if (new_game.run() == K_ENTER)
|
||||||
{
|
{
|
||||||
const TGame_mask& gm = (TGame_mask&)f.mask();
|
TGame_mask& gm = (TGame_mask&)f.mask();
|
||||||
const int anno = new_game.get_int(101);
|
const int anno = new_game.get_int(P_ANNO);
|
||||||
const TString16 numero(new_game.get(102));
|
const TString16 numero(new_game.get(P_NUMERO));
|
||||||
TPartita& game = app().partite().partita(gm.conto(), anno, numero);
|
TPartita& game = app().partite().partita(gm.conto(), anno, numero);
|
||||||
if (game.ok())
|
if (game.ok())
|
||||||
return error_box("La partita %d %s esiste gia'.", anno, (const char*)numero);
|
return error_box("La partita %d %s esiste gia'.", anno, (const char*)numero);
|
||||||
|
const int nriga = TPartita::UNASSIGNED;
|
||||||
|
const int nrata = TPartita::UNASSIGNED;
|
||||||
|
const int nrigp = app().nuovo_pagamento(game, nriga, nrata, app().cgs().selected()+1);
|
||||||
|
|
||||||
|
app().edit_pagamento(game, nriga, nrata, nrigp);
|
||||||
|
if (game.ok())
|
||||||
|
{
|
||||||
|
game.write();
|
||||||
|
gm.send_key(K_SPACE, P_SHOWALL); // Aggiorna sheet partite
|
||||||
|
gm.set(P_ANNO, anno);
|
||||||
|
gm.set(P_NUMERO, numero, TRUE); // Selezione nuova partita
|
||||||
|
}
|
||||||
|
else
|
||||||
|
app().partite().destroy(gm.conto(), anno, numero);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@ -470,39 +504,63 @@ void TGame_mask::fill_partite(bool all) const
|
|||||||
class TPay_mask : public TMask
|
class TPay_mask : public TMask
|
||||||
{
|
{
|
||||||
bool _in_valuta;
|
bool _in_valuta;
|
||||||
real _residuo, _residuo_val;
|
real _da_pagare;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
static bool importo_handler(TMask_field& f, KEY k);
|
static bool importo_handler(TMask_field& f, KEY k);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void set_scad(const TRiga_scadenze& scad);
|
void set_pag(const TRectype& oldpag, const TRiga_scadenze& scad);
|
||||||
|
void get_pag(TRectype& oldpag) const;
|
||||||
|
|
||||||
TPay_mask();
|
TPay_mask();
|
||||||
virtual ~TPay_mask() {}
|
virtual ~TPay_mask() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
TPay_mask::TPay_mask() : TMask("cg2100p")
|
TPay_mask::TPay_mask() : TMask("cg2100s")
|
||||||
{
|
{
|
||||||
set_handler(S_IMPORTO, importo_handler);
|
|
||||||
set_handler(S_IMPORTOVAL, importo_handler);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TPay_mask::set_scad(const TRiga_scadenze& scad)
|
void TPay_mask::set_pag(const TRectype& oldpag, const TRiga_scadenze& scad)
|
||||||
{
|
{
|
||||||
|
TRelation rel(LF_PAGSCA); // Working relation
|
||||||
|
rel.lfile().curr() = oldpag;
|
||||||
|
autoload(&rel); // Load current record on mask
|
||||||
|
|
||||||
|
const TRiga_partite& parbas = scad.riga();
|
||||||
|
set(S_NUMDOC, parbas.get(PART_NUMDOC)); // Numero documento
|
||||||
|
set(S_DATADOC, parbas.get(PART_DATADOC)); // Data documento
|
||||||
|
set(S_NUMPROT, parbas.get(PART_PROTIVA)); // Protocollo IVA
|
||||||
|
set(S_DESCR, parbas.get(PART_DESCR)); // Descrizione documento
|
||||||
|
|
||||||
set(S_DATASCAD, scad.get(SCAD_DATASCAD)); // Data della scadenza
|
set(S_DATASCAD, scad.get(SCAD_DATASCAD)); // Data della scadenza
|
||||||
set(S_SEZIONE_SCAD, scad.riga().sezione()); // Sezione della rata
|
set(S_SEZIONE_SCAD, scad.riga().sezione()); // Sezione della rata
|
||||||
set(S_RATA, scad.get(SCAD_NRATA));
|
|
||||||
set(S_IMPORTO_SCAD, scad.get(SCAD_IMPORTO)); // Importo della rata
|
set(S_IMPORTO_SCAD, scad.get(SCAD_IMPORTO)); // Importo della rata
|
||||||
set(S_IMPORTOVAL_SCAD, scad.get(SCAD_IMPORTOVAL)); // Importo in valuta
|
set(S_IMPORTOVAL_SCAD, scad.get(SCAD_IMPORTOVAL)); // Importo in valuta
|
||||||
|
|
||||||
_in_valuta = scad.in_valuta();
|
_in_valuta = scad.in_valuta();
|
||||||
_residuo = scad.residuo(FALSE);
|
_da_pagare = scad.residuo(_in_valuta); // Calcola residuo in valuta
|
||||||
_residuo_val = scad.residuo(TRUE);
|
|
||||||
|
|
||||||
TReal_field& res = (TReal_field&)field(S_RESIDUO);
|
TReal_field& res = (TReal_field&)field(S_RESIDUO);
|
||||||
res.set_decimals(_in_valuta ? 2 : 0);
|
res.set_decimals(_in_valuta ? 2 : 0);
|
||||||
res.set(_in_valuta ? _residuo_val.string() : _residuo.string());
|
res.set(_da_pagare.string());
|
||||||
|
if (!_da_pagare.is_zero())
|
||||||
|
set_handler(_in_valuta ? S_IMPORTOVAL : S_IMPORTO, importo_handler);
|
||||||
|
|
||||||
|
// Ricorda l'importo da pagare
|
||||||
|
_da_pagare += oldpag.get_real(_in_valuta ? PAGSCA_IMPORTOVAL : PAGSCA_IMPORTO);
|
||||||
|
|
||||||
|
show(S_IMPORTOVAL_SCAD, _in_valuta);
|
||||||
|
show(S_IMPORTOVAL, _in_valuta);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void TPay_mask::get_pag(TRectype& newpag) const
|
||||||
|
{
|
||||||
|
TRelation rel(LF_PAGSCA); // Working relation
|
||||||
|
rel.lfile().curr() = newpag;
|
||||||
|
autosave(&rel); // Load current record from mask
|
||||||
|
newpag = rel.lfile().curr();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TPay_mask::importo_handler(TMask_field& f, KEY k)
|
bool TPay_mask::importo_handler(TMask_field& f, KEY k)
|
||||||
@ -511,25 +569,19 @@ bool TPay_mask::importo_handler(TMask_field& f, KEY k)
|
|||||||
|
|
||||||
if (k == K_F8)
|
if (k == K_F8)
|
||||||
{
|
{
|
||||||
m.set(S_IMPORTO, m._residuo.string());
|
f.set(m._da_pagare.string());
|
||||||
if (m._in_valuta)
|
|
||||||
m.set(S_IMPORTOVAL, m._residuo_val.string(), f.dlg() == S_IMPORTO);
|
|
||||||
k = K_TAB;
|
k = K_TAB;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (k == K_TAB && f.focusdirty())
|
if (k == K_TAB && f.focusdirty())
|
||||||
{
|
{
|
||||||
if (!m._in_valuta || f.dlg() == S_IMPORTOVAL)
|
|
||||||
{
|
|
||||||
const real& res = (f.dlg() == S_IMPORTO) ? m._residuo : m._residuo_val;
|
|
||||||
const real i(f.get());
|
const real i(f.get());
|
||||||
if (i >= res)
|
if (i >= m._da_pagare)
|
||||||
m.set(S_SALDOACC, "S");
|
m.set(S_SALDOACC, "S");
|
||||||
|
|
||||||
const real residuo(res-i);
|
const real residuo(m._da_pagare - i);
|
||||||
m.set(S_RESIDUO, residuo.string());
|
m.set(S_RESIDUO, residuo.string());
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@ -597,19 +649,14 @@ bool TPrimanota_application::edit_partite(int riga)
|
|||||||
|
|
||||||
int TPrimanota_application::nuovo_pagamento(TPartita& partita, int nriga, int rata, int rmov)
|
int TPrimanota_application::nuovo_pagamento(TPartita& partita, int nriga, int rata, int rmov)
|
||||||
{
|
{
|
||||||
const TRiga_partite& riga_part = partita.riga(nriga);
|
CHECKD(!partita.rata_pagata(nriga, rata), "Rata pagata ", rata);
|
||||||
CHECKD(rata >= 1 && rata <= riga_part.rate(), "Rata errata ", rata);
|
|
||||||
|
|
||||||
TRiga_scadenze& riga_scad = riga_part.rata(rata);
|
|
||||||
if (riga_scad.pagata())
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
TBill conto; partita.conto(conto); // Legge conto principale
|
TBill conto; partita.conto(conto); // Legge conto principale
|
||||||
|
|
||||||
const long numreg = curr_mask().get_long(F_NUMREG);
|
const long numreg = curr_mask().get_long(F_NUMREG);
|
||||||
int nrigp = partita.mov2rig(numreg, rmov); // Cerca riga partita relativa alla riga rmov
|
int nrigp = partita.mov2rig(numreg, rmov); // Cerca riga partita relativa alla riga rmov
|
||||||
|
|
||||||
if (nrigp < 1) // Devo creare una nuova riga di partita
|
if (nrigp <= 0) // Devo creare una nuova riga di partita
|
||||||
{
|
{
|
||||||
TRiga_partite& part = partita.nuova_riga(); // Creazione nuova riga vuota
|
TRiga_partite& part = partita.nuova_riga(); // Creazione nuova riga vuota
|
||||||
nrigp = part.get_int(PART_NRIGA);
|
nrigp = part.get_int(PART_NRIGA);
|
||||||
@ -621,7 +668,6 @@ int TPrimanota_application::nuovo_pagamento(TPartita& partita, int nriga, int ra
|
|||||||
part.put(PART_DATADOC, curr_mask().get(F_DATADOC));
|
part.put(PART_DATADOC, curr_mask().get(F_DATADOC));
|
||||||
part.put(PART_NUMDOC, curr_mask().get(F_NUMDOC));
|
part.put(PART_NUMDOC, curr_mask().get(F_NUMDOC));
|
||||||
part.put(PART_DESCR, curr_mask().get(F_DESCR));
|
part.put(PART_DESCR, curr_mask().get(F_DESCR));
|
||||||
|
|
||||||
part.put(PART_CODVAL, curr_mask().get(S_VALUTA));
|
part.put(PART_CODVAL, curr_mask().get(S_VALUTA));
|
||||||
part.put(PART_CAMBIO, curr_mask().get(S_CAMBIO));
|
part.put(PART_CAMBIO, curr_mask().get(S_CAMBIO));
|
||||||
part.put(PART_DATACAM, curr_mask().get(S_DATACAMBIO));
|
part.put(PART_DATACAM, curr_mask().get(S_DATACAMBIO));
|
||||||
@ -630,35 +676,41 @@ int TPrimanota_application::nuovo_pagamento(TPartita& partita, int nriga, int ra
|
|||||||
const int tipomov = causale().tipomov();
|
const int tipomov = causale().tipomov();
|
||||||
part.put(PART_TIPOMOV, tipomov);
|
part.put(PART_TIPOMOV, tipomov);
|
||||||
part.put(PART_CODCAUS, causale().codice());
|
part.put(PART_CODCAUS, causale().codice());
|
||||||
const TRegistro& reg = causale().reg();
|
if (causale().iva() != nessuna_iva)
|
||||||
part.put(PART_REG, reg.name());
|
{
|
||||||
part.put(PART_PROTIVA, reg.protocol());
|
part.put(PART_REG, curr_mask().get(F_CODREG));
|
||||||
|
part.put(PART_PROTIVA, curr_mask().get(F_PROTIVA));
|
||||||
|
}
|
||||||
|
|
||||||
// Complesso algoritmo per calcolare la sezione di una nuova riga partita
|
// Complesso algoritmo per calcolare la sezione di una nuova riga partita
|
||||||
char sezione = ' '; // Sezione nulla
|
char sezione = causale().sezione(1); // Usa la sezione della causale
|
||||||
TBill bill; causale().bill(1, bill); // Legge primo conto causale
|
|
||||||
if (bill.tipo() == conto.tipo()) // Se il tipo coincide ...
|
|
||||||
sezione = causale().sezione(1); // ... usa la sezione della causale
|
|
||||||
|
|
||||||
if (sezione <= ' ') // Se non c'e' la sezione bell'e' ch'e' pronta
|
if (sezione <= ' ') // Se non c'e' la sezione bell'e' ch'e' pronta
|
||||||
{
|
{
|
||||||
if (tipomov == 1 || tipomov == 5) // calcola in base al tipo movimento e
|
if (tipomov == 1 || tipomov == 5) // calcola in base al tipo movimento e
|
||||||
sezione = (conto.tipo() == 'C') ? 'D' : 'A'; // al tipo cliente/fornitore
|
sezione = (conto.tipo() == 'C') ? 'D' : 'A'; // al tipo cliente/fornitore
|
||||||
else
|
else
|
||||||
sezione = (conto.tipo() == 'C') ? 'A' : 'D';
|
sezione = (conto.tipo() == 'C') ? 'A' : 'D';
|
||||||
|
}
|
||||||
|
|
||||||
if (bill.tipo() != conto.tipo()) // Compensazioni
|
if (conto.tipo() > ' ') // Se il tipo e' C o F
|
||||||
|
{
|
||||||
|
TBill bill; causale().bill(1, bill); // Legge primo conto causale
|
||||||
|
if (bill.tipo() != conto.tipo())
|
||||||
sezione = (sezione == 'D') ? 'A' : 'D'; // scambia segno
|
sezione = (sezione == 'D') ? 'A' : 'D'; // scambia segno
|
||||||
}
|
}
|
||||||
|
|
||||||
part.put(PART_SEZ, sezione); // Memorizza solo la sezione (importi nulli)
|
part.put(PART_SEZ, sezione); // Memorizza solo la sezione (importi nulli)
|
||||||
part.put(PART_SEZABB, sezione);
|
part.put(PART_SEZABB, sezione);
|
||||||
part.put(PART_SEZDIFCAM, sezione);
|
part.put(PART_SEZDIFCAM, sezione);
|
||||||
}
|
}
|
||||||
|
|
||||||
TRectype& pagamento = riga_scad.new_row(nrigp); // Crea nuovo pagamento
|
TRectype& pagamento = partita.pagamento(nriga, rata, nrigp); // Crea nuovo pagamento
|
||||||
|
|
||||||
int caus = 2; // Calcola riga causale per la contropartita in base al tipo pagamento
|
int caus = 2; // Calcola riga causale per la contropartita in base al tipo pagamento
|
||||||
switch (riga_scad.get_int(SCAD_TIPOPAG))
|
if (rata != TPartita::UNASSIGNED)
|
||||||
|
{
|
||||||
|
const TRiga_scadenze& scad = partita.rata(nriga, rata);
|
||||||
|
switch (scad.get_int(SCAD_TIPOPAG))
|
||||||
{
|
{
|
||||||
case 2: // Tratta
|
case 2: // Tratta
|
||||||
case 7: // Tratta accettata
|
case 7: // Tratta accettata
|
||||||
@ -677,13 +729,19 @@ int TPrimanota_application::nuovo_pagamento(TPartita& partita, int nriga, int ra
|
|||||||
default:
|
default:
|
||||||
caus = 2; break;
|
caus = 2; break;
|
||||||
}
|
}
|
||||||
|
pagamento.put(PAGSCA_CODABIPR, scad.get(SCAD_CODABIPR));
|
||||||
|
pagamento.put(PAGSCA_CODCABPR, scad.get(SCAD_CODCABPR));
|
||||||
|
pagamento.put(PAGSCA_CODABI, scad.get(SCAD_CODABI));
|
||||||
|
pagamento.put(PAGSCA_CODCAB, scad.get(SCAD_CODCAB));
|
||||||
|
pagamento.put(PAGSCA_CODAG, scad.get(SCAD_CODAG));
|
||||||
|
}
|
||||||
|
|
||||||
TBill contro; causale().bill(caus, contro); // Legge conto contropartita
|
TBill contro; causale().bill(caus, contro); // Legge conto contropartita
|
||||||
if (contro.empty()) // Se non specificato ...
|
if (contro.empty()) // Se non specificato ...
|
||||||
causale().bill(caus = 1, contro); // ... prende il primo
|
causale().bill(caus = 1, contro); // ... prende il primo
|
||||||
contro.put(pagamento, TRUE); // Scrive conto contropartita
|
contro.put(pagamento, TRUE); // Scrive conto contropartita
|
||||||
|
|
||||||
// Da regalare a Ferdinando
|
/* TBG Da regalare a Ferdinando
|
||||||
if (conto.tipo() > ' ') // Se cliente o fornitore cerca sua banca
|
if (conto.tipo() > ' ') // Se cliente o fornitore cerca sua banca
|
||||||
{
|
{
|
||||||
TRelation cliforel(LF_CLIFO);
|
TRelation cliforel(LF_CLIFO);
|
||||||
@ -699,30 +757,19 @@ int TPrimanota_application::nuovo_pagamento(TPartita& partita, int nriga, int ra
|
|||||||
pagamento.put(PAGSCA_CODCAB, clifo.get(CLI_CODCAB));
|
pagamento.put(PAGSCA_CODCAB, clifo.get(CLI_CODCAB));
|
||||||
pagamento.put(PAGSCA_CODAG, cliforel.lfile(LF_CFVEN).get(CLI_CODAG));
|
pagamento.put(PAGSCA_CODAG, cliforel.lfile(LF_CFVEN).get(CLI_CODAG));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Prossima implementazione
|
|
||||||
pagamento.put(PAGSCA_CODABI, riga_scad.get(SCAD_CODABI));
|
|
||||||
pagamento.put(PAGSCA_CODCAB, riga_scad.get(SCAD_CODCAB));
|
|
||||||
pagamento.put(PAGSCA_CODAG, riga_scad.get(SCAD_CODAG));
|
|
||||||
*/
|
*/
|
||||||
pagamento.put(PAGSCA_CODABIPR, riga_scad.get(SCAD_CODABIPR));
|
|
||||||
pagamento.put(PAGSCA_CODCABPR, riga_scad.get(SCAD_CODCABPR));
|
|
||||||
|
|
||||||
return nrigp;
|
return nrigp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool TPrimanota_application::notify_edit_pagamento(TPartita& p, TRectype& new_pag, int deleting)
|
bool TPrimanota_application::notify_edit_pagamento(TPartita& p, TRectype& new_pag, int deleting)
|
||||||
{
|
{
|
||||||
if (deleting != 0)
|
if (deleting != 0)
|
||||||
{
|
{
|
||||||
const int nriga = new_pag.get_int(PAGSCA_NRIGA); // Riga fattura
|
const int nriga = new_pag.get_int(PAGSCA_NRIGA); // Riga fattura
|
||||||
const TRiga_partite& parbas = p.riga(nriga);
|
|
||||||
|
|
||||||
const int nrata = new_pag.get_int(PAGSCA_NRATA); // Numero rata
|
const int nrata = new_pag.get_int(PAGSCA_NRATA); // Numero rata
|
||||||
TRiga_scadenze& scaden = parbas.rata(nrata);
|
|
||||||
|
|
||||||
const int nrigp = new_pag.get_int(PAGSCA_NRIGP); // Riga pagamento
|
const int nrigp = new_pag.get_int(PAGSCA_NRIGP); // Riga pagamento
|
||||||
const TRectype& old_pag = scaden.row(nrigp);
|
const TRectype& old_pag = p.pagamento(nriga, nrata, nrigp);
|
||||||
const TRiga_partite& somma = p.riga(nrigp);
|
const TRiga_partite& somma = p.riga(nrigp);
|
||||||
|
|
||||||
const char sez = somma.sezione(); // Sezione importo e ritenute
|
const char sez = somma.sezione(); // Sezione importo e ritenute
|
||||||
@ -853,31 +900,26 @@ bool TPrimanota_application::notify_edit_pagamento(TPartita& p, TRectype& new_pa
|
|||||||
|
|
||||||
bool TPrimanota_application::edit_pagamento(TPartita& p, int nriga, int nrata, int nrigp)
|
bool TPrimanota_application::edit_pagamento(TPartita& p, int nriga, int nrata, int nrigp)
|
||||||
{
|
{
|
||||||
TPay_mask m;
|
const TRectype& oldpag = p.pagamento(nriga, nrata, nrigp);
|
||||||
|
|
||||||
const TRiga_partite& parbas = p.riga(nriga);
|
|
||||||
const TRiga_scadenze& scaden = parbas.rata(nrata);
|
|
||||||
const TRectype& oldpag = scaden.row(nrigp);
|
|
||||||
TRiga_partite& somma = p.riga(nrigp);
|
TRiga_partite& somma = p.riga(nrigp);
|
||||||
|
|
||||||
const bool in_valuta = scaden.in_valuta();
|
TPay_mask m;
|
||||||
m.show(S_IMPORTOVAL_SCAD, in_valuta);
|
|
||||||
m.show(S_IMPORTOVAL, in_valuta);
|
|
||||||
|
|
||||||
TRelation rel(LF_PAGSCA); // Working relation
|
|
||||||
rel.lfile().curr() = oldpag;
|
|
||||||
m.autoload(&rel); // Load current record on mask
|
|
||||||
|
|
||||||
m.set(S_DESCAGG, somma.get(PART_DESCR));
|
|
||||||
|
|
||||||
// Dati del documento (fattura) che ha generato la scadenza
|
|
||||||
m.set(S_NUMDOC, parbas.get(PART_NUMDOC)); // Numero documento
|
|
||||||
m.set(S_DATADOC, parbas.get(PART_DATADOC)); // Data documento
|
|
||||||
m.set(S_NUMPROT, parbas.get(PART_PROTIVA)); // Protocollo IVA
|
|
||||||
m.set(S_DESCR, parbas.get(PART_DESCR)); // Descrizione documento
|
|
||||||
|
|
||||||
// Dati della scadenza che ha generato la partita
|
// Dati della scadenza che ha generato la partita
|
||||||
m.set_scad(scaden);
|
if (nriga != TPartita::UNASSIGNED)
|
||||||
|
{
|
||||||
|
const TRiga_scadenze& scaden = p.rata(nriga, nrata);
|
||||||
|
m.set_pag(oldpag, scaden);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nriga = p.primo_pagamento();
|
||||||
|
TRiga_partite& riga = p.riga(nriga);
|
||||||
|
TRiga_scadenze& scaden = riga.new_row();
|
||||||
|
m.set_pag(oldpag, scaden);
|
||||||
|
riga.destroy_rows();
|
||||||
|
}
|
||||||
|
m.set(S_DESCAGG, somma.get(PART_DESCR));
|
||||||
|
|
||||||
const KEY key = m.run();
|
const KEY key = m.run();
|
||||||
if (key == K_ENTER || key == K_DEL)
|
if (key == K_ENTER || key == K_DEL)
|
||||||
@ -893,8 +935,8 @@ bool TPrimanota_application::edit_pagamento(TPartita& p, int nriga, int nrata, i
|
|||||||
somma.put(PART_DESCR, m.get(S_DESCAGG)); // Aggiorna descrizione (comune ai pagamenti)
|
somma.put(PART_DESCR, m.get(S_DESCAGG)); // Aggiorna descrizione (comune ai pagamenti)
|
||||||
}
|
}
|
||||||
|
|
||||||
m.autosave(&rel);
|
TRectype new_pag(oldpag);
|
||||||
TRectype& new_pag = rel.lfile().curr();
|
m.get_pag(new_pag);
|
||||||
notify_edit_pagamento(p, new_pag);
|
notify_edit_pagamento(p, new_pag);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -953,3 +995,38 @@ bool TPrimanota_application::notify_cgline_deletion(int numrig)
|
|||||||
|
|
||||||
return found;
|
return found;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool TPrimanota_application::remove_unassigned()
|
||||||
|
{
|
||||||
|
bool found = FALSE;
|
||||||
|
|
||||||
|
const long nreg = curr_mask().get_long(F_NUMREG);
|
||||||
|
for (TPartita* game = partite().first(); game; game = partite().next())
|
||||||
|
{
|
||||||
|
if (game->prima_fattura() > 0)
|
||||||
|
{
|
||||||
|
TRecord_array& unas = game->unassigned();
|
||||||
|
for (int u = unas.last_row(); u > 0; u = unas.pred_row(u))
|
||||||
|
{
|
||||||
|
const TRectype& pag = unas.row(u);
|
||||||
|
const int nrigp = pag.get_int(PAGSCA_NRIGP);
|
||||||
|
TRiga_partite& sum = game->riga(nrigp);
|
||||||
|
if (sum.get_long(PART_NREG) == nreg)
|
||||||
|
{
|
||||||
|
const int rmov = sum.get_int(PART_NUMRIG)-1;
|
||||||
|
const TImporto imp(sum.sezione(), pag.get_real(PAGSCA_IMPORTO));
|
||||||
|
add_cgs_imp(rmov, imp);
|
||||||
|
|
||||||
|
TRectype zero(pag); zero.zero();
|
||||||
|
sum.update(pag, zero, PART_IMPORTO);
|
||||||
|
sum.update(pag, zero, PART_IMPORTOVAL);
|
||||||
|
sum.update(pag, zero, PART_RITENUTE);
|
||||||
|
unas.destroy_row(u);
|
||||||
|
found = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return found;
|
||||||
|
}
|
||||||
|
131
cg/saldacon.cpp
131
cg/saldacon.cpp
@ -464,15 +464,18 @@ bool TPartita::reread()
|
|||||||
return read(zio, year, num);
|
return read(zio, year, num);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TPartita::write(bool re)
|
bool TPartita::write(bool re) const
|
||||||
{
|
{
|
||||||
const bool ok = _part.write(re);
|
int err = _part.write(re);
|
||||||
return ok;
|
if (err == NOERR)
|
||||||
|
err = _unassigned.write(re);
|
||||||
|
return err == NOERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TPartita::remove()
|
bool TPartita::remove()
|
||||||
{
|
{
|
||||||
_part.destroy_rows();
|
_part.destroy_rows();
|
||||||
|
_unassigned.destroy_rows();
|
||||||
return rewrite();
|
return rewrite();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -489,11 +492,48 @@ TRiga_partite& TPartita::nuova_riga()
|
|||||||
|
|
||||||
TRiga_scadenze& TPartita::rata(int nriga, int nrata) const
|
TRiga_scadenze& TPartita::rata(int nriga, int nrata) const
|
||||||
{
|
{
|
||||||
if (nriga < 1) nriga = prima_fattura();
|
if (nriga <= 0) nriga = prima_fattura();
|
||||||
const TRiga_partite& r = riga(nriga);
|
const TRiga_partite& r = riga(nriga);
|
||||||
return r.rata(nrata);
|
return r.rata(nrata);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int TPartita::rata_pagata(int nriga, int nrata) const
|
||||||
|
{
|
||||||
|
int pag = 0;
|
||||||
|
if (nriga != UNASSIGNED)
|
||||||
|
{
|
||||||
|
const TRiga_scadenze& r = rata(nriga, nrata);
|
||||||
|
pag = r.pagata();
|
||||||
|
}
|
||||||
|
return pag;
|
||||||
|
}
|
||||||
|
|
||||||
|
TRectype& TPartita::pagamento(int nriga, int nrata, int nrigp)
|
||||||
|
{
|
||||||
|
if (nriga == UNASSIGNED)
|
||||||
|
return _unassigned.row(nrigp, TRUE);
|
||||||
|
TRiga_scadenze& r = rata(nriga, nrata);
|
||||||
|
return r.row(nrigp);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TPartita::esiste(int nriga, int nrata, int nrigp) const
|
||||||
|
{
|
||||||
|
if (nriga == UNASSIGNED)
|
||||||
|
return _unassigned.exist(nrigp);
|
||||||
|
|
||||||
|
if (nrata <= 0)
|
||||||
|
return _part.exist(nriga);
|
||||||
|
|
||||||
|
if (nrigp <= 0)
|
||||||
|
{
|
||||||
|
const TRiga_partite& r = riga(nriga);
|
||||||
|
return r.rows_array().exist(nrata);
|
||||||
|
}
|
||||||
|
|
||||||
|
const TRiga_scadenze& r = rata(nriga, nrata);
|
||||||
|
return r.rows_array().exist(nrigp);
|
||||||
|
}
|
||||||
|
|
||||||
TImporto TPartita::importo_speso(long nreg, int numrig, bool extra) const
|
TImporto TPartita::importo_speso(long nreg, int numrig, bool extra) const
|
||||||
{
|
{
|
||||||
TImporto imp;
|
TImporto imp;
|
||||||
@ -661,46 +701,39 @@ bool TPartita::utilizzata(int nrigp) const
|
|||||||
return _unassigned.exist(nrigp);
|
return _unassigned.exist(nrigp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool TPartita::remove_unassigned(long nreg)
|
|
||||||
{
|
|
||||||
bool found = FALSE;
|
|
||||||
|
|
||||||
for (int u = _unassigned.last_row(); u > 0; u = _unassigned.pred_row(u))
|
|
||||||
{
|
|
||||||
const TRectype& pag = _unassigned.row(u);
|
|
||||||
const int nrigp = pag.get_int(PAGSCA_NRIGP);
|
|
||||||
TRiga_partite& sum = riga(nrigp);
|
|
||||||
if (sum.get_long(PART_NREG) == nreg)
|
|
||||||
{
|
|
||||||
TRectype zero(pag); zero.zero();
|
|
||||||
sum.update(pag, zero, PART_IMPORTO);
|
|
||||||
sum.update(pag, zero, PART_IMPORTOVAL);
|
|
||||||
sum.update(pag, zero, PART_RITENUTE);
|
|
||||||
_unassigned.destroy_row(u);
|
|
||||||
found = TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return found;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool TPartita::modifica_pagamento(const TRectype& new_pag,
|
bool TPartita::modifica_pagamento(const TRectype& new_pag,
|
||||||
char& old_ap, TImporto& old_abb, TImporto& old_diffcam,
|
char& old_ap, TImporto& old_abb, TImporto& old_diffcam,
|
||||||
char& new_ap, TImporto& new_abb, TImporto& new_diffcam)
|
char& new_ap, TImporto& new_abb, TImporto& new_diffcam)
|
||||||
{
|
{
|
||||||
const int nriga = new_pag.get_int(PAGSCA_NRIGA);
|
const int nriga = new_pag.get_int(PAGSCA_NRIGA);
|
||||||
const TRiga_partite& fattura = riga(nriga);
|
|
||||||
|
|
||||||
const int nrata = new_pag.get_int(PAGSCA_NRATA);
|
const int nrata = new_pag.get_int(PAGSCA_NRATA);
|
||||||
TRiga_scadenze& scaden = fattura.rata(nrata);
|
|
||||||
|
|
||||||
const int nrigp = new_pag.get_int(PAGSCA_NRIGP);
|
const int nrigp = new_pag.get_int(PAGSCA_NRIGP);
|
||||||
const TRectype& old_pag = scaden.row(nrigp);
|
|
||||||
|
|
||||||
const bool empty = scaden.modifica_pagamento(new_pag,
|
bool empty = FALSE;
|
||||||
|
|
||||||
|
if (nriga != UNASSIGNED)
|
||||||
|
{
|
||||||
|
TRiga_scadenze& scaden = rata(nriga, nrata);
|
||||||
|
empty = scaden.modifica_pagamento(new_pag,
|
||||||
old_ap, old_abb, old_diffcam,
|
old_ap, old_abb, old_diffcam,
|
||||||
new_ap, new_abb, new_diffcam);
|
new_ap, new_abb, new_diffcam);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const TRectype& old_pag = pagamento(nriga, nrata, nrigp);
|
||||||
|
|
||||||
|
TRiga_partite& sum = riga(nrigp);
|
||||||
|
empty = sum.update(old_pag, new_pag, PART_IMPORTO);
|
||||||
|
sum.update(old_pag, new_pag, PART_IMPORTOVAL);
|
||||||
|
sum.update(old_pag, new_pag, PART_RITENUTE);
|
||||||
|
|
||||||
|
if (new_pag.get_real(PAGSCA_IMPORTO).is_zero())
|
||||||
|
_unassigned.destroy_row(nrigp);
|
||||||
|
else
|
||||||
|
_unassigned.row(nrigp, FALSE) = new_pag;
|
||||||
|
|
||||||
|
old_ap = new_ap = ' '; // Non ci possono essere abbuoni di sorta!
|
||||||
|
}
|
||||||
|
|
||||||
if (empty && !utilizzata(nrigp))
|
if (empty && !utilizzata(nrigp))
|
||||||
_part.destroy_row(nrigp);
|
_part.destroy_row(nrigp);
|
||||||
@ -710,8 +743,13 @@ bool TPartita::modifica_pagamento(const TRectype& new_pag,
|
|||||||
|
|
||||||
bool TPartita::chiusa(bool update)
|
bool TPartita::chiusa(bool update)
|
||||||
{
|
{
|
||||||
const TRiga_partite& row = riga(first());
|
bool chiusa = FALSE;
|
||||||
bool chiusa = row.get_bool(PART_CHIUSA);
|
const int ultima = last();
|
||||||
|
if (ultima > 0)
|
||||||
|
{
|
||||||
|
const TRiga_partite& row = riga(ultima);
|
||||||
|
chiusa = row.get_bool(PART_CHIUSA);
|
||||||
|
}
|
||||||
|
|
||||||
if (update)
|
if (update)
|
||||||
{
|
{
|
||||||
@ -738,7 +776,7 @@ bool TPartita::chiusa(bool update)
|
|||||||
chiusa = forse_chiusa;
|
chiusa = forse_chiusa;
|
||||||
for (p = last(); p > 0; p = pred(p))
|
for (p = last(); p > 0; p = pred(p))
|
||||||
{
|
{
|
||||||
TRiga_partite& part = riga(first());
|
TRiga_partite& part = riga(p);
|
||||||
part.put(PART_CHIUSA, chiusa);
|
part.put(PART_CHIUSA, chiusa);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -770,13 +808,7 @@ TPartita* TPartite_array::find(const TBill& clifo, int anno, const char* num, bo
|
|||||||
if (p == NULL && create)
|
if (p == NULL && create)
|
||||||
{
|
{
|
||||||
p = new TPartita(clifo, anno, num);
|
p = new TPartita(clifo, anno, num);
|
||||||
if (p->ok())
|
|
||||||
add(k, p);
|
add(k, p);
|
||||||
else
|
|
||||||
{
|
|
||||||
delete p;
|
|
||||||
p = NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
@ -792,7 +824,7 @@ TPartita* TPartite_array::find(const TRectype& r, bool create)
|
|||||||
TPartita& TPartite_array::partita(const TBill& clifo, int anno, const char* num)
|
TPartita& TPartite_array::partita(const TBill& clifo, int anno, const char* num)
|
||||||
{
|
{
|
||||||
TPartita* game = find(clifo, anno, num, TRUE);
|
TPartita* game = find(clifo, anno, num, TRUE);
|
||||||
CHECKS(game, "Partita errata ", num);
|
CHECK(game, "Partita errata");
|
||||||
return *game;
|
return *game;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -803,6 +835,12 @@ TPartita& TPartite_array::partita(const TRectype& r)
|
|||||||
return *game;
|
return *game;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool TPartite_array::destroy(const TBill& clifo, int anno, const char* num)
|
||||||
|
{
|
||||||
|
const TString& k = key(clifo, anno, num);
|
||||||
|
return remove(k);
|
||||||
|
}
|
||||||
|
|
||||||
bool TPartite_array::write(bool re)
|
bool TPartite_array::write(bool re)
|
||||||
{
|
{
|
||||||
int err = NOERR;
|
int err = NOERR;
|
||||||
@ -843,10 +881,7 @@ int TPartite_array::add_numreg(long nreg)
|
|||||||
TCursor cur(&rel, "", 2, &filter, &filter);
|
TCursor cur(&rel, "", 2, &filter, &filter);
|
||||||
|
|
||||||
for (cur = 0; cur.ok(); ++cur)
|
for (cur = 0; cur.ok(); ++cur)
|
||||||
{
|
partita(part); // Aggiungi partita se non esiste gia'
|
||||||
TPartita& p = partita(part); // Aggiungi partita se non esiste gia'
|
|
||||||
p.remove_unassigned(nreg); // Togli righe non assegnate
|
|
||||||
}
|
|
||||||
|
|
||||||
_numreg = nreg;
|
_numreg = nreg;
|
||||||
}
|
}
|
||||||
|
@ -39,8 +39,9 @@ protected: // TRectype
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
const TRectype& row(int r) const { return _recarr.row(r); }
|
const TRectype& row(int r) const { return _recarr.row(r); }
|
||||||
TRectype& row(int r) { return _recarr.row(r, FALSE); }
|
TRectype& row(int r) { return _recarr.row(r, TRUE); }
|
||||||
TRectype& new_row(int r = -1) { return _recarr.row(r > 0 ? r : last()+1, TRUE); }
|
TRectype& new_row(int r = -1) { return _recarr.row(r > 0 ? r : last()+1, TRUE); }
|
||||||
|
void destroy_rows() { _recarr.destroy_rows(); }
|
||||||
|
|
||||||
int first() const { return _recarr.first_row(); }
|
int first() const { return _recarr.first_row(); }
|
||||||
int last() const { return _recarr.last_row(); }
|
int last() const { return _recarr.last_row(); }
|
||||||
@ -95,10 +96,6 @@ class TRiga_partite : public TTree_rectype
|
|||||||
friend class TRiga_scadenze;
|
friend class TRiga_scadenze;
|
||||||
TPartita* _partita;
|
TPartita* _partita;
|
||||||
|
|
||||||
protected:
|
|
||||||
bool update(const TRectype& vec, const TRectype& nuo, const char* field);
|
|
||||||
bool update(const TImporto& vec, const TImporto& nuo, const char* sez, const char* val);
|
|
||||||
|
|
||||||
public: // TTree_rectype
|
public: // TTree_rectype
|
||||||
virtual TObject* dup() const { return new TRiga_partite(*this); }
|
virtual TObject* dup() const { return new TRiga_partite(*this); }
|
||||||
virtual int read(TBaseisamfile& f, word op);
|
virtual int read(TBaseisamfile& f, word op);
|
||||||
@ -113,6 +110,9 @@ public:
|
|||||||
char sezione() const { return get_char(PART_SEZ); }
|
char sezione() const { return get_char(PART_SEZ); }
|
||||||
bool in_valuta() const { return get(PART_CODVAL).not_empty(); }
|
bool in_valuta() const { return get(PART_CODVAL).not_empty(); }
|
||||||
|
|
||||||
|
bool update(const TRectype& vec, const TRectype& nuo, const char* field);
|
||||||
|
bool update(const TImporto& vec, const TImporto& nuo, const char* sez, const char* val);
|
||||||
|
|
||||||
TPartita& partita() const { CHECK(_partita, "Partita nulla"); return *_partita; }
|
TPartita& partita() const { CHECK(_partita, "Partita nulla"); return *_partita; }
|
||||||
|
|
||||||
TRiga_partite(TPartita* game);
|
TRiga_partite(TPartita* game);
|
||||||
@ -122,8 +122,6 @@ public:
|
|||||||
|
|
||||||
class TPartita : public TObject
|
class TPartita : public TObject
|
||||||
{
|
{
|
||||||
enum { UNASSIGNED = 9999 };
|
|
||||||
|
|
||||||
TRecord_array _part;
|
TRecord_array _part;
|
||||||
TRecord_array _unassigned;
|
TRecord_array _unassigned;
|
||||||
|
|
||||||
@ -131,10 +129,15 @@ public: // TObject
|
|||||||
virtual bool ok() const { return _part.rows() > 0; }
|
virtual bool ok() const { return _part.rows() > 0; }
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
enum { UNASSIGNED = 9999 };
|
||||||
|
|
||||||
TRiga_partite& riga(int r) const { return (TRiga_partite&)_part.row(r); }
|
TRiga_partite& riga(int r) const { return (TRiga_partite&)_part.row(r); }
|
||||||
TRiga_partite& nuova_riga();
|
TRiga_partite& nuova_riga();
|
||||||
void rimuovi_riga(int r) { _part.destroy_row(r); }
|
void rimuovi_riga(int r) { _part.destroy_row(r); }
|
||||||
TRiga_scadenze& rata(int nriga, int nrata) const;
|
TRiga_scadenze& rata(int nriga, int nrata) const;
|
||||||
|
TRectype& pagamento(int nriga, int nrata, int nrigp);
|
||||||
|
int rata_pagata(int nriga, int nrata) const;
|
||||||
|
bool esiste(int nriga, int nrata = 0, int nrigp = 0) const;
|
||||||
|
|
||||||
int succ(int r) const { return _part.succ_row(r); }
|
int succ(int r) const { return _part.succ_row(r); }
|
||||||
int pred(int r) const { return _part.pred_row(r); }
|
int pred(int r) const { return _part.pred_row(r); }
|
||||||
@ -143,8 +146,8 @@ public:
|
|||||||
|
|
||||||
bool reread();
|
bool reread();
|
||||||
bool read(const TBill& clifo, int anno, const char* num);
|
bool read(const TBill& clifo, int anno, const char* num);
|
||||||
bool write(bool re = FALSE);
|
bool write(bool re = FALSE) const;
|
||||||
bool rewrite() { return write(TRUE); }
|
bool rewrite() const { return write(TRUE); }
|
||||||
bool remove();
|
bool remove();
|
||||||
|
|
||||||
int mov2rig(long nreg, int rmov) const;
|
int mov2rig(long nreg, int rmov) const;
|
||||||
@ -153,7 +156,7 @@ public:
|
|||||||
int primo_pagamento(long nreg = -1l) const;
|
int primo_pagamento(long nreg = -1l) const;
|
||||||
|
|
||||||
bool utilizzata(int r) const; // Controlla se esistono pagamenti sommati alla riga r
|
bool utilizzata(int r) const; // Controlla se esistono pagamenti sommati alla riga r
|
||||||
bool remove_unassigned(long nreg);
|
TRecord_array& unassigned() { return _unassigned; }
|
||||||
|
|
||||||
bool chiusa(bool update = FALSE);
|
bool chiusa(bool update = FALSE);
|
||||||
|
|
||||||
@ -199,6 +202,8 @@ public:
|
|||||||
TPartita* exist(const TRectype& part) const
|
TPartita* exist(const TRectype& part) const
|
||||||
{ return ((TPartite_array*)this)->find(part, FALSE); }
|
{ return ((TPartite_array*)this)->find(part, FALSE); }
|
||||||
|
|
||||||
|
bool destroy(const TBill& clifo, int anno, const char* num);
|
||||||
|
|
||||||
bool write(bool re = FALSE);
|
bool write(bool re = FALSE);
|
||||||
bool rewrite() { return write(TRUE); }
|
bool rewrite() { return write(TRUE); }
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user