#ifndef __SC2401_H #define __SC2401_H #include #include #include "../cg/saldacon.h" #include "sc2102.h" #include "sc2400a.h" #include "sc21pec.h" #include #include #include #include #ifndef __SCSELECT_H #include "scselect.h" #endif class TESSL_mask: public TSelection_mask { TRelation _ditta; TString _tmp; protected: virtual void on_firm_change(); virtual void start_run(); static bool lingua_handler(TMask_field& f, KEY k); static bool codprof_handler(TMask_field& f, KEY k); public: const char *get_prof_base() const; const TString &get_prof_code() const; const char *get_prof_name() const; const TString &get_prof_lang() const; TESSL_mask(const char *name); virtual ~TESSL_mask(); }; class TESSL_form; /////////////////////////////////////////////////////////// // TESSL_row /////////////////////////////////////////////////////////// class TESSL_row : public TSortable { TDate _data; // Data scadenza o pagamento int _riga; // Riga della fattura int _rata; // Numero rata o progrssivo TString _causale; // Codice causale TString _descrizione; // Sua descrizione TDate _data_doc; // Data del documento TString _num_doc; // Numero documento long _num_prot; // Protocollo IVA long _num_reg; // Numero registrazione TImporto _importo; // Importo in valuta real _importo_lire; // Importo in lire real _scaduto; // Importo scaduto real _esposto; // Importo esposto bool _salvo_buon_fine; // Importo esposto salvo buon fine real _totale; // Totale documento TValuta _valuta; // Codice valuta, data cambio e cambio protected: // TSortable virtual int compare(const TSortable& s) const; void set_imp(TForm_item& fi, const real& imp, bool valuta) const; TESSL_form& form() const; public: int riga() const { return _riga; } int rata() const { return _rata; } void reset_uguali(); void descrizione(const char* s) { _descrizione = s; } void importo(const TImporto& i) { _importo = i; } void scaduto(const real& s) { _scaduto = s; } void esposto(const real& e) { _esposto = e; } void importo_in_lire(const real& il) { _importo_lire = il; } void salvo_buon_fine(bool sbf) { _salvo_buon_fine = sbf; } const TString& causale() const { return _causale; } const TString& descrizione() const { return _descrizione; } long num_reg() const { return _num_reg; } const TValuta& valuta() const { return _valuta; } const TImporto& importo() const { return _importo; } real importo_in_lire() const { return _importo_lire; } real scaduto() const { return _scaduto; } real esposto() const { return _esposto; } const TDate& data() const { return _data; } bool in_valuta() const { return _valuta.in_valuta(); } void print_on(TPrint_section& body); TESSL_row(const TRiga_partite& row, const TDate& data, const TImporto& imp, int rata); TESSL_row(const char* desc, const TImporto& imp, const TValuta& val); virtual ~TESSL_row() {} }; /////////////////////////////////////////////////////////// // TESSL_form: form speciale per estratti conto /////////////////////////////////////////////////////////// class TESSL_form : public TForm { friend class TESSL_row; static TESSL_form* _form; enum { MAXTOT = 16 }; TCursor* _cursore; TTotalizer _totali; TDecoder _causali; // Decodificatore dei codici causale TDecoder _valute; // Decodificatore dei codici valuta TDecoder _movimenti; // Decodificatore delle descrizioni dei movimenti TString _lingua; TDate _dlo, _dls, _dir; int _giorni_rischio; bool _in_valuta; bool _stampa_esp; int _fincatura; // 0 = nessuna, 1 = testo, 2 = grafica word _num_rip; // numero di righe usate per i riporti word _total_rows; // numero di righe usate per i totali word _maxtot; // numero massimo di totali char _who; protected: void init_header(const TMask& m); word ordina_totali_per_valuta(THash_object* tot[MAXTOT]); int find_magic(TString& s, TString& magic1, TString& magic2) const; void change_magic_body(const TESSL_row& o, TString& s); void change_magic_footer(const THash_object& o, TString& s); void modify_picture(TForm_item& fi, TString_array& op, const bool in_valuta); void print_total(int riga, const THash_object& o); void stampa_testata(TPrinter& p); void stampa_pedata(TPrinter& p); void stampa_riporti(TPrinter& p); static void header_handler(TPrinter& p); static void footer_handler(TPrinter& p); public: TTotalizer& totali() { return _totali; } TDecoder& causali() { return _causali; } TDecoder& valute() { return _valute; } TDecoder& movimenti() { return _movimenti; } const TDate& data_limite_operazione() const { return _dlo; } const TDate& data_limite_scaduto() const { return _dls; } int giorni_rischio() const { return _giorni_rischio; } const TDate& data_inizio_rischio() const { return _dir; } const TString& lingua() const { return _lingua; } bool in_valuta() const { return _in_valuta; } const TString& describe(short id, char sez = 'H', pagetype pt = last_page) const; const char sezione_normale() const { return _who == 'C' ? 'D' : 'A' ; } void azzera_totali(); void ultima_pagina(); virtual bool print_game(const TPartita& game); TESSL_form(const TESSL_mask& m, bool gesval, short id_datalim = 0 , short id_datascad = 0, short id_giorni_rischio = 0); virtual ~TESSL_form(); }; /////////////////////////////////////////////////////////// // TESSL_array /////////////////////////////////////////////////////////// class TESSL_array : public TArray { TArray _scaduto; // Array di importi scaduti const TESSL_form* _form; protected: TESSL_row& new_row(const TRiga_partite& row, const TDate& data, const TImporto& imp, int rata = 0); void add_row(const TRiga_partite& row); const TESSL_form& form() const { return *_form; } real calcola_scaduto(const TRiga_scadenze& rata, bool valuta); TImporto* importo_riga_scaduto_ptr(int n) const { return (TImporto*)_scaduto.objptr(n); } TImporto& importo_riga_scaduto(int n); TImporto importo(const TPartita& game, const TRectype& pag, bool valuta) const; static TPartita* _sort_game; static int ordina_pag(const void* pag1, const void* pag2); void arrange_scaduto(const TPartita& game); public: TESSL_row& row(int r) const { return (TESSL_row&)operator[](r); } TESSL_array(const TPartita& game, const TESSL_form* f); virtual ~TESSL_array() {} }; #endif // __SC2401_H