diff --git a/src/ve/velib.h b/src/ve/velib.h index 1dd8bb883..2f77c89ec 100755 --- a/src/ve/velib.h +++ b/src/ve/velib.h @@ -1026,7 +1026,7 @@ public: void update_row_auto_qta(int nrow, real & qta, bool plus = true, bool insert = false); bool check_auto_evasione() const { return _qta_evasa_auto.items() > 0; } - real TDocumento::qta_bloccata_auto_evasione(const int nrow); + real qta_bloccata_auto_evasione(const int nrow); void auto_evasione(const int nrow = -1); void qta_evasa_auto_pack(const int nrow) { _qta_evasa_auto.destroy(nrow, true); } diff --git a/src/ve/velib02.cpp b/src/ve/velib02.cpp index 30d6a3c20..40ea915c8 100755 --- a/src/ve/velib02.cpp +++ b/src/ve/velib02.cpp @@ -567,12 +567,37 @@ void TRiga_documento::update_orders(real qta, TToken_string & tipi, TToken_strin put(RDOC_DAPROVV, original_key.get()); put(RDOC_DANDOC, original_key.get()); put(RDOC_DAIDRIGA, original_key.get()); - saved.arr2tok(tok); + FOR_EACH_ARRAY_ITEM(saved_qta, i, qobj) + { + if (*((real *)qobj) == ZERO) + { + saved.destroy(i); + saved_qta.destroy(i); + } + } + saved.arr2tok(tok); put(RDOC_ORIGINAL_ROWS, tok); tok.cut(0); FOR_EACH_ARRAY_ITEM(saved_qta, i, sobj) tok.add(*((real *)sobj)); put(RDOC_ORIGINAL_QTAROWS, tok); + + static bool _in_update = false; + + if (!_in_update) + { + real qta = get_real(RDOC_QTA); + real qta_scar; + + FOR_EACH_ARRAY_ITEM(saved_qta, i, sobj) + qta_scar += *((real *)sobj); + if (qta_scar > qta) + { + _in_update = true; + update_orders(qta - qta_scar, tipi, stati, stato_aperto, stato_evaso); + _in_update = false; + } + } } } }