Riportate dalla 3.3 personalizzazioni MRP per cliente DB Service

git-svn-id: svn://10.65.10.50/branches/R_10_00@22678 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2012-06-18 14:13:00 +00:00
parent 53d90d8c95
commit 48d079a2c3
14 changed files with 1593 additions and 1642 deletions

View File

@ -1,22 +1,22 @@
#include <xvt.h> #include <xvt.h>
#include "ps0920.h" #include "ps0920.h"
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
int n = argc > 1 ? atoi(argv[1]+1) : 0; int n = argc > 1 ? atoi(argv[1]+1) : 0;
switch(n) switch(n)
{ {
case 1: case 1:
ps0920200(argc, argv); break; //Aggiornamento IVA Documenti DBService ps0920200(argc, argv); break; //Aggiornamento IVA Documenti DBService
case 2: case 2:
ps0920300(argc, argv); break; //Pianificazione impianti DBService ps0920300(argc, argv); break; //Pianificazione impianti DBService
case 3: case 3:
ps0920400(argc, argv); break; //Riepilogo produzione DBService ps0920400(argc, argv); break; //Riepilogo produzione DBService
case 0: case 0:
default: default:
ps0920100(argc, argv); break; //Stampa ordini di produzione DBService ps0920100(argc, argv); break; //Stampa ordini di produzione DBService
} }
exit(0); exit(0);
return 0; return 0;
} }

View File

@ -1,4 +1,4 @@
int ps0920100(int argc, char* argv[]); int ps0920100(int argc, char* argv[]);
int ps0920200(int argc, char* argv[]); int ps0920200(int argc, char* argv[]);
int ps0920300(int argc, char* argv[]); int ps0920300(int argc, char* argv[]);
int ps0920400(int argc, char* argv[]); int ps0920400(int argc, char* argv[]);

View File

@ -1,181 +1,181 @@
#include <applicat.h> #include <applicat.h>
#include <automask.h> #include <automask.h>
#include <defmask.h> #include <defmask.h>
#include <relation.h> #include <relation.h>
#include <reprint.h> #include <reprint.h>
#include "ps0920.h" #include "ps0920.h"
#include "ps0920100a.h" #include "ps0920100a.h"
#include <rdoc.h> #include <rdoc.h>
class TMaskPs09201 : public TAutomask class TMaskPs09201 : public TAutomask
{ {
TCursor_sheet * _sht; TCursor_sheet * _sht;
bool _select_changed; bool _select_changed;
protected: protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
void update_sheet(); void update_sheet();
public: public:
TCursor_sheet& sheet() const; TCursor_sheet& sheet() const;
TMaskPs09201(); TMaskPs09201();
virtual ~TMaskPs09201(); virtual ~TMaskPs09201();
}; };
TCursor_sheet& TMaskPs09201::sheet() const TCursor_sheet& TMaskPs09201::sheet() const
{ {
if (_sht == NULL) // Non si sa mai! if (_sht == NULL) // Non si sa mai!
((TMaskPs09201*)this)->update_sheet(); ((TMaskPs09201*)this)->update_sheet();
return *_sht; return *_sht;
} }
TMaskPs09201::TMaskPs09201() TMaskPs09201::TMaskPs09201()
: TAutomask("ps0920100a"), _sht(NULL) : TAutomask("ps0920100a"), _sht(NULL)
{ {
((TButton_field&) field(DLG_SELECT)).set_exit_key(0); ((TButton_field&) field(DLG_SELECT)).set_exit_key(0);
_select_changed = true; _select_changed = true;
} }
TMaskPs09201::~TMaskPs09201() TMaskPs09201::~TMaskPs09201()
{ {
if (_sht != NULL) if (_sht != NULL)
delete _sht; delete _sht;
} }
bool TMaskPs09201::on_field_event(TOperable_field& o, TField_event e, long jolly) bool TMaskPs09201::on_field_event(TOperable_field& o, TField_event e, long jolly)
{ {
const int id = o.dlg(); const int id = o.dlg();
switch (id) switch (id)
{ {
case F_NUM: case F_NUM:
case F_ANNO: case F_ANNO:
case F_CODCLI: case F_CODCLI:
_select_changed = true; _select_changed = true;
break; break;
case DLG_SELECT: case DLG_SELECT:
if (e == fe_button) if (e == fe_button)
{ {
if (_select_changed) if (_select_changed)
update_sheet(); update_sheet();
_select_changed = false; _select_changed = false;
_sht->run(); _sht->run();
} }
break; break;
default: default:
break; break;
} }
return TRUE; return TRUE;
} }
void TMaskPs09201::update_sheet() void TMaskPs09201::update_sheet()
{ {
if (_sht != NULL) if (_sht != NULL)
{ {
delete _sht; delete _sht;
_sht = NULL; _sht = NULL;
} }
_select_changed = false; _select_changed = false;
TRelation * r = new TRelation(LF_RIGHEDOC); TRelation * r = new TRelation(LF_RIGHEDOC);
TRectype from(r->curr()); TRectype from(r->curr());
const long codcli = get_long(F_CODCLI); const long codcli = get_long(F_CODCLI);
TString codartfrom; codartfrom.format("%03ld", codcli); TString codartfrom; codartfrom.format("%03ld", codcli);
from.put(RDOC_CODNUM, get(F_NUM)); from.put(RDOC_CODNUM, get(F_NUM));
from.put(RDOC_ANNO, get(F_ANNO)); from.put(RDOC_ANNO, get(F_ANNO));
from.put(RDOC_PROVV, "D"); from.put(RDOC_PROVV, "D");
from.put(RDOC_CODART, codartfrom); from.put(RDOC_CODART, codartfrom);
TRectype to(from); TRectype to(from);
TString codartto; codartto.format("%03ld", codcli + 1); TString codartto; codartto.format("%03ld", codcli + 1);
to.put(RDOC_CODART, codartto); to.put(RDOC_CODART, codartto);
TCursor * c = new TSorted_cursor(r, "CODNUM|NDOC|NRIGA", "RIGAEVASA!=\"X\"", 2, &from, &to); TCursor * c = new TSorted_cursor(r, "CODNUM|NDOC|NRIGA", "RIGAEVASA!=\"X\"", 2, &from, &to);
_sht = new TCursor_sheet(c, " |CODNUM|NDOC|NRIGA|DATACONS|CODART|DESCR", "Selezione articoli", _sht = new TCursor_sheet(c, " |CODNUM|NDOC|NRIGA|DATACONS|CODART|DESCR", "Selezione articoli",
"@1|Ordine@6|N.Doc.@7|N.Riga@6|Data\nConsegna@10|Articolo@20|Descr@50",0,1); "@1|Ordine@6|N.Doc.@7|N.Riga@6|Data\nConsegna@10|Articolo@20|Descr@50",0,1);
_sht->uncheck(-1); _sht->uncheck(-1);
} }
class TStampaProduzionePs0920 : public TSkeleton_application class TStampaProduzionePs0920 : public TSkeleton_application
{ {
virtual bool check_autorization() const { return false; } virtual bool check_autorization() const { return false; }
virtual const char * extra_modules() const {return "ve";} virtual const char * extra_modules() const {return "ve";}
protected: protected:
virtual void main_loop(); virtual void main_loop();
virtual bool create(); virtual bool create();
public: public:
virtual ~TStampaProduzionePs0920(); virtual ~TStampaProduzionePs0920();
}; };
void TStampaProduzionePs0920::main_loop() void TStampaProduzionePs0920::main_loop()
{ {
TMaskPs09201 m; TMaskPs09201 m;
while (m.run() == K_ENTER) while (m.run() == K_ENTER)
{ {
TCursor_sheet& s = m.sheet(); TCursor_sheet& s = m.sheet();
if (s.one_checked()) if (s.one_checked())
{ {
TReport_book book; TReport_book book;
TCursor & cur = *s.cursor(); TCursor & cur = *s.cursor();
TReport rep; TReport rep;
if (m.get_bool(F_PAGEBREAK)) if (m.get_bool(F_PAGEBREAK))
rep.load("OrdineProdSP.rep"); rep.load("OrdineProdSP.rep");
else else
rep.load("OrdineProd.rep"); rep.load("OrdineProd.rep");
const long items = cur.items(); const long items = cur.items();
for (long pos = 0L; pos < items; pos++) for (long pos = 0L; pos < items; pos++)
{ {
if (s.checked(pos)) if (s.checked(pos))
{ {
cur = pos; cur = pos;
const TRectype & rec = cur.curr(); const TRectype & rec = cur.curr();
TRecordset & r = *rep.recordset(); TRecordset & r = *rep.recordset();
TVariant var; TVariant var;
var = rec.get(RDOC_CODNUM); var = rec.get(RDOC_CODNUM);
r.set_var("#S_NUM", var); r.set_var("#S_NUM", var);
var = rec.get(RDOC_ANNO); var = rec.get(RDOC_ANNO);
r.set_var("#S_ANNO", var); r.set_var("#S_ANNO", var);
var = rec.get(RDOC_NDOC); var = rec.get(RDOC_NDOC);
r.set_var("#S_NDOC", var); r.set_var("#S_NDOC", var);
var = rec.get(RDOC_NRIGA); var = rec.get(RDOC_NRIGA);
r.set_var("#S_NRIGA", var); r.set_var("#S_NRIGA", var);
var = rec.get(RDOC_IDRIGA); var = rec.get(RDOC_IDRIGA);
r.set_var("#S_IDRIGA", var); r.set_var("#S_IDRIGA", var);
book.add(rep); book.add(rep);
} }
} }
book.print_or_preview(); book.print_or_preview();
} }
} }
} }
bool TStampaProduzionePs0920::create() bool TStampaProduzionePs0920::create()
{ {
return TSkeleton_application:: create(); return TSkeleton_application:: create();
} }
TStampaProduzionePs0920::~TStampaProduzionePs0920() TStampaProduzionePs0920::~TStampaProduzionePs0920()
{ {
} }
TStampaProduzionePs0920 & app() { return (TStampaProduzionePs0920&) main_app();} TStampaProduzionePs0920 & app() { return (TStampaProduzionePs0920&) main_app();}
int ps0920100(int argc, char* argv[]) int ps0920100(int argc, char* argv[])
{ {
TStampaProduzionePs0920 a; TStampaProduzionePs0920 a;
a.run(argc, argv, "Stampa ordini di produzione"); a.run(argc, argv, "Stampa ordini di produzione");
return 0; return 0;
} }

View File

@ -1,7 +1,6 @@
#define F_PROFILO 30 #define F_PROFILO 30
#define F_ANNO 101 #define F_ANNO 101
#define F_NUM 102 #define F_NUM 102
#define F_CODCLI 103 #define F_CODCLI 103
#define F_RAGSOC 104 #define F_RAGSOC 104
#define F_PAGEBREAK 105 #define F_PAGEBREAK 105

View File

