e0f1f18c7e
git-svn-id: svn://10.65.10.50/trunk@1776 c028cbd2-c16b-5b4b-a496-9718f37d4682
222 lines
7.2 KiB
C++
Executable File
222 lines
7.2 KiB
C++
Executable File
#ifndef __SALDACON_H
|
|
#define __SALDACON_H
|
|
|
|
#ifndef __ASSOC_H
|
|
#include <assoc.h>
|
|
#endif
|
|
|
|
#ifndef __RELATION_H
|
|
#include <relation.h>
|
|
#endif
|
|
|
|
#ifndef __CONTO_H
|
|
#include "conto.h"
|
|
#endif
|
|
|
|
#ifndef __PARTITE_H
|
|
#include <partite.h>
|
|
#endif
|
|
|
|
class TTree_rectype : public TRectype
|
|
{
|
|
protected:
|
|
TRecord_array _recarr;
|
|
|
|
void copy_key_to_row(TRectype& row) const;
|
|
int fill_array();
|
|
|
|
protected: // TRectype
|
|
virtual TObject* dup() const;
|
|
|
|
virtual int read(TBaseisamfile& f, word op = _isequal);
|
|
virtual int next(TBaseisamfile& f);
|
|
virtual int write(TBaseisamfile& f) const;
|
|
virtual int rewrite(TBaseisamfile& f) const;
|
|
virtual int remove(TBaseisamfile& f);
|
|
|
|
const TRecord_array& rows_array() const { return _recarr; }
|
|
TRecord_array& rows_array() { return _recarr; }
|
|
|
|
public:
|
|
const TRectype& row(int r) const { return _recarr.row(r); }
|
|
TRectype& row(int r) { return _recarr.row(r, 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 last() const { return _recarr.last_row(); }
|
|
int pred(int r) const { return _recarr.pred_row(r); }
|
|
int succ(int r) const { return _recarr.succ_row(r); }
|
|
|
|
TTree_rectype(const TRectype& testata, const TRectype& riga, const char* num);
|
|
TTree_rectype(int testata, int riga, const char* num);
|
|
TTree_rectype(const TTree_rectype& t);
|
|
virtual ~TTree_rectype() {}
|
|
};
|
|
|
|
|
|
class TRiga_scadenze : public TTree_rectype
|
|
{
|
|
friend class TPartita;
|
|
friend class TRiga_partite;
|
|
|
|
TRiga_partite* _riga;
|
|
|
|
protected:
|
|
char calcola_abbuono(TImporto& abbuono, bool val) const;
|
|
TImporto calcola_differenza_cambio(bool update);
|
|
|
|
bool modifica_pagamento(const TRectype& new_pag,
|
|
char& old_ap, TImporto& old_abb, TImporto& old_diffcam,
|
|
char& new_ap, TImporto& new_abb, TImporto& new_diffcam);
|
|
|
|
protected: // TRecord_tree
|
|
virtual TObject* dup() const { return new TRiga_scadenze(*this); }
|
|
|
|
public:
|
|
int pagata() const; // Riga che chiude la rata o 0 se non pagata completamente
|
|
|
|
bool in_valuta() const;
|
|
|
|
TPartita& partita() const;
|
|
TRiga_partite& riga() const { return *_riga; } // Riga partite
|
|
|
|
TImporto importo_pagato(bool val) const;
|
|
TImporto importo_da_pagare(bool val) const;
|
|
real residuo(bool val) const; // Differenza delle due funzioni precedenti
|
|
|
|
TRiga_scadenze(TRiga_partite* riga);
|
|
TRiga_scadenze(const TRiga_scadenze& s);
|
|
virtual ~TRiga_scadenze() {}
|
|
};
|
|
|
|
class TRiga_partite : public TTree_rectype
|
|
{
|
|
friend class TPartita;
|
|
friend class TRiga_scadenze;
|
|
TPartita* _partita;
|
|
|
|
public: // TTree_rectype
|
|
virtual TObject* dup() const { return new TRiga_partite(*this); }
|
|
virtual int read(TBaseisamfile& f, word op);
|
|
|
|
public:
|
|
int rate() const { return _recarr.rows(); }
|
|
TRiga_scadenze& rata(int r) const { return (TRiga_scadenze&)_recarr.row(r); }
|
|
void elimina_rate() { _recarr.destroy_rows(); }
|
|
TRiga_scadenze& new_row(int r = -1);
|
|
|
|
int ultimo_pagamento(int rata) const;
|
|
char sezione() const { return get_char(PART_SEZ); }
|
|
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; }
|
|
|
|
TRiga_partite(TPartita* game);
|
|
TRiga_partite(const TRiga_partite& r);
|
|
virtual ~TRiga_partite() {}
|
|
};
|
|
|
|
class TPartita : public TObject
|
|
{
|
|
TRecord_array _part;
|
|
TRecord_array _unassigned;
|
|
|
|
public: // TObject
|
|
virtual bool ok() const { return _part.rows() > 0; }
|
|
|
|
public:
|
|
enum { UNASSIGNED = 9999 };
|
|
|
|
TRiga_partite& riga(int r) const { return (TRiga_partite&)_part.row(r); }
|
|
TRiga_partite& nuova_riga();
|
|
void rimuovi_riga(int r) { _part.destroy_row(r); }
|
|
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 pred(int r) const { return _part.pred_row(r); }
|
|
int first() const { return _part.first_row(); }
|
|
int last() const { return _part.last_row(); }
|
|
|
|
bool reread();
|
|
bool read(const TBill& clifo, int anno, const char* num);
|
|
bool write(bool re = FALSE) const;
|
|
bool rewrite() const { return write(TRUE); }
|
|
bool remove();
|
|
|
|
int mov2rig(long nreg, int rmov) const;
|
|
int rig2mov(int rmov) const;
|
|
int prima_fattura(long nreg = -1l) const;
|
|
int primo_pagamento(long nreg = -1l) const;
|
|
|
|
bool utilizzata(int r) const; // Controlla se esistono pagamenti sommati alla riga r
|
|
TRecord_array& unassigned() { return _unassigned; }
|
|
|
|
bool chiusa(bool update = FALSE);
|
|
|
|
void conto(TBill& c) const { c.get(_part.key()); }
|
|
int anno() const { return _part.key().get_int(PART_ANNO); }
|
|
const TString& numero() const { return _part.key().get(PART_NUMPART); }
|
|
const TString& descrizione() const { return _part.key().get(PART_DESCR); }
|
|
|
|
TImporto importo_speso(long numreg, int numrig, bool extra) const;
|
|
void update_reg(long nreg, const TRectype& mov);
|
|
void calcola_saldo(TImporto& saldo, TImporto& doc, TImporto& pag, TImporto& imp) const;
|
|
|
|
bool modifica_pagamento(const TRectype& new_pag,
|
|
char& old_ap, TImporto& old_abb, TImporto& old_diffcam,
|
|
char& new_ap, TImporto& new_abb, TImporto& new_diffcam);
|
|
bool modifica_pagamento(const TRectype& new_pag);
|
|
|
|
TPartita(const TBill& clifo, int anno, const char* num);
|
|
TPartita();
|
|
};
|
|
|
|
|
|
class TPartite_array : private TAssoc_array
|
|
{
|
|
TString80 _key; // Work string
|
|
long _numreg; // Last registration loaded
|
|
|
|
protected:
|
|
const TString& key(const TBill& clifo, int anno, const char* num); // Build key for TAssoc_array
|
|
TPartita* find(const TBill& clifo, int anno, const char* numero, bool create);
|
|
TPartita* find(const TRectype& part, bool create);
|
|
|
|
public: // TAssoc_array
|
|
virtual void destroy();
|
|
|
|
public:
|
|
TPartita& partita(const TBill& clifo, int anno, const char* numero);
|
|
TPartita& partita(const TRectype& r);
|
|
|
|
TPartita* exist(const TBill& clifo, int anno, const char* numero) const
|
|
{ return ((TPartite_array*)this)->find(clifo, anno, numero, FALSE); }
|
|
|
|
TPartita* exist(const TRectype& part) const
|
|
{ return ((TPartite_array*)this)->find(part, FALSE); }
|
|
|
|
bool destroy(const TBill& clifo, int anno, const char* num);
|
|
|
|
bool write(bool re = FALSE);
|
|
bool rewrite() { return write(TRUE); }
|
|
|
|
int add_numreg(long numreg); // Carica tutte le partite relative alla registrazione numreg
|
|
TImporto importo_speso(long numreg, int numrig, bool extra);
|
|
void update_reg(const TRectype& mov, long old_reg = 0);
|
|
|
|
TPartita* first() { restart(); return next(); }
|
|
TPartita* next() { return (TPartita*)get(); }
|
|
|
|
TPartite_array() : _numreg(0) {}
|
|
virtual ~TPartite_array() {}
|
|
};
|
|
|
|
#endif
|