diff --git a/src/ve/velib04b.cpp b/src/ve/velib04b.cpp index 6ba7fb547..4c3a87fd2 100755 --- a/src/ve/velib04b.cpp +++ b/src/ve/velib04b.cpp @@ -560,9 +560,9 @@ static TBill _conto_sto; // Conto per storno articoli Omaggio static bool _contsclor; // Contabilizza sconti al netto o al lordo (sconti suddiviso per ogni contropartita) //static bool _loaded = false;// Flag per evitare di caricare i parametri pił di una volta -static TCausale *_caus = NULL; // causale del documento corrente -static TMovimentoPN_VE *_movimento = NULL; // Movimento di prima nota documento vendita -static TMovimentoPN *_anticipo = NULL; // Movimento di prima nota relativamente all'anticipo indicato sul documento +static TCausale *_caus = nullptr; // causale del documento corrente +static TMovimentoPN_VE *_movimento = nullptr; // Movimento di prima nota documento vendita +static TMovimentoPN *_anticipo = nullptr; // Movimento di prima nota relativamente all'anticipo indicato sul documento class TIVA_array : public TAssoc_array { @@ -805,8 +805,8 @@ void TContabilizzazione::init() _error = no_error; _nrow = 0; _total_docs = 0L; - _caus = NULL; - _viswin = NULL; + _caus = nullptr; + _viswin = nullptr; } TContabilizzazione::TContabilizzazione(const char* cod) : TElaborazione(cod) @@ -1042,18 +1042,20 @@ TCausale* TContabilizzazione::get_caus(const TDocumento& doc, const int year) co if (main_app().has_module(F9AUT, CHK_DONGLE)) { - const TString & tipodoc = doc.get(DOC_TIPODOCSDI); + const TString & tipodocsdi = doc.get(DOC_TIPODOCSDI); - if (tipodoc.full()) + if (tipodocsdi.full()) { + const TString & tipodoc_cont = cached_causale(doc.tipo().causale(), year).tipodoc(); + #ifdef NEW_FP - TClasse_doc * classe = __cats.tipo2class(tipodoc); + TClasse_doc * classe = __cats.tipo2class(tipodocsdi, tipodoc_cont); if (classe != nullptr) codcaus = classe->caus_cont(); #else - codcaus =__cats.tipo2caus_cont(tipodoc); + codcaus =__cats.tipo2caus_cont(tipodocsdi, tipodoc_cont); #endif } } @@ -1084,12 +1086,8 @@ TCausale* TContabilizzazione::get_caus(const TDocumento& doc, const int year) co codcaus = doc.tipo().causale(); // Istanzia la causale del documento corrente... } - if (_caus != nullptr && _caus->codice() == codcaus && _caus->reg().year() == year) - return _caus; - if (_caus != nullptr) - safe_delete(_caus); if (codcaus.full()) - _caus = new TCausale(codcaus, year); + _caus = (TCausale *) &cached_causale(codcaus, year); return _caus; } @@ -1176,7 +1174,7 @@ error_type TContabilizzazione::compile_head_mov(TDocumento& doc) _caus = get_caus(doc, data_reg.year()); _righe_iva->set_caus(_caus); - if (_caus == NULL || !_caus->ok()) + if (_caus == nullptr || !_caus->ok()) { _error = caus_error; return _error; @@ -1563,7 +1561,7 @@ error_type TContabilizzazione::compile_head_mov_re(TDocumento& doc) // Istanzia la causale del documento corrente... _caus = get_caus(doc, data_reg.year()); - if (_caus == NULL || !_caus->ok() || _caus->iva() != nessuna_iva) + if (_caus == nullptr || !_caus->ok() || _caus->iva() != nessuna_iva) { _error = causre_error; return _error; @@ -3424,11 +3422,14 @@ error_type TContabilizzazione::compile_head_anticipo(TDocumento& doc, const TMov TString descr; TString8 codcaus = doc.clifor().vendite().get(CFV_CODCAUSINC); + if (codcaus.blank()) codcaus = doc.tipo().caus_anticipo(); + const TDate datareg = movimento.curr().get_date(MOV_DATAREG); - if (!_caus->read(codcaus,datareg.year())) + _caus = (TCausale *) & cached_causale(codcaus, datareg.year()); + if (!_caus->ok()) return caus_ant_error; long nr = doc_contabilized(doc, true); @@ -4612,7 +4613,7 @@ void TContabilizzazione::display_error(TDocumento& doc) TToken_string msg(256, '.'); const TString4 numerazione = doc.numerazione(); const long numero = doc.numero(); - const char* causale = _caus == NULL ? "" : _caus->codice(); + const char* causale = _caus == nullptr ? "" : _caus->codice(); switch (_error) { @@ -4790,9 +4791,9 @@ void TContabilizzazione::display_error(TDocumento& doc) bool TContabilizzazione::sc_enabled(const TDate& data) const { bool rt = _sc_enabled; - if (_caus != NULL) + if (_caus != nullptr) rt &= _caus->saldaconto(data); - if (_clifo != NULL) + if (_clifo != nullptr) rt &= !_clifo->curr().get_bool(CLI_OCCAS); // Saldaconto solo se C/F non occasionale return rt; } @@ -4800,7 +4801,7 @@ bool TContabilizzazione::sc_enabled(const TDate& data) const bool TContabilizzazione::in_enabled() const { bool rt = _in_enabled; - if (_caus != NULL) + if (_caus != nullptr) rt &= _caus->intra(); return rt; } @@ -4879,12 +4880,6 @@ bool TContabilizzazione::elabora(TLista_documenti& doc_in, TLista_documenti& doc _nrow = 0; _total_docs = 0L; _data_reg = data_elab; - if (_caus != NULL) - { - delete _caus; - _caus = NULL; - } - if (interattivo) { _auto_data = true; @@ -5013,15 +5008,8 @@ bool TContabilizzazione::elabora(TLista_documenti& doc_in, TLista_documenti& doc } _viswin->add_line(""); - if (_caus != NULL) - { - delete _caus; - _caus = NULL; - } export_movimento(*_movimento, *_viswin); - delete _movimento; - _movimento = NULL; - + safe_delete(_movimento); // Let's free some valuable space if (!interattivo) doc_in.destroy(i, false);