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)
00177 { return (m_parent ? m_parent->removeId(id) : nodeIdDict.remove(id)); }
00179 virtual void insertId(const QString &id, const Node *node)
00180 { m_parent ? m_parent->insertId(id, node) : nodeIdDict.insert(id, node); }
00181 QString uniqueNodeId(int seed=1);
00182
00183 ResourceGroup *findResourceGroup(const QString &id) const
00184 { return resourceGroupIdDict.find(id); }
00186 bool removeResourceGroupId(const QString &id)
00187 { return resourceGroupIdDict.remove(id); }
00189 void insertResourceGroupId(const QString &id, const ResourceGroup* group)
00190 { resourceGroupIdDict.insert(id, group); }
00191
00192 Resource *findResource(const QString &id) const
00193 { return resourceIdDict.find(id); }
00195 bool removeResourceId(const QString &id)
00196 { return resourceIdDict.remove(id); }
00198 void insertResourceId(const QString &id, const Resource *resource)
00199 { resourceIdDict.insert(id, resource); }
00200
00202 virtual Calendar *findCalendar(const QString &id) const
00203 { return id.isEmpty() ? 0 : calendarIdDict.find(id); }
00205 virtual bool removeCalendarId(const QString &id)
00206 { return calendarIdDict.remove(id); }
00208 virtual void insertCalendarId(const QString &id, const Calendar *calendar)
00209 { calendarIdDict.insert(id, calendar); }
00210
00215 void setBaselined(bool on) { m_baselined = on; }
00219 bool isBaselined() const { return m_baselined; }
00220
00221 void generateWBS(int count, WBSDefinition &def, QString wbs=QString());
00222
00223 Accounts &accounts() { return m_accounts; }
00224
00226 virtual void setCurrentSchedule(long id);
00228 MainSchedule *createSchedule(QString name, Schedule::Type type);
00230 virtual void setParentSchedule(Schedule *sch);
00231
00232 protected:
00233 Accounts m_accounts;
00234 QPtrList<ResourceGroup> m_resourceGroups;
00235
00236 Calendar *m_defaultCalendar;
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
|