diff --git a/ve/ve0100.cpp b/ve/ve0100.cpp index 4c1477a3c..6deb503f1 100755 --- a/ve/ve0100.cpp +++ b/ve/ve0100.cpp @@ -400,69 +400,78 @@ bool TMotore_application::menu(MENU_TAG mt) return ok; } -void TMotore_application::do_elab( TDocumento& doc, bool stampa ) // C 90 +void TMotore_application::do_elab( TDocumento& doc, int when) // C 90 { - const TString16 codelab = stampa ? doc.tipo().elaborazione_stampa() : doc.tipo().elaborazione(); + TString16 codelab; + switch (when) + { + case 1: codelab = doc.tipo().elaborazione_stampa(); break; + case 2: codelab = doc.tipo().elaborazione_definitiva(); break; + default: codelab = doc.tipo().elaborazione(); break; + } if (codelab.full()) { - TRectype eld = cache().get("%ELD", codelab); + const TRectype& eld = cache().get("%ELD", codelab); if (!eld.empty()) { TElaborazione * el = NULL; switch (eld.get_int("I0")) { - case _esterna : - el = new TElaborazione_esterna(eld); - break; - case _consegna_ordini: - el = new TConsegna_ordini(eld); - break; - case _fatturazione_bolle : - el = new TFatturazione_bolle(eld); - break; - case _contabilizzazione : - el = new TContabilizzazione(eld); - break; - case _copia_documento : - el = new TCopia_documento(eld); - break; - case _generazione_effetti : - el = new TGenerazione_effetti(eld); - break; - case _consuntivazione_produzione : - el = new TConsuntivazione_produzione(eld); - break; - case _contabilizzazione_analitica : - el = new TContabilizzazione_analitica(eld); - break; - default : - break; + case _esterna : + el = new TElaborazione_esterna(eld); + break; + case _consegna_ordini: + el = new TConsegna_ordini(eld); + break; + case _fatturazione_bolle : + el = new TFatturazione_bolle(eld); + break; + case _contabilizzazione : + el = new TContabilizzazione(eld); + break; + case _copia_documento : + el = new TCopia_documento(eld); + break; + case _generazione_effetti : + el = new TGenerazione_effetti(eld); + break; + case _consuntivazione_produzione : + el = new TConsuntivazione_produzione(eld); + break; + case _contabilizzazione_analitica : + el = new TContabilizzazione_analitica(eld); + break; + default : + break; } - TToken_string tipi; - TToken_string stati; - + + TToken_string tipi, stati; el->tipi_stati_iniziali(tipi, stati); if (stati.find(doc.stato()) >= 0) { - TDocumento newdoc(doc.get_char(DOC_PROVV), doc.get_int(DOC_ANNO), el->codice_numerazione_finale(), 0L); - - TDocumento::copy_data(newdoc.head(), doc.head()); - newdoc.put(DOC_TIPODOC, el->tipo_finale()); - newdoc.put(DOC_STATO, el->stato_finale()); - if (newdoc.tipo().mov_mag()) - newdoc.put(DOC_CAUSMAG, newdoc.tipo().caus_mov()); - else - newdoc.zero(DOC_CAUSMAG); - TLista_documenti in; in.add(doc); - TLista_documenti out; out.add(newdoc); + TLista_documenti out; + + TDocumento newdoc(doc.get_char(DOC_PROVV), doc.get_int(DOC_ANNO), el->codice_numerazione_finale(), 0L); + if (when == 0) + { + TDocumento::copy_data(newdoc.head(), doc.head()); + newdoc.put(DOC_TIPODOC, el->tipo_finale()); + newdoc.put(DOC_STATO, el->stato_finale()); + if (newdoc.tipo().mov_mag()) + newdoc.put(DOC_CAUSMAG, newdoc.tipo().caus_mov()); + else + newdoc.zero(DOC_CAUSMAG); + out.add(newdoc); + } + if (el->elabora(in, out, TDate(TODAY), true)) { - if (out[0] != newdoc) - out.rewrite(); - if (doc != in[0]) - doc = in[0]; + if (when == 0 && out.items() && out[0] != newdoc) + out.rewrite(); + if (when < 2 && in.items() && in[0] != doc) + doc = in[0]; } } } diff --git a/ve/ve0100.h b/ve/ve0100.h index a332cf78a..ea3d0669b 100755 --- a/ve/ve0100.h +++ b/ve/ve0100.h @@ -49,7 +49,6 @@ protected: virtual void init_modify_mode(TMask& m); void load_auto_reopen_data(); virtual int read(TMask& m); - virtual void do_elab(TDocumento& doc, bool stampa = false); virtual int write(const TMask& m); virtual int rewrite(const TMask& m); virtual bool remove(); @@ -81,6 +80,7 @@ protected: bool save_and_print(bool savedoc, TPrtype mode); public: + virtual void do_elab(TDocumento& doc, int w = 0); // w 0=Save; 1=Print; 2=Definitive virtual void print(); virtual void preview(); diff --git a/ve/ve5400.uml b/ve/ve5400.uml index 513dc4d45..4b5c9e50e 100755 --- a/ve/ve5400.uml +++ b/ve/ve5400.uml @@ -1,165 +1,166 @@ -#include "ve5400.h" - -TOOLBAR "Bottoni" 0 0 0 2 - -BUTTON F_ARCHIVIA 12 2 -BEGIN - PROMPT -13 -11 "~Invia" - PICTURE BMP_EXPORT - MESSAGE EXIT,K_ENTER -END - -BUTTON F_RIPRISTINA 12 2 -BEGIN - PROMPT -23 -11 "~Ricevi" - MESSAGE EXIT,K_DEL -END - -#include - -ENDPAGE - -PAGE "Invio e Ricezione Documenti" 0 0 0 0 - -GROUPBOX DLG_NULL 76 9 -BEGIN - PROMPT 1 1 "" -END - -NUMBER F_FROM_ANNO 4 -BEGIN - PROMPT 2 2 "Anno " - FLAGS "AU" - CHECKTYPE REQUIRED - FIELD ANNO -END - -LIST F_FROM_PROVV 1 12 -BEGIN - PROMPT 60 2 "" - ITEM "D|Definitivi" - ITEM "P|Provvisori" - FIELD PROVV -END - -STRING F_FROM_NUM 4 -BEGIN - PROMPT 2 3 "Numerazione " - USE %NUM - FLAGS "U" - INPUT CODTAB F_FROM_NUM - DISPLAY "Codice Num." CODTAB - DISPLAY "Descrizione@50" S0 - OUTPUT F_FROM_NUM CODTAB - OUTPUT F_FROM_DES S0 - CHECKTYPE REQUIRED - ADD NONE - FIELD CODNUM -END - -STRING F_FROM_DES 50 -BEGIN - PROMPT 22 3 "" - USE %NUM KEY 2 - INPUT S0 F_FROM_DES - DISPLAY "Descrizione@50" S0 - DISPLAY "Codice Num." CODTAB - COPY OUTPUT F_FROM_NUM - CHECKTYPE REQUIRED -END - -NUMBER F_NUMFR 6 -BEGIN - PROMPT 2 4 "Da numero " - USE LF_DOC - JOIN LF_CLIFO INTO TIPOCF==TIPOCF CODCF==CODCF - INPUT ANNO F_FROM_ANNO SELECT - INPUT CODNUM F_FROM_NUM SELECT - INPUT PROVV F_FROM_PROVV SELECT - INPUT NDOC F_NUMFR - DISPLAY "Num." CODNUM - DISPLAY "Anno" ANNO - DISPLAY "Provv" PROVV - DISPLAY "Tipo" TIPODOC - DISPLAY "Numero@7" NDOC - DISPLAY "Data@10" DATADOC - DISPLAY "C/F" TIPOCF - DISPLAY "Codice" CODCF - DISPLAY "Ragione Sociale@50" LF_CLIFO->RAGSOC - OUTPUT F_NUMFR NDOC -END - -NUMBER F_NUMTO 6 -BEGIN - PROMPT 26 4 "A numero " - COPY USE F_NUMFR - INPUT ANNO F_FROM_ANNO SELECT - INPUT CODNUM F_FROM_NUM SELECT - INPUT PROVV F_FROM_PROVV SELECT - INPUT NDOC F_NUMTO - COPY DISPLAY F_NUMFR - OUTPUT F_NUMTO NDOC -END - -LIST F_DRIVE 3 -BEGIN - PROMPT 2 5 "Drive " - ITEM "A|A:" - ITEM "B|B:" -END - -STRING F_PATH 256 50 -BEGIN - PROMPT 19 5 "" -END - -STRING F_DESCRFILE 50 -BEGIN - PROMPT 2 6 "Descrizione file " - GROUP 1 -END - -BOOLEAN F_WITHCLI -BEGIN - PROMPT 2 7 "Trasferisci clienti/fornitori" -END - -BOOLEAN F_UPDATE -BEGIN - PROMPT 2 8 "Aggiorna clienti/fornitori esistenti" -END - -ENDPAGE - -ENDMASK - -PAGE "Tipi" -1 -1 60 6 - -STRING F_TIPO_DOC 4 -BEGIN - PROMPT 1 1 "Tipo " - USE %TIP - INPUT CODTAB F_TIPO_DOC - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@50" S0 - OUTPUT F_TIPO_DOC CODTAB - OUTPUT F_TIPO_DES S0 - CHECKTYPE REQUIRED - FLAGS "DG" -END - -BOOLEAN F_TIPO_SEL -BEGIN - PROMPT 40 1 "Selezionato" -END - -STRING F_TIPO_DES 50 -BEGIN - PROMPT 6 3 "" - FLAGS "D" -END - - -ENDPAGE - -ENDMASK +#include "ve5400.h" + +TOOLBAR "Bottoni" 0 0 0 2 + +BUTTON F_ARCHIVIA 12 2 +BEGIN + PROMPT -13 -11 "~Invia" + PICTURE BMP_EXPORT + MESSAGE EXIT,K_ENTER +END + +BUTTON F_RIPRISTINA 12 2 +BEGIN + PROMPT -23 -11 "~Ricevi" + PICTURE BMP_IMPORT + MESSAGE EXIT,K_DEL +END + +#include + +ENDPAGE + +PAGE "Invio e Ricezione Documenti" 0 0 0 0 + +GROUPBOX DLG_NULL 76 9 +BEGIN + PROMPT 1 1 "" +END + +NUMBER F_FROM_ANNO 4 +BEGIN + PROMPT 2 2 "Anno " + FLAGS "AU" + CHECKTYPE REQUIRED + FIELD ANNO +END + +LIST F_FROM_PROVV 1 12 +BEGIN + PROMPT 60 2 "" + ITEM "D|Definitivi" + ITEM "P|Provvisori" + FIELD PROVV +END + +STRING F_FROM_NUM 4 +BEGIN + PROMPT 2 3 "Numerazione " + USE %NUM + FLAGS "U" + INPUT CODTAB F_FROM_NUM + DISPLAY "Codice Num." CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_FROM_NUM CODTAB + OUTPUT F_FROM_DES S0 + CHECKTYPE REQUIRED + ADD NONE + FIELD CODNUM +END + +STRING F_FROM_DES 50 +BEGIN + PROMPT 22 3 "" + USE %NUM KEY 2 + INPUT S0 F_FROM_DES + DISPLAY "Descrizione@50" S0 + DISPLAY "Codice Num." CODTAB + COPY OUTPUT F_FROM_NUM + CHECKTYPE REQUIRED +END + +NUMBER F_NUMFR 6 +BEGIN + PROMPT 2 4 "Da numero " + USE LF_DOC + JOIN LF_CLIFO INTO TIPOCF==TIPOCF CODCF==CODCF + INPUT ANNO F_FROM_ANNO SELECT + INPUT CODNUM F_FROM_NUM SELECT + INPUT PROVV F_FROM_PROVV SELECT + INPUT NDOC F_NUMFR + DISPLAY "Num." CODNUM + DISPLAY "Anno" ANNO + DISPLAY "Provv" PROVV + DISPLAY "Tipo" TIPODOC + DISPLAY "Numero@7" NDOC + DISPLAY "Data@10" DATADOC + DISPLAY "C/F" TIPOCF + DISPLAY "Codice" CODCF + DISPLAY "Ragione Sociale@50" LF_CLIFO->RAGSOC + OUTPUT F_NUMFR NDOC +END + +NUMBER F_NUMTO 6 +BEGIN + PROMPT 26 4 "A numero " + COPY USE F_NUMFR + INPUT ANNO F_FROM_ANNO SELECT + INPUT CODNUM F_FROM_NUM SELECT + INPUT PROVV F_FROM_PROVV SELECT + INPUT NDOC F_NUMTO + COPY DISPLAY F_NUMFR + OUTPUT F_NUMTO NDOC +END + +LIST F_DRIVE 3 +BEGIN + PROMPT 2 5 "Drive " + ITEM "A|A:" + ITEM "B|B:" +END + +STRING F_PATH 256 50 +BEGIN + PROMPT 19 5 "" +END + +STRING F_DESCRFILE 50 +BEGIN + PROMPT 2 6 "Descrizione file " + GROUP 1 +END + +BOOLEAN F_WITHCLI +BEGIN + PROMPT 2 7 "Trasferisci clienti/fornitori" +END + +BOOLEAN F_UPDATE +BEGIN + PROMPT 2 8 "Aggiorna clienti/fornitori esistenti" +END + +ENDPAGE + +ENDMASK + +PAGE "Tipi" -1 -1 60 6 + +STRING F_TIPO_DOC 4 +BEGIN + PROMPT 1 1 "Tipo " + USE %TIP + INPUT CODTAB F_TIPO_DOC + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_TIPO_DOC CODTAB + OUTPUT F_TIPO_DES S0 + CHECKTYPE REQUIRED + FLAGS "DG" +END + +BOOLEAN F_TIPO_SEL +BEGIN + PROMPT 40 1 "Selezionato" +END + +STRING F_TIPO_DES 50 +BEGIN + PROMPT 6 3 "" + FLAGS "D" +END + + +ENDPAGE + +ENDMASK diff --git a/ve/velib.h b/ve/velib.h index 8571b7cc9..d3c681fa0 100755 --- a/ve/velib.h +++ b/ve/velib.h @@ -300,6 +300,7 @@ public: const char stato_provvigioni() const {return get("S3")[0]; } const TString & elaborazione() const {return get("S3").mid(4,8); } const TString & elaborazione_stampa() const {return get("S3").mid(12,8); } + const TString & elaborazione_definitiva() const {return get("S3").mid(20,8); } const TString & caus_mov() const {return get("S9"); } const TString & caus_anticipo() const {return get("S10"); } const TString & tipi_iva_validi() const {return get("S11"); } diff --git a/ve/velib02.cpp b/ve/velib02.cpp index ac0295ea4..4f0898b97 100755 --- a/ve/velib02.cpp +++ b/ve/velib02.cpp @@ -1460,7 +1460,7 @@ const TRectype* TRiga_documento::find_original_rdoc() const const TRectype* TRiga_documento::find_original_doc() const { - const long id = get_long(RDOC_DAIDRIGA); + const long id = get_long(RDOC_DANDOC); if (id > 0L) { TToken_string key; diff --git a/ve/velib04.cpp b/ve/velib04.cpp index 0b4129b63..01cb6fd57 100755 --- a/ve/velib04.cpp +++ b/ve/velib04.cpp @@ -498,55 +498,56 @@ bool TElaborazione_esterna::elabora(TLista_documenti& doc_in, TLista_documenti& const TDate& data_elab, bool interattivo) { if (applicazione_esterna().blank()) - error_box("Non e' stato specificato il nome del'applicazione esterna"); + return error_box("Non e' stato specificato il nome del'applicazione esterna"); CHECK(doc_in.items() == 1, "Si deve specificare uno e un solo documento in entrata"); - CHECK(doc_out.items() == 1, "Si deve specificare uno e un solo documento in uscita"); + CHECK(doc_out.items() <= 1, "Si deve specificare uno e un solo documento in uscita"); TFilename name; name.temp("ext"); - TDocumento& d = doc_in[0]; - const int doc_fields = d.items(); TString16 par; { TConfig c(name, "Transaction"); c.set("Action", codice()); - c.set("ProvvOut", doc_out[0].get(DOC_PROVV)); - c.set("AnnoOut", doc_out[0].get(DOC_ANNO)); - c.set("CodNumOut", doc_out[0].get(DOC_CODNUM)); - c.set("NDocOut", doc_out[0].get(DOC_NDOC)); + c.set("DataElab", data_elab.string()); + c.set("Interattivo", interattivo); + + if (doc_out.items() == 1) + { + c.set("ProvvOut", doc_out[0].get(DOC_PROVV)); + c.set("AnnoOut", doc_out[0].get(DOC_ANNO)); + c.set("CodNumOut", doc_out[0].get(DOC_CODNUM)); + c.set("NDocOut", doc_out[0].get(DOC_NDOC)); + } par.format("%d", LF_DOC); + TDocumento& d = doc_in[0]; + const int doc_fields = d.items(); for (int i = 0; i < doc_fields; i++) { - const TString16 fname(d.fieldname(i)); - TFieldref f(fname, LF_DOC); + const char* fname = d.fieldname(i); + const TFieldref f(fname, LF_DOC); f.write(c, par, d.get(fname)); } - for (TVariable_field * v = d.first_variable_field(); v ; v = d.succ_variable_field()) + for (TVariable_field* v = d.first_variable_field(); v ; v = d.succ_variable_field()) c.set(v->name(), v->get(), par); - const int rows = d.physical_rows(); - if (rows > 0) - { - const int row_fields = d[1].items(); - - for (int r = 1; r <= rows; r++) - { - TRiga_documento row = d[r]; - - par.format("%d,%d", LF_RIGHEDOC, r); - for (int i = 0; i < row_fields; i++) - { - const TString16 fname(row.fieldname(i)); - TFieldref f(fname, LF_RIGHEDOC); - f.write(c, par, row.get(fname)); - } - for (TVariable_field * v = row.first_variable_field(); v ; v = row.succ_variable_field()) - c.set(v->name(), v->get(), par); - } - } + + FOR_EACH_PHYSICAL_RDOC(d, r, row) + { + par.format("%d,%d", LF_RIGHEDOC, r); + const int row_fields = row->items(); + for (int i = 0; i < row_fields; i++) + { + const char* fname = row->fieldname(i); + const TFieldref f(fname, LF_RIGHEDOC); + f.write(c, par, row->get(fname)); + } + for (TVariable_field * v = row->first_variable_field(); v ; v = row->succ_variable_field()) + c.set(v->name(), v->get(), par); + } } - TString command_line(applicazione_esterna()); command_line << " /i" << name; + + TString command_line; command_line << applicazione_esterna() << " /i" << name; TExternal_app app(command_line); if (app.run() == 0) { @@ -554,10 +555,13 @@ bool TElaborazione_esterna::elabora(TLista_documenti& doc_in, TLista_documenti& const TString & res = c.get("Result"); if (res == "SUCCESS") { + TDocumento& d = doc_in[0]; + const int doc_fields = d.items(); + par.format("%d", LF_DOC); for (int i = 0; i < doc_fields; i++) { - const TString16 fname(d.fieldname(i)); + const char* fname = d.fieldname(i); TFieldref f(fname, LF_DOC); d.put(fname, f.read(c, par)); } @@ -576,24 +580,29 @@ bool TElaborazione_esterna::elabora(TLista_documenti& doc_in, TLista_documenti& TRiga_documento& row = d.new_row(tiporiga); for (int i = row.items()-1; i >= 0; i--) { - const TString16 fname(row.fieldname(i)); - TFieldref f(fname, LF_RIGHEDOC); + const char* fname = row.fieldname(i); + const TFieldref f(fname, LF_RIGHEDOC); const TString& val = f.read(c, par); if (val.not_empty()) row.put(fname, val); } - r++; - par.format("%d,%d", LF_RIGHEDOC, r); + par.format("%d,%d", LF_RIGHEDOC, ++r); } - d.stato(stato_finale_doc_iniziale()[0]); + + const char final = stato_finale_doc_iniziale()[0]; + if (d.stato() != final) + d.stato(final); + return true; - } - else - if (res == "OUTDOC") - { + } else + if (res == "OUTDOC") + { + if (doc_out.items()) + { doc_out[0].read(); return true; - } + } + } } return false; diff --git a/ve/velib06.cpp b/ve/velib06.cpp index ae3fd0073..dee7eddad 100755 --- a/ve/velib06.cpp +++ b/ve/velib06.cpp @@ -4154,8 +4154,11 @@ bool TDocumento_mask::confirm_handler( TMask_field& f, KEY key ) if (err == NOERR) { err = src.remove(); - if (err != NOERR) + if (err == NOERR) + app().do_elab(dest, 2); + else warning_box("Errore %d nell'eliminazione del documento provvisorio", err); + mask.stop_run(K_ESC); TMask & qmask = app().query_mask(); qmask.set(F_CODNUM, codnum); diff --git a/ve/vetbtip.h b/ve/vetbtip.h index 4ac549d18..ffa2fd520 100755 --- a/ve/vetbtip.h +++ b/ve/vetbtip.h @@ -36,6 +36,10 @@ #define F_STATOCHI 153 #define F_CODELAB 154 #define F_DESCELAB 155 +#define F_CODELABS 156 +#define F_DESCELABS 157 +#define F_CODELABD 158 +#define F_DESCELABD 159 #define F_STATOI_MOD_1 201 #define F_STATOI_MOD_2 202 diff --git a/ve/vetbtip.uml b/ve/vetbtip.uml index ac2a20a21..a04ab8c79 100755 --- a/ve/vetbtip.uml +++ b/ve/vetbtip.uml @@ -1245,9 +1245,14 @@ BEGIN FIELD B11 END +GROUPBOX DLG_NULL 78 5 +BEGIN + PROMPT 1 12 "@bElaborazioni automatiche" +END + STRING F_CODELAB 8 BEGIN - PROMPT 2 12 "Codice " + PROMPT 2 13 "Salva " FLAG "U" FIELD S3[5,12] CHECKTYPE NORMAL @@ -1262,7 +1267,7 @@ END STRING F_DESCELAB 50 BEGIN - PROMPT 20 12 "" + PROMPT 26 13 "" CHECKTYPE SEARCH WARNING "E' necessario specificare un valore" USE %ELD KEY 2 @@ -1272,6 +1277,53 @@ BEGIN COPY OUTPUT F_CODELAB END +STRING F_CODELABS 8 +BEGIN + PROMPT 2 14 "Stampa " + FLAG "U" + FIELD S3[13,20] + CHECKTYPE NORMAL + COPY USE F_CODELAB + INPUT CODTAB F_CODELABS + COPY DISPLAY F_CODELAB + OUTPUT F_CODELABS CODTAB + OUTPUT F_DESCELABS S0 + HELP "Codice dell'elaborazione differita da eseguire" +END + +STRING F_DESCELABS 50 +BEGIN + PROMPT 26 14 "" + COPY USE F_DESCELAB + INPUT S0 F_DESCELABS + COPY DISPLAY F_DESCELAB + COPY OUTPUT F_CODELABS + CHECKTYPE NORMAL +END + +STRING F_CODELABD 8 +BEGIN + PROMPT 2 15 "Definitivo " + FLAG "U" + FIELD S3[21,28] + CHECKTYPE NORMAL + COPY USE F_CODELAB + INPUT CODTAB F_CODELABD + COPY DISPLAY F_CODELAB + OUTPUT F_CODELABD CODTAB + OUTPUT F_DESCELABD S0 + HELP "Codice dell'elaborazione differita da eseguire" +END + +STRING F_DESCELABD 50 +BEGIN + PROMPT 26 15 "" + COPY USE F_DESCELAB + INPUT S0 F_DESCELABD + COPY DISPLAY F_DESCELAB + COPY OUTPUT F_CODELABD + CHECKTYPE NORMAL +END ENDPAGE