diff --git a/ve/velib.h b/ve/velib.h index ef3eb6902..64453120c 100755 --- a/ve/velib.h +++ b/ve/velib.h @@ -16,11 +16,11 @@ class TViswin; #ifndef __CLIFOR_H #include "../ve/clifor.h" #endif - + #ifndef __CGLIB01_H #include "../cg/cglib01.h" #endif - + #ifndef __CGPAGAME_H #include "../cg/cgpagame.h" #endif @@ -81,780 +81,779 @@ void set_curr_um(const TString& um); class TDocumento_variable_field : public TVariable_field -{ - bool _dirty; +{ + bool _dirty; - public: - virtual TObject* dup() const { return new TDocumento_variable_field(*this); } + public: + virtual TObject* dup() const { return new TDocumento_variable_field(*this); } // @cmember segnala che il campo deve essere ricalcolato - virtual bool dirty() const { return _dirty; } + virtual bool dirty() const { return _dirty; } // @cmember assegna lo stato di campo da ricalcolare - virtual void set_dirty(bool on = true) { _dirty = on; } + 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 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 - TDocumento_variable_field(const char * name, const TExpression & expr, TTypeexp type = _strexpr) - : TVariable_field(name, expr, type), _dirty(true) {} + TDocumento_variable_field(const char * name, VIRTUAL_GET_FUNCTION getfunc) + : TVariable_field(name, getfunc), _dirty(true) {} +// @ cmember Costruttore con una espressione di calcolo + TDocumento_variable_field(const char * name, const TExpression & expr, TTypeexp type = _strexpr) + : 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 - virtual ~TDocumento_variable_field() {} + TDocumento_variable_field(const TVariable_field & f) : TVariable_field(f), _dirty(true) {} +// @ cmember Distruttore + virtual ~TDocumento_variable_field() {} }; - -class TSpesa_prest : public TRectype // velib01 -{ + +class TSpesa_prest : public TRectype // velib01 +{ protected: public: - TObject* dup() const { return new TSpesa_prest(codice()); } + TObject* dup() const { return new TSpesa_prest(codice()); } -public: - int read(const char* codice); +public: + int read(const char* codice); - const TString& codice() const { return get("CODTAB");} - const TString& descrizione() const { return get("S0"); } - const TString& field_perc() const { return get("S5"); } - const TString & um() const { return get("S7"); } - const TString& cod_iva() const { return get("S3").left(4); } + const TString& codice() const { return get("CODTAB");} + const TString& descrizione() const { return get("S0"); } + const TString& field_perc() const { return get("S5"); } + const TString & um() const { return get("S7"); } + const TString& cod_iva() const { return get("S3").left(4); } const TString& revenue() const { return get("S5"); } - real prezzo() const { return get_real("R0"); } - real qta() const { return get_real("R1"); } - real perc() const { return get_real("R2"); } - char tipo() const { return get_char("S6"); } - char tipo_ritenuta() const { return get_char("S9"); } - const TString & tipo_riga() const { return get("S8"); } - - TSpesa_prest(const char* codice = NULL, char tipo = 'S'); - TSpesa_prest(const TRectype& rec); - virtual ~TSpesa_prest() {} + real prezzo() const { return get_real("R0"); } + real qta() const { return get_real("R1"); } + real perc() const { return get_real("R2"); } + char tipo() const { return get_char("S6"); } + char tipo_ritenuta() const { return get_char("S9"); } + const TString & tipo_riga() const { return get("S8"); } + + TSpesa_prest(const char* codice = NULL, char tipo = 'S'); + TSpesa_prest(const TRectype& rec); + virtual ~TSpesa_prest() {} }; -class TExpr_documento : public TExpression // velib01 -{ - 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; +class TExpr_documento : public TExpression // velib01 +{ + 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: +public: // @cmember Duplica l'espressione - virtual TObject* dup() const; - - // @cmember Assegna il documento corrente - void set_doc(TDocumento* doc) { _doc = doc; } - // @cmember Assegna il documento corrente - void set_row(TRiga_documento* row) { _row = row; } - // @cmember Costruttore (assegna l'estressione e il suo tipo) - TExpr_documento(const char* expression, TTypeexp type = _numexpr, - TDocumento* doc = NULL, TRiga_documento * row = NULL); - // @cmember Costruttore (assegna il tipo dell'istruzione) - TExpr_documento(TTypeexp type = _numexpr, - TDocumento* doc = NULL, TRiga_documento* row = NULL) - : TExpression(type, true), _doc(doc), _row(row) {} - // @cmember Costruttore di copia - TExpr_documento(const TExpr_documento & expr) - : TExpression(expr), _doc(expr._doc), _row(expr._row) {} + virtual TObject* dup() const; - // @cmember Distruttore - virtual ~TExpr_documento() {} + // @cmember Assegna il documento corrente + void set_doc(TDocumento* doc) { _doc = doc; } + // @cmember Assegna il documento corrente + void set_row(TRiga_documento* row) { _row = row; } + // @cmember Costruttore (assegna l'estressione e il suo tipo) + TExpr_documento(const char* expression, TTypeexp type = _numexpr, + TDocumento* doc = NULL, TRiga_documento * row = NULL); + // @cmember Costruttore (assegna il tipo dell'istruzione) + TExpr_documento(TTypeexp type = _numexpr, + TDocumento* doc = NULL, TRiga_documento* row = NULL) + : TExpression(type, true), _doc(doc), _row(row) {} + // @cmember Costruttore di copia + TExpr_documento(const TExpr_documento & expr) + : TExpression(expr), _doc(expr._doc), _row(expr._row) {} + + // @cmember Distruttore + virtual ~TExpr_documento() {} }; enum TTipo_formula { _documento, _riga }; -class TFormula_documento : public TRectype // velib01 -{ - TString16 _tab; - TExpr_documento * _expr; - +class TFormula_documento : public TRectype // velib01 +{ + TString16 _tab; + TExpr_documento * _expr; + protected: - int read(const char* codice, const char* expr = NULL, bool numexpr = true); + int read(const char* codice, const char* expr = NULL, bool numexpr = true); public: - TObject* dup() const { return new TFormula_documento(_tab == "%FRD" ? _documento : _riga, codice(), NULL, true); } + TObject* dup() const { return new TFormula_documento(_tab == "%FRD" ? _documento : _riga, codice(), NULL, true); } -public: - const TString& codice() const { return get("CODTAB");} - const TString& name() const { return codice();} - TExpr_documento* expr() const { return _expr;} - - 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;} - - TFormula_documento(TTipo_formula tipo = _documento, const char* codice = NULL, const char* expr = NULL, bool numexpr = true); - TFormula_documento(const TRectype& rec); - virtual ~TFormula_documento(); +public: + const TString& codice() const { return get("CODTAB");} + const TString& name() const { return codice();} + TExpr_documento* expr() const { return _expr;} + + 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;} + + TFormula_documento(TTipo_formula tipo = _documento, const char* codice = NULL, const char* expr = NULL, bool numexpr = true); + TFormula_documento(const TRectype& rec); + virtual ~TFormula_documento(); }; -class TTipo_documento : public TRectype // velib03 -{ - static TAssoc_array _formule_documento; - TToken_string _formule; - 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 - TString16 _imponibile; - TString16 _imposta; - TString16 _totale; - TString16 _totale_netto; - TString16 _basesconto; - TString16 _spese; - TString16 _totprovv; - TString16 _valore; - TString16 _totvalres; - TString16 _totvalore; - TString16 _totale_cont; - TString16 _field_prezzo; - TString16 _field_qta, _field_qtaevasa; // Veri campi Quantità e Quantità Evasa - TString _str_desc_doc, _str_desc_rdoc; +class TTipo_documento : public TRectype // velib03 +{ - char _tipocf; - char _check_qta; - bool _cnt_prezzi, _show_evaded_lines; + static TAssoc_array _formule_documento; + TToken_string _formule; + 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 + TString16 _imponibile; + TString16 _imposta; + TString16 _totale; + TString16 _totale_netto; + TString16 _basesconto; + TString16 _spese; + TString16 _totprovv; + TString16 _valore; + TString16 _totvalres; + TString16 _totvalore; + TString16 _totale_cont; + TString16 _field_prezzo; + TString16 _field_qta, _field_qtaevasa; // Veri campi Quantità e Quantità Evasa + TString _str_desc_doc, _str_desc_rdoc; + + char _tipocf; + char _check_qta; + bool _cnt_prezzi, _show_evaded_lines; + +protected: + void add_formula_if_needed(TConfig& profile, TString& variable, const char* varname, const char* formula); + void read_formule(); + int read(const char* tipodoc); - -protected: - void add_formula_if_needed(TConfig& profile, TString& variable, const char* varname, const char* formula); - void read_formule(); - int read(const char* tipodoc); - public: - TObject* dup() const { return new TTipo_documento(codice()); } - + TObject* dup() const { return new TTipo_documento(codice()); } enum { _altro, _bolla, _fattura, _ordine}; -public: -// const TString& profile_name() const { return get("S4"); } - const TFilename& profile_name(TFilename& name) const; - - // Funzioni che effettuano la cache di importanti valori contenuti nel profilo - const char tipocf() const; - void set_defaults(TMask& m) const; - const TString_array& keys_descrs(); - const TString_array& sheet_columns() const; - const TString_array& handlers() const; - - const TString& mask_name() const { return get("S4");} - const TString& causale() const { return get("S6"); } - int tipo() const { return get_int("I1"); } - const TString& codice() const { return get("CODTAB");} - - bool is_generic() const { return tipo() == _altro; } - bool is_fattura() const { return tipo() == _fattura; } - bool is_bolla() const { return tipo() == _bolla; } - bool is_ordine() const { return tipo() == _ordine; } - bool controllo_prezzi() const { return _cnt_prezzi; } - const char * field_prezzo() const { return _field_prezzo; } - const TString& field_qta() const { return _field_qta; } - const TString& field_qtaevasa() const { return _field_qtaevasa; } - bool check_giac() const { return _check_qta == 'G'; } - bool check_disp() const { return _check_qta == 'D'; } +public: + const TFilename& profile_name(TFilename& name) const; + + // Funzioni che effettuano la cache di importanti valori contenuti nel profilo + const char tipocf() const; + void set_defaults(TMask& m) const; + const TString_array& keys_descrs(); + const TString_array& sheet_columns() const; + const TString_array& handlers() const; - - const TString & descrizione() const { return get("S0"); } - const TString & riferimento(const TDocumento& doc, TString& rif) const; - 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; } - const TString & totale_doc_cont() const { return _totale_cont;} - const TString & basesconto() const { return _basesconto;} - const TString & spese() const { return _spese;} - const TString & totprovv() const { return _totprovv;} - const TString & valore() const { return _valore;} - const TString & totvalres() const { return _totvalres;} - const TString & totvalore() const { return _totvalore;} - bool mov_mag() const { return get_bool("B1"); } - bool statistiche() const { return get_bool("B2"); } - bool provvigioni() const { return get_bool("B3"); } - const char stato_mov_iniziale() const {return get_char("S7"); } - const char stato_mov_finale() const {return get_char("S8"); } - const char stato_provvigioni() const {return get_char("S3"); } - const TString & caus_mov() const {return get("S9"); } - const TString & caus_anticipo() const {return get("S10"); } - const TString & tipi_iva_validi() const {return get("S11"); } - const char stato_finale_inserimento() const {return get("S2")[0]; } - const char stato_finale_stampa() const {return get("S2")[1]; } - const char stato_bloccato() const {return get("S2")[2]; } - 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; - bool scarica_residuo() const; - bool clifo_optional() const { return get_bool("B5"); } + const TString& mask_name() const { return get("S4");} + const TString& causale() const { return get("S6"); } + int tipo() const { return get_int("I1"); } + const TString& codice() const { return get("CODTAB");} + + bool is_generic() const { return tipo() == _altro; } + bool is_fattura() const { return tipo() == _fattura; } + bool is_bolla() const { return tipo() == _bolla; } + bool is_ordine() const { return tipo() == _ordine; } + bool controllo_prezzi() const { return _cnt_prezzi; } + const char * field_prezzo() const { return _field_prezzo; } + const TString& field_qta() const { return _field_qta; } + const TString& field_qtaevasa() const { return _field_qtaevasa; } + bool check_giac() const { return _check_qta == 'G'; } + bool check_disp() const { return _check_qta == 'D'; } + + const TString & descrizione() const { return get("S0"); } + const TString & riferimento(const TDocumento& doc, TString& rif) const; + 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; } + const TString & totale_doc_cont() const { return _totale_cont;} + const TString & basesconto() const { return _basesconto;} + const TString & spese() const { return _spese;} + const TString & totprovv() const { return _totprovv;} + const TString & valore() const { return _valore;} + const TString & totvalres() const { return _totvalres;} + const TString & totvalore() const { return _totvalore;} + bool mov_mag() const { return get_bool("B1"); } + bool statistiche() const { return get_bool("B2"); } + bool provvigioni() const { return get_bool("B3"); } + const char stato_mov_iniziale() const {return get_char("S7"); } + const char stato_mov_finale() const {return get_char("S8"); } + const char stato_provvigioni() const {return get_char("S3"); } + const TString & caus_mov() const {return get("S9"); } + const TString & caus_anticipo() const {return get("S10"); } + const TString & tipi_iva_validi() const {return get("S11"); } + const char stato_finale_inserimento() const {return get("S2")[0]; } + const char stato_finale_stampa() const {return get("S2")[1]; } + const char stato_bloccato() const {return get("S2")[2]; } + 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; + bool scarica_residuo() const; + bool clifo_optional() const { return get_bool("B5"); } bool printable() const { return !get("S5").empty(); } const TString & main_print_profile() const { return get("S5").left(8); } const TString & additional_print_profile() const { return get("S5").mid(8); } - - TFormula_documento * first_formula() { return succ_formula(true); } - TFormula_documento * succ_formula(bool restart = FALSE); - const int ncopie() const { return get_int("I0"); } - bool spese_aut() const { return get_bool("B0"); } - bool nota_credito() const { return get_bool("B7"); } - bool add_conai() const { return get_bool("B6"); } - bool calcolo_lordo() const { return get_bool("B8"); } - bool fattura_commerciale() const { return get_bool("B9"); } - - 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; } - - TTipo_documento(const char* tipodoc = NULL); - TTipo_documento(const TRectype& rec); - virtual ~TTipo_documento(); + TFormula_documento * first_formula() { return succ_formula(true); } + TFormula_documento * succ_formula(bool restart = FALSE); + + const int ncopie() const { return get_int("I0"); } + bool spese_aut() const { return get_bool("B0"); } + bool nota_credito() const { return get_bool("B7"); } + bool add_conai() const { return get_bool("B6"); } + bool calcolo_lordo() const { return get_bool("B8"); } + bool fattura_commerciale() const { return get_bool("B9"); } + + 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; } + + TTipo_documento(const char* tipodoc = NULL); + TTipo_documento(const TRectype& rec); + virtual ~TTipo_documento(); }; - + class TTipi_documento_cache : public TRecord_cache { protected: - virtual TObject* rec2obj(const TRectype& rec) const; + virtual TObject* rec2obj(const TRectype& rec) const; public: - TTipo_documento& tipo(const char* key); - TTipi_documento_cache(); - virtual ~TTipi_documento_cache() { } + TTipo_documento& tipo(const char* key); + TTipi_documento_cache(); + virtual ~TTipi_documento_cache() { } }; class TCodice_numerazione : public TRectype { - int _status; + int _status; public: - TObject* dup() const { return new TCodice_numerazione(*this); } + TObject* dup() const { return new TCodice_numerazione(*this); } public: - int read(const char* cod); - 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"); } - const bool dont_test_datadoc() const { return get_bool("B2"); } - const bool fattura_emettere_ricevere() const { return get_bool("B3"); } - const bool save_and_new() const { return get_bool("B4"); } - const bool test_eser() const { return ! get_bool("B5"); } + int read(const char* cod); + 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"); } + const bool dont_test_datadoc() const { return get_bool("B2"); } + const bool fattura_emettere_ricevere() const { return get_bool("B3"); } + const bool save_and_new() const { return get_bool("B4"); } + const bool test_eser() const { return ! get_bool("B5"); } - const TString & tipo_doc(int i) const; - int ntipi_doc() const; - - void complete_num(long num, TString& codnum) const; - bool ok() const { return !empty(); } - TCodice_numerazione(const char* codnum = NULL); - TCodice_numerazione(const TRectype& rec); - virtual ~TCodice_numerazione(); + const TString & tipo_doc(int i) const; + int ntipi_doc() const; + + void complete_num(long num, TString& codnum) const; + bool ok() const { return !empty(); } + TCodice_numerazione(const char* codnum = NULL); + TCodice_numerazione(const TRectype& rec); + virtual ~TCodice_numerazione(); }; -class TTipo_riga_documento : public TRectype // velib02 -{ - static TAssoc_array _formule_riga; - TToken_string _formule; +class TTipo_riga_documento : public TRectype // velib02 +{ + static TAssoc_array _formule_riga; + TToken_string _formule; TString_array _defaults; - TString16 _imponibile; - TString16 _quant; - TString16 _quantevasa; - TString16 _qtares; - TString16 _valore; - TString16 _valres; - - TString16 _field_provv; - TString16 _field_qta, _field_qtaevasa; // Veri campi Quantità e Quantità Evasa - - int _decrp, _incrp; + TString16 _imponibile; + TString16 _quant; + TString16 _quantevasa; + TString16 _qtares; + TString16 _valore; + TString16 _valres; + + TString16 _field_provv; + TString16 _field_qta, _field_qtaevasa; // Veri campi Quantità e Quantità Evasa + + int _decrp, _incrp; protected: - void read_formule(); - void add_formula_if_needed(TConfig& profile, TString& variable, - const char* varname, const char* formula); + void read_formule(); + void add_formula_if_needed(TConfig& profile, TString& variable, + const char* varname, const char* formula); public: - TObject* dup() const { return new TTipo_riga_documento(codice()); } + TObject* dup() const { return new TTipo_riga_documento(codice()); } -public: - const TFilename& profile_name(TFilename& name) const; - const TString& mask_name(TString& name) const; - const TString& codice() const { return get("CODTAB");} - - const TString& descrizione() const { return get("S0"); } - char tipo() const { return get_char("S7"); } - - const TString& imponibile() const { return _imponibile;} - 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;} +public: + const TFilename& profile_name(TFilename& name) const; + const TString& mask_name(TString& name) const; + const TString& codice() const { return get("CODTAB");} - const TString& provv() const { return _field_provv;} - const int incr_perc_prezzo() const { return _incrp;} - const int decr_perc_prezzo() const { return _decrp;} + const TString& descrizione() const { return get("S0"); } + char tipo() const { return get_char("S7"); } - bool formfeed() const { return get_bool("B0"); } - int detraibilita() const { return get_int("I0"); } - real perc_indetraibilita() const { return get_real("R0"); } + const TString& imponibile() const { return _imponibile;} + 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;} - TFormula_documento* first_formula() { return succ_formula(true); } - TFormula_documento* succ_formula(bool restart = FALSE); - - int read(const char* tiporig); - void set_defaults(TSheet_field& s, int row) const; + const TString& provv() const { return _field_provv;} + const int incr_perc_prezzo() const { return _incrp;} + const int decr_perc_prezzo() const { return _decrp;} - TTipo_riga_documento(const char* tiporig = NULL); - TTipo_riga_documento(const TRectype& rec); - virtual ~TTipo_riga_documento() { } + bool formfeed() const { return get_bool("B0"); } + int detraibilita() const { return get_int("I0"); } + real perc_indetraibilita() const { return get_real("R0"); } + + TFormula_documento* first_formula() { return succ_formula(true); } + TFormula_documento* succ_formula(bool restart = FALSE); + + int read(const char* tiporig); + void set_defaults(TSheet_field& s, int row) const; + + TTipo_riga_documento(const char* tiporig = NULL); + TTipo_riga_documento(const TRectype& rec); + virtual ~TTipo_riga_documento() { } }; -class TRiga_documento : public TAuto_variable_rectype // velib02 +class TRiga_documento : public TAuto_variable_rectype // velib02 { - TDocumento* _doc; - static long _firm; - static TAssoc_array _tipi; - static TAssoc_array _spese; - static TAssoc_array _ive; - static TCache_articoli * _articoli; - static int _iva_calc_mode; + TDocumento* _doc; + static long _firm; + static TAssoc_array _tipi; + static TAssoc_array _spese; + static TAssoc_array _ive; + static TCache_articoli * _articoli; + static int _iva_calc_mode; static bool _rit_calc; -protected: - // @cmember Setta il contenuto del campo

(non tipizzata) - virtual void put_str(const char* fieldname, const char* val); +protected: + // @cmember Setta il contenuto del campo

