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 addSubTask( Node* task, int index, Node* parent );
00104 void delTask(Node *node);
00105 bool canIndentTask(Node* node);
00106 bool indentTask( Node* node );
00107 bool canUnindentTask( Node* node );
00108 bool unindentTask( Node* node );
00109 bool canMoveTaskUp( Node* node );
00110 bool moveTaskUp( Node* node );
00111 bool canMoveTaskDown( Node* node );
00112 bool moveTaskDown( Node* node );
00113 Task *createTask(Node* parent);
00114 Task *createTask(Task &def, Node* parent);
00115
00117 ResourceGroup *group(QString id);
00119 Resource *resource(QString id);
00120
00121 virtual EffortCostMap plannedEffortCostPrDay(const QDate &start, const QDate &end) const;
00122
00124 virtual Duration plannedEffort();
00126 virtual Duration plannedEffort(const QDate &date);
00128 virtual Duration plannedEffortTo(const QDate &date);
00129
00131 virtual Duration actualEffort();
00133 virtual Duration actualEffort(const QDate &date);
00135 virtual Duration actualEffortTo(const QDate &date);
00139 virtual double plannedCost();
00141 virtual double plannedCost(const QDate &date);
00143 virtual double plannedCostTo(const QDate &date);
00144
00148 virtual double actualCost();
00150 virtual double actualCost(const QDate &date);
00152 virtual double actualCostTo(const QDate &date);
00153
00154 Calendar *defaultCalendar() { return m_standardWorktime->calendar(); }
00155 QPtrList<Calendar> calendars();
00156 void addCalendar(Calendar *calendar);
00158 Calendar *calendar(const QString id) const;
00159
00166 StandardWorktime *standardWorktime() { return m_standardWorktime; }
00167 void setStandardWorktime(StandardWorktime * worktime);
00168
00170 bool legalToLink(Node *par, Node *child);
00171
00172 virtual const QDict<Node> &nodeDict() { return nodeIdDict; }
00173
00175 virtual Node *findNode(const QString &id) const
00176 { return (m_parent ? m_parent->findNode(id) : nodeIdDict.find(id)); }
00178 virtual bool removeId(const QString &id);
00180 virtual void insertId(const QString &id, const Node *node);
00182 bool registerNodeId(Node *node);
00184 QString uniqueNodeId(int seed=1);
00185
00186 ResourceGroup *findResourceGroup(const QString &id) const
00187 { return resourceGroupIdDict.find(id); }
00189 bool removeResourceGroupId(const QString &id)
00190 { return resourceGroupIdDict.remove(id); }
00192 void insertResourceGroupId(const QString &id, const ResourceGroup* group)
00193 { resourceGroupIdDict.insert(id, group); }
00194
00195 Resource *findResource(const QString &id) const
00196 { return resourceIdDict.find(id); }
00198 bool removeResourceId(const QString &id)
00199 { return resourceIdDict.remove(id); }
00201 void insertResourceId(const QString &id, const Resource *resource)
00202 { resourceIdDict.insert(id, resource); }
00203
00205 virtual Calendar *findCalendar(const QString &id) const
00206 { return id.isEmpty() ? 0 : calendarIdDict.find(id); }
00208 virtual bool removeCalendarId(const QString &id);
00210 virtual void insertCalendarId(const QString &id, const Calendar *calendar);
00211
00216 void setBaselined(bool on) { m_baselined = on; }
00220 bool isBaselined() const { return m_baselined; }
00221
00222 void generateWBS(int count, WBSDefinition &def, QString wbs=QString());
00223
00224 Accounts &accounts() { return m_accounts; }
00225
00227 virtual void setCurrentSchedule(long id);
00229 MainSchedule *createSchedule(QString name, Schedule::Type type);
00231 virtual void setParentSchedule(Schedule *sch);
00232
00233 protected:
00234 Accounts m_accounts;
00235 QPtrList<ResourceGroup> m_resourceGroups;
00236
00237 QPtrList<Calendar> m_calendars;
00238
00239 StandardWorktime *m_standardWorktime;
00240
00241 DateTime calculateForward(int use);
00242 DateTime calculateBackward(int use);
00243 DateTime scheduleForward(const DateTime &earliest, int use);
00244 DateTime scheduleBackward(const DateTime &latest, int use);
00245 void adjustSummarytask();
00246
00247 void initiateCalculation(Schedule &sch);
00248 void initiateCalculationLists(QPtrList<Node> &startnodes, QPtrList<Node> &endnodes, QPtrList<Node> &summarytasks);
00249
00250 bool legalParents(Node *par, Node *child);
00251 bool legalChildren(Node *par, Node *child);
00252
00253 private:
00254 void init();
00255
00256 QPtrList<Node> m_startNodes;
00257 QPtrList<Node> m_endNodes;
00258 QPtrList<Node> m_summarytasks;
00259
00260 bool m_baselined;
00261
00262 QDict<ResourceGroup> resourceGroupIdDict;
00263 QDict<Resource> resourceIdDict;
00264 QDict<Node> nodeIdDict;
00265 QDict<Calendar> calendarIdDict;
00266
00267 #ifndef NDEBUG
00268 #include <qcstring.h>
00269 public:
00270 void printDebug(bool children, QCString indent);
00271 void printCalendarDebug(QCString indent="");
00272 #ifdef DEBUGPERT
00273 static void pert_test();
00274 static void printTree(Node *n, QString s);
00275 #endif
00276 #endif
00277 };
00278
00279 }
00280
00281 #endif
|