2030c1272c
Files correlati : Ricompilazione Demo : [ ] Commento : RIportata la verione 3.2 1167 git-svn-id: svn://10.65.10.50/trunk@16722 c028cbd2-c16b-5b4b-a496-9718f37d4682
339 lines
11 KiB
C++
Executable File
339 lines
11 KiB
C++
Executable File
#ifndef __MR2100_H
|
|
#define __MR2100_H
|
|
|
|
#include "mrplib.h"
|
|
#include "../ve/velib.h"
|
|
|
|
void print_header(TPrinter& pr);
|
|
void print_footer(TPrinter& pr);
|
|
|
|
class TMRP_internalref;
|
|
class TMRP_internalrefs;
|
|
class TMRP_docref;
|
|
class TMRP_docrefs;
|
|
class TMRP_line;
|
|
|
|
class TMRP_record : public TObject
|
|
{
|
|
TMRP_time _time; // time
|
|
real _on_hand; // projected on hand
|
|
real _unsched_orders; // unscheduled orders
|
|
real _resched_orders; // rescheduled orders
|
|
real _net_requirement; // lot-sized net requirement
|
|
real _gross_requirement; // gross req
|
|
real _sched_receipts; // scheduled receipts (released )
|
|
real _planned_orders; // anticipated planned orders
|
|
|
|
TMRP_docrefs *_plans; // doc. di pianificazione
|
|
TMRP_docrefs *_scheduls; // doc. di pianificazione confermati
|
|
TMRP_docrefs *_requirements; // gross.req. da documenti esterni
|
|
TMRP_internalrefs *_internal_req; // gross.req. da esplosioni interne
|
|
|
|
void add_ref(TMRP_docref * ref, TMRP_docrefs* &refs);
|
|
public:
|
|
const real& on_hand() const { return /*_on_hand <= ZERO ? ZERO :*/_on_hand ; }
|
|
const real& net_requirement() const { return _net_requirement; }
|
|
const real& resched_orders() const { return _resched_orders; }
|
|
const real& unsched_orders() const { return _unsched_orders; }
|
|
const real& gross_requirement() const { return _gross_requirement; }
|
|
const real& sched_receipts() const { return _sched_receipts; }
|
|
const real& planned_orders() const { return _planned_orders; }
|
|
|
|
TMRP_docrefs *requirements_refs() const { return _requirements; }
|
|
TMRP_docrefs *scheduls_refs() const { return _scheduls; }
|
|
TMRP_docrefs *plans_refs() const { return _plans; }
|
|
TMRP_internalrefs *internal_refs() const { return _internal_req; }
|
|
|
|
const real& set_on_hand(const real & val) { return _on_hand=val;}
|
|
const real& set_net_req(const real & val) { return _net_requirement=val;}
|
|
const real& add_net_req(const real & val);
|
|
const real& add_gross_req(const real& val , TMRP_docref *ref = NULL);
|
|
const real& add_gross_req(const real& val , TMRP_internalref *ref );
|
|
const real& add_sched_rec(const real& val, TMRP_docref *ref = NULL);
|
|
const real& add_planned_ord(const real& val, TMRP_docref *ref = NULL);
|
|
const real& add_resched_ord(const real& val);
|
|
const real& add_unsched_ord(const real& val);
|
|
|
|
TMRP_record & operator=(const TMRP_record & a);
|
|
|
|
const TMRP_time& time() const { return _time; }
|
|
virtual TObject* dup() const;
|
|
|
|
TMRP_record(const TMRP_time& t);
|
|
virtual ~TMRP_record() { }
|
|
};
|
|
|
|
class TException : public TObject
|
|
{
|
|
int _from, _to;
|
|
real _q;
|
|
const TMRP_line * _mrpline;
|
|
protected:
|
|
public :
|
|
virtual TObject* dup() const ;
|
|
|
|
int from() const {return _from;}
|
|
int to() const {return _to;}
|
|
const real& qta() const {return _q;}
|
|
const TMRP_line & mrpline() const {return *_mrpline;}
|
|
TException(const TMRP_line * line, int from, int to, const real & q);
|
|
virtual ~TException() {}
|
|
};
|
|
|
|
class TExceptions_array : public TAssoc_array
|
|
{
|
|
public :
|
|
bool add(TException * e);
|
|
bool add(const TException & e);
|
|
TExceptions_array() {}
|
|
virtual ~TExceptions_array() {}
|
|
};
|
|
|
|
|
|
class TMRP_line : public TSortable
|
|
{
|
|
TCodice_articolo _codart;
|
|
TString16 _livgiac;
|
|
TString8 _codmag;
|
|
TString8 _codmag_coll;
|
|
TString8 _codimp;
|
|
TString8 _codlin;
|
|
long _codclifor;
|
|
TString _da_rdoc_key;
|
|
bool _final_product;
|
|
int _explosion_depth;
|
|
TToken_string * _sheet_row;
|
|
|
|
static TArticolo_giacenza* _articolo_giac;
|
|
|
|
protected:
|
|
TArray _req_per_bucket;
|
|
|
|
TPointer_array _sons;
|
|
TArray _qta_sons;
|
|
|
|
TString _descr;
|
|
|
|
bool is_son(const TCodice_articolo& art) const;
|
|
void lotti_riordino(real & minimo, real & increm) const ;
|
|
|
|
public:
|
|
TMRP_record& record(int i) const;
|
|
TMRP_record& record(const TMRP_time& t) const;
|
|
|
|
const TCodice_articolo& articolo() const { return _codart; }
|
|
const TString& livgiac() const { return _livgiac; }
|
|
const TString& codmagdep() const { return _codmag; }
|
|
const TString& codmagdep_coll() const { return _codmag_coll; }
|
|
const TString& codimp() const { return _codimp; }
|
|
const TString& codlin() const { return _codlin; }
|
|
long codclifor() const { return _codclifor; }
|
|
const TString& description() const { return _descr; }
|
|
const TString& da_rdoc_key() const { return _da_rdoc_key; }
|
|
|
|
const TString& codmag() const;
|
|
const TString& codmagaz_coll() const;
|
|
const TString& coddep() const;
|
|
const TString& coddep_coll() const;
|
|
const TString& livgiac(int l) const;
|
|
int explosion_depth() const { return _explosion_depth; }
|
|
|
|
virtual int compare(const TSortable& s) const;
|
|
int first_bucket() const { return _req_per_bucket.first(); }
|
|
int last_bucket() const { return _req_per_bucket.last(); }
|
|
int next_bucket(int i) const { return _req_per_bucket.succ(i); }
|
|
|
|
int add_son(const real& qta, TMRP_line* son);
|
|
int sons() const { return _sons.items(); }
|
|
const TMRP_line& son(int i) const { return (const TMRP_line&)_sons[i]; }
|
|
TMRP_line& son(int i) { return (TMRP_line&)_sons[i]; }
|
|
const real& qta_son(int i) const { return (const real&)_qta_sons[i]; }
|
|
|
|
const real & on_hand(int i) const
|
|
{return record(i).on_hand();}
|
|
|
|
const real & gross_requirement(int i) const
|
|
{return record(i).gross_requirement();}
|
|
|
|
const real & net_requirement(int i) const
|
|
{return record(i).net_requirement();}
|
|
|
|
const real & sched_receipts(int i) const
|
|
{return record(i).sched_receipts();}
|
|
|
|
const real & planned_orders(int i) const
|
|
{return record(i).planned_orders();}
|
|
|
|
const real & resched_orders(int i) const
|
|
{return record(i).resched_orders();}
|
|
|
|
const real & unsched_orders(int i) const
|
|
{return record(i).unsched_orders();}
|
|
|
|
const TString& set_description(const TString &s) { return _descr=s; }
|
|
|
|
const real& set_on_hand(int i, const real& val);
|
|
const real& set_on_hand(const TMRP_time& t, const real& val);
|
|
|
|
const real& add_gross_req(const TMRP_time& t, const real& val, TMRP_docref *ref = NULL);
|
|
const real& add_gross_req(const TMRP_time& t, const real& val, TMRP_internalref *ref);
|
|
const real& add_sched_rec(const TMRP_time& t, const real& val, TMRP_docref *ref = NULL);
|
|
const real& add_planned_ord(const TMRP_time& t, const real& val, TMRP_docref *ref = NULL);
|
|
|
|
const real& add_net_req(const TMRP_time& t, const real& val);
|
|
const real& add_net_req(int i, const real& val);
|
|
|
|
const real& set_net_req(int i, const real& val);
|
|
const real& add_resched_ord(int i, const real& val);
|
|
const real& add_unsched_ord(int i, const real& val);
|
|
real sizeup_net_requirement(int i, const real& val, const real& oldnet = ZERO);
|
|
|
|
real& giacenza_attuale(real&) const;
|
|
real& giacenza_attuale(real&, const TDate & data_attuale) const;
|
|
real &scorta_minima(real&) const;
|
|
real &scorta_minima(real&, const TDate & data) const;
|
|
void set_row(TToken_string * row) { _sheet_row = row; }
|
|
TToken_string * sheet_row() const { return _sheet_row;}
|
|
|
|
|
|
const TMRP_time& lead_time(int i, TMRP_time& t, bool antic = TRUE) const;
|
|
|
|
const TMRP_time& time(int i) const { return record(i).time(); }
|
|
|
|
virtual TObject* dup() const;
|
|
TMRP_line & operator=(const TMRP_line & a);
|
|
|
|
// gestione eccezioni
|
|
void reset_excepts();
|
|
bool find_ad_excepts(bool anticipi, bool posticipi, TExceptions_array &e);
|
|
bool find_extra_excepts(bool fixed, TExceptions_array &e);
|
|
void print_exception(int from, int to, const real &diff, int header) const;
|
|
bool final_product() const { return _final_product; }
|
|
void set_final_product(bool f = TRUE) { _final_product = f;}
|
|
void set_imp_lin(const char* imp, const char* lin);
|
|
void set_explosion_depth(int depth) { _explosion_depth = depth; }
|
|
|
|
// capacity review
|
|
|
|
TMRP_line(const char* art, const char* giac,
|
|
const char* magdep, const char* magdepc,
|
|
const char* imp, const char* lin,
|
|
long codcli, const char* da_rdoc_key);
|
|
TMRP_line(const TMRP_line&a);
|
|
virtual ~TMRP_line() { }
|
|
};
|
|
|
|
class TMRP_lines : public TMRP_array
|
|
{
|
|
bool _ignore_mag;
|
|
bool _ignore_dep;
|
|
bool _ignore_imp;
|
|
bool _ignore_lin;
|
|
bool _ignore_key;
|
|
|
|
protected:
|
|
virtual TSortable* new_obj(const TToken_string& key) const;
|
|
|
|
public:
|
|
TMRP_line* find(const TCodice_articolo& codart,
|
|
const TString& giac, const TString& mag, const TString& magc,
|
|
const TString& imp, const TString& lin,
|
|
long codcli, const char* rdoc_key, bool create = false);
|
|
|
|
TMRP_line& operator[](long n) const
|
|
{ return (TMRP_line&)find_obj(n); }
|
|
|
|
void ignore(bool im, bool id, bool ii, bool il, bool ik)
|
|
{ _ignore_mag = im; _ignore_dep = id; _ignore_imp = ii; _ignore_lin = il; _ignore_key = ik; }
|
|
|
|
virtual TObject* dup() const;
|
|
TMRP_lines & operator= (const TMRP_lines &a);
|
|
|
|
TMRP_lines();
|
|
TMRP_lines(const TMRP_lines &a);
|
|
virtual ~TMRP_lines();
|
|
};
|
|
|
|
class TMRP_docref : public TObject
|
|
{
|
|
TString4 _codnum;
|
|
int _annodoc;
|
|
long _numdoc;
|
|
int _numrig;
|
|
TString4 _um;
|
|
real _qta, _prz;
|
|
|
|
protected:
|
|
virtual TObject* dup() const;
|
|
|
|
public:
|
|
// settaggio valori
|
|
void set_annodoc(int anno) { _annodoc = anno; }
|
|
void set_codnumdoc(const char* codnum) { _codnum = codnum; }
|
|
void set_numdoc(long numdoc) { _numdoc = numdoc; }
|
|
void set_numrig(int nr) { _numrig = nr; }
|
|
void set_um(const char* um) { _um = um; }
|
|
void set_qta_residua(const real& q) { _qta = q; }
|
|
|
|
int annodoc() const { return _annodoc; }
|
|
const TString& codnumdoc() const { return _codnum; }
|
|
long numdoc() const { return _numdoc; }
|
|
int numrig() const { return _numrig; }
|
|
const TString& um() const { return _um; }
|
|
const real & qta_residua() const { return _qta; }
|
|
TDate datadoc() const;
|
|
TDate datacons() const;
|
|
const TString& tipodoc();
|
|
char statodoc();
|
|
|
|
const TRectype& get_doc() const;
|
|
const TRectype& get_rdoc() const;
|
|
|
|
TMRP_docref(int anno, const char* codnum, long numdoc, int nriga,
|
|
const char* um, const real& qta, const real& prz);
|
|
};
|
|
|
|
|
|
class TMRP_docrefs : public TArray
|
|
{
|
|
public:
|
|
TObject* dup() const;
|
|
TMRP_docref & get_ref(int n) {return (TMRP_docref & )operator[](n);}
|
|
TMRP_docref * get_ref_ptr(int n) {return (TMRP_docref *)objptr(n);}
|
|
};
|
|
|
|
class TMRP_internalref : public TObject
|
|
{
|
|
TMRP_line * _line;
|
|
int _bucket;
|
|
TDate _date; // eliminare
|
|
TString4 _um;
|
|
real _qta;
|
|
|
|
public:
|
|
virtual TObject* dup() const;
|
|
// settaggio valori
|
|
void set_um(const char *um) {_um = um;}
|
|
void set_qta(const real & qta) {_qta = qta;}
|
|
const TMRP_line * line() const {return _line;}
|
|
int bucket() const {return _bucket;}
|
|
const TDate & date() const {return _date;}
|
|
const TString& um() const {return _um;}
|
|
const real & qta() const {return _qta;}
|
|
|
|
TMRP_internalref(TMRP_line * line, int bucket, const real & qta);
|
|
TMRP_internalref(const TMRP_internalref &r);
|
|
};
|
|
|
|
class TMRP_internalrefs : public TArray
|
|
{
|
|
public:
|
|
TMRP_internalref& get_ref(int n) const {return (TMRP_internalref & )operator[](n);}
|
|
TMRP_internalref* get_ref_ptr(int n) {return (TMRP_internalref * )objptr(n);}
|
|
};
|
|
|
|
|
|
|
|
#endif
|
|
|