diff --git a/ha/ha0500.cpp b/ha/ha0500.cpp index 52bd18f42..bdf12381b 100755 --- a/ha/ha0500.cpp +++ b/ha/ha0500.cpp @@ -68,43 +68,10 @@ bool THardy_elab_docs_mask::on_field_event(TOperable_field& o, TField_event e, l case F_ADATA: if ((e == fe_close || e == fe_modify) && !o.empty()) { - TDate d = o.get(); - if (d.ok()) - { - bool changed = false; - const int tc = get_int(F_TIPOCONTR); - if (tc != 8) // Non è nolo - { - const int m = d.month(); - const int r = m % 3; - if (r != 0) - { - d.set_month(m + 3 - r); - changed = true; - } - } - else - { - TDate da_data = d; - da_data.set_day(1); - set(F_DADATA, da_data); - } - - if (!d.is_end_month()) - { - d.set_end_month(); - changed = true; - } - if (changed) - o.set(d.string()); - - if (e == fe_close) - { - const TDate dal = get(F_DADATA); - if (dal.ok() && dal.year() != d.year()) - return error_box(TR("Le date devono appartenere allo stesso anno!")); - } - } + const TDate al = o.get(); + const TDate dal = get(F_DADATA); + if (dal.ok() && dal.year() != al.year()) + return error_box(TR("Le date devono appartenere allo stesso anno!")); } break; //in caso di elaborazione definitiva è obbligatorio.. @@ -464,6 +431,7 @@ int THardy_elab_docs::month_diff(const TDate& inizio, const TDate& fine) const bool THardy_elab_docs::aggiorna_contratto(const TRiga_documento& rdoc, TContratto_premi& contratto, TLog_report& log) { bool elaborato = false; + const bool definitivo = rdoc.get_char(RDOC_PROVV) == 'D'; const char tipo_contratto = contratto.tipo_contratto(); //parametri della riga fattura TString80 rdoc_codart = rdoc.get(RDOC_CODART); rdoc_codart.trim(); @@ -493,10 +461,13 @@ bool THardy_elab_docs::aggiorna_contratto(const TRiga_documento& rdoc, TContratt //cerca una riga anticipo da evadere sul contratto per aggiornare la somma restituita sull'anticipo if (rigacontratto->is_spese()) { - //la somma restituita deve essere incrementata per la qta di merce (caffè) che c'è sulla riga della fattura in esame... - //..moltiplicata per il premio che c'è nella riga di tipo merce del contratto in esame - const real reso = normalized_rdoc_qta * rigamerce_premio; - rigacontratto->add(RCA_2_RESO_CORRENTE, reso); + if (definitivo) // Non scrivo aaggiornamenti provvisori + { + //la somma restituita deve essere incrementata per la qta di merce (caffè) che c'è sulla riga della fattura in esame... + //..moltiplicata per il premio che c'è nella riga di tipo merce del contratto in esame + const real reso = normalized_rdoc_qta * rigamerce_premio; + rigacontratto->add(RCA_2_RESO_CORRENTE, reso); + } elaborato = true; break; } @@ -508,8 +479,11 @@ bool THardy_elab_docs::aggiorna_contratto(const TRiga_documento& rdoc, TContratt if (rigamerce->is_merce()) { const real bonus = normalized_rdoc_qta * rigamerce_premio; - rigamerce->add(RC_1_BONUS, bonus); - rigamerce->add(RDOC_QTA, normalized_rdoc_qta); //riscrive sul campo di appoggio del contratto + if (definitivo) // Non scrivo aaggiornamenti provvisori + { + rigamerce->add(RC_1_BONUS, bonus); + rigamerce->add(RDOC_QTA, normalized_rdoc_qta); //riscrive sul campo di appoggio del contratto + } elaborato = true; TString msg; @@ -541,8 +515,7 @@ bool THardy_elab_docs::deve_generare_nac(const TContratto_premi& contratto, cons return yes; } -//aggiorna, in base al documento in esame curr_doc, le somme restituite nelle righe di tipo verigh02 nei contratti validi.. -//..del cliente +//aggiorna, in base al documento in esame curr_doc, le somme restituite nelle righe di tipo verigh02 nei contratti validi word THardy_elab_docs::elabora_contratti(TDocumento& curr_doc, TArray& contratti_cliente, const TDate& data_fine, TLog_report& log) { const TDate datadoc = curr_doc.get(DOC_DATADOC); diff --git a/ha/ha2200.cpp b/ha/ha2200.cpp index bd83aa7f6..f42248160 100755 --- a/ha/ha2200.cpp +++ b/ha/ha2200.cpp @@ -406,6 +406,7 @@ TFatture_recordset::TFatture_recordset(bool nuovo) class THardy_esselunga_fat : public TSkeleton_application { TCodArtEsselunga_cache _cache_ca; + TCodArtEsselungaUM_cache _cache_um; protected: long genera_recordset(const TMask& mask, TISAM_recordset& recset); @@ -575,6 +576,14 @@ void THardy_esselunga_fat::add_recs_dettaglio(TFatture_recordset& fat, TDocument fat.set("DET.PRZUN2", rigadoc->prezzo(true, false)); fat.set("DET.IMPORTO", rigadoc->importo(true, false)); + const TString& tu = _cache_um.decode(codart); + const TString& cu = rigadoc->get(RDOC_UMQTA); + if (tu.full() && tu != cu) + { + fat.set("DET.UDMQCONS", "TU"); + fat.set("DET.UDMQFATT", "TU"); + } + fat.new_rec("DES"); fat.set("DES.DESCR", rigadoc->get(RDOC_DESCR)); diff --git a/ha/halib.cpp b/ha/halib.cpp index 45c695f20..09d5929c3 100755 --- a/ha/halib.cpp +++ b/ha/halib.cpp @@ -99,6 +99,24 @@ const TString& TCodArtEsselunga_cache::decode(const TString& codart) return *(const TString*)objptr(codart); } +TObject* TCodArtEsselungaUM_cache::key2obj(const char* key) +{ + TToken_string code(key); + TString80 codart; code.get(0, codart); + const TString& codcf = ini_get_string(CONFIG_DITTA, "ha", "Esselunga_CodEsselunga"); + TISAM_recordset codcorr("USE CODCORR\nSELECT CODCF=#CODCF\nFROM CODART=#COD\nTO CODART=#COD"); + codcorr.set_var("#COD", TVariant(codart)); + codcorr.set_var("#CODCF", TVariant(codcf)); + if (codcorr.move_first()) + return new TString4(codcorr.get(CODCORR_UM).as_string()); + return new TString4; +} + +const TString& TCodArtEsselungaUM_cache::decode(const TString& codart) +{ + return *(const TString*)objptr(codart); +} + ///////////////////////////////////////////////////////////// // Metodi di utility ///////////////////////////////////////////////////////////// diff --git a/ha/halib.h b/ha/halib.h index 63ca0c995..052f359b7 100755 --- a/ha/halib.h +++ b/ha/halib.h @@ -51,12 +51,19 @@ class TCodArtEsselunga_cache : public TCache { protected: virtual TObject* key2obj(const char* key); - public: const TString& decode(const TString& codart); - TCodArtEsselunga_cache() {} }; +class TCodArtEsselungaUM_cache : public TCache +{ +protected: + virtual TObject* key2obj(const char* key); +public: + const TString& decode(const TString& codart); +}; + + //---------------------------------------------------------- //metodi di utility //----------------------------------------------------------