From ad53ec5c7e4cca0c5fb7609f686f4828cc6e5b39 Mon Sep 17 00:00:00 2001 From: Gisle Aune Date: Sun, 3 Jul 2022 18:50:44 +0200 Subject: [PATCH] add total weighted for items. --- .../src/lib/components/common/Amount.svelte | 13 +++++++++--- .../components/project/ItemSubSection.svelte | 6 ++++++ frontend/src/lib/models/item.ts | 2 ++ usecases/items/result.go | 20 +++++++++++++++++-- 4 files changed, 36 insertions(+), 5 deletions(-) diff --git a/frontend/src/lib/components/common/Amount.svelte b/frontend/src/lib/components/common/Amount.svelte index 9c9cb3f..479d314 100644 --- a/frontend/src/lib/components/common/Amount.svelte +++ b/frontend/src/lib/components/common/Amount.svelte @@ -4,10 +4,12 @@ import PlusMinus from "../layout/PlusMinus.svelte" export let label: string export let value: number export let target: number = null + export let right: boolean = false; + export let dark: boolean = false; -
- {value}× +
+ {value}× {label} { #if target != null && target != value } () @@ -19,9 +21,14 @@ import PlusMinus from "../layout/PlusMinus.svelte" div.amount { padding-right: 1ch; + + &.right { + padding-right: 0; + margin-left: auto; + } } - span.label { + span.label, span.dark { opacity: $opacity-entry4; } diff --git a/frontend/src/lib/components/project/ItemSubSection.svelte b/frontend/src/lib/components/project/ItemSubSection.svelte index 832b745..5fe8b43 100644 --- a/frontend/src/lib/components/project/ItemSubSection.svelte +++ b/frontend/src/lib/components/project/ItemSubSection.svelte @@ -61,12 +61,18 @@ {/if} {/each} + {#if item.weightedRequired} + + {/if} {:else} {#each item.stats as stat (stat.id)} {#if stat.required > 0} {/if} {/each} + {#if item.weightedRequired} + + {/if} {/if} \ No newline at end of file diff --git a/frontend/src/lib/models/item.ts b/frontend/src/lib/models/item.ts index 89c3ed0..5402c8e 100644 --- a/frontend/src/lib/models/item.ts +++ b/frontend/src/lib/models/item.ts @@ -13,6 +13,8 @@ export default interface Item { acquiredTime?: string scheduledDate?: string stats: StatProgress[] + weightedAcquired: number + weightedRequired: number } export interface ItemInput { diff --git a/usecases/items/result.go b/usecases/items/result.go index fbe8595..b0d7442 100644 --- a/usecases/items/result.go +++ b/usecases/items/result.go @@ -8,8 +8,10 @@ import ( type Result struct { entities.Item - Requirement *entities.Requirement `json:"requirement,omitempty"` - Stats []ResultStat `json:"stats"` + Requirement *entities.Requirement `json:"requirement,omitempty"` + Stats []ResultStat `json:"stats"` + WeightedAcquired float64 `json:"weightedAcquired"` + WeightedRequired float64 `json:"weightedRequired"` } func (r *Result) Stat(statID int) *ResultStat { @@ -53,6 +55,7 @@ func (r *Result) AddStat(scope scopes.Result, stat entities.ItemStat) { Required: stat.Required, }) r.SortStats(scope) + r.RecalculateWeighted() } func (r *Result) SortStats(scope scopes.Result) { @@ -76,6 +79,18 @@ func (r *Result) RemoveStat(id int) { r.Stats = append(r.Stats[:i], r.Stats[i+1:]...) } } + + r.RecalculateWeighted() +} + +func (r *Result) RecalculateWeighted() { + r.WeightedAcquired = 0 + r.WeightedRequired = 0 + + for _, stat := range r.Stats { + r.WeightedAcquired += float64(stat.Acquired) * stat.Weight + r.WeightedRequired += float64(stat.Required) * stat.Weight + } } type ResultStat struct { @@ -121,6 +136,7 @@ func generateResult(item entities.Item, scope scopes.Result, progresses []entiti } res.SortStats(scope) + res.RecalculateWeighted() return res }