#ifndef __CA3883_H #define __CA3883_H #include #include #include "../cg/cglib01.h" #include "ca3883a.h" /////////////////////////////////////////////////////////////// // CACHE INDICATORI BILANCIO /////////////////////////////////////////////////////////////// //simpatica classe utile per smanettare con piani dei conti contabili ed analitici, riclassificazioni,.. //..indicatori di bilancio e roba simile! //ACHTUNG! potrebbe fallire se uno ha conti analitici puri lunghi 12 caratteri e solo numerici class TIndbil_cache : public TCache { bool _usepdcc; TString80 _prefix; protected: virtual TObject* key2obj(const char* key); public: int get_indbil(const TString& conto, TString& conto_anale); void set_prefix(const char* prefix); int get_prefix_length() const { return _prefix.len(); } TIndbil_cache(); }; /////////////////////////////////////////////////////////////// // REPORT A COLONNE VARIABILI /////////////////////////////////////////////////////////////// class TCRPA_report : public TReport { protected: void merge_array(TString_array& c, TString_array& t, TString_array& codici, TString_array& testate) const; void analize_pconana_structure (const TString& prefix, const int depth, TString_array& codici, TString_array& testate) const; bool generate_columns (TString_array& codici, TString_array& testate, const int model_id); void offset_and_fill_columns(TReport_section& rep_sect, const TString_array& str_arr, const int model_id); public: TCRPA_report (const char* rep_name, const TString& prefix, const int depth); }; /////////////////////////////////////////////////////////////// // RECORDSET PER STAMPE DI SALDANA CA3800, CA3900 /////////////////////////////////////////////////////////////// class TPrint_saldana_recordset : public TRecordset { TArray _righe; TRecnotype _curr; TArray _colonne; TIndbil_cache _indicatori; TEsercizi_contabili _esc; int _tipo; int _anno; int _depth; bool _vitaintera, _use_fasi, _fasi_group; char _tipostima; TString16 _fase; protected: virtual int tipo() const { return _tipo; } virtual TRecnotype items() const { return _righe.items(); } virtual bool move_to(TRecnotype pos); virtual TRecnotype current_row() const { return _curr; } virtual void requery(); virtual const TString& query_text() const { return EMPTY_STRING; } virtual unsigned int columns() const { return _colonne.items(); } virtual const TRecordset_column_info& column_info(unsigned int column) const { return (TRecordset_column_info&) _colonne[column]; } virtual const TVariant& get(unsigned int column) const; virtual const TVariant& get(const char* column_name) const; void parse_bill(const TString& bill, TString& conto) const; int estrai_saldi(const TRecordset& saldana, const int indbil, TImporto& saldo, TImporto& saldop) const; //per il solo ca3800 void aggiorna_importo(TAssoc_array& riga_array, const TString& livello, const int indbil, const TRecordset& saldana, const bool inverti = false) const; real calcola_avanzamento_tempo() const; void create_lines_to_print(TString& query); //per il solo ca3900 void aggiorna_importi(TAssoc_array& riga_array, const int indbil, const TRecordset& saldana, const bool inverti = false) const; void incrementa_importo(TAssoc_array& riga_array, const TString& livello, const int indbil, const TImporto& saldo, const bool inverti) const; TAssoc_array& get_row(TAssoc_array& cms, const char* chiave, const int indice, const TString& codcms, const TString& fase, const TString& descrizione); public: virtual void set_filter(const TMask& msk, const TString& curr_fase); TPrint_saldana_recordset(int tipo) : _tipo(tipo) { } }; #endif