diff --git a/ps/ps1002.cpp b/ps/ps1002.cpp index 02bc625d2..24608cef5 100755 --- a/ps/ps1002.cpp +++ b/ps/ps1002.cpp @@ -9,6 +9,7 @@ int main(int argc, char** argv) { case 0: ps1002100(argc, argv); break; //gestione rapida(?) delle righe documento Euroforesi case 1: ps1002200(argc, argv); break; //importazione da terminale della produzione e aggiornamento BEM Euroforesi + case 2: ps1002300(argc, argv); break; //rilevazione produzione da bolle Euroforesi default: ps1002100(argc, argv); break; } exit(0); diff --git a/ps/ps1002.h b/ps/ps1002.h index 9a835cc1c..907d1a65f 100755 --- a/ps/ps1002.h +++ b/ps/ps1002.h @@ -1,2 +1,3 @@ int ps1002100(int argc, char* argv[]); -int ps1002200(int argc, char* argv[]); \ No newline at end of file +int ps1002200(int argc, char* argv[]); +int ps1002300(int argc, char* argv[]); \ No newline at end of file diff --git a/ps/ps1002300.cpp b/ps/ps1002300.cpp new file mode 100755 index 000000000..e563b22a6 --- /dev/null +++ b/ps/ps1002300.cpp @@ -0,0 +1,170 @@ +#include +#include +#include +#include +#include +#include + +#include + +#include "ps1002.h" +#include "ps1002300a.h" + +///////////////////////////////////// +// Maschera +//////////////////////////////////// +class TRileva_produzione_msk : public TAutomask +{ +protected: + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); + +public: + bool elabora(); + TRileva_produzione_msk(); +}; + + +bool TRileva_produzione_msk::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + switch (o.dlg()) + { + case DLG_ELABORA: + if (e == fe_button) + { + elabora(); + return true; + } + break; + case F_DADATA: + case F_ADATA: + if (e == fe_close) + { + const TDate dadata = o.get(); + } + break; + default: break; + } + return true; +} + +bool TRileva_produzione_msk::elabora() +{ + TString query; + query << "USE RDOC KEY 4"; + query << "\nSELECT (DOC.CODNUM=#CODNUM)&&(BETWEEN(DOC.DATADOC,#DADATA,#ADATA))&&((CODCMS!=\"\")||(FASCMS!=\"\"))"; + query << "\nJOIN DOC INTO PROVV==PROVV ANNO==ANNO CODNUM==CODNUM NDOC==NDOC"; + query << "\nFROM DAPROVV=D DAANNO=#ANNO DACODNUM=BEM"; + query << "\nTO DAPROVV=D DAANNO=#ANNO DACODNUM=BEM"; + + TISAM_recordset recset(query); + recset.set_var("#CODNUM", get(F_CODNUM)); + recset.set_var("#DADATA", get_date(F_DADATA)); + recset.set_var("#ADATA", get_date(F_ADATA)); + const long anno = get_date(F_DADATA).year(); + recset.set_var("#ANNO", anno); + + const long items = recset.items(); + + const TDate dataprod = get_date(F_DATAPROD); + TProgind pi(items, TR("Scansione righe documento in corso..."), true, true); + TRectype& bolla_rec = recset.cursor()->curr(); //record corrente del recordset + TLocalisamfile rdoc(LF_RIGHEDOC); //file delle righe documento con le BEM da aggiornare + + for (bool ok = recset.move_first(); ok; ok = recset.move_next()) + { + if (!pi.addstatus(1)) + break; + + //prende la quantita' dalla riga della bolla + const real bolla_qta = bolla_rec.get_real(RDOC_QTA); + if (bolla_qta > ZERO) + { +#ifdef DBG + const TString& bolla_codnum = bolla_rec.get(RDOC_CODNUM); + const int bolla_anno = bolla_rec.get_int(RDOC_ANNO); + const long bolla_ndoc = bolla_rec.get_long(RDOC_NDOC); + const int bolla_nriga = bolla_rec.get_int(RDOC_NRIGA); +#endif + + //servono anche lavorazione e colore (almeno uno dei due c'e' in base alla query) + const TString& bolla_lav = bolla_rec.get(RDOC_CODCMS); + const TString& bolla_col = bolla_rec.get(RDOC_FASCMS); + + //adesso prende la riga documento della BEM e aggiorna i valori se deve + TRectype& bem_rec = rdoc.curr(); + const TString& bem_codnum = bolla_rec.get(RDOC_DACODNUM); //se non fosse BEM sarebbe un errore!!! + bem_rec.put(RDOC_CODNUM, bem_codnum); + const int bem_anno = bolla_rec.get_int(RDOC_DAANNO); + bem_rec.put(RDOC_ANNO, bem_anno); + bem_rec.put(RDOC_PROVV, 'D'); + const long bem_ndoc = bolla_rec.get_long(RDOC_DANDOC); + bem_rec.put(RDOC_NDOC, bem_ndoc); + //occhio alla riga, raga! DAIDRIGA sulla rigabolla deve essere uguale a IDRIGA sulla rigabem, NON a NRIGA che è aleatorio! + const int bem_nriga = bolla_rec.get_int(RDOC_DAIDRIGA); + bem_rec.put(RDOC_IDRIGA, bem_nriga); + + if (bem_rec.read(rdoc) == NOERR) + { + const real bem_old_qta = bem_rec.get_real(RDOC_QTA); + //solo le BEM a quantita' nulla possono essere aggiornate (senno' ci verrebbe del casino) + if (bem_old_qta == ZERO) + { + if (bolla_lav.full()) //lavorazione + { + bem_rec.put(RDOC_CODCMS, bolla_lav); + bem_rec.put(RDOC_QTAGG2, bolla_qta); + bem_rec.put(RDOC_CODAGG2, dataprod); + } + if (bolla_col.full()) //colore + { + bem_rec.put(RDOC_FASCMS, bolla_col); + bem_rec.put(RDOC_QTAGG1, bolla_qta); + bem_rec.put(RDOC_DATACONS, dataprod); + } + const int err = bem_rec.rewrite(rdoc); + if (err != NOERR) + return false; + } + } //if(bem_rec.read(rdoc)... + + } // if (bolla_qta > ZERO)... + } //for (bool ok = recset.move_first()... + + return true; +} + + +TRileva_produzione_msk::TRileva_produzione_msk() + : TAutomask ("ps1002300a") +{} + + +///////////////////////////////////// +// Applicazione +//////////////////////////////////// +class TRileva_produzione : public TSkeleton_application +{ +protected: + virtual bool check_autorization() const { return false; } + virtual const char* extra_modules() const { return "ve"; } + virtual void main_loop(); + virtual bool create(); +}; + +void TRileva_produzione::main_loop() +{ + TRileva_produzione_msk mask; + mask.run(); +} + +bool TRileva_produzione::create() +{ + return TSkeleton_application::create(); +} + +int ps1002300 (int argc, char* argv[]) +{ + TRileva_produzione main_app; + main_app.run(argc, argv, TR("Rileva produzione da bolle")); + return true; +} \ No newline at end of file diff --git a/ps/ps1002300a.h b/ps/ps1002300a.h new file mode 100755 index 000000000..727f7a50d --- /dev/null +++ b/ps/ps1002300a.h @@ -0,0 +1,5 @@ +#define F_CODNUM 201 +#define F_DESNUM 202 +#define F_DADATA 203 +#define F_ADATA 204 +#define F_DATAPROD 205 diff --git a/ps/ps1002300a.uml b/ps/ps1002300a.uml new file mode 100755 index 000000000..232a3c367 --- /dev/null +++ b/ps/ps1002300a.uml @@ -0,0 +1,64 @@ +#include "ps1002300a.h" + +PAGE "Rilevazione produzione da bolle" -1 -1 78 12 + +STRING F_CODNUM 4 +BEGIN + PROMPT 1 1 "Num. bolle " + USE %NUM + INPUT CODTAB F_CODNUM + DISPLAY "Codice@8" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_CODNUM CODTAB + OUTPUT F_DESNUM S0 + CHECKTYPE REQUIRED + FLAGS "U" +END + +STRING F_DESNUM 50 +BEGIN + PROMPT 23 1 "" + USE %NUM KEY 2 + INPUT S0 F_DESNUM + DISPLAY "Descrizione@50" S0 + DISPLAY "Codice@8" CODTAB + COPY OUTPUT F_CODNUM + CHECKTYPE NORMAL +END + +DATE F_DADATA +BEGIN + PROMPT 1 3 "Dal " + FLAGS "A" + CHECKTYPE REQUIRED +END + +DATE F_ADATA +BEGIN + PROMPT 20 3 "Al " + FLAGS "A" + CHECKTYPE REQUIRED +END + +DATE F_DATAPROD +BEGIN + PROMPT 1 5 "Data produzione " + CHECKTYPE REQUIRED +END + +BUTTON DLG_ELABORA 10 2 +BEGIN + PROMPT -12 7 "~Elabora" + PICTURE BMP_ELABORA +END + +BUTTON DLG_QUIT 10 2 +BEGIN + PROMPT -22 7 "Fine" + MESSAGE EXIT,K_QUIT + PICTURE BMP_QUIT +END + +ENDPAGE + +ENDMASK \ No newline at end of file