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) void TPrimanota_application::renumber_partita(TMask& m, const char* oldp, const char* newp)
{ {
bool movep = FALSE;
const TRectype& testa = _rel->lfile().curr(); const TRectype& testa = _rel->lfile().curr();
const long nreg = testa.get_long("NUMREG"); const long nreg = testa.get_long("NUMREG");
const TString16 ndoc(testa.get("NUMDOC")); 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; const int numrig = 1;
TBill clifo(gruppo, conto, sottoconto, tipocf); TBill clifo(gruppo, conto, sottoconto, tipocf);
TPartita part(clifo, anno, numpart); TPartita oldpart(clifo, anno, oldp);
TPartita newpart(clifo, anno, newp);
if (part.primo_pagamento() != -1)
movep = yesno_box("Si desidera spostare i pagamenti sulla nuova partita?"); int npart = oldpart.prima_fattura(nreg);
// TBI if (oldpart.primo_pagamento() != -1)
warning_box("Funzione non implementata"); {
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); 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 TDate scad = scadenza.get(SCAD_DATASCAD);
const int tipop = scadenza.get_int(SCAD_TIPOPAG); const int tipop = scadenza.get_int(SCAD_TIPOPAG);
const bool paid = scadenza.get_bool(SCAD_PAGATA); 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) const TDate& date, int type,const char* ulc, bool pagato)
{ {
// calcola percentuali e scadenze a partire dagli importi // calcola percentuali e scadenze a partire dagli importi
TToken_string* tt = (TToken_string*)_rate.objptr(index); TToken_string* tt = (TToken_string*)_rate.objptr(index);
int first = _tpr < 4 ? 0 : 1;
const bool nwr = (tt == NULL); // nuova rata 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; TDate oldd = index > 0 ? data_rata(index -1) : _inizio;
int day = date - oldd; 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; real perc = (_tpr > 3 && index == 0) ? ZERO : howmuch/toshare;
if (index == first && _tpr > 0 && _tpr < 4)
howmuch += _secndr;
perc *= real(100.0); perc *= real(100.0);
perc.round(2); perc.round(2);

View File

@ -122,7 +122,7 @@ public:
const char* ulc = NULL, const char* imp = NULL, const char* ulc = NULL, const char* imp = NULL,
const char* data = NULL); const char* data = NULL);
// questa calcola percentuali e scadenze a partire dagli importi // 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); const char* ulc, bool pagato);
// settano tipo rata e ult. class default per le rate; se bool = TRUE // 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; 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 // TPartite_array
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////

View File

@ -187,7 +187,12 @@ public:
TRectype& pagamento(int nriga, int nrata, int nrigp); TRectype& pagamento(int nriga, int nrata, int nrigp);
bool rata_chiusa(int nriga, int nrata) const; bool rata_chiusa(int nriga, int nrata) const;
bool esiste(int nriga, int nrata = 0, int nrigp = 0) 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 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); }
int first() const { return _part.first_row(); } int first() const { return _part.first_row(); }

View File

@ -1,6 +1,7 @@
#define PAGSCA_NRIGA "NRIGA" #define PAGSCA_NRIGA "NRIGA"
#define PAGSCA_NRATA "NRATA" #define PAGSCA_NRATA "NRATA"
#define PAGSCA_NRIGP "NRIGP" #define PAGSCA_NRIGP "NRIGP"
#define PAGSCA_NUMPART "NUMPART"
#define PAGSCA_TIPOPAG "TIPOPAG" #define PAGSCA_TIPOPAG "TIPOPAG"
#define PAGSCA_IMPORTO "IMPORTO" #define PAGSCA_IMPORTO "IMPORTO"