Browse Source

add item-based progress bar on requirements with only 0-required stats.

master
Gisle Aune 2 years ago
parent
commit
ed828b0227
  1. 2
      frontend/src/lib/components/project/RequirementSection.svelte
  2. 2
      frontend/src/lib/modals/ItemCreateModal.svelte
  3. 37
      usecases/projects/result.go

2
frontend/src/lib/components/project/RequirementSection.svelte

@ -9,7 +9,7 @@
import LabeledProgressRow from "../common/LabeledProgressRow.svelte";
import { STATUS_ICONS } from "../common/StatusIcon.svelte";
import ItemEntry from "./ItemSubSection.svelte";
import Icon from "../layout/Icon.svelte";
import Icon from "../layout/Icon.svelte";
export let requirement: Requirement;
</script>

2
frontend/src/lib/modals/ItemCreateModal.svelte

@ -79,7 +79,7 @@ import { getSprintListContext } from "$lib/components/contexts/SprintListContext
function initEdit(current: Item, requirement?: Requirement, scope?: Scope) {
const req = $project.requirements?.find(r => r.id === current.requirementId);
let ctxStats = requirement?.stats.map(s => ({statId: s.id, required: 0, acquired: 0}));
if (ctxStats == null) {
if (ctxStats == null || ctxStats.length === 0) {
ctxStats = scope.stats.map(s => ({statId: s.id, required: 0, acquired: 0}))
}
const inputStats = current.stats.map(s => ({statId: s.id, acquired: s.acquired, required: s.required}));

37
usecases/projects/result.go

@ -233,19 +233,38 @@ func generateRequirementResult(req entities.Requirement, scope scopes.Result, re
}
}
totalAcquired := 0.0
totalRequired := 0.0
totalPlanned := 0.0
hasRequiredStats := false
for _, stat := range resReq.Stats {
if stat.Required > 0 {
totalAcquired += math.Min(float64(stat.Acquired), float64(stat.Required)) * stat.Weight
totalRequired += float64(stat.Required) * stat.Weight
totalPlanned += math.Min(float64(stat.Planned), float64(stat.Required)) * stat.Weight
hasRequiredStats = true
break
}
}
resReq.TotalRequired += totalRequired
resReq.TotalAcquired += math.Min(totalAcquired, totalRequired)
resReq.TotalPlanned += math.Min(totalPlanned, totalRequired)
if hasRequiredStats {
totalAcquired := 0.0
totalRequired := 0.0
totalPlanned := 0.0
for _, stat := range resReq.Stats {
if stat.Required > 0 {
totalAcquired += math.Min(float64(stat.Acquired), float64(stat.Required)) * stat.Weight
totalRequired += float64(stat.Required) * stat.Weight
totalPlanned += math.Min(float64(stat.Planned), float64(stat.Required)) * stat.Weight
}
}
resReq.TotalRequired += totalRequired
resReq.TotalAcquired += math.Min(totalAcquired, totalRequired)
resReq.TotalPlanned += math.Min(totalPlanned, totalRequired)
} else {
for _, item := range resReq.Items {
if item.AcquiredTime != nil {
resReq.TotalAcquired += item.WeightedRequired
}
resReq.TotalRequired += item.WeightedRequired
}
resReq.TotalPlanned = resReq.TotalRequired
}
return resReq
}
Loading…
Cancel
Save