mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-02-15 20:33:26 +00:00
Allow a comma and a point for money values
This commit is contained in:
parent
bb19e02c66
commit
c5ab663091
@ -131,14 +131,17 @@ initWith value =
|
||||
Data.CustomFieldType.Numeric ->
|
||||
let
|
||||
( fm, _ ) =
|
||||
updateFloatModel value.value string2Float
|
||||
updateFloatModel value.value string2Float identity
|
||||
in
|
||||
NumberField fm
|
||||
|
||||
Data.CustomFieldType.Money ->
|
||||
let
|
||||
( fm, _ ) =
|
||||
updateFloatModel value.value Data.Money.fromString
|
||||
updateFloatModel
|
||||
value.value
|
||||
Data.Money.fromString
|
||||
Data.Money.normalizeInput
|
||||
in
|
||||
MoneyField fm
|
||||
|
||||
@ -175,14 +178,18 @@ type alias UpdateResult =
|
||||
}
|
||||
|
||||
|
||||
updateFloatModel : String -> (String -> Result String Float) -> ( FloatModel, FieldResult )
|
||||
updateFloatModel msg parse =
|
||||
updateFloatModel :
|
||||
String
|
||||
-> (String -> Result String Float)
|
||||
-> (String -> String)
|
||||
-> ( FloatModel, FieldResult )
|
||||
updateFloatModel msg parse normalize =
|
||||
case parse msg of
|
||||
Ok n ->
|
||||
( { input = msg
|
||||
( { input = normalize msg
|
||||
, result = Ok n
|
||||
}
|
||||
, Value msg
|
||||
, Value (normalize msg)
|
||||
)
|
||||
|
||||
Err err ->
|
||||
@ -216,7 +223,7 @@ update msg model =
|
||||
( NumberMsg str, NumberField _ ) ->
|
||||
let
|
||||
( fm, res ) =
|
||||
updateFloatModel str string2Float
|
||||
updateFloatModel str string2Float identity
|
||||
|
||||
model_ =
|
||||
{ model | fieldModel = NumberField fm }
|
||||
@ -229,6 +236,7 @@ update msg model =
|
||||
updateFloatModel
|
||||
str
|
||||
Data.Money.fromString
|
||||
Data.Money.normalizeInput
|
||||
|
||||
model_ =
|
||||
{ model | fieldModel = MoneyField fm }
|
||||
|
@ -2,6 +2,7 @@ module Data.Money exposing
|
||||
( Money
|
||||
, format
|
||||
, fromString
|
||||
, normalizeInput
|
||||
, roundMoney
|
||||
)
|
||||
|
||||
@ -13,8 +14,11 @@ type alias Money =
|
||||
fromString : String -> Result String Money
|
||||
fromString str =
|
||||
let
|
||||
input =
|
||||
normalizeInput str
|
||||
|
||||
points =
|
||||
String.indexes "." str
|
||||
String.indexes "." input
|
||||
|
||||
len =
|
||||
String.length str
|
||||
@ -22,7 +26,7 @@ fromString str =
|
||||
case points of
|
||||
index :: [] ->
|
||||
if index == (len - 3) then
|
||||
String.toFloat str
|
||||
String.toFloat input
|
||||
|> Maybe.map Ok
|
||||
|> Maybe.withDefault (Err "Two digits required after the dot.")
|
||||
|
||||
@ -41,3 +45,8 @@ format money =
|
||||
roundMoney : Float -> Float
|
||||
roundMoney input =
|
||||
(round (input * 100) |> toFloat) / 100
|
||||
|
||||
|
||||
normalizeInput : String -> String
|
||||
normalizeInput str =
|
||||
String.replace "," "." str
|
||||
|
Loading…
Reference in New Issue
Block a user