Gestione saldaconto
git-svn-id: svn://10.65.10.50/trunk@1820 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
e8c89b8688
commit
e44826200b
@ -281,8 +281,6 @@ void TPrimanota_application::reset_pagamento()
|
||||
|
||||
void TPrimanota_application::renumber_partita(TMask& m, const char* oldp, const char* newp)
|
||||
{
|
||||
bool movep = FALSE;
|
||||
|
||||
const TRectype& testa = _rel->lfile().curr();
|
||||
const long nreg = testa.get_long("NUMREG");
|
||||
const TString16 ndoc(testa.get("NUMDOC"));
|
||||
@ -308,13 +306,20 @@ void TPrimanota_application::renumber_partita(TMask& m, const char* oldp, const
|
||||
const int numrig = 1;
|
||||
|
||||
TBill clifo(gruppo, conto, sottoconto, tipocf);
|
||||
TPartita part(clifo, anno, numpart);
|
||||
|
||||
if (part.primo_pagamento() != -1)
|
||||
movep = yesno_box("Si desidera spostare i pagamenti sulla nuova partita?");
|
||||
|
||||
// TBI
|
||||
warning_box("Funzione non implementata");
|
||||
TPartita oldpart(clifo, anno, oldp);
|
||||
TPartita newpart(clifo, anno, newp);
|
||||
|
||||
int npart = oldpart.prima_fattura(nreg);
|
||||
|
||||
if (oldpart.primo_pagamento() != -1)
|
||||
{
|
||||
if (!yesno_box("Si desidera spostare i pagamenti sulla nuova partita?"))
|
||||
oldpart.scollega_pagamenti(npart);
|
||||
}
|
||||
oldpart.riassegna_riga(npart, newpart, TRUE);
|
||||
|
||||
oldpart.rewrite();
|
||||
newpart.rewrite();
|
||||
}
|
||||
|
||||
|
||||
@ -447,7 +452,7 @@ bool TPrimanota_application::read_scadenze(TMask& m)
|
||||
{
|
||||
TRiga_scadenze& scadenza = partita.rata(i);
|
||||
|
||||
const real importo = scadenza.get(SCAD_IMPORTO);
|
||||
real importo = scadenza.get(SCAD_IMPORTO);
|
||||
const TDate scad = scadenza.get(SCAD_DATASCAD);
|
||||
const int tipop = scadenza.get_int(SCAD_TIPOPAG);
|
||||
const bool paid = scadenza.get_bool(SCAD_PAGATA);
|
||||
|
@ -392,11 +392,12 @@ void TPagamento::set_percrata(int i, real r)
|
||||
}
|
||||
|
||||
|
||||
TToken_string& TPagamento::set_rata(int index, const real& howmuch,
|
||||
TToken_string& TPagamento::set_rata(int index, real& howmuch,
|
||||
const TDate& date, int type,const char* ulc, bool pagato)
|
||||
{
|
||||
// calcola percentuali e scadenze a partire dagli importi
|
||||
TToken_string* tt = (TToken_string*)_rate.objptr(index);
|
||||
int first = _tpr < 4 ? 0 : 1;
|
||||
|
||||
const bool nwr = (tt == NULL); // nuova rata
|
||||
|
||||
@ -404,8 +405,16 @@ TToken_string& TPagamento::set_rata(int index, const real& howmuch,
|
||||
|
||||
TDate oldd = index > 0 ? data_rata(index -1) : _inizio;
|
||||
int day = date - oldd;
|
||||
real toshare(_tpr < 4 ? _firstr : _secndr);
|
||||
real toshare(_tpr < 4 ? _firstr : _secndr);
|
||||
|
||||
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;
|
||||
|
||||
perc *= real(100.0);
|
||||
perc.round(2);
|
||||
|
||||
|
@ -122,7 +122,7 @@ public:
|
||||
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, const real& howmuch, const TDate& date, int type,
|
||||
TToken_string& set_rata (int index, real& howmuch, const TDate& date, int type,
|
||||
const char* ulc, bool pagato);
|
||||
|
||||
// settano tipo rata e ult. class default per le rate; se bool = TRUE
|
||||
|
@ -869,6 +869,82 @@ bool TPartita::chiusa(bool update)
|
||||
return chiusa;
|
||||
}
|
||||
|
||||
void TPartita::riassegna_riga(int r, TPartita& part, bool remove)
|
||||
{
|
||||
TRiga_partite& row = riga(r);
|
||||
TRiga_partite& nrw = part.nuova_riga();
|
||||
|
||||
TToken_string knames(256);
|
||||
// copy all non-key fields
|
||||
knames.add(PART_ANNO);
|
||||
knames.add(PART_NUMPART);
|
||||
knames.add(PART_NRIGA);
|
||||
|
||||
for (int f = 0; f < row.items(); f++)
|
||||
{
|
||||
const char* fnam = row.fieldname(f);
|
||||
if (knames.get_pos(fnam) == -1)
|
||||
nrw.put(fnam, row.get(fnam));
|
||||
}
|
||||
|
||||
for (int i = 1; i <= row.rate(); i++)
|
||||
{
|
||||
TRiga_scadenze& scd = row.rata(i);
|
||||
TRiga_scadenze& nsc = nrw.new_row();
|
||||
|
||||
// copy all non-key fields
|
||||
knames = "";
|
||||
knames.add(SCAD_ANNO);
|
||||
knames.add(SCAD_NUMPART);
|
||||
knames.add(SCAD_NRIGA);
|
||||
knames.add(SCAD_NRATA);
|
||||
for (int f = 0; f < scd.items(); f++)
|
||||
{
|
||||
const char* fnam = scd.fieldname(f);
|
||||
if (knames.get_pos(fnam) == -1)
|
||||
nsc.put(fnam, scd.get(fnam));
|
||||
}
|
||||
|
||||
for (int j = scd.last(); j > 0; j = scd.pred(j))
|
||||
{
|
||||
TRectype& pag = scd.row(j);
|
||||
TRectype& npg = nsc.new_row();
|
||||
knames = "";
|
||||
knames.add(PAGSCA_NUMPART);
|
||||
knames.add(PAGSCA_NRIGA);
|
||||
knames.add(PAGSCA_NRATA);
|
||||
knames.add(PAGSCA_NRIGP);
|
||||
for (int f = 0; f < pag.items(); f++)
|
||||
{
|
||||
const char* fnam = pag.fieldname(f);
|
||||
if (knames.get_pos(fnam) == -1)
|
||||
npg.put(fnam, pag.get(fnam));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (remove) rimuovi_riga(r);
|
||||
}
|
||||
|
||||
void TPartita::scollega_pagamenti(int r)
|
||||
{
|
||||
TRiga_partite& row = riga(r);
|
||||
|
||||
for (int i = 0; i < row.rate(); i++)
|
||||
{
|
||||
TRiga_scadenze& sc = row.rata(i+1);
|
||||
for (int j = sc.last(); j > 0; j = sc.pred(j))
|
||||
{
|
||||
TRectype& pag = sc.row(j);
|
||||
pag.put(PAGSCA_NRIGA, (int)TPartita::UNASSIGNED);
|
||||
pag.put(PAGSCA_NRATA, (int)TPartita::UNASSIGNED);
|
||||
_unassigned.add_row(pag);
|
||||
sc.rows_array().destroy_row(j);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TPartite_array
|
||||
///////////////////////////////////////////////////////////
|
||||
|
@ -187,7 +187,12 @@ public:
|
||||
TRectype& pagamento(int nriga, int nrata, int nrigp);
|
||||
bool rata_chiusa(int nriga, int nrata) const;
|
||||
bool esiste(int nriga, int nrata = 0, int nrigp = 0) const;
|
||||
|
||||
|
||||
// assegna riga e figli a altra partita, distruggendola se remove e' TRUE
|
||||
void riassegna_riga(int r, TPartita& part, bool remove = TRUE);
|
||||
// de-assegna tutti i pagamenti di una riga e li distrugge
|
||||
void scollega_pagamenti(int r);
|
||||
|
||||
int succ(int r) const { return _part.succ_row(r); }
|
||||
int pred(int r) const { return _part.pred_row(r); }
|
||||
int first() const { return _part.first_row(); }
|
||||
|
@ -1,6 +1,7 @@
|
||||
#define PAGSCA_NRIGA "NRIGA"
|
||||
#define PAGSCA_NRATA "NRATA"
|
||||
#define PAGSCA_NRIGP "NRIGP"
|
||||
#define PAGSCA_NUMPART "NUMPART"
|
||||
|
||||
#define PAGSCA_TIPOPAG "TIPOPAG"
|
||||
#define PAGSCA_IMPORTO "IMPORTO"
|
||||
|
Loading…
x
Reference in New Issue
Block a user