@ -1,101 +1,107 @@
#include "ps0920100a.h" #include "ps0920100a.h"
PAGE "Stampa ordini di produzione" -1 -1 80 11 TOOLBAR "topbar" 0 0 0 2
GROUPBOX -1 78 5 BUTTON DLG_OK 10 2
BEGIN BEGIN
PROMPT 2 1 "Selezione Documenti" PROMPT -13 -1 ""
FLAGS "" PICTURE TOOL_PRINT
END END
NUMBER F_ANNO 4 BUTTON DLG_SELECT 10 2
BEGIN BEGIN
PROMPT 4 2 "Anno " PROMPT -23 -1 "~Seleziona"
FIELD S_ANNO END
KEY 1
USE ESC BUTTON DLG_QUIT 10 2
CHECKTYPE NORMAL BEGIN
INPUT CODTAB F_ANNO PROMPT -33 -1 ""
DISPLAY "Codice" CODTAB END
DISPLAY "Data inizio esercizio" D0
DISPLAY "Data fine esercizio" D1 ENDPAGE
OUTPUT F_ANNO CODTAB
FLAGS "RZ" PAGE "Stampa ordini di produzione" -1 -1 80 11
END
GROUPBOX -1 78 5
STRING F_NUM 4 BEGIN
BEGIN PROMPT 2 1 "Selezione Documenti"
PROMPT 21 2 "Num. " FLAGS ""
FIELDS S_NUM END
HELP "Codice numerazione"
USE %NUM NUMBER F_ANNO 4
INPUT CODTAB F_NUM BEGIN
DISPLAY "Codice" CODTAB PROMPT 4 2 "Anno "
DISPLAY "Descrizione@50" S0 FIELD S_ANNO
OUTPUT F_NUM CODTAB KEY 1
CHECKTYPE REQUIRED USE ESC
FLAG "UPA" CHECKTYPE NORMAL
WARNING "Numerazione assente" INPUT CODTAB F_ANNO
END DISPLAY "Codice" CODTAB
DISPLAY "Data inizio esercizio" D0
STRING F_CODCLI 3 DISPLAY "Data fine esercizio" D1
BEGIN OUTPUT F_ANNO CODTAB
PROMPT 4 4 "Cliente " FLAGS "RZ"
WARNING "Cliente assente" END
FLAGS "R"
FIELD CODCLI STRING F_NUM 4
USE LF_CLIFO BEGIN
INPUT TIPOCF "C" PROMPT 21 2 "Num. "
INPUT CODCF F_CODCLI FIELDS S_NUM
DISPLAY "Codice" CODCF HELP "Codice numerazione"
DISPLAY "Ragione Sociale@50" RAGSOC USE %NUM
OUTPUT F_CODCLI CODCF INPUT CODTAB F_NUM
OUTPUT F_RAGSOC RAGSOC DISPLAY "Codice" CODTAB
CHECKTYPE REQUIRED DISPLAY "Descrizione@50" S0
END OUTPUT F_NUM CODTAB
CHECKTYPE REQUIRED
STRING F_RAGSOC 50 FLAG "UPA"
BEGIN WARNING "Numerazione assente"
WARNING "Cliente assente" END
PROMPT 26 4 ""
USE LF_CLIFO KEY 2 STRING F_CODCLI 3
INPUT TIPOCF "C" BEGIN
INPUT RAGSOC F_RAGSOC PROMPT 4 4 "Cliente "
DISPLAY "Ragione Sociale@50" RAGSOC WARNING "Cliente assente"
DISPLAY "Partita IVA@12" PAIV FLAGS "R"
DISPLAY "Codice" CODCF FIELD CODCLI
OUTPUT F_CODCLI CODCF USE LF_CLIFO
OUTPUT F_RAGSOC RAGSOC INPUT TIPOCF "C"
CHECKTYPE REQUIRED INPUT CODCF F_CODCLI
END DISPLAY "Codice" CODCF
DISPLAY "Ragione Sociale@50" RAGSOC
BOOLEAN F_PAGEBREAK OUTPUT F_CODCLI CODCF
BEGIN OUTPUT F_RAGSOC RAGSOC
PROMPT 4 6 "Salto pagina per ogni scheda" CHECKTYPE REQUIRED
END END
STRING F_PROFILO 70 50 STRING F_RAGSOC 50
BEGIN BEGIN
PROMPT 8 -4 "Profilo " WARNING "Cliente assente"
PSELECT PROMPT 26 4 ""
GROUP 1 USE LF_CLIFO KEY 2
END INPUT TIPOCF "C"
INPUT RAGSOC F_RAGSOC
BUTTON DLG_OK 10 2 DISPLAY "Ragione Sociale@50" RAGSOC
BEGIN DISPLAY "Partita IVA@12" PAIV
PROMPT -13 -1 "" DISPLAY "Codice" CODCF
END OUTPUT F_CODCLI CODCF
OUTPUT F_RAGSOC RAGSOC
BUTTON DLG_SELECT 10 2 CHECKTYPE REQUIRED
BEGIN END
PROMPT -23 -1 "~Seleziona"
END BOOLEAN F_PAGEBREAK
BEGIN
BUTTON DLG_QUIT 10 2 PROMPT 4 6 "Salto pagina per ogni scheda"
BEGIN END
PROMPT -33 -1 ""
END STRING F_PROFILO 70 50
BEGIN
ENDPAGE PROMPT 8 -4 "Profilo "
PSELECT
ENDMASK GROUP 1
END
ENDPAGE
ENDMASK

View File

@ -1,138 +1,138 @@
#include <applicat.h> #include <applicat.h>
#include <automask.h> #include <automask.h>
#include <defmask.h> #include <defmask.h>
#include <relation.h> #include <relation.h>
#include <cfven.h> #include <cfven.h>
#include "../ve/velib.h" #include "../ve/velib.h"
#include "ps0920.h" #include "ps0920.h"
#include "ps0920200a.h" #include "ps0920200a.h"
#include <rdoc.h> #include <rdoc.h>
class TMaskPs09202 : public TAutomask class TMaskPs09202 : public TAutomask
{ {
protected: protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public: public:
TMaskPs09202(); TMaskPs09202();
virtual ~TMaskPs09202(); virtual ~TMaskPs09202();
}; };
TMaskPs09202::TMaskPs09202() TMaskPs09202::TMaskPs09202()
: TAutomask("ps0920200a") : TAutomask("ps0920200a")
{ {
} }
TMaskPs09202::~TMaskPs09202() TMaskPs09202::~TMaskPs09202()
{ {
} }
bool TMaskPs09202::on_field_event(TOperable_field& o, TField_event e, long jolly) bool TMaskPs09202::on_field_event(TOperable_field& o, TField_event e, long jolly)
{ {
const int id = o.dlg(); const int id = o.dlg();
switch (id) switch (id)
{ {
case F_CODCLI: case F_CODCLI:
if (e == fe_modify) if (e == fe_modify)
{ {
TString key; key.format("C|%ld", atol(o.get())); TString key; key.format("C|%ld", atol(o.get()));
const TRectype & cli = cache().get(LF_CFVEN, key); const TRectype & cli = cache().get(LF_CFVEN, key);
if (cli.get(CFV_ASSFIS).empty()) if (cli.get(CFV_ASSFIS).empty())
o.mask().enable(F_CODIVA); o.mask().enable(F_CODIVA);
else else
{ {
o.mask().set(F_CODIVA, ""); o.mask().set(F_CODIVA, "");
o.mask().disable(F_CODIVA); o.mask().disable(F_CODIVA);
} }
} }
default: default:
break; break;
} }
return TRUE; return TRUE;
} }
class TAggiornaIVAPs0920 : public TSkeleton_application class TAggiornaIVAPs0920 : public TSkeleton_application
{ {
TMaskPs09202 * _mask; TMaskPs09202 * _mask;
virtual bool check_autorization() const {return false;} virtual bool check_autorization() const {return false;}
virtual const char * extra_modules() const {return "ve";} virtual const char * extra_modules() const {return "ve";}
protected: protected:
virtual void main_loop(); virtual void main_loop();
virtual bool create(); virtual bool create();
public: public:
const TMaskPs09202 & mask() const {return *_mask;} const TMaskPs09202 & mask() const {return *_mask;}
virtual ~TAggiornaIVAPs0920(); virtual ~TAggiornaIVAPs0920();
}; };
void TAggiornaIVAPs0920::main_loop() void TAggiornaIVAPs0920::main_loop()
{ {
while (_mask->run() == K_ENTER) while (_mask->run() == K_ENTER)
{ {
TCursor c(new TRelation(LF_DOC)); TCursor c(new TRelation(LF_DOC));
TRectype from(c.curr()); TRectype from(c.curr());
from.put(DOC_PROVV, "D"); from.put(DOC_PROVV, "D");
from.put(DOC_CODNUM, _mask->get(F_NUM)); from.put(DOC_CODNUM, _mask->get(F_NUM));
from.put(DOC_ANNO, _mask->get_int(F_ANNO)); from.put(DOC_ANNO, _mask->get_int(F_ANNO));
TRectype to(from); TRectype to(from);
from.put(DOC_NDOC, _mask->get_int(F_NDOCDA)); from.put(DOC_NDOC, _mask->get_int(F_NDOCDA));
to.put(DOC_NDOC, _mask->get_int(F_NDOCA)); to.put(DOC_NDOC, _mask->get_int(F_NDOCA));
c.setregion(from, to); c.setregion(from, to);
TString filter; filter.format("CODCF=%ld", _mask->get_long(F_CODCLI)); TString filter; filter.format("CODCF=%ld", _mask->get_long(F_CODCLI));
c.setfilter(filter); c.setfilter(filter);
TString key; key.format("C|%ld", _mask->get_long(F_CODCLI)); TString key; key.format("C|%ld", _mask->get_long(F_CODCLI));
const TRectype & cli = cache().get(LF_CFVEN, key); const TRectype & cli = cache().get(LF_CFVEN, key);
TString codice_IVA(cli.get(CFV_ASSFIS)); TString codice_IVA(cli.get(CFV_ASSFIS));
if (codice_IVA.empty()) if (codice_IVA.empty())
codice_IVA = _mask->get(F_CODIVA); codice_IVA = _mask->get(F_CODIVA);
const long items = c.items(); const long items = c.items();
TString16 iva_orig; TString16 iva_orig;
for (c = 0L; c.pos() < items; ++c) for (c = 0L; c.pos() < items; ++c)
{ {
TDocumento doc(c.curr()); TDocumento doc(c.curr());
const int rows = doc.physical_rows(); const int rows = doc.physical_rows();
for (int r = 1 ; r <= rows; r++) for (int r = 1 ; r <= rows; r++)
{ {
TRiga_documento & riga = doc[r]; TRiga_documento & riga = doc[r];
iva_orig = riga.get(RDOC_CODIVA); iva_orig = riga.get(RDOC_CODIVA);
if (iva_orig.not_empty()) if (iva_orig.not_empty())
riga.put(RDOC_CODIVA, codice_IVA); riga.put(RDOC_CODIVA, codice_IVA);
} }
doc.rewrite(); doc.rewrite();
} }
} }
} }
bool TAggiornaIVAPs0920::create() bool TAggiornaIVAPs0920::create()
{ {
_mask = new TMaskPs09202; _mask = new TMaskPs09202;
return TSkeleton_application:: create(); return TSkeleton_application:: create();
} }
TAggiornaIVAPs0920::~TAggiornaIVAPs0920() TAggiornaIVAPs0920::~TAggiornaIVAPs0920()
{ {
delete _mask; delete _mask;
} }
TAggiornaIVAPs0920 & app() { return (TAggiornaIVAPs0920&) main_app();} TAggiornaIVAPs0920 & app() { return (TAggiornaIVAPs0920&) main_app();}
int ps0920200(int argc, char* argv[]) int ps0920200(int argc, char* argv[])
{ {
TAggiornaIVAPs0920 a; TAggiornaIVAPs0920 a;
a.run(argc, argv, "Aggiornamento IVA Documenti"); a.run(argc, argv, "Aggiornamento IVA Documenti");
return 0; return 0;
} }

