Patch level : 12.0 1014
Files correlati : ve0.exe ve1.exe ve5.exe ve6.exe f47.dir f47.trr Commento : Aggiunta chiave per CODPMS agli articoli Migliorata l'autoevasione ordini
This commit is contained in:
parent
169e9281af
commit
e81b6eb4af
@ -1,3 +1,3 @@
|
||||
47
|
||||
0
|
||||
$anamag|0|0|1121|0|Anagrafica di magazzino|NART||
|
||||
$anamag|0|0|1115|0|Anagrafica di magazzino|NART||
|
||||
|
@ -98,7 +98,8 @@ USER17|1|20|0|Campo libero 17
|
||||
USER18|1|20|0|Campo libero 18
|
||||
DATAAGG|5|8|0|
|
||||
UTENTE|1|16|0|
|
||||
3
|
||||
4
|
||||
CODART|
|
||||
UPPER(DESCR)|X
|
||||
GRMERC+CODART|
|
||||
GRMERC+CODART|X
|
||||
COD_PMS|X
|
||||
|
@ -420,6 +420,7 @@ public:
|
||||
const int revision_len() const { return get_int("I0"); }
|
||||
|
||||
const int tipo() const { return get_int("I1"); }
|
||||
TToken_string & tipi_doc() const;
|
||||
const TString& tipo_doc(int i) const;
|
||||
int ntipi_doc() const;
|
||||
int find_tipo_doc(const char* cod) const;
|
||||
@ -987,7 +988,7 @@ public:
|
||||
void auto_evasione(const int nrow = -1);
|
||||
void qta_evasa_auto_pack(const int nrow) { _qta_evasa_auto.destroy(nrow, true); }
|
||||
|
||||
int find_nrow(const char * tiporiga, const char * codice) const;
|
||||
int find_nrow(const char * tiporiga, const char * codice, int from = 1) const;
|
||||
TRiga_documento & find_row(const char * tiporiga, const char * codice);
|
||||
|
||||
TDocumento ();
|
||||
@ -1012,7 +1013,7 @@ public:
|
||||
for (TRiga_documento *__rdoc = ((TDocumento &)__doc).rowptr(__r); \
|
||||
__r > 0; __rdoc = ((TDocumento &)__doc).rowptr(--__r))
|
||||
|
||||
#define FOR_EACH_RDOC(_doc, __r, __row) \
|
||||
#define FOR_EACH_RDOC(__doc, __r, __rdoc) \
|
||||
const int nr##__r = ((TDocumento &)__doc).rows(); \
|
||||
int __r = 1; \
|
||||
for (TRiga_documento *__rdoc = ((TDocumento &)__doc).rowptr(__r); \
|
||||
|
@ -21,6 +21,17 @@ TCodice_numerazione::TCodice_numerazione(const TRectype& rec)
|
||||
TCodice_numerazione::~TCodice_numerazione()
|
||||
{ }
|
||||
|
||||
TToken_string & TCodice_numerazione::tipi_doc() const
|
||||
{
|
||||
TToken_string & tipi = get_tmp_string(256);
|
||||
int ntipi = ntipi_doc();
|
||||
|
||||
for (int i = 0; i < ntipi; i++)
|
||||
tipi.add(tipo_doc(i));
|
||||
return tipi;
|
||||
}
|
||||
|
||||
|
||||
const TString& TCodice_numerazione::tipo_doc(int i) const
|
||||
{
|
||||
CHECK(i < 36, "Impossibbile tipo documento");
|
||||
|
@ -344,21 +344,34 @@ void TRiga_documento::update_orders(real qta, TToken_string & tipi, TToken_strin
|
||||
TLista_documenti docs;
|
||||
TString_array saved;
|
||||
TString_array evaded;
|
||||
TArray saved_qta;
|
||||
TArray evaded_qta;
|
||||
TString_array to_delete;
|
||||
TToken_string original(get_original_rdoc_key(), ',');
|
||||
const TString & refs = get(RDOC_ORIGINAL_ROWS);
|
||||
TToken_string tok(get(RDOC_ORIGINAL_ROWS), ',');
|
||||
|
||||
if (refs.full())
|
||||
original.add(refs);
|
||||
saved.tok2arr(original, false);
|
||||
docs.read('D', _doc->get_char(DOC_TIPOCF), _doc->get_long(DOC_CODCF),
|
||||
year, tipi, stati, dadata, adata);
|
||||
|
||||
int ndocs = docs.items();
|
||||
saved.tok2arr(tok);
|
||||
tok = get(RDOC_ORIGINAL_QTAROWS);
|
||||
if (tok.full())
|
||||
FOR_EACH_TOKEN(tok, q)
|
||||
saved_qta.add(new real(q));
|
||||
|
||||
|
||||
int ndocs = docs.read('D', _doc->get_char(DOC_TIPOCF), _doc->get_long(DOC_CODCF),
|
||||
year, tipi, stati, dadata, adata);;
|
||||
|
||||
for (int i = 0; i < ndocs; i++)
|
||||
if (docs[i].find_nrow(tiporiga, codart) < 0)
|
||||
docs.destroy(i, false);
|
||||
else
|
||||
if (!storno)
|
||||
{
|
||||
bool to_delete = true;
|
||||
|
||||
for (int nrow = docs[i].find_nrow(tiporiga, codart); to_delete && nrow > 0; nrow = docs[i].find_nrow(tiporiga, codart, nrow + 1))
|
||||
to_delete &= docs[i][nrow].is_evasa();
|
||||
if (to_delete)
|
||||
docs.destroy(i, false);
|
||||
}
|
||||
docs.pack();
|
||||
if (storno)
|
||||
{
|
||||
@ -372,74 +385,127 @@ void TRiga_documento::update_orders(real qta, TToken_string & tipi, TToken_strin
|
||||
}
|
||||
docs.sort();
|
||||
}
|
||||
// docs->merge(actdocs);
|
||||
ndocs = docs.items();
|
||||
for (int i = storno ? ndocs - 1 : 0; qta_da_evadere > ZERO && (storno ? i >= 0 : i < ndocs); storno ? i-- : i++)
|
||||
for (int i = storno ? ndocs - 1 : 0; (qta_da_evadere > ZERO) && (storno ? i >= 0 : i < ndocs); storno ? i-- : i++)
|
||||
{
|
||||
TDocumento & d = docs[i];
|
||||
TRiga_documento & rdoc = d.find_row(tiporiga, codart);
|
||||
TToken_string rdoc_key = rdoc.get_rdoc_key();
|
||||
real qta_evasa = qta_da_evadere;
|
||||
bool riga_evasa = false;
|
||||
|
||||
if (storno)
|
||||
|
||||
for (int nrow = d.find_nrow(tiporiga, codart); (qta_da_evadere > ZERO) && nrow > 0; nrow = d.find_nrow(tiporiga, codart, nrow + 1))
|
||||
{
|
||||
const real & evaso = rdoc.qtaevasa();
|
||||
TRiga_documento & rdoc = d[nrow];
|
||||
|
||||
if (qta_evasa > evaso)
|
||||
if (!rdoc.is_evasa())
|
||||
{
|
||||
qta_evasa = evaso;
|
||||
to_delete.add(rdoc_key);
|
||||
TToken_string rdoc_key = rdoc.get_rdoc_key();
|
||||
real qta_evasa = qta_da_evadere;
|
||||
bool riga_evasa = false;
|
||||
|
||||
if (storno)
|
||||
{
|
||||
const real & evaso = rdoc.qtaevasa();
|
||||
|
||||
if (qta_evasa > evaso)
|
||||
{
|
||||
qta_evasa = evaso;
|
||||
to_delete.add(rdoc_key);
|
||||
}
|
||||
else
|
||||
{
|
||||
const int pos = saved.find(rdoc_key);
|
||||
|
||||
if (pos >= 0)
|
||||
{
|
||||
real *q = (real *)saved_qta.objptr(pos);
|
||||
|
||||
if (q == nullptr)
|
||||
evaded_qta.add(q = new real);
|
||||
*q -= qta_evasa;
|
||||
}
|
||||
}
|
||||
rdoc.sub(RDOC_QTAEVASA, qta_evasa);
|
||||
}
|
||||
else
|
||||
{
|
||||
const real & residuo = rdoc.qtaresidua();
|
||||
|
||||
if (residuo <= qta_da_evadere)
|
||||
{
|
||||
if (i < ndocs - 1)
|
||||
qta_evasa = residuo;
|
||||
riga_evasa = true;
|
||||
}
|
||||
rdoc.add(RDOC_QTAEVASA, qta_evasa);
|
||||
|
||||
const int saved_pos = saved.find(rdoc_key);
|
||||
|
||||
if (saved_pos >= 0)
|
||||
{
|
||||
real *q = (real *)saved_qta.objptr(saved_pos);
|
||||
|
||||
if (q == nullptr)
|
||||
evaded_qta.add(q = new real);
|
||||
*q += qta_evasa;
|
||||
}
|
||||
else
|
||||
{
|
||||
const int pos = evaded.add(rdoc_key);
|
||||
real *q = (real *)evaded_qta.objptr(pos);
|
||||
|
||||
if (q == nullptr)
|
||||
evaded_qta.add(q = new real);
|
||||
*q += qta_evasa;
|
||||
}
|
||||
}
|
||||
rdoc.put(RDOC_RIGAEVASA, riga_evasa);
|
||||
qta_da_evadere -= qta_evasa;
|
||||
}
|
||||
rdoc.sub(RDOC_QTAEVASA, qta_evasa);
|
||||
}
|
||||
else
|
||||
saved.merge_token(evaded);
|
||||
FOR_EACH_ARRAY_ITEM(evaded_qta, i, eobj)
|
||||
{
|
||||
const real & residuo = rdoc.qtaresidua();
|
||||
const int pos = saved.find(evaded.row(i));
|
||||
real *q = (real *)saved_qta.objptr(pos);
|
||||
|
||||
if (residuo <= qta_da_evadere )
|
||||
{
|
||||
if (i < ndocs - 1)
|
||||
qta_evasa = residuo;
|
||||
riga_evasa = true;
|
||||
}
|
||||
rdoc.add(RDOC_QTAEVASA, qta_evasa);
|
||||
evaded.add(rdoc_key);
|
||||
if (q == nullptr)
|
||||
saved_qta.add(q = new real);
|
||||
*q += *((real *)eobj);
|
||||
}
|
||||
FOR_EACH_ARRAY_ITEM(to_delete, i, riga)
|
||||
{
|
||||
const int pos = saved.find(*((TToken_string *)riga));
|
||||
|
||||
if (pos >= 0)
|
||||
{
|
||||
saved.destroy(pos);
|
||||
saved_qta.destroy(pos);
|
||||
}
|
||||
}
|
||||
rdoc.put(RDOC_RIGAEVASA, riga_evasa);
|
||||
qta_da_evadere -= qta_evasa;
|
||||
}
|
||||
saved.pack();
|
||||
for (int i = 0; i < ndocs; i++)
|
||||
if (docs[i].is_evaso())
|
||||
docs[i].stato(stato_evaso);
|
||||
docs[i].stato(stato_evaso);
|
||||
else
|
||||
if (docs[i].stato() == stato_evaso)
|
||||
docs[i].stato(stato_aperto);
|
||||
docs.rewrite();
|
||||
saved.merge_token(evaded);
|
||||
FOR_EACH_ARRAY_ITEM(to_delete, i, riga)
|
||||
{
|
||||
const int pos = saved.find(*((TToken_string *)riga));
|
||||
|
||||
if (pos >= 0)
|
||||
saved.destroy(pos);
|
||||
}
|
||||
saved.pack();
|
||||
|
||||
TToken_string original_key;
|
||||
|
||||
if (saved.items() > 0)
|
||||
{
|
||||
original_key = saved.row(0);
|
||||
saved.destroy(0, true);
|
||||
}
|
||||
|
||||
put(RDOC_DACODNUM, original_key.get(0));
|
||||
put(RDOC_DAANNO, original_key.get());
|
||||
put(RDOC_DAPROVV, original_key.get());
|
||||
put(RDOC_DANDOC, original_key.get());
|
||||
put(RDOC_DAIDRIGA, original_key.get());
|
||||
saved.arr2tok(original);
|
||||
put(RDOC_ORIGINAL_ROWS, original);
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3606,10 +3606,10 @@ void TDocumento::auto_evasione(const int nrow)
|
||||
}
|
||||
}
|
||||
|
||||
int TDocumento::find_nrow(const char * tiporiga, const char * codice) const
|
||||
int TDocumento::find_nrow(const char * tiporiga, const char * codice, int from) const
|
||||
{
|
||||
FOR_EACH_SELF_RDOC(i, rdoc)
|
||||
if ((rdoc->tipo().codice() == tiporiga) && (rdoc->codice() == codice))
|
||||
if ((i >= from) && (rdoc->tipo().codice() == tiporiga) && (rdoc->codice() == codice))
|
||||
return i;
|
||||
return -1;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user