From 99d53e8ffc9d33c5f953f7fb3ab9b4dd7b2f1a56 Mon Sep 17 00:00:00 2001 From: guy Date: Fri, 13 Dec 2013 09:42:36 +0000 Subject: [PATCH] Nuova preventivazione avanzata git-svn-id: svn://10.65.10.50/branches/R_10_00@22908 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- pe/pe1400.cpp | 249 +++++++++++++----- pe/pe1400.h | 7 + pe/pe1400.rep | 686 +++++++++++++++++-------------------------------- pe/pe1400a.uml | 1 + pe/pe1400b.uml | 314 ++++++++++++++++------ pe/pe1401.cpp | 10 +- pe/pe1500.cpp | 162 ++++++++++-- pe/pe1500.h | 14 +- pe/pe1600.cpp | 50 ++++ 9 files changed, 867 insertions(+), 626 deletions(-) create mode 100644 pe/pe1600.cpp diff --git a/pe/pe1400.cpp b/pe/pe1400.cpp index 36134ada1..e516b312f 100644 --- a/pe/pe1400.cpp +++ b/pe/pe1400.cpp @@ -1,6 +1,6 @@ -#include #include #include +#include #include #include #include @@ -16,6 +16,7 @@ #include "../db/rdist.h" #include "../mg/anamag.h" +#include "../ca/commesse.h" static real ricarico2perc(const TString& exp) { @@ -108,7 +109,7 @@ class TPreventivo_app : public TRelation_application TString8 _codelab; protected: - int save_rows(const TMask& m, bool re); + int save_rows(const TMask& m); virtual const char* extra_modules() const { return "ci"; } bool save_and_print(TPrtype mode); @@ -228,7 +229,7 @@ class TPreventivo_msk : public TAutomask { protected: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); - virtual TMask_field* TPreventivo_msk::parse_field(TScanner& s); + virtual TMask_field* parse_field(TScanner& s); public: int revision_length() const; @@ -241,10 +242,7 @@ public: TMask_field* TPreventivo_msk::parse_field(TScanner& s) { if (s.key() == "TL") - { - XI_OBJ* itf = xi_get_itf((XinWindow)page_win(1)); - xi_set_app_data2(itf, 0x1); // Full screen - } + set_full_screen_interface(page_win(1), true); return TAutomask::parse_field(s); } @@ -353,7 +351,21 @@ bool TPreventivo_msk::on_field_event(TOperable_field& o, TField_event e, long jo reset(F_NPREV); } break; - default: break; + default: + if ((e == fe_modify || e == fe_close) && (!o.empty() && o.is_edit())) + { + const TFieldref* fr = o.field(); + if (fr != NULL && fr->name() == RDOC_CODCMS) + { + TRelation rel(LF_RIGHEDOC); + o.mask().autosave(rel); + const TString& cms = rel.curr().get(RDOC_CODCMS); + const TRectype& rec = cache().get(LF_COMMESSE, cms); + if (rec.get_bool(COMMESSE_CHIUSA)) + return error_box(FR("Impossibile utilizzare la commesa chiusa %s"), (const char*)cms); + } + } + break; } return true; } @@ -402,7 +414,7 @@ private: bool on_misu_event(TOperable_field& o, TField_event e, long jolly); bool on_dist_event(TOperable_field& o, TField_event e, long jolly); - real get_costo(const TString& codart) const; + real get_costo(const TString& codart, TString& um, TString& iva) const; protected: virtual bool on_key(KEY k); @@ -439,6 +451,42 @@ TPreventivo_tree& TPreventivo_emsk::tree(bool reset) return *_tree; } +static bool set_and_check(TMask_field& f, const TRectype& rec) +{ + const TFieldref* fr = f.field(); + if (fr == NULL) + { + if (f.ghost()) + return f.on_hit(); + return false; + } + + if (fr->name() == RDOC_DESCR) + { + TString descr(255); + descr = rec.get(RDOC_DESCR); + if (rec.get_bool(RDOC_DESCLUNGA)) + descr << rec.get(RDOC_DESCEST); + f.set(descr); + } + else + { + f.set(fr->read(rec)); + if (!f.empty() && f.is_edit() && f.shown()) + { + const TBrowse* b = ((TEdit_field&)f).browse(); + if (b != NULL) + { + const TFixed_string of = b->get_output_fields(); + if (of.find('|') > 0) // C'è un pipe nell'output, per cui ci sono almeno due campi di output + f.check(STARTING_CHECK); + } + } + } + return true; +} + + // Riempie gli sheet di articoli e misure della distinta selezionata bool TPreventivo_emsk::set_dist(const TString& idd) { @@ -471,14 +519,7 @@ bool TPreventivo_emsk::set_dist(const TString& idd) TSheet_field& s = rec.get(RDOC_TIPORIGA) == t.tipo_dett() ? a : m; TMask& m = s.sheet_row_mask(n); FOR_EACH_MASK_FIELD(m, i, f) - { - const TFieldref* fr = f->field(); - if (fr != NULL) - { - f->set(fr->read(rec)); - f->check(STARTING_CHECK); - } - } + set_and_check(*f, rec); s.update_row(n++); } _locked = false; @@ -537,14 +578,7 @@ bool TPreventivo_emsk::set_fase(const TString& idfase) const TRectype& rec = *t.curr_row(); TMask& m = d.sheet_row_mask(n); FOR_EACH_MASK_FIELD(m, i, f) - { - const TFieldref* fr = f->field(); - if (fr != NULL) - { - f->set(fr->read(rec)); - f->check(STARTING_CHECK); - } - } + set_and_check(*f, rec); d.update_row(n++); } while (t.goto_rbrother()); } @@ -561,6 +595,27 @@ bool TPreventivo_emsk::msk2rec(const TMask& msk, TRectype& rec) const rel.curr() = rec; msk.autosave(rel); rec = rel.curr(); + const TString& desc = msk.get(RDOC_DESCR); + const int maxlen = rec.length(RDOC_DESCR); + int spc = desc.find('\n'); + if (spc >= 0 || desc.len() > maxlen) + { + if (spc < 0 || spc > maxlen) + { + spc = desc.left(maxlen).rfind(' '); + if (spc < maxlen/2) + spc = maxlen; + } + rec.put(RDOC_DESCR, desc.left(spc)); + rec.put(RDOC_DESCLUNGA, "X"); + rec.put(RDOC_DESCEST, desc.mid(spc)); + } + else + { + rec.put(RDOC_DESCR, desc); + rec.zero(RDOC_DESCLUNGA); + rec.put(RDOC_DESCEST, ""); + } return !rec.empty(); } @@ -819,15 +874,15 @@ bool TPreventivo_emsk::on_dist_event(TOperable_field& o, TField_event e, long jo case se_notify_modify: if (_edit_dist >= 0) { - TPreventivo_tree& t = tree(); - TRectype* rec = t.dist(_idfase, _edit_dist, true); + const int r = _edit_dist; // Memorizza numero riga corrente + _edit_dist = -1; // Annulla numero riga corrente + TRectype* rec = tree().dist(_idfase, r, true); if (rec != NULL) { - const TMask& m = ((TSheet_field&)o).sheet_row_mask(_edit_dist); + const TMask& m = ((TSheet_field&)o).sheet_row_mask(r); msk2rec(m, *rec); sync_tree(); } - _edit_dist = -1; } break; case se_notify_del: @@ -850,7 +905,7 @@ bool TPreventivo_emsk::on_dist_event(TOperable_field& o, TField_event e, long jo return true; } -real TPreventivo_emsk::get_costo(const TString& codart) const +real TPreventivo_emsk::get_costo(const TString& codart, TString& um, TString& iva) const { real costo = ZERO; const int tc = get_int(F_TIPOCOSTO); @@ -868,6 +923,10 @@ real TPreventivo_emsk::get_costo(const TString& codart) const } if (costo.is_zero()) costo = art.get_real(ANAMAG_COSTSTD); + + um = art.um().row(1).get(UMART_UM); + iva = art.get(ANAMAG_CODIVA); + return costo; } @@ -879,10 +938,15 @@ bool TPreventivo_emsk::on_dett_event(TOperable_field& o, TField_event e, long jo if (e == fe_modify && !o.empty() && !_locked) { const TString& codart = o.get(); - const TArticolo_giacenza& art = cached_article_balances(codart); - const real costo = get_costo(o.get()); - o.mask().set(105, costo, 0x3); - o.mask().set(104, art.first_um()); + TString4 um, iva; + const real costo = get_costo(codart, um, iva); + TMask& m = o.mask(); + if (um.full()) + m.set(S_UMART, um, 0x3); + if (iva.full() && m.get(S_CODIVA).blank()) + m.set(S_CODIVA, iva, 0x3); + if (!costo.is_zero()) + m.set(S_COSTO, costo, 0x3); } break; case F_ARTICOLI: @@ -909,16 +973,17 @@ bool TPreventivo_emsk::on_dett_event(TOperable_field& o, TField_event e, long jo case se_notify_modify: if (_edit_dett >= 0) { + const int r = _edit_dett; + _edit_dett = -1; TPreventivo_tree& t = tree(); - TRectype* rec = t.dett(_iddist, _edit_dett, true); + TRectype* rec = t.dett(_iddist, r, true); if (rec != NULL) { - const TMask& m = ((TSheet_field&)o).sheet_row_mask(_edit_dett); + const TMask& m = ((TSheet_field&)o).sheet_row_mask(r); msk2rec(m, *rec); sync_tree(); update_dist_costo(); } - _edit_dett = -1; } break; case se_notify_del: @@ -1137,7 +1202,19 @@ bool TPreventivo_emsk::on_field_event(TOperable_field& o, TField_event e, long j case DLG_ELABORA: if (e == fe_button) { - const TString& cod = pe_trova_elaborazione(*this); + const TString& cod = pe_trova_elaborazione(*this, 'O'); + if (cod.full()) + { + TPreventivo_app& relapp = (TPreventivo_app&)main_app(); + if (relapp.set_elab_code(cod)) + stop_run(K_SAVE); + } + } + break; + case DLG_ARCHIVE: + if (e == fe_button) + { + const TString& cod = pe_trova_elaborazione(*this, 'F'); if (cod.full()) { TPreventivo_app& relapp = (TPreventivo_app&)main_app(); @@ -1210,6 +1287,8 @@ TPreventivo_emsk::TPreventivo_emsk() : TPreventivo_msk("pe1400b"), _tree(NULL), bool TPreventivo_app::user_create() { + open_files(LF_TAB, LF_TABCOM, LF_CLIFO, + LF_DOC, LF_RIGHEDOC, LF_COMMESSE, LF_FASI, 0); _rel = new TRelation(LF_DOC); _qmsk = new TPreventivo_qmsk; _emsk = new TPreventivo_emsk; @@ -1310,20 +1389,43 @@ static bool tree_save_row(TTree& tree, void* jolly, word /*flags*/) const TRectype* rec = t.curr_row(); if (rec && !rec->empty() && rec->num() == LF_RIGHEDOC) { - const TString& descr = rec->get(RDOC_DESCR); const real costo = rec->get(RPRV_COSTO); const real price = rec->get(RDOC_PREZZO); + const TString& descr = rec->get(RDOC_DESCR); if (descr.full() || !costo.is_zero() || !price.is_zero()) { - TRecord_array& righe = *(TRecord_array*)jolly; - TRectype& row = righe.row(-1, true); + TDocumento& doc = *(TDocumento*)jolly; + const TString4 tiporiga = rec->get(RDOC_TIPORIGA); + TRectype& row = doc.new_row(tiporiga); + + const TString80 codart = rec->get(RDOC_CODART); + TString80 codartmag; + if (codart.full()) + codartmag = cache().get(LF_ANAMAG, codart, ANAMAG_CODART); + + for (int f = rec->items()-1; f > 5; f--) + { + const char* fld = rec->fieldname(f); + if (rec->type(fld) == _memofld) + break; + const TString& src = rec->get(fld); + if (src.full()) + { + const TString& dst = row.get(fld); + if (dst.blank()) + row.put(fld, src); + } + } + row.put(RDOC_IDRIGA, row.get(RDOC_NRIGA)); row.put(RDOC_TIPORIGA, rec->get(RDOC_TIPORIGA)); row.put(RDOC_QTA, rec->get(RDOC_QTA)); row.put(RDOC_DESCR, rec->get(RDOC_DESCR)); row.put(RDOC_DESCLUNGA, rec->get(RDOC_DESCLUNGA)); row.put(RDOC_DESCEST, rec->get(RDOC_DESCEST)); - row.put(RDOC_CODART, rec->get(RDOC_CODART)); + row.put(RDOC_CODART, codart); + row.put(RDOC_CODARTMAG, codartmag); + row.put(RDOC_CHECKED, codartmag.full()); row.put(RDOC_UMQTA, rec->get(RDOC_UMQTA)); row.put(RDOC_QTAGG1, rec->get(RDOC_QTAGG1)); row.put(RDOC_QTAGG2, rec->get(RDOC_QTAGG2)); @@ -1343,17 +1445,39 @@ static bool tree_save_row(TTree& tree, void* jolly, word /*flags*/) return false; // Don't stop scan } -int TPreventivo_app::save_rows(const TMask& m, bool re) +int TPreventivo_app::save_rows(const TMask& m) { TPreventivo_tree& tree = ((TPreventivo_emsk&)m).tree(); - TRectype* rkey = tree.new_row(pl_fase1); - TRecord_array rdoc(LF_RIGHEDOC, RDOC_NRIGA); - rdoc.set_key(rkey); + + TDocumento doc(get_relation()->curr()); + doc.destroy_rows(); if (tree.goto_root() && tree.goto_firstson()) - tree.scan_depth_first(tree_save_row, &rdoc); - int err = rdoc.write(re); + tree.scan_depth_first(tree_save_row, &doc); + + // Estrae campi analitica da maschera principale e li riporta sulle righe + TString cms, fas, cos; + FOR_EACH_MASK_FIELD(m, i, f) if (f->active() && f->is_edit() && f->dlg() >= F_CDC0) + { + const TFieldref* fref = f->field(); + if (fref != NULL) + { + if (fref->name() == DOC_CODCMS) + cms << f->get(); + if (fref->name() == DOC_FASCMS) + fas << f->get(); + if (fref->name() == DOC_CODCOSTO) + cos << f->get(); + } + } + + TRecord_array& rdoc = doc.body(); + rdoc.renum_key(RDOC_CODCMS, cms); + rdoc.renum_key(RDOC_FASCMS, fas); + rdoc.renum_key(RDOC_CODCOSTO, cos); + + const int err = doc.rewrite(get_relation()->file()); if (err == NOERR && _codelab.full()) - pe_genera_ordine(get_relation()->curr(), _codelab); + pe_genera_documento(doc, _codelab, 'O'); _codelab.cut(0); // Azzera in ogni caso l'elaborazione return err; @@ -1363,7 +1487,7 @@ int TPreventivo_app::write(const TMask& m) { int err = TRelation_application::write(m); if (err == NOERR) - err = save_rows(m, false); + err = save_rows(m); return err; } @@ -1371,7 +1495,7 @@ int TPreventivo_app::rewrite(const TMask& m) { int err = TRelation_application::rewrite(m); if (err == NOERR) - err = save_rows(m, true); + err = save_rows(m); return err; } @@ -1395,7 +1519,8 @@ bool TPreventivo_app::remove() void TPreventivo_app::update_tools(TMask& m) { const bool is_edit = m.edit_mode(); - const bool can_elab = is_edit && pe_trova_elaborazione(m).full(); + const bool can_ord = is_edit && pe_trova_elaborazione(m, 'O').full(); + const bool can_fab = is_edit && pe_trova_elaborazione(m, 'F').full(); bool can_print = is_edit; if (can_print) { @@ -1406,7 +1531,8 @@ void TPreventivo_app::update_tools(TMask& m) m.enable(DLG_COPY, is_edit); m.enable(DLG_NEWREC, is_edit); - m.enable(DLG_ELABORA, can_elab); + m.enable(DLG_ELABORA, can_ord); + m.enable(DLG_ARCHIVE, can_fab); m.enable(DLG_PRINT, can_print); m.enable(DLG_PREVIEW, can_print); m.disable(F_STATO); // Enable with F12 @@ -1442,16 +1568,23 @@ bool TPreventivo_app::save_and_print(TPrtype mode) << _emsk->get(F_ANNO) << " D " << _emsk->get(F_NDOC); switch (mode) { - case exportprinter: commandline << " E"; break; - case fileprinter : commandline << " P"; break; - case screenvis : commandline << " A"; break; - default : commandline << " S"; break; + case exportprinter: commandline << " E P"; break; + case fileprinter : commandline << " P P"; break; + case screenvis : commandline << " A P"; break; + default : commandline << " S D"; break; } - commandline << " P"; TExternal_app interattivo( commandline ); if (interattivo.run() == NOERR) { + TLocalisamfile& f = _rel->file(); + f.zero(); + f.put(DOC_PROVV, 'D'); + f.put(DOC_ANNO, _emsk->get(F_ANNO)); + f.put(DOC_CODNUM, _emsk->get(F_CODNUM)); + f.put(DOC_NDOC, _emsk->get(F_NDOC)); + f.read(); + curr_mask().set(F_STATO, f.get(DOC_STATO)); } already_printing = false; return true; diff --git a/pe/pe1400.h b/pe/pe1400.h index 1fa6f424a..376d7c0dd 100644 --- a/pe/pe1400.h +++ b/pe/pe1400.h @@ -38,6 +38,9 @@ #define F_CDC0 250 +#define F_CLIPOT 320 +#define F_RAGPOT 321 + #define F_FASI 400 #define F_DISTINTE 401 #define F_ARTICOLI 402 @@ -45,6 +48,10 @@ #define S_CODART 101 #define S_DESCR 102 +#define S_UMART 103 +#define S_COSTO 105 +#define S_PREZZO 106 +#define S_CODIVA 107 #define RPRV_COSTO "QTAGG5" #define RPRV_LEVEL "PRIORITY" diff --git a/pe/pe1400.rep b/pe/pe1400.rep index e6e2173a4..154e6a817 100644 --- a/pe/pe1400.rep +++ b/pe/pe1400.rep @@ -1,346 +1,238 @@ - + preventivo standard -
+
- - MESSAGE _PAGENO + + "ruffoa.jpg" - + + MESSAGE _CLIENTE,!RAGSOC + +
+
+ + "ruffoa.jpg" + + + + + + + + + + + + + + + + + + + + + + + + + 33.NOTE + + + + + + + + + 33.NOTE + + + MESSAGE ISAMREAD,122,CODAGE=#10,RAGSOC + + + + 33.NDOC[1,1] + + + + 33.NDOC[2,3] + + 33.DATADOC - + + 33.CODAG + + + MESSAGE _CLIENTE,COFI + + + MESSAGE _CLIENTE,PAIV + + - 33.NDOC + MESSAGE _CLIENTE,!RAGSOC - - MESSAGE _CLIENTE,COFI + + MESSAGE _CLIENTE,!INDNUM - - IF(33.CODVAL='','EURO',33.CODVAL) + + MESSAGE _CLIENTE,LOCALITACF - - 33.CODCF + + MESSAGE _CLIENTE,!CAP - - MESSAGE _CLIENTE,PAIV - - - 201@.S0 - - - 208@.S0 - - - 208@.S0 - - - 71 - 204@.S0 - - - - MESSAGE _CLIENTE,!RAGSOC - - - MESSAGE _CLIENTE,!INDNUM - - - MESSAGE _CLIENTE,LOCALITACF - - - MESSAGE _CLIENTE,!CAP - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 33.IVAXCASSA - -
  • -
  • - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + #REPORT.PAGE @ 1 = IF + "B0" HIDE +ELSE + "B0" SHOW +THEN + + + - + - + - + - + - + - + - - - - - - + + + + + + + + + + + + + + + + + +
  • - 34.TIPORIGA='01' + 34.TIPORIGA='P1' - + + + 34.CODART + + + MESSAGE _DESCRIGA - + + 34.UMQTA MESSAGE _ALIGN,#52,BOTTOM - + + 30 34.QTA MESSAGE _ALIGN,#52,BOTTOM - + + 29 34.PREZZO MESSAGE _ALIGN,#52,BOTTOM - + + 29 - 34.IMPNS + 34.QTA*34.PREZZO MESSAGE _ALIGN,#52,BOTTOM - - 34.CODIVA - MESSAGE _ALIGN,#52,BOTTOM - -
    34.TIPORIGA='05' - + + + 34.CODART - MON -1 -"34.PRIORITY" @ + 1 "34.PRIORITY" @ + 2 * 0 #THIS_FIELD SET_POS - + + MESSAGE _DESCRIGA
    -
    -
    +
    + 34.TIPORIGA='P2' + + + MESSAGE _DESCRIGA + + + + 34.QTA + MESSAGE _ALIGN,#52,BOTTOM + + + + 34.QTAGG1 + MESSAGE _ALIGN,#52,BOTTOM + + + + 34.QTAGG2 + MESSAGE _ALIGN,#52,BOTTOM + + + + 34.QTAGG3 + MESSAGE _ALIGN,#52,BOTTOM + +
    +
    + + + + 33.NDOC[1,1] + + + + + + + 33.NDOC[2,3] + + + + + + + #PAGE + + + + + + + #BOOKPAGES + + + + 210@.S0 + +
    +
    - - - #DOC.LIQDIFF @ -EMPTY= -NEGATE -#CLI.ALLEG @ -7 -C; -AND -IF -"IVA a esigibilit&#E0; differita ai sensi dell'art. 6 comma 5, del dpr n.633F;2973 e dell' art.7 legge 2F;2009" -#THIS ! -THEN - - - - #DOC.LIQDIFF @ -EMPTY= -NEGATE -#CLI.ALLEG @ -7 -C; -AND -IF -"IVA a esigibilit&#E0; differita ai sensi dell'art. 6 comma 5, del dpr n.633F;2973 e dell' art.7 legge 2F;2009" -#THIS ! -THEN - - - 31 - TOTMER - - - 33.SCONTOPERC - - - - 31 - SPESTRA - - - 31 - SPESIMB - - - 31 - 33.IMPPAGATO - - - MESSAGE _RIEPILOGOIVA,1,COD,0 - - - 31 - MESSAGE _RIEPILOGOIVA,1,IMP,0 - - - MESSAGE _RIEPILOGOIVA,1,ALI,0 - - - 31 - MESSAGE _RIEPILOGOIVA,1,IVA,1 - - - MESSAGE _RIEPILOGOIVA,1,COD,0 - - - 31 - MESSAGE _RIEPILOGOIVA,1,IMP,0 - - - MESSAGE _RIEPILOGOIVA,1,ALI,0 - - - 31 - MESSAGE _RIEPILOGOIVA,1,IVA,1 - - - MESSAGE _RIEPILOGOIVA,1,COD,0 - - - 31 - MESSAGE _RIEPILOGOIVA,1,IMP,0 - - - MESSAGE _RIEPILOGOIVA,1,ALI,0 - - - 31 - MESSAGE _RIEPILOGOIVA,1,IVA,1 - - - 31 - MESSAGE _RIEPILOGOIVA,30,IMP,0 - - - MESSAGE _RIEPILOGOIVA,30,COD,0 - - - MESSAGE _RIEPILOGOIVA,30,DES,1 - - - 31 - MESSAGE _RIEPILOGOIVA,30,IMP,0 - - - MESSAGE _RIEPILOGOIVA,30,COD,0 - - - MESSAGE _RIEPILOGOIVA,30,DES,1 - - - 31 - IMPONIBILI - - - 31 - IMPOSTE - - - - - - - 31 - TOTDOC - - - 31 - 33.IMPPAGATO - MESSAGE SUB,138 - - - 31 - - - MESSAGE _SCADENZE,DATA,0 - - - 31 - MESSAGE _SCADENZE,IMPORTO,1 - - - MESSAGE _SCADENZE,DATA,0 - - - 31 - MESSAGE _SCADENZE,IMPORTO,1 - - - MESSAGE _SCADENZE,DATA,0 - - - 31 - MESSAGE _SCADENZE,IMPORTO,1 - - - MESSAGE _SCADENZE,DATA,0 - - - 31 - MESSAGE _SCADENZE,IMPORTO,1 - - - MESSAGE _SCADENZE,DATA,0 - - - 31 - MESSAGE _SCADENZE,IMPORTO,1 -
    USE 33 JOIN 34 INTO CODNUM==CODNUM ANNO==ANNO PROVV==PROVV NDOC==NDOC @@ -553,6 +323,8 @@ JOIN 17 TO 33 INTO TIPOCF==TIPOCF CODCF==CODCF JOIN 20 TO 33 INTO TIPOCF==TIPOCF CODCF==CODCF JOIN 16 TO 33 INTO TIPOCF==TIPOCF CODCF==CODCF CODIND==CODINDSP JOIN 16 TO 17 ALIAS 116 INTO TIPOCF==TIPOCF CODCF==CODCF CODIND==CODINDSP +JOIN 18 TO 33 INTO CFPI==OCFPI +JOIN 13 TO 18 INTO COM==COM STATO==STATO JOIN 47 TO 34 INTO CODART==CODART JOIN %CPG TO 33 ALIAS 201 INTO CODTAB==CODPAG JOIN 122 TO 33 INTO CODAGE==CODAG diff --git a/pe/pe1400a.uml b/pe/pe1400a.uml index 8772f4568..30b76ffab 100644 --- a/pe/pe1400a.uml +++ b/pe/pe1400a.uml @@ -124,6 +124,7 @@ BEGIN OUTPUT F_RAGSOC LF_CLIFO->RAGSOC OUTPUT F_NDOC LF_DOC->NDOC CHECKTYPE NORMAL + ADD RUN cg0 -1 END STRING F_RAGSOC 50 diff --git a/pe/pe1400b.uml b/pe/pe1400b.uml index fa94d8f76..0548c2b02 100644 --- a/pe/pe1400b.uml +++ b/pe/pe1400b.uml @@ -37,7 +37,13 @@ END BUTTON DLG_ELABORA 2 2 BEGIN - PROMPT 1 2 "Elabora" + PROMPT 1 2 "Ordine" + PICTURE TOOL_ELABORA +END + +BUTTON DLG_ARCHIVE 2 2 +BEGIN + PROMPT 1 2 "Fabbisogno" PICTURE TOOL_ELABORA END @@ -66,13 +72,13 @@ ENDPAGE PAGE "Preventivi" 0 0 0 0 -GROUPBOX DLG_NULL 78 6 +GROUPBOX -1 78 6 BEGIN PROMPT 1 0 "@bPreventivo" END -LIST F_PROVV 1 12 -BEGIN +LIST 201 1 12 + BEGIN PROMPT 69 69 "" ITEM "D|Definitivi" ITEM "P|Provvisori" @@ -81,7 +87,7 @@ BEGIN KEY 1 END -NUMBER F_ANNO 4 +NUMBER 202 4 BEGIN PROMPT 2 1 "Anno " FLAGS "D" @@ -90,25 +96,25 @@ BEGIN KEY 1 END -STRING F_CODNUM 4 +STRING 203 4 BEGIN PROMPT 2 2 "Numerazione " USE %NUM FLAGS "DGU" - INPUT CODTAB F_CODNUM - OUTPUT F_DESNUM S0 + INPUT CODTAB 203 + OUTPUT 204 S0 CHECKTYPE REQUIRED FIELD CODNUM KEY 1 END -STRING F_DESNUM 50 +STRING 204 50 BEGIN PROMPT 24 2 "" FLAGS "D" END -NUMBER F_NDOC 7 +NUMBER 209 7 BEGIN PROMPT 24 1 "Numero documento " FLAGS "DG" @@ -117,81 +123,81 @@ BEGIN KEY 1 END -STRING F_STATO 1 +STRING 210 1 BEGIN PROMPT 53 1 "Stato " USE %STD - INPUT CODTAB F_STATO + INPUT CODTAB 210 DISPLAY "Codice" CODTAB DISPLAY "Descrizione@50" S0 - OUTPUT F_STATO CODTAB + OUTPUT 210 CODTAB CHECKTYPE NORMAL FIELD STATO FLAGS "DG" END -STRING F_TIPODOC 4 +STRING 205 4 BEGIN PROMPT 2 3 "Tipo " FLAGS "H" FIELD TIPODOC USE %TIP - INPUT CODTAB F_TIPODOC - OUTPUT F_DESTIPO S0 + INPUT CODTAB 205 + OUTPUT 206 S0 CHEKCTYPE NORMAL END -STRING F_DESTIPO 50 +STRING 206 50 BEGIN PROMPT 24 3 "" FLAGS "H" END -NUMBER F_NPREV 7 +NUMBER 207 7 BEGIN PROMPT 2 3 "Preventivo " FLAGS "D" END -NUMBER F_NREV 2 -BEGIN +NUMBER 208 2 + BEGIN PROMPT 24 3 "Revisione " FLAGS "DZ" END -DATE F_DATADOC +DATE 211 BEGIN PROMPT 46 3 "Data " FLAGS "A" FIELD DATADOC CHECKTYPE REQUIRED -END + END -STRING F_NUMDOCRIF 7 -BEGIN +STRING 236 7 + BEGIN PROMPT 2 4 "Documento di riferimento " FIELD NUMDOCRIF END -DATE F_DATADOCRIF +DATE 237 BEGIN PROMPT 36 4 "del " FIELD DATADOCRIF END -GOLEM F_OGGETTI 10 2 +GOLEM 238 10 2 BEGIN PROMPT 64 3 "" FIELD COLL_GOLEM FLAGS "M" END -GROUPBOX DLG_NULL 78 9 +GR -1 78 7 BEGIN PROMPT 1 6 "@bCliente" END -LIST DLG_NULL 1 7 +LISTBOX -1 1 7 BEGIN PROMPT 68 68 "Tipo " ITEM "C|Cliente" @@ -206,7 +212,7 @@ BEGIN INPUT TIPOCF "C" INPUT CODCF F_CLIFO DISPLAY "Cliente" CODCF - DISPLAY "Ragione Sociale@50" LF_CLIFO->RAGSOC + DISPLAY "Ragione Sociale@50" RAGSOC DISPLAY "Partita IVA@12" PAIV DISPLAY "Codice Fiscale@16" COFI DISPLAY "Sospeso@C" SOSPESO @@ -216,8 +222,10 @@ BEGIN OUTPUT F_STATOPAIV STATOPAIV OUTPUT F_PAIV PAIV OUTPUT F_COFI COFI - CHECKTYPE REQUIRED + CHECKTYPE NORMAL FIELD CODCF + ADD RU cg0 -1 C + MESSAGE COPY,10@ END STRING F_RAGSOC 50 @@ -232,7 +240,9 @@ BEGIN DISPLAY "Codice Fiscale@16" COFI DISPLAY "Sospeso@C" SOSPESO COPY OUTPUT F_CLIFO - CHECKTYPE REQUIRED + CHECKTYPE NORMAL + ADD RUN cg0 -1 C + MESSAGE COPY,10@ END STRING F_RICALT 30 @@ -252,7 +262,7 @@ END STRING F_STATOPAIV 2 BEGIN PROMPT 52 8 "Stato CEE " - HELP "Codice ISO dello stato" + HE "Codice ISO dello stato" FLAGS "U" USE %SCE INPUT CODTAB F_STATOPAIV @@ -274,8 +284,8 @@ BEGIN DISPLAY "Ragione sociale@50" RAGSOC DISPLAY "Partita IVA@12" PAIV DISPLAY "Sospeso@C" SOSPESO - COPY OUTPUT F_CLIFO - HELP "Codice fiscale del cliente/fornitore" + CO OUTPUT F_CLIFO + HE "Codice fiscale del cliente/fornitore" END STRING F_PAIV 12 @@ -291,85 +301,115 @@ BEGIN DISPLAY "Ragione sociale@50" RAGSOC DISPLAY "Codice fiscale@16" COFI DISPLAY "Sospeso@C" SOSPESO - COPY OUTPUT F_CLIFO - HELP "Partita IVA del cliente/fornitore" - VALIDATE PI_FUNC F_STATOPAIV + CO OUTPUT F_CLIFO + HE "Partita IVA del cliente/fornitore" + VA 2 1 F_STATOPAIV END -ZOOM F_NOTE 62 + +STRING F_CLIPOT 7 BEGIN - PROMPT 2 10 "Oggetto " + PROMPT 2 10 "Potenz. Cliente" + USE LF_OCCAS + INPUT CFPI F_CLIPOT + DISPLAY "Codice@20" CFPI + DISPLAY "Ragione Sociale@50" RAGSOC + OUTPUT F_CLIPOT CFPI + OUTPUT F_RAGPOT RAGSOC + CHECKTYPE NORMAL + FIELD OCFPI + ADD RU cg0 -6 +END + +STRING F_RAGPOT 45 +BEGIN + PROMPT 29 10 "" + USE LF_OCCAS KEY 2 + INPUT RAGSOC F_RAGPOT + DISPLAY "Ragione Sociale@50" RAGSOC + DISPLAY "Codice@20" CFPI + COPY OUTPUT F_CLIPOT + ADD RUN cg0 -6 +END + +GROUPBOX -1 78 7 +BEGIN + PROMPT 1 13 "@bDati Commerciali" +END + +ZOOM 226 62 +BEGIN + PROMPT 2 14 "Oggetto " FIELD NOTE END -STRING F_CODPAG 4 +STRING 227 4 BEGIN - PROMPT 2 11 "Pagamento " + PROMPT 2 15 "Pagamento " USE %CPG - INPUT CODTAB F_CODPAG + INPUT CODTAB 227 DISPLAY "Codice" CODTAB DISPLAY "Descrizione@50" S0 - OUTPUT F_CODPAG CODTAB - OUTPUT F_DESPAG S0 + OUTPUT 227 CODTAB + OUTPUT 228 S0 CHECKTYPE NORMAL FIELD CODPAG -END - -STRING F_DESPAG 50 -BEGIN - PROMPT 24 11 "" + END + STRING 228 50 + BEGIN + PROMPT 24 15 "" USE %CPG KEY 2 - INPUT S0 F_DESPAG + INPUT S0 228 DISPLAY "Descrizione@50" S0 DISPLAY "Codice" CODTAB - COPY OUTPUT F_CODPAG + CO OUTPUT 227 CHECKTYPE NORMAL END -STRING F_CODLIS 4 +STRING 229 4 BEGIN - PROMPT 2 12 "Listino " + PROMPT 2 16 "Listino " FLAGS "U" - USE LF_CONDV + USE 52 INPUT TIPO "L" INPUT CATVEN "" - INPUT COD F_CODLIS + INPUT COD 229 DISPLAY "Codice" COD DISPLAY "Descrizione@50" DESCR DISPLAY "Inizio@10" VALIN DISPLAY "Fine@10" VALFIN - OUTPUT F_CODLIS COD - OUTPUT F_DESLIS DESCR + OUTPUT 229 COD + OUTPUT 230 DESCR ADD RUN ve2 -1 L CHECKTYPE NORMAL FIELD CODLIST END -STRING F_DESLIS 50 +STRING 230 50 BEGIN - PROMPT 24 12 "" - USE LF_CONDV KEY 2 + PROMPT 24 16 "" + USE 52 KEY 2 INPUT TIPO "L" INPUT CATVEN "" - INPUT DESCR F_DESLIS + INPUT DESCR 230 DISPLAY "Descrizione@50" DESCR DISPLAY "Codice" COD DISPLAY "Inizio@10" VALIN DISPLAY "Fine@10" VALFIN - COPY OUTPUT F_CODLIS + CO OUTPUT 229 CHECKTYPE NORMAL - ADD RUN ve2 -1 L + ADD RU ve2 -1 L END -STRING F_RICARICO 25 +STRING 234 25 BEGIN - PROMPT 2 13 "Ricarico " + PROMPT 2 17 "Ricarico " FIELD SCONTOPERC END -LIST F_TIPOCOSTO 1 25 +LIST 235 1 25 BEGIN - PROMPT 43 13 "Costo " + PROMPT 43 17 "Costo " ITEM "0|" ITEM "1|Ultimo costo" ITEM "2|Media costi" @@ -379,9 +419,39 @@ BEGIN FIELD CODNOTE END -GROUPBOX F_CDC0 78 6 +STRING 128 5 BEGIN - PROMPT 1 15 "@bAnalitica" + PROMPT 2 18 "Responsabile" + FLAGS "UZ" + CHECKTYPE NORMAL + FIELD CODAG + USE 122 + INPUT CODAGE 128 + DISPLAY "Codice" CODAGE + DISPLAY "Descrizione@50" RAGSOC + OUTPUT 128 CODAGE + OUTPUT 353 RAGSOC + CHECKTYPE NORMAL + ADD RU pr0 -4 +END + +STRING 353 50 +BEGIN + PROMPT 24 18 "" + FLAGS "" + CHECKTYPE NORMAL + USE 122 KEY 2 + INPUT RAGSOC 353 + DISPLAY "Descrizione@50" RAGSOC + DISPLAY "Codice" CODAGE + OUTPUT 128 CODAGE + OUTPUT 353 RAGSOC + ADD RUN pr0 -4 +END + +GROUPBOX F_CDC0 78 3 +BEGIN + PROMPT 1 20 "@bAnalitica" END ENDPAGE @@ -457,23 +527,32 @@ END SPREADSHEET F_DISTINTE 0 11 BEGIN PROMPT 65 0 "" - ITEM "Distinta@20" - ITEM "Descrizione@50" - ITEM "U.M." - ITEM "Quantità@9" - ITEM "Costo@16R" - ITEM "Prezzo@16R" + IT "Voce Elenco Prezzi@20" + IT "Descrizione@50" + IT "U.M." + IT "Quantità@9" + IT "Costo@16R" + IT "Prezzo@16R" + IT "IVA" + IT "Data inizio@10" + IT "Data fine@10" + IT "ID@6" + IT "Legame@6" + IT "Tipo\nleg.@4" + IT "Tot. Ricavi@16" + IT "Tot. Costi@16" END SPREADSHEET F_ARTICOLI 0 7 BEGIN PROMPT 65 11 "" - ITEM "Articolo@20" + ITEM "Voce Analisi@20" ITEM "Descrizione@50" ITEM "U.M." ITEM "Quantità@9R" ITEM "Costo@16R" ITEM "Prezzo@16R" + ITEM "IVA" END SPREADSHEET F_MISURE @@ -490,7 +569,7 @@ ENDPAGE ENDMASK -PAGE "Distinta" -1 -1 65 6 +PAGE "Distinta" -1 -1 65 9 STRING 101 20 BEGIN @@ -504,7 +583,6 @@ BEGIN OUTPUT 101 CODDIST OUTPUT 102 DESCR OUTPUT 103 UM - OUTPUT 105 PREZZO CHEKTYPE SEARCH ADD RUN db0 -4 FIELD CODART @@ -554,6 +632,71 @@ BEGIN FIELD PREZZO END +STRING 107 4 +BEGIN + PROMPT 1 4 "IVA " + USE %IVA + INPUT CODTAB 107 + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT 107 CODTAB + CHECKTYPE NORMAL + FIELD CODIVA +END + +DATE 108 +BEGIN + PROMPT 1 5 "Inizio attività " + FIELD DATAINIATT +END + +DATE 109 +BEGIN + PROMPT 35 5 "Fine attività " + FIELD DATAFINATT +END + +NUMBER 110 6 +BEGIN + PROMPT 1 6 "ID " + FIELD IDRIGA + FLAGS "D" +END + +NUMBER 111 6 +BEGIN + PROMPT 15 6 "Legame " + FIELD IDRIGACOLL +END + +LIST 112 1 15 +BEGIN + PROMPT 35 6 "Tipo legame " + ITEM "0|Nessuno" + ITEM "1|Fine-Inizio" + ITEM "2|Fine-Fine" + ITEM "3|Inizio-Inizio" + ITEM "4|Inizio-Fine" + FIELD TIPOCOLL +END + +NUMBER 113 16 2 +BEGIN + PROMPT 1 7 "Tot. Ricavi" + FLAGS "DG" + VALIDATE 14 1 #104*#106 + DRIVENBY 104 106 +END + +NUMBER 114 16 2 +BEGIN + PROMPT 35 7 "Tot. Costi" + FLAGS "DG" + VALIDATE 14 1 #104*#105 + DRIVENBY 104 105 +EN + + ENDPAGE TOOLBAR "" 0 0 0 2 @@ -582,9 +725,11 @@ STRING 101 20 BEGIN PROMPT 1 1 "Articolo " USE LF_ANAMAG + JOIN LF_UMART INTO CODART==CODART INPUT CODART 101 DISPLAY "Codice@20" CODART DISPLAY "Descrizione@50" DESCR + DISPLAY "U.M." LF_UMART->UM OUTPUT 101 CODART OUTPUT 102 DESCR CHEKTYPE NORMAL @@ -596,9 +741,11 @@ STRING 102 50 BEGIN PROMPT 1 2 "Descriz. " USE LF_ANAMAG KEY 2 + JOIN LF_UMART INTO CODART==CODART INPUT DESCR 102 DISPLAY "Descrizione@50" DESCR DISPLAY "Codice@20" CODART + DISPLAY "U.M." LF_UMART->UM COPY OUTPUT 101 FIELD DESCR ADD RUN ve2 -3 @@ -636,6 +783,17 @@ BEGIN FIELD PREZZO END +STRING 107 4 +BEGIN + PROMPT 45 4 "IVA " + USE %IVA + INPUT CODTAB 107 + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT 107 CODTAB + CHECKTYPE NORMAL + FIELD CODIVA +END ENDPAGE diff --git a/pe/pe1401.cpp b/pe/pe1401.cpp index 5a5ad066e..de4d9c883 100644 --- a/pe/pe1401.cpp +++ b/pe/pe1401.cpp @@ -253,9 +253,11 @@ TFieldtypes TPreventivo_tree::get_var(const TString& name, TVariant& var) const } else if (name == RDOC_DESCR) { - TString80 str = m.get(F_NOTE); + TString str = m.get(F_NOTE); if (str.blank()) get_description(str); + const int spc = str.find('\n'); + if (spc > 0) str.cut(spc); var = str; ft = _alfafld; } else @@ -408,8 +410,8 @@ TPreventivo_tree::TPreventivo_tree(TTree_field& owner) : _owner(owner) { // Legge i tipi riga standard per determinare i nodi dell'albero _strFasi = ini_get_string(CONFIG_DITTA, "pe", "TipoRigaFase", "05"); - _strDist = ini_get_string(CONFIG_DITTA, "pe", "TipoRigaDist", "01"); - _strDett = ini_get_string(CONFIG_DITTA, "pe", "TipoRigaDett", "04"); - _strMisu = ini_get_string(CONFIG_DITTA, "pe", "TipoRigaMisu", "09"); + _strDist = ini_get_string(CONFIG_DITTA, "pe", "TipoRigaDist", "P1"); + _strDett = ini_get_string(CONFIG_DITTA, "pe", "TipoRigaDett", "01"); + _strMisu = ini_get_string(CONFIG_DITTA, "pe", "TipoRigaMisu", "P2"); } diff --git a/pe/pe1500.cpp b/pe/pe1500.cpp index ae15e513a..f97afcbb2 100644 --- a/pe/pe1500.cpp +++ b/pe/pe1500.cpp @@ -6,10 +6,12 @@ class TOrdinazione : public TElaborazione_esterna { + TString4 _strFasi, _strDist; + public: virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out, const TDate& data_elab, bool interattivo = false); - TOrdinazione(const TString& cod) : TElaborazione_esterna(cod) { } + TOrdinazione(const TString& cod); }; bool TOrdinazione::elabora(TLista_documenti& doc_in, TLista_documenti& doc_out, @@ -23,29 +25,38 @@ bool TOrdinazione::elabora(TLista_documenti& doc_in, TLista_documenti& doc_out, { TDocumento* doc = new TDocumento('D', data_elab.year(), codice_numerazione_finale(), 0L); doc->put(DOC_TIPODOC, tipo_finale()); - doc->put(DOC_STATO, stato_finale()); doc_out.add(doc); } TDocumento& din = doc_in[i]; TDocumento& don = doc_out[i]; - don.put(DOC_TIPOCF, din.get(DOC_TIPOCF)); - don.put(DOC_CODCF, din.get(DOC_CODCF)); - don.put(DOC_DATADOC, data_elab); - don.put(DOC_NOTE, din.get(DOC_NOTE)); - don.put(DOC_CODCMS, din.get(DOC_CODCMS)); + din.put(DOC_STATO, stato_finale_doc_iniziale()); + + don.put(DOC_TIPOCF, din.get(DOC_TIPOCF)); + don.put(DOC_CODCF, din.get(DOC_CODCF)); + don.put(DOC_DATADOC, data_elab); + don.put(DOC_NOTE, din.get(DOC_NOTE)); + don.put(DOC_CODCMS, din.get(DOC_CODCMS)); + don.put(DOC_STATO, stato_finale()); + don.put(DOC_NUMDOCRIF, din.get(DOC_NDOC)); + don.put(DOC_DATADOCRIF, din.get(DOC_DATADOC)); TLocalisamfile fasi(LF_FASI); const TMultilevel_code_info cfg_fasi(LF_FASI); TString16 fase; + const int nrows = din.rows(); FOR_EACH_PHYSICAL_RDOC(din, r, rdoc) { - if (rdoc->is_descrizione()) + const TString& tr = rdoc->get(RDOC_TIPORIGA); + if (tr == _strFasi) { - TRiga_documento& rout = don.new_row(rdoc->get(RDOC_TIPORIGA)); + if (r >= nrows || din[r+1].is_descrizione()) + continue; // Salta fasi vuote + + TRiga_documento& rout = don.new_row(_strFasi); TDocumento::copy_data(rout, *rdoc); const int last_lev = cfg_fasi.levels()-1; @@ -60,9 +71,9 @@ bool TOrdinazione::elabora(TLista_documenti& doc_in, TLista_documenti& doc_out, fasi.write_rewrite(); } } else - if (rdoc->is_merce()) + if (tr == _strDist) { - TRiga_documento& rout = don.new_row(rdoc->get(RDOC_TIPORIGA)); + TRiga_documento& rout = don.new_row(_strDist); TDocumento::copy_data(rout, *rdoc); rout.set_original_rdoc_key(*rdoc); rout.put(RDOC_FASCMS, fase); @@ -73,21 +84,108 @@ bool TOrdinazione::elabora(TLista_documenti& doc_in, TLista_documenti& doc_out, return true; } -const TString& pe_trova_elaborazione(const TRectype& doc) +TOrdinazione::TOrdinazione(const TString& cod) : TElaborazione_esterna(cod) +{ + _strFasi = ini_get_string(CONFIG_DITTA, "pe", "TipoRigaFase", "05"); + _strDist = ini_get_string(CONFIG_DITTA, "pe", "TipoRigaDist", "P1"); +} + +/////////////////////////////////////////////////////////// +// Generazione fabbisogno +/////////////////////////////////////////////////////////// + +class TFabbisognazione : public TElaborazione_esterna +{ + TString4 _strDett, _strDist; + +public: + virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out, + const TDate& data_elab, bool interattivo = false); + TFabbisognazione(const TString& cod); +}; + +bool TFabbisognazione::elabora(TLista_documenti& doc_in, TLista_documenti& doc_out, + const TDate& data_elab, bool interattivo) +{ + for (int i = 0; i < doc_in.items(); i++) + { + if (i >= doc_out.items()) + { + TDocumento* doc = new TDocumento('D', data_elab.year(), codice_numerazione_finale(), 0L); + doc->put(DOC_TIPODOC, tipo_finale()); + doc_out.add(doc); + } + + TDocumento& din = doc_in[i]; + TDocumento& don = doc_out[i]; + + din.put(DOC_STATO, stato_finale_doc_iniziale()); + + don.zero(DOC_TIPOCF); + don.zero(DOC_CODCF); // NO clifo + don.put(DOC_DATADOC, data_elab); + don.put(DOC_NOTE, din.get(DOC_NOTE)); + don.put(DOC_CODCMS, din.get(DOC_CODCMS)); + don.put(DOC_STATO, stato_finale()); + don.put(DOC_NUMDOCRIF, din.get(DOC_NDOC)); + don.put(DOC_DATADOCRIF, din.get(DOC_DATADOC)); + + TLocalisamfile fasi(LF_FASI); + + const TMultilevel_code_info cfg_fasi(LF_FASI); + TString16 fase; + real qta = UNO; + const int nrows = din.rows(); + FOR_EACH_PHYSICAL_RDOC(din, r, rdoc) + { + const TString& tr = rdoc->get(RDOC_TIPORIGA); + if (tr == _strDist) + { + qta = rdoc->get_real(RDOC_QTA); + if (qta <= ZERO) + qta = UNO; + } else + if (tr == _strDett) + { + TRiga_documento& rout = don.new_row(_strDett); + TDocumento::copy_data(rout, *rdoc); + rout.put(RDOC_QTA, real(qta * rdoc->get_real(RDOC_QTA))); + rout.put(RDOC_PREZZO, rdoc->get(RDOC_QTAGG5)); + rout.set_original_rdoc_key(*rdoc); + rout.put(RDOC_FASCMS, fase); + } + } + } + return true; +} + +TFabbisognazione::TFabbisognazione(const TString& cod) : TElaborazione_esterna(cod) +{ + _strDist = ini_get_string(CONFIG_DITTA, "pe", "TipoRigaDist", "P1"); + _strDett = ini_get_string(CONFIG_DITTA, "pe", "TipoRigaDett", "01"); +} + +/////////////////////////////////////////////////////////// +// Utility pubbliche +/////////////////////////////////////////////////////////// + +const TString& pe_trova_elaborazione(const TRectype& doc, char tipo) { TString16 cod; - const TString4 codnum = doc.get(DOC_CODNUM); - const TString4 tipodoc = doc.get(DOC_TIPODOC); - const TString4 stato = doc.get(DOC_STATO); + const TString& codnum = doc.get(DOC_CODNUM); TString str; - str << "USE %ELD SELECT (STR(I0=\"0\"))&&(S3=\"pe1 -4\")&&(S5=\"" << codnum << "\")"; + if (tipo == 'F') + str << "USE %ELD SELECT (STR(I0=\"0\"))&&(S3=\"pe1 -5\")&&(S5=\"" << codnum << "\")"; // Fabbisogni + else + str << "USE %ELD SELECT (STR(I0=\"0\"))&&(S3=\"pe1 -4\")&&(S5=\"" << codnum << "\")"; // Ordini + TRecordset* eld = create_recordset(str); if (eld != NULL) { for (bool ok = eld->move_first(); ok; ok = eld->move_next()) { - const TString16 c = eld->get("CODTAB").as_string(); + const TString& c = eld->get("CODTAB").as_string(); const TElaborazione e(c); if (e.is_document_ok(doc)) { @@ -100,7 +198,7 @@ const TString& pe_trova_elaborazione(const TRectype& doc) return get_tmp_string() = cod; } -const TString& pe_trova_elaborazione(const TMask& m) +const TString& pe_trova_elaborazione(const TMask& m, char tipo) { TRectype doc(LF_DOC); doc.put(DOC_PROVV, 'D'); @@ -109,24 +207,35 @@ const TString& pe_trova_elaborazione(const TMask& m) doc.put(DOC_NDOC, m.get(DOC_NDOC)); doc.put(DOC_TIPODOC, m.get(DOC_TIPODOC)); doc.put(DOC_STATO, m.get(DOC_STATO)); - return pe_trova_elaborazione(doc); + return pe_trova_elaborazione(doc, tipo); } -bool pe_genera_ordine(TRectype& doc, const TString& cod) +bool pe_genera_documento(TRectype& doc, const TString& cod, char tipo) { TString16 codelab = cod; if (codelab.blank()) - codelab = pe_trova_elaborazione(doc); + codelab = pe_trova_elaborazione(doc, tipo); - TOrdinazione prev(codelab); - if (prev.empty()) - return false; + const TString& app = cache().get("%ELD", codelab, "S3"); + tipo = app.find("-5") > 0 ? 'F' : 'O'; + + + TElaborazione* e = NULL; + if (tipo == 'F') + e = new TFabbisognazione(codelab); + else + e = new TOrdinazione(codelab); + if (e->empty()) + { + delete e; + return error_box("Impossibile trovare l'elaborazione %s", (const char*)cod); + } const TDate oggi(TODAY); TLista_documenti doc_in, doc_out; doc_in.add(new TDocumento(doc)); - bool ok = prev.elabora(doc_in, doc_out, oggi); + bool ok = e->elabora(doc_in, doc_out, oggi); if (ok) { doc_in.rewrite(); @@ -141,6 +250,7 @@ bool pe_genera_ordine(TRectype& doc, const TString& cod) doc.put(fld, val); } } + delete e; return ok; } @@ -174,7 +284,7 @@ void TOrdinazione_app::main_loop() doc.put(DOC_CODNUM, ini.get(DOC_CODNUM)); doc.put(DOC_NDOC, ini.get(DOC_NDOC)); - if (pe_genera_ordine(doc, codelab)) + if (pe_genera_documento(doc, codelab, 'O')) { ini.set_paragraph("Transaction"); ini.set("Result", "OK"); diff --git a/pe/pe1500.h b/pe/pe1500.h index 909becdd7..84feb2f65 100644 --- a/pe/pe1500.h +++ b/pe/pe1500.h @@ -1,8 +1,16 @@ #ifndef __PE1500_H #define __PE1500_H -const TString& pe_trova_elaborazione(const TRectype& doc); -const TString& pe_trova_elaborazione(const TMask& doc); -bool pe_genera_ordine(TRectype& doc, const TString& codelab); +#ifndef __ISAM_H +#include +#endif + +#ifndef __MASK_H +#include +#endif + +const TString& pe_trova_elaborazione(const TRectype& doc, char tipo); +const TString& pe_trova_elaborazione(const TMask& doc, char tipo); +bool pe_genera_documento(TRectype& doc, const TString& codelab, char tipo); #endif diff --git a/pe/pe1600.cpp b/pe/pe1600.cpp new file mode 100644 index 000000000..7577e76eb --- /dev/null +++ b/pe/pe1600.cpp @@ -0,0 +1,50 @@ +#include +#include + +#include "pe1500.h" + +/////////////////////////////////////////////////////////// +// TFabbisognazione_app +/////////////////////////////////////////////////////////// + +class TFabbisognazione_app : public TSkeleton_application +{ +protected: + virtual void main_loop(); +}; + +void TFabbisognazione_app::main_loop() +{ + TFilename ininame; + if (argc() >= 2) + { + const TFixed_string arg = argv(2); + ininame = arg.starts_with("-i", true) ? arg.mid(2) : arg; + } + + TConfig ini(ininame, "Transaction"); + const TString8 codelab = ini.get("Action"); + + ini.set_paragraph("33"); + TRectype doc(LF_DOC); + doc.put(DOC_PROVV, ini.get(DOC_PROVV)); + doc.put(DOC_ANNO, ini.get(DOC_ANNO)); + doc.put(DOC_CODNUM, ini.get(DOC_CODNUM)); + doc.put(DOC_NDOC, ini.get(DOC_NDOC)); + + if (pe_genera_documento(doc, codelab, 'F')) + { + ini.set_paragraph("Transaction"); + ini.set("Result", "OK"); + ini.set("Error", "0"); + + ini.set_paragraph("33"); + for (int i = 0; i < doc.items(); i++) + { + const char* fld = doc.fieldname(i); + const TString& val = doc.get(fld); + if (val.full()) + ini.set(fld, val); + } + } +}