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 label: string
export let value: number export let value: number
export let target: number = null export let target: number = null
export let right: boolean = false;
export let dark: boolean = false;
</script> </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> <span class="label">{label}</span>
{ #if target != null && target != value } { #if target != null && target != value }
<span class="target">(<PlusMinus offset={value - target} />)</span> <span class="target">(<PlusMinus offset={value - target} />)</span>
@ -19,9 +21,14 @@ import PlusMinus from "../layout/PlusMinus.svelte"
div.amount { div.amount {
padding-right: 1ch; padding-right: 1ch;
&.right {
padding-right: 0;
margin-left: auto;
}
} }
span.label {
span.label, span.dark {
opacity: $opacity-entry4; 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} /> <Amount label={stat.name} value={stat.acquired} target={stat.required} />
{/if} {/if}
{/each} {/each}
{#if item.weightedRequired}
<Amount dark right label="" value={item.weightedAcquired} target={item.weightedRequired} />
{/if}
{:else} {:else}
{#each item.stats as stat (stat.id)} {#each item.stats as stat (stat.id)}
{#if stat.required > 0} {#if stat.required > 0}
<Amount label={stat.name} value={stat.required} /> <Amount label={stat.name} value={stat.required} />
{/if} {/if}
{/each} {/each}
{#if item.weightedRequired}
<Amount dark right label="" value={item.weightedRequired} />
{/if}
{/if} {/if}
</AmountRow> </AmountRow>
</SubSection> </SubSection>

2
frontend/src/lib/models/item.ts

@ -13,6 +13,8 @@ export default interface Item {
acquiredTime?: string acquiredTime?: string
scheduledDate?: string scheduledDate?: string
stats: StatProgress[] stats: StatProgress[]
weightedAcquired: number
weightedRequired: number
} }
export interface ItemInput { export interface ItemInput {

20
usecases/items/result.go

@ -8,8 +8,10 @@ import (
type Result struct { type Result struct {
entities.Item 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 { func (r *Result) Stat(statID int) *ResultStat {
@ -53,6 +55,7 @@ func (r *Result) AddStat(scope scopes.Result, stat entities.ItemStat) {
Required: stat.Required, Required: stat.Required,
}) })
r.SortStats(scope) r.SortStats(scope)
r.RecalculateWeighted()
} }
func (r *Result) SortStats(scope scopes.Result) { 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.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 { type ResultStat struct {
@ -121,6 +136,7 @@ func generateResult(item entities.Item, scope scopes.Result, progresses []entiti
} }
res.SortStats(scope) res.SortStats(scope)
res.RecalculateWeighted()
return res return res
} }
Loading…
Cancel
Save