View File

@ -1,11 +1,8 @@
#define F_PROFILO 30 #define F_PROFILO 30
#define F_ANNO 101 #define F_ANNO 101
#define F_NUM 102 #define F_NUM 102
#define F_CODCLI 103 #define F_CODCLI 103
#define F_RAGSOC 104 #define F_RAGSOC 104
#define F_NDOCDA 105 #define F_NDOCDA 105
#define F_NDOCA 106 #define F_NDOCA 106
#define F_CODIVA 107 #define F_CODIVA 107

View File

@ -1,150 +1,144 @@
#include "ps0920200a.h" #include "ps0920200a.h"
PAGE "Aggiornamento IVA Documenti" -1 -1 80 12 TOOLBAR "topbar" 0 0 0 2
#include <elabar.h>
GROUPBOX -1 78 5 ENDPAGE
BEGIN
PROMPT 2 1 "Selezione Documenti" PAGE "Aggiornamento IVA Documenti" -1 -1 80 12
FLAGS ""
END GROUPBOX -1 78 5
BEGIN
NUMBER F_ANNO 4 PROMPT 2 1 "Selezione Documenti"
BEGIN FLAGS ""
PROMPT 4 2 "Anno " END
FIELD S_ANNO
KEY 1 NUMBER F_ANNO 4
USE ESC BEGIN
CHECKTYPE NORMAL PROMPT 4 2 "Anno "
INPUT CODTAB F_ANNO FIELD S_ANNO
DISPLAY "Codice" CODTAB KEY 1
DISPLAY "Data inizio esercizio" D0 USE ESC
DISPLAY "Data fine esercizio" D1 CHECKTYPE NORMAL
OUTPUT F_ANNO CODTAB INPUT CODTAB F_ANNO
FLAGS "RZ" DISPLAY "Codice" CODTAB
END DISPLAY "Data inizio esercizio" D0
DISPLAY "Data fine esercizio" D1
STRING F_NUM 4 OUTPUT F_ANNO CODTAB
BEGIN FLAGS "RZ"
PROMPT 26 2 "Num. " END
FIELDS S_NUM
HELP "Codice numerazione" STRING F_NUM 4
USE %NUM BEGIN
INPUT CODTAB F_NUM PROMPT 26 2 "Num. "
DISPLAY "Codice" CODTAB FIELDS S_NUM
DISPLAY "Descrizione@50" S0 HELP "Codice numerazione"
OUTPUT F_NUM CODTAB USE %NUM
CHECKTYPE REQUIRED INPUT CODTAB F_NUM
FLAG "UPA" DISPLAY "Codice" CODTAB
WARNING "Numerazione assente" DISPLAY "Descrizione@50" S0
END OUTPUT F_NUM CODTAB
CHECKTYPE REQUIRED
STRING F_CODCLI 3 FLAG "UPA"
BEGIN WARNING "Numerazione assente"
PROMPT 4 4 "Cliente " END
WARNING "Cliente assente"
FLAGS "R" STRING F_CODCLI 3
FIELD CODCLI BEGIN
USE LF_CLIFO PROMPT 4 4 "Cliente "
INPUT TIPOCF "C" WARNING "Cliente assente"
INPUT CODCF F_CODCLI FLAGS "R"
DISPLAY "Codice" CODCF FIELD CODCLI
DISPLAY "Ragione Sociale@50" RAGSOC USE LF_CLIFO
OUTPUT F_CODCLI CODCF INPUT TIPOCF "C"
OUTPUT F_RAGSOC RAGSOC INPUT CODCF F_CODCLI
CHECKTYPE REQUIRED DISPLAY "Codice" CODCF
END DISPLAY "Ragione Sociale@50" RAGSOC
OUTPUT F_CODCLI CODCF
STRING F_RAGSOC 50 OUTPUT F_RAGSOC RAGSOC
BEGIN CHECKTYPE REQUIRED
WARNING "Cliente assente" END
PROMPT 26 4 ""
USE LF_CLIFO KEY 2 STRING F_RAGSOC 50
INPUT TIPOCF "C" BEGIN
INPUT RAGSOC F_RAGSOC WARNING "Cliente assente"
DISPLAY "Ragione Sociale@50" RAGSOC PROMPT 26 4 ""
DISPLAY "Partita IVA@12" PAIV USE LF_CLIFO KEY 2
DISPLAY "Codice" CODCF INPUT TIPOCF "C"
OUTPUT F_CODCLI CODCF INPUT RAGSOC F_RAGSOC
OUTPUT F_RAGSOC RAGSOC DISPLAY "Ragione Sociale@50" RAGSOC
CHECKTYPE REQUIRED DISPLAY "Partita IVA@12" PAIV
END DISPLAY "Codice" CODCF
OUTPUT F_CODCLI CODCF
NUMBER F_NDOCDA 6 OUTPUT F_RAGSOC RAGSOC
BEGIN CHECKTYPE REQUIRED
PROMPT 4 6 "Da numero " END
USE LF_DOC SELECT CODCF=#F_CODCLI
JOIN LF_CLIFO TO LF_DOC INTO TIPOCF==TIPOCF CODCF==CODCF NUMBER F_NDOCDA 6
INPUT PROVV "D" SELECT BEGIN
INPUT ANNO F_ANNO SELECT PROMPT 4 6 "Da numero "
INPUT CODNUM F_NUM SELECT USE LF_DOC SELECT CODCF=#F_CODCLI
INPUT NDOC F_NDOCDA JOIN LF_CLIFO TO LF_DOC INTO TIPOCF==TIPOCF CODCF==CODCF
DISPLAY "Num." CODNUM INPUT PROVV "D" SELECT
DISPLAY "Anno" ANNO INPUT ANNO F_ANNO SELECT
DISPLAY "Provv" PROVV INPUT CODNUM F_NUM SELECT
DISPLAY "Tipo" TIPODOC INPUT NDOC F_NDOCDA
DISPLAY "N.Doc. " NDOC DISPLAY "Num." CODNUM
DISPLAY "Stato@R" STATO DISPLAY "Anno" ANNO
DISPLAY "Data\ndocumento" DATADOC DISPLAY "Provv" PROVV
DISPLAY "C/F" TIPOCF DISPLAY "Tipo" TIPODOC
DISPLAY "Codice" CODCF DISPLAY "N.Doc. " NDOC
DISPLAY "Ragione Sociale@50" LF_CLIFO->RAGSOC DISPLAY "Stato@R" STATO
OUTPUT F_NDOCDA NDOC DISPLAY "Data\ndocumento" DATADOC
CHECKTYPE NORMAL DISPLAY "C/F" TIPOCF
FLAG "R" DISPLAY "Codice" CODCF
END DISPLAY "Ragione Sociale@50" LF_CLIFO->RAGSOC
OUTPUT F_NDOCDA NDOC
NUMBER F_NDOCA 6 CHECKTYPE NORMAL
BEGIN FLAG "R"
PROMPT 26 6 "A Numero " END
USE LF_DOC SELECT CODCF=#F_CODCLI
JOIN LF_CLIFO TO LF_DOC INTO TIPOCF==TIPOCF CODCF==CODCF NUMBER F_NDOCA 6
INPUT PROVV "D" SELECT BEGIN
INPUT ANNO F_ANNO SELECT PROMPT 26 6 "A Numero "
INPUT CODNUM F_NUM SELECT USE LF_DOC SELECT CODCF=#F_CODCLI
INPUT NDOC F_NDOCA JOIN LF_CLIFO TO LF_DOC INTO TIPOCF==TIPOCF CODCF==CODCF
DISPLAY "Num." CODNUM INPUT PROVV "D" SELECT
DISPLAY "Anno" ANNO INPUT ANNO F_ANNO SELECT
DISPLAY "Provv" PROVV INPUT CODNUM F_NUM SELECT
DISPLAY "Tipo" TIPODOC INPUT NDOC F_NDOCA
DISPLAY "N.Doc. " NDOC DISPLAY "Num." CODNUM
DISPLAY "Stato@R" STATO DISPLAY "Anno" ANNO
DISPLAY "Data\ndocumento" DATADOC DISPLAY "Provv" PROVV
DISPLAY "C/F" TIPOCF DISPLAY "Tipo" TIPODOC
DISPLAY "Codice" CODCF DISPLAY "N.Doc. " NDOC
DISPLAY "Ragione Sociale@50" LF_CLIFO->RAGSOC DISPLAY "Stato@R" STATO
OUTPUT F_NDOCA NDOC DISPLAY "Data\ndocumento" DATADOC
CHECKTYPE NORMAL DISPLAY "C/F" TIPOCF
FLAG "R" DISPLAY "Codice" CODCF
END DISPLAY "Ragione Sociale@50" LF_CLIFO->RAGSOC
OUTPUT F_NDOCA NDOC
STRING F_CODIVA 4 CHECKTYPE NORMAL
BEGIN FLAG "R"
PROMPT 4 8 "Codice IVA " END
USE %IVA
INPUT CODTAB F_CODIVA STRING F_CODIVA 4
DISPLAY "Codice" CODTAB BEGIN
DISPLAY "Descrizione@50" S0 PROMPT 4 8 "Codice IVA "
OUTPUT F_CODIVA CODTAB USE %IVA
CHECKTYPE REQUIRED INPUT CODTAB F_CODIVA
END DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
STRING F_PROFILO 70 50 OUTPUT F_CODIVA CODTAB
BEGIN CHECKTYPE REQUIRED
PROMPT 8 -3 "Profilo " END
PSELECT
GROUP 1 STRING F_PROFILO 70 50
END BEGIN
PROMPT 8 -3 "Profilo "
BUTTON DLG_OK 10 2 PSELECT
BEGIN GROUP 1
PROMPT -12 -1 "" END
END
ENDPAGE
BUTTON DLG_QUIT 10 2
BEGIN ENDMASK
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK

View File

