From 6569293e0215458e9235a31487c36095e34aaf22 Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 9 Nov 2005 16:31:19 +0000 Subject: [PATCH] Patch level : 2.2 214 Files correlati : ve0.exe Ricompilazione Demo : [ ] Commento Bug 0000526 Se faccio una elaborazione che aggiunge al documento attuale e non ci sono la numerazione o l'anno ho le seguenti segnalazioni errate numerazione nulla o anno assente. Attenzione : Bisogna riprovare tutti i tipi di elaborazioni interattive git-svn-id: svn://10.65.10.50/trunk@13480 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ve/ve0100b.uml | 2 +- ve/velib06.cpp | 67 +++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 64 insertions(+), 5 deletions(-) diff --git a/ve/ve0100b.uml b/ve/ve0100b.uml index ea5e0343d..aeb17f3c1 100755 --- a/ve/ve0100b.uml +++ b/ve/ve0100b.uml @@ -130,7 +130,7 @@ END NUMBER F_ANNO_ELAB 4 BEGIN PROMPT 2 5 "Anno documento " - CHECKTYPE REQUIRED +// CHECKTYPE REQUIRED END LIST F_TIPOCF_ELAB 1 11 diff --git a/ve/velib06.cpp b/ve/velib06.cpp index 34e9376db..3f2f8a53e 100755 --- a/ve/velib06.cpp +++ b/ve/velib06.cpp @@ -2262,9 +2262,15 @@ int TElabora_mask::update_list() int items = 0; if (from_elab) + { items = _elab.select(elabs, tipo, stato,"","") ; + field(F_ANNO_ELAB).check_type(CHECK_REQUIRED); + } else + { + field(F_ANNO_ELAB).check_type(CHECK_NONE); items = _elab.select(elabs, tipo_elab, stato_elab, tipo, stato); + } TList_field & f = (TList_field &) field(F_ELAB); TToken_string codes; @@ -2313,7 +2319,7 @@ bool TElabora_mask::elabora() const long numdoc = field(F_NDOC_ELAB).active() ? get_long(F_NDOC_ELAB) : app_doc.get_long(DOC_NDOC); const bool update_header = get_bool(F_UPDATE_HEADER); - TDocumento* newdoc = new TDocumento(get(F_PROVV_ELAB)[0], get_int(F_ANNO_ELAB), get(F_CODNUM_ELAB), numdoc); +/* TDocumento* newdoc = new TDocumento(get(F_PROVV_ELAB)[0], get_int(F_ANNO_ELAB), get(F_CODNUM_ELAB), numdoc); TDocumento& d = *newdoc; if (numdoc <= 0) @@ -2355,8 +2361,8 @@ bool TElabora_mask::elabora() app_doc.put(DOC_DATADOC, datadoc); app_doc.put(DOC_DATAINSC, datainsc); app_doc.put(DOC_STATO, stato); - } - + } */ + const bool from_elab = !get_bool(F_TYPE); TElaborazione * e = curr_elab(); @@ -2372,6 +2378,39 @@ bool TElabora_mask::elabora() } if (from_elab) { + const char provv = get(F_PROVV_ELAB)[0]; + const int anno = get_int(F_ANNO_ELAB); + const TString16 codnum(get(F_CODNUM_ELAB)); + const TString16 tipo(get(F_TIPODOC_ELAB)); + const TString16 stato(get(F_STATODOC_ELAB)); + + if (anno == 0 || codnum.empty() || tipo.empty() || stato.empty()) + return false; + + TDocumento* newdoc = new TDocumento(provv, anno , codnum, numdoc); + TDocumento& d = *newdoc; + + if (numdoc <= 0) + { + TDocumento::copy_data(d.head(), app_doc.head()); + d.put(DOC_TIPODOC, tipo); + d.put(DOC_STATO, stato); + + const TDate datadoc = d.get_date(DOC_DATADOC); + const TDate datainsc = d.get_date(DOC_DATAINSC); + const bool equal = !datainsc.ok() || datadoc == datainsc; + + d.put(DOC_DATADOC, get(F_DATADOC_ELAB)); + if (equal) + d.zero(DOC_DATAINSC); + + const TTipo_documento & t = d.tipo(); + + if (t.mov_mag()) + d.put(DOC_CAUSMAG, t.caus_mov()); + else + d.zero(DOC_CAUSMAG); + } in.add(app_doc); out.add(d); if (e->elabora(in, out, TDate(TODAY), TRUE)) @@ -2385,6 +2424,8 @@ bool TElabora_mask::elabora() update_mask = TRUE; } } + delete newdoc; + } else { @@ -2401,6 +2442,24 @@ bool TElabora_mask::elabora() in.add(d); } + if (update_header) + { + const TString16 tipo_doc(app_doc.get(DOC_TIPODOC)); + const TString16 caus_mag(app_doc.get(DOC_CAUSMAG)); + const long movmag = app_doc.get_long(DOC_MOVMAG); + const TDate datadoc = app_doc.get_date(DOC_DATADOC); + const TDate datainsc = app_doc.get_date(DOC_DATAINSC); + const char stato = app_doc.stato(); + + TDocumento::copy_data(app_doc.head(), in[0].head()); + + app_doc.put(DOC_TIPODOC, tipo_doc); + app_doc.put(DOC_CAUSMAG, caus_mag); + app_doc.put(DOC_MOVMAG, movmag); + app_doc.put(DOC_DATADOC, datadoc); + app_doc.put(DOC_DATAINSC, datainsc); + app_doc.put(DOC_STATO, stato); + } if (e->elabora(in, out, TDate(TODAY), TRUE)) { if (out[0] != app_doc) @@ -2431,7 +2490,7 @@ bool TElabora_mask::elabora() } } - delete newdoc; +// delete newdoc; // Azzera l'anno in caso di ordini if (in.items() > 0 && in[0].is_ordine())