24#include "kptduration.h"
25#include "kptdatetime.h"
47class ResourceGroupRequest;
49class ResourceRequestCollection;
52class ResourceSchedule;
71 enum Type { Type_Work, Type_Material };
73 TQString id()
const {
return m_id; }
74 bool setId(TQString
id);
77 Project *project() {
return m_project; }
79 void setName(TQString n) {m_name=n;}
80 const TQString &name()
const {
return m_name;}
81 void setType(Type type) { m_type = type; }
83 Type type()
const {
return m_type; }
93 void insertResource(
unsigned int index,
Resource *resource );
94 void removeResource(
Resource *resource );
96 void removeResource(
int);
126 int numResources()
const {
return m_resources.count(); }
127 TQPtrList<Resource> &resources() {
return m_resources; }
129 bool load(TQDomElement &element);
130 void save(TQDomElement &element)
const;
132 void initiateCalculation(Schedule &sch);
134 void addNode(
const Node *node) { m_nodes.append(node); }
135 void clearNodes() { m_nodes.clear(); }
137 Calendar *defaultCalendar() {
return m_defaultCalendar; }
141 void registerRequest(ResourceGroupRequest *request)
142 { m_requests.append(request); }
143 void unregisterRequest(ResourceGroupRequest *request)
144 { m_requests.removeRef(request); }
145 const TQPtrList<ResourceGroupRequest> &requests()
const
146 {
return m_requests; }
148 ResourceGroup *findId()
const {
return findId(m_id); }
149 ResourceGroup *findId(
const TQString &
id)
const;
150 bool removeId() {
return removeId(m_id); }
151 bool removeId(
const TQString &
id);
152 void insertId(
const TQString &
id);
154 Appointment appointmentIntervals()
const;
157 void printDebug(TQString ident);
164 TQPtrList<Resource> m_resources;
165 TQPtrList<Risk> m_risks;
166 TQPtrList<ResourceGroup> m_requires;
168 TQPtrList<Node> m_nodes;
170 Calendar *m_defaultCalendar;
173 TQPtrList<ResourceGroupRequest> m_requests;
194 TQString id()
const {
return m_id; }
195 bool setId(TQString
id);
198 enum Type { Type_Work, Type_Material };
199 void setType(Type type) { m_type = type; }
200 void setType(
const TQString &type);
201 Type type()
const {
return m_type; }
202 TQString typeToString()
const;
204 void setName(TQString n) {m_name=n;}
205 const TQString &name()
const {
return m_name;}
207 void setInitials(TQString initials) {m_initials=initials;}
208 const TQString &initials()
const {
return m_initials;}
210 void setEmail(TQString email) {m_email=email;}
211 const TQString &email()
const {
return m_email;}
224 void addWorkingHour(TQTime from, TQTime until);
225 TQPtrList<TQTime> workingHours() {
return m_workingHours; }
227 DateTime getFirstAvailableTime(DateTime after = DateTime());
228 DateTime getBestAvailableTime(Duration duration);
229 DateTime getBestAvailableTime(
const DateTime after,
const Duration duration);
231 bool load(TQDomElement &element);
232 void save(TQDomElement &element)
const;
237 Appointment *findAppointment(Node *node);
241 virtual bool addAppointment(Appointment *appointment, Schedule &main);
243 virtual void addAppointment(Schedule *node, DateTime &start, DateTime &end,
double load=100);
245 void initiateCalculation(Schedule &sch);
246 bool isAvailable(Task *task);
247 void makeAppointment(Schedule *schedule);
249 bool isOverbooked()
const;
250 bool isOverbooked(
const TQDate &date)
const;
251 bool isOverbooked(
const DateTime &start,
const DateTime &end)
const;
253 double normalRate()
const {
return cost.normalRate; }
254 void setNormalRate(
double rate) { cost.normalRate = rate; }
255 double overtimeRate()
const {
return cost.overtimeRate; }
256 void setOvertimeRate(
double rate) { cost.overtimeRate = rate; }
257 double fixedCost()
const {
return cost.fixed; }
258 void setFixedCost(
double value) { cost.fixed = value; }
263 int units()
const {
return m_units; }
269 Project *project()
const {
return m_project; }
275 Calendar *
calendar(
bool local=
false)
const;
276 Calendar *
calendar(
const TQString
id)
const;
283 { m_requests.append(request); }
284 void unregisterRequest(
const ResourceRequest *request)
285 { m_requests.removeRef(request); }
286 const TQPtrList<ResourceRequest> &requests()
const
287 {
return m_requests; }
289 Duration effort(
const DateTime &start,
const Duration &duration,
bool backward,
bool *ok=0)
const;
295 DateTime
availableAfter(
const DateTime &time,
const DateTime limit=DateTime(),
bool checkAppointments=
false)
const;
300 DateTime
availableBefore(
const DateTime &time,
const DateTime limit=DateTime(),
bool checkAppointments=
false)
const;
302 Resource *findId()
const {
return findId(m_id); }
303 Resource *findId(
const TQString &
id)
const;
304 bool removeId() {
return removeId(m_id); }
305 bool removeId(
const TQString &
id);
306 void insertId(
const TQString &
id);
308 Calendar *findCalendar(
const TQString &
id)
const;
310 Appointment appointmentIntervals()
const;
311 Duration plannedEffort(
const TQDate &date)
const;
313 void setCurrentSchedule(Schedule *schedule) { m_currentSchedule = schedule; }
314 void setCurrentSchedule(
long id) { m_currentSchedule = findSchedule(
id); }
315 Schedule *currentSchedule()
const {
return m_currentSchedule; }
317 TQIntDict<Schedule> &schedules() {
return m_schedules; }
318 Schedule *findSchedule(
long id) {
return m_schedules[id]; }
323 void addSchedule(Schedule *schedule);
324 ResourceSchedule *createSchedule(TQString name,
int type,
long id);
325 ResourceSchedule *createSchedule(Schedule *parent);
328 void makeAppointment(Schedule *node,
const DateTime &from,
const DateTime &end);
332 TQIntDict<Schedule> m_schedules;
337 DateTime m_availableFrom;
338 DateTime m_availableUntil;
339 TQPtrList<TQTime> m_workingHours;
351 Calendar *m_calendar;
352 TQPtrList<ResourceRequest> m_requests;
354 Schedule *m_currentSchedule;
358 void printDebug(TQString ident);
380 RiskType riskType() {
return m_riskType; }
382 Node *node() {
return m_node; }
383 Resource *resource() {
return m_resource; }
391class ResourceRequest {
393 ResourceRequest(
Resource *resource=0,
int units = 1);
397 ResourceGroupRequest *parent()
const {
return m_parent; }
398 void setParent(ResourceGroupRequest *parent) { m_parent = parent; }
400 Resource *resource()
const {
return m_resource; }
401 void setResource(Resource* resource) { m_resource = resource; }
403 bool load(TQDomElement &element, Project &project);
404 void save(TQDomElement &element)
const;
414 int workUnits()
const;
416 void registerRequest() {
if (m_resource) m_resource->registerRequest(
this); }
417 void unregisterRequest() {
if (m_resource) m_resource->unregisterRequest(
this); }
419 void makeAppointment(Schedule *schedule) {
421 m_resource->makeAppointment(schedule);
426 Resource *m_resource;
428 ResourceGroupRequest *m_parent;
432 void printDebug(TQString ident);
436class ResourceGroupRequest {
438 ResourceGroupRequest(ResourceGroup *group=0,
int units=0);
439 ~ResourceGroupRequest();
441 void setParent(ResourceRequestCollection *parent) { m_parent = parent;}
442 ResourceRequestCollection *parent()
const {
return m_parent; }
444 ResourceGroup *group()
const {
return m_group; }
445 TQPtrList<ResourceRequest> &resourceRequests() {
return m_resourceRequests; }
446 void addResourceRequest(ResourceRequest *request);
447 void removeResourceRequest(ResourceRequest *request) { m_resourceRequests.removeRef(request); }
448 ResourceRequest *takeResourceRequest(ResourceRequest *request);
449 ResourceRequest *find(Resource *resource)
const;
451 bool load(TQDomElement &element, Project &project);
452 void save(TQDomElement &element)
const;
462 int workUnits()
const;
464 Duration effort(
const DateTime &time,
const Duration &duration,
bool backward,
bool *ok=0)
const;
466 int numDays(
const DateTime &time,
bool backward)
const;
472 Duration duration(
const DateTime &start,
const Duration &effort,
bool backward=
false);
474 DateTime availableAfter(
const DateTime &time);
475 DateTime availableBefore(
const DateTime &time);
481 void makeAppointments(Schedule *schedule);
486 void reserve(
const DateTime &start,
const Duration &duration);
488 bool isEmpty()
const;
493 ResourceGroup *m_group;
495 ResourceRequestCollection *m_parent;
497 TQPtrList<ResourceRequest> m_resourceRequests;
503 void printDebug(TQString ident);
507class ResourceRequestCollection {
509 ResourceRequestCollection(Task &task);
510 ~ResourceRequestCollection();
512 const TQPtrList<ResourceGroupRequest> &requests()
const {
return m_requests; }
513 void addRequest(ResourceGroupRequest *request) {
514 m_requests.append(request);
515 request->setParent(
this);
517 void removeRequest(ResourceGroupRequest *request) { m_requests.removeRef(request); }
518 void takeRequest(ResourceGroupRequest *request) { m_requests.take(m_requests.findRef(request)); }
519 ResourceGroupRequest *find(ResourceGroup *resource)
const;
520 ResourceRequest *find(Resource *resource)
const;
521 bool isEmpty()
const;
524 void save(TQDomElement &element)
const;
526 void clear() { m_requests.clear(); }
536 int workUnits()
const;
542 Duration duration(
const DateTime &time,
const Duration &effort,
bool backward=
false);
544 DateTime availableAfter(
const DateTime &time);
545 DateTime availableBefore(
const DateTime &time);
551 void makeAppointments(Schedule *schedule);
555 void reserve(
const DateTime &start,
const Duration &duration);
557 Task &task()
const {
return m_task; }
569 TQPtrList<ResourceGroupRequest> m_requests;
573 void printDebug(TQString ident);
DateTime is a TQDateTime which knows about Duration.
The duration class can be used to store a timespan in a convenient format.
This class represents any node in the project, a node can be a project or a subproject or any task.
Project is the main node in a project, it contains child nodes and possibly sub-projects.
This class represents a group of similar resources to be assigned to a task e.g.
void addRequiredResource(ResourceGroup *)
Manage the dependent resources.
ResourceGroup * getRequiredResource(int)
Manage the dependent resources.
void removeRequiredResource(int)
Manage the dependent resources.
void addResource(Resource *, Risk *)
Manage the resources in this list.
TQPtrList< Resource > availableResources(const DateTime start, const Duration duration, int num)
Get the "num" resources which is available in the time frame defined by "start" and "duration".
Any resource that is used by a task.
void setAvailableFrom(const TQDateTime &af)
Set the time from when the resource is available to this project.
int units() const
Return available units in percent.
void takeSchedule(const Schedule *schedule)
Take, don't delete.
TQPtrList< Appointment > appointments()
Return the list of appointments for current schedule.
Calendar * calendar(bool local=false) const
Get the calendar for this resource.
void removeSchedule(Schedule *schedule)
Take, and delete.
void setUnits(int units)
Set available units in percent.
DateTime availableBefore(const DateTime &time, const DateTime limit=DateTime(), bool checkAppointments=false) const
Find the first available time before time, within limit.
DateTime availableAfter(const DateTime &time, const DateTime limit=DateTime(), bool checkAppointments=false) const
Find the first available time after time, within limit.
const DateTime & availableFrom() const
Return the time when the resource is available to this project.
virtual bool addAppointment(Appointment *appointment)
Adds appointment to current schedule.
void setAvailableUntil(const TQDateTime au)
Set the time when the resource is no longer available to this project.
const DateTime & availableUntil() const
Return the time when the resource is no longer available to this project.
void registerRequest(const ResourceRequest *request)
Used to clean up requests when the resource is deleted.
Risk is associated with a resource/task pairing to indicate the planner's confidence in the estimated...