-
Notifications
You must be signed in to change notification settings - Fork 2.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[59539] Migrate scheduling mode and lags #17235
Draft
cbliard
wants to merge
21
commits into
dev
Choose a base branch
from
feature/42388-new-automatic-scheduling-mode
base: dev
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Draft
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
cbliard
force-pushed
the
feature/42388-new-automatic-scheduling-mode
branch
3 times, most recently
from
November 27, 2024 11:18
46a22d1
to
391d65b
Compare
cbliard
changed the title
[42388] Migrate scheduling mode and lags
[59539] Migrate scheduling mode and lags
Nov 27, 2024
cbliard
force-pushed
the
feature/42388-new-automatic-scheduling-mode
branch
3 times, most recently
from
December 11, 2024 07:57
a6f2955
to
e62c9e6
Compare
https://community.openproject.org/wp/42388 Scheduling mode is now manual by default. Only successors will be in automatic mode. WIP
More expressive code.
To preserve dates, a lag is set for follows relations when both the predecessor and the follower have dates.
`lag` is the number of _working_ days between predecessor and successor dates.
The rule is: it never switches from manual to automatic scheduling mode. It only switches from automatic to manual, and only if keeping automatic is not possible because it would mean losing the dates. The code and specs have been updated to reflect this. A materialized view is used to reuse the data in multiple different queries.
The `schedule_manually` column is also non-nullable now. This includes the following changes: - Automatically scheduled parent dates are and `ignore_non_working_days` attributes are now always derived from children's values, even if the children are scheduled manually. It's more natural. Without that, adding a child to a work package would not change the parent's dates. As a consequence, the parent can start on a non-working day if one of its children is manually scheduled, ignores non-working days, and starts on a non-working day. That's why the parent's `ignore_non_working_days` attribute is now also derived from all its children regardless of the scheduling mode. If the parent is manually scheduled, its dates and it's ability to ignore non-working days will still be defined independently from its children. - Fix tests broken by scheduling mode being manual by default. The tests had to be adapted to explicitly set scheduling mode to automatic for followers and parents, and sometimes even follower's children. Without it, work packages would not be rescheduled automatically. - Replace schedule helpers with table helpers. Schedule helpers helped well, but table helpers are more flexible and support more column types. - Add "days counting" and "scheduling mode" columns to table helpers. "days counting" to set `ignore_non_working_days` attribute. - "all days" value maps to `ignore_non_working_days: true`. - "working days" value maps to `ignore_non_working_days: false`. "scheduling mode" to set `schedule_manually` attribute. - "manual" value maps to `schedule_manually: true`. - "automatic" value maps to `schedule_manually: false`.
The original start date of the work package is discarded. The soonest start date is always used instead.
State is stored in instance variables instead of being passed around as parameters and return values.
cbliard
force-pushed
the
feature/42388-new-automatic-scheduling-mode
branch
from
December 16, 2024 10:19
5f715b3
to
13755a0
Compare
It was only used to specify predecessors, so it makes more sense, and it now allows a shorter syntax: "follows wp1, wp2, wp3".
Edge case not detected by the previous algorithm: relation has no lag but covers non-working days changed into working days. The successors need to be rescheduled, which is done by rescheduling from the predecessor.
Before changing them for a new behavior.
cbliard
force-pushed
the
feature/42388-new-automatic-scheduling-mode
branch
from
December 17, 2024 08:12
ec01bc0
to
7923850
Compare
When a work package becomes a successor of another work package, its scheduling mode is switched to automatic if it has no children so that it can be scheduled as soon as possible automatically. Similarly, when a work package is no longer a successor of any other work package, its scheduling mode is switched to manual if it has no children and no dates so that it can keep its current dates.
And I spotted one wrong test that will need to be updated.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Ticket
https://community.openproject.org/wp/59539
(Part of https://community.openproject.org/wp/42388)
Pull preview
Available here: https://pr-17235-42388-new-autom-ip-3-70-132-70.my.preview.run/
What works:
What's next:
What's missing:
What are you trying to accomplish?
Implement new automatic scheduling mode
Migration:
Logic changes:
Feature implementation:
spec/services/work_packages/set_schedule_service_working_days_spec.rb:374
)Screenshots
TBD
What approach did you choose and why?
TBD
Merge checklist