(non tipizzata) + virtual void put_str(const char* fieldname, const char* val); - virtual TRiga_documento & copy(const TRiga_documento & r); - TObject* dup() const { return new TRiga_documento(*this); } - virtual void set_variables(TExpression * e) const ; - - static void test_firm(); - -public: - void dirty_fields(bool dirty_document = true); - bool doc_dependent() const; - 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);} - bool is_merce() const { return tipo().tipo() == RIGA_MERCE;} - bool is_spese() const { return tipo().tipo() == RIGA_SPESEDOC;} - bool is_prestazione() const { return tipo().tipo() == RIGA_PRESTAZIONI;} - bool is_risorsa() const { return tipo().tipo() == RIGA_RISORSE;} - bool is_attrezzatura() const { return tipo().tipo() == RIGA_ATTREZZATURE;} - bool is_sconto() const {return tipo().tipo() == RIGA_SCONTI;} - bool is_sconto_perc() const { return is_sconto() && get(RDOC_SCONTO).not_empty();} - bool is_omaggio() const { return tipo().tipo() == RIGA_OMAGGI;} - bool is_descrizione() const { return tipo().tipo() == RIGA_DESCRIZIONI;} - bool is_articolo() const; - bool is_checked() const { return get_bool(RDOC_CHECKED);} - bool is_evadibile() const { return is_merce() || is_omaggio() || is_spese() || is_prestazione(); } - bool is_evasa() const; // Ritorna vero se la riga è evasa - void checked(bool on = true) { put(RDOC_CHECKED, (bool)on); } - void unchecked() { checked(FALSE); } - bool linked() const { return get(RDOC_DACODNUM).not_empty();} - // @cmember Assegna il documento corrente - void set_doc(TDocumento * doc) { _doc = doc; } - const TDocumento & doc() const { CHECK(_doc, "Documento nullo"); return *_doc;} + virtual TRiga_documento & copy(const TRiga_documento & r); + TObject* dup() const { return new TRiga_documento(*this); } + virtual void set_variables(TExpression * e) const ; - 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); + static void test_firm(); + +public: + void dirty_fields(bool dirty_document = true); + bool doc_dependent() const; + 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);} + bool is_merce() const { return tipo().tipo() == RIGA_MERCE;} + bool is_spese() const { return tipo().tipo() == RIGA_SPESEDOC;} + bool is_prestazione() const { return tipo().tipo() == RIGA_PRESTAZIONI;} + bool is_risorsa() const { return tipo().tipo() == RIGA_RISORSE;} + bool is_attrezzatura() const { return tipo().tipo() == RIGA_ATTREZZATURE;} + bool is_sconto() const {return tipo().tipo() == RIGA_SCONTI;} + bool is_sconto_perc() const { return is_sconto() && get(RDOC_SCONTO).not_empty();} + bool is_omaggio() const { return tipo().tipo() == RIGA_OMAGGI;} + bool is_descrizione() const { return tipo().tipo() == RIGA_DESCRIZIONI;} + bool is_articolo() const; + bool is_checked() const { return get_bool(RDOC_CHECKED);} + bool is_evadibile() const { return is_merce() || is_omaggio() || is_spese() || is_prestazione(); } + bool is_evasa() const; // Ritorna vero se la riga è evasa + void checked(bool on = true) { put(RDOC_CHECKED, (bool)on); } + void unchecked() { checked(FALSE); } + bool linked() const { return get(RDOC_DACODNUM).not_empty();} + // @cmember Assegna il documento corrente + 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; + static const TCodiceIVA & iva(const char * codice); + const TCodiceIVA & iva() const {const TString16 cod(get(RDOC_CODIVA)); return iva(cod);} + + const bool tipo_valido() const { return get(RDOC_TIPORIGA).not_empty(); } + void set_tipo(const char * tipo) { put(RDOC_TIPORIGA, tipo);} + bool sola_descrizione() const; + void forza_sola_descrizione(); + + void set_original_rdoc_key(const TRectype& orig, int depth = 0); + void reset_original_rdoc_key(); + const TRectype* find_original_rdoc() const; + + virtual TRiga_documento& operator =(const TRiga_documento& r) { return copy(r);} + virtual TRectype& operator =(const TRectype & r); + virtual TRectype& operator =(const char * r); - const TTipo_riga_documento & tipo() const; - const TSpesa_prest & spesa() const; - static const TCodiceIVA & iva(const char * codice); - const TCodiceIVA & iva() const {const TString16 cod(get(RDOC_CODIVA)); return iva(cod);} - - const bool tipo_valido() const { return get(RDOC_TIPORIGA).not_empty(); } - void set_tipo(const char * tipo) { put(RDOC_TIPORIGA, tipo);} - bool sola_descrizione() const; - void forza_sola_descrizione(); - - void set_original_rdoc_key(const TRectype& orig, int depth = 0); - void reset_original_rdoc_key(); - const TRectype* find_original_rdoc() const; - - virtual TRiga_documento& operator =(const TRiga_documento& r) { return copy(r);} - virtual TRectype& operator =(const TRectype & r); - virtual TRectype& operator =(const char * r); - void cost2revenue(); - bool raggruppabile(const TRiga_documento& r, TToken_string& campi) const; - TRiga_documento& operator +=(const TRiga_documento& r); - - void reset_fields(TAuto_variable_rectype& rec) { rec.remove_field(); } - void set_fields(TAuto_variable_rectype& rec); + bool raggruppabile(const TRiga_documento& r, TToken_string& campi) const; + TRiga_documento& operator +=(const TRiga_documento& r); - real prezzo(bool scontato, bool lordo, int ndec = AUTO_DECIMALS) const ; - real importo(bool scontato , bool lordo, int ndec = AUTO_DECIMALS) const ; - real sconto() const { return importo(FALSE,FALSE) - importo(true,FALSE); } - real iva(int ndec) const; - real imponibile(bool lordo = FALSE) const; - real imponibile_omaggio(int iva_calc_mode = 1) const; - real iva_omaggio(int ndec, int iva_calc_mode = 1) const; - real imposta(bool round = true) const; - real provvigione(int ndec = AUTO_DECIMALS) const; + void reset_fields(TAuto_variable_rectype& rec) { rec.remove_field(); } + void set_fields(TAuto_variable_rectype& rec); + + real prezzo(bool scontato, bool lordo, int ndec = AUTO_DECIMALS) const ; + real importo(bool scontato , bool lordo, int ndec = AUTO_DECIMALS) const ; + real sconto() const { return importo(FALSE,FALSE) - importo(true,FALSE); } + real iva(int ndec) const; + real imponibile(bool lordo = FALSE) const; + real imponibile_omaggio(int iva_calc_mode = 1) const; + real iva_omaggio(int ndec, int iva_calc_mode = 1) const; + real imposta(bool round = true) const; + real provvigione(int ndec = AUTO_DECIMALS) const; real ritenuta(const char tipor = '\0', bool lordo = false, int ndec = AUTO_DECIMALS) const; - - const TString& field_qta() const; - const TString& field_qtaevasa() const; - real quantita() const; - real qtaevasa() const; - real qtaresidua() const; - real valore(bool totale, int ndec) const; - const TString & codice_costo() const; - const TString & codice_commessa() const; - const TString & fase_commessa() const; - TArticolo_giacenza * articolo() const; - TRiga_documento(TDocumento* doc, const char* tipo = NULL); - TRiga_documento(const TRiga_documento & row); - TRiga_documento(const TRiga_documento& rec, TDocumento* doc, - const char* tipo = NULL); - virtual ~TRiga_documento() {} + const TString& field_qta() const; + const TString& field_qtaevasa() const; + real quantita() const; + real qtaevasa() const; + real qtaresidua() const; + real valore(bool totale, int ndec) const; + const TString & codice_costo() const; + const TString & codice_commessa() const; + const TString & fase_commessa() const; + TArticolo_giacenza * articolo() const; + + TRiga_documento(TDocumento* doc, const char* tipo = NULL); + TRiga_documento(const TRiga_documento & row); + TRiga_documento(const TRiga_documento& rec, TDocumento* doc, + const char* tipo = NULL); + virtual ~TRiga_documento() {} }; enum TTipo_importo { _lordo, _netto, _imposta }; class TRiepilogo_iva : public TObject { - TCodiceIVA _codiva; - real _imp; - real _imp_spese; - real _imp_spese_row; - real _iva; - real _iva_spese; - real _sconto_perc; - real _sconto_imp; - real _iva_sconto; - byte _tipo; - + TCodiceIVA _codiva; + real _imp; + real _imp_spese; + real _imp_spese_row; + real _iva; + real _iva_spese; + real _sconto_perc; + real _sconto_imp; + real _iva_sconto; + byte _tipo; + protected: - virtual TObject* dup() const { return new TRiepilogo_iva(*this); } - virtual TRiepilogo_iva & copy(const TRiepilogo_iva & a); - + 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;}; - real & imp_spese_row() { return _imp_spese_row;}; - real & iva() { return _iva;}; - real & iva_spese() { return _iva_spese;}; - real & iva_sconto() { return _iva_sconto;}; - const real & iva_sconto() const { return _iva_sconto;}; - real & sconto_perc() { return _sconto_perc; } - const real& sconto_perc() const { return _sconto_perc; } - real & sconto_imp () { return _sconto_imp; } - const real & sconto_imp () const { return _sconto_imp; } - const TCodiceIVA & cod_iva() const { return _codiva;} - byte tipo(){ return _tipo;}// Tipo (Vedi opzioni per la selzione di filtro nella validate()) - TRiepilogo_iva& operator = (const TRiepilogo_iva & a) {return copy(a);} - TRiepilogo_iva(const TCodiceIVA & codiva); - TRiepilogo_iva(const TRiepilogo_iva & a) {copy(a);} - TRiepilogo_iva() : _tipo(0) {} - ~TRiepilogo_iva() {}; + 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;}; + real & imp_spese_row() { return _imp_spese_row;}; + real & iva() { return _iva;}; + real & iva_spese() { return _iva_spese;}; + real & iva_sconto() { return _iva_sconto;}; + const real & iva_sconto() const { return _iva_sconto;}; + real & sconto_perc() { return _sconto_perc; } + const real& sconto_perc() const { return _sconto_perc; } + real & sconto_imp () { return _sconto_imp; } + const real & sconto_imp () const { return _sconto_imp; } + const TCodiceIVA & cod_iva() const { return _codiva;} + byte tipo(){ return _tipo;}// Tipo (Vedi opzioni per la selzione di filtro nella validate()) + TRiepilogo_iva& operator = (const TRiepilogo_iva & a) {return copy(a);} + TRiepilogo_iva(const TCodiceIVA & codiva); + TRiepilogo_iva(const TRiepilogo_iva & a) {copy(a);} + TRiepilogo_iva() : _tipo(0) {} + ~TRiepilogo_iva() {}; }; - + class TAgente ; -class TDocumento : public TMultiple_rectype // velib03 -{ - TRecfield *_tipocf; - TRecfield *_codcf; - TRecfield *_cod_occas; - char _stato_originale; +class TDocumento : public TMultiple_rectype // velib03 +{ + TRecfield *_tipocf; + TRecfield *_codcf; + TRecfield *_cod_occas; + char _stato_originale; - TCli_for _cli_for; - TOccasionale _occas; - TPagamento _pag; - TAssoc_array _tabella_iva; // tabella di imponibili ed imposte + TCli_for _cli_for; + TOccasionale _occas; + TPagamento _pag; + TAssoc_array _tabella_iva; // tabella di imponibili ed imposte - TProvvigioni_agente* _provv_agente; - TString16 _old_agente; // Agente originale - - TRiga_documento * _sconto; // Riga per lo sconto di testata - TRiga_documento * _esenzione; // Riga per l' esenzione iva - - bool _dirty_deny; + TProvvigioni_agente* _provv_agente; + TString16 _old_agente; // Agente originale + + TRiga_documento * _sconto; // Riga per lo sconto di testata + TRiga_documento * _esenzione; // Riga per l' esenzione iva + + bool _dirty_deny; - 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; - static TCodgiac_livelli *_livelli; + 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; + static TCodgiac_livelli *_livelli; -protected: - virtual TRectype * new_body_record(int logicnum = 0) - { return new TRiga_documento(this); } +protected: + virtual TRectype * new_body_record(int logicnum = 0) { return new TRiga_documento(this); } + TRiga_documento & row(int index); + const TRiga_documento& physical_row(int index) const; - TRiga_documento & row(int index); - const TRiga_documento& physical_row(int index) const; + long get_next_key(char provv, int anno, const char* codnum) const; + virtual void put_str(const char* fieldname, const char* val); + virtual const TString & get_str(const char* fieldname) const ; - long get_next_key(char provv, int anno, const char* codnum) const; - virtual void put_str(const char* fieldname, const char* val); - virtual const TString & get_str(const char* fieldname) const ; + long renum_ndoc(long numdoc = 0); + virtual bool key_complete() { return numero() > 0; } + virtual bool renum() { return renum_ndoc() > 0;} + void set_riga_sconto(); + int write_rewrite(TBaseisamfile & f, bool re) const; + virtual TDocumento & copy(const TDocumento & d); + virtual TObject* dup() const { return new TDocumento(*this); } + void calc_iva_fattura_commerciale(); + void update_tabella_iva(); + void dirty_tabella_iva() { _tabella_iva.destroy();} + static void test_firm(); - long renum_ndoc(long numdoc = 0); - virtual bool key_complete() { return numero() > 0; } - virtual bool renum() { return renum_ndoc() > 0;} - void set_riga_sconto(); - int write_rewrite(TBaseisamfile & f, bool re) const; - virtual TDocumento & copy(const TDocumento & d); - virtual TObject* dup() const { return new TDocumento(*this); } - void calc_iva_fattura_commerciale(); - void update_tabella_iva(); - void dirty_tabella_iva() { _tabella_iva.destroy();} - static void test_firm(); - - void init(); - void check_modules(); - virtual void set_variables(TExpression * e) const ; - int set_row_ids(); - -public: - const TString& codiva_spese() const ; - const TString& codiva_bolli() const ; + void init(); + void check_modules(); + virtual void set_variables(TExpression * e) const ; + int set_row_ids(); + +public: + const TString& codiva_spese() const ; + const TString& codiva_bolli() const ; - TCodgiac_livelli & livelli() const ; - void dirty_fields(); + TCodgiac_livelli & livelli() const ; + void dirty_fields(); - TAssoc_array & tabella_iva() { update_tabella_iva(); return _tabella_iva; } - TCli_for & clifor() const; - TOccasionale & occas() const; - const TAgente & agente() const; - const TString & riferimento(TString& rif) const { return tipo().riferimento(*this, rif); } + TAssoc_array & tabella_iva() { update_tabella_iva(); return _tabella_iva; } + TCli_for & clifor() const; + TOccasionale & occas() const; + const TAgente & agente() const; + const TString & riferimento(TString& rif) const { return tipo().riferimento(*this, rif); } - virtual TRecord_array& body(int logicnum = 0) const; - virtual TDocumento & operator =(const TDocumento & d) {return copy(d);} - virtual TRectype & operator =(const TRectype & r); - virtual TRectype & operator =(const char * r); - virtual void zero(const char * fieldname); - virtual void zero(char c = '\0') { TMultiple_rectype::zero(c); } - - int physical_rows() const { return body().rows(); } - int rows() const { return physical_rows() + ((_sconto != NULL) ? 1 : 0) + ((_esenzione != NULL) ? 1 : 0); } - 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); } - const TRiga_documento* get_row_id(long id) const; - - TRiga_documento& insert_row(int row, const char *tipo = NULL); - TRiga_documento& new_row(const char *tipo = NULL); - 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); } - virtual int remove(TBaseisamfile& f) const; + virtual TRecord_array& body(int logicnum = 0) const; + virtual TDocumento & operator =(const TDocumento & d) {return copy(d);} + virtual TRectype & operator =(const TRectype & r); + virtual TRectype & operator =(const char * r); + virtual void zero(const char * fieldname); + virtual void zero(char c = '\0') { TMultiple_rectype::zero(c); } - 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);} - - int write(bool re = FALSE) const { TLocalisamfile f(LF_DOC); return write_rewrite(f, re);} - int rewrite() const { return write(true); } - int remove() const { TLocalisamfile f(LF_DOC); return remove(f);} - int decimals(bool price = FALSE) const; - - void flush_rows(); - - TProvvigioni_agente& calc_provvigioni(const bool generata = true); - int write_provvigioni() { return calc_provvigioni().write();} + int physical_rows() const { return body().rows(); } + int rows() const { return physical_rows() + ((_sconto != NULL) ? 1 : 0) + ((_esenzione != NULL) ? 1 : 0); } + 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); } + const TRiga_documento* get_row_id(long id) const; - char tipo_numerazione() const { return get_char("PROVV"); } - int anno() const { return get_int("ANNO"); } - const TString& numerazione() const { return get("CODNUM"); } - long numero() const { return get_long("NDOC"); } - TDate data() const { return get_date("DATADOC"); } - bool in_valuta() const; - const TString& valuta() const { return get("CODVAL"); } - real cambio() const { return get_real("CAMBIO"); } - bool tipo_valido() const { return get("TIPODOC").not_empty(); } - static const TTipo_documento& tipo(const char * tipodoc); - const TTipo_documento& tipo() const; - static const TCodice_numerazione& codice_numerazione(const char * numerazione); - const TCodice_numerazione& codice_numerazione() const; - void set_tipo(const char * tipo) { head().put("TIPODOC", tipo);} - bool provvisorio() const { return get_char("PROVV") == 'P'; } - char stato() const { return get_char("STATO"); } - void stato(char s) { put("STATO", s); } - const TString & codice_costo() const { return get(DOC_CODCOSTO);} - const TString & codice_commessa() const { return get(DOC_CODCMS);} - const TString & fase_commessa() const { return get(DOC_FASCMS);} - bool modificabile() const; - bool cancellabile() const; - bool stampabile() const; - bool bloccato() const; + TRiga_documento& insert_row(int row, const char *tipo = NULL); + TRiga_documento& new_row(const char *tipo = NULL); + 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); } + virtual int remove(TBaseisamfile& f) const; - bool raggruppabile() const { return get_bool("RAGGR"); } - bool raggruppabile(const TDocumento& doc, TToken_string& campi) const; - - char tipocf() const {return *(const char *) (*_tipocf);} - long codcf() const {return (long) *_codcf;} - const char * cod_occas() const { return (const char *) *_cod_occas; } - - static void set_key(TRectype& rec, char provv, int anno, const char* codnum, long numdoc); - static void copy_data(TRectype& dst, const TRectype& src); - static void copy_data(TRiga_documento& dst, const TRiga_documento& src); - void copy_contents(const TDocumento & src); - - void set_fields(TAuto_variable_rectype & rec); - void set_riga_esenzione(); + 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);} - void iva_esente(TString & codiva_es) const; - real spese_incasso(int ndec, TTipo_importo netto = _lordo) const ; - real bolli(real & imp, int ndec, TTipo_importo netto = _lordo) const ; + int write(bool re = FALSE) const { TLocalisamfile f(LF_DOC); return write_rewrite(f, re);} + int rewrite() const { return write(true); } + int remove() const { TLocalisamfile f(LF_DOC); return remove(f);} + int decimals(bool price = FALSE) const; - real imponibile(bool spese = FALSE, int ndec = AUTO_DECIMALS) const; - real imposta(bool spese = FALSE, int ndec = AUTO_DECIMALS) const; - real totale_doc() const; - real totale_netto() const; - real basesconto() const; - real spese() const; + void flush_rows(); + + TProvvigioni_agente& calc_provvigioni(const bool generata = true); + int write_provvigioni() { return calc_provvigioni().write();} + + char tipo_numerazione() const { return get_char("PROVV"); } + int anno() const { return get_int("ANNO"); } + const TString& numerazione() const { return get("CODNUM"); } + long numero() const { return get_long("NDOC"); } + TDate data() const { return get_date("DATADOC"); } + bool in_valuta() const; + const TString& valuta() const { return get("CODVAL"); } + real cambio() const { return get_real("CAMBIO"); } + bool tipo_valido() const { return get("TIPODOC").not_empty(); } + static const TTipo_documento& tipo(const char * tipodoc); + const TTipo_documento& tipo() const; + static const TCodice_numerazione& codice_numerazione(const char * numerazione); + const TCodice_numerazione& codice_numerazione() const; + void set_tipo(const char * tipo) { head().put("TIPODOC", tipo);} + bool provvisorio() const { return get_char("PROVV") == 'P'; } + char stato() const { return get_char("STATO"); } + void stato(char s) { put("STATO", s); } + const TString & codice_costo() const { return get(DOC_CODCOSTO);} + const TString & codice_commessa() const { return get(DOC_CODCMS);} + const TString & fase_commessa() const { return get(DOC_FASCMS);} + bool modificabile() const; + bool cancellabile() const; + bool stampabile() const; + bool bloccato() const; + + bool raggruppabile() const { return get_bool("RAGGR"); } + bool raggruppabile(const TDocumento& doc, TToken_string& campi) const; + + char tipocf() const {return *(const char *) (*_tipocf);} + long codcf() const {return (long) *_codcf;} + const char * cod_occas() const { return (const char *) *_cod_occas; } + + static void set_key(TRectype& rec, char provv, int anno, const char* codnum, long numdoc); + static void copy_data(TRectype& dst, const TRectype& src); + static void copy_data(TRiga_documento& dst, const TRiga_documento& src); + void copy_contents(const TDocumento & src); + + void set_fields(TAuto_variable_rectype & rec); + void set_riga_esenzione(); + + void iva_esente(TString & codiva_es) const; + real spese_incasso(int ndec, TTipo_importo netto = _lordo) const ; + real bolli(real & imp, int ndec, TTipo_importo netto = _lordo) const ; + + real imponibile(bool spese = FALSE, int ndec = AUTO_DECIMALS) const; + real imposta(bool spese = FALSE, int ndec = AUTO_DECIMALS) const; + real totale_doc() const; + real totale_netto() const; + real basesconto() const; + real spese() const; real ritenute(const char tipo = '\0', bool lordo = false, int ndec = AUTO_DECIMALS) const; - real provvigione(int ndec = AUTO_DECIMALS) const; - real valore(bool totale, int ndec = AUTO_DECIMALS) const; - - TPagamento & pagamento(); - - void update_spese_aut(TString_array & spese, bool preserve_old = FALSE, TSheet_field * sh = NULL); - real calc_conai_qta(int type); - void update_conai(); - - bool is_generic() const { return tipo_valido() && tipo().is_generic(); } - 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(); } - bool is_evaso() const; - bool is_nota_credito() const; + real provvigione(int ndec = AUTO_DECIMALS) const; + real valore(bool totale, int ndec = AUTO_DECIMALS) const; - TDocumento (); - TDocumento (const TDocumento & d); - TDocumento(char provv, int anno, const char* codnum, long numdoc); - TDocumento(const TRectype& doc); - virtual ~TDocumento(); - }; + TPagamento & pagamento(); + + void update_spese_aut(TString_array & spese, bool preserve_old = FALSE, TSheet_field * sh = NULL); + real calc_conai_qta(int type); + void update_conai(); + + bool is_generic() const { return tipo_valido() && tipo().is_generic(); } + 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(); } + bool is_evaso() const; + bool is_nota_credito() const; + + TDocumento (); + TDocumento (const TDocumento & d); + TDocumento(char provv, int anno, const char* codnum, long numdoc); + TDocumento(const TRectype& doc); + virtual ~TDocumento(); +}; class TCurrency_documento : public TCurrency { protected: - void copy(const TCurrency& cur) {TCurrency::copy(cur); } + 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; } + 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() { } + 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() { } }; class TCodgiac_livelli; -class TDocumento_mask : public TVariable_mask // velib06 +class TDocumento_mask : public TVariable_mask // velib06 { - int _progs_page; // pagina in cui cominciano i progressivi - TSheet_field* _sheet; // Spreadsheet - TDocumento _doc; // documento - TCodgiac_livelli * _livelli_giac;// livelli di giacenza - - TCond_vendita* _condv; // condizioni di vendita - TAssoc_array _maskriga;// Maschere delle righe + int _progs_page; // pagina in cui cominciano i progressivi + TSheet_field* _sheet; // Spreadsheet + TDocumento _doc; // documento + TCodgiac_livelli * _livelli_giac; // livelli di giacenza + + TCond_vendita* _condv; // condizioni di vendita + TAssoc_array _maskriga; // Maschere delle righe TPointer_array _handlers; TBit_array _calculated_pages; - bool _ges_mag, _ges_dep; - TString _std_mag, _std_dep; + bool _ges_mag, _ges_dep; + TString _std_mag, _std_dep; TSmart_card * _smartcard; + short _last_cdc_dlg; + short _last_cms_dlg; protected: - void update_progs(bool stop_run = false); - virtual void next_page(int p); - virtual void start_run(); - virtual bool stop_run(KEY key); - void sconto_testa2mask(); - void spese2mask(); + void update_progs(bool stop_run = false); + virtual void next_page(int p); + virtual void start_run(); + virtual bool stop_run(KEY key); + void sconto_testa2mask(); + void spese2mask(); - int insert_anal_fields(TMask& m, int page, int lf, int& y, short& dlg, short& dlgd, bool required); - void insert_anal_page(); + int insert_anal_fields(TMask& m, int page, int lf, int& y, short& dlg, short& dlgd, bool required); + void insert_anal_page(); - void configura_sheet(TSheet_field& sheet); - static bool ss_notify(TSheet_field& ss, int r, KEY key); - static bool ss_handler(TMask_field& f, KEY key); - static TMask* ss_getmask(int numriga, TMask& fullmask); - - void set_field_handler(short fieldid, CONTROL_HANDLER handler); - bool call_handler( TMask_field& f, KEY key); + void configura_sheet(TSheet_field& sheet); + static bool ss_notify(TSheet_field& ss, int r, KEY key); + static bool ss_handler(TMask_field& f, KEY key); + static TMask* ss_getmask(int numriga, TMask& fullmask); + + void set_field_handler(short fieldid, CONTROL_HANDLER handler); + bool call_handler( TMask_field& f, KEY key); static bool universal_handler( TMask_field& f, KEY key); 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 ); - static bool datacambio_handler( TMask_field& f, KEY key ); - static bool codval_handler( TMask_field& f, KEY key ); - void user_set_handler( int fieldid, int index); + 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 ); + static bool datacambio_handler( TMask_field& f, KEY key ); + static bool codval_handler( TMask_field& f, KEY key ); + void user_set_handler( int fieldid, int index); - void reset_masks(const TString& tipo_doc); + void reset_masks(const TString& tipo_doc); public: - TVariable_mask* riga_mask(int numriga); - virtual bool on_key(KEY key); + TVariable_mask* riga_mask(int numriga); + virtual bool on_key(KEY key); - TDocumento& doc() { return _doc; } - const TDocumento& doc() const { return _doc; } - TCond_vendita & condv() const; + TDocumento& doc() { return _doc; } + const TDocumento& doc() const { return _doc; } + TCond_vendita & condv() const; - void occ2mask(); - void cli2mask(); - void doc2mask(bool reload_clifo = true); - void mask2doc(); + void occ2mask(); + void cli2mask(); + void doc2mask(bool reload_clifo = true); + void mask2doc(); - void update_giacenza(); - - const TString& stdmag() const { return _std_mag; } - const TString& stddep() const { return _std_dep; } + void update_giacenza(); + + const TString& stdmag() const { return _std_mag; } + const TString& stddep() const { return _std_dep; } + const short last_cdc_dlg() const { return _last_cdc_dlg;} + const short last_cms_dlg() const { return _last_cms_dlg;} - TSheet_field& sheet() const { return *_sheet; } - TCodgiac_livelli& livelli() const { return *_livelli_giac; } - static bool anno_handler( TMask_field& f, KEY key); - static bool num_handler( TMask_field& f, KEY key ); - static bool tip_handler( TMask_field& f, KEY key ); - static bool numdocrif_search_handler( TMask_field& f, KEY key ); - static bool ragsoc_search_handler( TMask_field& f, KEY key ); - static bool datadocrif_handler(TMask_field& f, KEY key); + TSheet_field& sheet() const { return *_sheet; } + TCodgiac_livelli& livelli() const { return *_livelli_giac; } + static bool anno_handler( TMask_field& f, KEY key); + static bool num_handler( TMask_field& f, KEY key ); + static bool tip_handler( TMask_field& f, KEY key ); + static bool numdocrif_search_handler( TMask_field& f, KEY key ); + static bool ragsoc_search_handler( TMask_field& f, KEY key ); + static bool datadocrif_handler(TMask_field& f, KEY key); - void highlight(COLOR high_back_color, COLOR high_color); + void highlight(COLOR high_back_color, COLOR high_color); - bool TDocumento_mask::is_calculated_page(int p) { return _calculated_pages[p]; } + bool TDocumento_mask::is_calculated_page(int p) { return _calculated_pages[p]; } TSmart_card * smartcard() const { return _smartcard;} - TDocumento_mask(const char* tipodoc); - virtual ~TDocumento_mask(); + TDocumento_mask(const char* tipodoc); + virtual ~TDocumento_mask(); }; struct dec_parm { - int qta_lit, - qta_val; - // add other groups here + int qta_lit; + int qta_val; + // add other groups here }; ////////////////////////////////////////////////////////////////////////////////////////////// @@ -863,62 +862,60 @@ struct dec_parm { 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 -// real _importi_netti, _imposte; + // Parametri del documento + dec_parm _parm; // Parametri per gli arrotondamenti - // membri per il calcolo del riepilogo IVA - int _sum_filter; // Filtro corrente della riga TRiepilogo_iva in corso di stampa (-1 se non ha ancora calcolato la tabella) - bool _sum_selected; // true se ha selezionato una riga del riepilogo, funge da semaforo per leggere la prossima - TString_array _order_array; // Array di TToken_string contenenti i codici IVA soddisfacenti ad ogni tipo di filtro - TAssoc_array _summary_table; // Array associativo contenete imonibili ed imposte pronte per la stampa; - TArray _summary_array; // Array dove vengono memorizzate le imposte/imponibili per riga - TRiepilogo_iva _sum_current; // Riga corrente del riepilogo + // membri per il calcolo del riepilogo IVA - // membri per il calcolo del riepilogo scadenze - TString_array _scadenze_array;// Array che contiene le scadenze ("|") - int _scadenze_current; // indice per identificare l'elementi corrente sull'array (-1 se non ha ancora calcolato) + int _sum_filter; // Filtro corrente della riga TRiepilogo_iva in corso di stampa (-1 se non ha ancora calcolato la tabella) + bool _sum_selected; // true se ha selezionato una riga del riepilogo, funge da semaforo per leggere la prossima + TString_array _order_array; // Array di TToken_string contenenti i codici IVA soddisfacenti ad ogni tipo di filtro + TAssoc_array _summary_table; // Array associativo contenete imonibili ed imposte pronte per la stampa; + TArray _summary_array; // Array dove vengono memorizzate le imposte/imponibili per riga + TRiepilogo_iva _sum_current; // Riga corrente del riepilogo + + // membri per il calcolo del riepilogo scadenze + TString_array _scadenze_array; // Array che contiene le scadenze ("|") + int _scadenze_current; // indice per identificare l'elementi corrente sull'array (-1 se non ha ancora calcolato) public: - // 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 - const TRiepilogo_iva& sum_current() const { return _sum_current; } // ritorna la riga corrente del filtro corrente - const char * summary_get(const TString& w); // ritorna l'informazione richiesta estratta dall'elemento corrente - int summary_items() { return tabella_iva().items();} // ritorna il numero di righe in totale della tabellina - const TAssoc_array& summary() const { return _summary_table; } - const TArray& summary_array() const { return _summary_array;} - - // 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; } + // 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 + const TRiepilogo_iva& sum_current() const { return _sum_current; } // ritorna la riga corrente del filtro corrente + const char * summary_get(const TString& w); // ritorna l'informazione richiesta estratta dall'elemento corrente + int summary_items() { return tabella_iva().items();} // ritorna il numero di righe in totale della tabellina + const TAssoc_array& summary() const { return _summary_table; } + const TArray& summary_array() const { return _summary_array;} + + // 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 ; } -// void set_condv(TCli_for * cli); // Cambia le condizioni di vendita - TDocumentoEsteso (const TRectype & rec, dec_parm & parm) ; - TDocumentoEsteso (const TRectype & rec) ; - TDocumentoEsteso () ; - virtual ~TDocumentoEsteso(); + // 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 ; } +// void set_condv(TCli_for * cli); // Cambia le condizioni di vendita + TDocumentoEsteso (const TRectype & rec, dec_parm & parm) ; + TDocumentoEsteso (const TRectype & rec) ; + TDocumentoEsteso () ; + virtual ~TDocumentoEsteso(); }; #endif \ No newline at end of file diff --git a/ve/velib06.cpp b/ve/velib06.cpp index 3643bad5a..852dcc5a3 100755 --- a/ve/velib06.cpp +++ b/ve/velib06.cpp @@ -22,20 +22,20 @@ #include "veuml1.h" #include "veini.h" -#include "sconti.h" +#include "sconti.h" -#include "doc.h" -#include "rdoc.h" +#include "doc.h" +#include "rdoc.h" class TOriginal_row_mask : public TAutomask -{ +{ protected: - virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); virtual bool on_key(KEY key); public: - TOriginal_row_mask() : TAutomask("ve0100c") { } + TOriginal_row_mask() : TAutomask("ve0100c") { } }; bool TOriginal_row_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) @@ -53,205 +53,207 @@ bool TOriginal_row_mask::on_key(KEY key) TDocumento_mask::TDocumento_mask(const char* td) - : TVariable_mask(), _progs_page(-1), - _condv(NULL), _smartcard(NULL) -{ - CHECK(strlen(td) <= 4, "TDocumento_mask(TipoDocumento) not (MaskName)"); + : TVariable_mask(), _progs_page(-1), + _condv(NULL), _smartcard(NULL), + _last_cdc_dlg(-1), _last_cms_dlg(-1) - { - TMagazzini m; +{ + CHECK(strlen(td) <= 4, "TDocumento_mask(TipoDocumento) not (MaskName)"); - _ges_mag = m.gestmag(); - _ges_dep = m.gestdep(); - _std_mag = m.standardmag(); - _std_dep = m.standarddep(); - } - _doc.set_tipo(td); - const TString16 mname = _doc.tipo().mask_name(); - read_mask(mname, 0, MAX_PAGES); + { + TMagazzini m; - _sheet = &sfield(F_SHEET); - _sheet->set_handler( ss_handler ); - _sheet->set_notify( ss_notify ); - _sheet->set_append(FALSE); - - TList_field& listbox = (TList_field&)field(F_LBTIPORIGA); - - TTipo_documento& tdoc = (TTipo_documento&)_doc.tipo(); - TToken_string& keys = (TToken_string&)tdoc.keys_descrs()[0]; - TToken_string& descrs = (TToken_string&)tdoc.keys_descrs()[1]; - listbox.replace_items(keys, descrs); + _ges_mag = m.gestmag(); + _ges_dep = m.gestdep(); + _std_mag = m.standardmag(); + _std_dep = m.standarddep(); + } + _doc.set_tipo(td); + const TString16 mname = _doc.tipo().mask_name(); + read_mask(mname, 0, MAX_PAGES); - // Controlla se deve generare la pagina di analitica - if (dongle().active(CAAUT) || dongle().active(CMAUT)) - insert_anal_page(); + _sheet = &sfield(F_SHEET); + _sheet->set_handler( ss_handler ); + _sheet->set_notify( ss_notify ); + _sheet->set_append(FALSE); + + TList_field& listbox = (TList_field&)field(F_LBTIPORIGA); + + TTipo_documento& tdoc = (TTipo_documento&)_doc.tipo(); + TToken_string& keys = (TToken_string&)tdoc.keys_descrs()[0]; + TToken_string& descrs = (TToken_string&)tdoc.keys_descrs()[1]; + listbox.replace_items(keys, descrs); - - configura_sheet(*_sheet); - - ((TVariable_sheet_field*)_sheet)->set_getmask( ss_getmask ); - if (_doc.tipo().clifo_optional()) - { - field(F_CODCF).check_type(CHECK_NORMAL); - field(F_RAGSOC).check_type(CHECK_NORMAL); - } - + // Controlla se deve generare la pagina di analitica + if (dongle().active(CAAUT) || dongle().active(CMAUT)) + insert_anal_page(); + + + configura_sheet(*_sheet); + + ((TVariable_sheet_field*)_sheet)->set_getmask( ss_getmask ); + if (_doc.tipo().clifo_optional()) + { + field(F_CODCF).check_type(CHECK_NORMAL); + field(F_RAGSOC).check_type(CHECK_NORMAL); + } + int i; - + for (i = fields() - 1; i >= 0; i--) { TMask_field & f = fld(i); if (f.is_editable()) f.set_handler(universal_handler); } - + set_field_handler( F_OCCASEDIT, occas_handler ); - set_field_handler( F_CODCF, clifo_handler ); - set_field_handler( F_CODPAG, condpag_hndl ); - set_field_handler( F_DATAINSC, condpag_hndl ); - set_field_handler( F_CODNOTE, note_hndl ); - set_field_handler( F_DATADOC, data_hndl ); - set_field_handler( F_CODLIST, codlist_handler ); - set_field_handler( F_CODLIST1, codlist_handler ); - set_field_handler( F_CODCONT, codcont_handler ); - set_field_handler( F_CODCONT1, codcont_handler ); - set_field_handler( F_CODCAMP, codcamp_handler ); - set_field_handler( F_CODVAL, codval_handler ); - set_field_handler( F_CODVAL1, codval_handler ); - set_field_handler( F_NUMDOCRIF, datadocrif_handler); - set_field_handler( F_DATADOCRIF, datadocrif_handler); - set_handler( DLG_ELABORA, elabora_handler ); - set_handler( DLG_PRINT, print_handler ); - - const TString_array& handlers = tdoc.handlers(); - int numhandler = handlers.items(); - - for (i = 0; i < numhandler; i ++ ) - { - TToken_string& riga = (TToken_string&) handlers[i]; - + set_field_handler( F_CODCF, clifo_handler ); + set_field_handler( F_CODPAG, condpag_hndl ); + set_field_handler( F_DATAINSC, condpag_hndl ); + set_field_handler( F_CODNOTE, note_hndl ); + set_field_handler( F_DATADOC, data_hndl ); + set_field_handler( F_CODLIST, codlist_handler ); + set_field_handler( F_CODLIST1, codlist_handler ); + set_field_handler( F_CODCONT, codcont_handler ); + set_field_handler( F_CODCONT1, codcont_handler ); + set_field_handler( F_CODCAMP, codcamp_handler ); + set_field_handler( F_CODVAL, codval_handler ); + set_field_handler( F_CODVAL1, codval_handler ); + set_field_handler( F_NUMDOCRIF, datadocrif_handler); + set_field_handler( F_DATADOCRIF, datadocrif_handler); + set_handler( DLG_ELABORA, elabora_handler ); + set_handler( DLG_PRINT, print_handler ); + + const TString_array& handlers = tdoc.handlers(); + int numhandler = handlers.items(); + + for (i = 0; i < numhandler; i ++ ) + { + TToken_string& riga = (TToken_string&) handlers[i]; + user_set_handler( riga.get_int( 0 ), riga.get_int( 1 ) ); - } + } - _livelli_giac = new TCodgiac_livelli; + _livelli_giac = new TCodgiac_livelli; - for (i = 4; i > 0; i--) - { - const short pos = _sheet->cid2index(FR_LIV1 + i -1); - if (_livelli_giac->enabled(i)) - { - const TString & header = _livelli_giac->name(i); - const int len = header.len() + 1; - const int f_len = _livelli_giac->code_length(i); - _sheet->set_column_header(pos, header); - _sheet->set_column_width(pos, (len > f_len ? len : f_len) * 8); - } - else - { - _sheet->sheet_mask().hide(FR_LIV1 + i -1); - _sheet->delete_column(pos); - } - } + for (i = 4; i > 0; i--) + { + const short pos = _sheet->cid2index(FR_LIV1 + i -1); + if (_livelli_giac->enabled(i)) + { + const TString & header = _livelli_giac->name(i); + const int len = header.len() + 1; + const int f_len = _livelli_giac->code_length(i); + _sheet->set_column_header(pos, header); + _sheet->set_column_width(pos, (len > f_len ? len : f_len) * 8); + } + else + { + _sheet->sheet_mask().hide(FR_LIV1 + i -1); + _sheet->delete_column(pos); + } + } // configurazione campi - TConfig cfg(CONFIG_DITTA, "ve"); - const bool gesval = cfg.get_bool("GESVAL"); - const bool gescambi = cfg.get_bool("GESVALAC"); + TConfig cfg(CONFIG_DITTA, "ve"); + const bool gesval = cfg.get_bool("GESVAL"); + const bool gescambi = cfg.get_bool("GESVALAC"); - if (gesval) - { - const bool enable_controeuro = cfg.get_bool("CONTROEURO"); + if (gesval) + { + const bool enable_controeuro = cfg.get_bool("CONTROEURO"); - enable(F_CONTROEURO, enable_controeuro); - show(F_CODVAL, !gescambi); - show(F_DATACAMBIO, !gescambi); - show(F_NOMEVAL, !gescambi); - show(F_CODVAL1, gescambi); - show(F_DATACAMBIO1, gescambi); - show(F_NOMEVAL1, gescambi); - show(F_CAMBIO); - } - else - { - disable(F_CODVAL); - disable(F_DATACAMBIO); - disable(F_CONTROEURO); - disable(F_NOMEVAL); - hide(F_CODVAL1); - hide(F_DATACAMBIO1); - hide(F_NOMEVAL1); - disable(F_CAMBIO); - } + enable(F_CONTROEURO, enable_controeuro); + show(F_CODVAL, !gescambi); + show(F_DATACAMBIO, !gescambi); + show(F_NOMEVAL, !gescambi); + show(F_CODVAL1, gescambi); + show(F_DATACAMBIO1, gescambi); + show(F_NOMEVAL1, gescambi); + show(F_CAMBIO); + } + else + { + disable(F_CODVAL); + disable(F_DATACAMBIO); + disable(F_CONTROEURO); + disable(F_NOMEVAL); + hide(F_CODVAL1); + hide(F_DATACAMBIO1); + hide(F_NOMEVAL1); + disable(F_CAMBIO); + } - const bool geslin = cfg.get_bool("GESLIN"); + const bool geslin = cfg.get_bool("GESLIN"); - enable(F_CODLIN, geslin); - enable(F_DESLIN, geslin); + enable(F_CODLIN, geslin); + enable(F_DESLIN, geslin); - const bool geslis = cfg.get_bool("GES", NULL, 1); - const bool gesliscatven = cfg.get_bool("GESLISCV"); + const bool geslis = cfg.get_bool("GES", NULL, 1); + const bool gesliscatven = cfg.get_bool("GESLISCV"); - if (geslis) - { - show(F_CODLIST, !gesliscatven); - show(F_CODLIST1, gesliscatven); - } - else - { - disable(F_CODLIST); - hide(F_CODLIST1); - } + if (geslis) + { + show(F_CODLIST, !gesliscatven); + show(F_CODLIST1, gesliscatven); + } + else + { + disable(F_CODLIST); + hide(F_CODLIST1); + } - const bool gescontr = cfg.get_bool("GES", "ve", 2); - const bool gescontrcli = cfg.get_bool("GESCONCC"); + const bool gescontr = cfg.get_bool("GES", "ve", 2); + const bool gescontrcli = cfg.get_bool("GESCONCC"); - if (gescontr) - { - show(F_CODCONT1, gescontrcli); - show(F_CODCONT, !gescontrcli); - } - else - { - disable(F_CODCONT); - hide(F_CODCONT1); - } + if (gescontr) + { + show(F_CODCONT1, gescontrcli); + show(F_CODCONT, !gescontrcli); + } + else + { + disable(F_CODCONT); + hide(F_CODCONT1); + } - const bool gesoff = cfg.get_bool("GES", "ve", 3); - enable(F_CODCAMP, gesoff); + const bool gesoff = cfg.get_bool("GES", "ve", 3); + enable(F_CODCAMP, gesoff); - const bool gessco = cfg.get_char("GESSCO") != 'N'; - enable(F_SCONTOPERC, gessco); + const bool gessco = cfg.get_char("GESSCO") != 'N'; + enable(F_SCONTOPERC, gessco); - const bool gesage = cfg.get_bool("GESAGE"); - enable(F_CODAG, gesage); - enable(F_DESAG, gesage); - enable(F_CODAGVIS, gesage); - enable(F_DESAGVIS, gesage); + const bool gesage = cfg.get_bool("GESAGE"); + enable(F_CODAG, gesage); + enable(F_DESAG, gesage); + enable(F_CODAGVIS, gesage); + enable(F_DESAGVIS, gesage); - const bool has_movmag = dongle().active(MGAUT) && _doc.tipo().mov_mag(); - int pos = id2pos(F_CAUSMAG); - if (pos >= 0) - fld(pos).show(has_movmag); - pos = id2pos(F_DESCRMAG); - if (pos >= 0) - fld(pos).show(has_movmag); - pos = id2pos(F_CAUSMAGC); - if (pos >= 0) - fld(pos).show(has_movmag); - pos = id2pos(F_DESCRMAGC); - if (pos >= 0) - fld(pos).show(has_movmag); - pos = id2pos(F_CURGIAC); - if (pos >= 0) - fld(pos).show(has_movmag); - pos = id2pos(F_CURDISP); - if (pos >= 0) - fld(pos).show(has_movmag); + const bool has_movmag = dongle().active(MGAUT) && _doc.tipo().mov_mag(); + int pos = id2pos(F_CAUSMAG); + if (pos >= 0) + fld(pos).show(has_movmag); + pos = id2pos(F_DESCRMAG); + if (pos >= 0) + fld(pos).show(has_movmag); + pos = id2pos(F_CAUSMAGC); + if (pos >= 0) + fld(pos).show(has_movmag); + pos = id2pos(F_DESCRMAGC); + if (pos >= 0) + fld(pos).show(has_movmag); + pos = id2pos(F_CURGIAC); + if (pos >= 0) + fld(pos).show(has_movmag); + pos = id2pos(F_CURDISP); + if (pos >= 0) + fld(pos).show(has_movmag); for (i = fields() - 1; i >= 0; i--) { - const TMask_field& f = fld(i); + const TMask_field& f = fld(i); const int p = f.page(); @@ -262,226 +264,230 @@ TDocumento_mask::TDocumento_mask(const char* td) TDocumento_mask::~TDocumento_mask() { - if (_condv) - delete _condv; - if (_livelli_giac) - delete _livelli_giac; - if (_smartcard) - delete _smartcard; + if (_condv) + delete _condv; + if (_livelli_giac) + delete _livelli_giac; + if (_smartcard) + delete _smartcard; } -int TDocumento_mask::insert_anal_fields(TMask& m, int page, int lf, int& y, - short& dlg, short& dlgd, bool required) +int TDocumento_mask::insert_anal_fields(TMask& m, int page, int lf, int& y, + short& dlg, short& dlgd, bool required) { - const int h = ca_create_fields(m, page, lf, 2, y, dlg, dlgd); + const int h = ca_create_fields(m, page, lf, 2, y, dlg, dlgd); - const bool main_mask = m.id2pos(F_SHEET) > 0; + const bool main_mask = m.id2pos(F_SHEET) > 0; - for (int i = 0; i < h; i++) - { - TEdit_field& fld = m.efield(dlg+i); - int logic = lf; - if (logic == LF_FASI) - { - const TMultilevel_code_info& fasinfo = ca_multilevel_code_info(LF_FASI); - if (fasinfo.parent() != 0) - { - const TMultilevel_code_info& parinfo = ca_multilevel_code_info(fasinfo.parent()); - if (i < parinfo.levels()) - logic = fasinfo.parent(); - } - } + for (int i = 0; i < h; i++) + { + TEdit_field& fld = m.efield(dlg+i); + int logic = lf; + if (logic == LF_FASI) + { + const TMultilevel_code_info& fasinfo = ca_multilevel_code_info(LF_FASI); + if (fasinfo.parent() != 0) + { + const TMultilevel_code_info& parinfo = ca_multilevel_code_info(fasinfo.parent()); + if (i < parinfo.levels()) + logic = fasinfo.parent(); + } + } - const char* fieldname = NULL; - switch(logic) - { - case LF_COMMESSE: fieldname = DOC_CODCMS; break; - case LF_FASI : fieldname = DOC_FASCMS; break; - default : fieldname = DOC_CODCOSTO; break; - } - TFieldref* f = (TFieldref*)fld.field(); - f->set_name(fieldname); - - fld.check_type(required ? CHECK_REQUIRED : CHECK_NORMAL); + const char* fieldname = NULL; + switch(logic) + { + case LF_COMMESSE: fieldname = DOC_CODCMS; break; + case LF_FASI : fieldname = DOC_FASCMS; break; + default : fieldname = DOC_CODCOSTO; break; + } + TFieldref* f = (TFieldref*)fld.field(); + f->set_name(fieldname); + + fld.check_type(required ? CHECK_REQUIRED : CHECK_NORMAL); - TEdit_field& dfld = m.efield(dlgd+i); - dfld.set_field(EMPTY_STRING); // Toglie campi che fan saltare gli output! + TEdit_field& dfld = m.efield(dlgd+i); + dfld.set_field(EMPTY_STRING); // Toglie campi che fan saltare gli output! - if (main_mask) - { - TSheet_field& sf = sfield(F_SHEET); - const TString head = fld.prompt(); - const int colid = FR_CDC1+(fld.dlg()-F_CDC1); - sf.set_column_header(colid, head); - if (fld.size() > head.len()) - sf.set_column_width(colid, fld.size()*8); // XI_FU_MULTIPLE + if (main_mask) + { + TSheet_field& sf = sfield(F_SHEET); + const TString head = fld.prompt(); + const int colid = FR_CDC1+(fld.dlg()-F_CDC1); + sf.set_column_header(colid, head); + if (fld.size() > head.len()) + sf.set_column_width(colid, fld.size()*8); // XI_FU_MULTIPLE - TMask& sm = sf.sheet_mask(); - TString80 str; str << *fld.field(); - sm.efield(colid).set_field(str); // Ricopia il campo nella maschera di riga per poterlo salvare! - } - } + TMask& sm = sf.sheet_mask(); + TString80 str; str << *fld.field(); + sm.efield(colid).set_field(str); // Ricopia il campo nella maschera di riga per poterlo salvare! + } + } - y += h+1; - dlg += h; dlgd += h; - return h; + y += h+1; + dlg += h; dlgd += h; + return h; } void TDocumento_mask::insert_anal_page() { - int newpage = win2page(_sheet->parent()); + int newpage = win2page(_sheet->parent()); if (newpage == 0) newpage++; - insert_page("Pagina", newpage); // Inserisce una pagina vuota con un titolo a caso + insert_page("Pagina", newpage); // Inserisce una pagina vuota con un titolo a caso - // Rinumera i titoli di tutte le pagine - const int lastpage = win2page(fld(fields()-1).parent()); // Calcola in numero dell'ultima pagina - TToken_string caption; - int i; - for (i = 0; i <= lastpage; i++) - { - TString16 tag = TR("Pag."); - tag << (i+1); // Calcola il titolo di ogni pagina - caption.add(tag); - } - set_caption(caption); // Setta tutti i titoli contemporaneamente + // Rinumera i titoli di tutte le pagine + const int lastpage = win2page(fld(fields()-1).parent()); // Calcola in numero dell'ultima pagina + TToken_string caption; + int i; + for (i = 0; i <= lastpage; i++) + { + TString16 tag = TR("Pag."); + tag << (i+1); // Calcola il titolo di ogni pagina + caption.add(tag); + } + set_caption(caption); // Setta tutti i titoli contemporaneamente - add_groupbox(DLG_NULL, newpage, "", 1, 0, 78, 6); - add_string(DLG_NULL, newpage, TR("Cod. num. "), 2, 1, 4, "D").set_group(2); - add_string(DLG_NULL, newpage, "", 24, 1, 50, "D").set_group(3); - add_string(DLG_NULL, newpage, TR("Tipo doc. "), 2, 2, 4, "D").set_group(4); - add_string(DLG_NULL, newpage, "", 24, 2, 50, "D").set_group(5); - add_number(DLG_NULL, newpage, TR("Esercizio "), 2, 3, 4, "D").set_group(9); - add_number(DLG_NULL, newpage, TR("Numero doc. "), 24, 3, 6, "D").set_group(6); - add_date(DLG_NULL, newpage, TR("Data "), 46, 3, "D").set_group(7); - add_string(DLG_NULL, newpage, TR("Stato "), 67, 3, 1, "D").set_group(8); - add_number(DLG_NULL, newpage, TR("Cliente "), 2, 4, 6, "D").set_group(10); - add_string(DLG_NULL, newpage, "", 24, 4, 50, "D").set_group(11); + add_groupbox(DLG_NULL, newpage, "", 1, 0, 78, 6); + add_string(DLG_NULL, newpage, TR("Cod. num. "), 2, 1, 4, "D").set_group(2); + add_string(DLG_NULL, newpage, "", 24, 1, 50, "D").set_group(3); + add_string(DLG_NULL, newpage, TR("Tipo doc. "), 2, 2, 4, "D").set_group(4); + add_string(DLG_NULL, newpage, "", 24, 2, 50, "D").set_group(5); + add_number(DLG_NULL, newpage, TR("Esercizio "), 2, 3, 4, "D").set_group(9); + add_number(DLG_NULL, newpage, TR("Numero doc. "), 24, 3, 6, "D").set_group(6); + add_date(DLG_NULL, newpage, TR("Data "), 46, 3, "D").set_group(7); + add_string(DLG_NULL, newpage, TR("Stato "), 67, 3, 1, "D").set_group(8); + add_number(DLG_NULL, newpage, TR("Cliente "), 2, 4, 6, "D").set_group(10); + add_string(DLG_NULL, newpage, "", 24, 4, 50, "D").set_group(11); - add_groupbox(DLG_NULL, newpage, TR("Contabilita' Analitica"), 1, 6, 78, 14); - - const TMultilevel_code_info& fasinfo = ca_multilevel_code_info(LF_FASI); - const bool use_fsc = fasinfo.levels() > 0; - TConfig_anal ini; - const bool fsc_req = use_fsc && ini.get_bool("FscRequired"); + add_groupbox(DLG_NULL, newpage, TR("Contabilita' Analitica"), 1, 6, 78, 14); + + const TMultilevel_code_info& fasinfo = ca_multilevel_code_info(LF_FASI); + const bool use_fsc = fasinfo.levels() > 0; + TConfig_anal ini; + const bool fsc_req = use_fsc && ini.get_bool("FscRequired"); - int y = 7; - short dlg = F_CDC1; // id del primo campo da generare - short dlgd = F_DESCDC1; + int y = 7; + short dlg = F_CDC1; // id del primo campo da generare + short dlgd = F_DESCDC1; - for (i = 0; i < 2; i++) - { - const TString& level = ini.get("Level", NULL, i+1); // Legge il livello 1 o 2 - if (level == "CDC") // Crea centro di costo - { - if (use_fsc && fasinfo.parent() == LF_CDC) - insert_anal_fields(*this, newpage, LF_FASI, y, dlg, dlgd, fsc_req); - else - { - const bool cdc_req = ini.get_bool("CdcRequired"); - insert_anal_fields(*this, newpage, LF_CDC, y, dlg, dlgd, cdc_req); - } - } else - if (level == "CMS") // Crea commessa - { - if (use_fsc && fasinfo.parent() == LF_COMMESSE) - insert_anal_fields(*this, newpage, LF_FASI, y, dlg, dlgd, fsc_req); - else - { - const bool cms_req = ini.get_bool("CmsRequired"); - insert_anal_fields(*this, newpage, LF_COMMESSE, y, dlg, dlgd, cms_req); - } - } - } - if (use_fsc && fasinfo.parent() <= 0) - insert_anal_fields(*this, newpage, LF_FASI, y, dlg, dlgd, fsc_req); + for (i = 0; i < 2; i++) + { + const TString& level = ini.get("Level", NULL, i+1); // Legge il livello 1 o 2 + if (level == "CDC") // Crea centro di costo + { + if (use_fsc && fasinfo.parent() == LF_CDC) + insert_anal_fields(*this, newpage, LF_FASI, y, dlg, dlgd, fsc_req); + else + { + const bool cdc_req = ini.get_bool("CdcRequired"); + + insert_anal_fields(*this, newpage, LF_CDC, y, dlg, dlgd, cdc_req); + _last_cdc_dlg = dlg - 1; + } + } else + if (level == "CMS") // Crea commessa + { + if (use_fsc && fasinfo.parent() == LF_COMMESSE) + insert_anal_fields(*this, newpage, LF_FASI, y, dlg, dlgd, fsc_req); + else + { + const bool cms_req = ini.get_bool("CmsRequired"); + + insert_anal_fields(*this, newpage, LF_COMMESSE, y, dlg, dlgd, cms_req); + _last_cms_dlg = dlg - 1; + } + } + } + if (use_fsc && fasinfo.parent() <= 0) + insert_anal_fields(*this, newpage, LF_FASI, y, dlg, dlgd, fsc_req); } void TDocumento_mask::configura_sheet(TSheet_field& sheet) { - TBit_array to_delete(MAX_COLUMNS); - to_delete.set(); - const TTipo_documento& tdoc = _doc.tipo(); - const TString_array& sheet_columns = tdoc.sheet_columns(); - const int ncols = sheet_columns.items(); + TBit_array to_delete(MAX_COLUMNS); + to_delete.set(); + const TTipo_documento& tdoc = _doc.tipo(); + const TString_array& sheet_columns = tdoc.sheet_columns(); + const int ncols = sheet_columns.items(); - TToken_string colonne; - int i; - - colonne = "0"; - for (i = 0; i < ncols; i ++ ) - { - TToken_string& sheet_col = (TToken_string&)sheet_columns.row(i); - const int field_id = sheet_col.get_int(0); - const int coltomove = sheet.cid2index(field_id); - to_delete.reset(coltomove); + TToken_string colonne; + int i; + + colonne = "0"; + for (i = 0; i < ncols; i ++ ) + { + TToken_string& sheet_col = (TToken_string&)sheet_columns.row(i); + const int field_id = sheet_col.get_int(0); + const int coltomove = sheet.cid2index(field_id); + to_delete.reset(coltomove); - const TString80 descr(sheet_col.get(1)); - if (descr.not_empty() ) - sheet.set_column_header( field_id, descr); + const TString80 descr(sheet_col.get(1)); + if (descr.not_empty() ) + sheet.set_column_header( field_id, descr); - const int size = sheet_col.get_int(2) * 8; // XI_FU_MULTIPLE - if (size != 0) - sheet.set_column_width( field_id, size); - - if (field_id != FR_LORDO || tdoc.calcolo_lordo()) - colonne.add(field_id); - } - - if (tdoc.calcolo_lordo()) - to_delete.reset(0L); - else - to_delete.set(0L); - to_delete.reset(1); + const int size = sheet_col.get_int(2) * 8; // XI_FU_MULTIPLE + if (size != 0) + sheet.set_column_width( field_id, size); + + if (field_id != FR_LORDO || tdoc.calcolo_lordo()) + colonne.add(field_id); + } + + if (tdoc.calcolo_lordo()) + to_delete.reset(0L); + else + to_delete.set(0L); + to_delete.reset(1); - if (!to_delete[sheet.cid2index(FR_CODDEP)]) - sheet.enable_column(FR_CODDEP, _ges_dep && _ges_mag); - if (!to_delete[sheet.cid2index(FR_CODMAG)]) - sheet.enable_column(FR_CODMAG, _ges_mag); - if (!to_delete[sheet.cid2index(FR_CODDEPC)]) - sheet.enable_column(FR_CODDEPC, _ges_dep && _ges_mag); - if (!to_delete[sheet.cid2index(FR_CODMAGC)]) - sheet.enable_column(FR_CODMAGC, _ges_mag); - to_delete.set(sheet.cid2index(FR_CODARTMAG)); - to_delete.set(sheet.cid2index(FR_CHECKED)); + if (!to_delete[sheet.cid2index(FR_CODDEP)]) + sheet.enable_column(FR_CODDEP, _ges_dep && _ges_mag); + if (!to_delete[sheet.cid2index(FR_CODMAG)]) + sheet.enable_column(FR_CODMAG, _ges_mag); + if (!to_delete[sheet.cid2index(FR_CODDEPC)]) + sheet.enable_column(FR_CODDEPC, _ges_dep && _ges_mag); + if (!to_delete[sheet.cid2index(FR_CODMAGC)]) + sheet.enable_column(FR_CODMAGC, _ges_mag); + to_delete.set(sheet.cid2index(FR_CODARTMAG)); + to_delete.set(sheet.cid2index(FR_CHECKED)); - const bool ca_active = dongle().active(CMAUT) || dongle().active(CAAUT); - if (ca_active) - { - const TMultilevel_code_info& cdc = ca_multilevel_code_info(LF_CDC); - const TMultilevel_code_info& cms = ca_multilevel_code_info(LF_COMMESSE); - const TMultilevel_code_info& fas = ca_multilevel_code_info(LF_FASI); - const int levels = cdc.levels() + cms.levels() + fas.levels(); - for (short cid = FR_CDC1; cid <= FR_CDC12; cid++) - { - const int level = cid-FR_CDC1; - to_delete.set(sheet.cid2index(cid), level >= levels); - if (level < levels) - colonne.add(cid); - } - } + const bool ca_active = dongle().active(CMAUT) || dongle().active(CAAUT); + if (ca_active) + { + const TMultilevel_code_info& cdc = ca_multilevel_code_info(LF_CDC); + const TMultilevel_code_info& cms = ca_multilevel_code_info(LF_COMMESSE); + const TMultilevel_code_info& fas = ca_multilevel_code_info(LF_FASI); + const int levels = cdc.levels() + cms.levels() + fas.levels(); + for (short cid = FR_CDC1; cid <= FR_CDC12; cid++) + { + const int level = cid-FR_CDC1; + to_delete.set(sheet.cid2index(cid), level >= levels); + if (level < levels) + colonne.add(cid); + } + } - for ( i = MAX_COLUMNS - 1; i >= 0; i-- ) - { - if( to_delete[i] ) - { - sheet.enable_column( i + FIRST_FIELD, FALSE); - sheet.delete_column( i + FIRST_FIELD); - } - } + for ( i = MAX_COLUMNS - 1; i >= 0; i-- ) + { + if( to_delete[i] ) + { + sheet.enable_column( i + FIRST_FIELD, FALSE); + sheet.delete_column( i + FIRST_FIELD); + } + } - if (!sheet.user_saved_columns_order()) - sheet.set_columns_order(&colonne); + if (!sheet.user_saved_columns_order()) + sheet.set_columns_order(&colonne); } TCond_vendita& TDocumento_mask::condv() const { - if (_condv == NULL) - { - TDocumento_mask* myself = (TDocumento_mask*)this; - myself->_condv = new TCond_vendita(myself, NULL); - } - return *_condv; + if (_condv == NULL) + { + TDocumento_mask* myself = (TDocumento_mask*)this; + myself->_condv = new TCond_vendita(myself, NULL); + } + return *_condv; } void TDocumento_mask::update_progs(bool stop_run) @@ -504,9 +510,9 @@ void TDocumento_mask::update_progs(bool stop_run) if (fr) _doc.put(fr->name(), mf.get()); } - + _doc.set_riga_esenzione(); - + for (f = last_field; f >= 0; f--) { const TMask_field & mf = fld(f); @@ -530,15 +536,15 @@ void TDocumento_mask::update_progs(bool stop_run) } void TDocumento_mask::next_page(int p) -{ - TMask::next_page(p); +{ + TMask::next_page(p); - if (is_calculated_page(curr_page())) - update_progs(); + if (is_calculated_page(curr_page())) + update_progs(); } void TDocumento_mask::start_run() -{ +{ TSmart_card * s = smartcard(); if (s != NULL) @@ -560,13 +566,13 @@ void TDocumento_mask::start_run() s->display_error(err); } } - TVariable_mask::start_run(); + TVariable_mask::start_run(); } bool TDocumento_mask::stop_run(KEY key) -{ - if (key != K_ESC && key != K_QUIT) - update_progs(true); +{ + if (key != K_ESC && key != K_QUIT) + update_progs(true); else if (key == K_ESC) { @@ -583,31 +589,31 @@ bool TDocumento_mask::stop_run(KEY key) } } - return TVariable_mask::stop_run(key); + return TVariable_mask::stop_run(key); } bool TDocumento_mask::on_key(KEY key) { - if (key == K_SHIFT + K_F12) - { - TRelation r(LF_DOC); - r.curr()=doc(); - if (!doc().bloccato() && ::user_can_write(&r)) - { - TMask_field& stato = field(F_STATO); - stato.enable(); - enable(DLG_SAVEREC); - enable(DLG_DELREC); + if (key == K_SHIFT + K_F12) + { + TRelation r(LF_DOC); + r.curr()=doc(); + if (!doc().bloccato() && ::user_can_write(&r)) + { + TMask_field& stato = field(F_STATO); + stato.enable(); + enable(DLG_SAVEREC); + enable(DLG_DELREC); TSmart_card * s = smartcard(); if (s != NULL && s->card_connected()) s->enable_prot_fields(*this); - } - else - warning_box("L'utente %s non puo' modificare questo documento", - (const char*)user()); - return TRUE; - } + } + else + warning_box("L'utente %s non puo' modificare questo documento", + (const char*)user()); + return TRUE; + } else if (key == K_F7) { @@ -644,930 +650,937 @@ bool TDocumento_mask::on_key(KEY key) return true; } - return TVariable_mask::on_key(key); + return TVariable_mask::on_key(key); } void TDocumento_mask::occ2mask() -{ - const TOccasionale& o = doc().occas(); +{ + const TOccasionale& o = doc().occas(); - reset(F_COFI); - reset(F_PAIVA); - set(F_OCFPI, o.get(OCC_CFPI)); - const TString & ragsoc = o.get(OCC_RAGSOC); - set(F_RAGSOC, ragsoc); - set(F_RAGSOCSP, ragsoc); - const TString & indir = o.get(OCC_INDIR); - set(F_INDCF, indir); - set(F_INDSP, indir); - const TString & civ = o.get(OCC_CIV); - set(F_CIVCF, civ); - set(F_CIVSP, civ); - const TString & cap = o.get(OCC_CAP); - set(F_CAPCF, cap); - set(F_CAPSP, cap); - const TString & com = o.get(OCC_COM); - set(F_COMCF, com); - set( F_COMSP, com); - const TString & stato = o.get(OCC_STATO); - set(F_STATOCF, stato); - set( F_STATOSP, stato); - if (id2pos(F_CODINDSP) >= 0) - reset(F_CODINDSP); - // Sugli occasionali non c'è la località - const TString & localita = o.get(OCC_LOCALITA); - set(F_LOCALITACF, localita); - set(F_LOCALITASP, localita); - check_field(F_COMSP); - check_field(F_STATOSP); + reset(F_COFI); + reset(F_PAIVA); + set(F_OCFPI, o.get(OCC_CFPI)); + const TString & ragsoc = o.get(OCC_RAGSOC); + set(F_RAGSOC, ragsoc); + set(F_RAGSOCSP, ragsoc); + const TString & indir = o.get(OCC_INDIR); + set(F_INDCF, indir); + set(F_INDSP, indir); + const TString & civ = o.get(OCC_CIV); + set(F_CIVCF, civ); + set(F_CIVSP, civ); + const TString & cap = o.get(OCC_CAP); + set(F_CAPCF, cap); + set(F_CAPSP, cap); + const TString & com = o.get(OCC_COM); + set(F_COMCF, com); + set( F_COMSP, com); + const TString & stato = o.get(OCC_STATO); + set(F_STATOCF, stato); + set( F_STATOSP, stato); + if (id2pos(F_CODINDSP) >= 0) + reset(F_CODINDSP); + // Sugli occasionali non c'è la località + const TString & localita = o.get(OCC_LOCALITA); + set(F_LOCALITACF, localita); + set(F_LOCALITASP, localita); + check_field(F_COMSP); + check_field(F_STATOSP); } void TDocumento_mask::cli2mask() -{ - TCli_for & c = doc().clifor(); +{ + TCli_for & c = doc().clifor(); - const bool onload = !is_running(); - - // Setta i campi che appartengono al file LF_CLIFO - const bool occas = c.occasionale(); + const bool onload = !is_running(); + + // Setta i campi che appartengono al file LF_CLIFO + const bool occas = c.occasionale(); - show(F_OCCASEDIT, occas); - if (!occas) - reset(F_OCFPI); - show(F_OCFPI, occas); - // In forse per l'Occasionale, sicuri per il Normale - show(F_COFI, !occas); - show(F_STATOPAIVA, !occas); - show(F_PAIVA, !occas); - set(F_RAGSOC, c.get(CLI_RAGSOC)); - enable(F_RAGSOC, !occas); - - const TRectype & ven_rec = c.vendite(); + show(F_OCCASEDIT, occas); + if (!occas) + reset(F_OCFPI); + show(F_OCFPI, occas); + // In forse per l'Occasionale, sicuri per il Normale + show(F_COFI, !occas); + show(F_STATOPAIVA, !occas); + show(F_PAIVA, !occas); + set(F_RAGSOC, c.get(CLI_RAGSOC)); + enable(F_RAGSOC, !occas); + + const TRectype & ven_rec = c.vendite(); - if(!onload) - { - short pos = id2pos(F_CODVAL); - const TString16 codval = c.get(CLI_CODVAL); // Attenzione: Non usare TString& qui! - - if (pos >= 0) - set(F_CODVAL, codval, TRUE); - pos = id2pos(F_CODVAL1); - if (pos >= 0) - set(F_CODVAL1, codval, TRUE); - pos = id2pos(F_CODLIN); - if (pos >= 0 && fld(pos).active()) - fld(pos).set(c.get(CLI_CODLIN)); - set(F_CODPAG, c.get(CLI_CODPAG)); - set(F_CODABIA, c.get(CLI_CODABI)); - set(F_CODCABA, c.get(CLI_CODCAB)); - if (id2pos(F_IBAN_STATO) > 0) - { - const TString80 iban = c.get(CLI_IBAN); - set(F_IBAN, iban); - efield(F_IBAN_STATO).validate(K_TAB); - if (iban.not_empty()) - { - set(F_IBAN_STATO, iban.left(2)); - set(F_IBAN_CHECK, iban.mid(2,2)); - set(F_BBAN , iban.mid(4)); - set(F_BBAN_CIN , iban.mid(4,1)); - set(F_BBAN_ABI , iban.mid(5,5)); - set(F_BBAN_CAB , iban.mid(10,5)); - set(F_BBAN_CONTO, iban.mid(15,12)); - } - } - // Setta i campi che appartengono al file LF_CFVEN - set(F_CODABIP, ven_rec.get(CFV_CODABIPR)); - set(F_CODCABP, ven_rec.get(CFV_CODCABPR)); - set(F_RAGGR, ven_rec.get(CFV_RAGGDOC)); - set(F_RAGGREFF, ven_rec.get(CFV_RAGGEFF)); - set(F_CODINDSP, ven_rec.get(CFV_CODINDSP)); - set(F_CODAG, ven_rec.get(CFV_CODAG)); - set(F_CODSPMEZZO, ven_rec.get(CFV_CODSPMEZZO)); - set(F_CODPORTO, ven_rec.get(CFV_CODPORTO)); - set(F_CODNOTESP1, ven_rec.get(CFV_CODNOTESP1)); - set(F_CODNOTESP2, ven_rec.get(CFV_CODNOTESP2)); - set(F_CODNOTE, ven_rec.get(CFV_CODNOTE)); - set(F_CODVETT1, ven_rec.get(CFV_CODVETT1)); - set(F_CODVETT2, ven_rec.get(CFV_CODVETT2)); - set(F_CODVETT3, ven_rec.get(CFV_CODVETT3)); - set(F_SPESEINC, ven_rec.get(CFV_PERCSPINC)); - set(F_ADDBOLLI, ven_rec.get(CFV_ADDBOLLI)); - set(F_CATVEN, ven_rec.get(CFV_CATVEN)); - pos = id2pos(F_CODLIST); - const TString16 codlist = ven_rec.get(CFV_CODLIST); - if (pos >= 0 && fld(pos).active()) - { - TEdit_field & f = (TEdit_field&) fld(pos); - - f.set(codlist); - f.check(); - f.on_hit(); - } - pos = id2pos(F_CODLIST1); - if (pos >= 0 && fld(pos).active()) - { - TEdit_field & f = (TEdit_field&) fld(pos); - - f.set(codlist); - f.check(); - f.on_hit(); - } - pos = id2pos(F_CODAG); - if (pos >= 0 && fld(pos).active()) - fld(pos).set(ven_rec.get(CFV_CODAG)); - set(F_CODZON, ven_rec.get(CFV_CODZONA)); - set(F_RAGGR, ven_rec.get(CFV_RAGGDOC)); - sconto_testa2mask(); - spese2mask(); - } - enable( F_CODINDSP , !occas); - if (occas) - occ2mask(); - else - { - set(F_COFI, c.get(CLI_COFI)); - set(F_INDCF, c.get(CLI_INDCF)); - set(F_CIVCF, c.get(CLI_CIVCF)); - set(F_STATOPAIVA, c.get(CLI_STATOPAIV)); - set(F_PAIVA, c.get(CLI_PAIV)); - set(F_LOCALITACF, c.get(CLI_LOCCF)); - set(F_CAPCF, c.get(CLI_CAPCF)); - set(F_COMCF, c.get(CLI_COMCF)); - set(F_STATOCF, c.get(CLI_STATOCF)); - check_field( F_CODINDSP ); - } - const TString16 newcodval(get(F_CODVAL)); + if(!onload) + { + short pos = id2pos(F_CODVAL); + const TString16 codval = c.get(CLI_CODVAL); // Attenzione: Non usare TString& qui! + + if (pos >= 0) + set(F_CODVAL, codval, TRUE); + pos = id2pos(F_CODVAL1); + if (pos >= 0) + set(F_CODVAL1, codval, TRUE); + pos = id2pos(F_CODLIN); + if (pos >= 0 && fld(pos).active()) + fld(pos).set(c.get(CLI_CODLIN)); + set(F_CODPAG, c.get(CLI_CODPAG)); + set(F_CODABIA, c.get(CLI_CODABI)); + set(F_CODCABA, c.get(CLI_CODCAB)); + if (id2pos(F_IBAN_STATO) > 0) + { + const TString80 iban = c.get(CLI_IBAN); + set(F_IBAN, iban); + efield(F_IBAN_STATO).validate(K_TAB); + if (iban.not_empty()) + { + set(F_IBAN_STATO, iban.left(2)); + set(F_IBAN_CHECK, iban.mid(2,2)); + set(F_BBAN , iban.mid(4)); + set(F_BBAN_CIN , iban.mid(4,1)); + set(F_BBAN_ABI , iban.mid(5,5)); + set(F_BBAN_CAB , iban.mid(10,5)); + set(F_BBAN_CONTO, iban.mid(15,12)); + } + } + // Setta i campi che appartengono al file LF_CFVEN + set(F_CODABIP, ven_rec.get(CFV_CODABIPR)); + set(F_CODCABP, ven_rec.get(CFV_CODCABPR)); + set(F_RAGGR, ven_rec.get(CFV_RAGGDOC)); + set(F_RAGGREFF, ven_rec.get(CFV_RAGGEFF)); + set(F_CODINDSP, ven_rec.get(CFV_CODINDSP)); + set(F_CODAG, ven_rec.get(CFV_CODAG)); + set(F_CODSPMEZZO, ven_rec.get(CFV_CODSPMEZZO)); + set(F_CODPORTO, ven_rec.get(CFV_CODPORTO)); + set(F_CODNOTESP1, ven_rec.get(CFV_CODNOTESP1)); + set(F_CODNOTESP2, ven_rec.get(CFV_CODNOTESP2)); + set(F_CODNOTE, ven_rec.get(CFV_CODNOTE)); + set(F_CODVETT1, ven_rec.get(CFV_CODVETT1)); + set(F_CODVETT2, ven_rec.get(CFV_CODVETT2)); + set(F_CODVETT3, ven_rec.get(CFV_CODVETT3)); + set(F_SPESEINC, ven_rec.get(CFV_PERCSPINC)); + set(F_ADDBOLLI, ven_rec.get(CFV_ADDBOLLI)); + set(F_CATVEN, ven_rec.get(CFV_CATVEN)); + pos = id2pos(F_CODLIST); + const TString16 codlist = ven_rec.get(CFV_CODLIST); + if (pos >= 0 && fld(pos).active()) + { + TEdit_field & f = (TEdit_field&) fld(pos); + + f.set(codlist); + f.check(); + f.on_hit(); + } + pos = id2pos(F_CODLIST1); + if (pos >= 0 && fld(pos).active()) + { + TEdit_field & f = (TEdit_field&) fld(pos); + + f.set(codlist); + f.check(); + f.on_hit(); + } + pos = id2pos(F_CODAG); + if (pos >= 0 && fld(pos).active()) + fld(pos).set(ven_rec.get(CFV_CODAG)); + set(F_CODZON, ven_rec.get(CFV_CODZONA)); + set(F_RAGGR, ven_rec.get(CFV_RAGGDOC)); + sconto_testa2mask(); + spese2mask(); + } + enable( F_CODINDSP , !occas); + if (occas) + occ2mask(); + else + { + set(F_COFI, c.get(CLI_COFI)); + set(F_INDCF, c.get(CLI_INDCF)); + set(F_CIVCF, c.get(CLI_CIVCF)); + set(F_STATOPAIVA, c.get(CLI_STATOPAIV)); + set(F_PAIVA, c.get(CLI_PAIV)); + set(F_LOCALITACF, c.get(CLI_LOCCF)); + set(F_CAPCF, c.get(CLI_CAPCF)); + set(F_COMCF, c.get(CLI_COMCF)); + set(F_STATOCF, c.get(CLI_STATOCF)); + check_field( F_CODINDSP ); + } + const TString16 newcodval(get(F_CODVAL)); - short pos = id2pos(F_CAMBIO); - if ((pos >= 0) && newcodval.empty()) - fld(pos).reset(); - pos = id2pos(F_CODVAL); - if (pos >= 0 && fld(pos).active()) - fld(pos).check(STARTING_CHECK); - pos = id2pos(F_CODVAL1); - if (pos >= 0 && fld(pos).active()) - fld(pos).check(STARTING_CHECK); - check_field(F_COMCF); - check_field(F_STATOCF); - check_field( F_CODPAG ); - pos = id2pos(F_CODLIN); - if (pos >= 0 && fld(pos).active()) - fld(pos).check(); - check_field( F_CODCABA ); - pos = id2pos(F_CODLIST); - if (pos >= 0 && fld(pos).active()) - fld(pos).check(); - pos = id2pos(F_CODLIST1); - if (pos >= 0 && fld(pos).active()) - fld(pos).check(); - check_field( F_CODCABP ); - pos = id2pos(F_CODAG); - if (pos >= 0 && fld(pos).active()) - fld(pos).check(); - check_field( F_CODSPMEZZO ); - check_field( F_CODPORTO ); - check_field( F_CODNOTESP1 ); - check_field( F_CODNOTESP2 ); - check_field( F_CODNOTE ); - check_field( F_CODVETT1 ); - check_field( F_CODVETT2 ); - check_field( F_CODVETT3 ); - check_field( F_CATVEN ); - check_field( F_CODZON ); - - const bool contr_enabled = ven_rec.get_bool(CFV_GESTCONTR); - bool gescontr = FALSE; - if (contr_enabled) - { - TConfig ditta(CONFIG_DITTA, "ve"); - gescontr = ditta.get_bool("GES", "ve", 2); - } - - enable(F_CODCONT1, contr_enabled && gescontr); - enable(F_CODCONT, contr_enabled && gescontr); + short pos = id2pos(F_CAMBIO); + if ((pos >= 0) && newcodval.empty()) + fld(pos).reset(); + pos = id2pos(F_CODVAL); + if (pos >= 0 && fld(pos).active()) + fld(pos).check(STARTING_CHECK); + pos = id2pos(F_CODVAL1); + if (pos >= 0 && fld(pos).active()) + fld(pos).check(STARTING_CHECK); + check_field(F_COMCF); + check_field(F_STATOCF); + check_field( F_CODPAG ); + pos = id2pos(F_CODLIN); + if (pos >= 0 && fld(pos).active()) + fld(pos).check(); + check_field( F_CODCABA ); + pos = id2pos(F_CODLIST); + if (pos >= 0 && fld(pos).active()) + fld(pos).check(); + pos = id2pos(F_CODLIST1); + if (pos >= 0 && fld(pos).active()) + fld(pos).check(); + check_field( F_CODCABP ); + pos = id2pos(F_CODAG); + if (pos >= 0 && fld(pos).active()) + fld(pos).check(); + check_field( F_CODSPMEZZO ); + check_field( F_CODPORTO ); + check_field( F_CODNOTESP1 ); + check_field( F_CODNOTESP2 ); + check_field( F_CODNOTE ); + check_field( F_CODVETT1 ); + check_field( F_CODVETT2 ); + check_field( F_CODVETT3 ); + check_field( F_CATVEN ); + check_field( F_CODZON ); + + const bool contr_enabled = ven_rec.get_bool(CFV_GESTCONTR); + bool gescontr = FALSE; + if (contr_enabled) + { + TConfig ditta(CONFIG_DITTA, "ve"); + gescontr = ditta.get_bool("GES", "ve", 2); + } + + enable(F_CODCONT1, contr_enabled && gescontr); + enable(F_CODCONT, contr_enabled && gescontr); } void TDocumento_mask::sconto_testa2mask() { - TCli_for & c = doc().clifor(); - TConfig ditta(CONFIG_DITTA, "ve"); - const char tipogestione = ditta.get("GESSCO", "ve")[ 0 ]; - switch( tipogestione ) - { - case 'N': // Sconti non gestiti: pussa via! - break; - case 'P': // Percentuale su anagrafica cliente - set( F_SCONTOPERC, c.vendite().get(CFV_SCONTO)); - break; - case 'T': // Gestione tabella sconti - { - const TString16 codsconto(c.vendite().get(CFV_CODSCC)); - - if (codsconto.not_empty()) - { - TTable sconti("%SCC"); - sconti.setkey(1); - sconti.zero(); - sconti.put("CODTAB", codsconto); - if (sconti.read( ) == NOERR) - set(F_SCONTOPERC, sconti.get("S1")); - } - } - break; - case 'A': // Gestione archivio sconti - { - TString16 cod; - const TRectype & ven_rec = c.vendite(); - TLocalisamfile sconti(LF_SCONTI ); - - sconti.setkey(1); - sconti.zero(); - sconti.put("TIPO", "I"); - if(ditta.get_bool("SCOKEY", "ve", 1)) - sconti.put("CODCAT", ven_rec.get(CFV_CATVEN)); - if(ditta.get_bool("SCOKEY", "ve", 2)) - cod.format("%-2s", (const char *)ven_rec.get(CFV_CODSCC)); - else - cod = " "; - if( ditta.get_bool("SCOKEY", "ve", 3)) - { - TString8 cz; cz.format("%-2s", (const char*)ven_rec.get(CFV_CODZONA)); - cod << cz; - } - else - cod << " "; - if( ditta.get_bool("SCOKEY", "ve", 4)) - cod << c.get(CLI_CODPAG); - sconti.put("CODART", cod); - if(sconti.read() == NOERR) - set(F_SCONTOPERC, sconti.get( "SCONTO")); - } - break; - default: - break; - } - return; + TCli_for & c = doc().clifor(); + TConfig ditta(CONFIG_DITTA, "ve"); + const char tipogestione = ditta.get("GESSCO", "ve")[ 0 ]; + switch( tipogestione ) + { + case 'N': // Sconti non gestiti: pussa via! + break; + case 'P': // Percentuale su anagrafica cliente + set( F_SCONTOPERC, c.vendite().get(CFV_SCONTO)); + break; + case 'T': // Gestione tabella sconti + { + const TString16 codsconto(c.vendite().get(CFV_CODSCC)); + + if (codsconto.not_empty()) + { + TTable sconti("%SCC"); + sconti.setkey(1); + sconti.zero(); + sconti.put("CODTAB", codsconto); + if (sconti.read( ) == NOERR) + set(F_SCONTOPERC, sconti.get("S1")); + } + } + break; + case 'A': // Gestione archivio sconti + { + TString16 cod; + const TRectype & ven_rec = c.vendite(); + TLocalisamfile sconti(LF_SCONTI ); + + sconti.setkey(1); + sconti.zero(); + sconti.put("TIPO", "I"); + if(ditta.get_bool("SCOKEY", "ve", 1)) + sconti.put("CODCAT", ven_rec.get(CFV_CATVEN)); + if(ditta.get_bool("SCOKEY", "ve", 2)) + cod.format("%-2s", (const char *)ven_rec.get(CFV_CODSCC)); + else + cod = " "; + if( ditta.get_bool("SCOKEY", "ve", 3)) + { + TString8 cz; cz.format("%-2s", (const char*)ven_rec.get(CFV_CODZONA)); + cod << cz; + } + else + cod << " "; + if( ditta.get_bool("SCOKEY", "ve", 4)) + cod << c.get(CLI_CODPAG); + sconti.put("CODART", cod); + if(sconti.read() == NOERR) + set(F_SCONTOPERC, sconti.get( "SCONTO")); + } + break; + default: + break; + } + return; } void TDocumento_mask::spese2mask() { - TSheet_field & sh = (TSheet_field &) field(F_SHEET); - TCli_for & c = doc().clifor(); - - TString16 name("CODSP0"); - TString_array spese; - TRectype & ven_rec = c.vendite(); - for (int i = 1; i <= 4; i++) - { - name.rtrim(1); name << i; - const TString16 s(ven_rec.get(name)); - - if (s.not_empty()) - spese.add(s); - } + TSheet_field & sh = (TSheet_field &) field(F_SHEET); + TCli_for & c = doc().clifor(); + + TString16 name("CODSP0"); + TString_array spese; + TRectype & ven_rec = c.vendite(); + for (int i = 1; i <= 4; i++) + { + name.rtrim(1); name << i; + const TString16 s(ven_rec.get(name)); + + if (s.not_empty()) + spese.add(s); + } - doc().put("SPESEUPD", FALSE); - doc().put(DOC_CODVAL, get(F_CODVAL)); - doc().put(DOC_CAMBIO, get(F_CAMBIO)); - doc().put(DOC_CONTROEURO, get(F_CONTROEURO)); - - doc().update_spese_aut(spese, FALSE, &sh); - sh.force_update(); + doc().put("SPESEUPD", FALSE); + doc().put(DOC_CODVAL, get(F_CODVAL)); + doc().put(DOC_CAMBIO, get(F_CAMBIO)); + doc().put(DOC_CONTROEURO, get(F_CONTROEURO)); + + doc().update_spese_aut(spese, FALSE, &sh); + sh.force_update(); } void TDocumento_mask::reset_masks(const TString& tipo_doc) { - static TString16 last_tipo_doc; + static TString16 last_tipo_doc; - if (tipo_doc != last_tipo_doc) - { - FOR_EACH_ASSOC_OBJECT(_maskriga, h, k, o) - { - TMask* m = (TMask*)o; - m->enable_default(); - if (!_sheet->exist_column(FR_PREZZO)) - m->hide(FR_PREZZO); - } - last_tipo_doc = tipo_doc; - } + if (tipo_doc != last_tipo_doc) + { + FOR_EACH_ASSOC_OBJECT(_maskriga, h, k, o) + { + TMask* m = (TMask*)o; + m->enable_default(); + if (!_sheet->exist_column(FR_PREZZO)) + m->hide(FR_PREZZO); + } + last_tipo_doc = tipo_doc; + } } void TDocumento_mask::doc2mask(bool reload_clifo) { - TSheet_field& s = sfield(F_SHEET); - s.destroy( ); + TSheet_field& s = sfield(F_SHEET); + s.destroy( ); - for (int p = fields()-1; p >= 0; p--) - { - TMask_field& f = fld(p); - const TFieldref* fr = f.field(); - if (fr) - f.set(fr->read(doc())); + for (int p = fields()-1; p >= 0; p--) + { + TMask_field& f = fld(p); + const TFieldref* fr = f.field(); + if (fr) + f.set(fr->read(doc())); else f.reset(); - } + } - if (reload_clifo) - cli2mask(); + if (reload_clifo) + cli2mask(); - const int righe = doc().physical_rows(); - for (int i = 0; i < righe; i++) - { - s.insert(-1, FALSE); - s.row(i); // qui verificare - doc()[i+1].autoload(s); - s.check_row(i, 0x2); - } + const int righe = doc().physical_rows(); + for (int i = 0; i < righe; i++) + { + s.insert(-1, FALSE); + s.row(i); // qui verificare + doc()[i+1].autoload(s); + s.check_row(i, 0x2); + } - reset_masks(get(F_TIPODOC)); - - s.force_update(); + reset_masks(get(F_TIPODOC)); + + s.force_update(); } void TDocumento_mask::mask2doc() { - for (int p = fields()-1; p >= 0; p--) - { - TMask_field& f = fld(p); - const TFieldref* fr = f.field(); - if (fr) - fr->write(f.get(), doc()); - } + for (int p = fields()-1; p >= 0; p--) + { + TMask_field& f = fld(p); + const TFieldref* fr = f.field(); + if (fr) + fr->write(f.get(), doc()); + } } TVariable_mask* TDocumento_mask::riga_mask(int numriga) { - const TRiga_documento& riga = doc()[numriga + 1]; - const TTipo_riga_documento& tiporiga = riga.tipo(); - TString16 name; tiporiga.mask_name(name); + const TRiga_documento& riga = doc()[numriga + 1]; + const TTipo_riga_documento& tiporiga = riga.tipo(); + TString16 name; tiporiga.mask_name(name); - TVariable_mask* m = (TVariable_mask*)_maskriga.objptr(name); - if (m == NULL) - { - m = new TVariable_mask(name); + TVariable_mask* m = (TVariable_mask*)_maskriga.objptr(name); + if (m == NULL) + { + m = new TVariable_mask(name); - _maskriga.add(name, m); - - TFilename proname; tiporiga.profile_name(proname); - TConfig pro( proname, "HANDLERS" ); - - const int numhandler = pro.get_int( "NHANDLER", "HANDLERS" ); - for(int i = 1; i <= numhandler; i++) - { - TString8 chiave; chiave.format("%d", i ); - TToken_string riga(pro.get(chiave, "HANDLERS")); - row_set_handler( *m, riga.get_int( 0 ), riga.get_int( 1 ) ); - } - - m->set_handler(FR_TIPORIGA, tipo_riga_handler); + _maskriga.add(name, m); + + TFilename proname; tiporiga.profile_name(proname); + TConfig pro( proname, "HANDLERS" ); + + const int numhandler = pro.get_int( "NHANDLER", "HANDLERS" ); + for(int i = 1; i <= numhandler; i++) + { + TString8 chiave; chiave.format("%d", i ); + TToken_string riga(pro.get(chiave, "HANDLERS")); + row_set_handler( *m, riga.get_int(0), riga.get_int(1) ); + } + + m->set_handler(FR_TIPORIGA, tipo_riga_handler); m->set_handler( FR_QTA, qta_handler ); - m->set_handler( FR_UMQTA, um_handler ); - m->set_handler( FR_DATACONS, dcons_handler); + m->set_handler( FR_UMQTA, um_handler ); + m->set_handler( FR_DATACONS, dcons_handler); TList_field & htr = lfield(F_LBTIPORIGA); const TString codes(htr.get_codes()); const TString values(htr.get_values()); - m->lfield(FR_TIPORIGA).replace_items(codes, values); - - const int pos = m->id2pos(FR_CODART); - if (pos >= 0) - { - const TMask_field & f = m->field(FR_CODART); - if (f.is_edit()) - { - TBrowse * browse = ((TEdit_field &) f).browse(); - const char tipo_r = tiporiga.tipo(); - - if (browse ) - { - const TCursor * cur = browse->cursor(); - if (cur) - { - const int num = cur->file().num(); - if (num == LF_ANAMAG || num == LF_CODCORR) - { - m->set_handler( FR_CODMAG, codmag_handler ); - m->set_handler( FR_CODMAGC, codmag_coll_handler ); - m->set_handler( FR_CODART, codart_handler ); - m->set_handler( FR_LIV1, liv_handler ); - m->set_handler( FR_LIV2, liv_handler ); - m->set_handler( FR_LIV3, liv_handler ); - m->set_handler( FR_LIV4, liv_handler ); - m->set_handler( FR_UMQTA, umart_handler ); - m->set_handler( FR_CODARTMAG, codartmag_handler ); - m->set_handler( FR_DESCR, descr_handler ); - m->set_handler( FR_QTA, qtaart_handler ); - if (livelli().autoinsert(1)) - m->field(FR_LIV1).check_type(CHECK_NONE); - if (livelli().autoinsert(2)) - m->field(FR_LIV2).check_type(CHECK_NONE); - if (livelli().autoinsert(3)) - m->field(FR_LIV3).check_type(CHECK_NONE); - if (livelli().autoinsert(4)) - m->field(FR_LIV4).check_type(CHECK_NONE); - } - else - if (tipo_r == RIGA_SPESEDOC || tipo_r == RIGA_PRESTAZIONI) - m->set_handler( FR_CODART, sppr_handler ); - } - } - } - } - m->set_handler(FR_QTAEVASA, qta_evasa_handler); - m->set_handler(FR_CAUS, causmag_handler); - - if (m->id2pos(FR_CODIVA) >= 0) - { - m->set_handler(FR_CODIVA, iva_handler); - const TString& tipiva = doc().tipo().tipi_iva_validi(); - if (tipiva.not_empty()) - { - TBrowse& browse = *(m->efield(FR_CODIVA)).browse(); - TString filter = browse.get_filter(); + m->lfield(FR_TIPORIGA).replace_items(codes, values); + + const int pos = m->id2pos(FR_CODART); + if (pos >= 0) + { + const TMask_field & f = m->field(FR_CODART); + if (f.is_edit()) + { + TBrowse * browse = ((TEdit_field &) f).browse(); + const char tipo_r = tiporiga.tipo(); + + if (browse ) + { + const TCursor * cur = browse->cursor(); + if (cur) + { + const int num = cur->file().num(); + if (num == LF_ANAMAG || num == LF_CODCORR) + { + m->set_handler( FR_CODMAG, codmag_handler ); + m->set_handler( FR_CODMAGC, codmag_coll_handler ); + m->set_handler( FR_CODART, codart_handler ); + m->set_handler( FR_LIV1, liv_handler ); + m->set_handler( FR_LIV2, liv_handler ); + m->set_handler( FR_LIV3, liv_handler ); + m->set_handler( FR_LIV4, liv_handler ); + m->set_handler( FR_UMQTA, umart_handler ); + m->set_handler( FR_CODARTMAG, codartmag_handler ); + m->set_handler( FR_DESCR, descr_handler ); + m->set_handler( FR_QTA, qtaart_handler ); + if (livelli().autoinsert(1)) + m->field(FR_LIV1).check_type(CHECK_NONE); + if (livelli().autoinsert(2)) + m->field(FR_LIV2).check_type(CHECK_NONE); + if (livelli().autoinsert(3)) + m->field(FR_LIV3).check_type(CHECK_NONE); + if (livelli().autoinsert(4)) + m->field(FR_LIV4).check_type(CHECK_NONE); + } + else + if (tipo_r == RIGA_SPESEDOC || tipo_r == RIGA_PRESTAZIONI) + m->set_handler( FR_CODART, sppr_handler ); + } + } + } + } + m->set_handler(FR_QTAEVASA, qta_evasa_handler); + m->set_handler(FR_CAUS, causmag_handler); + + if (m->id2pos(FR_CODIVA) >= 0) + { + m->set_handler(FR_CODIVA, iva_handler); + const TString& tipiva = doc().tipo().tipi_iva_validi(); + if (tipiva.not_empty()) + { + TBrowse& browse = *(m->efield(FR_CODIVA)).browse(); + TString filter = browse.get_filter(); - bool close_filter = FALSE; - if (filter.not_empty()) - { - filter.insert("("); - filter << ")&&("; - close_filter = TRUE; - } - bool firstor = TRUE; - for (int i = tipiva.len()-1; i >= 0; i--) if (tipiva[i] != ' ') - { - if (firstor) - firstor = FALSE; - else - filter << "||"; - filter << "(S1==\""; - switch(i) - { - case 1: filter << "VE"; break; - case 2: filter << "ES"; break; - case 3: filter << "NI"; break; - case 4: filter << "NS"; break; - default: break; - } - filter << "\")"; - } - if (close_filter) filter << ')'; - browse.set_filter(filter); - } - m->set_handler(DLG_USER, link_handler); - } + bool close_filter = FALSE; + if (filter.not_empty()) + { + filter.insert("("); + filter << ")&&("; + close_filter = TRUE; + } + bool firstor = TRUE; + for (int i = tipiva.len()-1; i >= 0; i--) if (tipiva[i] != ' ') + { + if (firstor) + firstor = FALSE; + else + filter << "||"; + filter << "(S1==\""; + switch(i) + { + case 1: filter << "VE"; break; + case 2: filter << "ES"; break; + case 3: filter << "NI"; break; + case 4: filter << "NS"; break; + default: break; + } + filter << "\")"; + } + if (close_filter) filter << ')'; + browse.set_filter(filter); + } + m->set_handler(DLG_USER, link_handler); + } - bool ca_active = dongle().active(CMAUT) || dongle().active(CAAUT); // Qualsiasi cosa analitica va bene - ca_active &= !(riga.is_descrizione() || riga.is_omaggio() || riga.is_sconto()); // Ignora 'ste righe - if (ca_active) - { - const int page = m->win2page(m->fld(m->fields()-1).parent()); // Calcolo bastardo dell'ultima pagina + bool ca_active = dongle().active(CMAUT) || dongle().active(CAAUT); // Qualsiasi cosa analitica va bene + ca_active &= !(riga.is_descrizione() || riga.is_omaggio() || riga.is_sconto()); // Ignora 'ste righe + if (ca_active) + { + const int page = m->win2page(m->fld(m->fields()-1).parent()); // Calcolo bastardo dell'ultima pagina - TConfig_anal ini; - const TMultilevel_code_info& fasinfo = ca_multilevel_code_info(LF_FASI); - const bool use_fsc = fasinfo.levels() > 0; + TConfig_anal ini; + const TMultilevel_code_info& fasinfo = ca_multilevel_code_info(LF_FASI); + const bool use_fsc = fasinfo.levels() > 0; - int y = 1; - short dlg = FR_CDC1; // id del primo campo da generare - short dlgd = FR_DESCDC1; + int y = 1; + short dlg = FR_CDC1; // id del primo campo da generare + short dlgd = FR_DESCDC1; - for (i = 0; i < 2; i++) - { - const TString& level = ini.get("Level", NULL, i+1); // Legge il livello 1 o 2 - if (level == "CDC") // Crea centro di costo - { - if (use_fsc && fasinfo.parent() == LF_CDC) - insert_anal_fields(*m, page, LF_FASI, y, dlg, dlgd, false); - else - insert_anal_fields(*m, page, LF_CDC, y, dlg, dlgd, false); - } else - if (level == "CMS") // Crea commessa - { - if (use_fsc && fasinfo.parent() == LF_COMMESSE) - insert_anal_fields(*m, page, LF_FASI, y, dlg, dlgd, false); - else - insert_anal_fields(*m, page, LF_COMMESSE, y, dlg, dlgd, false); - } - } - if (use_fsc && fasinfo.parent() <= 0) - insert_anal_fields(*m, page, LF_FASI, y, dlg, dlgd, false); - } - } + for (i = 0; i < 2; i++) + { + const TString& level = ini.get("Level", NULL, i+1); // Legge il livello 1 o 2 + if (level == "CDC") // Crea centro di costo + { + if (use_fsc && fasinfo.parent() == LF_CDC) + insert_anal_fields(*m, page, LF_FASI, y, dlg, dlgd, false); + else + { + insert_anal_fields(*m, page, LF_CDC, y, dlg, dlgd, false); + m->set_handler( dlg - 1, cdc_mag_handler); + } - m->set_sheet((TSheet_field *)&(field(F_SHEET))); + } else + if (level == "CMS") // Crea commessa + { + if (use_fsc && fasinfo.parent() == LF_COMMESSE) + insert_anal_fields(*m, page, LF_FASI, y, dlg, dlgd, false); + else + { + insert_anal_fields(*m, page, LF_COMMESSE, y, dlg, dlgd, false); + m->set_handler( dlg - 1, cms_mag_handler); + } + } + } + if (use_fsc && fasinfo.parent() <= 0) + insert_anal_fields(*m, page, LF_FASI, y, dlg, dlgd, false); + } + } - int pos = m->id2pos(FR_PREZZO); - if (pos >= 0) - { - TEditable_field & f =((TEditable_field &) m->fld(pos)); - f.reset_driver(F_CODVAL); - f.add_driver(-F_CODVAL); - } - - pos = m->id2pos(FR_IMPFISSO); - if (pos >= 0) - { - TEditable_field & f =((TEditable_field &) m->fld(pos)); - f.reset_driver(); - f.add_driver(-F_CODVAL); - } + m->set_sheet((TSheet_field *)&(field(F_SHEET))); - return m; + int pos = m->id2pos(FR_PREZZO); + if (pos >= 0) + { + TEditable_field & f =((TEditable_field &) m->fld(pos)); + f.reset_driver(F_CODVAL); + f.add_driver(-F_CODVAL); + } + + pos = m->id2pos(FR_IMPFISSO); + if (pos >= 0) + { + TEditable_field & f =((TEditable_field &) m->fld(pos)); + f.reset_driver(); + f.add_driver(-F_CODVAL); + } + + return m; } void TDocumento_mask::update_giacenza() -{ - if (id2pos(F_CURGIAC)<0) - return; +{ + if (id2pos(F_CURGIAC)<0) + return; - TSheet_field& sf = sfield(F_SHEET); - TToken_string& row = sf.row(sf.selected()); - const TString codart = row.get(sf.cid2index(FR_CODARTMAG)); - - real giac, disp; - if (!codart.blank()) - { - TString16 codmag = row.get(sf.cid2index(FR_CODMAG)); - const TString16 coddep = row.get(sf.cid2index(FR_CODDEP)); - if (!coddep.blank()) - codmag << coddep; - - TString16 livello; - for (int i = 0; i < 4; i++) - { - const char* liv = row.get(sf.cid2index(FR_LIV1+i)); - if (*liv > ' ') - livello << liv; - else - break; - } - - const TString8 annoes = get(F_ANNO); - TArticolo_giacenza art(codart); - giac = art.disponibilita(annoes, codmag, livello, TRUE); - disp = art.disponibilita(annoes, codmag, livello, FALSE); - - TLocalisamfile umart(LF_UMART); - umart.setkey(2); - umart.put(UMART_CODART, codart); - umart.put(UMART_UM, row.get(sf.cid2index(FR_UMQTA))); - if (umart.read() == NOERR) - { - real curr_fc = umart.get_real(UMART_FC); - if (curr_fc > ZERO) - { - giac /= curr_fc; - disp /= curr_fc; - } - } - } - - set(F_CURGIAC, giac.string()); - set(F_CURDISP, disp.string()); - + TSheet_field& sf = sfield(F_SHEET); + TToken_string& row = sf.row(sf.selected()); + const TString codart = row.get(sf.cid2index(FR_CODARTMAG)); + + real giac, disp; + if (!codart.blank()) + { + TString16 codmag = row.get(sf.cid2index(FR_CODMAG)); + const TString16 coddep = row.get(sf.cid2index(FR_CODDEP)); + if (!coddep.blank()) + codmag << coddep; + + TString16 livello; + for (int i = 0; i < 4; i++) + { + const char* liv = row.get(sf.cid2index(FR_LIV1+i)); + if (*liv > ' ') + livello << liv; + else + break; + } + + const TString8 annoes = get(F_ANNO); + TArticolo_giacenza art(codart); + giac = art.disponibilita(annoes, codmag, livello, TRUE); + disp = art.disponibilita(annoes, codmag, livello, FALSE); + + TLocalisamfile umart(LF_UMART); + umart.setkey(2); + umart.put(UMART_CODART, codart); + umart.put(UMART_UM, row.get(sf.cid2index(FR_UMQTA))); + if (umart.read() == NOERR) + { + real curr_fc = umart.get_real(UMART_FC); + if (curr_fc > ZERO) + { + giac /= curr_fc; + disp /= curr_fc; + } + } + } + + set(F_CURGIAC, giac.string()); + set(F_CURDISP, disp.string()); + } /////////////////////////////////////////////////////////// // Handlers and notifiers -/////////////////////////////////////////////////////////// - +/////////////////////////////////////////////////////////// + bool TDocumento_mask::ss_handler(TMask_field& f, KEY key) -{ - bool ok = TRUE; - if (key == K_ENTER && f.mask().insert_mode()) - { - TSheet_field& ss = (TSheet_field&)f; - if (!app().is_transaction() && ss.items() == 0) - ok = yesno_box("Il documento e' privo di righe:\n" - "Si desidera continuare ugualmente?"); - } - return ok; +{ + bool ok = TRUE; + if (key == K_ENTER && f.mask().insert_mode()) + { + TSheet_field& ss = (TSheet_field&)f; + if (!app().is_transaction() && ss.items() == 0) + ok = yesno_box("Il documento e' privo di righe:\n" + "Si desidera continuare ugualmente?"); + } + return ok; } bool TDocumento_mask::ss_notify( TSheet_field& ss, int r, KEY key ) { - TDocumento_mask& m = (TDocumento_mask&)ss.mask(); - TDocumento& doc = m.doc(); + TDocumento_mask& m = (TDocumento_mask&)ss.mask(); + TDocumento& doc = m.doc(); - if ( key == K_ENTER ) // modifica - { + if ( key == K_ENTER ) // modifica + { static int calculated = 3; - TRiga_documento & riga = doc[r + 1]; - riga.autosave(ss); + TRiga_documento & riga = doc[r + 1]; + riga.autosave(ss); if (calculated == 3) calculated = m.is_calculated_page(m.curr_page()); if (calculated == (int) true) m.update_progs(); - } - else - if ( key == K_DEL ) // Cancellazione - { - doc.destroy_row(r + 1, TRUE); - if (r < doc.rows()) - { - TRiga_documento & riga = doc[r + 1]; - if (riga.is_omaggio() && riga.is_generata()) - { - ss.destroy(r + 1); - doc.destroy_row(r + 1, TRUE); - } - } - } - else - if (key == K_INS) // Inserimento - { - + } + else + if ( key == K_DEL ) // Cancellazione + { + doc.destroy_row(r + 1, TRUE); + if (r < doc.rows()) + { + TRiga_documento & riga = doc[r + 1]; + if (riga.is_omaggio() && riga.is_generata()) + { + ss.destroy(r + 1); + doc.destroy_row(r + 1, TRUE); + } + } + } + else + if (key == K_INS) // Inserimento + { + if (r < doc.rows()) - { - TRiga_documento & riga = doc[r + 1]; - if (riga.is_omaggio() && riga.is_generata()) - return FALSE; - } - doc.insert_row(r + 1, m.get( F_LBTIPORIGA )); + { + TRiga_documento & riga = doc[r + 1]; + if (riga.is_omaggio() && riga.is_generata()) + return FALSE; + } + doc.insert_row(r + 1, m.get( F_LBTIPORIGA )); - } - else - if (key == K_CTRL + K_INS) - { - TRiga_documento & riga = doc[r + 1]; - TRectype & ven_rec = doc.clifor().vendite(); - TString16 s(ven_rec.get(CFV_CODMAG)); + } + else + if (key == K_CTRL + K_INS) + { + TRiga_documento & riga = doc[r + 1]; + TRectype & ven_rec = doc.clifor().vendite(); + TString16 s(ven_rec.get(CFV_CODMAG)); const TTipo_riga_documento & t = riga.tipo(); - if (s.not_empty()) - { - s.left_just(3); - s << ven_rec.get(CFV_CODDEP); - } - else - { - s = m.get(F_CAUSMAG); - if (!s.blank()) - { - const TRectype & c=cache().get("%CAU", s); - if (!c.empty() && !c.get("S10").blank()) - s = c.get("S10"); - else - { - s = m._std_mag; - s.left_just(3); - s << m._std_dep; - } - } - } - riga.put("CODMAG", s); - riga.autoload(ss); - ss.check_row(r); + if (s.not_empty()) + { + s.left_just(3); + s << ven_rec.get(CFV_CODDEP); + } + else + { + s = m.get(F_CAUSMAG); + if (!s.blank()) + { + const TRectype & c=cache().get("%CAU", s); + if (!c.empty() && !c.get("S10").blank()) + s = c.get("S10"); + else + { + s = m._std_mag; + s.left_just(3); + s << m._std_dep; + } + } + } + riga.put("CODMAG", s); + riga.autoload(ss); + ss.check_row(r); t.set_defaults(ss, r + 1); - } - else - if ( key == K_TAB ) // ingresso nella riga - { - m.update_giacenza(); - const TRectype& rdoc = doc[r + 1]; - set_curr_um(rdoc.get(RDOC_UMQTA)); - const bool on = rdoc.get(RDOC_DACODNUM).not_empty(); - ss.sheet_mask().enable(DLG_USER, on); - } + } + else + if ( key == K_TAB ) // ingresso nella riga + { + m.update_giacenza(); + const TRectype& rdoc = doc[r + 1]; + set_curr_um(rdoc.get(RDOC_UMQTA)); + const bool on = rdoc.get(RDOC_DACODNUM).not_empty(); + ss.sheet_mask().enable(DLG_USER, on); + } - return TRUE; + return TRUE; } // Funzione che dato il profilo di riga ottiene la maschera // Serve per ottenere una maschera diversa per ogni riga TMask* TDocumento_mask::ss_getmask(int numriga, TMask& fullmask) { - TSheet_field* sf = fullmask.get_sheet(); - TDocumento_mask& m = (TDocumento_mask&)sf->mask(); - const TDocumento& doc = m.doc(); + TSheet_field* sf = fullmask.get_sheet(); + TDocumento_mask& m = (TDocumento_mask&)sf->mask(); + const TDocumento& doc = m.doc(); - if (numriga < doc.physical_rows()) - return m.riga_mask(numriga); - else - return &fullmask; + if (numriga < doc.physical_rows()) + return m.riga_mask(numriga); + else + return &fullmask; } bool TDocumento_mask::occas_code_handler(TMask_field& f, KEY key) { - if (key == K_TAB && f.focusdirty()) - { - const char* code = f.get(); - if (*code) - { - TRelation occas(LF_OCCAS); - occas.lfile().put("CFPI", code); - if (occas.read(_isequal) == NOERR) - { - TMask& m = f.mask(); - m.autoload(occas); - m.send_key(K_TAB, O_COMUNE); // Forza decodifica comuni - m.send_key(K_TAB, O_COMUNENAS); - } - } - } - return TRUE; + if (key == K_TAB && f.focusdirty()) + { + const char* code = f.get(); + if (*code) + { + TRelation occas(LF_OCCAS); + occas.lfile().put("CFPI", code); + if (occas.read(_isequal) == NOERR) + { + TMask& m = f.mask(); + m.autoload(occas); + m.send_key(K_TAB, O_COMUNE); // Forza decodifica comuni + m.send_key(K_TAB, O_COMUNENAS); + } + } + } + return TRUE; } bool TDocumento_mask::occas_handler( TMask_field& f, KEY key ) { - TDocumento_mask & m = (TDocumento_mask &)f.mask(); - if ( key == K_SPACE && m.is_running( ) ) - { - TDocumento& doc = m.doc(); - TOccasionale& occ = doc.occas(); + TDocumento_mask & m = (TDocumento_mask &)f.mask(); + if ( key == K_SPACE && m.is_running( ) ) + { + TDocumento& doc = m.doc(); + TOccasionale& occ = doc.occas(); - TMask occas_mask("ve0100o"); - occas_mask.set_handler( O_CODICE, occas_code_handler ); + TMask occas_mask("ve0100o"); + occas_mask.set_handler( O_CODICE, occas_code_handler ); - for (int i = occas_mask.fields() - 1; i >= 0; i--) - { - TMask_field & f = occas_mask.fld(i); - const TFieldref * c = f.field(); - if (c) - f.set(c->read(occ)); - } - if (occas_mask.run() != K_ESC) - { - const TString ocfpi(occas_mask.get(O_CODICE)); - doc.put("OCFPI", ocfpi); - m.set(F_OCFPI, ocfpi); - - for (int i = occas_mask.fields() - 1; i >= 0; i--) - { - const TMask_field& f = occas_mask.fld(i); - const TFieldref* c = f.field(); - if (c) - { - const char* val = f.get(); - c->write(val, occ); - } - } - m.occ2mask(); - } - f.set_focus( ); - } - return TRUE; + for (int i = occas_mask.fields() - 1; i >= 0; i--) + { + TMask_field & f = occas_mask.fld(i); + const TFieldref * c = f.field(); + if (c) + f.set(c->read(occ)); + } + if (occas_mask.run() != K_ESC) + { + const TString ocfpi(occas_mask.get(O_CODICE)); + doc.put("OCFPI", ocfpi); + m.set(F_OCFPI, ocfpi); + + for (int i = occas_mask.fields() - 1; i >= 0; i--) + { + const TMask_field& f = occas_mask.fld(i); + const TFieldref* c = f.field(); + if (c) + { + const char* val = f.get(); + c->write(val, occ); + } + } + m.occ2mask(); + } + f.set_focus( ); + } + return TRUE; } bool TDocumento_mask::clifo_handler( TMask_field& f, KEY key ) { - if (key != K_ENTER && f.to_check(key, TRUE)) - { - TDocumento_mask & m = (TDocumento_mask &) f.mask(); - TDocumento & d = m.doc(); + if (key != K_ENTER && f.to_check(key, TRUE)) + { + TDocumento_mask & m = (TDocumento_mask &) f.mask(); + TDocumento & d = m.doc(); - TTipo_documento& tdoc = (TTipo_documento&) d.tipo(); - d.put(DOC_TIPOCF, tdoc.tipocf()); - d.put(DOC_CODCF, f.get()); + TTipo_documento& tdoc = (TTipo_documento&) d.tipo(); + d.put(DOC_TIPOCF, tdoc.tipocf()); + d.put(DOC_CODCF, f.get()); - TCli_for & cli_for = d.clifor(); - cli_for.put(CLI_CODCF, ""); // force reload + TCli_for & cli_for = d.clifor(); + cli_for.put(CLI_CODCF, ""); // force reload - if ( cli_for.get_bool(CLI_SOSPESO) ) - return f.error_box( "Il codice '%ld' e' sospeso e non puo' essere utilizzato", atol(f.get())); - m.cli2mask(); - if (cli_for.occasionale()) - { - TOccasionale& occas = d.occas(); - if(m.id2pos(F_OCCASEDIT) > 0 && f.to_check(key) && *(occas.codice()) == '\0') - m.send_key( K_SPACE, F_OCCASEDIT ); // Lancia maschera occasionali - } - else - d.zero(DOC_OCFPI); - } - return TRUE; + if ( cli_for.get_bool(CLI_SOSPESO) ) + return f.error_box( "Il codice '%ld' e' sospeso e non puo' essere utilizzato", atol(f.get())); + m.cli2mask(); + if (cli_for.occasionale()) + { + TOccasionale& occas = d.occas(); + if(m.id2pos(F_OCCASEDIT) > 0 && f.to_check(key) && *(occas.codice()) == '\0') + m.send_key( K_SPACE, F_OCCASEDIT ); // Lancia maschera occasionali + } + else + d.zero(DOC_OCFPI); + } + return TRUE; } void TDocumento_mask::highlight(COLOR high_back_color, COLOR high_color) -{ - TSheet_field & sf = sfield(F_SHEET); - const int items = sf.items(); - - for (int i = 0 ; i < items; i++) - { - const bool on = doc()[i + 1].linked(); - - COLOR back = on ? high_back_color : NORMAL_BACK_COLOR; - COLOR fore = on ? high_color : NORMAL_COLOR; - - sf.set_back_and_fore_color(back, fore, i); - sf.force_update(i); - } +{ + TSheet_field & sf = sfield(F_SHEET); + const int items = sf.items(); + + for (int i = 0 ; i < items; i++) + { + const bool on = doc()[i + 1].linked(); + + COLOR back = on ? high_back_color : NORMAL_BACK_COLOR; + COLOR fore = on ? high_color : NORMAL_COLOR; + + sf.set_back_and_fore_color(back, fore, i); + sf.force_update(i); + } } /////////////////////////////////////////////////////////// // TLista_elaborazioni /////////////////////////////////////////////////////////// -class TLista_elaborazioni : public TObject // velib04 -{ - TAssoc_array * _elab; - +class TLista_elaborazioni : public TObject // velib04 +{ + TAssoc_array * _elab; + protected: - void read(); - -public: - TElaborazione & operator [](const char * key) const; - 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); - void update(); - TLista_elaborazioni() : _elab(NULL) {} - virtual ~TLista_elaborazioni(); + void read(); + +public: + TElaborazione & operator [](const char * key) const; + 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); + void update(); + TLista_elaborazioni() : _elab(NULL) {} + virtual ~TLista_elaborazioni(); }; void TLista_elaborazioni::read() -{ - if (_elab == NULL) - { - _elab = new TAssoc_array(); - - TTable eld("%ELD"); - - for (int err = eld.first(); err == NOERR; err = eld.next()) - { - TElaborazione * el = NULL; - switch (eld.curr().get_int("I0")) - { - case _esterna : - el = new TElaborazione_esterna(eld.curr()); - break; - case _consegna_ordini: - el = new TConsegna_ordini(eld.curr()); - break; - case _fatturazione_bolle : - el = new TFatturazione_bolle(eld.curr()); - break; - case _contabilizzazione : - el = new TContabilizzazione(eld.curr()); - break; - case _copia_documento : - el = new TCopia_documento(eld.curr()); - break; - case _generazione_effetti : - el = new TGenerazione_effetti(eld.curr()); - break; - case _consuntivazione_produzione : - el = new TConsuntivazione_produzione(eld.curr()); - break; - case _contabilizzazione_analitica : - el = new TContabilizzazione_analitica(eld.curr()); - break; - default : - break; - } - _elab->add(el->codice(), el); - } - } -} +{ + if (_elab == NULL) + { + _elab = new TAssoc_array(); + + TTable eld("%ELD"); + + for (int err = eld.first(); err == NOERR; err = eld.next()) + { + TElaborazione * el = NULL; + switch (eld.curr().get_int("I0")) + { + case _esterna : + el = new TElaborazione_esterna(eld.curr()); + break; + case _consegna_ordini: + el = new TConsegna_ordini(eld.curr()); + break; + case _fatturazione_bolle : + el = new TFatturazione_bolle(eld.curr()); + break; + case _contabilizzazione : + el = new TContabilizzazione(eld.curr()); + break; + case _copia_documento : + el = new TCopia_documento(eld.curr()); + break; + case _generazione_effetti : + el = new TGenerazione_effetti(eld.curr()); + break; + case _consuntivazione_produzione : + el = new TConsuntivazione_produzione(eld.curr()); + break; + case _contabilizzazione_analitica : + el = new TContabilizzazione_analitica(eld.curr()); + break; + default : + break; + } + _elab->add(el->codice(), el); + } + } +} int TLista_elaborazioni::select(TString_array & result, const char * tipo_iniziale, const char * stato_iniziale, const char * tipo_finale, const char * stato_finale) { - read(); - _elab->restart(); - result.destroy(); - for (TElaborazione * el = (TElaborazione *)_elab->get(); el ; el = (TElaborazione *) _elab->get()) - { - bool ok = FALSE; - TString ti; - if ((tipo_iniziale && *tipo_iniziale) && (stato_iniziale && *stato_iniziale)) - for (int i = 0; !ok && i < TElaborazione::_max_tipi_doc_elab; i++) - { - ti = el->tipo_iniziale(i); - const char si = el->stato_iniziale(i); - ok |= ti == tipo_iniziale && - si == *stato_iniziale; - } - else - ok = TRUE; - if ((tipo_finale && *tipo_finale) && (stato_finale && *stato_finale)) - ok &= el->tipo_finale() == tipo_finale && - el->stato_finale() == stato_finale; - if (ok) - result.add(el->codice()); - } - return result.items(); + read(); + _elab->restart(); + result.destroy(); + for (TElaborazione * el = (TElaborazione *)_elab->get(); el ; el = (TElaborazione *) _elab->get()) + { + bool ok = FALSE; + TString ti; + if ((tipo_iniziale && *tipo_iniziale) && (stato_iniziale && *stato_iniziale)) + for (int i = 0; !ok && i < TElaborazione::_max_tipi_doc_elab; i++) + { + ti = el->tipo_iniziale(i); + const char si = el->stato_iniziale(i); + ok |= ti == tipo_iniziale && + si == *stato_iniziale; + } + else + ok = TRUE; + if ((tipo_finale && *tipo_finale) && (stato_finale && *stato_finale)) + ok &= el->tipo_finale() == tipo_finale && + el->stato_finale() == stato_finale; + if (ok) + result.add(el->codice()); + } + return result.items(); } - + TElaborazione & TLista_elaborazioni::operator [](const char * key) const { - ((TLista_elaborazioni *)this)->read(); - return (TElaborazione &) (*_elab)[key]; + ((TLista_elaborazioni *)this)->read(); + return (TElaborazione &) (*_elab)[key]; } void TLista_elaborazioni::update() { - delete _elab; _elab = NULL; - read(); -} + delete _elab; _elab = NULL; + read(); +} TLista_elaborazioni::~TLista_elaborazioni() -{ - if (_elab) - delete _elab; -} +{ + if (_elab) + delete _elab; +} /////////////////////////////////////////////////////////// // TDocument_tree @@ -1575,23 +1588,23 @@ TLista_elaborazioni::~TLista_elaborazioni() class TDocument_tree : public TBidirectional_tree { - TRelation* _relation; - TCursor* _cursor; - TToken_string _curnode; + TRelation* _relation; + TCursor* _cursor; + TToken_string _curnode; bool _multiple_selection; TAssoc_array _selected_docs; TString _selected; - -protected: - virtual void node2id(const TObject* node, TString& id) const; - bool on_head() const; - bool on_row() const; - - void format_field(const TRectype& rec, const TString& field, TString& str) const; - void append_custom_fields(const TTipo_documento& tipo, const TRectype& rec, TString& str) const; + +protected: + virtual void node2id(const TObject* node, TString& id) const; + bool on_head() const; + bool on_row() const; + + void format_field(const TRectype& rec, const TString& field, TString& str) const; + void append_custom_fields(const TTipo_documento& tipo, const TRectype& rec, TString& str) const; -public: +public: void multiple_selection(bool on); bool multiple_selection() const { return _multiple_selection;} bool node_selected(const TObject* node = NULL) const; @@ -1599,77 +1612,77 @@ public: real select_doc(long numdoc); void build_doc_list(TLista_documenti & docs); void unselect_node(const TObject* node) { select_node(node, false);} - virtual bool goto_root(); - virtual bool goto_firstson(); - virtual bool goto_rbrother(); - virtual bool goto_node(const TString &id); - virtual bool has_son() const; - virtual bool has_rbrother() const; - virtual bool has_father() const; - virtual bool has_lbrother() const; - virtual bool goto_father(); - virtual bool goto_lbrother(); - virtual TObject* curr_node() const { return &(TToken_string&)_curnode; } - virtual bool get_description(TString& str) const; - virtual TImage* image(bool selected) const; + virtual bool goto_root(); + virtual bool goto_firstson(); + virtual bool goto_rbrother(); + virtual bool goto_node(const TString &id); + virtual bool has_son() const; + virtual bool has_rbrother() const; + virtual bool has_father() const; + virtual bool has_lbrother() const; + virtual bool goto_father(); + virtual bool goto_lbrother(); + virtual TObject* curr_node() const { return &(TToken_string&)_curnode; } + virtual bool get_description(TString& str) const; + virtual TImage* image(bool selected) const; void select(TString & id) { _selected = id;} const TString & selected() const { return _selected;} - const TRectype& testata() const; - const TRectype& riga() const; - const TRectype& record() const; + const TRectype& testata() const; + const TRectype& riga() const; + const TRectype& record() const; const real totale_doc() const { TDocumento d(testata()); return d.totale_doc();} - void set_cursor(char tipocf, long codcf, int anno, const char* filter, FILTERFUNCTION ff = NULL); - TCursor* get_cursor() { return _cursor; } + void set_cursor(char tipocf, long codcf, int anno, const char* filter, FILTERFUNCTION ff = NULL); + TCursor* get_cursor() { return _cursor; } - TDocument_tree(); - ~TDocument_tree(); + TDocument_tree(); + ~TDocument_tree(); }; const TRectype& TDocument_tree::testata() const -{ - TDocument_tree& me = (TDocument_tree&)*this; - const TRecnotype pos = me._curnode.get_long(0); - if (_cursor->pos() != pos || _relation->curr(LF_RIGHEDOC).empty()) - *me._cursor = pos; - return _relation->curr(); +{ + TDocument_tree& me = (TDocument_tree&)*this; + const TRecnotype pos = me._curnode.get_long(0); + if (_cursor->pos() != pos || _relation->curr(LF_RIGHEDOC).empty()) + *me._cursor = pos; + return _relation->curr(); } const TRectype& TDocument_tree::riga() const { - TDocument_tree& me = (TDocument_tree&)*this; - const TRectype& rec = _relation->curr(LF_RIGHEDOC); - const TRecnotype pos = me._curnode.get_long(0); - const int nriga = me._curnode.get_int(1); - if (_cursor->pos() != pos || rec.get_int(RDOC_NRIGA) > nriga) - *me._cursor = pos; - for (int i = rec.get_int(RDOC_NRIGA); i < nriga; i++) - _relation->next_match(LF_RIGHEDOC); - return rec; + TDocument_tree& me = (TDocument_tree&)*this; + const TRectype& rec = _relation->curr(LF_RIGHEDOC); + const TRecnotype pos = me._curnode.get_long(0); + const int nriga = me._curnode.get_int(1); + if (_cursor->pos() != pos || rec.get_int(RDOC_NRIGA) > nriga) + *me._cursor = pos; + for (int i = rec.get_int(RDOC_NRIGA); i < nriga; i++) + _relation->next_match(LF_RIGHEDOC); + return rec; } const TRectype& TDocument_tree::record() const { - return on_row() ? riga() : testata(); + return on_row() ? riga() : testata(); } void TDocument_tree::node2id(const TObject* node, TString& id) const { - id = *(TString*)node; + id = *(TString*)node; } bool TDocument_tree::on_head() const { - TDocument_tree& me = (TDocument_tree&)*this; - return me._curnode.get_int(1) == 0; + TDocument_tree& me = (TDocument_tree&)*this; + return me._curnode.get_int(1) == 0; } bool TDocument_tree::on_row() const { - TDocument_tree& me = (TDocument_tree&)*this; - return me._curnode.get_int(1) > 0; + TDocument_tree& me = (TDocument_tree&)*this; + return me._curnode.get_int(1) > 0; } void TDocument_tree::multiple_selection(bool on) @@ -1751,173 +1764,173 @@ void TDocument_tree::build_doc_list(TLista_documenti & docs) bool TDocument_tree::goto_root() { - const bool ok = _cursor != NULL && _cursor->items()>0; - _curnode = ok ? "0" : ""; - *_cursor = 0; - return ok; + const bool ok = _cursor != NULL && _cursor->items()>0; + _curnode = ok ? "0" : ""; + *_cursor = 0; + return ok; } bool TDocument_tree::goto_firstson() { - bool ok = has_son(); - if (ok) - _curnode.add(1,1); - return ok; + bool ok = has_son(); + if (ok) + _curnode.add(1,1); + return ok; } bool TDocument_tree::goto_rbrother() { - bool ok = has_rbrother(); - if (ok) - { - if (on_head()) - { - const long pos = _curnode.get_long(0); - _curnode.add(pos+1, 0); - } - else - { - const int nriga = _curnode.get_int(1); - _curnode.add(nriga+1, 1); - } - } - return ok; + bool ok = has_rbrother(); + if (ok) + { + if (on_head()) + { + const long pos = _curnode.get_long(0); + _curnode.add(pos+1, 0); + } + else + { + const int nriga = _curnode.get_int(1); + _curnode.add(nriga+1, 1); + } + } + return ok; } bool TDocument_tree::goto_node(const TString &id) -{ - _curnode = id; - return TRUE; +{ + _curnode = id; + return TRUE; } bool TDocument_tree::has_son() const { - bool ok = on_head(); - if (ok) - { - testata(); - const TRectype& rec = _relation->curr(LF_RIGHEDOC); - ok = rec.get_int(RDOC_NRIGA) > 0; - } - return ok; + bool ok = on_head(); + if (ok) + { + testata(); + const TRectype& rec = _relation->curr(LF_RIGHEDOC); + ok = rec.get_int(RDOC_NRIGA) > 0; + } + return ok; } bool TDocument_tree::has_rbrother() const { - bool ok = FALSE; - if (on_head()) - { - TDocument_tree& me = (TDocument_tree&)*this; - const long pos = me._curnode.get_long(0); - ok = pos < _cursor->items()-1; - } - else - { - riga(); // Posizionati sulla riga corrente - ok = _relation->next_match(LF_RIGHEDOC); - } - return ok; + bool ok = FALSE; + if (on_head()) + { + TDocument_tree& me = (TDocument_tree&)*this; + const long pos = me._curnode.get_long(0); + ok = pos < _cursor->items()-1; + } + else + { + riga(); // Posizionati sulla riga corrente + ok = _relation->next_match(LF_RIGHEDOC); + } + return ok; } bool TDocument_tree::has_father() const { - return on_row(); + return on_row(); } bool TDocument_tree::has_lbrother() const { - bool ok = FALSE; - TDocument_tree& me = (TDocument_tree&)*this; - if (on_head()) - { - const long pos = me._curnode.get_long(0); - ok = pos > 0L; - } - else - { - const int nriga = me._curnode.get_int(1); - ok = nriga > 1; - } - return ok; + bool ok = FALSE; + TDocument_tree& me = (TDocument_tree&)*this; + if (on_head()) + { + const long pos = me._curnode.get_long(0); + ok = pos > 0L; + } + else + { + const int nriga = me._curnode.get_int(1); + ok = nriga > 1; + } + return ok; } bool TDocument_tree::goto_father() { - bool ok = on_row(); - if (ok) - _curnode.add(0, 1); - return ok; + bool ok = on_row(); + if (ok) + _curnode.add(0, 1); + return ok; } bool TDocument_tree::goto_lbrother() { - bool ok = has_lbrother(); - if (ok) - { - if (on_head()) - { - const long pos = _curnode.get_long(0); - _curnode.add(pos-1, 0); - } - else - { - const int nriga = _curnode.get_int(1); - _curnode.add(nriga-1, 1); - } - } - return ok; + bool ok = has_lbrother(); + if (ok) + { + if (on_head()) + { + const long pos = _curnode.get_long(0); + _curnode.add(pos-1, 0); + } + else + { + const int nriga = _curnode.get_int(1); + _curnode.add(nriga-1, 1); + } + } + return ok; } void TDocument_tree::format_field(const TRectype& rec, const TString& field, TString& str) const { - const TFieldref fld(field, rec.num()); - const TString& value = fld.read(rec); - const TFieldtypes ft = rec.type(fld.name()); - if (ft == _realfld) - { - const int len = rec.length(fld.name()); - const int ndec = rec.ndec(fld.name()); - TString8 pic; pic.format(".%d", ndec); - const real r(value); - str = r.string(pic); - str.right_just(len); - } - else - str = value; + const TFieldref fld(field, rec.num()); + const TString& value = fld.read(rec); + const TFieldtypes ft = rec.type(fld.name()); + if (ft == _realfld) + { + const int len = rec.length(fld.name()); + const int ndec = rec.ndec(fld.name()); + TString8 pic; pic.format(".%d", ndec); + const real r(value); + str = r.string(pic); + str.right_just(len); + } + else + str = value; } void TDocument_tree::append_custom_fields(const TTipo_documento& tipo, const TRectype& rec, TString& str) const { - const TString& format = rec.num() == LF_DOC ? tipo.stringa_descrizione_documento() - : tipo.stringa_descrizione_riga(); - if (format.not_empty()) - { - str << ' '; - int ch = -1; - TString tmp; - for (int ap = format.find('{'); ap >= 0; ap = format.find('{', ch+1)) - { - str << format.sub(ch+1, ap); - ch = format.find('}', ap); - const TString16 field = format.sub(ap+1, ch); - if (!field.blank()) - { - format_field(rec, field, tmp); - str << tmp; - } - } - str << format.mid(ch+1); - } + const TString& format = rec.num() == LF_DOC ? tipo.stringa_descrizione_documento() + : tipo.stringa_descrizione_riga(); + if (format.not_empty()) + { + str << ' '; + int ch = -1; + TString tmp; + for (int ap = format.find('{'); ap >= 0; ap = format.find('{', ch+1)) + { + str << format.sub(ch+1, ap); + ch = format.find('}', ap); + const TString16 field = format.sub(ap+1, ch); + if (!field.blank()) + { + format_field(rec, field, tmp); + str << tmp; + } + } + str << format.mid(ch+1); + } } TImage* TDocument_tree::image(bool selected) const -{ - if (on_row()) - { - const TRectype& rec = riga(); - if (rec.get_bool(RDOC_RIGAEVASA)) - return get_res_image(BMP_STOP); - } +{ + if (on_row()) + { + const TRectype& rec = riga(); + if (rec.get_bool(RDOC_RIGAEVASA)) + return get_res_image(BMP_STOP); + } else if (multiple_selection()) { @@ -1931,102 +1944,102 @@ TImage* TDocument_tree::image(bool selected) const return get_res_image(BMP_DIRSEL); } } - return TTree::image(selected); + return TTree::image(selected); } bool TDocument_tree::get_description(TString& str) const { - if (on_head()) - { - const TRectype& rec = testata(); - str = rec.get(DOC_ANNO); - str << ' ' << rec.get(DOC_CODNUM); - TString16 tmp; - tmp.format("%6ld", rec.get_long(DOC_NDOC)); - str << ' ' << tmp << ' ' << rec.get(DOC_DATADOC); - const char tipocf = rec.get_char(DOC_TIPOCF); - const long codcf = rec.get_long(DOC_CODCF); - tmp.format(" %c%6ld ", tipocf, codcf); - str << tmp; - tmp.format("%c|%6ld", tipocf, codcf); - str << cache().get(LF_CLIFO, tmp, CLI_RAGSOC); - str.left_just(63); - - const TString& tipodoc = rec.get(DOC_TIPODOC); - const TTipo_documento& tipo = TDocumento::tipo(tipodoc); - append_custom_fields(tipo, rec, str); - } - else - { - const TRectype& rec = riga(); - const TRectype& testata = _relation->curr(); - - const TString80 codart = rec.get(RDOC_CODART); - str = codart; - str.left_just(21); - str << rec.get(RDOC_DESCR).left(30); - str.left_just(52); - - const TString& tipodoc = testata.get(DOC_TIPODOC); - const TTipo_documento& tipo = TDocumento::tipo(tipodoc); - if (codart.not_empty()) - { - const real qta = rec.get_real(tipo.field_qta()); - str << qta.string("###.###.##@,@@@"); + if (on_head()) + { + const TRectype& rec = testata(); + str = rec.get(DOC_ANNO); + str << ' ' << rec.get(DOC_CODNUM); + TString16 tmp; + tmp.format("%6ld", rec.get_long(DOC_NDOC)); + str << ' ' << tmp << ' ' << rec.get(DOC_DATADOC); + const char tipocf = rec.get_char(DOC_TIPOCF); + const long codcf = rec.get_long(DOC_CODCF); + tmp.format(" %c%6ld ", tipocf, codcf); + str << tmp; + tmp.format("%c|%6ld", tipocf, codcf); + str << cache().get(LF_CLIFO, tmp, CLI_RAGSOC); + str.left_just(63); + + const TString& tipodoc = rec.get(DOC_TIPODOC); + const TTipo_documento& tipo = TDocumento::tipo(tipodoc); + append_custom_fields(tipo, rec, str); + } + else + { + const TRectype& rec = riga(); + const TRectype& testata = _relation->curr(); + + const TString80 codart = rec.get(RDOC_CODART); + str = codart; + str.left_just(21); + str << rec.get(RDOC_DESCR).left(30); + str.left_just(52); + + const TString& tipodoc = testata.get(DOC_TIPODOC); + const TTipo_documento& tipo = TDocumento::tipo(tipodoc); + if (codart.not_empty()) + { + const real qta = rec.get_real(tipo.field_qta()); + str << qta.string("###.###.##@,@@@"); - if (tipo.is_ordine()) - { - const real qta_evasa = rec.get_real(tipo.field_qtaevasa()); - const real residuo = qta_evasa < qta ? (qta-qta_evasa) : ZERO; - str << residuo.string("###.###.##@,@@@"); - } - append_custom_fields(tipo, rec, str); - } - } - return TRUE; + if (tipo.is_ordine()) + { + const real qta_evasa = rec.get_real(tipo.field_qtaevasa()); + const real residuo = qta_evasa < qta ? (qta-qta_evasa) : ZERO; + str << residuo.string("###.###.##@,@@@"); + } + append_custom_fields(tipo, rec, str); + } + } + return TRUE; } void TDocument_tree::set_cursor(char tipocf, long codcf, int anno, const char* filter, FILTERFUNCTION ff) { - if (_relation == NULL) - { - _relation = new TRelation(LF_DOC); - _relation->add(LF_RIGHEDOC, "PROVV==PROVV|ANNO==ANNO|CODNUM==CODNUM|NDOC==NDOC"); - } - if (_cursor == NULL) - { - _cursor = new TCursor(_relation, "", 2); - } - TRectype& rec = _relation->curr(); - rec.zero(); - rec.put(DOC_TIPOCF, tipocf); - rec.put(DOC_CODCF, codcf); - rec.put(DOC_PROVV, "D"); - rec.put(DOC_ANNO, anno); - _cursor->freeze(FALSE); - _cursor->setfilter(""); // Force cursor rebuild - _cursor->setfilter(filter); - _cursor->setregion(rec, rec); - const long items = _cursor->items(); - _cursor->freeze(TRUE); - - goto_root(); - if (items <= 3) - expand_all(); + if (_relation == NULL) + { + _relation = new TRelation(LF_DOC); + _relation->add(LF_RIGHEDOC, "PROVV==PROVV|ANNO==ANNO|CODNUM==CODNUM|NDOC==NDOC"); + } + if (_cursor == NULL) + { + _cursor = new TCursor(_relation, "", 2); + } + TRectype& rec = _relation->curr(); + rec.zero(); + rec.put(DOC_TIPOCF, tipocf); + rec.put(DOC_CODCF, codcf); + rec.put(DOC_PROVV, "D"); + rec.put(DOC_ANNO, anno); + _cursor->freeze(FALSE); + _cursor->setfilter(""); // Force cursor rebuild + _cursor->setfilter(filter); + _cursor->setregion(rec, rec); + const long items = _cursor->items(); + _cursor->freeze(TRUE); + + goto_root(); + if (items <= 3) + expand_all(); } TDocument_tree::TDocument_tree() - : _relation(NULL), _cursor(NULL), _multiple_selection(false) + : _relation(NULL), _cursor(NULL), _multiple_selection(false) { } TDocument_tree::~TDocument_tree() { - if (_cursor) - delete _cursor; - if (_relation) - delete _relation; + if (_cursor) + delete _cursor; + if (_relation) + delete _relation; } /////////////////////////////////////////////////////////// @@ -2034,52 +2047,52 @@ TDocument_tree::~TDocument_tree() /////////////////////////////////////////////////////////// class TElabora_mask : public TAutomask -{ - TDocumento_mask* _main; - TLista_elaborazioni _elab; - TDocument_tree _tree; +{ + TDocumento_mask* _main; + TLista_elaborazioni _elab; + TDocument_tree _tree; int _check_fld; - TElaborazione* _last_elab; - + TElaborazione* _last_elab; + // @access Protected Member -protected: - TString _art_filter, _liv_filter; - static TElabora_mask* _myself; - static bool article_filter(const TRelation* rel); +protected: + TString _art_filter, _liv_filter; + static TElabora_mask* _myself; + static bool article_filter(const TRelation* rel); - void add_valuta_filter(TString& filter) const; - - void docrif_search(); - int update_list(); - void update_ndoc_filter(bool is_tipo_elaborazione = FALSE); + void add_valuta_filter(TString& filter) const; + + void docrif_search(); + int update_list(); + void update_ndoc_filter(bool is_tipo_elaborazione = FALSE); - virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); - + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); + // @access Public Member -public: - bool elabora(); - TElaborazione* curr_elab(); +public: + bool elabora(); + TElaborazione* curr_elab(); - // @cmember Costruttore (crea la maschera leggendo la descrizione dal file .msk) - TElabora_mask(TDocumento_mask& main_mask); - // @cmember Distruttore - virtual ~TElabora_mask() {} + // @cmember Costruttore (crea la maschera leggendo la descrizione dal file .msk) + TElabora_mask(TDocumento_mask& main_mask); + // @cmember Distruttore + virtual ~TElabora_mask() {} }; TElabora_mask* TElabora_mask::_myself = NULL; bool TElabora_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { - switch (o.dlg()) - { - case F_CODART: - case F_CODNUM_ELAB: - if (e == fe_modify) - update_ndoc_filter(); - break; - case F_NDOC_ELAB: - if (e == fe_init || e == fe_modify) + switch (o.dlg()) + { + case F_CODART: + case F_CODNUM_ELAB: + if (e == fe_modify) + update_ndoc_filter(); + break; + case F_NDOC_ELAB: + if (e == fe_init || e == fe_modify) { const long ndoc = atol(o.get()); @@ -2093,22 +2106,22 @@ bool TElabora_mask::on_field_event(TOperable_field& o, TField_event e, long joll } } } - break; - case F_TYPE: - if (e == fe_init || e == fe_modify) - { - int ne = update_list(); - if (e == fe_init && ne == 0) // Riprova a cambiare flag e ricostruire la lista - { - set(F_TYPE, "X"); - ne = update_list(); - if (ne == 0) - set(F_TYPE, ""); - } - update_ndoc_filter(TRUE); + break; + case F_TYPE: + if (e == fe_init || e == fe_modify) + { + int ne = update_list(); + if (e == fe_init && ne == 0) // Riprova a cambiare flag e ricostruire la lista + { + set(F_TYPE, "X"); + ne = update_list(); + if (ne == 0) + set(F_TYPE, ""); + } + update_ndoc_filter(TRUE); const bool add_to_doc = o.get().not_empty(); - const bool is_search = !add_to_doc || field(F_CODCF_ELAB).empty(); - o.mask().field(F_NDOC_ELAB).check_type(is_search ? CHECK_SEARCH : CHECK_NORMAL); + const bool is_search = !add_to_doc || field(F_CODCF_ELAB).empty(); + o.mask().field(F_NDOC_ELAB).check_type(is_search ? CHECK_SEARCH : CHECK_NORMAL); _tree.multiple_selection(add_to_doc); bool check_tot = false; if (add_to_doc) @@ -2116,13 +2129,13 @@ bool TElabora_mask::on_field_event(TOperable_field& o, TField_event e, long joll if (_check_fld < -1) { _check_fld = -1; - const TString_array& handlers = _main->doc().tipo().handlers(); + const TString_array& handlers = _main->doc().tipo().handlers(); const int items = handlers.items(); - + for (int i = 0; i < items; i ++ ) { TToken_string& riga = (TToken_string&) handlers[i]; - + if (riga.get_int(1) == 2) _check_fld = riga.get_int(0); } @@ -2134,31 +2147,31 @@ bool TElabora_mask::on_field_event(TOperable_field& o, TField_event e, long joll o.mask().show(-GRP_CHK, check_tot); if (check_tot) o.mask().set(F_TOTVAL, _main->get(_check_fld)); - } - break; - case F_STATODOC_ELAB: - case F_TIPODOC_ELAB: - if (e == fe_modify) - { - update_list(); - update_ndoc_filter(); - } - break; - case F_ELAB: - if (e == fe_modify) - update_ndoc_filter(TRUE); - break; - case F_ANNO_ELAB: - if (e == fe_modify) - update_ndoc_filter(); - break; - case F_NUMDOCRIF_ELAB: - if (e == fe_button) - docrif_search(); - break; - case F_ROWS: - if (e == fe_modify) - { + } + break; + case F_STATODOC_ELAB: + case F_TIPODOC_ELAB: + if (e == fe_modify) + { + update_list(); + update_ndoc_filter(); + } + break; + case F_ELAB: + if (e == fe_modify) + update_ndoc_filter(TRUE); + break; + case F_ANNO_ELAB: + if (e == fe_modify) + update_ndoc_filter(); + break; + case F_NUMDOCRIF_ELAB: + if (e == fe_button) + docrif_search(); + break; + case F_ROWS: + if (e == fe_modify) + { TString id; _tree.curr_id(id); @@ -2175,7 +2188,7 @@ bool TElabora_mask::on_field_event(TOperable_field& o, TField_event e, long joll set(F_NDOC_ELAB, head.get(DOC_NDOC)); } } - } + } else if (e == fe_select) { @@ -2198,7 +2211,7 @@ bool TElabora_mask::on_field_event(TOperable_field& o, TField_event e, long joll } } } - break; + break; case DLG_LINK: if (e == fe_button) { @@ -2233,150 +2246,150 @@ bool TElabora_mask::on_field_event(TOperable_field& o, TField_event e, long joll } } break; - default: - break; - } - return TRUE; + default: + break; + } + return TRUE; } int TElabora_mask::update_list() { - TString_array elabs; - const TString16 tipo(_main->get(F_TIPODOC)); - const TString16 stato(_main->get(F_STATO)); - const TString16 tipo_elab(get(F_TIPODOC_ELAB)); - const TString16 stato_elab(get(F_STATODOC_ELAB)); - const bool from_elab = !get_bool(F_TYPE); - int items = 0; - - if (from_elab) - items = _elab.select(elabs, tipo, stato,"","") ; - else - items = _elab.select(elabs, tipo_elab, stato_elab, tipo, stato); + TString_array elabs; + const TString16 tipo(_main->get(F_TIPODOC)); + const TString16 stato(_main->get(F_STATO)); + const TString16 tipo_elab(get(F_TIPODOC_ELAB)); + const TString16 stato_elab(get(F_STATODOC_ELAB)); + const bool from_elab = !get_bool(F_TYPE); + int items = 0; + + if (from_elab) + items = _elab.select(elabs, tipo, stato,"","") ; + else + items = _elab.select(elabs, tipo_elab, stato_elab, tipo, stato); - TList_field & f = (TList_field &) field(F_ELAB); - TToken_string codes; - TToken_string descrs; - for (int i = 0; i < items; i++) - { - const TElaborazione& e = _elab[elabs.row(i)]; - - if (!from_elab) - { - // AO20123: Impedire contabilizzazione all'indietro! - if (e.tipo() == _contabilizzazione || e.tipo() == _generazione_effetti) - continue; - } - - codes.add(e.codice()); - descrs.add(e.descrizione()); - } + TList_field & f = (TList_field &) field(F_ELAB); + TToken_string codes; + TToken_string descrs; + for (int i = 0; i < items; i++) + { + const TElaborazione& e = _elab[elabs.row(i)]; + + if (!from_elab) + { + // AO20123: Impedire contabilizzazione all'indietro! + if (e.tipo() == _contabilizzazione || e.tipo() == _generazione_effetti) + continue; + } + + codes.add(e.codice()); + descrs.add(e.descrizione()); + } - items = codes.items(); // Conta elementi veramente aggiunti - const bool ok = items > 0; - enable(DLG_OK, ok); - enable(F_ELAB, ok); + items = codes.items(); // Conta elementi veramente aggiunti + const bool ok = items > 0; + enable(DLG_OK, ok); + enable(F_ELAB, ok); - if (codes != f.get_codes()) - f.replace_items(codes, descrs); - const TElaborazione * e = curr_elab(); - if (e != NULL && e->tipo() == _consegna_ordini) - show(-GRP_ART); - else - { - reset(-GRP_ART); - hide(-GRP_ART); - } - - return items; + if (codes != f.get_codes()) + f.replace_items(codes, descrs); + const TElaborazione * e = curr_elab(); + if (e != NULL && e->tipo() == _consegna_ordini) + show(-GRP_ART); + else + { + reset(-GRP_ART); + hide(-GRP_ART); + } + + return items; } bool TElabora_mask::elabora() -{ - bool update_mask = FALSE; +{ + bool update_mask = FALSE; - TLista_documenti in; - TLista_documenti out; - TDocumento& app_doc = ((TDocumento_mask *)_main)->doc(); - const long numdoc = field(F_NDOC_ELAB).active() ? get_long(F_NDOC_ELAB) : app_doc.get_long(DOC_NDOC); - const bool update_header = get_bool(F_UPDATE_HEADER); - - TDocumento* newdoc = new TDocumento(get(F_PROVV_ELAB)[0], get_int(F_ANNO_ELAB), get(F_CODNUM_ELAB), numdoc); - TDocumento& d = *newdoc; + TLista_documenti in; + TLista_documenti out; + TDocumento& app_doc = ((TDocumento_mask *)_main)->doc(); + const long numdoc = field(F_NDOC_ELAB).active() ? get_long(F_NDOC_ELAB) : app_doc.get_long(DOC_NDOC); + const bool update_header = get_bool(F_UPDATE_HEADER); + + TDocumento* newdoc = new TDocumento(get(F_PROVV_ELAB)[0], get_int(F_ANNO_ELAB), get(F_CODNUM_ELAB), numdoc); + TDocumento& d = *newdoc; - if (numdoc <= 0) - { - TDocumento::copy_data(d.head(), app_doc.head()); - d.put(DOC_TIPODOC, get(F_TIPODOC_ELAB)); - d.put(DOC_STATO, get(F_STATODOC_ELAB)); - - const TDate datadoc = d.get_date(DOC_DATADOC); - const TDate datainsc = d.get_date(DOC_DATAINSC); - const bool equal = !datainsc.ok() || datadoc == datainsc; - - d.put(DOC_DATADOC, get(F_DATADOC_ELAB)); - if (equal) - d.zero(DOC_DATAINSC); - - const TTipo_documento & t = d.tipo(); - - if (t.mov_mag()) - d.put(DOC_CAUSMAG, t.caus_mov()); - else - d.zero(DOC_CAUSMAG); - } - - if (update_header) - { - const TString16 tipo_doc(app_doc.get(DOC_TIPODOC)); - const TString16 caus_mag(app_doc.get(DOC_CAUSMAG)); - const long movmag = app_doc.get_long(DOC_MOVMAG); - const TDate datadoc = app_doc.get_date(DOC_DATADOC); - const TDate datainsc = app_doc.get_date(DOC_DATAINSC); - const char stato = app_doc.stato(); - - TDocumento::copy_data(app_doc.head(), d.head()); - - app_doc.put(DOC_TIPODOC, tipo_doc); - app_doc.put(DOC_CAUSMAG, caus_mag); - app_doc.put(DOC_MOVMAG, movmag); - app_doc.put(DOC_DATADOC, datadoc); - app_doc.put(DOC_DATAINSC, datainsc); - app_doc.put(DOC_STATO, stato); - } - - const bool from_elab = !get_bool(F_TYPE); - TElaborazione * e = curr_elab(); - - if (e == NULL) - return FALSE; - - if (e->tipo() == _consegna_ordini) - { - TParametri_elaborazione& p = e->params(); - p.set("ARTICOLO", get(F_CODART)); - p.set("UM", get(F_UMQTA)); - p.set("QUANTITA", get(F_QTA)); - } - if (from_elab) - { - in.add(app_doc); - out.add(d); - if (e->elabora(in, out, TDate(TODAY), TRUE)) - { - if (out[0] != d) - out.rewrite(); - if (app_doc != in[0]) - { - in.rewrite(); - app_doc = in[0]; - update_mask = TRUE; - } - } - } - else - { - out.add(app_doc); + if (numdoc <= 0) + { + TDocumento::copy_data(d.head(), app_doc.head()); + d.put(DOC_TIPODOC, get(F_TIPODOC_ELAB)); + d.put(DOC_STATO, get(F_STATODOC_ELAB)); + + const TDate datadoc = d.get_date(DOC_DATADOC); + const TDate datainsc = d.get_date(DOC_DATAINSC); + const bool equal = !datainsc.ok() || datadoc == datainsc; + + d.put(DOC_DATADOC, get(F_DATADOC_ELAB)); + if (equal) + d.zero(DOC_DATAINSC); + + const TTipo_documento & t = d.tipo(); + + if (t.mov_mag()) + d.put(DOC_CAUSMAG, t.caus_mov()); + else + d.zero(DOC_CAUSMAG); + } + + if (update_header) + { + const TString16 tipo_doc(app_doc.get(DOC_TIPODOC)); + const TString16 caus_mag(app_doc.get(DOC_CAUSMAG)); + const long movmag = app_doc.get_long(DOC_MOVMAG); + const TDate datadoc = app_doc.get_date(DOC_DATADOC); + const TDate datainsc = app_doc.get_date(DOC_DATAINSC); + const char stato = app_doc.stato(); + + TDocumento::copy_data(app_doc.head(), d.head()); + + app_doc.put(DOC_TIPODOC, tipo_doc); + app_doc.put(DOC_CAUSMAG, caus_mag); + app_doc.put(DOC_MOVMAG, movmag); + app_doc.put(DOC_DATADOC, datadoc); + app_doc.put(DOC_DATAINSC, datainsc); + app_doc.put(DOC_STATO, stato); + } + + const bool from_elab = !get_bool(F_TYPE); + TElaborazione * e = curr_elab(); + + if (e == NULL) + return FALSE; + + if (e->tipo() == _consegna_ordini) + { + TParametri_elaborazione& p = e->params(); + p.set("ARTICOLO", get(F_CODART)); + p.set("UM", get(F_UMQTA)); + p.set("QUANTITA", get(F_QTA)); + } + if (from_elab) + { + in.add(app_doc); + out.add(d); + if (e->elabora(in, out, TDate(TODAY), TRUE)) + { + if (out[0] != d) + out.rewrite(); + if (app_doc != in[0]) + { + in.rewrite(); + app_doc = in[0]; + update_mask = TRUE; + } + } + } + else + { + out.add(app_doc); _tree.build_doc_list(in); char provv = get(F_PROVV_ELAB)[0]; int anno = get_int(F_ANNO_ELAB); @@ -2389,391 +2402,391 @@ bool TElabora_mask::elabora() in.add(d); } - if (e->elabora(in, out, TDate(TODAY), TRUE)) - { - if (out[0] != app_doc) - { - out.rewrite(); - app_doc.read(out[0].head()); - update_mask = TRUE; - } + if (e->elabora(in, out, TDate(TODAY), TRUE)) + { + if (out[0] != app_doc) + { + out.rewrite(); + app_doc.read(out[0].head()); + update_mask = TRUE; + } in.rewrite(); - } - const TString8 num_in = e->codice_numerazione_iniziale(); - set(F_CODNUM_ELAB, num_in); - set(F_NDOC_ELAB, ""); - set(F_NUMDOCRIF_ELAB, ""); - } - if (e->tipo() == _consegna_ordini) - { - TParametri_elaborazione& p = e->params(); - if (p.get("ARTICOLO").not_empty()) - { - real qta = get_real(F_QTA); - if (qta > ZERO) - { - const real qta_evasa = p.get_real("QUANTITA"); - qta -= qta_evasa; - set(F_QTA, qta); - } - } - } - - delete newdoc; + } + const TString8 num_in = e->codice_numerazione_iniziale(); + set(F_CODNUM_ELAB, num_in); + set(F_NDOC_ELAB, ""); + set(F_NUMDOCRIF_ELAB, ""); + } + if (e->tipo() == _consegna_ordini) + { + TParametri_elaborazione& p = e->params(); + if (p.get("ARTICOLO").not_empty()) + { + real qta = get_real(F_QTA); + if (qta > ZERO) + { + const real qta_evasa = p.get_real("QUANTITA"); + qta -= qta_evasa; + set(F_QTA, qta); + } + } + } + + delete newdoc; - // Azzera l'anno in caso di ordini - if (in.items() > 0 && in[0].is_ordine()) - { - reset(F_ANNO_ELAB); - update_mask = TRUE; - } + // Azzera l'anno in caso di ordini + if (in.items() > 0 && in[0].is_ordine()) + { + reset(F_ANNO_ELAB); + update_mask = TRUE; + } - if (update_mask) - update_ndoc_filter(); - - return update_mask; + if (update_mask) + update_ndoc_filter(); + + return update_mask; } TElaborazione * TElabora_mask::curr_elab() { - const TString16 cod_elab(get(F_ELAB)); - return cod_elab.not_empty() ? &_elab[cod_elab] : NULL; -} + const TString16 cod_elab(get(F_ELAB)); + return cod_elab.not_empty() ? &_elab[cod_elab] : NULL; +} bool TElabora_mask::article_filter(const TRelation* rel) -{ - bool yes = FALSE; - TElabora_mask& m = *_myself; - TLocalisamfile rdoc(LF_RIGHEDOC); - rdoc.put(RDOC_CODNUM, rel->curr().get(DOC_CODNUM)); - rdoc.put(RDOC_ANNO, rel->curr().get(DOC_ANNO)); - rdoc.put(RDOC_PROVV, rel->curr().get(DOC_PROVV)); - rdoc.put(RDOC_NDOC, rel->curr().get(DOC_NDOC)); - rdoc.put(RDOC_NRIGA, 1); - int next_riga = 1; - for (int err = rdoc.read(); err == NOERR; err = rdoc.next()) - { - const int nriga = rdoc.get_int(RDOC_NRIGA); - if (nriga != next_riga) - break; - next_riga++; - const bool evasa= rdoc.get_bool(RDOC_RIGAEVASA); - const TString& codart = rdoc.get(RDOC_CODART); - if (!evasa && codart == m._art_filter) - { - yes = TRUE; - break; - } - } - return yes; +{ + bool yes = FALSE; + TElabora_mask& m = *_myself; + TLocalisamfile rdoc(LF_RIGHEDOC); + rdoc.put(RDOC_CODNUM, rel->curr().get(DOC_CODNUM)); + rdoc.put(RDOC_ANNO, rel->curr().get(DOC_ANNO)); + rdoc.put(RDOC_PROVV, rel->curr().get(DOC_PROVV)); + rdoc.put(RDOC_NDOC, rel->curr().get(DOC_NDOC)); + rdoc.put(RDOC_NRIGA, 1); + int next_riga = 1; + for (int err = rdoc.read(); err == NOERR; err = rdoc.next()) + { + const int nriga = rdoc.get_int(RDOC_NRIGA); + if (nriga != next_riga) + break; + next_riga++; + const bool evasa= rdoc.get_bool(RDOC_RIGAEVASA); + const TString& codart = rdoc.get(RDOC_CODART); + if (!evasa && codart == m._art_filter) + { + yes = TRUE; + break; + } + } + return yes; } void TElabora_mask::add_valuta_filter(TString& filter) const -{ - TString16 valuta = get(F_CODVAL_ELAB); - if (::is_firm_value(valuta)) - { - filter << "((CODVAL==\"" << valuta << "\")"; - if (valuta.empty()) - valuta = TCurrency::get_firm_val(); - else - valuta.cut(0); - filter << "||(CODVAL==\"" << valuta << "\"))"; - } - else - filter << "(CODVAL==\"" << valuta << "\")"; +{ + TString16 valuta = get(F_CODVAL_ELAB); + if (::is_firm_value(valuta)) + { + filter << "((CODVAL==\"" << valuta << "\")"; + if (valuta.empty()) + valuta = TCurrency::get_firm_val(); + else + valuta.cut(0); + filter << "||(CODVAL==\"" << valuta << "\"))"; + } + else + filter << "(CODVAL==\"" << valuta << "\")"; } void TElabora_mask::update_ndoc_filter(bool is_tipo_elaborazione) { - TString filter; - add_valuta_filter(filter); - - TElaborazione * e = curr_elab(); - const bool elab_changed = e != _last_elab; - _last_elab = e; + TString filter; + add_valuta_filter(filter); + + TElaborazione * e = curr_elab(); + const bool elab_changed = e != _last_elab; + _last_elab = e; - const bool aggiungi_doc_att = get_bool(F_TYPE); - enable(-1, aggiungi_doc_att); - if (!aggiungi_doc_att && is_tipo_elaborazione ) - reset(-1); + const bool aggiungi_doc_att = get_bool(F_TYPE); + enable(-1, aggiungi_doc_att); + if (!aggiungi_doc_att && is_tipo_elaborazione ) + reset(-1); - const bool enable_group_doc = e != NULL && e->tipo() != _generazione_effetti && e->tipo() != _contabilizzazione; - show(-GRP_DOC, enable_group_doc); + const bool enable_group_doc = e != NULL && e->tipo() != _generazione_effetti && e->tipo() != _contabilizzazione; + show(-GRP_DOC, enable_group_doc); - if (e != NULL) - { - if (aggiungi_doc_att) - { + if (e != NULL) + { + if (aggiungi_doc_att) + { const bool agg_test = e->aggiorna_testata_se_vuoto() && _main->sfield(F_SHEET).items() == 0; set(F_UPDATE_HEADER, agg_test ? "X" : ""); - const TString8 num_in = e->codice_numerazione_iniziale(); - if (elab_changed) - { - const TString16 tipo_in(e->tipo_iniziale(0)); - const char stato_in = e->stato_iniziale(0); + const TString8 num_in = e->codice_numerazione_iniziale(); + if (elab_changed) + { + const TString16 tipo_in(e->tipo_iniziale(0)); + const char stato_in = e->stato_iniziale(0); - set(F_CODNUM_ELAB, num_in); - field(F_CODNUM_ELAB).check(); - set(F_TIPODOC_ELAB , tipo_in); - field(F_TIPODOC_ELAB).check(); - TString8 si; si << stato_in; - set(F_STATODOC_ELAB, si); - field(F_STATODOC_ELAB).check(); - - // Azzero anno di elaaborazione quando ho a che fare con degli ordini - const TTipo_documento& tipodocin = _main->doc().tipo(tipo_in); - if (tipodocin.is_ordine()) - reset(F_ANNO_ELAB); - } + set(F_CODNUM_ELAB, num_in); + field(F_CODNUM_ELAB).check(); + set(F_TIPODOC_ELAB , tipo_in); + field(F_TIPODOC_ELAB).check(); + TString8 si; si << stato_in; + set(F_STATODOC_ELAB, si); + field(F_STATODOC_ELAB).check(); + + // Azzero anno di elaaborazione quando ho a che fare con degli ordini + const TTipo_documento& tipodocin = _main->doc().tipo(tipo_in); + if (tipodocin.is_ordine()) + reset(F_ANNO_ELAB); + } - if (!field(F_TIPODOC_ELAB).empty()) - { - const TString16 tipo(get(F_TIPODOC_ELAB)); - TString80 td; td.format("&&(TIPODOC==\"%s\")", (const char *)tipo); - filter << td; - const TString& stato = get(F_STATODOC_ELAB); - if (stato.not_empty()) - { - filter << "&&(STATO==\"" << stato << "\")"; - } - else - { - bool almost_one = FALSE; - - for (int i = 0; i < TElaborazione::_max_tipi_doc_elab; i++) - { - const TString16 tipo_in(e->tipo_iniziale(i)); - const char stato_in = e->stato_iniziale(i); - - if (tipo == tipo_in && stato_in > '0') - { - if (almost_one) - filter << "||"; - else - filter << "&&("; - almost_one = TRUE; - - filter << "(STATO==\"" << stato_in << "\")"; - } - } - if (almost_one) - filter << ')'; - } - } - else - { - bool almost_one = FALSE; - - for (int i = 0; i < TElaborazione::_max_tipi_doc_elab; i++) - { - const TString16 tipo_in(e->tipo_iniziale(i)); - if (tipo_in.not_empty()) - { - if (almost_one) - filter << "||"; - else - filter << "&&("; - almost_one = TRUE; - filter << "((TIPODOC==\"" << tipo_in << "\")"; - - const char stato_in[2] = { e->stato_iniziale(i), '\0' }; - if (stato_in[0] > '0') - filter << "&&(STATO==\"" << stato_in << "\")"; - filter << ')'; - } - } - if (almost_one) - filter << ')'; - } - } - else - { - const TString4 tipo_fin(e->tipo_finale()); - const TString4 stato_fin(e->stato_finale()); + if (!field(F_TIPODOC_ELAB).empty()) + { + const TString16 tipo(get(F_TIPODOC_ELAB)); + TString80 td; td.format("&&(TIPODOC==\"%s\")", (const char *)tipo); + filter << td; + const TString& stato = get(F_STATODOC_ELAB); + if (stato.not_empty()) + { + filter << "&&(STATO==\"" << stato << "\")"; + } + else + { + bool almost_one = FALSE; + + for (int i = 0; i < TElaborazione::_max_tipi_doc_elab; i++) + { + const TString16 tipo_in(e->tipo_iniziale(i)); + const char stato_in = e->stato_iniziale(i); + + if (tipo == tipo_in && stato_in > '0') + { + if (almost_one) + filter << "||"; + else + filter << "&&("; + almost_one = TRUE; + + filter << "(STATO==\"" << stato_in << "\")"; + } + } + if (almost_one) + filter << ')'; + } + } + else + { + bool almost_one = FALSE; + + for (int i = 0; i < TElaborazione::_max_tipi_doc_elab; i++) + { + const TString16 tipo_in(e->tipo_iniziale(i)); + if (tipo_in.not_empty()) + { + if (almost_one) + filter << "||"; + else + filter << "&&("; + almost_one = TRUE; + filter << "((TIPODOC==\"" << tipo_in << "\")"; + + const char stato_in[2] = { e->stato_iniziale(i), '\0' }; + if (stato_in[0] > '0') + filter << "&&(STATO==\"" << stato_in << "\")"; + filter << ')'; + } + } + if (almost_one) + filter << ')'; + } + } + else + { + const TString4 tipo_fin(e->tipo_finale()); + const TString4 stato_fin(e->stato_finale()); set(F_UPDATE_HEADER, ""); - filter << "&&"; - if (stato_fin != "0") - filter << '('; - filter << "(TIPODOC==\"" << tipo_fin << "\")"; - if (stato_fin != "0") - filter << "&&(STATO==\"" << stato_fin << "\"))"; + filter << "&&"; + if (stato_fin != "0") + filter << '('; + filter << "(TIPODOC==\"" << tipo_fin << "\")"; + if (stato_fin != "0") + filter << "&&(STATO==\"" << stato_fin << "\"))"; - if (is_tipo_elaborazione) - { - const TString16 num_fin(e->codice_numerazione_finale()); - set(F_CODNUM_ELAB, num_fin); - field(F_CODNUM_ELAB).check(); - set(F_TIPODOC_ELAB, tipo_fin); - field(F_TIPODOC_ELAB).check(); - set(F_STATODOC_ELAB, stato_fin); - field(F_STATODOC_ELAB).check(); - } - } - } + if (is_tipo_elaborazione) + { + const TString16 num_fin(e->codice_numerazione_finale()); + set(F_CODNUM_ELAB, num_fin); + field(F_CODNUM_ELAB).check(); + set(F_TIPODOC_ELAB, tipo_fin); + field(F_TIPODOC_ELAB).check(); + set(F_STATODOC_ELAB, stato_fin); + field(F_STATODOC_ELAB).check(); + } + } + } - if (!field(F_CODNUM_ELAB).empty()) - { - TString80 cn; cn.format("&&(CODNUM==\"%s\")", (const char*)get(F_CODNUM_ELAB)); - filter << cn; - } - - TBrowse& brew = *efield(F_NDOC_ELAB).browse(); - brew.set_filter(filter); - - _art_filter = get(F_CODART); + if (!field(F_CODNUM_ELAB).empty()) + { + TString80 cn; cn.format("&&(CODNUM==\"%s\")", (const char*)get(F_CODNUM_ELAB)); + filter << cn; + } + + TBrowse& brew = *efield(F_NDOC_ELAB).browse(); + brew.set_filter(filter); + + _art_filter = get(F_CODART); - TCursor* cursor = brew.cursor(); - if (_art_filter.not_empty() && aggiungi_doc_att) - cursor->set_filterfunction(article_filter); - else - cursor->set_filterfunction(NULL); - - TTree_field& tf = tfield(F_ROWS); - if (!field(F_TIPODOC_ELAB).empty() && e != NULL) - { - tf.set_tree(&_tree); - TToken_string header(256, '\n'); - header.add("Anno Num. N. Data Cli/For Ragione Sociale"); - header.add(" Codice Articolo Descrizione Riga "); - if (aggiungi_doc_att && e->tipo() == _consegna_ordini) - header << "Da Evadere Residuo"; - else - header << " Quantità"; - tf.set_header(header); - - if (aggiungi_doc_att && _art_filter.not_empty()) - _tree.set_cursor(get(F_TIPOCF_ELAB)[0], get_long(F_CODCF_ELAB), get_int(F_ANNO_ELAB), filter, article_filter); - else - _tree.set_cursor(get(F_TIPOCF_ELAB)[0], get_long(F_CODCF_ELAB), get_int(F_ANNO_ELAB), filter); - - if (aggiungi_doc_att) // GF20059 - { - TCursor& cur = *_tree.get_cursor(); - if (cur.items() == 1) // Propone l'unico documento possibile - { - cur = 0L; - const TRectype& curr = cur.curr(); - set(F_ANNO_ELAB, curr.get(DOC_ANNO)); - set(F_NDOC_ELAB, curr.get(DOC_NDOC)); - set(F_CODNUM_ELAB, curr.get(DOC_CODNUM), 2); // Check but not hit - set(F_DATADOC_ELAB, curr.get(DOC_DATADOC)); - } - } - } - else - tf.set_tree(NULL); - tf.win().force_update(); + TCursor* cursor = brew.cursor(); + if (_art_filter.not_empty() && aggiungi_doc_att) + cursor->set_filterfunction(article_filter); + else + cursor->set_filterfunction(NULL); + + TTree_field& tf = tfield(F_ROWS); + if (!field(F_TIPODOC_ELAB).empty() && e != NULL) + { + tf.set_tree(&_tree); + TToken_string header(256, '\n'); + header.add("Anno Num. N. Data Cli/For Ragione Sociale"); + header.add(" Codice Articolo Descrizione Riga "); + if (aggiungi_doc_att && e->tipo() == _consegna_ordini) + header << "Da Evadere Residuo"; + else + header << " Quantità"; + tf.set_header(header); + + if (aggiungi_doc_att && _art_filter.not_empty()) + _tree.set_cursor(get(F_TIPOCF_ELAB)[0], get_long(F_CODCF_ELAB), get_int(F_ANNO_ELAB), filter, article_filter); + else + _tree.set_cursor(get(F_TIPOCF_ELAB)[0], get_long(F_CODCF_ELAB), get_int(F_ANNO_ELAB), filter); + + if (aggiungi_doc_att) // GF20059 + { + TCursor& cur = *_tree.get_cursor(); + if (cur.items() == 1) // Propone l'unico documento possibile + { + cur = 0L; + const TRectype& curr = cur.curr(); + set(F_ANNO_ELAB, curr.get(DOC_ANNO)); + set(F_NDOC_ELAB, curr.get(DOC_NDOC)); + set(F_CODNUM_ELAB, curr.get(DOC_CODNUM), 2); // Check but not hit + set(F_DATADOC_ELAB, curr.get(DOC_DATADOC)); + } + } + } + else + tf.set_tree(NULL); + tf.win().force_update(); } void TElabora_mask::docrif_search() { - TRectype filtrec(LF_DOC); - filtrec.put(DOC_TIPOCF, get(F_TIPOCF_ELAB)); - filtrec.put(DOC_CODCF, get(F_CODCF_ELAB)); - filtrec.put(DOC_PROVV, get(F_PROVV_ELAB)); - filtrec.put(DOC_ANNO, get(F_ANNO_ELAB)); - - TRelation rel(LF_DOC); - rel.add(LF_CLIFO, "TIPOCF==TIPOCF|CODCF==CODCF"); - TSorted_cursor cur(&rel, "TIPOCF|CODCF|PROVV|ANNO|CODNUM|NUMDOCRIF", "", 2, &filtrec, &filtrec); - TString flt(256); - if (!field(F_CODNUM_ELAB).empty()) - flt << "(CODNUM==\"" << get(F_CODNUM_ELAB) << "\")&&"; - if (!field(F_TIPODOC_ELAB).empty()) - flt << "(TIPODOC==\"" << get(F_TIPODOC_ELAB) << "\")&&"; - if (!field(F_STATODOC_ELAB).empty()) - flt << "(STATO==\"" << get(F_STATODOC_ELAB) << "\")&&"; - add_valuta_filter(flt); flt << "&&"; - TEdit_field& f = efield(F_NUMDOCRIF_ELAB); - if (!f.empty()) - flt << "(NUMDOCRIF==\"" << f.get() << "\")&&"; - flt.rtrim(2); // Togli gli ultimi && - - cur.setfilter(flt); - - TToken_string fields = "ANNO|CODNUM|TIPODOC|NUMDOCRIF|STATO|DATADOCRIF|DOC1|DOC2|DOC3|NDOC|20->RAGSOC"; - TCursor_sheet sheet(&cur, fields, - "Documento di riferimento", - "Anno|Num.|Tipo|Docum.Rif.|Stato|Data@10|Docum.Rif.1|Docum.Rif.2|Docum.Rif.3|Documento|Ragione Sociale@50", - 0, 1); - if (sheet.run() == K_ENTER) - { - const int nrifpos = fields.get_pos("NUMDOCRIF"); - const TString16 nrif = sheet.row(-1).get(nrifpos); - f.set(nrif); - const int ndocpos = fields.get_pos("NDOC"); - const TString16 ndoc = sheet.row(-1).get(ndocpos); - set(F_NDOC_ELAB, ndoc); - const int codnumpos = fields.get_pos("CODNUM"); - const TString16 codnum = sheet.row(-1).get(codnumpos); - set(F_CODNUM_ELAB, codnum, TRUE); - } + TRectype filtrec(LF_DOC); + filtrec.put(DOC_TIPOCF, get(F_TIPOCF_ELAB)); + filtrec.put(DOC_CODCF, get(F_CODCF_ELAB)); + filtrec.put(DOC_PROVV, get(F_PROVV_ELAB)); + filtrec.put(DOC_ANNO, get(F_ANNO_ELAB)); + + TRelation rel(LF_DOC); + rel.add(LF_CLIFO, "TIPOCF==TIPOCF|CODCF==CODCF"); + TSorted_cursor cur(&rel, "TIPOCF|CODCF|PROVV|ANNO|CODNUM|NUMDOCRIF", "", 2, &filtrec, &filtrec); + TString flt(256); + if (!field(F_CODNUM_ELAB).empty()) + flt << "(CODNUM==\"" << get(F_CODNUM_ELAB) << "\")&&"; + if (!field(F_TIPODOC_ELAB).empty()) + flt << "(TIPODOC==\"" << get(F_TIPODOC_ELAB) << "\")&&"; + if (!field(F_STATODOC_ELAB).empty()) + flt << "(STATO==\"" << get(F_STATODOC_ELAB) << "\")&&"; + add_valuta_filter(flt); flt << "&&"; + TEdit_field& f = efield(F_NUMDOCRIF_ELAB); + if (!f.empty()) + flt << "(NUMDOCRIF==\"" << f.get() << "\")&&"; + flt.rtrim(2); // Togli gli ultimi && + + cur.setfilter(flt); + + TToken_string fields = "ANNO|CODNUM|TIPODOC|NUMDOCRIF|STATO|DATADOCRIF|DOC1|DOC2|DOC3|NDOC|20->RAGSOC"; + TCursor_sheet sheet(&cur, fields, + "Documento di riferimento", + "Anno|Num.|Tipo|Docum.Rif.|Stato|Data@10|Docum.Rif.1|Docum.Rif.2|Docum.Rif.3|Documento|Ragione Sociale@50", + 0, 1); + if (sheet.run() == K_ENTER) + { + const int nrifpos = fields.get_pos("NUMDOCRIF"); + const TString16 nrif = sheet.row(-1).get(nrifpos); + f.set(nrif); + const int ndocpos = fields.get_pos("NDOC"); + const TString16 ndoc = sheet.row(-1).get(ndocpos); + set(F_NDOC_ELAB, ndoc); + const int codnumpos = fields.get_pos("CODNUM"); + const TString16 codnum = sheet.row(-1).get(codnumpos); + set(F_CODNUM_ELAB, codnum, TRUE); + } } TElabora_mask::TElabora_mask(TDocumento_mask& main_mask) - : TAutomask("ve0100b"), _main(&main_mask), _last_elab(NULL), _check_fld(-883) -{ - _myself = this; - - const TDate oggi(TODAY); - set(F_ANNO_ELAB, oggi.year()); //anno della datadoc proposta (risolve bug 0000331) - set(F_TIPOCF_ELAB, _main->get(F_TIPOCF)); - set(F_CODCF_ELAB, _main->get(F_CODCF)); - set(F_CODVAL_ELAB, _main->get(F_CODVAL)); + : TAutomask("ve0100b"), _main(&main_mask), _last_elab(NULL), _check_fld(-883) +{ + _myself = this; + + const TDate oggi(TODAY); + set(F_ANNO_ELAB, oggi.year()); //anno della datadoc proposta (risolve bug 0000331) + set(F_TIPOCF_ELAB, _main->get(F_TIPOCF)); + set(F_CODCF_ELAB, _main->get(F_CODCF)); + set(F_CODVAL_ELAB, _main->get(F_CODVAL)); } bool TDocumento_mask::elabora_handler( TMask_field& f, KEY key ) { - if (key == K_SPACE) - { - TDocumento_mask& m = (TDocumento_mask&)f.mask(); - m.update_progs(); - if (m.check_fields()) // Check values - { - TElabora_mask* selection = new TElabora_mask(m); // No woman no stack - bool update_mask = FALSE; - const char stato_iniziale = m.doc().stato(); - - while (selection->run() == K_ENTER) - { - m.mask2doc(); - update_mask |= selection->elabora(); - - if (m.doc().stato() != stato_iniziale) - break; - if (update_mask) - { - m.doc2mask(FALSE); - TSheet_field& ss = m.sfield(F_SHEET); - for (int i = 0; i < ss.items(); i++) - { - m.ss_notify(ss,i,K_TAB); - m.ss_notify(ss,i,K_SPACE); - m.ss_notify(ss,i,K_ENTER); - } - } + if (key == K_SPACE) + { + TDocumento_mask& m = (TDocumento_mask&)f.mask(); + m.update_progs(); + if (m.check_fields()) // Check values + { + TElabora_mask* selection = new TElabora_mask(m); // No woman no stack + bool update_mask = FALSE; + const char stato_iniziale = m.doc().stato(); + + while (selection->run() == K_ENTER) + { + m.mask2doc(); + update_mask |= selection->elabora(); + + if (m.doc().stato() != stato_iniziale) + break; + if (update_mask) + { + m.doc2mask(FALSE); + TSheet_field& ss = m.sfield(F_SHEET); + for (int i = 0; i < ss.items(); i++) + { + m.ss_notify(ss,i,K_TAB); + m.ss_notify(ss,i,K_SPACE); + m.ss_notify(ss,i,K_ENTER); + } + } if (!m.get_bool(F_TYPE)) // non aggiunge al documento attuale break; - } - if (update_mask) - { - m.doc2mask(FALSE); - // Provoca decodifiche necessarie - const int last = m.id2pos(BASE_PIEDE + 1); - for (int p = 0; p < last; p++) - { - TMask_field& f = m.fld(p); - f.check(STARTING_CHECK); - } + } + if (update_mask) + { + m.doc2mask(FALSE); + // Provoca decodifiche necessarie + const int last = m.id2pos(BASE_PIEDE + 1); + for (int p = 0; p < last; p++) + { + TMask_field& f = m.fld(p); + f.check(STARTING_CHECK); + } for (int i = m.fields() - 1; i >= 0; i--) - m.fld(i).set_dirty(FALSE); - } - delete selection; - } - } - return TRUE; + m.fld(i).set_dirty(FALSE); + } + delete selection; + } + } + return TRUE; } /////////////////////////////////////////////////////////// @@ -2782,9 +2795,9 @@ bool TDocumento_mask::elabora_handler( TMask_field& f, KEY key ) bool TDocumento_mask::print_handler( TMask_field& f, KEY key ) { - if (key == K_SPACE) - main_app().print(); - return TRUE; + if (key == K_SPACE) + main_app().print(); + return TRUE; } void TDocumento_mask::set_field_handler(short fieldid, CONTROL_HANDLER handler) @@ -2794,18 +2807,18 @@ void TDocumento_mask::set_field_handler(short fieldid, CONTROL_HANDLER handler) void TDocumento_mask::user_set_handler(int fieldid, int index) { - switch( index ) - { - case 1: - set_field_handler(fieldid, ora_hndl); - break; - case 2: - set_field_handler(fieldid, totdoc_hndl); - break; - case 3: - set_field_handler(fieldid, numdocrif_hndl); - break; - case 4: + switch( index ) + { + case 1: + set_field_handler(fieldid, ora_hndl); + break; + case 2: + set_field_handler(fieldid, totdoc_hndl); + break; + case 3: + set_field_handler(fieldid, numdocrif_hndl); + break; + case 4: { _smartcard = new TSmart_card(); if (_smartcard->type() != no_smartcard) @@ -2821,13 +2834,13 @@ void TDocumento_mask::user_set_handler(int fieldid, int index) } } break; - case 5: - set_field_handler(fieldid, dummy_hndl); - break; - default: - CHECK( FALSE, "Tentativo di installare un handler non definito" ); - break; - } + case 5: + set_field_handler(fieldid, dummy_hndl); + break; + default: + CHECK( FALSE, "Tentativo di installare un handler non definito" ); + break; + } } bool TDocumento_mask::call_handler( TMask_field& f, KEY key) @@ -2867,170 +2880,170 @@ bool TDocumento_mask::universal_handler( TMask_field& f, KEY key) bool TDocumento_mask::anno_handler( TMask_field& f, KEY key) { - if (key == K_TAB && f.to_check(key, TRUE)) + if (key == K_TAB && f.to_check(key, TRUE)) app().update_navigation_bar(); - return true; + return true; } bool TDocumento_mask::num_handler( TMask_field& f, KEY key) { - if (key == K_TAB && f.to_check(key, TRUE)) - { - // Ottengo la maschera - TMask& m = f.mask(); - - TTable & tabnum = ((TTable &) ((TEdit_field &)f).browse()->cursor()->file()); - if ( tabnum.good()) - { - TCodice_numerazione cod_num(tabnum.curr()); - m.set( F_DESNUM, cod_num.descrizione()); - // Propone il primo tipo di documento come default - if (m.field(F_TIPODOC).empty() || f.focusdirty()) - { - m.set( F_TIPODOC, cod_num.tipo_doc(0)); - m.send_key( K_TAB, F_TIPODOC ); - } - // Se per questa numerazione e' abilitata le numerazione provvisoria - if (cod_num.num_provv()) - { - // Setta di default la numerazione provvisoria - m.set( F_PROVV, "P" ); - // Abilita il campo per la selezione della numerazione - m.enable( F_PROVV ); - } - else // Altrimenti ... - { - // Setta la numerazione a definitiva - m.set( F_PROVV, "D" ); - // Disabilita il campo per la selezione della numerazione - m.disable( F_PROVV ); - } - } - else - { - m.set( F_DESNUM, "" ); - m.set( F_TIPODOC, "" ); - } + if (key == K_TAB && f.to_check(key, TRUE)) + { + // Ottengo la maschera + TMask& m = f.mask(); + + TTable & tabnum = ((TTable &) ((TEdit_field &)f).browse()->cursor()->file()); + if ( tabnum.good()) + { + TCodice_numerazione cod_num(tabnum.curr()); + m.set( F_DESNUM, cod_num.descrizione()); + // Propone il primo tipo di documento come default + if (m.field(F_TIPODOC).empty() || f.focusdirty()) + { + m.set( F_TIPODOC, cod_num.tipo_doc(0)); + m.send_key( K_TAB, F_TIPODOC ); + } + // Se per questa numerazione e' abilitata le numerazione provvisoria + if (cod_num.num_provv()) + { + // Setta di default la numerazione provvisoria + m.set( F_PROVV, "P" ); + // Abilita il campo per la selezione della numerazione + m.enable( F_PROVV ); + } + else // Altrimenti ... + { + // Setta la numerazione a definitiva + m.set( F_PROVV, "D" ); + // Disabilita il campo per la selezione della numerazione + m.disable( F_PROVV ); + } + } + else + { + m.set( F_DESNUM, "" ); + m.set( F_TIPODOC, "" ); + } app().update_navigation_bar(); - } - return TRUE; + } + return TRUE; } bool TDocumento_mask::tip_handler( TMask_field& f, KEY key ) { - TDocumento_mask& m = (TDocumento_mask&)f.mask( ); - if ( key == K_TAB && m.is_running() && m.get(F_TIPODOC).not_empty()) - { - TCodice_numerazione cod_num(m.get(F_CODNUM)); - const TString& tipo = f.get(); - int last = cod_num.ntipi_doc(); - for (int i = 0; i < last; i++ ) - { - const TString16 curtipo(cod_num.tipo_doc(i)); - if (curtipo == tipo) - return TRUE; - } - return f.error_box( "Tipo non valido per la numerazione selezionata!" ); - } - return TRUE; + TDocumento_mask& m = (TDocumento_mask&)f.mask( ); + if ( key == K_TAB && m.is_running() && m.get(F_TIPODOC).not_empty()) + { + TCodice_numerazione cod_num(m.get(F_CODNUM)); + const TString& tipo = f.get(); + int last = cod_num.ntipi_doc(); + for (int i = 0; i < last; i++ ) + { + const TString16 curtipo(cod_num.tipo_doc(i)); + if (curtipo == tipo) + return TRUE; + } + return f.error_box( "Tipo non valido per la numerazione selezionata!" ); + } + return TRUE; } bool TDocumento_mask::codlist_handler( TMask_field& f, KEY key ) { - if (key == K_TAB && f.focusdirty()) - { - TLocalisamfile & list = ((TEdit_field &) f).browse()->cursor()->file(); - const TDate datadoc(f.mask().get(F_DATADOC)); - const TDate datascad(list.get_date("VALFIN")); - - if (datascad.ok() && datadoc > datascad) - { - const TString16 codsucc(list.get("CODLISSUCC")); - - if (codsucc.empty()) - return error_box("Listino scaduto il %s", datascad.string()); - else - { - f.set(codsucc); - f.set_focusdirty(); - ((TEdit_field &)f).check(); - } - } - } - return TRUE; + if (key == K_TAB && f.focusdirty()) + { + TLocalisamfile & list = ((TEdit_field &) f).browse()->cursor()->file(); + const TDate datadoc(f.mask().get(F_DATADOC)); + const TDate datascad(list.get_date("VALFIN")); + + if (datascad.ok() && datadoc > datascad) + { + const TString16 codsucc(list.get("CODLISSUCC")); + + if (codsucc.empty()) + return error_box("Listino scaduto il %s", datascad.string()); + else + { + f.set(codsucc); + f.set_focusdirty(); + ((TEdit_field &)f).check(); + } + } + } + return TRUE; } bool TDocumento_mask::codcont_handler( TMask_field& f, KEY key ) { - if (key == K_TAB && f.focusdirty()) - { - TLocalisamfile & cont = ((TEdit_field &) f).browse()->cursor()->file(); - const TDate datadoc(f.mask().get(F_DATADOC)); - const TDate datascad(cont.get_date("VALFIN")); - - if (datascad.ok() && datadoc > datascad) - return error_box("Contratto scaduto il %s", datascad.string()); - } - return TRUE; + if (key == K_TAB && f.focusdirty()) + { + TLocalisamfile & cont = ((TEdit_field &) f).browse()->cursor()->file(); + const TDate datadoc(f.mask().get(F_DATADOC)); + const TDate datascad(cont.get_date("VALFIN")); + + if (datascad.ok() && datadoc > datascad) + return error_box("Contratto scaduto il %s", datascad.string()); + } + return TRUE; } bool TDocumento_mask::codcamp_handler( TMask_field& f, KEY key ) { - if (key == K_TAB && f.focusdirty()) - { - TLocalisamfile & camp = ((TEdit_field &) f).browse()->cursor()->file(); - const TDate datadoc(f.mask().get(F_DATADOC)); - const TDate datascad(camp.get_date("VALFIN")); - - if (datascad.ok() && datadoc > datascad) - return error_box("Offerta scaduta il %s", datascad.string()); - } - return TRUE; + if (key == K_TAB && f.focusdirty()) + { + TLocalisamfile & camp = ((TEdit_field &) f).browse()->cursor()->file(); + const TDate datadoc(f.mask().get(F_DATADOC)); + const TDate datascad(camp.get_date("VALFIN")); + + if (datascad.ok() && datadoc > datascad) + return error_box("Offerta scaduta il %s", datascad.string()); + } + return TRUE; } bool TDocumento_mask::datacambio_handler( TMask_field& f, KEY key ) { - TMask& m = f.mask(); - if (key == K_TAB && m.field(F_CAMBIO).empty()) - { - const TString& codval = m.get(F_CODVAL1); - if (is_true_value(codval)) - { - const TRectype& rec = cache().get("%VAL", codval); - m.set(F_CAMBIO, rec.get("S4")); - } - } - return TRUE; + TMask& m = f.mask(); + if (key == K_TAB && m.field(F_CAMBIO).empty()) + { + const TString& codval = m.get(F_CODVAL1); + if (is_true_value(codval)) + { + const TRectype& rec = cache().get("%VAL", codval); + m.set(F_CAMBIO, rec.get("S4")); + } + } + return TRUE; } bool TDocumento_mask::codval_handler( TMask_field& f, KEY key ) { - if (key == K_TAB && f.focusdirty() && !f.empty()) - { - TMask& m = f.mask(); - - // Cerco un cambio per la data specificata, se non lo trovo lo invento - TDate datacam = m.get_date(F_DATACAMBIO); - if (!datacam.ok()) - { - datacam = m.get_date(F_DATADOC); - m.set(F_DATACAMBIO, datacam); - m.set(F_DATACAMBIO1, datacam); - } - TExchange exc(f.get()); - exchange_type et; - real cambio = exc.get_change(et); // Determino il cambio standard ed il "Contro-Euro" - TString16 key; - key.format("%-3s%s", (const char*)f.get(), (const char*)datacam.string(ANSI)); - const real giornaliero(cache().get("CAM", key, "S4")); - if (!giornaliero.is_zero()) - cambio = giornaliero; // Ho trovato un cambio per il giorno! - m.set(F_CAMBIO, cambio); - m.set(F_CONTROEURO, et == _exchange_contro ? "X" : ""); - - m.sfield(F_SHEET).force_update(); // Aggiorna punti decimali degli importi - } - return TRUE; + if (key == K_TAB && f.focusdirty() && !f.empty()) + { + TMask& m = f.mask(); + + // Cerco un cambio per la data specificata, se non lo trovo lo invento + TDate datacam = m.get_date(F_DATACAMBIO); + if (!datacam.ok()) + { + datacam = m.get_date(F_DATADOC); + m.set(F_DATACAMBIO, datacam); + m.set(F_DATACAMBIO1, datacam); + } + TExchange exc(f.get()); + exchange_type et; + real cambio = exc.get_change(et); // Determino il cambio standard ed il "Contro-Euro" + TString16 key; + key.format("%-3s%s", (const char*)f.get(), (const char*)datacam.string(ANSI)); + const real giornaliero(cache().get("CAM", key, "S4")); + if (!giornaliero.is_zero()) + cambio = giornaliero; // Ho trovato un cambio per il giorno! + m.set(F_CAMBIO, cambio); + m.set(F_CONTROEURO, et == _exchange_contro ? "X" : ""); + + m.sfield(F_SHEET).force_update(); // Aggiorna punti decimali degli importi + } + return TRUE; } diff --git a/ve/velib06a.cpp b/ve/velib06a.cpp index f066a7aa9..d527e2ed4 100755 --- a/ve/velib06a.cpp +++ b/ve/velib06a.cpp @@ -22,7 +22,7 @@ #endif #ifndef __SCONTI_H -#include "sconti.h" +#include "sconti.h" #endif #include "../cg/cg2103.h" @@ -32,80 +32,81 @@ #endif #ifndef __DBLIB_H -#include "../db/dblib.h" +#include "../db/dblib.h" #endif -#include "../mg/anamag.h" -#include "../mg/codcorr.h" -#include "../mg/deslin.h" -#include "../mg/umart.h" +#include "../mg/anamag.h" +#include "../mg/codcorr.h" +#include "../mg/deslin.h" +#include "../mg/umart.h" +#include "../ca/calib01.h" #include "velib.h" #define MAX_VIS_RATE 5 bool numdocrif_hndl( TMask_field& field, KEY key ) -{ - if (key == K_ENTER) - { - TDocumento_mask& m = (TDocumento_mask&)field.mask(); - TString16 campo = DOC_NUMDOCRIF; - if (field.field() != NULL) - campo = field.field()->name(); - - TRectype filtrec(LF_DOC); - filtrec.put(DOC_TIPOCF, m.get(F_TIPOCF)); - filtrec.put(DOC_CODCF, m.get(F_CODCF)); - filtrec.put(DOC_PROVV, m.get(F_PROVV)); - filtrec.put(DOC_ANNO, m.get(F_ANNO)); - - TRelation rel(LF_DOC); - TString sortkey = "TIPOCF|CODCF|PROVV|ANNO|CODNUM|"; sortkey << campo; - TSorted_cursor cur(&rel, sortkey, "", 2, &filtrec, &filtrec); - TString80 f; f.format("CODNUM==\"%s\"", (const char*)m.get(F_CODNUM)); - - cur.setfilter(f); - - filtrec.put(DOC_CODNUM, m.get(F_CODNUM)); - filtrec.put(campo, field.get()); - cur.curr() = filtrec; - cur.read(_isequal); - - if (cur.file().status() == NOERR) - { - const long numdoc = m.get_long(F_NDOC); - if (numdoc != cur.curr().get_long(DOC_NDOC)) - return yesno_box("Il numero di riferimento %s è già stato utilizzato\nsi desidera registrare ugualmente?", - (const char *)field.get()); - } - } - return TRUE; +{ + if (key == K_ENTER) + { + TDocumento_mask& m = (TDocumento_mask&)field.mask(); + TString16 campo = DOC_NUMDOCRIF; + if (field.field() != NULL) + campo = field.field()->name(); + + TRectype filtrec(LF_DOC); + filtrec.put(DOC_TIPOCF, m.get(F_TIPOCF)); + filtrec.put(DOC_CODCF, m.get(F_CODCF)); + filtrec.put(DOC_PROVV, m.get(F_PROVV)); + filtrec.put(DOC_ANNO, m.get(F_ANNO)); + + TRelation rel(LF_DOC); + TString sortkey = "TIPOCF|CODCF|PROVV|ANNO|CODNUM|"; sortkey << campo; + TSorted_cursor cur(&rel, sortkey, "", 2, &filtrec, &filtrec); + TString80 f; f.format("CODNUM==\"%s\"", (const char*)m.get(F_CODNUM)); + + cur.setfilter(f); + + filtrec.put(DOC_CODNUM, m.get(F_CODNUM)); + filtrec.put(campo, field.get()); + cur.curr() = filtrec; + cur.read(_isequal); + + if (cur.file().status() == NOERR) + { + const long numdoc = m.get_long(F_NDOC); + if (numdoc != cur.curr().get_long(DOC_NDOC)) + return yesno_box("Il numero di riferimento %s è già stato utilizzato\nsi desidera registrare ugualmente?", + (const char *)field.get()); + } + } + return true; } bool totdoc_hndl( TMask_field& field, KEY key ) -{ - if (key == K_ENTER) - { - TDocumento_mask & m = (TDocumento_mask &) field.mask(); - const real totdoc = m.doc().totale_doc(); - const real totdoc_check(field.get()); - - - if (m.doc().physical_rows() > 0 && totdoc != totdoc_check) - { - const TString16 tchk(totdoc_check.string()); - - return yesno_box("Il totale documento digitato (%s) non corrisponde\nal totale documento (%s) calcolato,\n devo registrare ugualmente", - (const char *) tchk, totdoc.string()); - } - } - return TRUE; +{ + if (key == K_ENTER) + { + TDocumento_mask & m = (TDocumento_mask &) field.mask(); + const real totdoc = m.doc().totale_doc(); + const real totdoc_check(field.get()); + + + if (m.doc().physical_rows() > 0 && totdoc != totdoc_check) + { + const TString16 tchk(totdoc_check.string()); + + return yesno_box("Il totale documento digitato (%s) non corrisponde\nal totale documento (%s) calcolato,\n devo registrare ugualmente", + (const char *) tchk, totdoc.string()); + } + } + return true; } bool smart_hndl( TMask_field& field, KEY key ) -{ - if (key == K_SPACE) +{ + if (key == K_SPACE) { TDocumento_mask & m = (TDocumento_mask &) field.mask(); TSmart_card * s = m.smartcard(); @@ -146,16 +147,16 @@ bool smart_hndl( TMask_field& field, KEY key ) if (m.insert_mode() && m.doc().codice_numerazione().save_and_new()) s->disconnect_card(); } - } + } - return TRUE; + return true; } bool ora_hndl( TMask_field& field, KEY key ) { - if (field.to_check(key,true)) - { + if (field.to_check(key,true)) + { TString16 ora; if (field.automagic() && field.get().empty()) @@ -164,17 +165,17 @@ bool ora_hndl( TMask_field& field, KEY key ) struct tm* t = localtime(<); ora.format("%02d%02d", t->tm_hour, t->tm_min); - field.set((ora)); + field.set((ora)); } else - { + { ora = field.get(); if (ora.not_empty()) { if (!isdigit(ora[0]) || - !isdigit(ora[1]) || - !isdigit(ora[2]) || + !isdigit(ora[1]) || + !isdigit(ora[2]) || !isdigit(ora[3]) || atoi(ora.left(2)) > 23 || atoi(ora.mid(2)) > 59) @@ -184,119 +185,119 @@ bool ora_hndl( TMask_field& field, KEY key ) if (field.required()) return error_box("Ora obbligatoria"); } - } + } - return true; + return true; } bool dummy_hndl(TMask_field& field, KEY key) { - warning_box( "Al campo %d è arrivato un KEY %d", field.dlg( ), key ); - return TRUE; + warning_box( "Al campo %d è arrivato un KEY %d", field.dlg( ), key ); + return true; } // Handler per il calcolo delle date di pagamento bool condpag_hndl( TMask_field& field, KEY key ) -{ - TDocumento_mask& m = (TDocumento_mask &) field.mask( ); - - if ( field.to_check(key) || (key == K_TAB && !m.is_running())) - { - const TString& condpag = m.get(F_CODPAG); - if (condpag.not_empty()) - { - TDocumento& doc = m.doc(); - // Aggiorna dati necessari per determinare il pagamento - doc.put(DOC_CODPAG, condpag); - doc.put(DOC_DATADOC, m.get(F_DATADOC)); - doc.put(DOC_DATAINSC, m.get(F_DATAINSC)); - doc.put(DOC_TIPOCF, m.get(F_TIPOCF)); - doc.put(DOC_CODCF, m.get(F_CODCF)); - TPagamento& pag = doc.pagamento(); - pag.set_total(CENTO, real(10), real(10)); - pag.set_rate_auto(); - - const int numrate = pag.n_rate( ); - for(int i = 0; i < MAX_VIS_RATE; i++) - { - if (i < numrate) - { - m.show(F_DATASCAD1+i); - m.set(F_DATASCAD1+i, pag.data_rata(i)); - } - else - m.hide(F_DATASCAD1+i); - } - } - } - return TRUE; +{ + TDocumento_mask& m = (TDocumento_mask &) field.mask( ); + + if ( field.to_check(key) || (key == K_TAB && !m.is_running())) + { + const TString& condpag = m.get(F_CODPAG); + if (condpag.not_empty()) + { + TDocumento& doc = m.doc(); + // Aggiorna dati necessari per determinare il pagamento + doc.put(DOC_CODPAG, condpag); + doc.put(DOC_DATADOC, m.get(F_DATADOC)); + doc.put(DOC_DATAINSC, m.get(F_DATAINSC)); + doc.put(DOC_TIPOCF, m.get(F_TIPOCF)); + doc.put(DOC_CODCF, m.get(F_CODCF)); + TPagamento& pag = doc.pagamento(); + pag.set_total(CENTO, real(10), real(10)); + pag.set_rate_auto(); + + const int numrate = pag.n_rate( ); + for(int i = 0; i < MAX_VIS_RATE; i++) + { + if (i < numrate) + { + m.show(F_DATASCAD1+i); + m.set(F_DATASCAD1+i, pag.data_rata(i)); + } + else + m.hide(F_DATASCAD1+i); + } + } + } + return true; } bool note_hndl( TMask_field& f, KEY key ) -{ - TDocumento_mask& m = (TDocumento_mask &) f.mask(); +{ + TDocumento_mask& m = (TDocumento_mask &) f.mask(); - if (key == K_TAB && (f.focusdirty() || !m.is_running())) - { - const TRectype& note = cache().get("%NOT", f.get()); - if (!note.empty()) - { - if (m.is_running() || m.field(F_NOTECLI).empty()) // Preserva descrizione presente in caricamento - { - // gestione del campo con descrizione estesa - TString stringone; - for (int i = 0; i < 6; i++) - { - const char fieldname[3] = { 'S', i+'0', '\0' }; - stringone << note.get(fieldname); - } - stringone.replace(char(0xB6), '\n'); - m.set(F_NOTECLI, stringone); - } + if (key == K_TAB && (f.focusdirty() || !m.is_running())) + { + const TRectype& note = cache().get("%NOT", f.get()); + if (!note.empty()) + { + if (m.is_running() || m.field(F_NOTECLI).empty()) // Preserva descrizione presente in caricamento + { + // gestione del campo con descrizione estesa + TString stringone; + for (int i = 0; i < 6; i++) + { + const char fieldname[3] = { 'S', i+'0', '\0' }; + stringone << note.get(fieldname); + } + stringone.replace(char(0xB6), '\n'); + m.set(F_NOTECLI, stringone); + } - if (m.doc().modificabile() && m.field(DLG_SAVEREC).enabled()) - { - const bool reg_disabled = note.get_bool("B0"); - if (reg_disabled) - { - message_box(FR("Registrazione disabilitata : %s"), (const char*)note.get("S0")); - m.disable(DLG_SAVEREC); - } - } - } + if (m.doc().modificabile() && m.field(DLG_SAVEREC).enabled()) + { + const bool reg_disabled = note.get_bool("B0"); + if (reg_disabled) + { + message_box(FR("Registrazione disabilitata : %s"), (const char*)note.get("S0")); + m.disable(DLG_SAVEREC); + } + } + } - } - - return true; + } + + return true; } // Handler per il calcolo delle date di pagamento bool data_hndl( TMask_field& field, KEY key ) -{ - TDocumento_mask& m = (TDocumento_mask &) field.mask( ); - if (field.to_check(key)) - { - if (m.id2pos(F_DATAINSC) >= 0) - { - TEdit_field & e = m.efield(F_DATAINSC); - e.set_dirty(); - e.on_hit(); - } +{ + TDocumento_mask& m = (TDocumento_mask &) field.mask(); + if (field.to_check(key)) + { + if (m.id2pos(F_DATAINSC) >= 0) + { + TEdit_field & e = m.efield(F_DATAINSC); + e.set_dirty(); + e.on_hit(); + } - if (m.id2pos(F_DATACAMBIO1) >= 0 && !m.get(F_CODVAL).empty()) - m.set(F_DATACAMBIO1, field.get(), TRUE); - } - if (key == K_ENTER || field.to_check(key)) - { - const TDate datadoc(m.get(F_DATADOC)); - if (!datadoc.ok()) - return field.error_box("La data documento deve essere comunque indicata."); - - const TCodice_numerazione codnum(m.get(F_CODNUM)); - if (codnum.test_eser()) - { + if (m.id2pos(F_DATACAMBIO1) >= 0 && !m.get(F_CODVAL).empty()) + m.set(F_DATACAMBIO1, field.get(), true); + } + if (key == K_ENTER || field.to_check(key)) + { + const TDate datadoc(m.get(F_DATADOC)); + if (!datadoc.ok()) + return field.error_box("La data documento deve essere comunque indicata."); + + const TCodice_numerazione codnum(m.get(F_CODNUM)); + if (codnum.test_eser()) + { - TEsercizi_contabili esc; + TEsercizi_contabili esc; if (esc.date2esc(datadoc) <= 0) return field.error_box("La data documento non appartiene ad un esercizio valido."); if (main_app().has_module(CGAUT)) @@ -305,124 +306,122 @@ bool data_hndl( TMask_field& field, KEY key ) TString16 codcaus = td.causale(); if (codcaus.empty()) { - const TRectype& clifo = m.doc().clifor().vendite(); - codcaus = clifo.get("CODCAUS"); + const TRectype& clifo = m.doc().clifor().vendite(); + codcaus = clifo.get("CODCAUS"); } if (codcaus.not_empty()) { - const int year = datadoc.year(); - TCausale caus; - if (!caus.read(codcaus, year)) - return error_box(TR("Causale assente!")); // L'errore viene segnalato nella read + const int year = datadoc.year(); + TCausale caus; + if (!caus.read(codcaus, year)) + return error_box(TR("Causale assente!")); // L'errore viene segnalato nella read } } - } + } - - - if (codnum.dont_test_datadoc()) - return TRUE; // Non devo fare altri test + if (codnum.dont_test_datadoc()) + return true; // Non devo fare altri test - TLocalisamfile doc(LF_DOC); - - doc.curr() = m.doc().head(); - bool same_key = FALSE; - - doc.read(_isgteq); - if (doc.eof() || doc.prev() == NOERR) - { - TDate dataprev = doc.get_date(DOC_DATADOC); + TLocalisamfile doc(LF_DOC); - same_key = doc.curr().same_key(m.doc().head(), 1, 1); - if (same_key && datadoc < dataprev) - return field.error_box("Data documento inferiore alla data del documento precedente"); - } - - doc.curr() = m.doc().head(); - doc.read(_isgreat); - same_key = doc.curr().same_key(m.doc().head(), 1, 1); - if (doc.good() && same_key && datadoc > doc.get_date(DOC_DATADOC)) - return field.error_box("Data documento superiore alla data del documento successivo"); - } - return TRUE; + doc.curr() = m.doc().head(); + bool same_key = false; + + doc.read(_isgteq); + if (doc.eof() || doc.prev() == NOERR) + { + TDate dataprev = doc.get_date(DOC_DATADOC); + + same_key = doc.curr().same_key(m.doc().head(), 1, 1); + if (same_key && datadoc < dataprev) + return field.error_box("Data documento inferiore alla data del documento precedente"); + } + + doc.curr() = m.doc().head(); + doc.read(_isgreat); + same_key = doc.curr().same_key(m.doc().head(), 1, 1); + if (doc.good() && same_key && datadoc > doc.get_date(DOC_DATADOC)) + return field.error_box("Data documento superiore alla data del documento successivo"); + } + return true; } - + // handler delle righe void row_set_handler( TMask& m, const int field, const int index ) { - switch ( index ) - { - case 1: - m.set_handler( field, pricerange_handler); - break; - case 2: - m.set_handler( field, dummy_hndl ); - break; - default: - yesnofatal_box( FALSE, "Funzione di handler sulla riga non definita( %d ).", index ); - } + switch ( index ) + { + case 1: + m.set_handler( field, pricerange_handler); + break; + case 2: + m.set_handler( field, dummy_hndl ); + break; + default: + yesnofatal_box( false, "Funzione di handler sulla riga non definita( %d ).", index ); + } } - -HIDDEN TString16 curr_um; + +HIDDEN TString16 curr_um; HIDDEN real curr_fc(1.0); bool iva_handler( TMask_field& f, KEY key ) -{ - TDocumento_mask & mask = (TDocumento_mask &) f.mask().get_sheet()->mask(); +{ + TDocumento_mask & mask = (TDocumento_mask &) f.mask().get_sheet()->mask(); - if (key == 0 || (key == K_ENTER && f.get().empty())) - { - const TString16 codiva = mask.condv().clifo().vendite().get(CFV_ASSFIS); - if (codiva.not_empty()) - f.set(codiva); - f.check(); - } + if (key == 0 || (key == K_ENTER && f.get().empty())) + { + const TString16 codiva = mask.condv().clifo().vendite().get(CFV_ASSFIS); + if (codiva.not_empty()) + f.set(codiva); + f.check(); + } - if (key == K_ENTER && /*f.focusdirty() &&*/ f.get().empty()) - { - TMask & row_mask = f.mask(); - const int r = f.mask().get_sheet()->selected() + 1; - TRiga_documento& riga = mask.doc()[r]; - - const int pos_ai = row_mask.id2pos(FR_ADDIVA); - bool addiva = FALSE; - - if (pos_ai >= 0) - addiva = row_mask.fld(pos_ai).get() == "X"; // Controlla le righe Omaggio solo se e' settato l'addebito IVA - - const bool check = riga.is_merce() || riga.is_spese() || riga.is_prestazione() || - (riga.is_omaggio() && addiva); - - if (check) - { - const int pos_p = row_mask.id2pos(FR_PREZZO); - const int pos_q = row_mask.id2pos(FR_QTA); - const bool pe = pos_p >= 0 && row_mask.fld(pos_p).enabled(); - const bool qe = pos_q >= 0 && row_mask.fld(pos_q).enabled(); - const bool pf = pe && row_mask.fld(pos_p).get().not_empty(); - const bool qf = qe && row_mask.fld(pos_q).get().not_empty(); - const bool required = pf && !(qe && !qf); - if (required) - return f.error_box("Il codice IVA e' obbligatorio."); - } - } - return TRUE; -} + if (key == K_ENTER && /*f.focusdirty() &&*/ f.get().empty()) + { + TMask & row_mask = f.mask(); + const int r = f.mask().get_sheet()->selected() + 1; + TRiga_documento& riga = mask.doc()[r]; + + const int pos_ai = row_mask.id2pos(FR_ADDIVA); + bool addiva = false; + + if (pos_ai >= 0) + addiva = row_mask.fld(pos_ai).get() == "X"; // Controlla le righe Omaggio solo se e' settato l'addebito IVA + + const bool check = riga.is_merce() || riga.is_spese() || riga.is_prestazione() || + (riga.is_omaggio() && addiva); + + if (check) + { + const int pos_p = row_mask.id2pos(FR_PREZZO); + const int pos_q = row_mask.id2pos(FR_QTA); + const bool pe = pos_p >= 0 && row_mask.fld(pos_p).enabled(); + const bool qe = pos_q >= 0 && row_mask.fld(pos_q).enabled(); + const bool pf = pe && row_mask.fld(pos_p).get().not_empty(); + const bool qf = qe && row_mask.fld(pos_q).get().not_empty(); + const bool required = pf && !(qe && !qf); + if (required) + return f.error_box("Il codice IVA e' obbligatorio."); + } + } + return true; +} bool dcons_handler( TMask_field& f, KEY key ) -{ - if (key == K_F8) - { - TMask& row_mask = f.mask(); - TSheet_field& s = *row_mask.get_sheet(); +{ + if (key == K_F8) + { + TMask& row_mask = f.mask(); + TSheet_field& s = *row_mask.get_sheet(); TDocumento_mask & mask = (TDocumento_mask &) s.mask(); - int r = f.mask().get_sheet()->selected() + 1; + int r = f.mask().get_sheet()->selected() + 1; if (r > 1) { TDocumento & doc = mask.doc(); - const TRiga_documento& prev = doc[r - 1]; + const TRiga_documento& prev = doc[r - 1]; TDate first_date = prev.get_date(RDOC_DATACONS); TDate second_date = row_mask.get_date(FR_DATACONS); @@ -502,14 +501,14 @@ bool dcons_handler( TMask_field& f, KEY key ) } } } - return TRUE; + return true; } bool tipo_riga_handler(TMask_field& f, KEY key) { - if (key == K_SPACE && f.focusdirty()) - { - TMask & row_mask = f.mask(); + if (key == K_SPACE && f.focusdirty()) + { + TMask & row_mask = f.mask(); TVariable_sheet_field * sf = (TVariable_sheet_field *) row_mask.get_sheet(); if (sf != NULL) @@ -529,7 +528,7 @@ bool tipo_riga_handler(TMask_field& f, KEY key) { row.add(tipo_riga, col); docmask.doc()[curr_row + 1].set_tipo(tipo_riga); - TMask * rm = docmask.riga_mask(curr_row); + TMask * rm = docmask.riga_mask(curr_row); sf->post_insert(curr_row); sf->check_row(curr_row); sf->force_update(curr_row); @@ -546,946 +545,941 @@ bool tipo_riga_handler(TMask_field& f, KEY key) } return true; } - + bool codmag_handler( TMask_field& f, KEY key ) { -// if (f.to_check(key, TRUE)) - if (key == K_TAB && f.focusdirty()) - { - TMask& row_mask = f.mask(); - TSheet_field& sf = *row_mask.get_sheet(); - TDocumento_mask& docmask = (TDocumento_mask&)sf.mask(); - - if (sf.column_enabled(sf.cid2index(FR_CODDEP))) - { - const int pos = row_mask.id2pos(FR_CODDEP); - const TString & val = f.get(); - - if (pos >= 0 && val.not_empty()) - { - const TRectype& mag = cache().get("MAG", val); - const bool active = mag.get_bool("B0"); - row_mask.fld(pos).enable(active); - if (!active) - row_mask.fld(pos).reset(); - } - } +// if (f.to_check(key, true)) + if (key == K_TAB && f.focusdirty()) + { + TMask& row_mask = f.mask(); + TSheet_field& sf = *row_mask.get_sheet(); + TDocumento_mask& docmask = (TDocumento_mask&)sf.mask(); - if (f.get().empty() && docmask.doc().tipo().mov_mag()) - return f.error_box("Indicare il magazzino."); - - docmask.update_giacenza(); - } - return TRUE; -} + if (sf.column_enabled(sf.cid2index(FR_CODDEP))) + { + const int pos = row_mask.id2pos(FR_CODDEP); + const TString & val = f.get(); + + if (pos >= 0 && val.not_empty()) + { + const TRectype& mag = cache().get("MAG", val); + const bool active = mag.get_bool("B0"); + row_mask.fld(pos).enable(active); + if (!active) + row_mask.fld(pos).reset(); + } + } + + if (f.get().empty() && docmask.doc().tipo().mov_mag()) + return f.error_box("Indicare il magazzino."); + + docmask.update_giacenza(); + } + return true; +} bool codmag_coll_handler( TMask_field& f, KEY key ) { - if (key == K_TAB && f.focusdirty()) - { - TMask& row_mask = f.mask(); - TSheet_field& sf = *row_mask.get_sheet(); - - if (sf.column_enabled( ((TSheet_field &)f).cid2index(FR_CODDEPC))) - { - const int pos = row_mask.id2pos(FR_CODDEPC); - const TString & val = f.get(); - - if (pos >= 0 && val.not_empty()) - { - const TRectype& mag = cache().get("MAG", val); - const bool active = mag.get_bool("B0"); - row_mask.fld(pos).enable(active); - if (!active) - row_mask.fld(pos).reset(); - } - } - } - return TRUE; -} + if (key == K_TAB && f.focusdirty()) + { + TMask& row_mask = f.mask(); + TSheet_field& sf = *row_mask.get_sheet(); + + if (sf.column_enabled( ((TSheet_field &)f).cid2index(FR_CODDEPC))) + { + const int pos = row_mask.id2pos(FR_CODDEPC); + const TString & val = f.get(); + + if (pos >= 0 && val.not_empty()) + { + const TRectype& mag = cache().get("MAG", val); + const bool active = mag.get_bool("B0"); + row_mask.fld(pos).enable(active); + if (!active) + row_mask.fld(pos).reset(); + } + } + } + return true; +} void upd_colli_peso_tara(TMask& m, const TRectype& a) { - // const real qta = m.get_real(FR_QTA) * curr_fc; // curr_fc puo' non essere inizializzata e vale -1 - // Usando il metodo apposito di TArticolo non si sbaglia micca mai. - // Sarebbe bene sparare (come dice Luca) a curr_fc ovunque copaia - TArticolo articolo(a); - const real qta = articolo.convert_to_um(m.get_real(FR_QTA), NULL, m.get(FR_UMQTA)); + // const real qta = m.get_real(FR_QTA) * curr_fc; // curr_fc puo' non essere inizializzata e vale -1 + // Usando il metodo apposito di TArticolo non si sbaglia micca mai. + // Sarebbe bene sparare (come dice Luca) a curr_fc ovunque copaia + TArticolo articolo(a); + const real qta = articolo.convert_to_um(m.get_real(FR_QTA), NULL, m.get(FR_UMQTA)); - const real ppcollo = a.get_real(ANAMAG_PPCOLLO); - - real ncolli = ppcollo.is_zero() ? UNO : qta / ppcollo; - ncolli.ceil(0); - - int pos = m.id2pos(FR_NCOLLI); - if (pos >= 0) - if (ppcollo != ZERO) - m.fld(pos).set(ncolli.string()); - else - m.fld(pos).reset(); - - pos = m.id2pos(FR_TARA); - if (pos >= 0) - { - const real tara = ncolli * a.get_real(ANAMAG_TARA); - m.fld(pos).set(tara.string()); - } - pos = m.id2pos(FR_PNETTO); - if (pos >= 0) - { - const real peso = qta * a.get_real(ANAMAG_PESO); - m.fld(pos).set(peso.string()); - } + const real ppcollo = a.get_real(ANAMAG_PPCOLLO); + + real ncolli = ppcollo.is_zero() ? UNO : qta / ppcollo; + ncolli.ceil(0); + + int pos = m.id2pos(FR_NCOLLI); + if (pos >= 0) + if (ppcollo != ZERO) + m.fld(pos).set(ncolli.string()); + else + m.fld(pos).reset(); + + pos = m.id2pos(FR_TARA); + if (pos >= 0) + { + const real tara = ncolli * a.get_real(ANAMAG_TARA); + m.fld(pos).set(tara.string()); + } + pos = m.id2pos(FR_PNETTO); + if (pos >= 0) + { + const real peso = qta * a.get_real(ANAMAG_PESO); + m.fld(pos).set(peso.string()); + } } bool pricerange_handler(TMask_field& f, KEY key ) -{ - if (key == K_TAB && f.focusdirty()) - { - TMask& row_mask = f.mask(); - TSheet_field& sh = *row_mask.get_sheet(); - TDocumento_mask& mask = (TDocumento_mask &)sh.mask(); - - if (mask.doc().tipo().controllo_prezzi()) - { - const int current_doc_row = sh.selected() + 1; - TRiga_documento & riga = mask.doc()[current_doc_row]; - const real old_price = riga.get_real(RDOC_PREZZO); - const real new_price = row_mask.get_real(FR_PREZZO); - - if (!old_price.is_zero()) - { - const TTipo_riga_documento& tipo_riga = riga.tipo(); - const int incr = tipo_riga.incr_perc_prezzo(); - const int decr = tipo_riga.decr_perc_prezzo(); - - if (incr == 0 && decr == 0) - { - if (old_price != new_price && !yesno_box("Il prezzo è variato, confermare")) - return FALSE; - } - else - { - real inf = old_price * (UNO - (decr/CENTO)); - if (inf > new_price && !yesno_box("Il prezzo è diminuito di più del %d%%, confermare", decr)) - return FALSE; - real sup = old_price * (UNO + (incr/CENTO)); - if (sup < new_price && !yesno_box("Il prezzo è aumentato di più del %d%%, confermare", incr)) - return FALSE; - } - } - riga.put(RDOC_PREZZO, new_price); - } - } - - return TRUE; -} +{ + if (key == K_TAB && f.focusdirty()) + { + TMask& row_mask = f.mask(); + TSheet_field& sh = *row_mask.get_sheet(); + TDocumento_mask& mask = (TDocumento_mask &)sh.mask(); + + if (mask.doc().tipo().controllo_prezzi()) + { + const int current_doc_row = sh.selected() + 1; + TRiga_documento & riga = mask.doc()[current_doc_row]; + const real old_price = riga.get_real(RDOC_PREZZO); + const real new_price = row_mask.get_real(FR_PREZZO); + + if (!old_price.is_zero()) + { + const TTipo_riga_documento& tipo_riga = riga.tipo(); + const int incr = tipo_riga.incr_perc_prezzo(); + const int decr = tipo_riga.decr_perc_prezzo(); + + if (incr == 0 && decr == 0) + { + if (old_price != new_price && !yesno_box("Il prezzo è variato, confermare")) + return false; + } + else + { + real inf = old_price * (UNO - (decr/CENTO)); + if (inf > new_price && !yesno_box("Il prezzo è diminuito di più del %d%%, confermare", decr)) + return false; + real sup = old_price * (UNO + (incr/CENTO)); + if (sup < new_price && !yesno_box("Il prezzo è aumentato di più del %d%%, confermare", incr)) + return false; + } + } + riga.put(RDOC_PREZZO, new_price); + } + } + + return true; +} bool codart_handler(TMask_field& f, KEY key ) { - TMask& row_mask = f.mask(); - TSheet_field& sh = *row_mask.get_sheet(); - TDocumento_mask& mask = (TDocumento_mask &)sh.mask(); - - const int current_doc_row = sh.selected() + 1; - - if (f.to_check(key, TRUE)) - { - if (!f.empty()) - row_mask.enable(FR_LIV1); - else - { - row_mask.reset(FR_LIV1); - row_mask.disable(FR_LIV1); - } - row_mask.field(FR_LIV1).on_hit(); - } - - if (key == K_TAB && (f.focusdirty() || row_mask.get(FR_CHECKED).empty())) - { - TCond_vendita & condv = mask.condv(); - - condv.set_testa(&mask); - condv.set_riga(&row_mask); + TMask& row_mask = f.mask(); + TSheet_field& sh = *row_mask.get_sheet(); + TDocumento_mask& mask = (TDocumento_mask &)sh.mask(); + const int current_doc_row = sh.selected() + 1; - TString80 codart = f.get(); - TRectype anamag = cache().get(LF_ANAMAG, codart); // anamag puo' cambiare - bool found = !anamag.empty(); - - if (found) - row_mask.set(FR_CODARTMAG, codart, TRUE); - else - { - TLocalisamfile codalt(LF_CODCORR); - - codalt.setkey(2); - codalt.put(CODCORR_CODARTALT, codart); - if (codalt.read() == NOERR) - { - codart = codalt.get(CODCORR_CODART); - anamag = cache().get(LF_ANAMAG, codart); - found = !anamag.empty(); - if (found) - row_mask.set(FR_CODARTMAG, codart, TRUE); - } - } - row_mask.set(FR_CHECKED, "X"); - if (!found) - row_mask.set(FR_CODARTMAG, "", TRUE); - else - { - const TString8 lingua = mask.get(F_CODLIN); - const TCodice_articolo codart(row_mask.get(FR_CODARTMAG)); - TString desc(anamag.get("DESCR")); - - if (mask.doc()[current_doc_row].is_omaggio()) - { - static TString* dicitura_omaggio = NULL; - if (dicitura_omaggio == NULL) - { - TConfig c(CONFIG_STUDIO, "ve"); - dicitura_omaggio = new TString(c.get("DESOMAGGI")); - if (dicitura_omaggio->blank()) - *dicitura_omaggio = TR("(OMAGGIO)"); - } - desc << ' ' << *dicitura_omaggio; - } - if (lingua.not_empty()) - { - TLocalisamfile deslin(LF_DESLIN); - - deslin.setkey(2); - deslin.put(DESLIN_CODART, codart); - deslin.put(DESLIN_CODLIN, lingua); - if (deslin.read() == NOERR) - { - static int __lingua_only = 3; - - if (__lingua_only > 2) - { - TConfig c(CONFIG_DITTA, "ve"); - __lingua_only = c.get_bool("LINGUA_ONLY"); - } - if (__lingua_only) - desc = deslin.get(DESLIN_DESCR); - else - desc << '\n' << deslin.get(DESLIN_DESCR); - } - } + if (f.to_check(key, true)) + { + if (!f.empty()) + row_mask.enable(FR_LIV1); + else + { + row_mask.reset(FR_LIV1); + row_mask.disable(FR_LIV1); + } + row_mask.field(FR_LIV1).on_hit(); + } + + if (key == K_TAB && (f.focusdirty() || row_mask.get(FR_CHECKED).empty())) + { + TCond_vendita & condv = mask.condv(); - const TString& descest = anamag.get("DESCRAGG"); - if (descest.not_empty()) - desc << "\n" << descest; - - row_mask.set(FR_DESCR, desc); + condv.set_testa(&mask); + condv.set_riga(&row_mask); - TString80 key; key << codart << "|1"; - const TRectype& umart = cache().get(LF_UMART, key); - if (!umart.empty()) - { - curr_um = umart.get(UMART_UM); - curr_fc = umart.get_real(UMART_FC); - } - else - { - curr_um.cut(0); - curr_fc = 1.0; - } - row_mask.set(FR_UMQTA, curr_um); - upd_colli_peso_tara(row_mask, anamag); - } + TString80 codart = f.get(); + TRectype anamag = cache().get(LF_ANAMAG, codart); // anamag puo' cambiare + bool found = !anamag.empty(); - condv.ricerca(); - mask.doc()[current_doc_row].put(RDOC_PREZZO, row_mask.get(FR_PREZZO)); - - const int pos = row_mask.id2pos(FR_CODIVA); + if (found) + row_mask.set(FR_CODARTMAG, codart, true); + else + { + TLocalisamfile codalt(LF_CODCORR); - if (pos >= 0) - iva_handler(row_mask.fld(pos), 0); + codalt.setkey(2); + codalt.put(CODCORR_CODARTALT, codart); + if (codalt.read() == NOERR) + { + codart = codalt.get(CODCORR_CODART); + anamag = cache().get(LF_ANAMAG, codart); + found = !anamag.empty(); + if (found) + row_mask.set(FR_CODARTMAG, codart, true); + } + } + row_mask.set(FR_CHECKED, "X"); + if (!found) + row_mask.set(FR_CODARTMAG, "", true); + else + { + const TString8 lingua = mask.get(F_CODLIN); + const TCodice_articolo codart(row_mask.get(FR_CODARTMAG)); + TString desc(anamag.get("DESCR")); - if (found) - { - TString16 caus(row_mask.get(FR_CAUS)); - - if (caus.empty()) - caus = mask.get(F_CAUSMAG); - - if (caus.not_empty()) - { - const TCausale_magazzino c(caus); - - if (!c.movimenta_sospesi()) - { - const TRectype & rec = cache().get(LF_ANAMAG, row_mask.get(FR_CODARTMAG)); - - if (rec.get_bool("SOSPESO")) - return error_box(TR("Articolo %s sospeso, quindi non movimentabile"), (const char *)codart); - } - } - } - - } - else - if (key == K_F8 && !sh.sheet_mask().is_running()) - { - static int explode_db = 3; - static bool valcomp = false; - static bool matbase = true; - static TExplosion_grouping raggart = RAGGR_EXP_NONE; - static bool elrorig = false; - static int livello = 1; - static int ordin = 0; - - if (explode_db > 2) - { - TConfig d(CONFIG_DITTA, "ve"); - - explode_db = d.get_bool("EXPLODEDB", "ve"); - valcomp = d.get_bool("VALCOMP", "ve"); - matbase = d.get_bool("TIPOESPL", "ve"); - raggart = (TExplosion_grouping) d.get_int("RAGGART", "ve"); - livello = d.get_int("LIVESPL", "ve"); - elrorig = d.get_bool("ELRORIG", "ve"); - ordin = d.get_int("ORDDB", "ve"); - } - if (explode_db && !sh.sheet_mask().is_running()) - { - TDocumento & doc = mask.doc(); - TRiga_documento & curr_row = doc[current_doc_row]; - - sh.update_row(current_doc_row - 1); - curr_row.autosave(sh); + if (mask.doc()[current_doc_row].is_omaggio()) + { + static TString* dicitura_omaggio = NULL; + if (dicitura_omaggio == NULL) + { + TConfig c(CONFIG_STUDIO, "ve"); + dicitura_omaggio = new TString(c.get("DESOMAGGI")); + if (dicitura_omaggio->blank()) + *dicitura_omaggio = TR("(OMAGGIO)"); + } + desc << ' ' << *dicitura_omaggio; + } + if (lingua.not_empty()) + { + TLocalisamfile deslin(LF_DESLIN); - TDistinta_tree db; - TArray components; - - db.set_root(curr_row); - - const int items = db.explode(components, matbase, raggart, livello, "A", ordin); - if (items > 0) - { - TProgind pi(items, "Esplosione in corso...",FALSE, TRUE); - int row = current_doc_row; - const TString16 tiporiga(curr_row.tipo().codice()); - - TString_array& str_arr = sh.rows_array(); - - for (int i = components.first(); i < items; i = components.succ(i)) - { - pi.addstatus(1L); - TRiga_esplosione & r = (TRiga_esplosione &) components[i]; - TRiga_documento & new_row = doc.insert_row(row + 1, tiporiga); - //sh.insert(row, FALSE); - str_arr.insert(new TToken_string, row); - - TDocumento::copy_data(new_row, curr_row); - new_row.put(RDOC_CODART, r.articolo()); - new_row.put(RDOC_CODARTMAG, r.articolo()); - new_row.put(RDOC_LIVELLO, r.giacenza()); - new_row.zero(RDOC_DESCR); - new_row.zero(RDOC_DESCLUNGA); - new_row.zero(RDOC_DESCEST); - new_row.put(RDOC_CHECKED, ""); - new_row.put(RDOC_UMQTA, r.um()); - new_row.put(RDOC_QTA, r.val() /* * qta_fin */); - new_row.autoload(sh); - sh.check_row(row); - new_row.autosave(sh); // Da sheet a rdoc - if (!valcomp) - { - new_row.zero(RDOC_PREZZO); - // new_row.autoload(sh); // Da rdoc a sheet - sh.row(row).add("0", FR_PREZZO-FIRST_FIELD); - row_mask.reset(FR_PREZZO); - } - row++; - } - if (elrorig) - { - doc.destroy_row(current_doc_row, TRUE); - sh.destroy(current_doc_row - 1, FALSE); - row--; - } - else - if (valcomp) - { - curr_row.zero(RDOC_PREZZO); - curr_row.autoload(sh); - } - sh.force_update(); - sh.select(row-1); - } - } - } - - - return TRUE; -} + deslin.setkey(2); + deslin.put(DESLIN_CODART, codart); + deslin.put(DESLIN_CODLIN, lingua); + if (deslin.read() == NOERR) + { + static int __lingua_only = 3; + + if (__lingua_only > 2) + { + TConfig c(CONFIG_DITTA, "ve"); + __lingua_only = c.get_bool("LINGUA_ONLY"); + } + if (__lingua_only) + desc = deslin.get(DESLIN_DESCR); + else + desc << '\n' << deslin.get(DESLIN_DESCR); + } + } + + const TString& descest = anamag.get("DESCRAGG"); + if (descest.not_empty()) + desc << "\n" << descest; + + row_mask.set(FR_DESCR, desc); + + TString80 key; key << codart << "|1"; + const TRectype& umart = cache().get(LF_UMART, key); + if (!umart.empty()) + { + curr_um = umart.get(UMART_UM); + curr_fc = umart.get_real(UMART_FC); + } + else + { + curr_um.cut(0); + curr_fc = 1.0; + } + row_mask.set(FR_UMQTA, curr_um); + upd_colli_peso_tara(row_mask, anamag); + } + + condv.ricerca(); + mask.doc()[current_doc_row].put(RDOC_PREZZO, row_mask.get(FR_PREZZO)); + + const int pos = row_mask.id2pos(FR_CODIVA); + + if (pos >= 0) + iva_handler(row_mask.fld(pos), 0); + + if (found) + { + TString16 caus(row_mask.get(FR_CAUS)); + + if (caus.empty()) + caus = mask.get(F_CAUSMAG); + + if (caus.not_empty()) + { + const TCausale_magazzino c(caus); + + if (!c.movimenta_sospesi()) + { + const TRectype & rec = cache().get(LF_ANAMAG, row_mask.get(FR_CODARTMAG)); + + if (rec.get_bool("SOSPESO")) + return error_box(TR("Articolo %s sospeso, quindi non movimentabile"), (const char *)codart); + } + } + } + } + else + if (key == K_F8 && !sh.sheet_mask().is_running()) + { + static int explode_db = 3; + static bool valcomp = false; + static bool matbase = true; + static TExplosion_grouping raggart = RAGGR_EXP_NONE; + static bool elrorig = false; + static int livello = 1; + static int ordin = 0; + + if (explode_db > 2) + { + TConfig d(CONFIG_DITTA, "ve"); + + explode_db = d.get_bool("EXPLODEDB", "ve"); + valcomp = d.get_bool("VALCOMP", "ve"); + matbase = d.get_bool("TIPOESPL", "ve"); + raggart = (TExplosion_grouping) d.get_int("RAGGART", "ve"); + livello = d.get_int("LIVESPL", "ve"); + elrorig = d.get_bool("ELRORIG", "ve"); + ordin = d.get_int("ORDDB", "ve"); + } + if (explode_db && !sh.sheet_mask().is_running()) + { + TDocumento & doc = mask.doc(); + TRiga_documento & curr_row = doc[current_doc_row]; + + sh.update_row(current_doc_row - 1); + curr_row.autosave(sh); + + TDistinta_tree db; + TArray components; + + db.set_root(curr_row); + + const int items = db.explode(components, matbase, raggart, livello, "A", ordin); + if (items > 0) + { + TProgind pi(items, "Esplosione in corso...",false, true); + int row = current_doc_row; + const TString16 tiporiga(curr_row.tipo().codice()); + + TString_array& str_arr = sh.rows_array(); + + for (int i = components.first(); i < items; i = components.succ(i)) + { + pi.addstatus(1L); + TRiga_esplosione & r = (TRiga_esplosione &) components[i]; + TRiga_documento & new_row = doc.insert_row(row + 1, tiporiga); + //sh.insert(row, false); + str_arr.insert(new TToken_string, row); + + TDocumento::copy_data(new_row, curr_row); + new_row.put(RDOC_CODART, r.articolo()); + new_row.put(RDOC_CODARTMAG, r.articolo()); + new_row.put(RDOC_LIVELLO, r.giacenza()); + new_row.zero(RDOC_DESCR); + new_row.zero(RDOC_DESCLUNGA); + new_row.zero(RDOC_DESCEST); + new_row.put(RDOC_CHECKED, ""); + new_row.put(RDOC_UMQTA, r.um()); + new_row.put(RDOC_QTA, r.val() /* * qta_fin */); + new_row.autoload(sh); + sh.check_row(row); + new_row.autosave(sh); // Da sheet a rdoc + if (!valcomp) + { + new_row.zero(RDOC_PREZZO); + // new_row.autoload(sh); // Da rdoc a shee + sh.row(row).add("0", FR_PREZZO-FIRST_FIELD); + row_mask.reset(FR_PREZZO); + } + row++; + } + if (elrorig) + { + doc.destroy_row(current_doc_row, true); + sh.destroy(current_doc_row - 1, false); + row--; + } + else + if (valcomp) + { + curr_row.zero(RDOC_PREZZO); + curr_row.autoload(sh); + } + sh.force_update(); + sh.select(row-1); + } + } + } + return true; +} bool codartmag_handler( TMask_field& f, KEY key ) -{ - TMask & m = f.mask(); - TSheet_field& s = *m.get_sheet(); - TDocumento_mask& mask= (TDocumento_mask&)s.mask(); +{ + TMask & m = f.mask(); + TSheet_field& s = *m.get_sheet(); + TDocumento_mask& mask= (TDocumento_mask&)s.mask(); - bool to_check = key == K_TAB && f.focusdirty(); - if (!to_check) - to_check = !mask.is_running(); + bool to_check = key == K_TAB && f.focusdirty(); + if (!to_check) + to_check = !mask.is_running(); - if (to_check) - { - const TString& codart = f.get(); - const bool artmag = codart.not_empty(); - - m.show(FR_UMQTA, artmag); - m.show(FR_UMQTA2, !artmag); + if (to_check) + { + const TString& codart = f.get(); + const bool artmag = codart.not_empty(); - mask.update_giacenza(); - } - return TRUE; + m.show(FR_UMQTA, artmag); + m.show(FR_UMQTA2, !artmag); + + mask.update_giacenza(); + } + return true; } bool liv_handler( TMask_field& f, KEY key ) -{ - bool ok = TRUE; - TDocumento_mask & mask=(TDocumento_mask &) f.mask().get_sheet()->mask(); - - if (key == K_TAB && f.focusdirty() && !f.get().empty()) - { - const int levnum=f.dlg()-FR_LIV1+1; - // Se e' abilitato l'autoinserimento del livello di giacenza... - if (mask.livelli().autoinsert(levnum)) - mask.livelli().autoinsert(levnum, f); - } - - if (key == K_ENTER && !f.get().empty()) - { - static int checkgiac = 3; - if (checkgiac > 2) - { - TConfig c(CONFIG_DITTA); - checkgiac = c.get_bool("LIVPERART", "ve"); - } - if (mask.is_running() && checkgiac) - { - TLocalisamfile fl(LF_MAG); - fl.setkey(2); - TRectype & r = fl.curr(); - TMask& row_mask = f.mask(); - TEsercizi_contabili esc; - const int annoes = esc.date2esc(mask.get_date(F_DATADOC)); - - r.put(MAG_ANNOES, annoes); - TString16 codmag(row_mask.get(FR_CODMAG)); - - codmag.left_just(3); - codmag << row_mask.get(FR_CODDEP); - r.put(MAG_CODMAG, codmag); - const TString80 codart(row_mask.get(FR_CODART)); - - r.put(MAG_CODART, codart); - TString liv; - - for (int l = 0 ; l <= f.dlg() - FR_LIV1; l++) - mask.doc().livelli().pack_grpcode(liv,row_mask.get(FR_LIV1+l),l+1); - - r.put(MAG_LIVELLO, liv); - - TRectype new_rec(r); - if (fl.read() != NOERR) - { - ok = yesno_box("Il codice di giacenza %s non e' legato all' articolo. Devo legarlo", (const char *)f.get()); - if (ok) - { - fl.setkey(1); - r = new_rec; - r.put("NRIGA", 999); - int nriga = 1; - if (fl.read(_isgteq) == NOERR) - fl.prev(); - if (codart == fl.get("CODART")) - nriga = fl.get_int("NRIGA")+1; - new_rec.put("NRIGA", nriga); - const int err = new_rec.write(fl); - if (err != NOERR) - ok = error_box("Non sono riuscito a legare il codice di giacenza. Errore %d", err); - } - } - } - } - - if (f.to_check(key, TRUE)) - { - if (f.dlg() < FR_LIV4) - { - TMask& row_mask = f.mask(); - TMask_field & next = row_mask.field(f.dlg() + 1); - if (f.get().not_empty()) - next.enable(); - else - { - next.reset(); - next.disable(); - } - next.on_hit(); - } - TDocumento_mask& mask=(TDocumento_mask&)f.mask().get_sheet()->mask(); - mask.update_giacenza(); - } - return ok; -} +{ + bool ok = true; + TDocumento_mask & mask=(TDocumento_mask &) f.mask().get_sheet()->mask(); + + if (key == K_TAB && f.focusdirty() && !f.get().empty()) + { + const int levnum=f.dlg()-FR_LIV1+1; + // Se e' abilitato l'autoinserimento del livello di giacenza... + if (mask.livelli().autoinsert(levnum)) + mask.livelli().autoinsert(levnum, f); + } + + if (key == K_ENTER && !f.get().empty()) + { + static int checkgiac = 3; + if (checkgiac > 2) + { + TConfig c(CONFIG_DITTA); + checkgiac = c.get_bool("LIVPERART", "ve"); + } + if (mask.is_running() && checkgiac) + { + TLocalisamfile fl(LF_MAG); + fl.setkey(2); + TRectype & r = fl.curr(); + TMask& row_mask = f.mask(); + TEsercizi_contabili esc; + const int annoes = esc.date2esc(mask.get_date(F_DATADOC)); + + r.put(MAG_ANNOES, annoes); + TString16 codmag(row_mask.get(FR_CODMAG)); + + codmag.left_just(3); + codmag << row_mask.get(FR_CODDEP); + r.put(MAG_CODMAG, codmag); + const TString80 codart(row_mask.get(FR_CODART)); + + r.put(MAG_CODART, codart); + TString liv; + + for (int l = 0 ; l <= f.dlg() - FR_LIV1; l++) + mask.doc().livelli().pack_grpcode(liv,row_mask.get(FR_LIV1+l),l+1); + + r.put(MAG_LIVELLO, liv); + + TRectype new_rec(r); + if (fl.read() != NOERR) + { + ok = yesno_box("Il codice di giacenza %s non e' legato all' articolo. Devo legarlo", (const char *)f.get()); + if (ok) + { + fl.setkey(1); + r = new_rec; + r.put("NRIGA", 999); + int nriga = 1; + if (fl.read(_isgteq) == NOERR) + fl.prev(); + if (codart == fl.get("CODART")) + nriga = fl.get_int("NRIGA")+1; + new_rec.put("NRIGA", nriga); + const int err = new_rec.write(fl); + if (err != NOERR) + ok = error_box("Non sono riuscito a legare il codice di giacenza. Errore %d", err); + } + } + } + } + + if (f.to_check(key, true)) + { + if (f.dlg() < FR_LIV4) + { + TMask& row_mask = f.mask(); + TMask_field & next = row_mask.field(f.dlg() + 1); + if (f.get().not_empty()) + next.enable(); + else + { + next.reset(); + next.disable(); + } + next.on_hit(); + } + TDocumento_mask& mask=(TDocumento_mask&)f.mask().get_sheet()->mask(); + mask.update_giacenza(); + } + return ok; +} void set_curr_um(const TString & um) -{ - curr_um = um; - curr_fc = -1.0; +{ + curr_um = um; + curr_fc = -1.0; } bool umart_handler( TMask_field& f, KEY key ) { - TMask& row_mask = f.mask( ); - TSheet_field& sh = *row_mask.get_sheet(); - TDocumento_mask & mask = (TDocumento_mask &)sh.mask(); - // Se qualcuno cerca di modificare la maschera - if ( key == K_TAB && f.focusdirty() && mask.is_running()) - { - const int current_doc_row = sh.selected() + 1; + TMask& row_mask = f.mask( ); + TSheet_field& sh = *row_mask.get_sheet(); + TDocumento_mask & mask = (TDocumento_mask &)sh.mask(); + // Se qualcuno cerca di modificare la maschera + if ( key == K_TAB && f.focusdirty() && mask.is_running()) + { + const int current_doc_row = sh.selected() + 1; - TCond_vendita & condv = mask.condv(); - condv.set_riga(&row_mask); + TCond_vendita & condv = mask.condv(); + condv.set_riga(&row_mask); - const TString& um = f.get(); - real fc(1.0); - - if (um.not_empty() && curr_um.not_empty() && um != curr_um) - { - TLocalisamfile umart(LF_UMART); - umart.setkey(2); - umart.put(UMART_CODART, row_mask.get(FR_CODARTMAG)); - umart.put(UMART_UM, um); - if (umart.read() == NOERR) - { - real qta(row_mask.get_real(FR_QTA)); - fc = umart.get_real(UMART_FC); - if (curr_fc < ZERO) - { - umart.put(UMART_CODART, row_mask.get(FR_CODARTMAG)); - umart.put(UMART_UM, curr_um); - if (umart.read() == NOERR) - curr_fc = umart.get_real(UMART_FC); - else - curr_fc = 1.0; - } - qta *= curr_fc; - qta /= fc; - qta.round(5); - row_mask.set(FR_QTA, qta); - qta = row_mask.get_real(FR_QTAEVASA); - qta *= curr_fc; - qta /= fc; - qta.round(5); - row_mask.set(FR_QTAEVASA, qta); - } - - } - curr_um = um; - curr_fc = fc; - condv.ricerca(TRUE); - mask.doc()[current_doc_row].put(RDOC_PREZZO, row_mask.get(FR_PREZZO)); - } - return TRUE; + const TString& um = f.get(); + real fc(1.0); + + if (um.not_empty() && curr_um.not_empty() && um != curr_um) + { + TLocalisamfile umart(LF_UMART); + umart.setkey(2); + umart.put(UMART_CODART, row_mask.get(FR_CODARTMAG)); + umart.put(UMART_UM, um); + if (umart.read() == NOERR) + { + real qta(row_mask.get_real(FR_QTA)); + fc = umart.get_real(UMART_FC); + if (curr_fc < ZERO) + { + umart.put(UMART_CODART, row_mask.get(FR_CODARTMAG)); + umart.put(UMART_UM, curr_um); + if (umart.read() == NOERR) + curr_fc = umart.get_real(UMART_FC); + else + curr_fc = 1.0; + } + qta *= curr_fc; + qta /= fc; + qta.round(5); + row_mask.set(FR_QTA, qta); + qta = row_mask.get_real(FR_QTAEVASA); + qta *= curr_fc; + qta /= fc; + qta.round(5); + row_mask.set(FR_QTAEVASA, qta); + } + } + curr_um = um; + curr_fc = fc; + condv.ricerca(true); + mask.doc()[current_doc_row].put(RDOC_PREZZO, row_mask.get(FR_PREZZO)); + } + return true; } bool um_handler( TMask_field& f, KEY key ) { - // Se qualcuno cerca di modificare la maschera - if ( key == K_TAB && f.focusdirty()) - { - TMask& row_mask = f.mask( ); - TTable & ums = (TTable &) ((TEdit_field &) f).browse()->cursor()->file(); - - const TString16 um(f.get()); - real fc(1.0); - - if (um.not_empty() && curr_um.not_empty() && um != curr_um) - { - ums.put("CODTAB", curr_um); - if (ums.read() == NOERR) - { - real qta(row_mask.get_real(FR_QTA)); - const TString16 umsrif0(ums.get("S7")); - const real fc0 = ums.get_real("R10"); - if (um == umsrif0) - fc = fc0; - else - { - ums.put("CODTAB", um); - if (ums.read() == NOERR) - { - const real fc1 = ums.get_real("R10"); - const TString16 umsrif1(ums.get("S7")); - - - if (fc1 > ZERO) - { - if (curr_um == umsrif1) - fc = 1 / fc1; - else - if (umsrif0 == ums.get("S7")) - fc = fc0 / ums.get_real("R10"); - } - } - } - qta *= fc; - qta.round(5); - row_mask.set(FR_QTA, qta); - qta = row_mask.get_real(FR_QTAEVASA); - qta *= fc; - qta.round(5); - row_mask.set(FR_QTAEVASA, qta); - } - - } - curr_um = um; - curr_fc = fc; - } - return TRUE; + // Se qualcuno cerca di modificare la maschera + if ( key == K_TAB && f.focusdirty()) + { + TMask& row_mask = f.mask( ); + TTable & ums = (TTable &) ((TEdit_field &) f).browse()->cursor()->file(); + + const TString16 um(f.get()); + real fc(1.0); + + if (um.not_empty() && curr_um.not_empty() && um != curr_um) + { + ums.put("CODTAB", curr_um); + if (ums.read() == NOERR) + { + real qta(row_mask.get_real(FR_QTA)); + const TString16 umsrif0(ums.get("S7")); + const real fc0 = ums.get_real("R10"); + if (um == umsrif0) + fc = fc0; + else + { + ums.put("CODTAB", um); + if (ums.read() == NOERR) + { + const real fc1 = ums.get_real("R10"); + const TString16 umsrif1(ums.get("S7")); + + if (fc1 > ZERO) + { + if (curr_um == umsrif1) + fc = 1 / fc1; + else + if (umsrif0 == ums.get("S7")) + fc = fc0 / ums.get_real("R10"); + } + } + } + qta *= fc; + qta.round(5); + row_mask.set(FR_QTA, qta); + qta = row_mask.get_real(FR_QTAEVASA); + qta *= fc; + qta.round(5); + row_mask.set(FR_QTAEVASA, qta); + } + } + curr_um = um; + curr_fc = fc; + } + return true; } bool descr_handler( TMask_field& f, KEY key ) { - if (key == K_TAB && f.focusdirty()) - { - const TString s(f.get()); - if (s.find('\n') < 0) - { - TLocalisamfile & anamag = (TLocalisamfile &) ((TEdit_field &) f).browse()->cursor()->file(); - - if (f.get() == anamag.get(ANAMAG_DESCR)) + if (key == K_TAB && f.focusdirty()) + { + const TString s(f.get()); + if (s.find('\n') < 0) + { + TLocalisamfile & anamag = (TLocalisamfile &) ((TEdit_field &) f).browse()->cursor()->file(); + + if (f.get() == anamag.get(ANAMAG_DESCR)) f.mask().set(FR_CODART, anamag.get(ANAMAG_CODART), 3); - } - } - return TRUE; + } + } + return true; } bool qtaart_handler( TMask_field& f, KEY key ) -{ - // Se qualcuno cerca di modificare la maschera - if ( key == K_TAB && f.focusdirty()) - { - TMask& row_mask = f.mask(); - TSheet_field& sh = *row_mask.get_sheet(); - TDocumento_mask& mask = (TDocumento_mask&) sh.mask(); - const int current_doc_row = sh.selected() + 1; +{ + // Se qualcuno cerca di modificare la maschera + if ( key == K_TAB && f.focusdirty()) + { + TMask& row_mask = f.mask(); + TSheet_field& sh = *row_mask.get_sheet(); + TDocumento_mask& mask = (TDocumento_mask&) sh.mask(); + const int current_doc_row = sh.selected() + 1; - TCond_vendita & condv = mask.condv(); - condv.set_riga(&row_mask); - condv.ricerca(FALSE, TRUE); - mask.doc()[current_doc_row].put(RDOC_PREZZO, row_mask.get(FR_PREZZO)); - const TString& codart = row_mask.get(FR_CODARTMAG); - - if (codart.not_empty()) - { - const TRectype& anamag = cache().get(LF_ANAMAG, codart); - if (!anamag.empty()) - upd_colli_peso_tara(row_mask, anamag); - } + TCond_vendita & condv = mask.condv(); + condv.set_riga(&row_mask); + condv.ricerca(false, true); + mask.doc()[current_doc_row].put(RDOC_PREZZO, row_mask.get(FR_PREZZO)); + const TString& codart = row_mask.get(FR_CODARTMAG); - } - else - if (key == K_ENTER && f.dirty()) - { - TDocumento_mask& mask=(TDocumento_mask&)f.mask().get_sheet()->mask(); - TDocumento & doc = mask.doc(); + if (codart.not_empty()) + { + const TRectype& anamag = cache().get(LF_ANAMAG, codart); + if (!anamag.empty()) + upd_colli_peso_tara(row_mask, anamag); + } - if ((doc.tipo().check_giac() || doc.tipo().check_disp()) && - main_app().has_module(MGAUT, CHK_DONGLE) && doc.tipo().mov_mag()) - { - TSheet_field& sf = mask.sfield(F_SHEET); - TToken_string& row = sf.row(sf.selected()); - const TString codart = row.get(sf.cid2index(FR_CODARTMAG)); - - if (codart.not_empty()) - { - TString16 codmag = row.get(sf.cid2index(FR_CODMAG)); - const TString16 coddep = row.get(sf.cid2index(FR_CODDEP)); - if (!coddep.blank()) - codmag << coddep; - - TString16 livello; - for (int i = 0; i < 4; i++) - { - const char* liv = row.get(sf.cid2index(FR_LIV1+i)); - if (*liv > ' ') - livello << liv; - else - break; - } + } + else + if (key == K_ENTER && f.dirty()) + { + TDocumento_mask& mask=(TDocumento_mask&)f.mask().get_sheet()->mask(); + TDocumento & doc = mask.doc(); - real qta(row.get(sf.cid2index(FR_QTA))); - const TString16 caus(mask.get(F_CAUSMAG)); - TCausale_magazzino c(caus); - const long nmovmag = doc.get_long(DOC_MOVMAG); - - if (nmovmag != 0) - { - TLocalisamfile rmovmag(LF_RMOVMAG); rmovmag.setkey(2); - rmovmag.put(RMOVMAG_CODART, codart); - rmovmag.put(RMOVMAG_LIVGIAC, livello); - rmovmag.put(RMOVMAG_CODMAG, codmag); - rmovmag.put(RMOVMAG_NUMREG, nmovmag); - if (rmovmag.read() == NOERR) - qta -= rmovmag.get_real(RMOVMAG_QUANT); - } - if (doc.tipo().check_giac()) - { - real giac(mask.get(F_CURGIAC)); - if (giac < -(c.sgn(s_giac) * qta)) - warning_box("Attenzione giacenza negativa"); - } - else - if (doc.tipo().check_disp()) - { - real disp(mask.get(F_CURDISP)); - if (disp < -(c.sgn(s_giac) * qta)) - warning_box("Attenzione disponibilita' negativa"); - } - } - } - } + if ((doc.tipo().check_giac() || doc.tipo().check_disp()) && + main_app().has_module(MGAUT, CHK_DONGLE) && doc.tipo().mov_mag()) + { + TSheet_field& sf = mask.sfield(F_SHEET); + TToken_string& row = sf.row(sf.selected()); + const TString codart = row.get(sf.cid2index(FR_CODARTMAG)); + + if (codart.not_empty()) + { + TString16 codmag = row.get(sf.cid2index(FR_CODMAG)); + const TString16 coddep = row.get(sf.cid2index(FR_CODDEP)); + if (!coddep.blank()) + codmag << coddep; + + TString16 livello; + for (int i = 0; i < 4; i++) + { + const char* liv = row.get(sf.cid2index(FR_LIV1+i)); + if (*liv > ' ') + livello << liv; + else + break; + } + + real qta(row.get(sf.cid2index(FR_QTA))); + const TString16 caus(mask.get(F_CAUSMAG)); + TCausale_magazzino c(caus); + const long nmovmag = doc.get_long(DOC_MOVMAG); + + if (nmovmag != 0) + { + TLocalisamfile rmovmag(LF_RMOVMAG); rmovmag.setkey(2); + rmovmag.put(RMOVMAG_CODART, codart); + rmovmag.put(RMOVMAG_LIVGIAC, livello); + rmovmag.put(RMOVMAG_CODMAG, codmag); + rmovmag.put(RMOVMAG_NUMREG, nmovmag); + if (rmovmag.read() == NOERR) + qta -= rmovmag.get_real(RMOVMAG_QUANT); + } + if (doc.tipo().check_giac()) + { + real giac(mask.get(F_CURGIAC)); + if (giac < -(c.sgn(s_giac) * qta)) + warning_box("Attenzione giacenza negativa"); + } + else + if (doc.tipo().check_disp()) + { + real disp(mask.get(F_CURDISP)); + if (disp < -(c.sgn(s_giac) * qta)) + warning_box("Attenzione disponibilita' negativa"); + } + } + } + } + return qta_handler(f, key); + } - return qta_handler(f, key); - } - bool qta_handler( TMask_field& f, KEY key ) -{ - // Se qualcuno cerca di modificare la maschera - if ( key == K_TAB && f.focusdirty()) - { - TMask& row_mask = f.mask( ); - const real qta_evasa = row_mask.get_real(FR_QTAEVASA); - const real qta(f.get()); +{ + // Se qualcuno cerca di modificare la maschera + if ( key == K_TAB && f.focusdirty()) + { + TMask& row_mask = f.mask( ); + const real qta_evasa = row_mask.get_real(FR_QTAEVASA); + const real qta(f.get()); - if (qta_evasa > 0 && qta_evasa >= qta) - { - row_mask.set(FR_RIGAEVASA, "X"); - row_mask.disable(FR_RIGAEVASA); - } - else - row_mask.enable(FR_RIGAEVASA); - } - - return TRUE; + if (qta_evasa > 0 && qta_evasa >= qta) + { + row_mask.set(FR_RIGAEVASA, "X"); + row_mask.disable(FR_RIGAEVASA); + } + else + row_mask.enable(FR_RIGAEVASA); + } + + return true; } - + bool qta_evasa_handler( TMask_field& f, KEY key ) -{ - TMask& row_mask = f.mask( ); - if (f.to_check(key) || (key == K_TAB && !row_mask.is_running())) - { - const real qta_evasa(f.get()); - const real qta = row_mask.get_real(FR_QTA); +{ + TMask& row_mask = f.mask( ); + if (f.to_check(key) || (key == K_TAB && !row_mask.is_running())) + { + const real qta_evasa(f.get()); + const real qta = row_mask.get_real(FR_QTA); - bool enable_evasa = true; - if (qta_evasa > 0 && qta_evasa >= qta) - { - row_mask.set(FR_RIGAEVASA, "X"); - enable_evasa = false; - } - row_mask.enable(FR_RIGAEVASA, enable_evasa); - if (!row_mask.is_running()) - { - TSheet_field* sheet = row_mask.get_sheet(); - const int riga = sheet->selected(); - sheet->enable_cell(riga, sheet->cid2index(FR_RIGAEVASA), enable_evasa); - } - } - return TRUE; + bool enable_evasa = true; + if (qta_evasa > 0 && qta_evasa >= qta) + { + row_mask.set(FR_RIGAEVASA, "X"); + enable_evasa = false; + } + row_mask.enable(FR_RIGAEVASA, enable_evasa); + if (!row_mask.is_running()) + { + TSheet_field* sheet = row_mask.get_sheet(); + const int riga = sheet->selected(); + sheet->enable_cell(riga, sheet->cid2index(FR_RIGAEVASA), enable_evasa); + } + } + return true; } - + bool causmag_handler( TMask_field& f, KEY key ) -{ - if (f.to_check(key)) - { - TMask& row_mask = f.mask( ); - TDocumento_mask & mask = (TDocumento_mask &) row_mask.get_sheet()->mask(); - TString16 causmag(f.get()); - if (causmag.empty()) - causmag = mask.get(F_CAUSMAG); - - TCausale_magazzino c(cache().get("%CAU", causmag)); - if (c.empty()) - { - cache().discard("%CAU", causmag); - } - else - { - if (c.has_default_mag() && row_mask.get(FR_CODMAG).empty()) - { - row_mask.set(FR_CODMAG, c.default_mag(), TRUE); - row_mask.set(FR_CODDEPC, "", TRUE); - } - if (c.has_default_dep() && row_mask.get(FR_CODDEP).empty()) - row_mask.set(FR_CODDEP, c.default_dep(), TRUE); - - if (!c.caus_collegata().empty()) - { - c = cache().get("%CAU", c.caus_collegata()); - if (c.has_default_mag() && row_mask.get(FR_CODMAGC).empty()) - { - row_mask.set(FR_CODMAGC, c.default_mag(), TRUE); - row_mask.set(FR_CODDEPC, "", TRUE); - } - if (c.has_default_dep() && row_mask.get(FR_CODDEPC).empty()) - row_mask.set(FR_CODDEPC, c.default_dep(), TRUE); - - static int copy_defmagc = -883; - if (copy_defmagc < 0) - { - TFilename fname; mask.doc().tipo().profile_name(fname); - TConfig c_tipo_documento(fname,"MAIN"); - copy_defmagc = c_tipo_documento.get_bool("DEFMAGXCOLL"); - } - if (copy_defmagc!=0) - { - if (row_mask.get(FR_CODMAGC).empty()) - row_mask.set(FR_CODMAGC, mask.stdmag(), TRUE); - if (row_mask.get(FR_CODDEPC).empty()) - row_mask.set(FR_CODDEPC, mask.stddep(), TRUE); - } - } - if (!c.movimenta_sospesi()) - { - const TRectype & rec = cache().get(LF_ANAMAG, row_mask.get(FR_CODARTMAG)); - - if (rec.get_bool("SOSPESO")) - return error_box("Articolo %s sospeso, quindi non movmentabile", (const char *)rec.get(ANAMAG_CODART)); - } - } - } - return TRUE; +{ + if (f.to_check(key)) + { + TMask& row_mask = f.mask( ); + TDocumento_mask & mask = (TDocumento_mask &) row_mask.get_sheet()->mask(); + TString16 causmag(f.get()); + if (causmag.empty()) + causmag = mask.get(F_CAUSMAG); + + TCausale_magazzino c(cache().get("%CAU", causmag)); + if (c.empty()) + { + cache().discard("%CAU", causmag); + } + else + { + if (c.has_default_mag() && row_mask.get(FR_CODMAG).empty()) + { + row_mask.set(FR_CODMAG, c.default_mag(), true); + row_mask.set(FR_CODDEPC, "", true); + } + if (c.has_default_dep() && row_mask.get(FR_CODDEP).empty()) + row_mask.set(FR_CODDEP, c.default_dep(), true); + + if (!c.caus_collegata().empty()) + { + c = cache().get("%CAU", c.caus_collegata()); + if (c.has_default_mag() && row_mask.get(FR_CODMAGC).empty()) + { + row_mask.set(FR_CODMAGC, c.default_mag(), true); + row_mask.set(FR_CODDEPC, "", true); + } + if (c.has_default_dep() && row_mask.get(FR_CODDEPC).empty()) + row_mask.set(FR_CODDEPC, c.default_dep(), true); + + static int copy_defmagc = -883; + if (copy_defmagc < 0) + { + TFilename fname; mask.doc().tipo().profile_name(fname); + TConfig c_tipo_documento(fname,"MAIN"); + copy_defmagc = c_tipo_documento.get_bool("DEFMAGXCOLL"); + } + if (copy_defmagc!=0) + { + if (row_mask.get(FR_CODMAGC).empty()) + row_mask.set(FR_CODMAGC, mask.stdmag(), true); + if (row_mask.get(FR_CODDEPC).empty()) + row_mask.set(FR_CODDEPC, mask.stddep(), true); + } + } + if (!c.movimenta_sospesi()) + { + const TRectype & rec = cache().get(LF_ANAMAG, row_mask.get(FR_CODARTMAG)); + + if (rec.get_bool("SOSPESO")) + return error_box("Articolo %s sospeso, quindi non movmentabile", (const char *)rec.get(ANAMAG_CODART)); + } + } + } + return true; } - + bool sppr_handler( TMask_field& f, KEY key ) { - TMask& row_mask = f.mask(); - - if (key == K_TAB && (f.focusdirty() || row_mask.get(FR_DESCR).empty())) - { - const int pos = row_mask.id2pos(FR_PREZZO); - - if (pos >= 0) - { - TMask & mask = row_mask.get_sheet()->mask(); - TEdit_field & e = (TEdit_field &) f; - TRelation * r = e.browse()->cursor()->relation(); - const TString16 cod = r->curr().get("COD"); - TSpesa_prest sp(NULL, cod == "SPP" ? 'S' : 'P'); - if (sp.read(row_mask.get(FR_CODART)) == NOERR) - { - const char tipo = sp.tipo(); - const bool qta_val_fl = tipo == 'Q'; - const bool perc_fl = tipo == 'P'; + TMask& row_mask = f.mask(); + + if (key == K_TAB && (f.focusdirty() || row_mask.get(FR_DESCR).empty())) + { + const int pos = row_mask.id2pos(FR_PREZZO); - short pos = row_mask.id2pos(FR_UMQTASP); - if (pos >= 0) - row_mask.fld(pos).enable(!perc_fl); - pos = row_mask.id2pos(FR_PREZZO); - if (pos >= 0) - row_mask.fld(pos).enable(!perc_fl); - pos = row_mask.id2pos(FR_SCONTO); - if (pos >= 0) - row_mask.fld(pos).enable(!perc_fl); - pos = row_mask.id2pos(FR_QTA); - if (pos >= 0) - { - row_mask.fld(pos).show(!perc_fl); - row_mask.fld(pos).enable(qta_val_fl); - } - pos = row_mask.id2pos(FR_PERCSP); - if (pos >= 0) - { - row_mask.fld(pos).show(perc_fl); - row_mask.fld(pos).enable(perc_fl); - } - - if (!perc_fl) - { - const real cambio = mask.get_real(F_CAMBIO); - real prezzo = sp.prezzo(); - const TString& doc_valuta = mask.get(F_CODVAL); - const bool controeuro = mask.get_bool(F_CONTROEURO); - - sppr_calc(sp, doc_valuta, cambio, prezzo, controeuro ? _exchange_contro : _exchange_base); - row_mask.set(FR_PREZZO, prezzo); - - } - const int posiva = row_mask.id2pos(FR_CODIVA); - if (posiva >= 0) - iva_handler(row_mask.fld(posiva), 0); - } - } - } - return TRUE; + if (pos >= 0) + { + TMask & mask = row_mask.get_sheet()->mask(); + TEdit_field & e = (TEdit_field &) f; + TRelation * r = e.browse()->cursor()->relation(); + const TString16 cod = r->curr().get("COD"); + TSpesa_prest sp(NULL, cod == "SPP" ? 'S' : 'P'); + if (sp.read(row_mask.get(FR_CODART)) == NOERR) + { + const char tipo = sp.tipo(); + const bool qta_val_fl = tipo == 'Q'; + const bool perc_fl = tipo == 'P'; + short pos = row_mask.id2pos(FR_UMQTASP); + + if (pos >= 0) + row_mask.fld(pos).enable(!perc_fl); + pos = row_mask.id2pos(FR_PREZZO); + if (pos >= 0) + row_mask.fld(pos).enable(!perc_fl); + pos = row_mask.id2pos(FR_SCONTO); + if (pos >= 0) + row_mask.fld(pos).enable(!perc_fl); + pos = row_mask.id2pos(FR_QTA); + if (pos >= 0) + { + row_mask.fld(pos).show(!perc_fl); + row_mask.fld(pos).enable(qta_val_fl); + } + pos = row_mask.id2pos(FR_PERCSP); + if (pos >= 0) + { + row_mask.fld(pos).show(perc_fl); + row_mask.fld(pos).enable(perc_fl); + } + if (!perc_fl) + { + const real cambio = mask.get_real(F_CAMBIO); + real prezzo = sp.prezzo(); + const TString& doc_valuta = mask.get(F_CODVAL); + const bool controeuro = mask.get_bool(F_CONTROEURO); + + sppr_calc(sp, doc_valuta, cambio, prezzo, controeuro ? _exchange_contro : _exchange_base); + row_mask.set(FR_PREZZO, prezzo); + + } + const int posiva = row_mask.id2pos(FR_CODIVA); + if (posiva >= 0) + iva_handler(row_mask.fld(posiva), 0); + } + } + } + return true; } bool TDocumento_mask::numdocrif_search_handler(TMask_field& f, KEY key) -{ - if (key == K_F9) - { - TMask& m = f.mask(); +{ + if (key == K_F9) + { + TMask& m = f.mask(); + + TRectype filtrec(LF_DOC); + + filtrec.put(DOC_TIPOCF, m.get(F_TIPOCF)); + filtrec.put(DOC_CODCF, m.get(F_CODCF)); - TRectype filtrec(LF_DOC); - filtrec.put(DOC_TIPOCF, m.get(F_TIPOCF)); - filtrec.put(DOC_CODCF, m.get(F_CODCF)); const long codcf = atol(m.get(F_CODCF)); + if (codcf != 0) filtrec.put(DOC_TIPOCF, m.get(F_TIPOCF)); - TRelation rel(LF_DOC); - rel.add(LF_CLIFO, "TIPOCF==TIPOCF|CODCF==CODCF"); - TSorted_cursor cur(&rel, "TIPOCF|CODCF|PROVV|ANNO|CODNUM|NUMDOCRIF", "", 2, &filtrec, &filtrec); - TString80 f; f.format("(CODNUM==\"%s\") && (PROVV==\"%s\") && (ANNO==\"%s\")", + TRelation rel(LF_DOC); + rel.add(LF_CLIFO, "TIPOCF==TIPOCF|CODCF==CODCF"); + TSorted_cursor cur(&rel, "TIPOCF|CODCF|PROVV|ANNO|CODNUM|NUMDOCRIF", "", 2, &filtrec, &filtrec); + TString80 f; f.format("(CODNUM==\"%s\") && (PROVV==\"%s\") && (ANNO==\"%s\")", (const char *)m.get(F_CODNUM), (const char *)m.get(F_PROVV), (const char *)m.get(F_ANNO)); - - cur.setfilter(f); - TCursor_sheet sheet(&cur, "CODCF|20->RAGSOC|ANNO|CODNUM|NUMDOCRIF|DATADOCRIF|DOC1|DOC2|DOC3|NDOC|DATADOC|CODVAL|G1:TOTDOC", - "Documento di riferimento", - "Codice|Ragione Sociale@50|Anno|Numeraz|Docum.Rif.|Data@10|Docum.Rif. 1|Docum.Rif. 2|Docum.Rif. 3|Documento|Data\nDocumento@10|Valuta|Totale\nDocumento@18V", - 0, 1); - if (sheet.run() == K_ENTER) - { - const TString16 ndoc = sheet.row(-1).get(9); - m.set(F_NDOC, ndoc); - m.stop_run(K_AUTO_ENTER); - } - } - - return TRUE; + + cur.setfilter(f); + TCursor_sheet sheet(&cur, "CODCF|20->RAGSOC|ANNO|CODNUM|NUMDOCRIF|DATADOCRIF|DOC1|DOC2|DOC3|NDOC|DATADOC|CODVAL|G1:TOTDOC", + "Documento di riferimento", + "Codice|Ragione Sociale@50|Anno|Numeraz|Docum.Rif.|Data@10|Docum.Rif. 1|Docum.Rif. 2|Docum.Rif. 3|Documento|Data\nDocumento@10|Valuta|Totale\nDocumento@18V", + 0, 1); + if (sheet.run() == K_ENTER) + { + const TString16 ndoc = sheet.row(-1).get(9); + m.set(F_NDOC, ndoc); + m.stop_run(K_AUTO_ENTER); + } + } + return true; } bool TDocumento_mask::ragsoc_search_handler(TMask_field& f, KEY key) -{ - if (key == K_F9) - { - TMask& m = f.mask(); +{ + if (key == K_F9) + { + TMask& m = f.mask(); - TRectype filtrec(LF_DOC); - filtrec.put(DOC_CODNUM, m.get(F_CODNUM)); - filtrec.put(DOC_PROVV, m.get(F_PROVV)); - filtrec.put(DOC_ANNO, m.get(F_ANNO)); - - TRelation rel(LF_DOC); + TRectype filtrec(LF_DOC); + + filtrec.put(DOC_CODNUM, m.get(F_CODNUM)); + filtrec.put(DOC_PROVV, m.get(F_PROVV)); + filtrec.put(DOC_ANNO, m.get(F_ANNO)); + + TRelation rel(LF_DOC); rel.add(LF_CLIFO, "TIPOCF==TIPOCF|CODCF==CODCF"); - TSorted_cursor cur(&rel, "TIPOCF|UPPER(20->RAGSOC)|PROVV|ANNO|CODNUM|PROVV|NDOC", "", 1, &filtrec, &filtrec); - TString80 form; form.format("CODNUM==\"%s\"", (const char *)m.get(F_CODNUM)); - - cur.setfilter(form, TRUE); - TCursor_sheet sheet(&cur, "20->RAGSOC|CODCF|20->PAIV|ANNO|CODNUM|NDOC|DATADOC|CODVAL|G1:TOTDOC", - "Ragione Sociale", - "Ragione Sociale@50|Codice|Partita IVA|Anno|Numeraz|Documento|Data\nDocumento@10|Valuta|Totale\nDocumento@18V", - 0, 1); + TSorted_cursor cur(&rel, "TIPOCF|UPPER(20->RAGSOC)|PROVV|ANNO|CODNUM|PROVV|NDOC", "", 1, &filtrec, &filtrec); + TString80 form; form.format("CODNUM==\"%s\"", (const char *)m.get(F_CODNUM)); + + cur.setfilter(form, true); + + TCursor_sheet sheet(&cur, "20->RAGSOC|CODCF|20->PAIV|ANNO|CODNUM|NDOC|DATADOC|CODVAL|G1:TOTDOC", + "Ragione Sociale", + "Ragione Sociale@50|Codice|Partita IVA|Anno|Numeraz|Documento|Data\nDocumento@10|Valuta|Totale\nDocumento@18V", + 0, 1); TString ragsoc(f.get()); rel.zero(); @@ -1494,45 +1488,91 @@ bool TDocumento_mask::ragsoc_search_handler(TMask_field& f, KEY key) rel.curr(LF_CLIFO).put(CLI_RAGSOC, ragsoc); sheet.cursor()->read(); - if (sheet.run() == K_ENTER) - { - const TString16 ndoc = sheet.row(-1).get(5); - m.set(F_NDOC, ndoc); - m.stop_run(K_AUTO_ENTER); - } - } - - return TRUE; + if (sheet.run() == K_ENTER) + { + const TString16 ndoc = sheet.row(-1).get(5); + m.set(F_NDOC, ndoc); + m.stop_run(K_AUTO_ENTER); + } + } + return true; } - - bool TDocumento_mask::datadocrif_handler(TMask_field& f, KEY key) { - if (key == K_ENTER && f.empty()) - { - const TDocumento_mask& m = (const TDocumento_mask&)f.mask(); - if (m.get_bool(F_RAGGREFF)) - { - const TDocumento& doc = m.doc(); - if (doc.is_nota_credito()) - return f.error_box("E' necessario specificare data e numero documento di riferimento\n" - "quando si desidera generare effetti raggruppati"); - } - } - return TRUE; + if (key == K_ENTER && f.empty()) + { + const TDocumento_mask& m = (const TDocumento_mask&)f.mask(); + if (m.get_bool(F_RAGGREFF)) + { + const TDocumento& doc = m.doc(); + if (doc.is_nota_credito()) + return f.error_box("E' necessario specificare data e numero documento di riferimento\n" + "quando si desidera generare effetti raggruppati"); + } + } + return true; } bool link_handler( TMask_field& f, KEY key ) { - if (key == K_SPACE) - { - const TSheet_field & sf = *f.mask().get_sheet(); - const TDocumento_mask & m = (const TDocumento_mask & )sf.mask(); - const TDocumento & d = m.doc(); - const int nrow = sf.selected() + 1; - const TRiga_documento & r = d[nrow]; - r.edit(LF_DOC, "DAPROVV|DAANNO|DACODNUM|DANDOC"); - } - return TRUE; -} \ No newline at end of file + if (key == K_SPACE) + { + const TSheet_field & sf = *f.mask().get_sheet(); + const TDocumento_mask & m = (const TDocumento_mask & )sf.mask(); + const TDocumento & d = m.doc(); + const int nrow = sf.selected() + 1; + const TRiga_documento & r = d[nrow]; + r.edit(LF_DOC, "DAPROVV|DAANNO|DACODNUM|DANDOC"); + } + return true; +} + +bool ca_mag_handler(TMask_field& f, bool cdc = true) +{ + TMask& row_mask = f.mask(); + const TSheet_field & sf = *f.mask().get_sheet(); + const TDocumento_mask & mask = (TDocumento_mask & )sf.mask(); + short i, first_fld, last_fld; + const int lffile = cdc ? LF_CDC : LF_COMMESSE; + const TMultilevel_code_info & info = ca_multilevel_code_info(lffile); + TString80 cod; + + last_fld = f.dlg(); + first_fld = last_fld - info.levels() + 1; + for (i = first_fld; i <= last_fld; i++) + cod << row_mask.get(i); + if (cod.blank()) + { + cod.cut(0); + last_fld = cdc ? mask.last_cdc_dlg() : mask.last_cms_dlg(); + first_fld = last_fld - info.levels() + 1; + + for (i = first_fld; i <= last_fld; i++) + cod << mask.get(i); + } + + const TRectype & rec = cache().get(lffile, cod); + const TString16 codmag = rec.get("CODMAG"); + + if (codmag.not_empty()) + { + row_mask.set(FR_CODMAG, codmag.left(3), true); + row_mask.set(FR_CODDEP, codmag.mid(3), true); + } + return true; +} + +bool cms_mag_handler(TMask_field& f, KEY key) +{ + if ((key == K_TAB && f.focusdirty()) || key == K_ENTER) + ca_mag_handler(f, false); + return true; +} + +bool cdc_mag_handler(TMask_field& f, KEY key) +{ + if ((key == K_TAB && f.focusdirty()) || key == K_ENTER) + ca_mag_handler(f); + return true; +} diff --git a/ve/vepriv.h b/ve/vepriv.h index 46ac75d56..a0d36a8da 100755 --- a/ve/vepriv.h +++ b/ve/vepriv.h @@ -27,6 +27,9 @@ bool qta_evasa_handler(TMask_field& f, KEY key); bool causmag_handler(TMask_field& f, KEY key); bool pricerange_handler(TMask_field& f, KEY key ); bool link_handler( TMask_field& f, KEY key ); +bool cdc_mag_handler(TMask_field& f, KEY key); +bool cms_mag_handler(TMask_field& f, KEY key); + bool numdocrif_hndl(TMask_field& field, KEY key); bool smart_hndl(TMask_field& field, KEY key);