@ -1,392 +1,362 @@
#include <applicat.h> #include <applicat.h>
#include <automask.h> #include <automask.h>
#include <progind.h> #include <progind.h>
#include <reprint.h> #include <reprint.h>
#include <reputils.h> #include <reputils.h>
#include "../db/dblib.h" #include "../db/dblib.h"
#include "../ve/velib.h" #include "../ve/velib.h"
#include "../mr/mrplib.h"
#include "ps0920.h"
#include "ps0920300a.h" #include "ps0920.h"
#include "ps0920300a.h"
/////////////////////////////////////////////////////////////////////////////
// MASCHERA /////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////// // MASCHERA
class TPianifica_impianti_mask : public TAutomask /////////////////////////////////////////////////////////////////////////////
{ class TPianifica_impianti_mask : public TAutomask
protected: {
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TPianifica_impianti_mask(); public:
virtual ~TPianifica_impianti_mask(); TPianifica_impianti_mask();
}; virtual ~TPianifica_impianti_mask();
};
TPianifica_impianti_mask::TPianifica_impianti_mask()
: TAutomask("ps0920300a") TPianifica_impianti_mask::TPianifica_impianti_mask()
{ : TAutomask("ps0920300a")
} {
}
TPianifica_impianti_mask::~TPianifica_impianti_mask()
{ TPianifica_impianti_mask::~TPianifica_impianti_mask()
} {
}
bool TPianifica_impianti_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{ bool TPianifica_impianti_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
const int id = o.dlg(); {
switch (id) const int id = o.dlg();
{ switch (id)
case F_ADATA: {
if (e == fe_modify) case F_ADATA:
{ if (e == fe_modify)
const TDate dadata = get_date(F_DADATA); {
const int daanno = dadata.year(); const TDate dadata = get_date(F_DADATA);
const TDate adata = o.get(); const int daanno = dadata.year();
const int aanno = adata.year(); const TDate adata = o.get();
if (daanno != aanno) const int aanno = adata.year();
return error_box(TR("Le date devono appartenere allo stesso anno!")); if (daanno != aanno)
} return error_box(TR("Le date devono appartenere allo stesso anno!"));
break; }
default: break;
break; default:
} break;
return true; }
} return true;
}
/////////////////////////////////////////////////////////////////
// APPLICAZIONE /////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////// // APPLICAZIONE
class TPianifica_impianti : public TSkeleton_application /////////////////////////////////////////////////////////////////
{ class TPianifica_impianti : public TSkeleton_application
TPianifica_impianti_mask * _mask; {
virtual bool check_autorization() const {return false;} TPianifica_impianti_mask * _mask;
virtual const char * extra_modules() const {return "ve";} TArray _target_dates;
bool find_my_sister_row(const TRiga_documento& source_row, const TString& a_codnum, const TCodice_articolo& son_codartmag,
const TString& a_impianto, TRectype& sister_row, TLog_report& log) const; virtual bool check_autorization() const {return false;}
void delete_old_docs(); virtual const char * extra_modules() const {return "ve";}
void create_new_docs(TLog_report& log); bool find_my_sister_row(const TRiga_documento& source_row, const TString& a_codnum, const TCodice_articolo& son_codartmag,
const TString& a_impianto, TRectype& sister_row, TLog_report& log) const;
protected: void delete_old_docs();
virtual void main_loop(); void create_new_docs(TLog_report& log);
virtual bool create();
protected:
public: virtual void main_loop();
const TPianifica_impianti_mask & mask() const {return *_mask;} virtual bool create();
virtual ~TPianifica_impianti();
}; public:
const TPianifica_impianti_mask & mask() const {return *_mask;}
virtual ~TPianifica_impianti();
void TPianifica_impianti::delete_old_docs() };
{
TDate dadata = _mask->get_date(F_DADATA);
TDate adata = _mask->get_date(F_ADATA); void TPianifica_impianti::delete_old_docs()
const int lastday = adata - dadata; {
const int anno = dadata.year(); TDate dadata = _mask->get_date(F_DADATA);
const TString& codnum = _mask->get(F_ANUM); //accoppa i documenti con numerazione di destinazione.. TDate adata = _mask->get_date(F_ADATA);
const TString& impianto = _mask->get(F_DAIMP); //..e con l'impianto sorgente! (rompe la supersimmetria) const int lastday = adata - dadata;
TRelation rel_doc(LF_DOC); const int anno = dadata.year();
const TString& codnum = _mask->get(F_NUM); //accoppa i documenti con numerazione sorgente
TRectype darec(LF_DOC), arec(LF_DOC); const TString& impianto = _mask->get(F_AIMP); //..e con l'impianto destinazione
TDate from(1, 1, anno - 1); TRelation rel_doc(LF_DOC);
TDate to(31, 12, anno); TRectype darec(LF_DOC), arec(LF_DOC);
TDate from(1, 1, anno - 1);
darec.put(DOC_DATADOC, from); TDate to(31, 12, anno);
darec.put(DOC_PROVV, "D");
darec.put(DOC_ANNO, anno); darec.put(DOC_DATADOC, from);
darec.put(DOC_CODNUM, codnum); darec.put(DOC_PROVV, "D");
darec.put(DOC_ANNO, anno);
arec.put(DOC_DATADOC, to); darec.put(DOC_CODNUM, codnum);
arec.put(DOC_PROVV, "D");
arec.put(DOC_ANNO, anno); arec.put(DOC_DATADOC, to);
arec.put(DOC_CODNUM, codnum); arec.put(DOC_PROVV, "D");
arec.put(DOC_ANNO, anno);
TString filtro; arec.put(DOC_CODNUM, codnum);
filtro << "CODNUM='" << codnum << "'";
TString filtro;
TCursor cur_doc (&rel_doc, filtro, 3, &darec, &arec); filtro << "CODNUM='" << codnum << "'";
const long items = cur_doc.items();
cur_doc.freeze(); TCursor cur_doc (&rel_doc, filtro, 3, &darec, &arec);
TProgind progind(items, "Eliminazione vecchi documenti in corso...", false, true); const long items = cur_doc.items();
cur_doc.freeze();
dadata += _delays[0]; TProgind progind(items, "Eliminazione vecchi documenti in corso...", false, true);
adata += _delays[lastday ];
for (cur_doc = 0; cur_doc.pos() < items; ++cur_doc) dadata = (TDate&) _target_dates[0];
{ adata = (TDate&) _target_dates[lastday];
progind.addstatus(1); for (cur_doc = 0; cur_doc.pos() < items; ++cur_doc)
TDocumento doc(cur_doc.curr()); {
//trovato un documento che soddisfa il darec/arec deve eliminarlo se la prima riga ha impianto.. progind.addstatus(1);
//..uguale a quello nel campo F_AIMP sulla maschera TDocumento doc(cur_doc.curr());
const TDate h_datacons = doc.get_date(DOC_DATACONS); //trovato un documento che soddisfa il darec/arec deve eliminarlo se la prima riga ha impianto..
bool imp_ok =false, datacons_ok = false; //..uguale a quello nel campo F_AIMP sulla maschera
const TDate h_datacons = doc.get_date(DOC_DATACONS);
for (int i = 1; i <= doc.physical_rows(); i++) bool imp_ok =false, datacons_ok = false;
{
const TRiga_documento& rigadoc = doc[i]; for (int i = 1; i <= doc.physical_rows(); i++)
if (rigadoc.get(RDOC_IMPIANTO) == impianto) {
imp_ok = true; const TRiga_documento& rigadoc = doc[i];
const TDate datacons = rigadoc.get_date(RDOC_DATACONS); if (rigadoc.get(RDOC_IMPIANTO) == impianto)
if (datacons.ok()) imp_ok = true;
datacons_ok = (datacons >= dadata) && (datacons <= adata); const TDate datacons = rigadoc.get_date(RDOC_DATACONS);
else if (datacons.ok())
datacons_ok = (h_datacons >= dadata) && (h_datacons <= adata); datacons_ok = (datacons >= dadata) && (datacons <= adata);
if (imp_ok && datacons_ok) else
{ datacons_ok = (h_datacons >= dadata) && (h_datacons <= adata);
doc.remove(); if (imp_ok && datacons_ok)
break; {
} doc.remove();
} //for(int i =... break;
} //for(cur_doc.. }
} } //for(int i =...
} //for(cur_doc..
bool TPianifica_impianti::find_my_sister_row(const TRiga_documento& source_row, const TString& a_codnum, }
const TCodice_articolo& son_codartmag,
const TString& a_impianto, TRectype& sister_row, void TPianifica_impianti::create_new_docs(TLog_report& log)
TLog_report& log) const {
{ const TDate dadata = _mask->get_date(F_DADATA);
TRelation rel_righedoc(LF_RIGHEDOC); const TDate adata = _mask->get_date(F_ADATA);
TString filtro; const int anno = dadata.year();
filtro << "(CODNUM='" << a_codnum << "')&&"; const TString& codnum = _mask->get(F_NUM); //crea documenti con numerazioni sorgenti...
filtro << "(IMPIANTO='" << a_impianto << "')&&"; const TString& da_impianto = _mask->get(F_DAIMP); //..con l'impianto sorgente! (conserva la supersimmetria)
filtro << "(CODARTMAG='" << son_codartmag << "')"; //questi servono dopo!!!
TCursor cur_righedoc(&rel_righedoc, filtro, 4, &source_row, &source_row); const TString& a_impianto = _mask->get(F_AIMP);
const long items = cur_righedoc.items(); TRelation rel_doc(LF_DOC);
TRectype darec(LF_DOC), arec(LF_DOC);
if (items != 1) TLocalisamfile db(LF_RDIST);
{ TDate from(1, 1, anno - 1);
TString errore; TDate to(31, 12, anno);
if (items == 0)
{ db.setkey(2);
errore.format("Non ci sono documenti per l'articolo %s", (const char*)son_codartmag); darec.put(DOC_DATADOC, from);
log.log(2, errore); darec.put(DOC_PROVV, "D");
} darec.put(DOC_ANNO, anno);
else darec.put(DOC_CODNUM, codnum);
{
errore.format("Ci sono %ld documenti per l'articolo %s", items, (const char*)son_codartmag); arec.put(DOC_DATADOC, to);
log.log(1, errore); arec.put(DOC_PROVV, "D");
} arec.put(DOC_ANNO, anno);
} arec.put(DOC_CODNUM, codnum);
if (items > 0) TString filtro;
{ TDistinta_tree albero;
cur_righedoc = 0; filtro << "CODNUM='" << codnum << "'";
sister_row = cur_righedoc.curr(); TCursor cur_doc (&rel_doc, filtro, 3, &darec, &arec);
} const long items = cur_doc.items();
return items > 0; cur_doc.freeze();
} TProgind progind(items, "Generazione nuovi documenti in corso...", false, true);
void TPianifica_impianti::create_new_docs(TLog_report& log) for (cur_doc = 0; cur_doc.pos() < items; ++cur_doc)
{ {
const TDate dadata = _mask->get_date(F_DADATA); progind.addstatus(1);
const TDate adata = _mask->get_date(F_ADATA); TDocumento doc(cur_doc.curr());
const int anno = dadata.year(); TDocumento nuovo_doc('D', anno, codnum, 0);
const TString& da_codnum = _mask->get(F_DANUM); //crea documenti con numerazioni sorgenti...
const TString& da_impianto = _mask->get(F_DAIMP); //..con l'impianto sorgente! (conserva la supersimmetria) // crea un documento...
nuovo_doc.copy_data(nuovo_doc, doc);
//questi servono dopo!!! nuovo_doc.put(DOC_TIPODOC, codnum); //il tipo deve corrispondere alla numerazione!
const TString& a_codnum = _mask->get(F_ANUM); nuovo_doc.put(DOC_STATO, 2);
const int ritardo = _mask->get_int(F_RITARDO); TDate datadoc = nuovo_doc.get(DOC_DATADOC);
const TString& a_impianto = _mask->get(F_AIMP);
TDate h_datacons = nuovo_doc.get(DOC_DATACONS);
TRelation rel_doc(LF_DOC);
if (h_datacons < dadata || h_datacons > adata)
TRectype darec(LF_DOC), arec(LF_DOC); continue;
TLocalisamfile db(LF_RDIST);
TDate from(1, 1, anno - 1); TDate datacons = h_datacons;
TDate to(31, 12, anno);
db.setkey(2); const int ndays = datacons - dadata;
darec.put(DOC_DATADOC, from);
if (ndays > 365)
darec.put(DOC_PROVV, "D"); continue;
darec.put(DOC_ANNO, anno);
darec.put(DOC_CODNUM, da_codnum); datacons = (TDate &)_target_dates[ndays];
nuovo_doc.put(DOC_DATACONS, datacons);
arec.put(DOC_DATADOC, to);
arec.put(DOC_PROVV, "D"); for (int i = 1; i <= doc.rows(); i++)
arec.put(DOC_ANNO, anno); {
arec.put(DOC_CODNUM, da_codnum); const TRiga_documento& source_row = doc[i]; //riga del documento sorgente
const TString80 codice(source_row.get(RDOC_CODARTMAG));
TString filtro;
filtro << "CODNUM='" << da_codnum << "'";
TCursor cur_doc (&rel_doc, filtro, 3, &darec, &arec); //il casino va fatto solo se la riga non e' gia' evasa, l'impianto e' quello selezionato e la riga e' riga articolo
const long items = cur_doc.items(); if (source_row.get(RDOC_IMPIANTO) == da_impianto && source_row.is_articolo())
cur_doc.freeze(); {
TProgind progind(items, "Generazione nuovi documenti in corso...", false, true);
db.zero();
TDistinta_tree albero; db.put("CODCOMP", codice);
TRectype sister_row(LF_RIGHEDOC); const int err = db.read(_isgteq);
for (cur_doc = 0; cur_doc.pos() < items; ++cur_doc) if (err == NOERR && codice == db.get("CODCOMP"))
{ {
progind.addstatus(1); const TCodice_articolo dest_codart = db.get("CODDIST");
TDocumento doc(cur_doc.curr()); TArray labors;
TDocumento nuovo_doc('D', anno, codnum, 0); bool found = false;
// crea un documento... albero.set_root(dest_codart);
nuovo_doc.copy_data(nuovo_doc, doc);
nuovo_doc.put(DOC_TIPODOC, codnum); //il tipo deve corrispondere alla numerazione! for (TRiga_esplosione * l = albero.first_labor(labors); l != NULL && !found; l = albero.next_labor(labors))
nuovo_doc.put(DOC_STATO, 2); {
TDate datadoc = nuovo_doc.get(DOC_DATADOC); TLavorazione * lav = TDistinta_tree::find_labor(l);
TDate h_datacons = nuovo_doc.get(DOC_DATACONS); if (lav != NULL && a_impianto == lav->cod_impianto(0))
{
if (h_datacons < dadata || h_datacons > adata) const int priority = source_row.get_int(RDOC_PRIORITY);
continue; TDate datacons = source_row.get_date(RDOC_DATACONS);
TDate datacons = h_datacons; if (!datacons.ok())
datacons = h_datacons;
const int ndays = datacons - dadata;
const int ndays = datacons - dadata; datacons = (TDate &)_target_dates[ndays];
if (datacons < dadata || datacons > adata)
if (ndays > 365) continue;
continue; //..e la sua riga vuota
TRiga_documento& nuova_rigadoc = nuovo_doc.new_row(source_row.get(RDOC_TIPORIGA));
datacons += _delays[ndays]; //riempie la nuova riga
nuovo_doc.put(DOC_DATACONS, datacons);
nuovo_doc.copy_data(nuova_rigadoc, source_row);
for (int i = 1; i <= doc.rows(); i++) nuova_rigadoc.put(RDOC_CODART, dest_codart);
{ nuova_rigadoc.put(RDOC_CODARTMAG, dest_codart);
const TRiga_documento& source_row = doc[i]; //riga del documento sorgente nuova_rigadoc.put(RDOC_PRIORITY, priority);
const TString80 codice(source_row.get(RDOC_CODARTMAG)); nuova_rigadoc.zero(nuova_rigadoc.field_qtaevasa());
nuova_rigadoc.zero(RDOC_RIGAEVASA);
if (codice == "008BTN008033MP01") datacons = source_row.get_date(RDOC_DATACONS);
int i = 1; if (datacons.ok())
{
//il casino va fatto solo se la riga non e' gia' evasa, l'impianto e' quello selezionato e la riga e' riga articolo datacons = (TDate &)_target_dates[ndays];
if (source_row.get(RDOC_IMPIANTO) == da_impianto && source_row.is_articolo()) nuova_rigadoc.put(RDOC_DATACONS, datacons);
{ }
nuova_rigadoc.put(RDOC_IMPIANTO, a_impianto);
db.zero(); const TString &linea = lav->cod_linea(0);
db.put("CODCOMP", codice); nuova_rigadoc.put(RDOC_LINEA, linea);
const int err = db.read(_isgteq); found = true;
}
if (err == NOERR && codice == db.get("CODCOMP")) }
{ }
TCodice_articolo son_codartmag; } //if(source_row.get...
albero.curr_code(son_codartmag); //e' risalito al codice dell'articolo figlio } //for(int i...
//cerca la riga sua sorella, ovvero quella che viene dalla stessa riga ordine mamma originaria if (nuovo_doc.physical_rows() > 0)
if (find_my_sister_row(source_row, a_codnum, son_codartmag, a_impianto, sister_row, log)) {
{ int err = nuovo_doc.write();
TDate datacons = sister_row.get_date(RDOC_DATACONS); if (err != NOERR)
//ignora righe con data consegna fuori dal range selezionato {
if (datacons < dadata || datacons > adata) TString errore;
continue; errore.format("Errore %d nella scrittura del documento %ld", err, nuovo_doc.get_long(DOC_NDOC));
datacons += ritardo; log.log(2, errore);
const int priority = sister_row.get_int(RDOC_PRIORITY); }
}
//crea un documento... } //for(cur_doc...
TDocumento nuovo_doc('D', anno, a_codnum, 0); }
nuovo_doc.copy_data(nuovo_doc, doc);
nuovo_doc.put(DOC_TIPODOC, a_codnum); //il tipo deve corrispondere alla numerazione! void TPianifica_impianti::main_loop()
{
//..e la sua riga vuota while (_mask->run() == K_ENTER)
TRiga_documento& nuova_rigadoc = nuovo_doc.new_row(source_row.get(RDOC_TIPORIGA)); {
//riempie la nuova riga TDate dadata = _mask->get_date(F_DADATA);
nuovo_doc.copy_data(nuova_rigadoc, source_row); TDate adata = _mask->get_date(F_ADATA);
nuova_rigadoc.put(RDOC_PRIORITY, priority); TDate data, end_date;
nuova_rigadoc.put(RDOC_DATACONS, datacons); const TString8 impianto = _mask->get(F_AIMP);
const TString8 linea = _mask->get(F_LIN);
//..e alla fine scrive testata e riga!! TMRP_calendar c(linea, impianto);
int err = nuovo_doc.write(); int ndays = adata - dadata + 1;
if (err != NOERR) const int ritardo = _mask->get_int(F_RITARDO);
{ int min, max;
TString errore;
errore.format("Errore %d nella scrittura del documento %ld", err, nuovo_doc.get_long(DOC_NDOC)); data = dadata;
log.log(2, errore); end_date = dadata;
} end_date += ritardo;
if (!datacons.ok()) if (!data.is_holiday() && data.wday() != 6)
datacons = h_datacons; {
const int ndays = datacons - dadata; c.turni(end_date, min, max);
datacons += _delays[ndays];
if (datacons < dadata || datacons > adata) while (max == 0 || end_date.is_holiday() || end_date.wday() == 6)
continue; c.turni(++end_date, min, max);
//..e la sua riga vuota }
TRiga_documento& nuova_rigadoc = nuovo_doc.new_row(source_row.get(RDOC_TIPORIGA)); _target_dates.add(end_date, 0);
//riempie la nuova riga
for (int i = 1; i < 366; i++)
nuovo_doc.copy_data(nuova_rigadoc, source_row); {
nuova_rigadoc.put(RDOC_CODART, dest_codart); data = dadata;
nuova_rigadoc.put(RDOC_CODARTMAG, dest_codart); data += i;
nuova_rigadoc.put(RDOC_PRIORITY, priority); end_date = (TDate &) _target_dates[i - 1];
nuova_rigadoc.zero(nuova_rigadoc.field_qtaevasa()); ++end_date;
nuova_rigadoc.zero(RDOC_RIGAEVASA); if (!data.is_holiday() && data.wday() != 6)
datacons = source_row.get_date(RDOC_DATACONS); {
if (datacons.ok()) c.turni(end_date, min, max);
{
datacons += _delays[ndays]; while (max == 0 || end_date.is_holiday() || end_date.wday() == 6)
nuova_rigadoc.put(RDOC_DATACONS, datacons); {
} ++end_date;
nuova_rigadoc.put(RDOC_IMPIANTO, a_impianto); c.turni(end_date, min, max);
const TString &linea = lav->cod_linea(0); }
nuova_rigadoc.put(RDOC_LINEA, linea);
found = true; }
} else
if (end_date - data > ritardo)
} --end_date;
} _target_dates.add(end_date, i);
} //if(source_row.get... }
} //for(int i... delete_old_docs(); //intanto accoppa i vecchi documenti di tipo destinazione
} //for(cur_doc... //poi crea i nuovi documenti di produzione
} TLog_report log("Errori generazione documenti pianificazione");
void TPianifica_impianti::main_loop() create_new_docs(log);
{
while (_mask->run() == K_ENTER) TReport_book buc;
{ buc.add(log);
TDate dadata = _mask->get_date(F_DADATA); buc.preview();
TDate adata = _mask->get_date(F_ADATA); }
TDate data; }
int ndays = adata - dadata + 1;
const int ritardo = _mask->get_int(F_RITARDO); bool TPianifica_impianti::create()
_delays[0] = ritardo; {
open_files(LF_TAB, LF_TABCOM, LF_DOC, LF_RIGHEDOC, LF_DIST, LF_RDIST, LF_ANAMAG, NULL);
for (int i = 1; i < 366; i++) _mask = new TPianifica_impianti_mask;
{ return TSkeleton_application:: create();
data = dadata; }
data += i;
const TDate workdate = data; TPianifica_impianti::~TPianifica_impianti()
if (!data.is_holiday() && data.wday() != 6) {
{ delete _mask;
TDate end_date = data; }
end_date += _delays[i - 1];
while (end_date.is_holiday() || end_date.wday() == 6) TPianifica_impianti & app() { return (TPianifica_impianti&) main_app();}
++end_date;
_delays[i] = end_date - workdate; int ps0920300(int argc, char* argv[])
} {
else TPianifica_impianti a;
_delays[i] = _delays [i - 1]; a.run(argc, argv, "Pianificazione impianti");
} return 0;
delete_old_docs(); //intanto accoppa i vecchi documenti di tipo destinazione }
//poi crea i nuovi documenti di produzione
TLog_report log("Errori generazione documenti pianificazione");
create_new_docs(log);
TReport_book buc;
buc.add(log);
buc.preview();
}
bool TPianifica_impianti::create()
{
open_files(LF_TAB, LF_TABCOM, LF_DOC, LF_RIGHEDOC, LF_DIST, LF_RDIST, LF_ANAMAG, NULL);
_mask = new TPianifica_impianti_mask;
return TSkeleton_application:: create();
}
TPianifica_impianti::~TPianifica_impianti()
{
delete _mask;
}
TPianifica_impianti & app() { return (TPianifica_impianti&) main_app();}
int ps0920300(int argc, char* argv[])
{
TPianifica_impianti a;
a.run(argc, argv, "Pianificazione impianti");
return 0;
}

View File

@ -1,12 +1,12 @@
#define F_DANUM 101 #define F_NUM 101
#define F_DANUMDESC 102 #define F_NUMDESC 102
#define F_ANUM 103 #define F_DAIMP 105
#define F_ANUMDESC 104 #define F_DAIMPDESC 106
#define F_DAIMP 105 #define F_AIMP 107
#define F_DAIMPDESC 106 #define F_AIMPDESC 108
#define F_AIMP 107 #define F_DADATA 109
#define F_AIMPDESC 108 #define F_ADATA 110
#define F_DADATA 109 #define F_RITARDO 111
#define F_ADATA 110 #define F_PROFILO 120
#define F_RITARDO 111 #define F_LIN 121
#define F_PROFILO 120 #define F_LINDESC 122

View File

@ -1,153 +1,146 @@
#include "ps0920300a.h" #include "ps0920300a.h"
PAGE "Pianificazione impianti" -1 -1 80 14 TOOLBAR "topbar" 0 0 0 2
#include <elabar.h>
GROUPBOX -1 78 4 ENDPAGE
BEGIN
PROMPT 1 1 "@bArea da pianificare" PAGE "Pianificazione impianti" -1 -1 80 16
FLAGS ""
END GROUPBOX -1 78 4
BEGIN
STRING F_DANUM 4 PROMPT 1 1 "@bArea pianificata"
BEGIN FLAGS ""
PROMPT 2 2 "Numerazione " END
HELP "Codice numerazione"
USE %NUM STRING F_NUM 4
INPUT CODTAB F_DANUM BEGIN
DISPLAY "Codice" CODTAB PROMPT 2 2 "Numerazione "
DISPLAY "Descrizione@50" S0 HELP "Codice numerazione"
OUTPUT F_DANUM CODTAB USE %NUM
OUTPUT F_DANUMDESC S0 INPUT CODTAB F_NUM
CHECKTYPE REQUIRED DISPLAY "Codice" CODTAB
FLAGS "UPA" DISPLAY "Descrizione@50" S0
WARNING "Numerazione assente" OUTPUT F_NUM CODTAB
END OUTPUT F_NUMDESC S0
CHECKTYPE REQUIRED
STRING F_DANUMDESC 50 FLAGS "UPA"
BEGIN WARNING "Numerazione assente"
PROMPT 23 2 "" END
HELP "Descrizione numerazione"
USE %NUM KEY 2 STRING F_NUMDESC 50
INPUT S0 F_DANUMDESC BEGIN
DISPLAY "Descrizione@60" S0 PROMPT 23 2 ""
DISPLAY "Codice" CODTAB HELP "Descrizione numerazione"
COPY OUTPUT F_DANUM USE %NUM KEY 2
END INPUT S0 F_NUMDESC
DISPLAY "Descrizione@60" S0
STRING F_DAIMP 5 DISPLAY "Codice" CODTAB
BEGIN COPY OUTPUT F_NUM
PROMPT 2 3 "Impianto " END
USE IMP
INPUT CODTAB F_DAIMP STRING F_DAIMP 5
DISPLAY "Codice@5" CODTAB BEGIN
DISPLAY "Descrizione@60" S0 PROMPT 2 3 "Impianto "
OUTPUT F_DAIMP CODTAB USE IMP
OUTPUT F_DAIMPDESC S0 INPUT CODTAB F_DAIMP
CHECKTYPE REQUIRED DISPLAY "Codice@5" CODTAB
FLAGS "UZ" DISPLAY "Descrizione@60" S0
WARNING "E l'impianto?" OUTPUT F_DAIMP CODTAB
END OUTPUT F_DAIMPDESC S0
CHECKTYPE REQUIRED
STRING F_DAIMPDESC 50 FLAGS "UZ"
BEGIN WARNING "E l'impianto?"
PROMPT 23 3 "" END
USE IMP KEY 2
INPUT S0 F_DAIMPDESC STRING F_DAIMPDESC 50
DISPLAY "Descrizione@60" S0 BEGIN
DISPLAY "Codice@5" CODTAB PROMPT 23 3 ""
COPY OUTPUT F_DAIMP USE IMP KEY 2
END INPUT S0 F_DAIMPDESC
DISPLAY "Descrizione@60" S0
GROUPBOX -1 78 4 DISPLAY "Codice@5" CODTAB
BEGIN COPY OUTPUT F_DAIMP
PROMPT 1 6 "@bArea pianificata" END
FLAGS ""
END GROUPBOX -1 78 3
BEGIN
STRING F_ANUM 4 PROMPT 1 6 "@bArea da pianificare"
BEGIN FLAGS ""
PROMPT 2 7 "Numerazione " END
HELP "Codice numerazione"
COPY USE F_DANUM STRING F_AIMP 5
INPUT CODTAB F_ANUM BEGIN
DISPLAY "Codice" CODTAB PROMPT 2 7 "Impianto "
DISPLAY "Descrizione@50" S0 COPY USE F_DAIMP
OUTPUT F_ANUM CODTAB INPUT CODTAB F_AIMP
OUTPUT F_ANUMDESC S0 DISPLAY "Codice@5" CODTAB
CHECKTYPE REQUIRED DISPLAY "Descrizione@60" S0
FLAG "UPA" OUTPUT F_AIMP CODTAB
WARNING "Numerazione assente" OUTPUT F_AIMPDESC S0
END CHECKTYPE REQUIRED
FLAGS "UZ"
STRING F_ANUMDESC 50 WARNING "E l'impianto?"
BEGIN END
PROMPT 23 7 ""
HELP "Descrizione numerazione" STRING F_AIMPDESC 50
USE %NUM KEY 2 BEGIN
INPUT S0 F_ANUMDESC PROMPT 23 7 ""
DISPLAY "Descrizione@60" S0 USE IMP KEY 2
DISPLAY "Codice" CODTAB INPUT S0 F_AIMPDESC
COPY OUTPUT F_ANUM DISPLAY "Descrizione@60" S0
END DISPLAY "Codice@5" CODTAB
COPY OUTPUT F_AIMP
STRING F_AIMP 5 END
BEGIN
PROMPT 2 8 "Impianto " STRING F_LIN 5
COPY USE F_DAIMP BEGIN
INPUT CODTAB F_AIMP PROMPT 2 10 "Linea "
DISPLAY "Codice@5" CODTAB USE LNP
DISPLAY "Descrizione@60" S0 INPUT CODTAB F_LIN
OUTPUT F_AIMP CODTAB DISPLAY "Codice" CODTAB
OUTPUT F_AIMPDESC S0 DISPLAY "Descrizione@60" S0
CHECKTYPE REQUIRED OUTPUT F_LIN CODTAB
FLAGS "UZ" OUTPUT F_LINDESC S0
WARNING "E l'impianto?" CHECKTYPE REQUIRED
END FLAGS "UZ"
WARNING "E la linea ? "
STRING F_AIMPDESC 50 END
BEGIN
PROMPT 23 8 "" STRING F_LINDESC 50
USE IMP KEY 2 BEGIN
INPUT S0 F_AIMPDESC PROMPT 23 10 ""
DISPLAY "Descrizione@60" S0 USE LNP KEY 2
DISPLAY "Codice@5" CODTAB INPUT S0 F_LINDESC
COPY OUTPUT F_AIMP DISPLAY "Descrizione@60" S0
END DISPLAY "Codice" CODTAB
OUTPUT F_LINDESC S0
DATE F_DADATA OUTPUT F_LIN CODTAB
BEGIN END
PROMPT 2 10 "Dalla data "
CHECKTYPE REQUIRED DATE F_DADATA
END BEGIN
PROMPT 2 12 "Dalla data "
DATE F_ADATA CHECKTYPE REQUIRED
BEGIN END
PROMPT 35 10 "Alla data "
CHECKTYPE REQUIRED DATE F_ADATA
END BEGIN
PROMPT 35 12 "Alla data "
NUMBER F_RITARDO 2 CHECKTYPE REQUIRED
BEGIN END
PROMPT 2 11 "Giorni di ritardo "
FLAGS "U" NUMBER F_RITARDO 2
END BEGIN
PROMPT 2 13 "GG.Ritardo "
STRING F_PROFILO 70 50 FLAGS "U"
BEGIN END
PROMPT 8 -3 "Profilo "
PSELECT STRING F_PROFILO 70 50
END BEGIN
PROMPT 8 -3 "Profilo "
BUTTON DLG_OK 10 2 PSELECT
BEGIN END
PROMPT -12 -1 ""
END ENDPAGE
BUTTON DLG_QUIT 10 2 ENDMASK
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK

View File

@ -1,381 +1,381 @@
#include <applicat.h> #include <applicat.h>
#include <automask.h> #include <automask.h>
#include <defmask.h> #include <defmask.h>
#include <relation.h> #include <relation.h>
#include <cfven.h> #include <cfven.h>
#include <progind.h> #include <progind.h>
#include <textset.h> #include <textset.h>
#include <utility.h> #include <utility.h>
#include "../db/dblib.h" #include "../db/dblib.h"
#include "../ve/velib.h" #include "../ve/velib.h"
#include <rdoc.h> #include <rdoc.h>
#include "ps0920.h" #include "ps0920.h"
#include "ps0920400a.h" #include "ps0920400a.h"
class TShuttle : public TObject class TShuttle : public TObject
{ {
TString _codnum; TString _codnum;
TString4 _provv; TString4 _provv;
TString _impianto; TString _impianto;
int _anno; int _anno;
TString _codart; TString _codart;
TString _codart_orig; TString _codart_orig;
long _ndoc; long _ndoc;
int _nriga; int _nriga;
real _qta; real _qta;
protected: protected:
virtual TObject* dup() const { return new TShuttle(*this); } virtual TObject* dup() const { return new TShuttle(*this); }
void get_codart_orig(const TRectype & rec); void get_codart_orig(const TRectype & rec);
const real qta_orig(); const real qta_orig();
public: public:
const TString & codnum() const { return _codnum; } const TString & codnum() const { return _codnum; }
const TString & provv() const { return _provv; } const TString & provv() const { return _provv; }
const int anno() const { return _anno; } const int anno() const { return _anno; }
const long ndoc() const { return _ndoc; } const long ndoc() const { return _ndoc; }
const int nriga() const { return _nriga; } const int nriga() const { return _nriga; }
const TString & codart() const { return _codart; } const TString & codart() const { return _codart; }
const TString & codart_orig() const { return _codart_orig; } const TString & codart_orig() const { return _codart_orig; }
const TString & impianto() const { return _impianto; } const TString & impianto() const { return _impianto; }
const real & qta() const { return _qta; } const real & qta() const { return _qta; }
const real scarto(); const real scarto();
TShuttle(const TRectype & rec); TShuttle(const TRectype & rec);
TShuttle(const TShuttle & s); TShuttle(const TShuttle & s);
void add(const TRectype & rec); void add(const TRectype & rec);
static const char * key(const TRectype & rec); static const char * key(const TRectype & rec);
const char * key(bool full = false) const; const char * key(bool full = false) const;
virtual ~TShuttle() {} virtual ~TShuttle() {}
}; };
const real TShuttle::scarto() const real TShuttle::scarto()
{ {
real scarto = qta_orig(); real scarto = qta_orig();
TDistinta_tree d; TDistinta_tree d;
TArray boom; TArray boom;
if (_codart != _codart_orig) if (_codart != _codart_orig)
{ {
d.set_root(_codart_orig); d.set_root(_codart_orig);
if (d.explode(boom, false, RAGGR_EXP_NONE, 0, "A") > 0) if (d.explode(boom, false, RAGGR_EXP_NONE, 0, "A") > 0)
{ {
const int items = boom.items(); const int items = boom.items();
bool found = false; bool found = false;
for (int i = 0; i < items; i++) for (int i = 0; i < items; i++)
{ {
const TRiga_esplosione & re = (const TRiga_esplosione &) boom[i]; const TRiga_esplosione & re = (const TRiga_esplosione &) boom[i];
if (re.articolo() == _codart) if (re.articolo() == _codart)
{ {
if (re.curr_qta() != UNO && re.curr_qta() != ZERO) if (re.curr_qta() != UNO && re.curr_qta() != ZERO)
{ {
scarto *= re.curr_qta(); scarto *= re.curr_qta();
scarto.round(3); scarto.round(3);
found = true; found = true;
} }
break; break;
} }
} }
if (!found) if (!found)
scarto = qta(); scarto = qta();
} }
} }
scarto -= qta(); scarto -= qta();
return scarto < ZERO ? ZERO : scarto ; return scarto < ZERO ? ZERO : scarto ;
} }
const real TShuttle::qta_orig() const real TShuttle::qta_orig()
{ {
TToken_string key(_codnum); TToken_string key(_codnum);
key.add(_anno); key.add(_anno);
key.add(_provv); key.add(_provv);
key.add(_ndoc); key.add(_ndoc);
key.add(_nriga); key.add(_nriga);
const TRectype & r = cache().get(LF_RIGHEDOC, key); const TRectype & r = cache().get(LF_RIGHEDOC, key);
real qta(r.get_real(RDOC_QTA)); real qta(r.get_real(RDOC_QTA));
return qta; return qta;
} }
void TShuttle::get_codart_orig(const TRectype & rec) void TShuttle::get_codart_orig(const TRectype & rec)
{ {
TToken_string key(rec.get("CODNUM")); TToken_string key(rec.get("CODNUM"));
key.add(rec.get("ANNO")); key.add(rec.get("ANNO"));
key.add(rec.get("PROVV")); key.add(rec.get("PROVV"));
key.add(rec.get("NDOC")); key.add(rec.get("NDOC"));
key.add(rec.get("NRIGA")); key.add(rec.get("NRIGA"));
const TRectype & r = cache().get(LF_RIGHEDOC, key); const TRectype & r = cache().get(LF_RIGHEDOC, key);
_codart_orig = r.get(RDOC_CODARTMAG); _codart_orig = r.get(RDOC_CODARTMAG);
} }
TShuttle::TShuttle(const TRectype & rec) TShuttle::TShuttle(const TRectype & rec)
{ {
_codnum = rec.get("CODNUM"); _codnum = rec.get("CODNUM");
_provv = rec.get("PROVV"); _provv = rec.get("PROVV");
_anno = rec.get_int("ANNO"); _anno = rec.get_int("ANNO");
_ndoc = rec.get_long("NDOC"); _ndoc = rec.get_long("NDOC");
_nriga = rec.get_long("NRIGA"); _nriga = rec.get_long("NRIGA");
_codart = rec.get("CODART"); _codart = rec.get("CODART");
_impianto = rec.get("IMPIANTO"); _impianto = rec.get("IMPIANTO");
_qta = rec.get_real("QTA"); _qta = rec.get_real("QTA");
get_codart_orig(rec); get_codart_orig(rec);
} }
TShuttle::TShuttle(const TShuttle & s) TShuttle::TShuttle(const TShuttle & s)
{ {
_codnum = s._codnum; _codnum = s._codnum;
_provv = s._provv; _provv = s._provv;
_anno = s._anno; _anno = s._anno;
_ndoc = s._ndoc; _ndoc = s._ndoc;
_nriga = s._nriga; _nriga = s._nriga;
_codart = s._codart; _codart = s._codart;
_impianto = s._impianto; _impianto = s._impianto;
_qta = s._qta; _qta = s._qta;
_codart_orig = s._codart_orig; _codart_orig = s._codart_orig;
} }
void TShuttle::add(const TRectype & rec) void TShuttle::add(const TRectype & rec)
{ {
_qta += rec.get_real("QTA"); _qta += rec.get_real("QTA");
} }
const char * TShuttle::key(const TRectype & rec) const char * TShuttle::key(const TRectype & rec)
{ {
TString & key = get_tmp_string(60); TString & key = get_tmp_string(60);
key.format("%-4s", (const char *) rec.get("CODNUM")); key.format("%-4s", (const char *) rec.get("CODNUM"));
key << format("%04d", rec.get_int("ANNO")); key << format("%04d", rec.get_int("ANNO"));
key << format("%07ld", rec.get_long("NDOC")); key << format("%07ld", rec.get_long("NDOC"));
key << format("%04d", rec.get_int("NRIGA")); key << format("%04d", rec.get_int("NRIGA"));
key << rec.get("IMPIANTO"); key << rec.get("IMPIANTO");
return (const char *) key; return (const char *) key;
} }
const char * TShuttle::key(bool full) const const char * TShuttle::key(bool full) const
{ {
TString & key = get_tmp_string(60); TString & key = get_tmp_string(60);
key.format("%-4s%04d%07ld%04d", (const char *) _codnum, _anno, _ndoc, _nriga); key.format("%-4s%04d%07ld%04d", (const char *) _codnum, _anno, _ndoc, _nriga);
if (full) if (full)
key << _impianto; key << _impianto;
return (const char *) key; return (const char *) key;
} }
class TMaskPs09204 : public TAutomask class TMaskPs09204 : public TAutomask
{ {
protected: protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public: public:
TMaskPs09204(); TMaskPs09204();
virtual ~TMaskPs09204(); virtual ~TMaskPs09204();
}; };
TMaskPs09204::TMaskPs09204() TMaskPs09204::TMaskPs09204()
: TAutomask("ps0920400a") : TAutomask("ps0920400a")
{ {
} }
TMaskPs09204::~TMaskPs09204() TMaskPs09204::~TMaskPs09204()
{ {
} }
bool TMaskPs09204::on_field_event(TOperable_field& o, TField_event e, long jolly) bool TMaskPs09204::on_field_event(TOperable_field& o, TField_event e, long jolly)
{ {
const int id = o.dlg(); const int id = o.dlg();
switch (id) switch (id)
{ {
case F_CODCLI: case F_CODCLI:
if (e == fe_modify) if (e == fe_modify)
{ {
} }
default: default:
break; break;
} }
return TRUE; return TRUE;
} }
class TRiepilogoProduzionePs0920 : public TSkeleton_application class TRiepilogoProduzionePs0920 : public TSkeleton_application
{ {
TAssoc_array _riepilogo; TAssoc_array _riepilogo;
TAssoc_array _impianti; TAssoc_array _impianti;
TMaskPs09204 * _mask; TMaskPs09204 * _mask;
virtual bool check_autorization() const {return false;} virtual bool check_autorization() const {return false;}
virtual const char * extra_modules() const {return "ve";} virtual const char * extra_modules() const {return "ve";}
protected: protected:
virtual void main_loop(); virtual void main_loop();
virtual bool create(); virtual bool create();
public: public:
TAssoc_array & riepilogo() {return _riepilogo;} TAssoc_array & riepilogo() {return _riepilogo;}
TAssoc_array & impianti() {return _impianti;} TAssoc_array & impianti() {return _impianti;}
const TMaskPs09204 & mask() const {return *_mask;} const TMaskPs09204 & mask() const {return *_mask;}
virtual ~TRiepilogoProduzionePs0920(); virtual ~TRiepilogoProduzionePs0920();
}; };
bool build_riep(const TRelation& rel, void* pJolly) bool build_riep(const TRelation& rel, void* pJolly)
{ {
TRiepilogoProduzionePs0920 * app = (TRiepilogoProduzionePs0920 *) pJolly; TRiepilogoProduzionePs0920 * app = (TRiepilogoProduzionePs0920 *) pJolly;
TAssoc_array & r = app->riepilogo(); TAssoc_array & r = app->riepilogo();
const TString key = TShuttle::key(rel.curr()); const TString key = TShuttle::key(rel.curr());
TShuttle * s = (TShuttle *) r.objptr(key); TShuttle * s = (TShuttle *) r.objptr(key);
if (s == NULL) if (s == NULL)
r.add(key, new TShuttle(rel.curr())); r.add(key, new TShuttle(rel.curr()));
else else
s->add(rel.curr()); s->add(rel.curr());
const TString8 impianto = rel.curr().get("IMPIANTO"); const TString8 impianto = rel.curr().get("IMPIANTO");
if (!app->impianti().is_key(impianto)) if (!app->impianti().is_key(impianto))
app->impianti().add(impianto, impianto); app->impianti().add(impianto, impianto);
return true; return true;
} }
void TRiepilogoProduzionePs0920::main_loop() void TRiepilogoProduzionePs0920::main_loop()
{ {
while (_mask->run() == K_ENTER) while (_mask->run() == K_ENTER)
{ {
TCursor c(new TRelation(LF_RILPROD), "", 3); TCursor c(new TRelation(LF_RILPROD), "", 3);
TRectype from(c.curr()); TRectype from(c.curr());
_riepilogo.destroy(); _riepilogo.destroy();
_impianti.destroy(); _impianti.destroy();
from.put("DATA",_mask->get(F_DADATA)); from.put("DATA",_mask->get(F_DADATA));
TRectype to(from); TRectype to(from);
to.put("DATA",_mask->get(F_ADATA)); to.put("DATA",_mask->get(F_ADATA));
c.setregion(from, to); c.setregion(from, to);
const long codcli = _mask->get_long(F_CODCLI); const long codcli = _mask->get_long(F_CODCLI);
if (codcli > 0L) if (codcli > 0L)
{ {
TString filter; filter.format("CODART[1,3]==\"%03ld\"", codcli); TString filter; filter.format("CODART[1,3]==\"%03ld\"", codcli);
c.setfilter(filter); c.setfilter(filter);
} }
c.scan(build_riep, this); c.scan(build_riep, this);
TString_array keysimp; TString_array keysimp;
TAS400_recordset out("AS400(2048)"); TAS400_recordset out("AS400(2048)");
_impianti.get_keys(keysimp); _impianti.get_keys(keysimp);
keysimp.sort(); keysimp.sort();
int items = keysimp.items(); int items = keysimp.items();
out.create_field("OR", 0, 4); out.create_field("OR", 0, 4);
out.create_field("AN", 4, 4); out.create_field("AN", 4, 4);
out.create_field("NR", 8, 7); out.create_field("NR", 8, 7);
out.create_field("AR", 15, 20); out.create_field("AR", 15, 20);
int p = 35; int p = 35;
for (int i = 0; i < items;i++) for (int i = 0; i < items;i++)
{ {
out.create_field(format("Q%1d", i), p , 10); out.create_field(format("Q%1d", i), p , 10);
p += 10; p += 10;
out.create_field(format("S%1d", i), p , 10); out.create_field(format("S%1d", i), p , 10);
p += 10; p += 10;
out.create_field(format("P%1d", i), p , 10); out.create_field(format("P%1d", i), p , 10);
p += 10; p += 10;
} }
out.new_rec(""); out.new_rec("");
out.set("OR", "Ordine"); out.set("OR", "Ordine");
out.set("AN", "Anno"); out.set("AN", "Anno");
out.set("NR", "Numero"); out.set("NR", "Numero");
out.set("AR", "Articolo"); out.set("AR", "Articolo");
for (i = 0; i < items;i++) for (int i = 0; i < items;i++)
{ {
out.set(format("Q%1d", i), cache().get("IMP", (TString &)keysimp[i], "S0")); out.set(format("Q%1d", i), cache().get("IMP", (TString &)keysimp[i], "S0"));
out.set(format("S%1d", i), ""); out.set(format("S%1d", i), "");
out.set(format("P%1d", i), ""); out.set(format("P%1d", i), "");
} }
out.new_rec(""); out.new_rec("");
out.set("OR", ""); out.set("OR", "");
out.set("AN", ""); out.set("AN", "");
out.set("NR", ""); out.set("NR", "");
out.set("AR", ""); out.set("AR", "");
for (i = 0; i < items;i++) for (int i = 0; i < items;i++)
{ {
out.set(format("Q%1d", i), "Quantità"); out.set(format("Q%1d", i), "Quantità");
out.set(format("S%1d", i), "Scarto"); out.set(format("S%1d", i), "Scarto");
out.set(format("P%1d", i), "%"); out.set(format("P%1d", i), "%");
} }
TString_array keys; TString_array keys;
TString last_key; TString last_key;
_riepilogo.get_keys(keys); _riepilogo.get_keys(keys);
keys.sort(); keys.sort();
items = keys.items(); items = keys.items();
TProgind pi(items, "Esportazione"); TProgind pi(items, "Esportazione");
for (i = 0; i < items; i++) for (int i = 0; i < items; i++)
{ {
pi.addstatus(1L); pi.addstatus(1L);
TShuttle * s = (TShuttle *) _riepilogo.objptr((TString &)keys[i]); TShuttle * s = (TShuttle *) _riepilogo.objptr((TString &)keys[i]);
const TString key(s->key()); const TString key(s->key());
if (last_key != key) if (last_key != key)
{ {
last_key = key; last_key = key;
out.new_rec(""); out.new_rec("");
out.set("OR", s->codnum()); out.set("OR", s->codnum());
out.set("AN", long(s->anno())); out.set("AN", long(s->anno()));
out.set("NR", s->ndoc()); out.set("NR", s->ndoc());
out.set("AR", s->codart_orig()); out.set("AR", s->codart_orig());
} }
const int p = keysimp.find(s->impianto()); const int p = keysimp.find(s->impianto());
real scarto = s->scarto(); real scarto = s->scarto();
out.set(format("Q%1d", p), s->qta()); out.set(format("Q%1d", p), s->qta());
out.set(format("S%1d", p), scarto); out.set(format("S%1d", p), scarto);
const real perc = scarto * CENTO / (s->qta() + scarto); const real perc = scarto * CENTO / (s->qta() + scarto);
out.set(format("P%1d", p), perc.stringa(6, 2)); out.set(format("P%1d", p), perc.stringa(6, 2));
} }
TFilename f(_mask->get(F_PATH)); TFilename f(_mask->get(F_PATH));
if (!is_slash(f[f.len() - 1])) if (!is_slash(f[f.len() - 1]))
f << SLASH; f << SLASH;
f << _mask->get(F_NAME); f << _mask->get(F_NAME);
f.ext("xls"); f.ext("xls");
out.save_as(f, fmt_html); out.save_as(f, fmt_html);
} }
} }
bool TRiepilogoProduzionePs0920::create() bool TRiepilogoProduzionePs0920::create()
{ {
_mask = new TMaskPs09204; _mask = new TMaskPs09204;
return TSkeleton_application:: create(); return TSkeleton_application:: create();
} }
TRiepilogoProduzionePs0920::~TRiepilogoProduzionePs0920() TRiepilogoProduzionePs0920::~TRiepilogoProduzionePs0920()
{ {
delete _mask; delete _mask;
} }
TRiepilogoProduzionePs0920 & app() { return (TRiepilogoProduzionePs0920&) main_app();} TRiepilogoProduzionePs0920 & app() { return (TRiepilogoProduzionePs0920&) main_app();}
int ps0920400(int argc, char* argv[]) int ps0920400(int argc, char* argv[])
{ {
TRiepilogoProduzionePs0920 a; TRiepilogoProduzionePs0920 a;
a.run(argc, argv, "Riepilogo Produzione DbService"); a.run(argc, argv, "Riepilogo Produzione DbService");
return 0; return 0;
} }

View File

@ -1,8 +1,7 @@
#define F_PROFILO 30 #define F_PROFILO 30
#define F_DADATA 101 #define F_DADATA 101
#define F_ADATA 102 #define F_ADATA 102
#define F_CODCLI 103 #define F_CODCLI 103
#define F_RAGSOC 104 #define F_RAGSOC 104
#define F_PATH 105 #define F_PATH 105
#define F_NAME 106 #define F_NAME 106

View File

@ -1,83 +1,76 @@
#include "ps0920400a.h" #include "ps0920400a.h"
PAGE "Selezione Produzione" -1 -1 80 14 PAGE "Selezione Produzione" -1 -1 80 14
TOOLBAR "topbar" 0 0 0 2
DATE F_DADATA #include <elabar.h>
BEGIN ENDPAGE
PROMPT 2 2 "Dal "
FIELD S_DADATA DATE F_DADATA
END BEGIN
PROMPT 2 2 "Dal "
DATE F_ADATA FIELD S_DADATA
BEGIN END
PROMPT 2 4 "Al "
FIELD S_ADATA DATE F_ADATA
END BEGIN
PROMPT 2 4 "Al "
STRING F_CODCLI 3 FIELD S_ADATA
BEGIN END
PROMPT 2 6 "Cliente "
WARNING "Cliente assente" STRING F_CODCLI 3
FLAGS "R" BEGIN
FIELD CODCLI PROMPT 2 6 "Cliente "
USE LF_CLIFO WARNING "Cliente assente"
INPUT TIPOCF "C" FLAGS "R"
INPUT CODCF F_CODCLI FIELD CODCLI
DISPLAY "Codice" CODCF USE LF_CLIFO
DISPLAY "Ragione Sociale@50" RAGSOC INPUT TIPOCF "C"
OUTPUT F_CODCLI CODCF INPUT CODCF F_CODCLI
OUTPUT F_RAGSOC RAGSOC DISPLAY "Codice" CODCF
CHECKTYPE NORMAL DISPLAY "Ragione Sociale@50" RAGSOC
END OUTPUT F_CODCLI CODCF
OUTPUT F_RAGSOC RAGSOC
STRING F_RAGSOC 50 CHECKTYPE NORMAL
BEGIN END
WARNING "Cliente assente"
PROMPT 26 6 "" STRING F_RAGSOC 50
USE LF_CLIFO KEY 2 BEGIN
INPUT TIPOCF "C" WARNING "Cliente assente"
INPUT RAGSOC F_RAGSOC PROMPT 26 6 ""
DISPLAY "Ragione Sociale@50" RAGSOC USE LF_CLIFO KEY 2
DISPLAY "Partita IVA@12" PAIV INPUT TIPOCF "C"
DISPLAY "Codice" CODCF INPUT RAGSOC F_RAGSOC
OUTPUT F_CODCLI CODCF DISPLAY "Ragione Sociale@50" RAGSOC
OUTPUT F_RAGSOC RAGSOC DISPLAY "Partita IVA@12" PAIV
CHECKTYPE SEARCH DISPLAY "Codice" CODCF
END OUTPUT F_CODCLI CODCF
OUTPUT F_RAGSOC RAGSOC
STRING F_PATH 255 50 CHECKTYPE SEARCH
BEGIN END
PROMPT 2 8 "Cartella "
DSELECT STRING F_PATH 255 50
CHECKTYPE REQUIRED BEGIN
FLAGS "M" PROMPT 2 8 "Cartella "
END DSELECT
CHECKTYPE REQUIRED
STRING F_NAME 50 FLAGS "M"
BEGIN END
PROMPT 2 10 "File "
FSELECT "" STRING F_NAME 50
FLAGS "B" BEGIN
END PROMPT 2 10 "File "
FSELECT ""
STRING F_PROFILO 70 50 FLAGS "B"
BEGIN END
PROMPT 8 -3 "Profilo "
PSELECT STRING F_PROFILO 70 50
GROUP 1 BEGIN
END PROMPT 8 -3 "Profilo "
PSELECT
BUTTON DLG_OK 10 2 GROUP 1
BEGIN END
PROMPT -12 -1 ""
END ENDPAGE
BUTTON DLG_QUIT 10 2 ENDMASK
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK