Skip to content
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

[pull] dev from opf:dev #217

Merged
merged 30 commits into from
Apr 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
14e9142
unset old total p complete values in journals
ulferts Apr 15, 2024
36d7649
Set target=_top for all links, also external
oliverguenther Apr 15, 2024
3d4067a
Remove behavior tied to disabled done_ratio field
cbliard Apr 15, 2024
0a1f303
Set total values to 0h when all children values are 0h
cbliard Apr 15, 2024
e95884a
Bump Angular to 17
oliverguenther Apr 15, 2024
4feb246
Change sass imports to standards
oliverguenther Apr 15, 2024
3292f2f
Merge pull request #15243 from opf/fix/52160/relative-links
ulferts Apr 16, 2024
c139f9e
Merge pull request #15244 from opf/fix/unset_old_total_p_complete
cbliard Apr 16, 2024
8c324ca
Add RELEASE_VERSION, PRODUCT_URL and RELEASE_DATE to docker build
oliverguenther Apr 16, 2024
f2ee353
set capture value for event listener to false and fix failing tests
bsatarnejad Apr 16, 2024
14903b8
convert passed remaining hours string value to the right hour format
bsatarnejad Apr 16, 2024
40462d0
avoid instantiating ProjectRepresenter if it is not embedded anyway
ulferts Apr 16, 2024
e72b31f
Fix dragging of the draggable autocompleter container in project list
oliverguenther Apr 16, 2024
57b7bcb
Merge pull request #15274 from opf/fix/draggable
ulferts Apr 16, 2024
570b5ee
Move CKEditor dropdowns into top-layer if dialog is open
oliverguenther Apr 16, 2024
4abe814
remove CodeBlock plugin from formattable field in primer forms
oliverguenther Apr 16, 2024
683710f
Merge pull request #15270 from opf/54193-inconsistent-ux-with-commas-…
cbliard Apr 16, 2024
1f65b10
Merge pull request #15275 from opf/bug/54142-log-time-modal-needs-ext…
cbliard Apr 16, 2024
538f733
Merge pull request #15277 from opf/fix/move-dropdowns-into-top-layer
oliverguenther Apr 16, 2024
fdf6812
Merge branch 'release/14.0' into bug/54179-update-total-remaining-wor…
cbliard Apr 16, 2024
ee48233
Merge pull request #15259 from opf/bug/54179-update-total-remaining-w…
aaron-contreras Apr 16, 2024
4304dde
Show meetings in calendar widgets
oliverguenther Mar 10, 2024
31d1df9
update locales from crowdin [ci skip]
openprojectci Apr 17, 2024
91962fc
build(deps): bump aws-sdk-core from 3.191.6 to 3.192.0
dependabot[bot] Apr 17, 2024
fe52080
build(deps-dev): bump rubocop from 1.63.1 to 1.63.2
dependabot[bot] Apr 17, 2024
f303bad
Merge pull request #15282 from opf/meetings-view
klaustopher Apr 17, 2024
d74ba41
Merge pull request #15285 from opf/dependabot/bundler/dev/rubocop-1.63.2
klaustopher Apr 17, 2024
8329c3b
Merge pull request #15284 from opf/dependabot/bundler/dev/aws-sdk-cor…
ulferts Apr 17, 2024
05a447f
Merge pull request #15283 from opf/merge-release/14.0-20240417033437
ulferts Apr 17, 2024
4a2e93a
Merge pull request #15265 from opf/bump/angular17
oliverguenther Apr 17, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .github/workflows/docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,11 @@ jobs:
- name: Prepare docker files
run: |
cp ./docker/prod/Dockerfile ./Dockerfile

# Add build information
echo "${{ steps.extract_version.outputs.checkout_ref }}" > PRODUCT_VERSION
echo "https://github.com/opf/openproject/commits/${{ steps.extract_version.outputs.checkout_ref }}" > PRODUCT_URL
date -u +"%Y-%m-%dT%H:%M:%SZ" > RELEASE_DATE
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
Expand Down
6 changes: 3 additions & 3 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -348,8 +348,8 @@ GEM
activerecord (>= 4.0.0, < 7.2)
awrence (1.2.1)
aws-eventstream (1.3.0)
aws-partitions (1.913.0)
aws-sdk-core (3.191.6)
aws-partitions (1.914.0)
aws-sdk-core (3.192.0)
aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.651.0)
aws-sigv4 (~> 1.8)
Expand Down Expand Up @@ -973,7 +973,7 @@ GEM
rspec-retry (0.6.2)
rspec-core (> 3.3)
rspec-support (3.13.1)
rubocop (1.63.1)
rubocop (1.63.2)
json (~> 2.3)
language_server-protocol (>= 3.17.0)
parallel (~> 1.10)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
style: "min-height: 430px")) do |d| %>
<% d.with_header(variant: :large, mb: 3) %>

<%= render(Primer::Alpha::Dialog::Body.new) do %>
<%= render(Primer::Alpha::Dialog::Body.new(id: "op-draggable-autocomplete-container")) do %>
<%= primer_form_with(
url: projects_path,
id: COLUMN_FORM_ID,
Expand Down
3 changes: 1 addition & 2 deletions app/models/queries/work_packages/selects/property_select.rb
Original file line number Diff line number Diff line change
Expand Up @@ -123,8 +123,7 @@ def caption
},
done_ratio: {
sortable: "#{WorkPackage.table_name}.done_ratio",
groupable: true,
if: ->(*) { !WorkPackage.done_ratio_disabled? }
groupable: true
},
created_at: {
sortable: "#{WorkPackage.table_name}.created_at",
Expand Down
9 changes: 5 additions & 4 deletions app/models/work_package.rb
Original file line number Diff line number Diff line change
Expand Up @@ -206,10 +206,6 @@ class WorkPackage < ApplicationRecord
include WorkPackage::Journalized
prepend Journable::Timestamps

def self.done_ratio_disabled?
Setting.work_package_done_ratio == "disabled"
end

def self.use_status_for_done_ratio?
Setting.work_package_done_ratio == "status"
end
Expand Down Expand Up @@ -310,6 +306,11 @@ def estimated_hours=(hours)
write_attribute :estimated_hours, !!converted_hours ? converted_hours : hours
end

def remaining_hours=(hours)
converted_hours = (hours.is_a?(String) ? hours.to_hours : hours)
write_attribute :remaining_hours, !!converted_hours ? converted_hours : hours
end

def duration_in_hours
duration ? duration * 24 : nil
end
Expand Down
24 changes: 10 additions & 14 deletions app/services/work_packages/update_ancestors_service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -116,17 +116,15 @@ def set_journal_note(work_packages)
end

def derive_done_ratio(ancestor, loader)
return if WorkPackage.done_ratio_disabled?

ancestor.derived_done_ratio = compute_derived_done_ratio(ancestor, loader)
end

def compute_derived_done_ratio(work_package, loader)
def compute_derived_done_ratio(work_package, _loader)
return if work_package.derived_estimated_hours.nil? || work_package.derived_remaining_hours.nil?

leaves = loader.leaves_of(work_package)

if leaves.size.positive?
if work_package.derived_estimated_hours.zero?
nil
else
work_done = (work_package.derived_estimated_hours - work_package.derived_remaining_hours)
progress = (work_done.to_f / work_package.derived_estimated_hours) * 100
progress.round
Expand All @@ -153,22 +151,20 @@ def derive_ignore_non_working_days(ancestor, loader)
def derive_total_estimated_and_remaining_hours(work_package, loader)
descendants = loader.descendants_of(work_package)

work_package.derived_estimated_hours = not_zero(all_estimated_hours([work_package] + descendants).sum.to_f)
work_package.derived_remaining_hours = not_zero(all_remaining_hours([work_package] + descendants).sum.to_f)
work_package.derived_estimated_hours = total(all_estimated_hours([work_package] + descendants))
work_package.derived_remaining_hours = total(all_remaining_hours([work_package] + descendants))
end

def not_zero(value)
value unless value.zero?
def total(hours)
hours.empty? ? nil : hours.sum.to_f
end

def all_estimated_hours(work_packages)
work_packages
.map(&:estimated_hours)
.reject { |hours| hours.to_f.zero? }
work_packages.filter_map(&:estimated_hours)
end

def all_remaining_hours(work_packages)
work_packages.map(&:remaining_hours).reject { |hours| hours.to_f.zero? }
work_packages.filter_map(&:remaining_hours)
end

def modified_attributes_justify_derivation?(attributes)
Expand Down
5 changes: 1 addition & 4 deletions app/views/work_package_mailer/_work_package_details.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,7 @@ See COPYRIGHT and LICENSE files for more details.
<li><%= WorkPackage.human_attribute_name(:start_date) %>: <%= work_package.start_date %></li>
<li><%= WorkPackage.human_attribute_name(:due_date) %>: <%= work_package.due_date %></li>
<li><%= WorkPackage.human_attribute_name(:estimated_hours)%>: <%= work_package.estimated_hours %></li>

<% if Setting.work_package_done_ratio != 'disabled' %>
<li><%= WorkPackage.human_attribute_name(:done_ratio) %>: <%= work_package.done_ratio %></li>
<% end %>
<li><%= WorkPackage.human_attribute_name(:done_ratio) %>: <%= work_package.done_ratio %></li>

<% work_package.custom_field_values.each do |value| %>
<li><%= value.custom_field.name %>: <%= show_value(value) %></li>
Expand Down
4 changes: 1 addition & 3 deletions app/views/work_package_mailer/_work_package_details.text.erb
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,7 @@ See COPYRIGHT and LICENSE files for more details.
<%= WorkPackage.human_attribute_name(:start_date) %>: <%= work_package.start_date %>
<%= WorkPackage.human_attribute_name(:due_date) %>: <%= work_package.due_date %>
<%= WorkPackage.human_attribute_name(:estimated_hours)%>: <%= work_package.estimated_hours %>
<% if Setting.work_package_done_ratio != 'disabled' %>
<%= WorkPackage.human_attribute_name(:done_ratio) %>: <%= work_package.done_ratio %>
<% end %>
<%= WorkPackage.human_attribute_name(:done_ratio) %>: <%= work_package.done_ratio %>
<% work_package.custom_field_values.each do |value| %>
<%= value.custom_field.name %>: <%= show_value(value) %>
<% end %>
Expand Down
29 changes: 29 additions & 0 deletions app/workers/work_packages/update_progress_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ def perform(current_mode:, previous_mode:)

update_totals

unset_total_p_complete

copy_progress_values_to_work_packages_and_update_journals
end
end
Expand Down Expand Up @@ -211,6 +213,33 @@ def update_totals
SQL
end

# The value for derived_done_ratio had been calculated wrong in the past. So prior to executing the job
# values in the work_packages and work_package_journals table sometimes contained wrong data.
# The whole job/migration is now treating the derived_done_ratio as a value newly introduced even if it, under
# the hood has existed before. But it was not shown in the activites before so the user would not have seen it.
#
# Because of this, all values, in the work_packages and work_package_journals table, for derived_done_ratio are
# reset to null.
#
# This results in two cases:
# * The value before has been something (most of the time 0) and is now null. This will hopefully be the
# majority of the cases as it would save a lot of journal creation, the slowest part of the job.
# For that case, the derived_done_ratio will be treated as not having changed by the job since with the rewrite
# the value looks to have been null before and is now null again.
# * The value before has been something and is now something. It could have been the same value as before. But
# since the job resets the value to null, it will in every case be treated as having changed (set for the first time)
def unset_total_p_complete
execute(<<~SQL)
UPDATE work_packages
SET derived_done_ratio = NULL
SQL

execute(<<~SQL)
UPDATE work_package_journals
SET derived_done_ratio = NULL
SQL
end

def copy_progress_values_to_work_packages_and_update_journals
updated_work_package_ids = copy_progress_values_to_work_packages
create_journals_for_updated_work_packages(updated_work_package_ids)
Expand Down
2 changes: 0 additions & 2 deletions config/locales/crowdin/af.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3411,9 +3411,7 @@ af:
unsupported_context: "Die bron gegee word nie as konteks ondersteun nie."
context_object_not_found: "Kan nie die hulpbron gegee as die konteks vind nie."
validation:
done_ratio: "% Complete cannot be set on parent work packages, when it is inferred by status or when it is disabled."
due_date: "Finish date cannot be set on parent work packages."
estimated_hours: "Work cannot be set on parent work packages." #feel like this one should be removed eventually
invalid_user_assigned_to_work_package: "Die gekose gebruiker is nie toegelaat om '%{property}' vir hierdie werkspakket te wees nie."
start_date: "Begindatum kan nie gestel word op ouerwerkspakkette nie."
eprops:
Expand Down
2 changes: 0 additions & 2 deletions config/locales/crowdin/ar.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3553,9 +3553,7 @@ ar:
unsupported_context: "غير معتمد المورد نظراً للسياق."
context_object_not_found: "تعذر العثور على المورد نظراً للسياق."
validation:
done_ratio: "% Complete cannot be set on parent work packages, when it is inferred by status or when it is disabled."
due_date: "Finish date cannot be set on parent work packages."
estimated_hours: "Work cannot be set on parent work packages." #feel like this one should be removed eventually
invalid_user_assigned_to_work_package: "غير مسموح للمستخدم الذي تم اختياره أن يكون '%{property}' لمجموعة العمل هذه."
start_date: "الوقت لإتمام المشروع لا يمكن تعيينه في حزم العمل الحالية."
eprops:
Expand Down
2 changes: 0 additions & 2 deletions config/locales/crowdin/az.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3411,9 +3411,7 @@ az:
unsupported_context: "The resource given is not supported as context."
context_object_not_found: "Cannot find the resource given as the context."
validation:
done_ratio: "% Complete cannot be set on parent work packages, when it is inferred by status or when it is disabled."
due_date: "Finish date cannot be set on parent work packages."
estimated_hours: "Work cannot be set on parent work packages." #feel like this one should be removed eventually
invalid_user_assigned_to_work_package: "The chosen user is not allowed to be '%{property}' for this work package."
start_date: "Start date cannot be set on parent work packages."
eprops:
Expand Down
2 changes: 0 additions & 2 deletions config/locales/crowdin/be.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3483,9 +3483,7 @@ be:
unsupported_context: "The resource given is not supported as context."
context_object_not_found: "Cannot find the resource given as the context."
validation:
done_ratio: "% Complete cannot be set on parent work packages, when it is inferred by status or when it is disabled."
due_date: "Finish date cannot be set on parent work packages."
estimated_hours: "Work cannot be set on parent work packages." #feel like this one should be removed eventually
invalid_user_assigned_to_work_package: "The chosen user is not allowed to be '%{property}' for this work package."
start_date: "Start date cannot be set on parent work packages."
eprops:
Expand Down
2 changes: 0 additions & 2 deletions config/locales/crowdin/bg.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3411,9 +3411,7 @@ bg:
unsupported_context: "The resource given is not supported as context."
context_object_not_found: "Cannot find the resource given as the context."
validation:
done_ratio: "% Complete cannot be set on parent work packages, when it is inferred by status or when it is disabled."
due_date: "Finish date cannot be set on parent work packages."
estimated_hours: "Work cannot be set on parent work packages." #feel like this one should be removed eventually
invalid_user_assigned_to_work_package: "The chosen user is not allowed to be '%{property}' for this work package."
start_date: "Start date cannot be set on parent work packages."
eprops:
Expand Down
2 changes: 0 additions & 2 deletions config/locales/crowdin/ca.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3400,9 +3400,7 @@ ca:
unsupported_context: "El recurs proporcionat no s'admet com a context."
context_object_not_found: "No puc trobar el recurs proporionat com al context."
validation:
done_ratio: "% Complete cannot be set on parent work packages, when it is inferred by status or when it is disabled."
due_date: "La data de finalització no es pot establir als paquets de treball pare."
estimated_hours: "Work cannot be set on parent work packages." #feel like this one should be removed eventually
invalid_user_assigned_to_work_package: "L'usuari escollit no pot ser \"%{property}\" per a aquest paquet de treball."
start_date: "La data d'inici no es pot definir per paquets de treball del pare."
eprops:
Expand Down
2 changes: 0 additions & 2 deletions config/locales/crowdin/ckb-IR.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3411,9 +3411,7 @@ ckb-IR:
unsupported_context: "The resource given is not supported as context."
context_object_not_found: "Cannot find the resource given as the context."
validation:
done_ratio: "% Complete cannot be set on parent work packages, when it is inferred by status or when it is disabled."
due_date: "Finish date cannot be set on parent work packages."
estimated_hours: "Work cannot be set on parent work packages." #feel like this one should be removed eventually
invalid_user_assigned_to_work_package: "The chosen user is not allowed to be '%{property}' for this work package."
start_date: "Start date cannot be set on parent work packages."
eprops:
Expand Down
2 changes: 0 additions & 2 deletions config/locales/crowdin/cs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3481,9 +3481,7 @@ cs:
unsupported_context: "Zadaný dokument není podporován jako kontext."
context_object_not_found: "Zdroj nelze najít jako kontext."
validation:
done_ratio: "% Průběh nelze nastavit na nadřazených pracovních balíčcích, je odvozen ze stavu podřazených nebo pokud je zakázán."
due_date: "Datum ukončení nemůže být nastaveno na nadřazených pracovních balíčcích."
estimated_hours: "Práci nelze nastavit na nadřazených pracovních balíčcích." #feel like this one should be removed eventually
invalid_user_assigned_to_work_package: "Zvolený uživatel nesmí být '%{property}' pro tento pracovní balíček."
start_date: "Počáteční datum nelze nastavit na nadřazených pracovních balíčcích."
eprops:
Expand Down
2 changes: 0 additions & 2 deletions config/locales/crowdin/da.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3407,9 +3407,7 @@ da:
unsupported_context: "Den givne ressource understøttes ikke som korrekt sammenhæng."
context_object_not_found: "Kan ikke finde ressourcen, der ar angivet som sammenhæng."
validation:
done_ratio: "% Complete cannot be set on parent work packages, when it is inferred by status or when it is disabled."
due_date: "Finish date cannot be set on parent work packages."
estimated_hours: "Work cannot be set on parent work packages." #feel like this one should be removed eventually
invalid_user_assigned_to_work_package: "Den valgte bruger er ikke tilladt at være '%{property}' for denne arbejdspakke."
start_date: "Startdato kan ikke angives for overordnede arbejdspakker."
eprops:
Expand Down
2 changes: 0 additions & 2 deletions config/locales/crowdin/de.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3405,9 +3405,7 @@ de:
unsupported_context: "Die übergebene Ressource wird nicht als Kontext unterstützt."
context_object_not_found: "Die als Kontext übergebene Ressource konnte nicht gefunden werden."
validation:
done_ratio: "Der Fortschritt kann nicht gesetzt werden falls es sich um ein Eltern-Arbeitspaket handelt, er durch den Status definiert wird oder wenn er komplett deaktiviert wurde."
due_date: "Der Endtermin kann für Eltern-Arbeitspakete nicht gesetzt werden."
estimated_hours: "Aufwand kann nicht für übergeordnete Arbeitspakete gesetzt werden." #feel like this one should be removed eventually
invalid_user_assigned_to_work_package: "Der gewählte Nutzer darf dem Arbeitspaket nicht als '%{property}' zugewiesen werden."
start_date: "Das Startdatum kann für Eltern-Arbeitspakete nicht gesetzt werden."
eprops:
Expand Down
2 changes: 0 additions & 2 deletions config/locales/crowdin/el.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3405,9 +3405,7 @@ el:
unsupported_context: "Ο πόρος που δόθηκε δεν υποστηρίζεται ως πλαίσιο αναφοράς."
context_object_not_found: "Δεν ήταν δυνατή η εύρεση του πόρου που δόθηκε ως πλαίσιο αναφοράς."
validation:
done_ratio: "% Complete cannot be set on parent work packages, when it is inferred by status or when it is disabled."
due_date: "Η ημερομηνία λήξης δεν μπορεί να οριστεί σε πακέτα εργασίας-γονείς."
estimated_hours: "Work cannot be set on parent work packages." #feel like this one should be removed eventually
invalid_user_assigned_to_work_package: "Ο επιλεγμένος χρήστης δεν επιτρέπεται να είναι '%{property}' για αυτό το πακέτο εργασίας."
start_date: "Η ημερομηνία έναρξης δεν μπορεί να οριστεί σε πακέτα εργασίας-γονείς."
eprops:
Expand Down
2 changes: 0 additions & 2 deletions config/locales/crowdin/eo.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3411,9 +3411,7 @@ eo:
unsupported_context: "The resource given is not supported as context."
context_object_not_found: "Cannot find the resource given as the context."
validation:
done_ratio: "% Complete cannot be set on parent work packages, when it is inferred by status or when it is disabled."
due_date: "Finish date cannot be set on parent work packages."
estimated_hours: "Work cannot be set on parent work packages." #feel like this one should be removed eventually
invalid_user_assigned_to_work_package: "The chosen user is not allowed to be '%{property}' for this work package."
start_date: "Start date cannot be set on parent work packages."
eprops:
Expand Down
2 changes: 0 additions & 2 deletions config/locales/crowdin/es.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3406,9 +3406,7 @@ es:
unsupported_context: "El recurso dado no es soportado como contexto."
context_object_not_found: "No se ha podido encontrar el recurso dado como el contexto."
validation:
done_ratio: "% Completado no puede establecerse en paquetes de trabajo padres, cuando es influenciado por estado o cuando está desactivado."
due_date: "La fecha de finalización no se puede establecer en los paquetes de trabajo principales."
estimated_hours: "El trabajo no puede establecerse en paquetes de trabajo padres." #feel like this one should be removed eventually
invalid_user_assigned_to_work_package: "El usuario elegido no tiene permiso para ser '%{property}' para este paquete de trabajo."
start_date: "La fecha de inicio no puede ser establecida en paquetes de trabajo padres."
eprops:
Expand Down
2 changes: 0 additions & 2 deletions config/locales/crowdin/et.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3411,9 +3411,7 @@ et:
unsupported_context: "The resource given is not supported as context."
context_object_not_found: "Cannot find the resource given as the context."
validation:
done_ratio: "% Complete cannot be set on parent work packages, when it is inferred by status or when it is disabled."
due_date: "Finish date cannot be set on parent work packages."
estimated_hours: "Work cannot be set on parent work packages." #feel like this one should be removed eventually
invalid_user_assigned_to_work_package: "The chosen user is not allowed to be '%{property}' for this work package."
start_date: "Start date cannot be set on parent work packages."
eprops:
Expand Down
2 changes: 0 additions & 2 deletions config/locales/crowdin/eu.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3411,9 +3411,7 @@ eu:
unsupported_context: "The resource given is not supported as context."
context_object_not_found: "Cannot find the resource given as the context."
validation:
done_ratio: "% Complete cannot be set on parent work packages, when it is inferred by status or when it is disabled."
due_date: "Finish date cannot be set on parent work packages."
estimated_hours: "Work cannot be set on parent work packages." #feel like this one should be removed eventually
invalid_user_assigned_to_work_package: "The chosen user is not allowed to be '%{property}' for this work package."
start_date: "Start date cannot be set on parent work packages."
eprops:
Expand Down
Loading
Loading