Gestione saldaconto

git-svn-id: svn://10.65.10.50/trunk@1820 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
villa 1995-09-14 07:29:24 +00:00
parent e8c89b8688
commit e44826200b
6 changed files with 110 additions and 14 deletions

View File

@ -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);

View File

@ -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);

View File

@ -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

View File

@ -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
///////////////////////////////////////////////////////////

View File

@ -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(); }

View File

@ -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"