diff --git a/ve/velib.h b/ve/velib.h index 2221742ac..2d6c997d2 100755 --- a/ve/velib.h +++ b/ve/velib.h @@ -926,8 +926,8 @@ public: TCond_vendita & condv() const; void occ2mask(); - void cli2mask(); - void doc2mask(bool reload_clifo = true); + void cli2mask(bool force_load = false); + void doc2mask(bool reload_clifo = true, bool force_load = false); void mask2doc(); void update_giacenza(); diff --git a/ve/velib04.h b/ve/velib04.h index 1c8bee951..c11dac2d5 100755 --- a/ve/velib04.h +++ b/ve/velib04.h @@ -182,7 +182,8 @@ public: bool usa_data_consegna() const { return get_bool("B9"); } bool kill_descrizione_estesa() const { return get_bool("B10"); } bool calcola_scarti() const { return get_bool("B11"); } - const TString & num_riferimenti_in() const { return get("S11"); } + bool reload_prices() { return get_bool("B13"); } + const TString & num_riferimenti_in() const { return get("S11"); } int intestazioni_sheet() const { return get_int("I1"); } @@ -227,7 +228,6 @@ protected: public: bool nettifica() { return get_bool("B12"); } - bool reload_prices() { return get_bool("B13"); } virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out, const TDate& data_elab, bool interattivo = false); @@ -251,6 +251,7 @@ protected: virtual void add_rows(TRiga_documento & rout, TRiga_documento & rin) { rout += rin; } virtual void create_row(TDocumento& doc_out, const TRiga_documento & rin); virtual const TString & get_tipo_out(const TDocumento & doc_out) { return get("S8"); } + bool change_clifo() { return get_bool("B14"); } virtual void pre_process_input(TLista_documenti& doc_in) {} virtual void post_process_input(TLista_documenti& doc_out) {} virtual void post_process_output(TLista_documenti& doc_out) {} diff --git a/ve/velib04a.cpp b/ve/velib04a.cpp index 18fff7c8a..3fca43a5d 100755 --- a/ve/velib04a.cpp +++ b/ve/velib04a.cpp @@ -85,12 +85,12 @@ bool TFatturazione_bolle::doc_raggruppabili(const TDocumento& doc_in, const TDoc return doc_in.raggruppabile(doc_out, campi); } -void TFatturazione_bolle::create_row(TDocumento& doc_out, const TRiga_documento & rin) +void TFatturazione_bolle::create_row(TDocumento& doc_out, const TRiga_documento& rin) { TRiga_documento& rout = doc_out.new_row(); // ... crea una riga nuova e - doc_out.copy_data(rout, rin); // copiaci tutti i campi della riga sorgente. - rout.set_original_rdoc_key(rin); // memorizza il codice della riga originale + doc_out.copy_data(rout, rin); // copiaci tutti i campi della riga sorgente. + rout.set_original_rdoc_key(rin); // memorizza il codice della riga originale if (usa_data_consegna()) { @@ -159,6 +159,24 @@ bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out) if (gestione_riferimenti()) { + if (change_clifo()) + { + const int indsped = doc_in.get_int(DOC_CODINDSP); + if (indsped > 0) + { + const char t = doc_in.get_char(DOC_TIPOCFFATT); + const long codcf = doc_in.get_long(DOC_CODCFFATT); + TString16 kis; kis << t << '|' << codcf << '|' << indsped; + const TString& dest = cache().get(LF_INDSP, kis, IND_RAGSOC); + if (dest.full()) // crea una riga descrizione nuova per indirizzo di spedizione valido + { + TRiga_documento& rout = doc_out.new_row(); + rout.forza_sola_descrizione(); + rout.put(RDOC_DESCR, dest); + } + } + } + // Determina ed eventualmente crea la riga di riferimento const int riga_rif = riferimenti_in_testa() ? 1 : doc_out.physical_rows()+1; if (riga_rif > doc_out.physical_rows()) @@ -305,15 +323,15 @@ bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& do for (int id = 0; id < doc_in.items(); id++) { TDocumento& campione = doc_in[id]; - const TString8 orig_t(campione.get(DOC_TIPOCF)); + const char orig_t = campione.get_char(DOC_TIPOCF); const long orig_cod = campione.get_long(DOC_CODCF); - if (get_bool("B13")) + if (change_clifo()) { - const TString4 t(campione.get(DOC_TIPOCFFATT)); + const char t = campione.get_char(DOC_TIPOCFFATT); const long codcf = campione.get_long(DOC_CODCFFATT); - if (t.full()) + if (t > ' ') { campione.put(DOC_TIPOCF, t); if (interattivo) @@ -341,7 +359,7 @@ bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& do for (int i = 1; i <= rows; i++) { - TRiga_documento & rdoc = campione[i]; + TRiga_documento& rdoc = campione[i]; if (codesiva.full()) rdoc.put(RDOC_CODIVA, codesiva); @@ -367,8 +385,6 @@ bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& do } } - campione.set_riga_esenzione(); - } else { @@ -384,6 +400,8 @@ bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& do } } } + campione.set_riga_esenzione(); + const int tot = doc_out.items(); int od = tot; @@ -441,7 +459,7 @@ bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& do od = doc_out.add(new_doc); } - if (get_bool("B13")) + if (change_clifo()) { campione.put(DOC_TIPOCF, orig_t); campione.put(DOC_CODCF, orig_cod); @@ -472,9 +490,25 @@ bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& do td = tipo_cli.empty() ? tipo_out : tipo_cli; const TString& sconto = d.get(DOC_SCONTOPERC); d.put(DOC_SCONTOPERC, sconto); + if (change_clifo()) + { + const TString8 tipodoc(d.tipo().codice()); + TDocumento_mask m(tipodoc); + + if (reload_prices()) + { + const int rows = d.physical_rows(); + + for (int i = 1; i <= rows;i++) + d[i].zero(RDOC_CHECKED); + } + m.doc() = d; + m.doc2mask(true, true); + m.mask2doc(); + d = m.doc(); + } } post_process_output(doc_out); return tot > 0; } - - + diff --git a/ve/velib06.cpp b/ve/velib06.cpp index 5e457ba52..7f68df67d 100755 --- a/ve/velib06.cpp +++ b/ve/velib06.cpp @@ -740,7 +740,7 @@ void TDocumento_mask::occ2mask() check_field(F_STATOSP); } -void TDocumento_mask::cli2mask() +void TDocumento_mask::cli2mask(bool force_load) { TCli_for & c = doc().clifor(); @@ -762,7 +762,7 @@ void TDocumento_mask::cli2mask() const TRectype & ven_rec = c.vendite(); - if(!onload) + if(force_load || !onload) { short pos = id2pos(F_CODVAL); const TString16 codval = c.get(CLI_CODVAL); // Attenzione: Non usare TString& qui! @@ -1016,7 +1016,7 @@ void TDocumento_mask::reset_masks(const TString& tipo_doc) } } -void TDocumento_mask::doc2mask(bool reload_clifo) +void TDocumento_mask::doc2mask(bool reload_clifo, bool force_load) { TSheet_field& s = sfield(F_SHEET); s.destroy( ); @@ -1032,7 +1032,7 @@ void TDocumento_mask::doc2mask(bool reload_clifo) } if (reload_clifo) - cli2mask(); + cli2mask(force_load); const int righe = doc().physical_rows(); for (int i = 0; i < righe; i++)