Browse Source

add total weighted for items.

master
Gisle Aune 2 years ago
parent
commit
ad53ec5c7e
  1. 13
      frontend/src/lib/components/common/Amount.svelte
  2. 6
      frontend/src/lib/components/project/ItemSubSection.svelte
  3. 2
      frontend/src/lib/models/item.ts
  4. 20
      usecases/items/result.go

13
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;
</script>
<div class="amount">
<span class="value">{value}&times;</span>
<div class="amount" class:right>
<span class:dark class="value">{value}&times;</span>
<span class="label">{label}</span>
{ #if target != null && target != value }
<span class="target">(<PlusMinus offset={value - target} />)</span>
@ -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;
}

6
frontend/src/lib/components/project/ItemSubSection.svelte

@ -61,12 +61,18 @@
<Amount label={stat.name} value={stat.acquired} target={stat.required} />
{/if}
{/each}
{#if item.weightedRequired}
<Amount dark right label="" value={item.weightedAcquired} target={item.weightedRequired} />
{/if}
{:else}
{#each item.stats as stat (stat.id)}
{#if stat.required > 0}
<Amount label={stat.name} value={stat.required} />
{/if}
{/each}
{#if item.weightedRequired}
<Amount dark right label="" value={item.weightedRequired} />
{/if}
{/if}
</AmountRow>
</SubSection>

2
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 {

20
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
}
Loading…
Cancel
Save