mirror of
https://github.com/moodle/moodle.git
synced 2025-08-11 11:56:40 +02:00
MDL-78217 grade: Recalculate Parent Weights on Zero Child Weights
The maximum grade for that category is considered as zero when all child weights within a category are zero.
This commit is contained in:
parent
6aa05cfb9a
commit
aa30501b80
4 changed files with 25 additions and 3 deletions
2
grade/amd/build/edittree_weights.min.js
vendored
2
grade/amd/build/edittree_weights.min.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -91,6 +91,9 @@ const recalculateNaturalWeights = (categoryElement) => {
|
|||
// Does the grade item require normalising?
|
||||
let requiresNormalising = false;
|
||||
|
||||
// Is there an error in the weight calculations?
|
||||
let erroneous = false;
|
||||
|
||||
// This array keeps track of the id and weight of every grade item that has been overridden.
|
||||
const overrideArray = {};
|
||||
|
||||
|
@ -202,7 +205,11 @@ const recalculateNaturalWeights = (categoryElement) => {
|
|||
overrideArray[childElement.dataset.itemid].weight < 0) {
|
||||
if (overrideArray[childElement.dataset.itemid].weight < 0) {
|
||||
weightInput.value = formatWeight(0);
|
||||
} else {
|
||||
}
|
||||
|
||||
// Zero is a special case. If the total is zero then we need to set the weight of the parent category to zero.
|
||||
if (normaliseTotal !== 0) {
|
||||
erroneous = true;
|
||||
const error = normaliseTotal > 100 ? 'erroroverweight' : 'errorunderweight';
|
||||
// eslint-disable-next-line promise/always-return,promise/catch-or-return
|
||||
getString(error, 'core_grades').then((errorString) => {
|
||||
|
@ -212,6 +219,18 @@ const recalculateNaturalWeights = (categoryElement) => {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!erroneous) {
|
||||
const categoryGradeMax = parseFloat(categoryElement.dataset.grademax);
|
||||
if (categoryGradeMax !== totalGradeMax) {
|
||||
// The category grade max is not the same as the total grade max, so we need to update the category grade max.
|
||||
categoryElement.dataset.grademax = totalGradeMax;
|
||||
const parentCategory = document.querySelector(selectors.categoryByIdentifier(categoryElement.dataset.parentCategory));
|
||||
if (parentCategory && (parseInt(parentCategory.dataset.aggregation) === grade.aggregation.sum)) {
|
||||
recalculateNaturalWeights(parentCategory);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -234,6 +234,9 @@ Feature: We can use natural aggregation and weights will be normalised to a tota
|
|||
Scenario: Overriding a grade item with a negative value results in the value being changed to zero.
|
||||
When I set the field "Override weight of Test assignment five" to "1"
|
||||
And I set the field "Weight of Test assignment five" to "-15"
|
||||
Then the field "Weight of Test assignment five" matches value "0.0"
|
||||
And the field "Weight of Test assignment six" matches value "40.0"
|
||||
And the field "Weight of Test assignment seven" matches value "60.0"
|
||||
And I press "Save changes"
|
||||
Then the field "Weight of Test assignment five" matches value "0.0"
|
||||
And the field "Weight of Test assignment six" matches value "40.0"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue