#ifndef __VELIB01_H #define __VELIB01_H #ifndef __RELATION_H #include #endif real lordo2netto(real& lordo, const TString& codiva, bool is_valuta = FALSE); real netto2lordo(const real& netto, const TString& codiva, bool is_valuta = FALSE); real lordo2netto(real& lordo, const real& iva, bool is_valuta = FALSE); real netto2lordo(const real& netto, const real& iva, bool is_valuta = FALSE); class TMask; class TTipo_documento : public TObject { TRectype _rec; TMask* _mask; protected: int read(const char* tipodoc); public: TObject* dup() const { return new TTipo_documento(tipodoc()); } public: enum TCondizione_uguaglianza { cambio, sconto, tipo_documento, numerazione, pagamento, banca_appoggio, listino, agente, spedizione, porto, causale_trasporto, vettori }; const TString & tipodoc() const { return _rec.get("CODTAB");} const TString & profile_name() const { return _rec.get("S4");} const TString & mask_name() const { return _rec.get("S4");} bool uguale(TCondizione_uguaglianza u) const { return _rec.get("S2")[(int)u]; } TTipo_documento(const char* tipodoc = NULL); TTipo_documento(const TRectype& rec); virtual ~TTipo_documento(); }; class TDocumento : public TObject { static TAssoc_array _tipi; TRectype _head; // Record di testata TRecord_array _rows; // Array di TRectype per le righe documenti di vendita. public: int rows() const { return _rows.rows(); } const TRectype & head() const { return _head; } // Ritorna la testata del documento TRectype & head() { return _head; } // Ritorna la testata del documento const TRectype & operator[](int index) const { return _rows.row(index); } // Ritorna la riga n-esima del documento TRectype & operator[](int index) { return _rows.row(index, FALSE); } TRectype& add_row() { return _rows.row(-1, TRUE); } bool destroy_row(int n) { return _rows.destroy_row(n); } void destroy_rows() { _rows.destroy_rows(); } int read(const char * codnum, int anno, char provv, long numdoc); int read(const TRectype & rec); int write(bool re = FALSE) const; int rewrite() const { return write(TRUE); } int remove() const; const TTipo_documento & tipo() const; const TString & tipodoc() { return _head.get("TIPODOC"); } const TDate & data() const { return _head.get_date("DATADOC"); } const TString & numerazione() { return _head.get("CODNUM"); } int anno() const { return _head.get_int("ANNO"); } char tipo_numerazione() { return _head.get_int("PROVV"); } long numero() const { return _head.get_long("NDOC"); } TDocumento (); TDocumento(const char * codnum, int anno, char provv, long numdoc); virtual ~TDocumento() { } }; class TLista_clifo : public TObject { class TClifo : public TObject { long _codice; long _agente; long _zona; protected: void zero() { _codice = _agente = _zona = 0L; } void init(const TRectype& rec); bool read(char tipo, long cod); public: // TObject virtual bool ok() const { return _codice > 0; } public: long codice() const { return _codice; } long agente() const { return _agente; } long zona() const { return _zona; } TClifo() { zero(); } TClifo(char tipo, long cod) { read(tipo, cod); } TClifo(const TRectype& rec); virtual ~TClifo() { } }; TArray _clifo; protected: virtual char tipo() const pure; const TClifo& clifo(int n) const { return (TClifo&)_clifo[n]; } static int sort_by_code(const TObject** o1, const TObject** o2); static int sort_by_agent(const TObject** o1, const TObject** o2); static int sort_by_zone(const TObject** o1, const TObject** o2); public: int ordina_per_codice(); int ordina_per_agente(); int ordina_per_zona(); int leggi(long dc, long ac, long da = 0, long aa = 0, long dz = 0, long az = 0); long operator[] (int n) const { return clifo(n).codice(); } int items() const { return _clifo.items(); } int find(long cod) const; int add(long cod); TLista_clifo() { } virtual ~TLista_clifo() { } }; class TLista_clienti : public TLista_clifo { protected: virtual char tipo() const { return 'C'; } }; class TLista_fornitori : public TLista_clifo { protected: virtual char tipo() const { return 'F'; } }; #endif