// Dichiarazione della classe generale. #ifndef _TELABORAZIONI_DECL #define _TELABORAZIONI_DECL #include #include #include #include #include "ve6retv.h" #include "ve6gen.h" #define _TDD_IN_FILTER #define STATO_PPT '*' #define SET_PROCESSED TRUE #define DONT_SET_PROCESSED FALSE class TElaborazioni : public TApplication { protected: // i data members sono protected in modo che gli oggetti generatori // possano accedervi senza la necessità di funzioni specifiche TString16 _codnum; // (stringa di 4) TString16 _anno; // int _anno; TString16 _provv; // char _provv; TString16 _ndoc; // int _ndoc; bool _crea_doc; // deve creare il documento di destinazione ? int _ordinamento; // indica il tipo di ordinamento bool _raggruppa; // indica se si deve raggruppare o no bool _per_articolo; // indica se raggruppare le righe per codice articolo o no int _chiave; // chiave di doc usata per selezionare i doc. originali TBit_array _processed; // array in cui è indicato se un documento di _chiavi è stato processato o no TString _tipo_doc_org; // tipo documento originale TString _tipo_doc_des; // tipo documento finale TString80 _stati_validi_doc_i;// lista stati documenti originali prima dell'elaborazione TString _stato_f_doc_i; // dopo l'elaborazione TString _stato_f_doc_f; // stato documento finale al termine dell'operazione // TString _codnum; // codice per la numerazione del documento di destinazione bool _sosp_imposta; // T/F sospensione imposta bool _cod_sconto; // T/F codice sconto bool _stesso_anno; // T/F STESSOANNOFISCALE in [RAGGR.] del .ini del doc pilota TDate _datadoc; // data dei documenti che si vanno a creare bool errore_fatale(int); // ritorna true se l'errore passato come argomento è nella lista degli errori fatali public: TElaborazioni() : _provv(1) { _chiave = 2; } ~TElaborazioni () {} }; // TCursor_sheet con la on_key() customizzata per l'inserimento del campo QTAEVASA nelle righe class TInterattivo_sheet : public TCursor_sheet { protected: virtual bool on_key(KEY); // modificata per fare apparire anche le qta' da evadere virtual void get_row(long n, TToken_string& l); public: TInterattivo_sheet(TCursor* cursor, const char* fields, const char* title, const char* head, byte buttons = 0) : TCursor_sheet(cursor, fields, title, head, buttons) { } virtual ~TInterattivo_sheet() { } }; class TBatch_crea_doc : public TElaborazioni { protected: bool _interattivo; // TRUE se e' stata attivata l'elaborazione interattiva; // bool _stesso_anno_fiscale; // TRUE se i documenti originali debbono avere lo stesso anno fiscale del documento da creare TString _descr_tipodocorg; // descrizione del tipo documento originale (solo come titolo del TSheet_array) virtual bool menu (MENU_TAG); virtual bool create (); virtual bool destroy(); int run_mask (TRectype&, TRectype&); // lancia la maschera e scandisce i records int per_cliente(TRectype&, TRectype&, const char*); // crea fatture ordinate tramite la elab_princ int elab_princ(TSorted_cursor&); // elabora tutti i documenti del cursore che hanno un record ELD bool search (TRectype&, TRectype&, TSorted_cursor&); // cerca il prossimo record da includere nel doc. destinazione bool getflag (TRectype&, int); // ritorna i valori di due flag static bool filterfunct(const TRelation*); // funzione di filtro per i campi non alfanumerici void raggruppa_righe (TRecord_array&); // raggruppa le righe per codice articolo bool prox_riga (int&, TRecord_array&, TBit_array&, TRectype&); // cerca la prossima riga da raggruppare long _first_codcf, _last_codcf; // valori del campo CODCF dei records first e last, per potervi accedere dalla filterfunct() bool elab_righe(TString metodo,bool raggr_parz,TRectype &tempr,TRecord_array &doc_destinazione,TRectype &temprdoc); // elabora le righe (di doc_originale), mettendole in doc_destinazione // usando il metodo metodo, tramite il record temprdoc gia' inizializzato bool next_pilota(TSorted_cursor &curs,TRectype &pilota); // cerca il prossimo documeto pilota in cursor tenendo conto di processed int esiste_ELD(TSorted_cursor &curs,int i,bool set_proc = DONT_SET_PROCESSED); // ritorna ELAB_FOUND se esiste una ELD che passa dal tipo documento di pilota a _tipo_dest // (o _tipo_doc_dest, se _tipo_dest non viene specificato) e riempie eventualmente dest con la prima ELD int leggi_da_ELD(TRectype &dest,TString _tipo_pilota,TString _tipo_dest = ""); // legge dalla tabella ELD il record _tipo_pilota->_tipo_destinazione, lo mette in dest e ritorna l'errore TString metodo(TRectype &rec); // restituisce la stringa metodo di trasf. dal record ELD per rec->_tipo_destinazione int statovalido(TRectype& rec); // controlla che il documento rec sia in uno degli stati validi indicati nella sezione [RAGGRUPPA] del suo .ini const char *td_ELD_to_filter(TString &_tipo_doc_des); // trova il .ini di rec e lo restituisce TString getini(TRectype& rec, int &err); // prende RAGGRPARZ della sezione [RAGGRUPPA] bool get_raggr_parz(TRectype& rec, int& err); // ritorna TRUE se _stesso_anno_fiscale o STESSOANNOFISCALE del .ini di rec bool stesso_anno_fiscale(TRectype& rec); // setta le informazioni sugli stati del doc e le mette nelle relative variabili globali int get_info(TRectype &doc); // guarda se i documenti pil e pil2 sono compatibili per essere uniti nello stesso documento finale bool doc_i_compatibili(TRectype &pil,TRectype &pil2); public: TBatch_crea_doc () {} // costruttore ~TBatch_crea_doc () {} }; #endif // _TELABORAZIONI_DECL //