1997-06-03 15:56:27 +00:00
|
|
|
|
#ifndef __VELIB_H
|
|
|
|
|
#define __VELIB_H
|
|
|
|
|
|
1996-09-26 15:37:19 +00:00
|
|
|
|
#ifndef __VARMASK_H
|
|
|
|
|
#include <varmask.h>
|
|
|
|
|
#endif
|
|
|
|
|
|
1997-06-12 16:26:22 +00:00
|
|
|
|
#ifndef __MULTIREC_H
|
|
|
|
|
#include <multirec.h>
|
|
|
|
|
#endif
|
|
|
|
|
|
2000-05-05 15:25:49 +00:00
|
|
|
|
#ifndef __VISWIN_H
|
|
|
|
|
class TViswin;
|
|
|
|
|
#endif
|
|
|
|
|
|
1997-06-12 16:26:22 +00:00
|
|
|
|
#ifndef __CLIFOR_H
|
|
|
|
|
#include "clifor.h"
|
|
|
|
|
#endif
|
2000-05-05 15:25:49 +00:00
|
|
|
|
|
|
|
|
|
#ifndef __CURRENCY_H
|
|
|
|
|
#include <currency.h>
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef __CGLIB01_H
|
|
|
|
|
#include "../cg/cglib01.h"
|
|
|
|
|
#endif
|
1997-06-12 16:26:22 +00:00
|
|
|
|
|
1997-06-27 09:21:13 +00:00
|
|
|
|
#ifndef __CGPAGAME_H
|
|
|
|
|
#include "../cg/cgpagame.h"
|
1996-09-26 15:37:19 +00:00
|
|
|
|
#endif
|
1997-08-05 09:22:43 +00:00
|
|
|
|
|
1997-10-13 15:22:11 +00:00
|
|
|
|
#ifndef __PRLIB_H
|
|
|
|
|
#include "../pr/prlib.h"
|
|
|
|
|
#endif
|
|
|
|
|
|
1999-07-16 14:59:11 +00:00
|
|
|
|
#ifndef __MGLIB_H
|
|
|
|
|
#include "../mg/mglib.h"
|
|
|
|
|
#endif
|
|
|
|
|
|
2002-07-02 16:21:23 +00:00
|
|
|
|
#ifndef __COLMASK_H
|
|
|
|
|
#include <colmask.h>
|
2000-05-05 15:25:49 +00:00
|
|
|
|
#endif
|
|
|
|
|
|
1997-08-05 09:22:43 +00:00
|
|
|
|
#ifndef __DOC_H
|
|
|
|
|
#include <doc.h>
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef __RDOC_H
|
|
|
|
|
#include <rdoc.h>
|
|
|
|
|
#endif
|
1999-07-16 14:59:11 +00:00
|
|
|
|
|
2002-02-26 16:20:19 +00:00
|
|
|
|
#include "../cg/cg2101.h"
|
|
|
|
|
|
1997-02-03 15:28:53 +00:00
|
|
|
|
#define RIGA_MERCE 'M'
|
1997-03-17 09:26:01 +00:00
|
|
|
|
#define RIGA_SPESEDOC 'S'
|
1997-02-03 15:28:53 +00:00
|
|
|
|
#define RIGA_PRESTAZIONI 'P'
|
|
|
|
|
#define RIGA_SCONTI 'C'
|
|
|
|
|
#define RIGA_OMAGGI 'O'
|
|
|
|
|
#define RIGA_DESCRIZIONI 'D'
|
1997-08-18 15:24:00 +00:00
|
|
|
|
|
1997-06-27 09:21:13 +00:00
|
|
|
|
#define MAX_TIPI_DOC 10
|
1997-02-03 15:28:53 +00:00
|
|
|
|
|
1999-10-22 10:00:18 +00:00
|
|
|
|
#define MAX_IVA_SLICES 5
|
1997-08-18 15:24:00 +00:00
|
|
|
|
|
1996-09-26 15:37:19 +00:00
|
|
|
|
class TDocumento;
|
|
|
|
|
class TRiga_documento;
|
|
|
|
|
class TCond_vendita;
|
2002-05-08 16:25:49 +00:00
|
|
|
|
class TIVA_array;
|
1999-04-06 15:34:39 +00:00
|
|
|
|
class TArticolo_giacenza;
|
|
|
|
|
class TCache_articoli;
|
1996-09-26 15:37:19 +00:00
|
|
|
|
|
1997-10-23 10:55:09 +00:00
|
|
|
|
|
|
|
|
|
bool scontoexpr2perc(const char * exp, bool signal , TString & goodexp, real & val_perc );
|
1996-09-26 15:37:19 +00:00
|
|
|
|
real prezzo_scontato(const real& prezzo, const char * sconto);
|
|
|
|
|
|
|
|
|
|
bool ora_hndl(TMask_field& field, KEY key);
|
1999-10-22 10:00:18 +00:00
|
|
|
|
bool totdoc_hndl(TMask_field& field, KEY key);
|
1996-09-26 15:37:19 +00:00
|
|
|
|
bool codcli_hndl(TMask_field& field, KEY key);
|
|
|
|
|
bool dummy_hndl(TMask_field& field, KEY key);
|
|
|
|
|
bool condpag_hndl(TMask_field& field, KEY key);
|
1996-10-21 15:52:20 +00:00
|
|
|
|
bool note_hndl(TMask_field& field, KEY key);
|
1997-02-03 15:28:53 +00:00
|
|
|
|
bool data_hndl(TMask_field& field, KEY key);
|
2003-11-17 10:20:13 +00:00
|
|
|
|
void set_curr_um(const TString& um);
|
1996-09-26 15:37:19 +00:00
|
|
|
|
|
1997-10-23 10:55:09 +00:00
|
|
|
|
|
1996-09-26 15:37:19 +00:00
|
|
|
|
class TDocumento_variable_field : public TVariable_field
|
|
|
|
|
{
|
|
|
|
|
bool _dirty;
|
1997-10-02 16:57:49 +00:00
|
|
|
|
|
1996-09-26 15:37:19 +00:00
|
|
|
|
public:
|
1997-10-02 16:57:49 +00:00
|
|
|
|
TObject* dup() const { return new TDocumento_variable_field(*this); }
|
1996-09-26 15:37:19 +00:00
|
|
|
|
// @cmember segnala che il campo deve essere ricalcolato
|
|
|
|
|
virtual bool dirty() const { return _dirty;}
|
|
|
|
|
// @cmember assegna lo stato di campo da ricalcolare
|
|
|
|
|
virtual void set_dirty(bool on = TRUE) { _dirty = on;}
|
|
|
|
|
|
|
|
|
|
// @ cmember Costruttore con una espressione di calcolo
|
|
|
|
|
TDocumento_variable_field(const char * name, const char * expr = "", TTypeexp type = _strexpr)
|
|
|
|
|
: TVariable_field(name, expr, type), _dirty(TRUE) {}
|
|
|
|
|
// @ cmember Costruttore con una funzione
|
|
|
|
|
TDocumento_variable_field(const char * name, VIRTUAL_GET_FUNCTION getfunc)
|
|
|
|
|
: TVariable_field(name, getfunc), _dirty(TRUE) {}
|
|
|
|
|
// @ cmember Costruttore con una espressione di calcolo
|
1998-11-04 18:04:26 +00:00
|
|
|
|
TDocumento_variable_field(const char * name, const TExpression & expr, TTypeexp type = _strexpr)
|
1996-09-26 15:37:19 +00:00
|
|
|
|
: TVariable_field(name, expr, type), _dirty(TRUE) {}
|
|
|
|
|
// @ cmember Costruttore con un variable_field
|
|
|
|
|
TDocumento_variable_field(const TVariable_field & f) : TVariable_field(f), _dirty(TRUE) {}
|
|
|
|
|
// @ cmember Distruttore
|
1998-08-25 18:07:30 +00:00
|
|
|
|
virtual ~TDocumento_variable_field() {}
|
1996-09-26 15:37:19 +00:00
|
|
|
|
};
|
1997-02-03 15:28:53 +00:00
|
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
|
class TSpesa_prest : public TRectype // velib01
|
1996-08-08 15:57:44 +00:00
|
|
|
|
{
|
1996-09-26 15:37:19 +00:00
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
TObject* dup() const { return new TSpesa_prest(codice()); }
|
|
|
|
|
|
|
|
|
|
public:
|
1998-04-30 14:04:19 +00:00
|
|
|
|
int read(const char* codice);
|
|
|
|
|
|
1996-09-26 15:37:19 +00:00
|
|
|
|
const TString& codice() const { return get("CODTAB");}
|
|
|
|
|
const TString& descrizione() const { return get("S0"); }
|
1997-02-03 15:28:53 +00:00
|
|
|
|
const TString& field_perc() const { return get("S5"); }
|
|
|
|
|
const TString & um() const { return get("S7"); }
|
|
|
|
|
const TString& cod_iva() const { return get("S3"); }
|
|
|
|
|
real prezzo() const { return get_real("R0"); }
|
|
|
|
|
real qta() const { return get_real("R1"); }
|
2002-02-26 16:20:19 +00:00
|
|
|
|
real perc() const { return get_real("R2"); }
|
1996-09-26 15:37:19 +00:00
|
|
|
|
char tipo() const { return get_char("S6"); }
|
2002-02-26 16:20:19 +00:00
|
|
|
|
char tipo_ritenuta() const { return get_char("S9"); }
|
1997-02-03 15:28:53 +00:00
|
|
|
|
const TString & tipo_riga() const { return get("S8"); }
|
1996-09-26 15:37:19 +00:00
|
|
|
|
char genere() const { return get("COD") == "SPP" ? 'S' : 'P'; }
|
|
|
|
|
|
|
|
|
|
TSpesa_prest(const char* codice = NULL, char tipo = 'S');
|
|
|
|
|
TSpesa_prest(const TRectype& rec);
|
|
|
|
|
virtual ~TSpesa_prest() {}
|
|
|
|
|
};
|
|
|
|
|
|
2000-05-05 15:25:49 +00:00
|
|
|
|
/*class TIVA : public TRectype // velib01
|
1996-09-26 15:37:19 +00:00
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
int read(const char* codice);
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
TObject* dup() const { return new TIVA(codice()); }
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
const TString& codice() const { return get("CODTAB");}
|
|
|
|
|
const TString& descrizione() const { return get("S0"); }
|
|
|
|
|
const real aliquota() const { return get_real("R0"); }
|
|
|
|
|
const TString& tipo() const { return get("S1"); }
|
|
|
|
|
|
|
|
|
|
TIVA(const char* codice = NULL);
|
|
|
|
|
TIVA(const TRectype& rec);
|
|
|
|
|
virtual ~TIVA() {}
|
2000-05-05 15:25:49 +00:00
|
|
|
|
};*/
|
1996-09-26 15:37:19 +00:00
|
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
|
class TExpr_documento : public TExpression // velib01
|
1996-09-26 15:37:19 +00:00
|
|
|
|
{
|
|
|
|
|
TDocumento * _doc;
|
|
|
|
|
TRiga_documento * _row;
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
virtual void evaluate_user_func(int index, int nparms, TEval_stack & stack, TTypeexp type) const;
|
|
|
|
|
virtual int parse_user_func(const char * name, int nparms) const;
|
|
|
|
|
|
|
|
|
|
public:
|
1997-08-18 16:06:51 +00:00
|
|
|
|
// @cmember Duplica l'espressione
|
1996-09-26 15:37:19 +00:00
|
|
|
|
virtual TObject* dup() const;
|
1998-08-25 18:07:30 +00:00
|
|
|
|
|
1996-09-26 15:37:19 +00:00
|
|
|
|
// @cmember Assegna il documento corrente
|
1998-08-25 18:07:30 +00:00
|
|
|
|
void set_doc(TDocumento* doc) { _doc = doc; }
|
1996-09-26 15:37:19 +00:00
|
|
|
|
// @cmember Assegna il documento corrente
|
1998-08-25 18:07:30 +00:00
|
|
|
|
void set_row(TRiga_documento* row) { _row = row; }
|
1996-09-26 15:37:19 +00:00
|
|
|
|
// @cmember Costruttore (assegna l'estressione e il suo tipo)
|
|
|
|
|
TExpr_documento(const char* expression, TTypeexp type = _numexpr,
|
1998-08-25 18:07:30 +00:00
|
|
|
|
TDocumento* doc = NULL, TRiga_documento * row = NULL);
|
1996-09-26 15:37:19 +00:00
|
|
|
|
// @cmember Costruttore (assegna il tipo dell'istruzione)
|
|
|
|
|
TExpr_documento(TTypeexp type = _numexpr,
|
1998-08-25 18:07:30 +00:00
|
|
|
|
TDocumento* doc = NULL, TRiga_documento* row = NULL)
|
1996-09-26 15:37:19 +00:00
|
|
|
|
: TExpression(type), _doc(doc), _row(row) {}
|
|
|
|
|
// @cmember Costruttore di copia
|
|
|
|
|
TExpr_documento(const TExpr_documento & expr)
|
|
|
|
|
: TExpression(expr), _doc(expr._doc), _row(expr._row) {}
|
1998-08-25 18:07:30 +00:00
|
|
|
|
|
1996-09-26 15:37:19 +00:00
|
|
|
|
// @cmember Distruttore
|
|
|
|
|
virtual ~TExpr_documento() {}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
enum TTipo_formula { _documento, _riga };
|
|
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
|
class TFormula_documento : public TRectype // velib01
|
1996-09-26 15:37:19 +00:00
|
|
|
|
{
|
|
|
|
|
TString16 _tab;
|
|
|
|
|
TExpr_documento * _expr;
|
|
|
|
|
|
1996-08-08 15:57:44 +00:00
|
|
|
|
protected:
|
1997-06-03 10:29:42 +00:00
|
|
|
|
int read(const char* codice, const char* expr = NULL, bool numexpr = TRUE);
|
1996-09-26 15:37:19 +00:00
|
|
|
|
|
|
|
|
|
public:
|
1997-06-03 10:29:42 +00:00
|
|
|
|
TObject* dup() const { return new TFormula_documento(_tab == "%FRD" ? _documento : _riga, codice(), NULL, TRUE); }
|
1996-09-26 15:37:19 +00:00
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
const TString& codice() const { return get("CODTAB");}
|
|
|
|
|
const TString& name() const { return codice();}
|
1998-08-25 18:07:30 +00:00
|
|
|
|
TExpr_documento* expr() const { return _expr;}
|
1996-09-26 15:37:19 +00:00
|
|
|
|
|
|
|
|
|
const TString& descrizione() const { return get("S0"); }
|
|
|
|
|
const TString& expr_string() const { return get("S1"); }
|
|
|
|
|
TTypeexp expr_type() const { return get_bool("B0") ? _numexpr : _strexpr;}
|
|
|
|
|
|
1997-06-03 10:29:42 +00:00
|
|
|
|
TFormula_documento(TTipo_formula tipo = _documento, const char* codice = NULL, const char* expr = NULL, bool numexpr = TRUE);
|
1996-09-26 15:37:19 +00:00
|
|
|
|
TFormula_documento(const TRectype& rec);
|
|
|
|
|
virtual ~TFormula_documento();
|
|
|
|
|
};
|
|
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
|
class TTipo_documento : public TRectype // velib03
|
1996-09-26 15:37:19 +00:00
|
|
|
|
{
|
1997-08-27 13:28:15 +00:00
|
|
|
|
enum { _altro, _bolla, _fattura, _ordine};
|
1997-06-03 10:29:42 +00:00
|
|
|
|
|
1996-09-26 15:37:19 +00:00
|
|
|
|
static TAssoc_array _formule_documento;
|
|
|
|
|
TToken_string _formule;
|
1998-11-04 18:04:26 +00:00
|
|
|
|
TString_array _keys_descrs; // Tipi riga per listbox
|
|
|
|
|
TString_array _defaults; // Defaults per i campi della maschera
|
|
|
|
|
TString_array _sheet_columns; // Colonne dello spreadsheet
|
|
|
|
|
TString_array _handlers; // Handlers
|
1996-09-26 15:37:19 +00:00
|
|
|
|
TString16 _imponibile;
|
|
|
|
|
TString16 _imposta;
|
|
|
|
|
TString16 _totale;
|
1996-10-29 10:19:29 +00:00
|
|
|
|
TString16 _totale_netto;
|
1996-09-26 15:37:19 +00:00
|
|
|
|
TString16 _basesconto;
|
|
|
|
|
TString16 _spese;
|
1997-10-02 16:57:49 +00:00
|
|
|
|
TString16 _totprovv;
|
1998-08-25 18:07:30 +00:00
|
|
|
|
TString16 _valore;
|
|
|
|
|
TString16 _totvalres;
|
|
|
|
|
TString16 _totvalore;
|
2000-05-05 15:25:49 +00:00
|
|
|
|
TString16 _totale_cont;
|
2002-02-26 16:20:19 +00:00
|
|
|
|
TString16 _field_prezzo;
|
2002-07-02 16:21:23 +00:00
|
|
|
|
TString16 _field_qta, _field_qtaevasa; // Veri campi Quantit<69> e Quantit<69> Evasa
|
|
|
|
|
TString _str_desc_doc, _str_desc_rdoc;
|
1998-08-25 18:07:30 +00:00
|
|
|
|
|
2001-06-25 10:41:20 +00:00
|
|
|
|
char _tipocf;
|
2002-12-20 16:15:03 +00:00
|
|
|
|
char _check_qta;
|
2002-07-02 16:21:23 +00:00
|
|
|
|
bool _cnt_prezzi, _show_evaded_lines;
|
2002-12-20 16:15:03 +00:00
|
|
|
|
|
1998-08-25 18:07:30 +00:00
|
|
|
|
|
1996-09-26 15:37:19 +00:00
|
|
|
|
protected:
|
2002-12-20 16:15:03 +00:00
|
|
|
|
void add_formula_if_needed(TConfig& profile, TString& variable, const char* varname, const char* formula);
|
1996-09-26 15:37:19 +00:00
|
|
|
|
void read_formule();
|
1996-08-08 15:57:44 +00:00
|
|
|
|
int read(const char* tipodoc);
|
1998-11-04 18:04:26 +00:00
|
|
|
|
|
1996-08-08 15:57:44 +00:00
|
|
|
|
public:
|
1996-08-12 08:32:28 +00:00
|
|
|
|
TObject* dup() const { return new TTipo_documento(codice()); }
|
1996-08-08 15:57:44 +00:00
|
|
|
|
|
|
|
|
|
public:
|
2003-10-01 14:31:28 +00:00
|
|
|
|
// const TString& profile_name() const { return get("S4"); }
|
|
|
|
|
const TFilename& profile_name(TFilename& name) const;
|
1998-11-04 18:04:26 +00:00
|
|
|
|
|
|
|
|
|
// Funzioni che effettuano la cache di importanti valori contenuti nel profilo
|
|
|
|
|
const char tipocf();
|
|
|
|
|
void set_defaults(TMask& m);
|
|
|
|
|
const TString_array& keys_descrs();
|
|
|
|
|
const TString_array& sheet_columns();
|
|
|
|
|
const TString_array& handlers();
|
|
|
|
|
|
1996-08-14 16:32:11 +00:00
|
|
|
|
const TString& mask_name() const { return get("S4");}
|
1996-08-21 10:22:05 +00:00
|
|
|
|
const TString& causale() const { return get("S6"); }
|
1997-06-03 10:29:42 +00:00
|
|
|
|
int tipo() const { return get_int("I1"); }
|
1996-08-14 16:32:11 +00:00
|
|
|
|
const TString& codice() const { return get("CODTAB");}
|
1996-08-09 14:08:58 +00:00
|
|
|
|
|
1997-06-03 10:29:42 +00:00
|
|
|
|
bool is_generic() const { return tipo() == _altro; }
|
|
|
|
|
bool is_fattura() const { return tipo() == _fattura; }
|
|
|
|
|
bool is_bolla() const { return tipo() == _bolla; }
|
2001-06-25 10:41:20 +00:00
|
|
|
|
bool is_ordine() const { return tipo() == _ordine; }
|
|
|
|
|
bool controllo_prezzi() const { return _cnt_prezzi; }
|
2002-12-20 16:15:03 +00:00
|
|
|
|
const char * field_prezzo() const { return _field_prezzo; }
|
2002-07-02 16:21:23 +00:00
|
|
|
|
const TString& field_qta() const { return _field_qta; }
|
|
|
|
|
const TString& field_qtaevasa() const { return _field_qtaevasa; }
|
2002-12-20 16:15:03 +00:00
|
|
|
|
bool check_giac() const { return _check_qta == 'G'; }
|
|
|
|
|
bool check_disp() const { return _check_qta == 'D'; }
|
|
|
|
|
|
1997-06-03 10:29:42 +00:00
|
|
|
|
|
1997-06-27 09:21:13 +00:00
|
|
|
|
const TString & descrizione() const { return get("S0"); }
|
2002-12-20 16:15:03 +00:00
|
|
|
|
const TString & riferimento(const TDocumento& doc, TString& rif) const;
|
1997-06-27 09:21:13 +00:00
|
|
|
|
const TString & imponibile() const { return _imponibile;}
|
|
|
|
|
const TString & imposta() const { return _imposta;}
|
|
|
|
|
const TString & totale_doc() const { return _totale;}
|
|
|
|
|
const TString & totale_netto() const { return _totale_netto; }
|
2000-05-05 15:25:49 +00:00
|
|
|
|
const TString & totale_doc_cont() const { return _totale_cont;}
|
1997-06-27 09:21:13 +00:00
|
|
|
|
const TString & basesconto() const { return _basesconto;}
|
|
|
|
|
const TString & spese() const { return _spese;}
|
1997-10-02 16:57:49 +00:00
|
|
|
|
const TString & totprovv() const { return _totprovv;}
|
1998-08-25 18:07:30 +00:00
|
|
|
|
const TString & valore() const { return _valore;}
|
|
|
|
|
const TString & totvalres() const { return _totvalres;}
|
|
|
|
|
const TString & totvalore() const { return _totvalore;}
|
1997-06-27 09:21:13 +00:00
|
|
|
|
bool mov_mag() const { return get_bool("B1"); }
|
1997-08-18 15:24:00 +00:00
|
|
|
|
bool statistiche() const { return get_bool("B2"); }
|
1997-10-02 16:57:49 +00:00
|
|
|
|
bool provvigioni() const { return get_bool("B3"); }
|
1997-08-18 16:06:51 +00:00
|
|
|
|
const char stato_mov_iniziale() const {return get_char("S7"); }
|
|
|
|
|
const char stato_mov_finale() const {return get_char("S8"); }
|
1997-10-02 16:57:49 +00:00
|
|
|
|
const char stato_provvigioni() const {return get_char("S3"); }
|
1997-07-29 09:53:35 +00:00
|
|
|
|
const TString & caus_mov() const {return get("S9"); }
|
1998-08-25 18:07:30 +00:00
|
|
|
|
const TString & caus_anticipo() const {return get("S10"); }
|
2000-05-05 15:25:49 +00:00
|
|
|
|
const TString & tipi_iva_validi() const {return get("S11"); }
|
1997-08-18 16:06:51 +00:00
|
|
|
|
const char stato_finale_inserimento() const {return get("S2")[0]; }
|
|
|
|
|
const char stato_finale_stampa() const {return get("S2")[1]; }
|
2000-05-05 15:25:49 +00:00
|
|
|
|
const char stato_bloccato() const {return get("S2")[2]; }
|
1997-08-18 16:06:51 +00:00
|
|
|
|
const TString & stati_iniziali_modifica() const {return get("S2").mid(9,20); }
|
|
|
|
|
const TString & stati_iniziali_cancellazione() const {return get("S2").mid(29,20); }
|
|
|
|
|
const TString & stati_iniziali_stampa() const {return get("S2").mid(49,20); }
|
|
|
|
|
bool stato_with_mov_mag(const char stato) const;
|
2000-05-05 15:25:49 +00:00
|
|
|
|
bool scarica_residuo() const;
|
1999-04-06 15:34:39 +00:00
|
|
|
|
bool clifo_optional() const { return get_bool("B5"); }
|
|
|
|
|
|
1996-09-26 15:37:19 +00:00
|
|
|
|
TFormula_documento * first_formula() { return succ_formula(TRUE); }
|
|
|
|
|
TFormula_documento * succ_formula(bool restart = FALSE);
|
|
|
|
|
|
1996-09-04 07:31:47 +00:00
|
|
|
|
const int ncopie() const { return get_int("I0"); }
|
1997-02-03 15:28:53 +00:00
|
|
|
|
bool spese_aut() const { return get_bool("B0"); }
|
1999-04-06 15:34:39 +00:00
|
|
|
|
bool nota_credito() const { return get_bool("B7"); }
|
|
|
|
|
bool add_conai() const { return get_bool("B6"); }
|
1999-05-24 13:34:11 +00:00
|
|
|
|
bool calcolo_lordo() const { return get_bool("B8"); }
|
1999-10-22 10:00:18 +00:00
|
|
|
|
bool fattura_commerciale() const { return get_bool("B9"); }
|
1996-08-08 15:57:44 +00:00
|
|
|
|
|
2002-07-02 16:21:23 +00:00
|
|
|
|
const TString& stringa_descrizione_documento() const { return _str_desc_doc; }
|
|
|
|
|
const TString& stringa_descrizione_riga() const { return _str_desc_rdoc; }
|
|
|
|
|
bool mostra_righe_evase_in_elaborazione() const { return _show_evaded_lines; }
|
|
|
|
|
|
1996-08-08 15:57:44 +00:00
|
|
|
|
TTipo_documento(const char* tipodoc = NULL);
|
|
|
|
|
TTipo_documento(const TRectype& rec);
|
|
|
|
|
virtual ~TTipo_documento();
|
|
|
|
|
};
|
1997-02-03 15:28:53 +00:00
|
|
|
|
|
1997-08-18 15:24:00 +00:00
|
|
|
|
class TCodice_numerazione : public TRectype
|
|
|
|
|
{
|
|
|
|
|
int _status;
|
|
|
|
|
|
|
|
|
|
public:
|
1998-08-25 18:07:30 +00:00
|
|
|
|
TObject* dup() const { return new TCodice_numerazione(*this); }
|
1997-08-18 15:24:00 +00:00
|
|
|
|
|
|
|
|
|
public:
|
2002-12-20 16:15:03 +00:00
|
|
|
|
int read(const char* cod);
|
1997-08-18 15:24:00 +00:00
|
|
|
|
const TString& codice() const { return get("CODTAB"); }
|
|
|
|
|
const TString& descrizione() const { return get("S0"); }
|
|
|
|
|
const TString& prefisso() const { return get("S6"); }
|
|
|
|
|
const TString& postfisso() const { return get("S7"); }
|
|
|
|
|
const bool num_provv() const { return get_bool("B0"); }
|
|
|
|
|
const bool auto_num() const { return get_bool("B1"); }
|
1998-11-04 18:04:26 +00:00
|
|
|
|
const bool dont_test_datadoc() const { return get_bool("B2"); }
|
2003-02-25 14:39:02 +00:00
|
|
|
|
const bool fattura_emettere_ricevere() const { return get_bool("B3"); }
|
2003-07-22 13:22:11 +00:00
|
|
|
|
const TString & tipo_doc(int i) const;
|
|
|
|
|
int ntipi_doc() const;
|
1997-08-18 15:24:00 +00:00
|
|
|
|
|
2002-12-20 16:15:03 +00:00
|
|
|
|
void complete_num(long num, TString& codnum) const;
|
|
|
|
|
bool ok() const { return !empty(); }
|
1997-08-18 15:24:00 +00:00
|
|
|
|
TCodice_numerazione(const char* codnum = NULL);
|
|
|
|
|
TCodice_numerazione(const TRectype& rec);
|
|
|
|
|
virtual ~TCodice_numerazione();
|
|
|
|
|
};
|
|
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
|
class TTipo_riga_documento : public TRectype // velib02
|
1996-08-19 16:04:55 +00:00
|
|
|
|
{
|
1996-09-26 15:37:19 +00:00
|
|
|
|
static TAssoc_array _formule_riga;
|
|
|
|
|
TToken_string _formule;
|
2002-12-20 16:15:03 +00:00
|
|
|
|
|
1996-09-26 15:37:19 +00:00
|
|
|
|
TString16 _imponibile;
|
2002-12-20 16:15:03 +00:00
|
|
|
|
TString16 _quant;
|
|
|
|
|
TString16 _quantevasa;
|
1998-08-25 18:07:30 +00:00
|
|
|
|
TString16 _qtares;
|
2002-12-20 16:15:03 +00:00
|
|
|
|
TString16 _valore;
|
|
|
|
|
TString16 _valres;
|
|
|
|
|
|
|
|
|
|
TString16 _field_provv;
|
|
|
|
|
TString16 _field_qta, _field_qtaevasa; // Veri campi Quantit<69> e Quantit<69> Evasa
|
|
|
|
|
|
2003-04-22 13:59:34 +00:00
|
|
|
|
int _decrp, _incrp;
|
1996-09-26 15:37:19 +00:00
|
|
|
|
|
1996-08-19 16:04:55 +00:00
|
|
|
|
protected:
|
1996-09-26 15:37:19 +00:00
|
|
|
|
void read_formule();
|
2002-12-20 16:15:03 +00:00
|
|
|
|
void add_formula_if_needed(TConfig& profile, TString& variable,
|
|
|
|
|
const char* varname, const char* formula);
|
1996-08-19 16:04:55 +00:00
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
TObject* dup() const { return new TTipo_riga_documento(codice()); }
|
|
|
|
|
|
|
|
|
|
public:
|
2003-07-30 12:54:07 +00:00
|
|
|
|
const TFilename& profile_name(TFilename& name) const;
|
|
|
|
|
const TString& mask_name(TString& name) const;
|
1996-08-19 16:04:55 +00:00
|
|
|
|
const TString& codice() const { return get("CODTAB");}
|
1996-09-26 15:37:19 +00:00
|
|
|
|
|
1996-08-19 16:04:55 +00:00
|
|
|
|
const TString& descrizione() const { return get("S0"); }
|
|
|
|
|
char tipo() const { return get_char("S7"); }
|
2002-12-20 16:15:03 +00:00
|
|
|
|
|
1996-09-26 15:37:19 +00:00
|
|
|
|
const TString& imponibile() const { return _imponibile;}
|
2002-12-20 16:15:03 +00:00
|
|
|
|
const TString& quant() const { return _quant;}
|
|
|
|
|
const TString& quantevasa() const { return _quantevasa;}
|
|
|
|
|
const TString& field_qta() const { return _field_qta;}
|
|
|
|
|
const TString& field_qtaevasa() const { return _field_qtaevasa;}
|
|
|
|
|
|
|
|
|
|
const TString& provv() const { return _field_provv;}
|
2001-06-25 10:41:20 +00:00
|
|
|
|
const int incr_perc_prezzo() const { return _incrp;}
|
|
|
|
|
const int decr_perc_prezzo() const { return _decrp;}
|
2002-12-20 16:15:03 +00:00
|
|
|
|
|
2000-05-05 15:25:49 +00:00
|
|
|
|
bool formfeed() const { return get_bool("B0"); }
|
2002-05-08 16:25:49 +00:00
|
|
|
|
int detraibilita() const { return get_int("I0"); }
|
|
|
|
|
real perc_indetraibilita() const { return get_real("R0"); }
|
1996-09-26 15:37:19 +00:00
|
|
|
|
|
1998-01-09 09:57:01 +00:00
|
|
|
|
TFormula_documento* first_formula() { return succ_formula(TRUE); }
|
|
|
|
|
TFormula_documento* succ_formula(bool restart = FALSE);
|
1996-08-19 16:04:55 +00:00
|
|
|
|
|
1998-01-09 09:57:01 +00:00
|
|
|
|
int read(const char* tiporig);
|
1996-08-19 16:04:55 +00:00
|
|
|
|
TTipo_riga_documento(const char* tiporig = NULL);
|
|
|
|
|
TTipo_riga_documento(const TRectype& rec);
|
2003-04-22 13:59:34 +00:00
|
|
|
|
virtual ~TTipo_riga_documento() { }
|
1996-08-19 16:04:55 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
|
class TRiga_documento : public TAuto_variable_rectype // velib02
|
1996-08-14 16:32:11 +00:00
|
|
|
|
{
|
2003-09-12 14:56:49 +00:00
|
|
|
|
TDocumento* _doc;
|
1997-08-26 12:38:08 +00:00
|
|
|
|
static long _firm;
|
1996-08-19 16:04:55 +00:00
|
|
|
|
static TAssoc_array _tipi;
|
1996-09-26 15:37:19 +00:00
|
|
|
|
static TAssoc_array _spese;
|
1997-02-03 15:28:53 +00:00
|
|
|
|
static TAssoc_array _ive;
|
1999-04-06 15:34:39 +00:00
|
|
|
|
static TCache_articoli * _articoli;
|
2003-09-12 14:56:49 +00:00
|
|
|
|
static int _iva_calc_mode;
|
1996-09-26 15:37:19 +00:00
|
|
|
|
|
1996-08-14 16:32:11 +00:00
|
|
|
|
protected:
|
1996-09-26 15:37:19 +00:00
|
|
|
|
// @cmember Setta il contenuto del campo <p fieldname> (non tipizzata)
|
|
|
|
|
virtual void put_str(const char* fieldname, const char* val);
|
1996-08-14 16:32:11 +00:00
|
|
|
|
|
1997-08-18 16:06:51 +00:00
|
|
|
|
virtual TRiga_documento & copy(const TRiga_documento & r);
|
1996-08-14 16:32:11 +00:00
|
|
|
|
TObject* dup() const { return new TRiga_documento(*this); }
|
1999-04-06 15:34:39 +00:00
|
|
|
|
virtual void set_variables(TExpression * e) const ;
|
1996-08-14 16:32:11 +00:00
|
|
|
|
|
1997-08-26 12:38:08 +00:00
|
|
|
|
static void test_firm();
|
|
|
|
|
|
1996-08-14 16:32:11 +00:00
|
|
|
|
public:
|
1996-09-26 15:37:19 +00:00
|
|
|
|
void dirty_fields(bool dirty_document = TRUE);
|
|
|
|
|
bool doc_dependent() const;
|
1997-08-05 09:22:43 +00:00
|
|
|
|
int numero() const { return get_int(RDOC_NRIGA); }
|
|
|
|
|
void set_numero(int numero) { put(RDOC_NRIGA, numero);}
|
|
|
|
|
bool is_generata() const { return get_bool(RDOC_GENERATA);}
|
|
|
|
|
void generata(bool on = TRUE) { put(RDOC_GENERATA, on);}
|
1997-06-27 09:21:13 +00:00
|
|
|
|
bool is_merce() const { return tipo().tipo() == 'M';}
|
|
|
|
|
bool is_spese() const { return tipo().tipo() == 'S';}
|
|
|
|
|
bool is_prestazione() const { return tipo().tipo() == 'P';}
|
1998-01-09 09:57:01 +00:00
|
|
|
|
bool is_sconto() const {return tipo().tipo() == 'C';}
|
1997-09-01 14:32:34 +00:00
|
|
|
|
bool is_sconto_perc() const { return get(RDOC_SCONTO).not_empty();}
|
1997-06-27 09:21:13 +00:00
|
|
|
|
bool is_omaggio() const { return tipo().tipo() == 'O';}
|
|
|
|
|
bool is_descrizione() const { return tipo().tipo() == 'D';}
|
|
|
|
|
bool is_articolo() const;
|
1997-08-06 12:31:10 +00:00
|
|
|
|
bool is_checked() const { return get_bool(RDOC_CHECKED);}
|
1998-08-25 18:07:30 +00:00
|
|
|
|
bool is_evadibile() const { return is_merce() || is_omaggio() || is_spese() || is_prestazione(); }
|
2002-10-23 14:14:55 +00:00
|
|
|
|
bool is_evasa() const; // Ritorna vero se la riga <20> evasa
|
1997-08-06 12:31:10 +00:00
|
|
|
|
void checked(bool on = TRUE) { put(RDOC_CHECKED, (bool)on); }
|
1997-08-05 09:22:43 +00:00
|
|
|
|
void unchecked() { checked(FALSE); }
|
2002-07-02 16:21:23 +00:00
|
|
|
|
bool linked() const { return get(RDOC_DACODNUM).not_empty();}
|
|
|
|
|
// @cmember Assegna il documento corrente
|
1996-09-26 15:37:19 +00:00
|
|
|
|
void set_doc(TDocumento * doc) { _doc = doc; }
|
|
|
|
|
const TDocumento & doc() const { CHECK(_doc, "Documento nullo"); return *_doc;}
|
|
|
|
|
|
|
|
|
|
virtual void zero(const char * fieldname);
|
|
|
|
|
virtual void zero(char c = '\0');
|
|
|
|
|
// row -> sheet
|
|
|
|
|
void autoload( TSheet_field& f);
|
|
|
|
|
// sheet -> row
|
|
|
|
|
void autosave( TSheet_field& f);
|
|
|
|
|
|
|
|
|
|
const TTipo_riga_documento & tipo() const;
|
|
|
|
|
const TSpesa_prest & spesa() const;
|
2000-05-05 15:25:49 +00:00
|
|
|
|
static const TCodiceIVA & iva(const char * codice);
|
|
|
|
|
const TCodiceIVA & iva() const {const TString16 cod(get(RDOC_CODIVA)); return iva(cod);}
|
1996-08-14 16:32:11 +00:00
|
|
|
|
|
1997-08-05 09:22:43 +00:00
|
|
|
|
const bool tipo_valido() const { return get(RDOC_TIPORIGA).not_empty(); }
|
|
|
|
|
void set_tipo(const char * tipo) { put(RDOC_TIPORIGA, tipo);}
|
1996-08-19 16:04:55 +00:00
|
|
|
|
bool sola_descrizione() const;
|
|
|
|
|
void forza_sola_descrizione();
|
1996-08-14 16:32:11 +00:00
|
|
|
|
|
1999-10-22 10:00:18 +00:00
|
|
|
|
void set_original_rdoc_key(const TRiga_documento& orig);
|
|
|
|
|
void reset_original_rdoc_key();
|
|
|
|
|
const TRectype* find_original_rdoc() const;
|
1999-04-06 15:34:39 +00:00
|
|
|
|
|
|
|
|
|
virtual TRiga_documento& operator =(const TRiga_documento& r) { return copy(r);}
|
|
|
|
|
virtual TRectype& operator =(const TRectype & r);
|
|
|
|
|
virtual TRectype& operator =(const char * r);
|
1996-08-14 16:32:11 +00:00
|
|
|
|
|
|
|
|
|
bool raggruppabile(const TRiga_documento& r, TToken_string& campi) const;
|
|
|
|
|
TRiga_documento& operator +=(const TRiga_documento& r);
|
|
|
|
|
|
1997-08-05 09:22:43 +00:00
|
|
|
|
void reset_fields(TAuto_variable_rectype& rec) { rec.remove_field(); }
|
|
|
|
|
void set_fields(TAuto_variable_rectype& rec);
|
1996-09-26 15:37:19 +00:00
|
|
|
|
|
1997-08-18 15:24:00 +00:00
|
|
|
|
real prezzo(bool scontato, bool lordo, int ndec = AUTO_DECIMALS) const ;
|
|
|
|
|
real importo(bool scontato , bool lordo, int ndec = AUTO_DECIMALS) const ;
|
1997-09-15 14:30:10 +00:00
|
|
|
|
real sconto() const { return importo(FALSE,FALSE) - importo(TRUE,FALSE); }
|
1997-02-03 15:28:53 +00:00
|
|
|
|
real iva(int ndec) const;
|
1999-05-24 13:34:11 +00:00
|
|
|
|
real imponibile(bool lordo = FALSE) const;
|
2003-09-12 14:56:49 +00:00
|
|
|
|
real imponibile_omaggio(int iva_calc_mode = 1) const;
|
|
|
|
|
real iva_omaggio(int ndec, int iva_calc_mode = 1) const;
|
1997-02-03 15:28:53 +00:00
|
|
|
|
real imposta(bool round = TRUE) const;
|
1997-10-02 16:57:49 +00:00
|
|
|
|
real provvigione(int ndec = AUTO_DECIMALS) const;
|
1996-09-26 15:37:19 +00:00
|
|
|
|
|
2002-12-20 16:15:03 +00:00
|
|
|
|
const TString& field_qta() const;
|
|
|
|
|
const TString& field_qtaevasa() const;
|
|
|
|
|
real quantita() const;
|
|
|
|
|
real qtaevasa() const;
|
1998-08-25 18:07:30 +00:00
|
|
|
|
real qtaresidua() const;
|
|
|
|
|
real valore(bool totale, int ndec) const;
|
2002-05-08 16:25:49 +00:00
|
|
|
|
const TString & codice_commessa() const;
|
|
|
|
|
const TString & fase_commessa() const;
|
1999-04-06 15:34:39 +00:00
|
|
|
|
TArticolo_giacenza * articolo() const;
|
|
|
|
|
|
1997-08-05 09:22:43 +00:00
|
|
|
|
TRiga_documento(TDocumento* doc, const char* tipo = NULL);
|
1997-08-06 12:31:10 +00:00
|
|
|
|
TRiga_documento(const TRiga_documento & row);
|
1996-09-26 15:37:19 +00:00
|
|
|
|
TRiga_documento(const TRiga_documento& rec, TDocumento* doc,
|
1997-08-05 09:22:43 +00:00
|
|
|
|
const char* tipo = NULL);
|
1996-09-26 15:37:19 +00:00
|
|
|
|
virtual ~TRiga_documento() {}
|
1996-08-14 16:32:11 +00:00
|
|
|
|
};
|
|
|
|
|
|
1997-02-24 13:20:27 +00:00
|
|
|
|
enum TTipo_importo { _lordo, _netto, _imposta };
|
|
|
|
|
|
1997-08-21 16:47:14 +00:00
|
|
|
|
class TRiepilogo_iva : public TObject
|
|
|
|
|
{
|
2000-05-05 15:25:49 +00:00
|
|
|
|
TCodiceIVA _codiva;
|
1997-08-21 16:47:14 +00:00
|
|
|
|
real _imp;
|
|
|
|
|
real _imp_spese;
|
1998-04-30 14:04:19 +00:00
|
|
|
|
real _imp_spese_row;
|
1997-08-21 16:47:14 +00:00
|
|
|
|
real _iva;
|
|
|
|
|
real _iva_spese;
|
1997-09-01 14:32:34 +00:00
|
|
|
|
real _sconto_perc;
|
|
|
|
|
real _sconto_imp;
|
|
|
|
|
real _iva_sconto;
|
2002-12-20 16:15:03 +00:00
|
|
|
|
byte _tipo;
|
1997-08-21 16:47:14 +00:00
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
virtual TObject* dup() const { return new TRiepilogo_iva(*this); }
|
|
|
|
|
virtual TRiepilogo_iva & copy(const TRiepilogo_iva & a);
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
real imponibile(bool spese = TRUE) const { return _imp + (spese ? _imp_spese : ZERO);} // Imponibile
|
|
|
|
|
real imposta(bool spese = TRUE) const { return _iva + (spese ? _iva_spese : ZERO);} // Iva
|
|
|
|
|
real & imp() { return _imp;};
|
|
|
|
|
real & imp_spese() { return _imp_spese;};
|
1998-04-30 14:04:19 +00:00
|
|
|
|
real & imp_spese_row() { return _imp_spese_row;};
|
1997-08-21 16:47:14 +00:00
|
|
|
|
real & iva() { return _iva;};
|
|
|
|
|
real & iva_spese() { return _iva_spese;};
|
1997-09-01 14:32:34 +00:00
|
|
|
|
real & iva_sconto() { return _iva_sconto;};
|
|
|
|
|
real & sconto_perc() { return _sconto_perc; }
|
|
|
|
|
real & sconto_imp () { return _sconto_imp; }
|
2000-05-05 15:25:49 +00:00
|
|
|
|
const TCodiceIVA & cod_iva() const { return _codiva;}
|
1997-08-21 16:47:14 +00:00
|
|
|
|
byte tipo(){ return _tipo;}// Tipo (Vedi opzioni per la selzione di filtro nella validate())
|
|
|
|
|
TRiepilogo_iva& operator = (const TRiepilogo_iva & a) {return copy(a);}
|
2000-05-05 15:25:49 +00:00
|
|
|
|
TRiepilogo_iva(const TCodiceIVA & codiva);
|
1997-08-21 16:47:14 +00:00
|
|
|
|
TRiepilogo_iva(const TRiepilogo_iva & a) {copy(a);}
|
|
|
|
|
TRiepilogo_iva() : _tipo(0) {}
|
|
|
|
|
~TRiepilogo_iva() {};
|
|
|
|
|
};
|
1997-10-29 11:08:40 +00:00
|
|
|
|
|
|
|
|
|
class TAgente ;
|
|
|
|
|
|
1997-08-18 16:06:51 +00:00
|
|
|
|
class TDocumento : public TMultiple_rectype // velib03
|
1997-06-12 16:26:22 +00:00
|
|
|
|
{
|
|
|
|
|
TRecfield *_tipocf;
|
|
|
|
|
TRecfield *_codcf;
|
|
|
|
|
TRecfield *_cod_occas;
|
1997-08-28 17:11:17 +00:00
|
|
|
|
char _stato_originale;
|
1996-08-08 15:57:44 +00:00
|
|
|
|
|
1997-06-12 16:26:22 +00:00
|
|
|
|
TCli_for _cli_for;
|
|
|
|
|
TOccasionale _occas;
|
|
|
|
|
TPagamento _pag;
|
1998-11-04 18:04:26 +00:00
|
|
|
|
TAssoc_array _tabella_iva; // tabella di imponibili ed imposte
|
|
|
|
|
|
|
|
|
|
TProvvigioni_agente* _provv_agente;
|
1999-07-16 14:59:11 +00:00
|
|
|
|
TString16 _old_agente; // Agente originale
|
|
|
|
|
|
1996-10-21 15:52:20 +00:00
|
|
|
|
TRiga_documento * _sconto; // Riga per lo sconto di testata
|
1997-02-03 15:28:53 +00:00
|
|
|
|
TRiga_documento * _esenzione; // Riga per l' esenzione iva
|
1999-06-18 15:35:05 +00:00
|
|
|
|
|
|
|
|
|
bool _dirty_deny;
|
1998-11-04 18:04:26 +00:00
|
|
|
|
|
|
|
|
|
static TAssoc_array _tipi;
|
|
|
|
|
static TAssoc_array _numerazioni;
|
|
|
|
|
static long _firm;
|
|
|
|
|
static TString16 _codiva_spese;
|
|
|
|
|
static TString16 _codiva_bolli;
|
|
|
|
|
static short _has_mag;
|
|
|
|
|
static short _has_stat_ven;
|
|
|
|
|
static short _has_provv;
|
1999-07-16 14:59:11 +00:00
|
|
|
|
static TCodgiac_livelli *_livelli;
|
1996-09-26 15:37:19 +00:00
|
|
|
|
|
1996-08-13 15:50:55 +00:00
|
|
|
|
protected:
|
1998-11-04 18:04:26 +00:00
|
|
|
|
virtual TRectype * new_body_record(int logicnum = 0)
|
|
|
|
|
{ return new TRiga_documento(this); }
|
1997-08-18 16:06:51 +00:00
|
|
|
|
|
1996-10-21 15:52:20 +00:00
|
|
|
|
TRiga_documento & row(int index);
|
1998-08-25 18:07:30 +00:00
|
|
|
|
const TRiga_documento& physical_row(int index) const;
|
|
|
|
|
|
1996-08-13 13:59:21 +00:00
|
|
|
|
long get_next_key(char provv, int anno, const char* codnum) const;
|
1996-09-26 15:37:19 +00:00
|
|
|
|
virtual void put_str(const char* fieldname, const char* val);
|
1999-06-18 15:35:05 +00:00
|
|
|
|
virtual const TString & get_str(const char* fieldname) const ;
|
|
|
|
|
|
1997-08-18 16:06:51 +00:00
|
|
|
|
long renum_ndoc(long numdoc = 0);
|
|
|
|
|
virtual bool key_complete() { return numero() > 0; }
|
|
|
|
|
virtual bool renum() { return renum_ndoc() > 0;}
|
1996-10-21 15:52:20 +00:00
|
|
|
|
void set_riga_sconto();
|
1997-06-12 16:26:22 +00:00
|
|
|
|
int write_rewrite(TBaseisamfile & f, bool re) const;
|
1997-08-18 16:06:51 +00:00
|
|
|
|
virtual TDocumento & copy(const TDocumento & d);
|
1998-08-25 18:07:30 +00:00
|
|
|
|
virtual TObject* dup() const { return new TDocumento(*this); }
|
1999-10-22 10:00:18 +00:00
|
|
|
|
void calc_iva_fattura_commerciale();
|
1997-08-21 16:47:14 +00:00
|
|
|
|
void update_tabella_iva();
|
|
|
|
|
void dirty_tabella_iva() { _tabella_iva.destroy();}
|
|
|
|
|
static void test_firm();
|
1998-11-04 18:04:26 +00:00
|
|
|
|
|
|
|
|
|
void init();
|
1997-09-26 15:22:39 +00:00
|
|
|
|
void check_modules();
|
1999-04-06 15:34:39 +00:00
|
|
|
|
virtual void set_variables(TExpression * e) const ;
|
1999-10-22 10:00:18 +00:00
|
|
|
|
int set_row_ids();
|
|
|
|
|
|
1999-04-06 15:34:39 +00:00
|
|
|
|
public:
|
2002-07-02 16:21:23 +00:00
|
|
|
|
const TString& codiva_spese() const ;
|
|
|
|
|
const TString& codiva_bolli() const ;
|
|
|
|
|
|
1999-07-16 14:59:11 +00:00
|
|
|
|
TCodgiac_livelli & livelli() const ;
|
1996-09-26 15:37:19 +00:00
|
|
|
|
void dirty_fields();
|
|
|
|
|
|
1997-08-21 16:47:14 +00:00
|
|
|
|
TAssoc_array & tabella_iva() { update_tabella_iva(); return _tabella_iva; }
|
1997-06-12 16:26:22 +00:00
|
|
|
|
TCli_for & clifor() const;
|
1997-10-29 11:08:40 +00:00
|
|
|
|
TOccasionale & occas() const;
|
|
|
|
|
const TAgente & agente() const;
|
2002-12-20 16:15:03 +00:00
|
|
|
|
const TString & riferimento(TString& rif) const { return tipo().riferimento(*this, rif); }
|
2002-05-31 10:35:40 +00:00
|
|
|
|
|
1999-10-22 10:00:18 +00:00
|
|
|
|
virtual TRecord_array& body(int logicnum = 0) const;
|
1997-08-06 12:31:10 +00:00
|
|
|
|
virtual TDocumento & operator =(const TDocumento & d) {return copy(d);}
|
1996-09-26 15:37:19 +00:00
|
|
|
|
virtual TRectype & operator =(const TRectype & r);
|
|
|
|
|
virtual TRectype & operator =(const char * r);
|
|
|
|
|
virtual void zero(const char * fieldname);
|
1997-08-18 16:06:51 +00:00
|
|
|
|
virtual void zero(char c = '\0') { TMultiple_rectype::zero(c); }
|
1997-06-03 10:29:42 +00:00
|
|
|
|
|
1997-08-18 16:06:51 +00:00
|
|
|
|
int physical_rows() const { return body().rows(); }
|
1997-06-03 10:29:42 +00:00
|
|
|
|
int rows() const { return physical_rows() + ((_sconto != NULL) ? 1 : 0) + ((_esenzione != NULL) ? 1 : 0); }
|
1996-10-21 15:52:20 +00:00
|
|
|
|
const TRiga_documento& operator[](int index) const { return (const TRiga_documento&)((TDocumento *)this)->row(index); }
|
|
|
|
|
TRiga_documento& operator[](int index) { return (TRiga_documento&)row(index); }
|
1999-10-22 10:00:18 +00:00
|
|
|
|
const TRiga_documento* get_row_id(long id) const;
|
1996-08-08 09:24:17 +00:00
|
|
|
|
|
1996-09-26 15:37:19 +00:00
|
|
|
|
TRiga_documento& insert_row(int row, const char *tipo = NULL);
|
|
|
|
|
TRiga_documento& new_row(const char *tipo = NULL);
|
1997-06-12 16:26:22 +00:00
|
|
|
|
virtual int read(TBaseisamfile& f, word op = _isequal, word lockop = _nolock);
|
|
|
|
|
virtual int write(TBaseisamfile& f) const { return write_rewrite(f, FALSE); }
|
|
|
|
|
virtual int rewrite(TBaseisamfile& f) const { return write_rewrite(f, TRUE); }
|
1997-06-13 14:01:20 +00:00
|
|
|
|
virtual int remove(TBaseisamfile& f) const;
|
1997-06-12 16:26:22 +00:00
|
|
|
|
|
|
|
|
|
int read(char provv, int anno, const char* codnum, long numdoc, word op = _isequal, word lockop = _nolock);
|
|
|
|
|
int read(const TRectype& rec, word op = _isequal, word lockop = _nolock) { *this = rec; return read(op, lockop); }
|
|
|
|
|
int read(word op = _isequal, word lockop = _nolock) { TLocalisamfile f(LF_DOC); return read(f, op, lockop);}
|
1996-08-08 09:24:17 +00:00
|
|
|
|
|
1997-06-12 16:26:22 +00:00
|
|
|
|
int write(bool re = FALSE) const { TLocalisamfile f(LF_DOC); return write_rewrite(f, re);}
|
1996-08-08 09:24:17 +00:00
|
|
|
|
int rewrite() const { return write(TRUE); }
|
1997-06-12 16:26:22 +00:00
|
|
|
|
int remove() const { TLocalisamfile f(LF_DOC); return remove(f);}
|
2000-05-05 15:25:49 +00:00
|
|
|
|
int decimals(bool price = FALSE) const;
|
1997-10-13 15:22:11 +00:00
|
|
|
|
|
1999-06-18 15:35:05 +00:00
|
|
|
|
void flush_rows();
|
|
|
|
|
|
1997-10-23 09:21:54 +00:00
|
|
|
|
TProvvigioni_agente& calc_provvigioni(const bool generata = TRUE);
|
1997-10-13 15:22:11 +00:00
|
|
|
|
int write_provvigioni() { return calc_provvigioni().write();}
|
1996-08-30 14:31:57 +00:00
|
|
|
|
|
1996-08-14 16:32:11 +00:00
|
|
|
|
char tipo_numerazione() const { return get_char("PROVV"); }
|
|
|
|
|
int anno() const { return get_int("ANNO"); }
|
1997-08-18 15:24:00 +00:00
|
|
|
|
const TString& numerazione() const { return get("CODNUM"); }
|
1996-08-14 16:32:11 +00:00
|
|
|
|
long numero() const { return get_long("NDOC"); }
|
|
|
|
|
TDate data() const { return get_date("DATADOC"); }
|
1997-08-18 15:24:00 +00:00
|
|
|
|
bool in_valuta() const;
|
1996-09-26 15:37:19 +00:00
|
|
|
|
const TString& valuta() const { return get("CODVAL"); }
|
1997-08-18 15:24:00 +00:00
|
|
|
|
real cambio() const { return get_real("CAMBIO"); }
|
1997-06-03 10:29:42 +00:00
|
|
|
|
bool tipo_valido() const { return get("TIPODOC").not_empty(); }
|
1997-08-04 14:15:45 +00:00
|
|
|
|
static const TTipo_documento& tipo(const char * tipodoc);
|
1996-08-13 13:59:21 +00:00
|
|
|
|
const TTipo_documento& tipo() const;
|
2003-02-25 14:39:02 +00:00
|
|
|
|
static const TCodice_numerazione& codice_numerazione(const char * numerazione);
|
1997-08-18 15:24:00 +00:00
|
|
|
|
const TCodice_numerazione& codice_numerazione() const;
|
1996-09-26 15:37:19 +00:00
|
|
|
|
void set_tipo(const char * tipo) { head().put("TIPODOC", tipo);}
|
1997-08-18 15:24:00 +00:00
|
|
|
|
bool provvisorio() const { return get_char("PROVV") == 'P'; }
|
1996-08-14 16:32:11 +00:00
|
|
|
|
char stato() const { return get_char("STATO"); }
|
|
|
|
|
void stato(char s) { put("STATO", s); }
|
2002-05-08 16:25:49 +00:00
|
|
|
|
const TString & codice_commessa() const { return get(DOC_CODCMS);}
|
|
|
|
|
const TString & fase_commessa() const { return get(DOC_FASCMS);}
|
1997-08-18 16:06:51 +00:00
|
|
|
|
bool modificabile() const;
|
|
|
|
|
bool cancellabile() const;
|
|
|
|
|
bool stampabile() const;
|
2000-05-05 15:25:49 +00:00
|
|
|
|
bool bloccato() const;
|
1999-10-22 10:00:18 +00:00
|
|
|
|
|
1996-08-14 16:32:11 +00:00
|
|
|
|
bool raggruppabile() const { return get_bool("RAGGR"); }
|
|
|
|
|
bool raggruppabile(const TDocumento& doc, TToken_string& campi) const;
|
1997-06-12 16:26:22 +00:00
|
|
|
|
|
|
|
|
|
char tipocf() const {return *(const char *) (*_tipocf);}
|
|
|
|
|
long codcf() const {return (long) *_codcf;}
|
|
|
|
|
const char * cod_occas() const { return (const char *) *_cod_occas; }
|
2002-09-13 14:06:05 +00:00
|
|
|
|
|
1996-08-13 13:59:21 +00:00
|
|
|
|
static void set_key(TRectype& rec, char provv, int anno, const char* codnum, long numdoc);
|
|
|
|
|
static void copy_data(TRectype& dst, const TRectype& src);
|
2002-09-13 14:06:05 +00:00
|
|
|
|
static void copy_data(TRiga_documento& dst, const TRiga_documento& src);
|
1997-06-03 10:29:42 +00:00
|
|
|
|
void copy_contents(const TDocumento & src);
|
1996-09-26 15:37:19 +00:00
|
|
|
|
|
|
|
|
|
void set_fields(TAuto_variable_rectype & rec);
|
1999-04-06 15:34:39 +00:00
|
|
|
|
void set_riga_esenzione();
|
|
|
|
|
|
1999-06-18 15:35:05 +00:00
|
|
|
|
void iva_esente(TString & codiva_es) const;
|
1997-02-24 13:20:27 +00:00
|
|
|
|
real spese_incasso(real & imp, int ndec, TTipo_importo netto = _lordo) const ;
|
|
|
|
|
real bolli(real & imp, int ndec, TTipo_importo netto = _lordo) const ;
|
1997-08-18 15:24:00 +00:00
|
|
|
|
|
|
|
|
|
real imponibile(bool spese = FALSE, int ndec = AUTO_DECIMALS) const;
|
|
|
|
|
real imposta(bool spese = FALSE, int ndec = AUTO_DECIMALS) const;
|
1996-09-26 15:37:19 +00:00
|
|
|
|
real totale_doc() const;
|
1996-10-03 17:30:43 +00:00
|
|
|
|
real totale_netto() const;
|
1996-09-26 15:37:19 +00:00
|
|
|
|
real basesconto() const;
|
|
|
|
|
real spese() const;
|
1997-10-02 16:57:49 +00:00
|
|
|
|
real provvigione(int ndec = AUTO_DECIMALS) const;
|
1998-08-25 18:07:30 +00:00
|
|
|
|
real valore(bool totale, int ndec = AUTO_DECIMALS) const;
|
1996-09-26 15:37:19 +00:00
|
|
|
|
|
|
|
|
|
TPagamento & pagamento();
|
1997-02-03 15:28:53 +00:00
|
|
|
|
|
|
|
|
|
void update_spese_aut(TString_array & spese, bool preserve_old = FALSE, TSheet_field * sh = NULL);
|
1999-04-06 15:34:39 +00:00
|
|
|
|
real calc_conai_qta(int type);
|
|
|
|
|
void update_conai();
|
1997-02-03 15:28:53 +00:00
|
|
|
|
|
2002-07-02 16:21:23 +00:00
|
|
|
|
bool is_generic() const { return tipo_valido() && tipo().is_generic(); }
|
1997-06-03 10:29:42 +00:00
|
|
|
|
bool is_fattura() const { return tipo_valido() && tipo().is_fattura(); }
|
|
|
|
|
bool is_bolla() const { return tipo_valido() && tipo().is_bolla(); }
|
|
|
|
|
bool is_ordine() const { return tipo_valido() && tipo().is_ordine(); }
|
1998-08-25 18:07:30 +00:00
|
|
|
|
bool is_evaso() const;
|
1999-04-06 15:34:39 +00:00
|
|
|
|
bool is_nota_credito() const;
|
1998-08-25 18:07:30 +00:00
|
|
|
|
|
1996-08-08 15:57:44 +00:00
|
|
|
|
TDocumento ();
|
1997-08-06 12:31:10 +00:00
|
|
|
|
TDocumento (const TDocumento & d);
|
1998-08-25 18:07:30 +00:00
|
|
|
|
TDocumento(char provv, int anno, const char* codnum, long numdoc);
|
|
|
|
|
TDocumento(const TRectype& doc);
|
1997-02-03 15:28:53 +00:00
|
|
|
|
virtual ~TDocumento();
|
|
|
|
|
};
|
1996-08-08 09:24:17 +00:00
|
|
|
|
|
2000-05-05 15:25:49 +00:00
|
|
|
|
class TCurrency_documento : public TCurrency
|
|
|
|
|
{
|
|
|
|
|
protected:
|
|
|
|
|
void copy(const TCurrency& cur) {TCurrency::copy(cur); }
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
const TCurrency_documento& operator=(const TCurrency_documento& cur) { copy(cur); return *this; }
|
|
|
|
|
const TCurrency_documento& operator=(const TCurrency& cur) { copy(cur); return *this; }
|
|
|
|
|
|
|
|
|
|
TCurrency_documento(const TCurrency& cur) { copy(cur); }
|
|
|
|
|
TCurrency_documento(const TCurrency_documento& cur) { copy(cur); }
|
|
|
|
|
TCurrency_documento(const real& num, const TDocumento &doc, bool price = FALSE);
|
|
|
|
|
virtual ~TCurrency_documento() { }
|
|
|
|
|
};
|
|
|
|
|
|
1998-11-04 18:04:26 +00:00
|
|
|
|
class TCodgiac_livelli;
|
|
|
|
|
|
1997-06-12 16:26:22 +00:00
|
|
|
|
class TDocumento_mask : public TVariable_mask // velib06
|
1996-09-26 15:37:19 +00:00
|
|
|
|
{
|
1998-08-25 18:07:30 +00:00
|
|
|
|
int _progs_page; // pagina in cui cominciano i progressivi
|
|
|
|
|
int _last_prog; // numero dell'ultimo progressivo
|
|
|
|
|
TSheet_field* _sheet; // Spreadsheet
|
|
|
|
|
TDocumento _doc; // documento
|
1998-11-04 18:04:26 +00:00
|
|
|
|
TCodgiac_livelli * _livelli_giac;// livelli di giacenza
|
1998-08-25 18:07:30 +00:00
|
|
|
|
|
|
|
|
|
TCond_vendita* _condv; // condizioni di vendita
|
1998-11-04 18:04:26 +00:00
|
|
|
|
TAssoc_array _maskriga;// Maschere delle righe
|
1998-08-25 18:07:30 +00:00
|
|
|
|
|
|
|
|
|
bool _ges_mag, _ges_dep;
|
|
|
|
|
TString _std_mag, _std_dep;
|
1996-09-26 15:37:19 +00:00
|
|
|
|
|
|
|
|
|
protected:
|
2001-05-02 13:40:49 +00:00
|
|
|
|
void update_progs();
|
1996-09-26 15:37:19 +00:00
|
|
|
|
virtual void next_page(int p);
|
2001-05-02 13:40:49 +00:00
|
|
|
|
virtual bool stop_run(KEY key);
|
1998-08-25 18:07:30 +00:00
|
|
|
|
void sconto_testa2mask();
|
|
|
|
|
void spese2mask();
|
|
|
|
|
|
1998-11-04 18:04:26 +00:00
|
|
|
|
void configura_sheet(TSheet_field& sheet);
|
1998-08-25 18:07:30 +00:00
|
|
|
|
static bool ss_notify(TSheet_field& ss, int r, KEY key);
|
1999-10-22 10:00:18 +00:00
|
|
|
|
static bool ss_handler(TMask_field& f, KEY key);
|
1998-08-25 18:07:30 +00:00
|
|
|
|
static TMask* ss_getmask(int numriga, TMask& fullmask);
|
|
|
|
|
|
|
|
|
|
static bool occas_handler( TMask_field& f, KEY key );
|
|
|
|
|
static bool occas_code_handler( TMask_field& f, KEY key );
|
|
|
|
|
static bool clifo_handler( TMask_field& f, KEY key );
|
|
|
|
|
static bool print_handler( TMask_field& f, KEY key );
|
|
|
|
|
static bool elabora_handler( TMask_field& f, KEY key );
|
|
|
|
|
static bool codlist_handler( TMask_field& f, KEY key );
|
|
|
|
|
static bool codcont_handler( TMask_field& f, KEY key );
|
|
|
|
|
static bool codcamp_handler( TMask_field& f, KEY key );
|
2000-05-05 15:25:49 +00:00
|
|
|
|
// static bool controeuro_handler( TMask_field& f, KEY key );
|
2003-02-25 14:39:02 +00:00
|
|
|
|
static bool datacambio_handler( TMask_field& f, KEY key );
|
2000-05-05 15:25:49 +00:00
|
|
|
|
static bool codval_handler( TMask_field& f, KEY key );
|
1998-08-25 18:07:30 +00:00
|
|
|
|
void user_set_handler( int fieldid, int index);
|
1996-09-26 15:37:19 +00:00
|
|
|
|
|
1998-11-04 18:04:26 +00:00
|
|
|
|
void reset_masks(const TString& tipo_doc);
|
|
|
|
|
|
1996-09-26 15:37:19 +00:00
|
|
|
|
public:
|
2000-10-03 13:45:12 +00:00
|
|
|
|
TVariable_mask* riga_mask(int numriga);
|
1996-09-26 15:37:19 +00:00
|
|
|
|
virtual bool on_key(KEY key);
|
1997-06-12 16:26:22 +00:00
|
|
|
|
|
1998-08-25 18:07:30 +00:00
|
|
|
|
TDocumento& doc() { return _doc; }
|
|
|
|
|
const TDocumento& doc() const { return _doc; }
|
|
|
|
|
TCond_vendita & condv() const;
|
|
|
|
|
|
|
|
|
|
void occ2mask();
|
|
|
|
|
void cli2mask();
|
1998-11-04 18:04:26 +00:00
|
|
|
|
void doc2mask(bool reload_clifo = TRUE);
|
1998-08-25 18:07:30 +00:00
|
|
|
|
void mask2doc();
|
|
|
|
|
|
1999-04-26 15:58:05 +00:00
|
|
|
|
void update_giacenza();
|
2002-05-08 16:25:49 +00:00
|
|
|
|
|
|
|
|
|
const TString& stdmag() const { return _std_mag; }
|
|
|
|
|
const TString& stddep() const { return _std_dep; }
|
1999-04-26 15:58:05 +00:00
|
|
|
|
|
2002-05-31 10:35:40 +00:00
|
|
|
|
|
1998-08-25 18:07:30 +00:00
|
|
|
|
TSheet_field& sheet() const { return *_sheet; }
|
1998-11-04 18:04:26 +00:00
|
|
|
|
TCodgiac_livelli& livelli() const { return *_livelli_giac; }
|
2003-09-24 14:53:31 +00:00
|
|
|
|
static bool anno_handler( TMask_field& f, KEY key);
|
1998-08-25 18:07:30 +00:00
|
|
|
|
static bool num_handler( TMask_field& f, KEY key );
|
|
|
|
|
static bool tip_handler( TMask_field& f, KEY key );
|
1999-10-22 10:00:18 +00:00
|
|
|
|
static bool numdocrif_search_handler( TMask_field& f, KEY key );
|
2000-10-03 13:45:12 +00:00
|
|
|
|
static bool datadocrif_handler(TMask_field& f, KEY key);
|
1998-08-25 18:07:30 +00:00
|
|
|
|
|
2002-07-02 16:21:23 +00:00
|
|
|
|
void highlight(COLOR high_back_color, COLOR high_color);
|
|
|
|
|
|
1998-08-25 18:07:30 +00:00
|
|
|
|
TDocumento_mask(const char* tipodoc);
|
|
|
|
|
virtual ~TDocumento_mask();
|
1996-09-26 15:37:19 +00:00
|
|
|
|
};
|
|
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
|
class TLista_documenti : public TObject // velib04
|
1996-08-09 14:08:58 +00:00
|
|
|
|
{
|
|
|
|
|
TArray _documenti;
|
|
|
|
|
|
1996-08-13 13:59:21 +00:00
|
|
|
|
protected:
|
|
|
|
|
const TDocumento& doc(int n) const { return (const TDocumento&)_documenti[n]; }
|
|
|
|
|
TDate num2date(char provv, int anno, const char* codnum, long num) const;
|
|
|
|
|
|
1996-08-09 14:08:58 +00:00
|
|
|
|
public:
|
1996-08-30 14:31:57 +00:00
|
|
|
|
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);
|
1996-08-13 13:59:21 +00:00
|
|
|
|
int write(bool re = FALSE) const;
|
|
|
|
|
int rewrite() const { return write(TRUE); }
|
|
|
|
|
|
|
|
|
|
int add(TDocumento* doc) { return _documenti.add(doc); }
|
1998-08-25 18:07:30 +00:00
|
|
|
|
int add(const TDocumento& doc) { return _documenti.add(doc); }
|
2000-10-03 13:45:12 +00:00
|
|
|
|
int destroy(int i, bool pack = TRUE) { return _documenti.destroy(i, pack); }
|
1996-08-09 14:08:58 +00:00
|
|
|
|
|
1996-08-13 13:59:21 +00:00
|
|
|
|
const TDocumento& operator[] (int n) const { return doc(n); }
|
1996-08-09 14:08:58 +00:00
|
|
|
|
TDocumento& operator[] (int n) { return (TDocumento&)_documenti[n]; }
|
|
|
|
|
int items() const { return _documenti.items(); }
|
|
|
|
|
|
|
|
|
|
TLista_documenti() { }
|
1998-08-25 18:07:30 +00:00
|
|
|
|
virtual ~TLista_documenti() {};
|
1996-08-09 14:08:58 +00:00
|
|
|
|
};
|
|
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
|
class TLista_clifo : public TObject // velib04
|
1996-08-08 09:24:17 +00:00
|
|
|
|
{
|
1996-08-08 15:57:44 +00:00
|
|
|
|
class TClifo : public TObject
|
1996-08-08 09:24:17 +00:00
|
|
|
|
{
|
|
|
|
|
long _codice;
|
|
|
|
|
long _agente;
|
|
|
|
|
long _zona;
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
void zero() { _codice = _agente = _zona = 0L; }
|
1996-08-13 13:59:21 +00:00
|
|
|
|
void init(const TRectype& rec, const TRectype& ven);
|
1996-08-08 15:57:44 +00:00
|
|
|
|
bool read(char tipo, long cod);
|
1996-08-08 09:24:17 +00:00
|
|
|
|
|
|
|
|
|
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; }
|
|
|
|
|
|
1996-08-08 15:57:44 +00:00
|
|
|
|
TClifo() { zero(); }
|
|
|
|
|
TClifo(char tipo, long cod) { read(tipo, cod); }
|
1996-08-21 15:30:23 +00:00
|
|
|
|
TClifo(const TRectype& rec, const TRectype& ven) { init(rec, ven); }
|
|
|
|
|
TClifo(const TRectype& rec);
|
1996-08-08 15:57:44 +00:00
|
|
|
|
virtual ~TClifo() { }
|
1996-08-08 09:24:17 +00:00
|
|
|
|
};
|
|
|
|
|
|
1996-08-08 15:57:44 +00:00
|
|
|
|
TArray _clifo;
|
1996-08-08 09:24:17 +00:00
|
|
|
|
|
|
|
|
|
protected:
|
1996-08-08 15:57:44 +00:00
|
|
|
|
virtual char tipo() const pure;
|
|
|
|
|
const TClifo& clifo(int n) const { return (TClifo&)_clifo[n]; }
|
1996-08-08 09:24:17 +00:00
|
|
|
|
|
|
|
|
|
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();
|
|
|
|
|
|
2000-10-03 13:45:12 +00:00
|
|
|
|
int leggi(long dc, long ac, long da = 0, long aa = 0, const char * dz = "", const char * az = "");
|
1996-08-08 09:24:17 +00:00
|
|
|
|
|
1996-08-08 15:57:44 +00:00
|
|
|
|
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() { }
|
|
|
|
|
};
|
|
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
|
class TLista_clienti : public TLista_clifo
|
1996-08-08 15:57:44 +00:00
|
|
|
|
{
|
|
|
|
|
protected:
|
|
|
|
|
virtual char tipo() const { return 'C'; }
|
|
|
|
|
};
|
1996-08-08 09:24:17 +00:00
|
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
|
class TLista_fornitori : public TLista_clifo
|
1996-08-08 15:57:44 +00:00
|
|
|
|
{
|
|
|
|
|
protected:
|
|
|
|
|
virtual char tipo() const { return 'F'; }
|
1996-08-08 09:24:17 +00:00
|
|
|
|
};
|
1997-06-03 10:29:42 +00:00
|
|
|
|
|
|
|
|
|
enum TTipo_elaborazione {_esterna, _consegna_ordini, _fatturazione_bolle, _contabilizzazione, _copia_documento, _generazione_effetti };
|
1996-08-08 09:24:17 +00:00
|
|
|
|
|
1999-07-16 14:59:11 +00:00
|
|
|
|
class TParametri_elaborazione : public TObject // velib04
|
|
|
|
|
{
|
1999-10-22 10:00:18 +00:00
|
|
|
|
TAssoc_array _par;
|
1999-07-16 14:59:11 +00:00
|
|
|
|
|
|
|
|
|
public:
|
1999-10-22 10:00:18 +00:00
|
|
|
|
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);}
|
|
|
|
|
|
1999-07-16 14:59:11 +00:00
|
|
|
|
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() { }
|
|
|
|
|
};
|
|
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
|
class TElaborazione : public TRectype // velib04
|
1996-08-13 13:59:21 +00:00
|
|
|
|
{
|
1999-10-22 10:00:18 +00:00
|
|
|
|
TParametri_elaborazione _parms;
|
1998-08-25 18:07:30 +00:00
|
|
|
|
|
1996-08-13 13:59:21 +00:00
|
|
|
|
protected:
|
|
|
|
|
int read(const char* cod);
|
|
|
|
|
|
|
|
|
|
public:
|
2000-05-05 15:25:49 +00:00
|
|
|
|
enum { _max_tipi_doc_elab = 10 };
|
1996-08-14 16:32:11 +00:00
|
|
|
|
const TString& codice() const { return get("CODTAB"); }
|
1997-08-27 13:28:15 +00:00
|
|
|
|
const TString& descrizione() const { return get("S0"); }
|
1997-06-03 10:29:42 +00:00
|
|
|
|
const TTipo_elaborazione tipo() const { return (TTipo_elaborazione) get_int("I0"); }
|
1996-08-14 16:32:11 +00:00
|
|
|
|
|
|
|
|
|
bool doc_uguale(int u) const { return get("S1")[u] == 'X'; }
|
|
|
|
|
bool riga_uguale(int u) const { return get("S1")[40+u] == 'X'; }
|
2000-05-05 15:25:49 +00:00
|
|
|
|
|
1996-08-14 16:32:11 +00:00
|
|
|
|
bool raggruppa_righe() const { return get_bool("B0"); }
|
|
|
|
|
bool gestione_riferimenti() const { return get_bool("B1"); }
|
|
|
|
|
bool riferimenti_in_testa() const { return get_bool("B2"); }
|
|
|
|
|
bool ignora_descrizioni() const { return get_bool("B3"); }
|
2000-05-05 15:25:49 +00:00
|
|
|
|
char tipo_numerazione() const { return get_bool("B4") ? 'P' : 'D'; }
|
|
|
|
|
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"); }
|
2002-02-26 16:20:19 +00:00
|
|
|
|
bool usa_doc_rif() const { return get_bool("B8"); }
|
1997-06-03 10:29:42 +00:00
|
|
|
|
|
2000-05-05 15:25:49 +00:00
|
|
|
|
int intestazioni_sheet() const { return get_int("I1"); }
|
|
|
|
|
|
1999-04-26 15:58:05 +00:00
|
|
|
|
const TString& codice_numerazione_iniziale() const { return get("S5"); }
|
1998-06-10 16:38:58 +00:00
|
|
|
|
const TString tipo_iniziale(int i) const { return get("S2").smid(i*4, 4).rtrim(); }
|
1998-08-25 18:07:30 +00:00
|
|
|
|
const char stato_iniziale(int i) const { return i < 5 ? get("S7")[i] : get("S10")[i - 5]; }
|
1997-06-03 10:29:42 +00:00
|
|
|
|
const TString& tipo_finale() const { return get("S8"); }
|
1998-11-04 18:04:26 +00:00
|
|
|
|
const TString& stato_finale_doc_iniziale() const { return get("S4"); }
|
1997-06-03 10:29:42 +00:00
|
|
|
|
const TString& stato_finale() const { return get("S9"); }
|
1996-08-14 16:32:11 +00:00
|
|
|
|
|
|
|
|
|
const TString& codice_numerazione_finale() const { return get("S6"); }
|
1999-04-26 15:58:05 +00:00
|
|
|
|
const TString& applicazione_esterna() const { return get("S3"); }
|
1999-07-16 14:59:11 +00:00
|
|
|
|
void set_params(const TParametri_elaborazione & parms) { _parms = parms;}
|
|
|
|
|
TParametri_elaborazione & params() { return _parms;}
|
1996-08-13 13:59:21 +00:00
|
|
|
|
|
1996-08-19 10:32:13 +00:00
|
|
|
|
virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
|
1998-06-10 16:38:58 +00:00
|
|
|
|
const TDate& data_elab, bool interattivo = FALSE) pure;
|
1996-08-13 13:59:21 +00:00
|
|
|
|
|
|
|
|
|
TElaborazione(const char* cod);
|
1996-08-14 16:32:11 +00:00
|
|
|
|
TElaborazione(const TRectype& rec) : TRectype(rec) { }
|
1996-08-13 13:59:21 +00:00
|
|
|
|
virtual ~TElaborazione() { }
|
|
|
|
|
};
|
|
|
|
|
|
1998-08-25 18:07:30 +00:00
|
|
|
|
class TElaborazione_esterna : public TElaborazione // velib04
|
1997-06-03 10:29:42 +00:00
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
|
1998-06-10 16:38:58 +00:00
|
|
|
|
const TDate& data_elab, bool interattivo = FALSE);
|
1997-06-03 10:29:42 +00:00
|
|
|
|
|
1998-08-25 18:07:30 +00:00
|
|
|
|
TElaborazione_esterna(const char* cod);
|
|
|
|
|
TElaborazione_esterna(const TRectype& rec) : TElaborazione(rec) { }
|
|
|
|
|
virtual ~TElaborazione_esterna() { }
|
1997-06-03 10:29:42 +00:00
|
|
|
|
};
|
|
|
|
|
|
1998-08-25 18:07:30 +00:00
|
|
|
|
class TConsegna_ordini : public TElaborazione // velib04d
|
1997-06-03 10:29:42 +00:00
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
|
1998-06-10 16:38:58 +00:00
|
|
|
|
const TDate& data_elab, bool interattivo = FALSE);
|
1997-06-03 10:29:42 +00:00
|
|
|
|
|
|
|
|
|
TConsegna_ordini(const char* cod);
|
|
|
|
|
TConsegna_ordini(const TRectype& rec) : TElaborazione(rec) { }
|
|
|
|
|
virtual ~TConsegna_ordini() { }
|
|
|
|
|
};
|
|
|
|
|
|
1997-08-05 14:10:21 +00:00
|
|
|
|
class TFatturazione_bolle : public TElaborazione // velib04a
|
1996-08-13 13:59:21 +00:00
|
|
|
|
{
|
1996-08-19 16:04:55 +00:00
|
|
|
|
TToken_string _cod_desc;
|
|
|
|
|
|
1996-08-13 13:59:21 +00:00
|
|
|
|
public:
|
|
|
|
|
virtual bool raggruppa(TDocumento& din, TDocumento& dout);
|
1996-08-19 10:32:13 +00:00
|
|
|
|
virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
|
1998-06-10 16:38:58 +00:00
|
|
|
|
const TDate& data_elab, bool interattivo = FALSE);
|
1996-08-30 14:31:57 +00:00
|
|
|
|
|
|
|
|
|
void tipi_validi(TToken_string& tipi) const;
|
|
|
|
|
void stati_validi(TToken_string& stati) const;
|
1996-08-13 13:59:21 +00:00
|
|
|
|
|
1996-08-19 16:04:55 +00:00
|
|
|
|
TFatturazione_bolle(const char* cod);
|
1997-06-03 10:29:42 +00:00
|
|
|
|
TFatturazione_bolle(const TRectype& rec) : TElaborazione(rec) { }
|
1996-08-13 13:59:21 +00:00
|
|
|
|
virtual ~TFatturazione_bolle() { }
|
|
|
|
|
};
|
|
|
|
|
|
1997-08-05 14:10:21 +00:00
|
|
|
|
// 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,
|
2003-02-25 14:39:02 +00:00
|
|
|
|
causre_error,
|
1998-11-04 18:04:26 +00:00
|
|
|
|
cauval_error,
|
|
|
|
|
ivasto_error,
|
1997-08-05 14:10:21 +00:00
|
|
|
|
register_error,
|
|
|
|
|
change_error,
|
|
|
|
|
val_error,
|
|
|
|
|
codpag_error,
|
|
|
|
|
row_type_error,
|
|
|
|
|
no_rows_error,
|
|
|
|
|
conto_error,
|
1998-11-04 18:04:26 +00:00
|
|
|
|
sconto_error,
|
|
|
|
|
spinbo_error,
|
1997-08-05 14:10:21 +00:00
|
|
|
|
movement_error,
|
|
|
|
|
write_error,
|
|
|
|
|
scadenze_error,
|
1997-09-08 13:24:52 +00:00
|
|
|
|
bank_error,
|
1998-08-25 18:07:30 +00:00
|
|
|
|
caus_ant_error,
|
|
|
|
|
counter_p_ant_error,
|
|
|
|
|
cau_abb_error,
|
1999-10-22 10:00:18 +00:00
|
|
|
|
cau_spe_error,
|
1998-08-25 18:07:30 +00:00
|
|
|
|
write_part_error,
|
1999-04-06 15:34:39 +00:00
|
|
|
|
intra_mov_error,
|
1999-10-22 10:00:18 +00:00
|
|
|
|
cont_seq_error,
|
2000-05-05 15:25:49 +00:00
|
|
|
|
cau_ritintra_error,
|
1997-08-05 14:10:21 +00:00
|
|
|
|
generic_error
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class TBill;
|
2002-12-20 16:15:03 +00:00
|
|
|
|
class TMovimentoPN_VE;
|
|
|
|
|
class TSaldo_agg;
|
1997-08-05 14:10:21 +00:00
|
|
|
|
|
2002-02-26 16:20:19 +00:00
|
|
|
|
|
1997-08-05 14:10:21 +00:00
|
|
|
|
class TContabilizzazione : public TElaborazione // velib04b
|
1997-06-03 10:29:42 +00:00
|
|
|
|
{
|
1997-08-05 14:10:21 +00:00
|
|
|
|
bool _auto_data; // Flag per data di registrazione automatica
|
2003-05-05 14:32:23 +00:00
|
|
|
|
bool _nump_iva; // se TRUE prende il numero protocollo da registro iva, se no prende il numero protocollo dal numero doc.
|
1997-08-05 14:10:21 +00:00
|
|
|
|
TDate _data_reg; // Data di registrazione documenti
|
|
|
|
|
long _total_docs;// Numero di documenti contabilizzati
|
|
|
|
|
error_type _error; // Errore rilevato durante l'elaborazione
|
|
|
|
|
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
|
2002-05-08 16:25:49 +00:00
|
|
|
|
TAssoc_array _totali_lordi;// array per totalizzare i lordi per aliquota, al fine di aggiustare gli imponibili
|
1999-05-24 13:34:11 +00:00
|
|
|
|
// nel caso di calcolo lordo sul documento
|
2002-05-08 16:25:49 +00:00
|
|
|
|
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
|
1997-08-05 14:10:21 +00:00
|
|
|
|
|
|
|
|
|
// Files, tabelle, oggetti contabili ed altre amenita'...
|
|
|
|
|
TLocalisamfile *_anamag, // file delle anagrafiche di magazzino
|
|
|
|
|
*_fcaus,
|
|
|
|
|
*_frcaus,
|
|
|
|
|
*_attiv,
|
|
|
|
|
*_part,
|
|
|
|
|
*_scad,
|
|
|
|
|
*_pags,
|
1999-04-06 15:34:39 +00:00
|
|
|
|
*_intra,
|
|
|
|
|
*_rintra,
|
1997-08-05 14:10:21 +00:00
|
|
|
|
*_occas,
|
1999-10-22 10:00:18 +00:00
|
|
|
|
*_saldi,
|
1997-08-05 14:10:21 +00:00
|
|
|
|
*_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
|
|
|
|
|
*_tri, // tabella tipi di riga
|
|
|
|
|
*_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
|
2000-05-05 15:25:49 +00:00
|
|
|
|
TViswin* _viswin; // Visualizzazione log di elaborazione
|
2002-05-31 10:35:40 +00:00
|
|
|
|
TBill _conto_errato; // Conto da visualizzare in messaggio d'errore
|
2000-10-03 13:45:12 +00:00
|
|
|
|
bool _check_prev_cont; // Controllare se il documento precedente e' stato contabilizzato
|
2002-05-31 10:35:40 +00:00
|
|
|
|
|
1997-08-05 14:10:21 +00:00
|
|
|
|
protected:
|
|
|
|
|
// Carica i parametri dalla configurazione
|
|
|
|
|
bool load_parameters();
|
1998-08-25 18:07:30 +00:00
|
|
|
|
// Testa il fatto che il documento sia una nota di credito/debito
|
|
|
|
|
bool test_swap();
|
|
|
|
|
// Ritorna l'ultimo numero di registrazione disponibile dei movimenti di prima nota
|
|
|
|
|
error_type get_next_reg_num(long &);
|
1997-08-05 14:10:21 +00:00
|
|
|
|
// Compila la testata del movimento
|
|
|
|
|
error_type compile_head_mov(TDocumento&);
|
2003-02-25 14:39:02 +00:00
|
|
|
|
// Compila la testata del movimento per le fatture da emettere / ricevere;
|
|
|
|
|
error_type compile_head_mov_re(TDocumento&);
|
1997-08-05 14:10:21 +00:00
|
|
|
|
// Funzione per ricercare il conto di costo/ricavo
|
|
|
|
|
error_type search_costo_ricavo(TBill&, const TRiga_documento&);
|
|
|
|
|
// Funzione per aggiungere la riga iva al TAssoc_array _righe_iva
|
2003-02-25 14:39:02 +00:00
|
|
|
|
// error_type add_iva_row(const TBill&, const TRiga_documento&, const int ndec, const real p = 1.0);
|
1997-08-05 14:10:21 +00:00
|
|
|
|
// Funzione atomica per aggiungere le righe di spese d'incasso e bolli al TAssoc_array _righe_iva
|
2001-05-02 13:40:49 +00:00
|
|
|
|
void calculate_spese(real&, real&, int, bool, bool, const TString &, const TDocumento & );
|
1997-08-05 14:10:21 +00:00
|
|
|
|
// Funzione per aggiungere le righe di spese d'incasso e bolli al TAssoc_array _righe_iva (chiama calculate_spese())
|
1997-09-15 14:30:10 +00:00
|
|
|
|
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&);
|
1997-08-05 14:10:21 +00:00
|
|
|
|
// Crea le righe iva sul movimento
|
|
|
|
|
error_type create_iva_rows(TDocumento&);
|
|
|
|
|
// Crea la riga di totale documento
|
1999-04-06 15:34:39 +00:00
|
|
|
|
error_type create_total_doc_row(TDocumento&);
|
1997-08-05 14:10:21 +00:00
|
|
|
|
// Compila le righe del movimento
|
|
|
|
|
error_type compile_rows_mov(TDocumento&);
|
2003-02-25 14:39:02 +00:00
|
|
|
|
// Compila le righe del movimento per le fatture da emettere / ricevere
|
|
|
|
|
error_type compile_rows_mov_re(TDocumento&);
|
1997-08-05 14:10:21 +00:00
|
|
|
|
// scrive le scadenze
|
|
|
|
|
error_type write_scadenze(TDocumento&);
|
|
|
|
|
// scrive il movimento e le scadenze
|
2002-02-26 16:20:19 +00:00
|
|
|
|
virtual error_type write_all(TDocumento& doc, TMovimentoPN_VE & movimento);
|
2003-02-25 14:39:02 +00:00
|
|
|
|
// scrive il movimento e le scadenze per le fatture da emettere / ricevere
|
|
|
|
|
virtual error_type write_all_re(TDocumento& doc, TMovimentoPN_VE & movimento);
|
1998-08-25 18:07:30 +00:00
|
|
|
|
// restituisce la sezione per sto cliente
|
|
|
|
|
char sezione() const;
|
|
|
|
|
// Cerca il conto cliente per il movimento d'anticipo
|
1999-04-06 15:34:39 +00:00
|
|
|
|
error_type search_clifo_bill(TString &);
|
1998-08-25 18:07:30 +00:00
|
|
|
|
// Cerca il conto di contropartita per il movimento d'anticipo
|
1999-04-06 15:34:39 +00:00
|
|
|
|
error_type search_counter_bill(TDocumento&);
|
1998-08-25 18:07:30 +00:00
|
|
|
|
// compila la testata del movimento di anticipo
|
|
|
|
|
error_type compile_head_anticipo(TDocumento&);
|
|
|
|
|
// 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&);
|
1999-04-06 15:34:39 +00:00
|
|
|
|
// scrive il movimento INTRA
|
|
|
|
|
error_type write_intra(TDocumento&);
|
2002-12-20 16:15:03 +00:00
|
|
|
|
// Aggiorna i saldi
|
|
|
|
|
void aggiorna_saldi(TSaldo_agg& saldo, TMovimentoPN& mv, bool save);
|
1997-08-05 14:10:21 +00:00
|
|
|
|
// 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 ;
|
1999-04-06 15:34:39 +00:00
|
|
|
|
// Ritorna TRUE se il modulo INTRA e' abilitato (verifica anche la causale del documento corrente)
|
|
|
|
|
bool in_enabled() const ;
|
1997-06-03 10:29:42 +00:00
|
|
|
|
public:
|
2002-02-26 16:20:19 +00:00
|
|
|
|
// Cambia lo stato del documento
|
|
|
|
|
error_type change_doc_status(TDocumento&);
|
1997-06-03 10:29:42 +00:00
|
|
|
|
virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
|
1998-06-10 16:38:58 +00:00
|
|
|
|
const TDate& data_elab, bool interattivo = FALSE);
|
1997-08-05 14:10:21 +00:00
|
|
|
|
void set_auto(const bool a) { _auto_data = a; }
|
1999-06-18 15:35:05 +00:00
|
|
|
|
void set_writeable(const bool b) { _can_write = b; }
|
2000-05-05 15:25:49 +00:00
|
|
|
|
const long processed_docs() const { return _total_docs; }
|
2002-02-26 16:20:19 +00:00
|
|
|
|
void inc_processed_docs() { _total_docs++; }
|
2002-12-20 16:15:03 +00:00
|
|
|
|
|
|
|
|
|
// Ritorna il numero dell'eventuale movimento con cui il documento stato contabilizzato
|
|
|
|
|
long doc_contabilized(const TDocumento& doc, bool anticipo) const;
|
2003-07-22 13:22:11 +00:00
|
|
|
|
|
|
|
|
|
// Personalizzazioni
|
|
|
|
|
bool call_exe(const TDocumento& doc, const TMovimentoPN& movimento) const;
|
|
|
|
|
|
1999-10-22 10:00:18 +00:00
|
|
|
|
// Ritorna TRUE se il documento precedente a doc e' gia' stato contabilizzato
|
|
|
|
|
bool prev_contabilized(const TDocumento& doc) const;
|
|
|
|
|
|
1997-06-03 10:29:42 +00:00
|
|
|
|
TContabilizzazione(const char* cod);
|
1997-08-05 14:10:21 +00:00
|
|
|
|
TContabilizzazione(const TRectype& rec);
|
|
|
|
|
virtual ~TContabilizzazione();
|
1997-06-03 10:29:42 +00:00
|
|
|
|
};
|
|
|
|
|
|
2003-11-10 11:01:03 +00:00
|
|
|
|
///////////////////////////////////////////////////////////
|
|
|
|
|
// 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
|
|
|
|
|
{
|
|
|
|
|
TCausale * _caus;
|
|
|
|
|
bool _valuta;
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
// simula il K_SPACE di iva_notify
|
|
|
|
|
void create_row(int i, const TString & descr_cr);
|
|
|
|
|
// simula il K_ENTER di iva_notify
|
|
|
|
|
void enter_row(int i, const TString & descr_cr);
|
|
|
|
|
// verifica se si tratta di iva indetraibile
|
|
|
|
|
bool detraibile(TRectype& rec) const ;
|
|
|
|
|
// 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, const TString & codcms, const TString & fascms, 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 * codcms, const char * fascms, const char* desc, char tipo);
|
|
|
|
|
// setta il record delle righe di contabilita'
|
|
|
|
|
int set_cg_rec(int n, const TImporto& imp, TBill& conto, const char * codcms, const char * fascms, 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);
|
|
|
|
|
// verifica se il movimento e' quadrato oppure ha qualche maledetto sbilancio
|
|
|
|
|
// ritorna TRUE, ovviamente, se everything's alright.
|
|
|
|
|
public:
|
|
|
|
|
// ricalcola le righe di contabilita' dalle righe iva presenti
|
|
|
|
|
// e verifica la quadratura del movimento. Ritorna TRUE se il movimento e' scrivibile
|
|
|
|
|
void set_caus(TCausale * c) { _caus = c;}
|
|
|
|
|
bool movement_ok() ;
|
|
|
|
|
void add_row_re(int i);
|
|
|
|
|
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() {}
|
|
|
|
|
};
|
|
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
|
class TCopia_documento : public TElaborazione // velib04
|
1997-06-03 10:29:42 +00:00
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
|
1998-06-10 16:38:58 +00:00
|
|
|
|
const TDate& data_elab, bool interattivo = FALSE);
|
1997-06-03 10:29:42 +00:00
|
|
|
|
|
|
|
|
|
TCopia_documento(const char* cod);
|
|
|
|
|
TCopia_documento(const TRectype& rec) : TElaborazione(rec) { }
|
|
|
|
|
virtual ~TCopia_documento() { }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
1997-08-05 14:10:21 +00:00
|
|
|
|
class TGenerazione_effetti : public TElaborazione // velib04c
|
1997-06-03 10:29:42 +00:00
|
|
|
|
{
|
1997-08-05 14:10:21 +00:00
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
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&);
|
|
|
|
|
// Istanzia il pagamento corrente
|
1999-04-06 15:34:39 +00:00
|
|
|
|
void calc_pagamento(TDocumento&);
|
1997-08-05 14:10:21 +00:00
|
|
|
|
// Scrive i record array degli effetti raggruppati
|
|
|
|
|
error_type write_groups();
|
|
|
|
|
// Cambia lo stato dei gruppi di documenti raggruppati in effetti
|
1999-06-18 15:35:05 +00:00
|
|
|
|
error_type change_group_status(TDocumento&, TAssoc_array&);
|
1997-08-05 14:10:21 +00:00
|
|
|
|
// 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;}
|
1997-06-03 10:29:42 +00:00
|
|
|
|
public:
|
|
|
|
|
virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
|
1998-06-10 16:38:58 +00:00
|
|
|
|
const TDate& data_elab, bool interattivo = FALSE);
|
1997-08-05 14:10:21 +00:00
|
|
|
|
|
1999-06-18 15:35:05 +00:00
|
|
|
|
// Effettua il raggruppamento vero e proprio degli effetti (solo se ci sono elementi nell'assoc_array passato)
|
|
|
|
|
long group_bills(TAssoc_array&);
|
1999-04-06 15:34:39 +00:00
|
|
|
|
long bills() const { return _total_bills; }
|
1999-06-18 15:35:05 +00:00
|
|
|
|
// void set_group(TAssoc_array& a) { _group_array = a; }
|
|
|
|
|
void set_writeable(const bool b) { _can_write = b; }
|
1999-04-06 15:34:39 +00:00
|
|
|
|
|
1997-06-03 10:29:42 +00:00
|
|
|
|
TGenerazione_effetti(const char* cod);
|
1997-08-05 14:10:21 +00:00
|
|
|
|
TGenerazione_effetti(const TRectype& rec);
|
|
|
|
|
virtual ~TGenerazione_effetti();
|
1997-06-03 10:29:42 +00:00
|
|
|
|
};
|
|
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
|
class TLista_elaborazioni : public TObject // velib04
|
1997-06-03 10:29:42 +00:00
|
|
|
|
{
|
|
|
|
|
TAssoc_array * _elab;
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
void read();
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
TElaborazione & operator [](const char * key) const;
|
1998-06-10 16:38:58 +00:00
|
|
|
|
int select(TString_array & result, const char * tipo_iniziale = NULL, const char * stato_iniziale = NULL, const char * tipo_finale = NULL, const char * stato_finale = NULL);
|
1997-06-03 10:29:42 +00:00
|
|
|
|
void update();
|
|
|
|
|
TLista_elaborazioni() : _elab(NULL) {}
|
|
|
|
|
virtual ~TLista_elaborazioni();
|
|
|
|
|
};
|
|
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
|
struct dec_parm {
|
2000-05-05 15:25:49 +00:00
|
|
|
|
int qta_lit,
|
|
|
|
|
qta_val;
|
1997-06-03 15:56:27 +00:00
|
|
|
|
// add other groups here
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// classe TDocumentoEsteso: oggetto che ha come finalita' il calcolo dei riepiloghi IVA
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
class TDocumentoEsteso : public TDocumento
|
|
|
|
|
{
|
|
|
|
|
// Parametri del documento
|
|
|
|
|
dec_parm _parm; // Parametri per gli arrotondamenti
|
|
|
|
|
|
|
|
|
|
// Totali del documento ricalcolati non appena la tabellina di riepilogo IVA e' completa
|
1997-08-21 16:47:14 +00:00
|
|
|
|
// real _importi_netti, _imposte;
|
1997-06-03 15:56:27 +00:00
|
|
|
|
|
|
|
|
|
// membri per il calcolo del riepilogo IVA
|
|
|
|
|
bool _sum_selected; // TRUE se ha selezionato una riga del riepilogo, funge da semaforo per leggere la prossima
|
1997-08-21 16:47:14 +00:00
|
|
|
|
int _sum_filter; // Filtro corrente della riga TRiepilogo_iva in corso di stampa (-1 se non ha ancora calcolato la tabella)
|
1997-06-03 15:56:27 +00:00
|
|
|
|
TString_array _order_array; // Array di TToken_string contenenti i codici IVA soddisfacenti ad ogni tipo di filtro
|
1997-08-21 16:47:14 +00:00
|
|
|
|
TAssoc_array _summary_table; // Array associativo contenete imonibili ed imposte pronte per la stampa;
|
1997-06-03 15:56:27 +00:00
|
|
|
|
TArray _summary_array; // Array dove vengono memorizzate le imposte/imponibili per riga
|
1997-08-21 16:47:14 +00:00
|
|
|
|
TRiepilogo_iva _sum_current; // Riga corrente del riepilogo
|
1997-06-03 15:56:27 +00:00
|
|
|
|
|
|
|
|
|
// membri per il calcolo del riepilogo scadenze
|
|
|
|
|
TString_array _scadenze_array;// Array che contiene le scadenze ("<data>|<importo>")
|
|
|
|
|
int _scadenze_current; // indice per identificare l'elementi corrente sull'array (-1 se non ha ancora calcolato)
|
|
|
|
|
|
1999-04-06 15:34:39 +00:00
|
|
|
|
public:
|
1997-06-03 15:56:27 +00:00
|
|
|
|
// Funzioni per il riepilogo IVA
|
|
|
|
|
const bool summary_compiled() { return _sum_filter > -1; }
|
|
|
|
|
void compile_summary(); // Aggiorna la tabella riepilogativa
|
|
|
|
|
void summary_filter(byte selector); // filtra la tabellina secondo il filtro corrente se non e' gia' stato fatto
|
|
|
|
|
void summary_reset(bool force=FALSE); // riposiziona l'array dei codici IVA (_order_array). Se il parametro e' TRUE forza il ricalcolo della tabella
|
|
|
|
|
void summary_set_next(); // seleziona il prossimo elemento del filtro
|
1999-04-06 15:34:39 +00:00
|
|
|
|
const TRiepilogo_iva& sum_current() const { return _sum_current; } // ritorna la riga corrente del filtro corrente
|
1997-06-03 15:56:27 +00:00
|
|
|
|
const char * summary_get(const TString& w); // ritorna l'informazione richiesta estratta dall'elemento corrente
|
1997-08-21 16:47:14 +00:00
|
|
|
|
int summary_items() { return tabella_iva().items();} // ritorna il numero di righe in totale della tabellina
|
1999-04-06 15:34:39 +00:00
|
|
|
|
const TAssoc_array& summary() const { return _summary_table; }
|
|
|
|
|
const TArray& summary_array() const { return _summary_array;}
|
1997-06-03 15:56:27 +00:00
|
|
|
|
|
|
|
|
|
// Funzioni per il ricalcolo delle scadenze
|
|
|
|
|
void scadenze_reset(); // riposiziona sulla prima scadenza
|
|
|
|
|
void scadenze_recalc(); // resetta e ricalcola le scadenze
|
|
|
|
|
void scadenze_set_next(); // seleziona il prossimo elemento dell'array delle scadenze
|
|
|
|
|
const char * scadenze_get(const TString& w); // reperisce l'informazione richiesta dall'elemento corrente
|
|
|
|
|
int scadenze_items() { return _scadenze_array.items(); } // restituisce il numero di scadenze
|
|
|
|
|
TString_array& scadenze() { return _scadenze_array; }
|
|
|
|
|
|
|
|
|
|
// restituisce tot_imponibili, tot_esenti, tot_nonsoggetti a seconda del selettore:
|
|
|
|
|
// 1 = regime normale
|
|
|
|
|
// 2 = da ventilare (non usato)
|
|
|
|
|
// 4 = esenti
|
|
|
|
|
// 8 = non imponibili
|
|
|
|
|
// 16 = non soggetti
|
|
|
|
|
// pertanto i non imponibili avranno selettore 1 e gli esenti selettore 4.
|
|
|
|
|
// per avere esenti + non soggetti il selettore sara' 20 e cosi' via.
|
|
|
|
|
real tot_imponibili(byte selector);
|
|
|
|
|
|
|
|
|
|
// Funzioni per settare i parametri
|
|
|
|
|
void set_decimals(dec_parm & parm) { _parm = parm ; }
|
1998-08-25 18:07:30 +00:00
|
|
|
|
// void set_condv(TCli_for * cli); // Cambia le condizioni di vendita
|
|
|
|
|
TDocumentoEsteso (const TRectype & rec, dec_parm & parm) ;
|
|
|
|
|
TDocumentoEsteso (const TRectype & rec) ;
|
1997-06-03 15:56:27 +00:00
|
|
|
|
TDocumentoEsteso () ;
|
1998-08-25 18:07:30 +00:00
|
|
|
|
virtual ~TDocumentoEsteso();
|
1997-06-03 15:56:27 +00:00
|
|
|
|
};
|
|
|
|
|
|
2002-05-08 16:25:49 +00:00
|
|
|
|
#endif
|