pluginsGLPI / gantt

Gantt view for GLPI
GNU General Public License v2.0
14 stars 10 forks source link

[Feature] Autoscheduling of tasks #14

Open rbrannath opened 1 year ago

rbrannath commented 1 year ago

What and why

As a user of the GLPI Gantt plugin, I would like to suggest a new feature: the ability to automatically schedule linked tasks in the Gantt view. This functionality is currently only available in the pro version gantt. Hence this plugin is not using the pro version, it is not available, but the functionality could be recreated.

The benefit of this feature is that it would allow users to quickly and easily schedule tasks within the Gantt view, without having to manually adjust the start and end dates of each task. This would save a lot of time and effort for users, especially for those working on large projects with many tasks. Additionally, autoscheduling could also help to ensure that tasks are scheduled in the most efficient and logical order, which would improve the overall productivity and organization of projects.

Things that need to be considered:

  1. There are several link types:
Type Value Description
finish to start 0 source task has to end to start the target task
start to start 1 source task has to start to start the target task
finish to finish 2 source task has to end before the target task can end
start to finish 3 source task has to start before the target task can end

'Note: finish to start' and 'start to start' are the most commonly used scenarios.

  1. Start time of target tasks can be controlled by duration, lead and lag fields
Field Unit Description
duration minute defines how much time does the task take (planned start date + duration)
lead day specifies the number of days a task start date is brought forward
lag day specifies the number of days a task is delayed
- duration (as minutes, defines how much time does the task take)
- lead (as days, specifies the number of days a task is brought forward)
- lag (as days, specifies the number of days a task is delayed

Example for finish to start link type: Source task is updated and new planned end date is '2023-01-05 14:30:00'.

duration lead lag target planned start date
0 0 0 2023-01-05 14:30:00
200 0 0 2023-01-05 17:50:00
0 2 0 2023-01-03 14:30:00
0 0 5 2023-01-10 14:30:00
200 2 0 2023-01-03 17:50:00
200 0 5 2023-01-10 17:50:00
  1. Autoscheduling should be also possible outside the gantt view. For example, there could be a new tab inside the project task view where task links could be managed. It is arguable if this should be a core functionality of the GLPI-Core.

  2. There is already a simple form which appears when a task link is double clicked, but it only shows one input form element for the lag field. The modal should contain the fields lead and duration as well.

  3. It may be useful to exempt specific tasks from auto scheduling. If this is the case, it should be visible (e. g. by background color). A question would be, what would happen if a task not exempted anymore and if it autoschedule right away.

  4. As the gantt-library offers some config option (such as work_hours). There should be a dedicated config page where those options are managable. The config option work_hours ties closely to autoscheduling, because when a task is moved / changed end date, the following tasks would may end up on weekends (which may be unwanted). With work_hours enabled, the duration of a task only applies on that period of time.

rbrannath commented 1 year ago

As a first attempt, I have already developed a draft regarding the basic autoschedule functionality. Please have a look at my fork of this project or the first commit: Fork: https://github.com/rbrannath/gantt Commit: https://github.com/pluginsGLPI/gantt/commit/ea699784f7d1a880df47df511b963b5772f1848a

rudnypc commented 1 year ago

As a first attempt, I have already developed a draft regarding the basic autoschedule functionality. Please have a look at my fork of this project or the first commit: Fork: https://github.com/rbrannath/gantt Commit: ea69978

Why didn't you make a pull request?