campo-sirio/ve/velib04.h

661 lines
28 KiB
C++
Executable File

#ifndef __VELIB04_H
#define __VELIB04_H
#ifndef __VELIB_H
#include "velib.h"
#endif
#ifndef __CALIB01_H
#include "../ca/calib01.h"
#endif
#ifndef __CG2101_H
#include "../cg/cg2101.h"
#endif
class TLista_documenti : public TObject // velib04
{
TArray _documenti;
protected:
const TDocumento& doc(int n) const { return (const TDocumento&)_documenti[n]; }
TDate num2date(char provv, int anno, const char* codnum, long num) const;
public:
bool find(char provv, int anno, const char * codnum, long ndoc) const;
int read(char provv, char tipo, long clifo, int anno,
TToken_string& tipidoc, TToken_string& statidoc,
const TDate& dd, const TDate& ad,
const char* codnum = "", long dn = 0L, long an = 0L);
int write(bool re = false) const;
int rewrite() const { return write(true); }
int add(TDocumento* doc) { return _documenti.add(doc); }
int add(const TDocumento& doc) { return _documenti.add(doc); }
int destroy(int i, bool pack = true) { return _documenti.destroy(i, pack); }
const TDocumento& operator[] (int n) const { return doc(n); }
TDocumento& operator[] (int n) { return (TDocumento&)_documenti[n]; }
int items() const { return _documenti.items(); }
int sort(const char* fields); // token string of field names
TLista_documenti() { }
virtual ~TLista_documenti() {};
};
///////////////////////////////////////////////////////////
// Lista Cliente/Fornitore per vendite
///////////////////////////////////////////////////////////
class TElaborazione;
class TLista_clifo : public TObject // velib04
{
class TClifo : public TObject
{
long _codice;
long _agente;
long _zona;
protected:
void zero() { _codice = _agente = _zona = 0L; }
void init(const TRectype& rec, const TRectype& ven);
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, const TRectype& ven) { init(rec, ven); }
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, const char * dz = "", const char * az = "");
int leggi_doc(const TElaborazione& eld, const TDate& dd, const TDate& ad,
long dc, long ac, long da=0, long aa=0, const char * dz="", const char * az="");
int leggi_ragsoc(const char *dr, const char * ar, long da = 0, long aa = 0, const char * dz = "", const char * az = "");
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'; }
};
class TLista_cf : public TLista_clifo
{
char _tipo;
protected:
virtual char tipo() const { return _tipo; }
public:
TLista_cf(char tipo) : _tipo(tipo) {}
};
enum TTipo_elaborazione { _esterna, _consegna_ordini, _fatturazione_bolle,
_contabilizzazione, _copia_documento,
_generazione_effetti, _consuntivazione_produzione,
_contabilizzazione_analitica };
class TParametri_elaborazione : public TObject // velib04
{
TAssoc_array _par;
public:
void set(const char * name, const char * val);
void set(const char * name, const real & val) { set(name, val.string());}
const TString & get(const char * name) const ;
const real get_real(const char * name) const { return (real) get(name);}
TParametri_elaborazione & copy(const TParametri_elaborazione & p) { _par = p._par; return *this;}
virtual TObject* dup() const { return new TParametri_elaborazione(*this); }
TParametri_elaborazione & operator =(const TParametri_elaborazione & p) {return copy(p);}
TParametri_elaborazione() { }
TParametri_elaborazione(const TParametri_elaborazione & p) {copy(p);}
virtual ~TParametri_elaborazione() { }
};
class TElaborazione : public TRectype // velib04
{
TParametri_elaborazione _parms;
protected:
int read(const char* cod);
virtual void pre_process_input(TLista_documenti& doc_in) {}
virtual void post_process_input(TLista_documenti& doc_in) {}
virtual void post_process(TLista_documenti& doc_out, TLista_documenti& doc_in) {}
public:
enum { _max_tipi_doc_elab = 10 };
const TString& codice() const { return get("CODTAB"); }
const TString& descrizione() const { return get("S0"); }
const TTipo_elaborazione tipo() const { return (TTipo_elaborazione) get_int("I0"); }
virtual void tipi_stati_iniziali(TToken_string& tipi, TToken_string& stati) const;
bool doc_uguale(int u) const { return get("S1").mid(u, 1) == "X"; }
bool riga_uguale(int u) const { return get("S1").mid(40+u, 1) == "X"; }
bool raggruppa_righe() const { return get_bool("B0"); }
virtual bool gestione_riferimenti() const { return get_bool("B1"); }
virtual bool riferimenti_in_testa() const { return get_bool("B2"); }
bool ignora_descrizioni() const { return get_bool("B3"); }
char tipo_numerazione() const { return get_bool("B4") ? 'P' : 'D'; }
bool protocollo_da_registro() const { return get_bool("B4"); }
bool prezzo_da_ordine() const { return get_bool("B5"); }
bool aggiorna_testata_se_vuoto() const { return get_bool("B6"); }
bool ordina_per_codice() const { return get_bool("B7"); }
bool usa_doc_rif() const { return get_bool("B8"); }
bool usa_data_consegna() const { return get_bool("B9"); }
bool kill_descrizione_estesa() const { return get_bool("B10"); }
bool pack_rif() const { return get_bool("B15"); }
bool calcola_scarti() const { return get_bool("B11"); }
bool reload_prices() const { return get_bool("B13"); }
bool reload_descriptions() const { return reload_prices() && get_bool("B14"); }
const TString& num_riferimenti_in() const { return get("S11"); }
int intestazioni_sheet() const { return get_int("I1"); }
const TString& codice_numerazione_iniziale() const { return get("S5"); }
const TString& tipo_iniziale(int i) const;
const char stato_iniziale(int i) const { return i < 5 ? get("S7")[i] : get("S10")[i - 5]; }
const TString& tipo_finale() const { return get("S8"); }
const TString& stato_finale_doc_iniziale() const { return get("S4"); }
const TString& stato_finale() const { return get("S9"); }
const TString& codice_numerazione_finale() const { return get("S6"); }
const TString& applicazione_esterna() const { return get("S3"); }
void set_params(const TParametri_elaborazione& parms) { _parms = parms;}
bool is_document_ok(const TRectype& doc) const ;
TParametri_elaborazione& params() { return _parms;}
virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
const TDate& data_elab, bool interattivo = false);
TElaborazione(const char* cod);
TElaborazione(const TRectype& rec) : TRectype(rec) { }
virtual ~TElaborazione() { }
};
class TElaborazione_esterna : public TElaborazione // velib04
{
public:
virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
const TDate& data_elab, bool interattivo = false);
TElaborazione_esterna(const char* cod);
TElaborazione_esterna(const TRectype& rec) : TElaborazione(rec) { }
virtual ~TElaborazione_esterna() { }
};
class TConsegna_ordini : public TElaborazione // velib04d
{
protected:
bool calcola_ncolli_tara_pnetto(const TString& codart, const real& qta,
real& nolli, real& tara, real& pnetto) const;
bool aggiorna_ncolli_tara_pnetto(TRiga_documento& r) const;
bool genera_righe_riferimento(const TDocumento& indoc, TDocumento& outdoc, TSheet_field& s) const;
virtual bool run_consegna_mask(TMask& cm);
public:
bool nettifica() const { return get_bool("B12"); }
bool raggruppa_per_riferimento() const { return raggruppa_righe() || get_int("I3") == 0; }
virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
const TDate& data_elab, bool interattivo = false);
TConsegna_ordini(const char* cod) : TElaborazione(cod) { }
TConsegna_ordini(const TRectype& rec) : TElaborazione(rec) { }
};
class TFatturazione_bolle : public TElaborazione // velib04a
{
TToken_string _cod_desc, _lista_campi, _rowsort;
bool _cambia_codice;
real _impminfat;
protected:
virtual void campi_raggruppamento_righe(TToken_string& campi_riga) const;
virtual void campi_raggruppamento(TToken_string& campi) const;
virtual bool doc_raggruppabile(const TDocumento & doc) const { return doc.raggruppabile(); }
virtual bool doc_raggruppabili(const TDocumento & doc_in, const TDocumento & doc_out, TToken_string & campi) const;
virtual void add_rows(TRiga_documento & rout, TRiga_documento & rin) { rout += rin; }
virtual void create_row(TDocumento& doc_out, const TRiga_documento & rin);
virtual const TString& get_tipo_out(const TDocumento& doc_out) const { return get("S8"); }
virtual bool da_raggruppare(const TRiga_documento & rin) { return true; }
virtual void elabora_riga(TRiga_documento& r, TDocumento& doc_out, bool usa_dcons, bool ragg_rig, bool ignora_desc,
TToken_string& campi_riga, const TDate& dcons, const TDate& ddoc);
void init();
public:
virtual bool raggruppa(TDocumento& din, TDocumento& dout);
virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
const TDate& data_elab, bool interattivo = false);
bool change_clifo() { return get_bool("B14"); }
virtual bool get_num_tip_out(const TDocumento& doc_out, TString& codnum, TString& tipodoc) const;
TFatturazione_bolle(const char* cod);
TFatturazione_bolle(const TRectype& rec);
virtual ~TFatturazione_bolle() { }
};
// Tipi di errore validi solo per TContabilizzazione e TGenerazione_effetti
enum error_type {
no_error,
nr_es_error,
nr_reg_error,
nr_doc_error,
chg_stat_error,
clifo_error,
ultprot_error,
datadoc_error,
caus_error,
causre_error,
cauval_error,
ivasto_error,
register_error,
change_error,
val_error,
codpag_error,
row_type_error,
no_rows_error,
contocf_error,
conto_error,
sconto_error,
spinbo_error,
movement_error,
write_error,
scadenze_error,
bank_error,
caus_ant_error,
counter_p_ant_error,
cau_abb_error,
cau_spe_error,
write_part_error,
intra_mov_error,
intra_rett_error,
cont_seq_error,
cau_ritintra_error,
m770_write_error,
generic_error
};
class TBill;
class TSaldo_agg;
///////////////////////////////////////////////////////////
// TContabilizzazione
///////////////////////////////////////////////////////////
// TMovimentoPN_VE
// Classe derivata da TMovimentoPN per calcolare automaticamente le righe conabili
// una volta settate le righe iva e la riga di totale documento
// Sostanzialmente di tratta di aggiungere un metodo in piu' :
// recalc_cg_rows(), liberamente ispirato alla notify_iva() in cg2102.cpp
class TMovimentoPN_VE : public TMovimentoPN
{
bool _valuta;
TCausale * _caus;
protected:
// simula il K_ENTER di iva_notify
void enter_row(int i, const TString & descr_cr);
// cerca la prima tra quelle di contabilita' che corrisponde al tipo indicato
int type2pos(char tipo);
// Trova nelle righe contabili un conto nelle righe di tipo prescelto
int bill2pos(const TBill& conto, char tipo);
// trasforma un real in TImporto, in base al tipo riga
TImporto real2imp(const real& r, char row_type);
// setta il record delle righe di contabilita'
int insert_cg_rec(int n, const TImporto& imp, TBill& conto, const char* desc, char tipo);
// setta il record delle righe di contabilita'
int set_cg_rec(int n, const TImporto& imp, const TBill& conto, const char* desc, char tipo);
// aggiunge l'importo indicato alla n-esima riga di contabilita'
bool add_cg_rec(int n, const TImporto& imp);
// Legge l'importo della riga n e lo ritorna col segno dovuto
TImporto get_cg_imp(int n);
// Setta l'importo della riga n
void set_cg_imp(int n, const TImporto& imp);
public:
void set_caus(TCausale * c) { _caus = c;}
bool movement_ok() ;
void add_row_re(int i);
void add_row_tot_re(TDocumento& doc);
bool add_row_cp_re(int i);
void map_conto_re(TBill & c);
void destroy_iva_row(int i = -1);
int recalc_cg_rows(const TString & descr_cr, TCausale & caus);
TMovimentoPN_VE(bool valuta) : _valuta(valuta), _caus(NULL) {};
virtual ~TMovimentoPN_VE() {}
};
class TContabilizzazione : public TElaborazione // velib04b
{
bool _auto_data; // Flag per data di registrazione automatica
bool _nump_iva; // se true prende il numero protocollo da registro iva, se no prende il numero protocollo dal numero doc.
TDate _data_reg; // Data di registrazione documenti
long _total_docs;// Numero di documenti contabilizzati
error_type _error; // Errore rilevato durante l'elaborazione
int _nrow; // numero di riga documento errata
bool _can_write; // se true e' abilitata la scrittura. Non appena rileva un errore rimane a false for this instance
TString16 _spin_cod, // codice iva spese d'incasso
_spbo_cod; // codice iva spese bolli
TAssoc_array _totali_lordi;// array per totalizzare i lordi per aliquota, al fine di aggiustare gli imponibili
// nel caso di calcolo lordo sul documento
TIVA_array *_righe_iva; // array per la memorizzazione delle righe iva raggruppate in codesto modo:
// CODICE_IVA+TIPOCF+GRUPPO+CONTO+SOTTOCONTO+COMMESSA+FASE+DETRAIBILITA
// una volta completo, tale array viene scorso per comporre le righe IVA
// del movimento
// Files, tabelle, oggetti contabili ed altre amenita'...
TLocalisamfile *_anamag, // file delle anagrafiche di magazzino
*_fcaus,
*_frcaus,
*_attiv,
*_part,
*_scad,
*_pags,
*_intra,
*_rintra,
*_occas,
*_saldi,
*_docfile,
*_rdocfile;
TTable *_cpg, // tabella condizioni di pagamento
*_gmc, // tabella gruppi/sottogruppi merceologici
*_rfa, // tabella raggruppamenti fiscali
*_cve, // tabella categorie di vendita
*_val, // tabella valute estere
*_prs, // tabella prestazioni
*_spp, // tabella spese
*_caa, // tabella categorie acquisto articoli
*_cra, // tabella categorie ricavo articoli
*_cco; // tabella categorie contabili
TRelation *_clifo; // relazione dei clienti e fornitori + cfven
TViswin* _viswin; // Visualizzazione log di elaborazione
TBill _conto_errato; // Conto da visualizzare in messaggio d'errore
bool _check_prev_cont; // Controllare se il documento precedente e' stato contabilizzato
TString16 _fld_cms_cont; // Campo delle commesse per reperire la causale
private:
void init(); // Called by constructors only
protected:
// Carica i parametri dalla configurazione
bool load_parameters();
// Testa il fatto che il documento sia una nota di credito/debito
bool test_swap();
// Istanzia la causale contabile
TCausale* get_caus(const TDocumento& doc, const int year) const;
// Ritorna l'ultimo numero di registrazione disponibile dei movimenti di prima nota
error_type get_next_reg_num(long &);
// Compila la testata del movimento
error_type compile_head_mov(TDocumento&);
// Compila la testata del movimento per le fatture da emettere / ricevere;
error_type compile_head_mov_re(TDocumento&);
bool spalma_spese() const { return get_int("I2") != 0; }
// Funzione per distribuire le spese
void split_sp_amount(const real & amount, int decimals) const;
// Funzione per ricercare il conto di costo/ricavo
error_type search_costo_ricavo(TBill& conto, const TRiga_documento& r, real & amount_to_split, const real & valore);
// Funzione per ricercare il conto di costo/ricavo materiali
error_type search_costo_ricavo_mat(TBill&, const TRiga_documento&);
// Funzione per aggiungere la riga iva al TAssoc_array _righe_iva
// error_type add_iva_row(const TBill&, const TRiga_documento&, const int ndec, const real p = 1.0);
// Funzione atomica per aggiungere le righe di spese d'incasso e bolli al TAssoc_array _righe_iva
void calculate_spese(const real&, real&, int, bool, const TString &, const TDocumento & );
// Funzione per aggiungere le righe di spese d'incasso e bolli al TAssoc_array _righe_iva (chiama calculate_spese())
error_type add_spese_inbo(TDocumento&, const int);
// Aggiorna le righe di sconto importo o percentuale
error_type adjust_sconto_rows(TDocumento&);
// Controlla la corrispondenza tra limposta del documento e quelle generate
error_type adjust_iva_rows(TDocumento&);
// Crea le righe iva sul movimento
error_type create_iva_rows(TDocumento&);
// Crea la riga di totale documento
error_type create_total_doc_row(TDocumento&);
// Compila le righe del movimento
error_type compile_rows_mov(TDocumento&);
// Compila le righe del movimento per le fatture da emettere / ricevere
error_type compile_rows_mov_re(TDocumento&);
// scrive le scadenze
error_type write_scadenze(TDocumento& doc, bool recontabilizing);
// scrive il movimento e le scadenze
virtual error_type write_all(TDocumento& doc, TMovimentoPN_VE & movimento);
// scrive il movimento e le scadenze per le fatture da emettere / ricevere
virtual error_type write_all_re(TDocumento& doc, TMovimentoPN_VE & movimento);
// restituisce la sezione per sto cliente
char sezione() const;
// Cerca il conto cliente per il movimento d'anticipo
error_type search_clifo_bill(const TString& catven);
// Cerca il conto di contropartita per il movimento d'anticipo
error_type search_counter_bill(TDocumento& doc, const TDate& datareg);
// compila la testata del movimento di anticipo
error_type compile_head_anticipo(TDocumento& doc, const TMovimentoPN_VE& movimento);
// compila le righe del movimento di anticipo
error_type compile_rows_anticipo(TDocumento&);
// compila e scrive il pagamento del movimento di anticipo
error_type write_pagamento_anticipo(TDocumento&);
// scrive il movimento di anticipo pagamento
error_type write_anticipo(TDocumento& doc, const TMovimentoPN_VE& movimento);
// scrive il movimento INTRA
error_type write_intra(TDocumento&);
error_type write_anal(TDocumento& doc, const TMovimentoPN& mv);
error_type write_percip(TDocumento& doc, const TMovimentoPN& movimento);
error_type write_regolarizzazione(const TDocumento& doc, TMovimentoPN& mov_rego);
TRecnotype kill_righe_percip(TIsam_handle logic, char tipopercip, long codpercip, long nprog) const;
// Aggiorna i saldi
void aggiorna_saldi(TSaldo_agg& saldo, TMovimentoPN& mv, bool save);
// Visualizza l'ultimo errore rilevato
void display_error(TDocumento&);
// Verifica se non ci sono stati errori
bool good() const { return _error == no_error;}
// Ritorna true se il saldaconto e' abilitato (verifica anche la causale del documento corrente)
bool sc_enabled(const TDate& data) const ;
// Ritorna true se il modulo INTRA e' abilitato (verifica anche la causale del documento corrente)
bool in_enabled() const ;
// Controlla se il tipo riga esiste
bool valid_row_type(const char* rt) const;
virtual void export_movimento(TMovimentoPN_VE & mov, TViswin & v) {};
virtual bool exporting() { return false; }
bool dispatch_transaction(TMovimentoPN& movimento, const char* action) const;
public:
// Cambia lo stato del documento
error_type change_doc_status(TDocumento&);
virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
const TDate& data_elab, bool interattivo = false);
void set_auto(const bool a) { _auto_data = a; }
void set_writeable(const bool b) { _can_write = b; }
const long processed_docs() const { return _total_docs; }
void inc_processed_docs() { _total_docs++; }
// Ritorna il numero dell'eventuale movimento con cui il documento stato contabilizzato
long doc_contabilized(const TDocumento& doc, bool anticipo) const;
// Personalizzazioni
bool call_exe(const TDocumento& doc, const TMovimentoPN& movimento) const;
// Ritorna true se il documento precedente a doc e' gia' stato contabilizzato
bool prev_contabilized(const TDocumento& doc) const;
TContabilizzazione(const char* cod);
TContabilizzazione(const TRectype& rec);
virtual ~TContabilizzazione();
};
class TCopia_documento : public TElaborazione // velib04
{
bool _preserve_original_rif;
public:
virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
const TDate& data_elab, bool interattivo = false);
void preserve_original_rif(bool on = true) { _preserve_original_rif = on;}
TCopia_documento(const char* cod);
TCopia_documento(const TRectype& rec) : TElaborazione(rec), _preserve_original_rif(false) { }
virtual ~TCopia_documento() { }
};
class TGenerazione_effetti : public TElaborazione // velib04c
{
error_type _error; // Errore rilevato durante l'elaborazione
long _total_bills; // Totale effetti generati
bool _can_write; // se true e' abilitata la scrittura. Non appena rileva un errore rimane a false for this instance
TBit_array _valid_array; // array dei tipi di pagamento validi per la generazione di effetti
real _impmin;
TLocalisamfile *_efffile, // file effetti
*_refffile, // file righe di effetti
*_cessfile,
*_docfile,
*_rdocfile,
*_clifo,
*_cfven,
*_tab,
*_occas;
TArray _effetti_array;//Array di effetti (TEffetto) da scrivere
protected:
// Visualizza l'ultimo errore rilevato
void display_error(TDocumento& doc);
// Restituisce true se il tipo di pagamento passato e' valido per generare l'effetto
bool valid_type(int) const ;
// Genera l'effetto
void generate_bill(TDocumento& doc, bool interattivo);
// Istanzia il pagamento corrente
void calc_pagamento(TDocumento&);
// Scrive i record array degli effetti raggruppati
error_type write_groups(bool interattivo);
// Cambia lo stato dei gruppi di documenti raggruppati in effetti
error_type change_group_status(TDocumento&, TAssoc_array&, bool bFast);
// Cambia lo stato del documento
error_type change_doc_status(TDocumento&);
// Verifica se non ci sono stati errori
bool good() const { return _error == no_error;}
public:
virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
const TDate& data_elab, bool interattivo = false);
// Effettua il raggruppamento vero e proprio degli effetti (solo se ci sono elementi nell'assoc_array passato)
long group_bills(TAssoc_array& group_array, bool interattivo, bool fast);
long bills() const { return _total_bills; }
// void set_group(TAssoc_array& a) { _group_array = a; }
void set_writeable(const bool b) { _can_write = b; }
TGenerazione_effetti(const char* cod);
TGenerazione_effetti(const TRectype& rec);
virtual ~TGenerazione_effetti();
};
class TConsuntivazione_produzione : public TElaborazione // velib04e
{
protected:
bool ref2doc(char & provv, int & anno, TString8 & codnum, long & ndoc, int & nriga, const TString & codart);
bool raggruppa_per_riferimento() const { return raggruppa_righe() || get_int("I3") == 0; }
public:
virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
const TDate& data_elab, bool interattivo = false);
TConsuntivazione_produzione(const char* cod) : TElaborazione(cod) { }
TConsuntivazione_produzione(const TRectype& rec) : TElaborazione(rec) { }
virtual ~TConsuntivazione_produzione() { }
};
class TCache_causali; // Internal use only
class TContabilizzazione_analitica : public TElaborazione // velib04f
{
TCache_ripartizioni _rip;
TToken_string _search_seq;
TBill _sco_perc_bill_an, _sco_imp_bill_an, _spin_billa, _spin_billv, _spbo_billa, _spbo_billv;
TString _spin_cod, _spbo_cod;
TCache_causali* _caus;
TString16 _fld_cms_cont;
long _total_docs;// Numero di documenti contabilizzati
error_type _error; // Errore rilevato durante l'elaborazione
bool _usepdcc;
protected:
bool find_conti_iva_indetraibile(const TRiga_documento& riga, const TBill & bill, TString_array& conti, int annoes, const char tipomov, bool & pareggio);
bool spalma_spese() const { return get_int("I2") != 0; }
void split_sp_amount(TAnal_mov & mov, bool pareggio, const TImporto & totdoc, const TBit_array & spese, const real & amount, const real & no_ca_amount, int decimals) const;
bool find_conti(const TRiga_documento& riga, TString_array& conti, int annoes, bool riclassifica_fdr_fde, const char tipomov, real & amount_to_split, real & no_ca_amount, const real & valore, bool & pareggio);
void init();
virtual const TCausale& doc2caus(const TDocumento& doc);
const TCausale& rdoc2caus(const TRiga_documento& rdoc);
void init_distrib(TString_array& conti, TGeneric_distrib& distrib, bool pareggio);
int calcola_date_comp(const TDocumento& doc, TDate& datacomp, TDate& datafcomp) const;
public:
bool search_costo_ricavo(const TRiga_documento& riga, TBill& conto, bool riclassifica_fdr_fde);
const long processed_docs() const { return _total_docs; }
virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
const TDate& data_elab, bool interattivo = false);
virtual bool elabora(TDocumento& doc, long numreg_cg, TViswin* viswin, bool can_write, TAnal_mov& mov,
bool riclassifica_fdr_fde = true);
TContabilizzazione_analitica(const char* cod = NULL);
TContabilizzazione_analitica(const TRectype& rec);
TContabilizzazione_analitica(const TContabilizzazione & el);
virtual ~TContabilizzazione_analitica();
};
#endif