import Big from "big.js"; import { Component, createMemo } from "solid-js"; import { createStore } from "solid-js/store"; import { TextInput } from "./Form"; import { calculateAgileQuantity } from "./Positions"; import { formatAmount } from "./SwissInvoice"; const AgileCalculator: Component = () => { const [agileCalculator, setAgileCalculator] = createStore({ minPoints: 0, maxPoints: 10, risk: 70, singlePrice: 10.0, hoursPerPoint: 1, }); const calculatorQuantity = createMemo(() => calculateAgileQuantity( 1, new Big(agileCalculator.risk).div(100).toNumber(), agileCalculator.minPoints, agileCalculator.maxPoints ) ); return (

Rechnungsbeispiel

!Number.isNaN(e.currentTarget.valueAsNumber) && setAgileCalculator("risk", e.currentTarget.valueAsNumber) } /> !Number.isNaN(e.currentTarget.valueAsNumber) && setAgileCalculator("hoursPerPoint", e.currentTarget.valueAsNumber) } /> !Number.isNaN(e.currentTarget.valueAsNumber) && setAgileCalculator("minPoints", e.currentTarget.valueAsNumber) } /> !Number.isNaN(e.currentTarget.valueAsNumber) && setAgileCalculator("maxPoints", e.currentTarget.valueAsNumber) } /> !Number.isNaN(e.currentTarget.valueAsNumber) && setAgileCalculator("singlePrice", e.currentTarget.valueAsNumber) } />
{"("} {new Big(-100).plus(agileCalculator.risk).abs().toNumber()}% {" "} *{" "} {agileCalculator.minPoints} SP {")"} + {"("} {agileCalculator.risk}% {" "} *{" "} {agileCalculator.maxPoints > agileCalculator.minPoints ? agileCalculator.maxPoints : agileCalculator.minPoints}{" "} SP {")"} =
Gewichtete Story Points: {calculatorQuantity()} SP
{calculatorQuantity()} SP {" "} *{" "} {agileCalculator.hoursPerPoint} h {" "} *{" "} {agileCalculator.singlePrice} CHF {" "} =
Gesamtpreis: {formatAmount( new Big(calculatorQuantity()) .mul(agileCalculator.hoursPerPoint) .mul(agileCalculator.singlePrice) .toNumber() )}{" "} CHF
); }; export default AgileCalculator;