Patch level : 12.0 1176

Files correlati     : ve0.exe ve1.exe ve5.exe ve6.exe

Commento:
L'autoevasione viene fatta indipendentemente dallo stato del documento che evade (bolla, fattura...)
aggiunta una segnalazione quanto si cerca di stornare ordini già in stato evaso

Interno:
la segnalazione è :
La quantità impostata (NR 3)è minore di quella\nrelativa ad ordini già evasi(NR 5)
per sistemare la situazione bisogna andare a spostare gli ordini in stato evaso in stato non evaso
This commit is contained in:
Alessandro Bonazzi 2022-07-10 19:56:48 +02:00
parent d2f68becc6
commit 1bad317f99
3 changed files with 40 additions and 0 deletions

View File

@ -1020,6 +1020,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);
void auto_evasione(const int nrow = -1);
void qta_evasa_auto_pack(const int nrow) { _qta_evasa_auto.destroy(nrow, true); }

View File

@ -3683,6 +3683,33 @@ void TDocumento::update_row_auto_qta(int nrow, real & qta, bool plus, bool inser
_qta_evasa_auto.destroy(nrow);
}
real TDocumento::qta_bloccata_auto_evasione(const int nrow)
{
real qta_bloccata;
TConsegna_ordini e(tipo().auto_evasione_elab());
const char stato_evaso = e.cstato_finale_doc_iniziale();
TToken_string rows(row(nrow).get(RDOC_ORIGINAL_ROWS), ',');
TToken_string qtas(row(nrow).get(RDOC_ORIGINAL_QTAROWS), ',');
int pos = 0;
FOR_EACH_TOKEN(rows, k)
{
TToken_string key(k);
const int anno = key.get_int(1);
const char provv = key.get_char(2);
const long num = key.get_long(3);
const TString codnum = key.get(0);
TDocumento d(provv, anno, codnum, num);
if (d.stato() >= stato_evaso)
qta_bloccata += qtas.get_real(pos);
pos++;
}
return qta_bloccata;
}
void TDocumento::auto_evasione(const int nrow)
{
if (tipo().auto_evasione())

View File

@ -2054,9 +2054,21 @@ bool TDocumento_mask::ss_notify( TSheet_field& ss, int r, KEY key )
if (doc.tipo().auto_evasione() && !__new_row)
{
const TCodice_articolo codart = ss.get_str_row_cell(r, FR_CODART);
const real qta_bloccata = doc.qta_bloccata_auto_evasione(r + 1);
const real qta = ss.get_real_row_cell(r, FR_QTA);
if (qta_bloccata > qta)
{
const TString & um = ss.get_str_row_cell(r, FR_UMQTA);
ss.set_row_cell(FR_QTA, qta_bloccata, r);
return ss.error_box(FR("La quantità impostata (%s %s)è minore di quella\nrelativa ad ordini già evasi(%s %s)"),
(const char *) um, (const char *) qta.stringa(),
(const char *)um, (const char *) qta_bloccata.stringa());
}
if (codart != m.codart())
doc.auto_evasione(r + 1);
}
__new_row = false;
riga.autosave(ss);