#ifndef __CGLIB01_H #define __CGLIB01_H #ifndef __ASSOC_H #include #endif #ifndef __ISAM_H #include #endif // Gestione esercizi contabili, registri e libro giornale class TEsercizio : public TSortable { int _codice; TDate _inizio, _fine, _scarico, _chiusura, _chiusura_mag; protected: // TSortable int compare(const TSortable& s) const; public: int codice() const { return _codice; } const TDate& inizio() const { return _inizio; } const TDate& fine() const { return _fine; } const TDate& scarico() const { return _scarico; } const TDate& chiusura() const { return _chiusura; } const TDate& chiusura_mag() const { return _chiusura_mag; } TEsercizio(const TRectype& rec); virtual ~TEsercizio() {} }; class TEsercizi_contabili : public TObject { static TArray _esercizi; static long _firm; protected: static void check(); const TEsercizio& esc(int i) const { return (const TEsercizio&)_esercizi[i]; } int date2index(const TDate& d) const; int esc2index(int codice) const; int items() const { return _esercizi.items(); } public: static void update(); const TEsercizio& esercizio(int codice) const; const TEsercizio& operator [](int codice) const { return esercizio(codice); } int date2esc(const TDate& date) const; int pred(int codice) const; int next(int codice) const; int first() const; int last() const; bool exist(int codice) const; TEsercizi_contabili(); virtual ~TEsercizi_contabili() {} }; enum TipoIVA { iva_errata = -1, nessuna_iva = 0, iva_vendite = 1, iva_acquisti = 2, libro_giornale = 5, iva_generica = 9 }; const char* iva2name(TipoIVA i); class TRegistro : public TObject { bool read_att(); protected: TRectype _rec, _att; TAssoc_array _prorata; real* read_prorata(int anno) const; public: bool read(const char* code, int year); bool reread(); TRegistro& operator =(const TRegistro& r); virtual bool ok() const { return !_rec.empty(); } int tipo() const; TipoIVA iva() const; bool corrispettivi() const; bool sospeso() const { return _rec.get_bool("B1");} const TString& name() const; int year() const; TDate last_reg() const { return _rec.get_date("D2"); } TDate last_print() const { return _rec.get_date("D3"); } long mese_stampa_ultima_liq() const { return _rec.get_long("I4"); } long protocol() const { return _rec.get_long("I5"); } const TString& attivita() const { return _rec.get("S8"); } bool agenzia_viaggi(); const TString& tipo_attivita(); bool attivita_mista() { const char a = tipo_attivita()[0]; return a == 'E'; } void set_prorata(int annodoc, const real& pro); real prorata(int annodoc); bool prorata100(int annodoc) { return prorata(annodoc) >= 100.0; } bool update(long uprotiva, const TDate& lastreg); TRegistro(const char* code = "", int year = 0); virtual ~TRegistro() {} }; class TLibro_giornale : public TRegistro { public: bool read(int year); TDate global_last_print() const; TLibro_giornale(int year = 0); virtual ~TLibro_giornale() {} }; class TCodiceIVA : private TRectype { public: // TObject virtual bool ok() const { return !empty(); } public: bool read(const char* codice); const TString& codice() const { return get("CODTAB"); } real percentuale() const { return get_real("R0"); } const TString& tipo() const { return get("S1"); } real scorpora(real& imponibile) const; // Scorpora dall'imponibile l'imposta e la ritorna TCodiceIVA(const char* codice = NULL); virtual ~TCodiceIVA() {} }; #ifndef __MASK_H class TMask; #endif class TBill : public TSortable { char _tipo; // ' ' = Conto, 'C' = Cliente, 'F' = 'Fornitore' int _gruppo, _conto; long _sottoconto; // Sottoconto, codice cliente o fornitore TString* _descrizione; // Vuota fino alla chiamata di describe int _tipo_cr; // Tipo costo/ricavo bool _sospeso; char _sezione; protected: virtual int compare(const TSortable& s) const; virtual const char* class_name() const { return "Conto"; } void set_description(const char* d); const TBill& copy(const TBill& b); const char* field_name(int n, bool contro) const; public: // TObject virtual bool ok() const; // Gruppo, Conto e Sottoconto non nulli public: TBill(int g = 0, int c = 0, long s = 0L, char t = ' ', const char* d = NULL, int r = -1) : _tipo(t), _gruppo(g), _conto(c), _sottoconto(s), _descrizione(NULL), _sezione(' '), _sospeso(FALSE) { set(g,c,s,t,d,r);} TBill(TToken_string& tgcsd, int from, int mode = 0) : _descrizione(NULL) { get(tgcsd, from, mode); } TBill(const TRectype& rec, bool contro = FALSE) : _descrizione(NULL) { get(rec, contro); } TBill(const TBill& b) : _descrizione(NULL) { copy(b); } virtual ~TBill(); const TBill& set(int g = 0, int c = 0, long s = 0L, char t = ' ', const char* d = NULL, int r = -1); const TBill& get(TToken_string& ts, int from, int mode = 0); const TBill& add_to(TToken_string& ts, int from, int mode = 0); const TBill& operator=(const TBill& b) { return copy(b); } bool empty() const { return _gruppo==0 && _conto==0 && _sottoconto == 0; } char tipo() const { return _tipo; } int gruppo() const { return _gruppo; } int conto() const { return _conto; } long sottoconto() const { return _sottoconto; } long codclifo() const { return _sottoconto; } long& codclifo() { return _sottoconto; } bool find(); const TString& descrizione() const; int tipo_cr() const; void tipo_cr(int tcr) { _tipo_cr = tcr; } int tipo_att(); bool read(TRectype& r); bool sospeso() const { return _sospeso; } // _sospeso e' letto nella read() char sezione() const { return _sezione; } void put(TRectype& r, bool contro = FALSE) const; bool get(const TRectype& r, bool contro = FALSE); void set(TMask& m, short g, short c, short s, short t = 0, short d = 0) const; void get(const TMask& m, short g, short c, short s, short t = 0, short d = 0); const char* string(int mode = 0) const; }; enum TIndbil { ib_null, ib_attivita, ib_passivita, ib_costi, ib_ricavi, ib_conti_ordine }; #endif