661 lines
28 KiB
C++
Executable File
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
|