Content
View differences
Updated by Jens Ulferts over 1 year ago
**As** a project portfolio manager
**I want to** have stages and gates adjust automatically based on changes to preceding/succeeding stages and gates
**so that** administration is simpler and less error prone.
**Acceptance criteria**
* \[open\] Changes necessary on the front end. Are gaps allowed? Answer: Yes.
* Moving the lifecycle step modifications from the modal triggered on the overview page \[open\] Should we add an explicit lag to have the project administration.
same behaviour as work packages?
* Removing \[open\] Are all the modal.
scenarios correct?
* Adding a gantt chart \[open\] Do we want to show all the project administration.
* Displaying the lifecycle steps within the gantt.
* Allow drag&drop changes in the gantt.
* Stages and gates are automatically (re)scheduled to modal before the extend the information provided by the user allows for.
commits?
* Automatic scheduling happens as soon as two values out of the three involved attributes (start date, end date & duration) are set (analogous \[open\] Do we want to work packages).
* For gates, as they have a fixed duration of 0 and only one date, that date is the only value that needs to be filled.
* Scheduling a predecessor (by providing two out of the three values, or the one value for a gate), can lead to the successor being rescheduled in turn (e.g. a succeeding stage/gate receives a start date/date) which can continue as long as each successor is completely specified.
* Active stages/gates are considered to be following each other based on the sort order in the administration. introduce modification by durations?
* In case a stage/gate is inactive in a project, the next active stage/gate is considered to be the successor. Multiple inactive stages/gates If so, can be ignored that way.
* Stages receive a duration the user can manipulate.
* The duration can be set independently from the (without start and end date. In other words, stage might have a duration without having a start/end date set.
* The duration has to be an integer value of at least 1. set)?
* Gates don't have a duration (it can be considered to always be 0)
* Non working days
* Are displayed in the date picker
* Are allowed values for start and end date and do not count towards the duration.
* This is subject to change, see "out of scope".
* gaps (implicit distance between the end date of a preceding and the start date of a succeeding work package) are not allowed.
* The lag (explicit distance between the end date of a preceding and the start date of a succeeding work package) is for now always 0.
* This is subject to change in a later feature.
* The lag of 0 means
* A stage succeeding another stage will have a start date that is on the next working day relative to the end date of the preceding stage's end date.
* A gate succeeding a stage will have a date that is on the same date as the preceding stage's end date.
* A stage succeeding a gate will have a start date that is on the next working day relative to the date of the preceding stage's date.
* \[open\] Are all the scenarios correct?
* \[open\] How does the transportation of automatic scheduling is displayed on the Gantt chart? ie: The user modifies a date without saving the value, should we also display the rescheduled steps?
* \[open\] - Do we want to introduce modification by durations?
ie: Allow a stage to have a duration without the start and end dates?
It would help with having project stage/gate templates which come with a predefined duration.
Scenarios:
Currently this only describes the backend's behaviour and not what is to happen on the frontend.
The scenarios are currently being rewritten so this is work in progress.
* Scenarios where dates/duration of there is a stage/gate is manipulated: with a succeeding stage/gate:
* With only duration dates set on a stage predecessor and successor
* With the start date predecessor being set by the user moved
* End date is set: into the future
* provided start date + (duration - 1)
without any gap between them.
* Start date Expected result: The succeeding stage/gate is set on a successor (if it exists)
moved by the same number of days (start and end date)
* For a stage: provided start date + (duration - 1) + 1
with enough gap to include the moved amount of days.
* For Expected result: The gap is eaten up. The successor is not moved. There is now a gate: provided start date + (duration - 1)
smaller gap between the two.
* End date There is set on a predecessor (if it exists)
* For a stage: provided start date - 1
* For a gate: provided start date - 1
* Both, potential successor as well as potential predecessor continue gap between the two stages/gates but not enough to be scheduled and schedule completely take in turn
* With the end date being set by changed dates of the user
predecessor.
* Start date Expected result: The gap is set:
* provided end date - (duration - 1)
* Start date eaten up. The successor is set on a successor (if it exists)
* For a stage: provided moved by the delta of the changed predecessor's end date + 1
* For a gate: provided end date
* End date and the previous gap. There is set on a predecessor (if it exists)
* For a stage: provided start date - (duration - 1) - 1
* For a gate: provided start date - (duration - 1) - 1
* Both, potential successor as well as potential predecessor continue to be scheduled and schedule no gap in turn
* <br>
* <br>
* <br>
* With dates and duration set on predecessor and successor
* With the predecessor being moved
end.
* into the future or past
* with a stage following a stage without any gap between them.
* Expected result: The succeeding stage's end date stage/gate is on moved by the next day relative to the preceding stage's same number of days (start and end date. date)
* With with a gate following a stage gap between the two stages/gates.
* \[open\] Expected result: The succeeding gate's date stage/gate is on moved by the same day as the preceding stage's number of days (start and end date.
* With a stage following a gate
* Expected result: date). The succeeding stage's start date is on gap continues to exist with the next day as the preceding gate's date.
* With a gate following a gate
* Expected result: The succeeding gate's date is on the same day as the preceding gate's date. number of days between predecessor and successor.
* With the successor being moved
* into the future.
* Expected result: A gap is added between predecessor and successor. The predecessor is not moved.
* into the past.
* There is no gap.
* Expected result: The successor cannot be moved as that would conflict with the predecessor. An error is displayed.
* There is a gap.
* Expected result: The successor can be moved as long as the change is smaller than the gap. The gap gets eaten up.
* With dates only on the predecessor. Successor does not have dates set.
* With the predecessor being moved
* into the future
* \[open\] Expected result: The dates of the successor are not set
* into the past
* \[open\] Expected result: The dates of the successor are not set
* With the successor receiving dates
* after the predecessor's dates
* Expected result: The successor receives those dates. There may be a gap between the predecessor and the successor. The predecessor is unchanged.
* before/overlapping the predecessor's dates
* \[open\] Expected result: An error is displayed. The successor's dates cannot be saved. The predecessor is unchanged.
<br>
Note from Attila: The current implementation allows overlap between a stage and a gate, but not between LifeCycleEvents of the same type.
* With dates only on the successor. Predecessor has no dates set.
* With the successor being moved
* into the future
* Expected result: The successor is moved. The predecessor does not receive any dates.
* into the past
* Expected result: The successor can be moved. The predecessor does not receive any dates.
* With the predecessor getting dates set
* With the dates being before the successor's dates
* \[open\] Expected result: The successor keeps its dates.
* With the dates overlapping/after the successor's dates
* Expected result: The successor is moved to start on the day after the predecessor's new end date.
* Without any dates set
* Predecessor gets its dates set.
* \[open\] Expected result: The predecessor gets the dates set. The successor does not receive any dates automatically.
* Successor gets its dates set.
* Expected result: The successor gets the dates set. The dates of the predecessor are not set automatically.
* Scenarios where a LifeCycleStep with an existing value is being enabled:
* when the value conflicts with the predecessor's date:
* \[open question\] Should we call rescheduling, or let the user solve the validation error on the dialog?
* when the value conflicts with the successor's date:
* \[open question\] Should we call rescheduling, or let the user solve the validation error on the dialog?
* Scenarios where the LifeCycleDefinitions are modified:
* When a definition is added:
* Expected result: No rescheduling.
* When a definition is deleted:
* Expected result: No rescheduling.
* When 2 definitions are reordered:
* Reschedule the projects where the affected definitions are enabled and they have dates set.
\[open question\]: Set the new successor to be after the new predecessor maintaining the duration of the predecessor and eating the gap between the two?
Or leave it to the user to solve the validation error? (We agreed to let the user solve the error in <mention class="mention" data-id="60293" data-type="work_package" data-text="#60293">#60293</mention> , but maybe we want to revisit that)
* Scenarios where Non Working days or Non Working weekdays are modified:
* When a Non Working Day or Weekday is added or removed:
* Expected result: No rescheduling.
**Out of scope**
* Non working days are for now available start/end dates and count towards the duration.
* This is subject to change but doing so would increase the complexity.
* Adding a lag value other than 0 will be implemented later.
**I want to** have stages and gates adjust automatically based on changes to preceding/succeeding stages and gates
**so that** administration is simpler and less error prone.
**Acceptance criteria**
* \[open\] Changes necessary on the front end.
* Moving the lifecycle step modifications from the modal triggered on the overview page
* Displaying the lifecycle steps within the gantt.
* Allow drag&drop
* Stages and gates are automatically (re)scheduled to
* For gates, as they have a fixed duration of 0 and only one date, that date is the only value that needs to be filled.
* Scheduling a predecessor (by providing two out of the three values, or the one value for a gate), can lead to the successor being rescheduled in turn (e.g. a succeeding stage/gate receives a start date/date) which can continue as long as each successor is completely specified.
* Active stages/gates are considered to be following each other based on the sort order in the administration.
* In case a stage/gate is inactive in a project, the next active stage/gate is considered to be the successor. Multiple inactive stages/gates
* Stages receive a duration the user can manipulate.
* The duration can be set independently from the
* The duration has to be an integer value of at least 1.
* Gates don't have a duration (it can be considered to always be 0)
* Non working days
* Are displayed in the date picker
* Are allowed values for start and end date and do not count towards the duration.
* This is subject to change, see "out of scope".
* gaps (implicit distance between the end date of a preceding and the start date of a succeeding work package) are not allowed.
* The lag (explicit distance between the end date of a preceding and the start date of a succeeding work package) is for now always 0.
* This is subject to change in a later feature.
* The lag of 0 means
* A stage succeeding another stage will have a start date that is on the next working day relative to the end date of the preceding stage's end date.
* A gate succeeding a stage will have a date that is on the same date as the preceding stage's end date.
* A stage succeeding a gate will have a start date that is on the next working day relative to the date of the preceding stage's date.
* \[open\] Are all the scenarios correct?
* \[open\] How does the transportation of automatic scheduling is displayed on the Gantt chart? ie: The user modifies a date without saving the value, should we also display the rescheduled steps?
* \[open\] - Do we want to introduce modification by durations?
ie: Allow a stage to have a duration without the start and end dates?
It would help with having project stage/gate templates which come with a predefined duration.
Scenarios:
Currently this only describes the backend's behaviour and not what is to happen on the frontend.
The scenarios are currently being rewritten so this is work in progress.
* Scenarios where dates/duration of
* With only duration
* With the start date
* End date is set:
* provided start date + (duration - 1)
* For a stage: provided start date - 1
* For a gate: provided start date - 1
* Both, potential successor as well as potential predecessor continue
* With the end date being set by
* provided end date - (duration - 1)
* Start date
* For a stage: provided
* For a gate: provided end date
* End date
* For a stage: provided start date - (duration - 1) - 1
* For a gate: provided start date - (duration - 1) - 1
* Both, potential successor as well as potential predecessor continue to be scheduled and schedule
* <br>
* <br>
* <br>
* With dates and duration set on predecessor and successor
* With the predecessor being moved
* with a stage following a stage
* Expected result: The succeeding stage's end date
* With
*
* With a stage following a gate
* Expected result:
* With a gate following a gate
* Expected result: The succeeding gate's date is on the same day as the preceding gate's date.
* With the successor being moved
* into the future.
* Expected result: A gap is added between predecessor and successor. The predecessor is not moved.
* into the past.
* There is no gap.
* Expected result: The successor cannot be moved as that would conflict with the predecessor. An error is displayed.
* There is a gap.
* Expected result: The successor can be moved as long as the change is smaller than the gap. The gap gets eaten up.
* With dates only on the predecessor. Successor does not have dates set.
* With the predecessor being moved
* into the future
* \[open\] Expected result: The dates of the successor are not set
* into the past
* \[open\] Expected result: The dates of the successor are not set
* With the successor receiving dates
* after the predecessor's dates
* Expected result: The successor receives those dates. There may be a gap between the predecessor and the successor. The predecessor is unchanged.
* before/overlapping the predecessor's dates
* \[open\] Expected result: An error is displayed. The successor's dates cannot be saved. The predecessor is unchanged.
<br>
Note from Attila: The current implementation allows overlap between a stage and a gate, but not between LifeCycleEvents of the same type.
* With dates only on the successor. Predecessor has no dates set.
* With the successor being moved
* into the future
* Expected result: The successor is moved. The predecessor does not receive any dates.
* into the past
* Expected result: The successor can be moved. The predecessor does not receive any dates.
* With the predecessor getting dates set
* With the dates being before the successor's dates
* \[open\] Expected result: The successor keeps its dates.
* With the dates overlapping/after the successor's dates
* Expected result: The successor is moved to start on the day after the predecessor's new end date.
* Without any dates set
* Predecessor gets its dates set.
* \[open\] Expected result: The predecessor gets the dates set. The successor does not receive any dates automatically.
* Successor gets its dates set.
* Expected result: The successor gets the dates set. The dates of the predecessor are not set automatically.
* Scenarios where a LifeCycleStep with an existing value is being enabled:
* when the value conflicts with the predecessor's date:
* \[open question\] Should we call rescheduling, or let the user solve the validation error on the dialog?
* when the value conflicts with the successor's date:
* \[open question\] Should we call rescheduling, or let the user solve the validation error on the dialog?
* Scenarios where the LifeCycleDefinitions are modified:
* When a definition is added:
* Expected result: No rescheduling.
* When a definition is deleted:
* Expected result: No rescheduling.
* When 2 definitions are reordered:
* Reschedule the projects where the affected definitions are enabled and they have dates set.
\[open question\]: Set the new successor to be after the new predecessor maintaining the duration of the predecessor and eating the gap between the two?
Or leave it to the user to solve the validation error? (We agreed to let the user solve the error in <mention class="mention" data-id="60293" data-type="work_package" data-text="#60293">#60293</mention> , but maybe we want to revisit that)
* Scenarios where Non Working days or Non Working weekdays are modified:
* When a Non Working Day or Weekday is added or removed:
* Expected result: No rescheduling.
**Out of scope**
* Non working days are for now available start/end dates and count towards the duration.
* This is subject to change but doing so would increase the complexity.
* Adding a lag value other than 0 will be implemented later.