kplato
kptproject.h00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef KPTPROJECT_H
00022 #define KPTPROJECT_H
00023
00024 #include "kptnode.h"
00025
00026 #include "kptaccount.h"
00027 #include "kptcalendar.h"
00028 #include "kptdatetime.h"
00029 #include "kptduration.h"
00030 #include "kptresource.h"
00031
00032 #include <qmap.h>
00033 #include <qptrlist.h>
00034 #include <qdict.h>
00035
00036 #include <klistview.h>
00037 #include <klocale.h>
00038
00039 namespace KPlato
00040 {
00041
00042 class Part;
00043 class Schedule;
00044 class StandardWorktime;
00045
00046
00052 class Project : public Node {
00053 public:
00054 Project(Node *parent = 0);
00055 ~Project();
00056
00058 virtual int type() const;
00059
00065 void calculate(Schedule *scedule);
00071 void calculate(Effort::Use use);
00073 void calculate();
00074
00075 virtual bool calcCriticalPath(bool fromEnd);
00076
00077 virtual DateTime startTime() const;
00078 virtual DateTime endTime() const;
00079
00081 Duration *getExpectedDuration();
00082
00088 Duration *getRandomDuration();
00089
00090 virtual bool load(QDomElement &element);
00091 virtual void save(QDomElement &element) const;
00092
00093 QPtrList<ResourceGroup> &resourceGroups();
00094 virtual void addResourceGroup(ResourceGroup *resource);
00095 virtual void insertResourceGroup(unsigned int index, ResourceGroup *resource);
00096 void removeResourceGroup(ResourceGroup *resource);
00097 void removeResourceGroup(int number);
00098 ResourceGroup *takeResourceGroup(ResourceGroup *resource)
00099 { return m_resourceGroups.take(m_resourceGroups.findRef(resource)); }
00100
00101 bool addTask( Node* task, Node* position );
00102 bool addSubTask( Node* task, Node* position );
00103 bool canIndentTask(Node* node);
00104 bool indentTask( Node* node );
00105 bool canUnindentTask( Node* node );
00106 bool unindentTask( Node* node );
00107 bool canMoveTaskUp( Node* node );
00108 bool moveTaskUp( Node* node );
00109 bool canMoveTaskDown( Node* node );
00110 bool moveTaskDown( Node* node );
00111 Task *createTask(Node* parent);
00112 Task *createTask(Task &def, Node* parent);
00113
00115 ResourceGroup *group(QString id);
00117 Resource *resource(QString id);
00118
00119 virtual EffortCostMap plannedEffortCostPrDay(const QDate &start, const QDate &end) const;
00120
00122 virtual Duration plannedEffort();
00124 virtual Duration plannedEffort(const QDate &date);
00126 virtual Duration plannedEffortTo(const QDate &date);
00127
00129 virtual Duration actualEffort();
00131 virtual Duration actualEffort(const QDate &date);
00133 virtual Duration actualEffortTo(const QDate &date);
00137 virtual double plannedCost();
00139 virtual double plannedCost(const QDate &date);
00141 virtual double plannedCostTo(const QDate &date);
00142
00146 virtual double actualCost();
00148 virtual double actualCost(const QDate &date);
00150 virtual double actualCostTo(const QDate &date);
00151
00152 Calendar *defaultCalendar() { return m_defaultCalendar; }
00153 QPtrList<Calendar> calendars();
00154 void addCalendar(Calendar *calendar);
00156 Calendar *calendar(const QString id) const;
00157
00163 StandardWorktime *standardWorktime() { return m_standardWorktime; }
00164 void setStandardWorktime(StandardWorktime * worktime);
00165 void setDefaultCalendar(Calendar *cal);
00166
00168 bool legalToLink(Node *par, Node *child);
00169
00170 virtual const QDict<Node> &nodeDict() { return nodeIdDict; }
00171
00173 virtual Node *findNode(const QString &id) const
00174 { return (m_parent ? m_parent->findNode(id) : nodeIdDict.find(id)); }
00176 virtual bool removeId(const QString &id);
00178 virtual void insertId(const QString &id, const Node *node);
00179 QString uniqueNodeId(int seed=1);
00180
00181 ResourceGroup *findResourceGroup(const QString &id) const
00182 { return resourceGroupIdDict.find(id); }
00184 bool removeResourceGroupId(const QString &id)
00185 { return resourceGroupIdDict.remove(id); }
00187 void insertResourceGroupId(const QString &id, const ResourceGroup* group)
00188 { resourceGroupIdDict.insert(id, group); }
00189
00190 Resource *findResource(const QString &id) const
00191 { return resourceIdDict.find(id); }
00193 bool removeResourceId(const QString &id)
00194 { return resourceIdDict.remove(id); }
00196 void insertResourceId(const QString &id, const Resource *resource)
00197 { resourceIdDict.insert(id, resource); }
00198
00200 virtual Calendar *findCalendar(const QString &id) const
00201 { return id.isEmpty() ? 0 : calendarIdDict.find(id); }
00203 virtual bool removeCalendarId(const QString &id);
00205 virtual void insertCalendarId(const QString &id, const Calendar *calendar);
00206
00211 void setBaselined(bool on) { m_baselined = on; }
00215 bool isBaselined() const { return m_baselined; }
00216
00217 void generateWBS(int count, WBSDefinition &def, QString wbs=QString());
00218
00219 Accounts &accounts() { return m_accounts; }
00220
00222 virtual void setCurrentSchedule(long id);
00224 MainSchedule *createSchedule(QString name, Schedule::Type type);
00226 virtual void setParentSchedule(Schedule *sch);
00227
00228 protected:
00229 Accounts m_accounts;
00230 QPtrList<ResourceGroup> m_resourceGroups;
00231
00232 Calendar *m_defaultCalendar;
00233 QPtrList<Calendar> m_calendars;
00234
00235 StandardWorktime *m_standardWorktime;
00236
00237 DateTime calculateForward(int use);
00238 DateTime calculateBackward(int use);
00239 DateTime scheduleForward(const DateTime &earliest, int use);
00240 DateTime scheduleBackward(const DateTime &latest, int use);
00241 void adjustSummarytask();
00242
00243 void initiateCalculation(Schedule &sch);
00244 void initiateCalculationLists(QPtrList<Node> &startnodes, QPtrList<Node> &endnodes, QPtrList<Node> &summarytasks);
00245
00246 bool legalParents(Node *par, Node *child);
00247 bool legalChildren(Node *par, Node *child);
00248
00249 private:
00250 void init();
00251
00252 QPtrList<Node> m_startNodes;
00253 QPtrList<Node> m_endNodes;
00254 QPtrList<Node> m_summarytasks;
00255
00256 bool m_baselined;
00257
00258 QDict<ResourceGroup> resourceGroupIdDict;
00259 QDict<Resource> resourceIdDict;
00260 QDict<Node> nodeIdDict;
00261 QDict<Calendar> calendarIdDict;
00262
00263 #ifndef NDEBUG
00264 #include <qcstring.h>
00265 public:
00266 void printDebug(bool children, QCString indent);
00267 void printCalendarDebug(QCString indent="");
00268 #ifdef DEBUGPERT
00269 static void pert_test();
00270 static void printTree(Node *n, QString s);
00271 #endif
00272 #endif
00273 };
00274
00275 }
00276
00277 #endif
|