Move around gross unit price input
This commit is contained in:
		
							parent
							
								
									f15a20589b
								
							
						
					
					
						commit
						89422aad2a
					
				| @ -69,6 +69,16 @@ type alias TaxGroup = | ||||
|   , percentage : Float | ||||
|   } | ||||
| 
 | ||||
| type alias NewItem = | ||||
|   { barcode : String | ||||
|   , name : String | ||||
|   , salesUnits : Int | ||||
|   , group : Group | ||||
|   , location : Location | ||||
|   , netUnitPrice : Float | ||||
|   , taxGroup : TaxGroup | ||||
|   } | ||||
| 
 | ||||
| type alias Context = | ||||
|   { globals : Globals | ||||
|   , state : State | ||||
| @ -135,11 +145,12 @@ updateState msg globals state = case state of | ||||
|       case find (\tg -> tg.id == searchResult.taxGroupId) globals.taxGroups of | ||||
|         Nothing -> (state, Cmd.none) | ||||
|         Just taxGroup -> | ||||
|           ( ItemEditor <| updateGrossUnitPrice | ||||
|           ( ItemEditor | ||||
|             { barcode = searchResult.barcode | ||||
|             , name = searchResult.name | ||||
|             , netUnitPrice = NumberInput.fromFloat searchResult.netUnitPrice | ||||
|             , grossUnitPrice = NumberInput.fromFloat 0 | ||||
|             , grossUnitPrice = NumberInput.fromFloat | ||||
|               (suggestedGrossPrice searchResult.netUnitPrice taxGroup.percentage) | ||||
|             , salesUnits = NumberInput.fromInt searchResult.salesUnits | ||||
|             , group = Select.init (.id >> String.fromInt) (.name) { id = searchResult.groupId, name = searchResult.groupName } globals.groups | ||||
|             , location = Select.init (.id >> String.fromInt) (.name) { id = searchResult.locationId, name = searchResult.locationName } globals.locations | ||||
| @ -157,26 +168,26 @@ updateState msg globals state = case state of | ||||
|     SetSalesUnits str -> | ||||
|       (ItemEditor { model | salesUnits = NumberInput.update str model.salesUnits }, Cmd.none) | ||||
|     SetNetUnitPrice str -> | ||||
|       ( ItemEditor <| updateGrossUnitPrice { model | netUnitPrice = NumberInput.update str model.netUnitPrice } | ||||
|       ( ItemEditor { model | netUnitPrice = NumberInput.update str model.netUnitPrice } | ||||
|       , Cmd.none | ||||
|       ) | ||||
|     SetGrossUnitPrice str -> | ||||
|       (ItemEditor { model | grossUnitPrice = NumberInput.update str model.grossUnitPrice }, Cmd.none) | ||||
|       ( ItemEditor { model | grossUnitPrice = NumberInput.update str model.grossUnitPrice } | ||||
|       , Cmd.none | ||||
|       ) | ||||
|     SetGroup key -> | ||||
|       (ItemEditor { model | group = Select.update key model.group }, Cmd.none) | ||||
|     SetLocation key -> | ||||
|       (ItemEditor { model | location = Select.update key model.location }, Cmd.none) | ||||
|     SetTaxGroup key -> | ||||
|       ( ItemEditor <| updateGrossUnitPrice { model | taxGroup = Select.update key model.taxGroup } | ||||
|       ( ItemEditor { model | taxGroup = Select.update key model.taxGroup } | ||||
|       , Cmd.none | ||||
|       ) | ||||
|     _ -> | ||||
|       (state, Cmd.none) | ||||
| 
 | ||||
| updateGrossUnitPrice model = | ||||
|   { model | ||||
|   | grossUnitPrice = Maybe.withDefault model.grossUnitPrice <| Maybe.map NumberInput.fromFloat <| calculateGarfieldPrice model | ||||
|   } | ||||
| suggestedGrossPrice netPrice percentage = | ||||
|   roundTo 2 <| netPrice * (1 + percentage) + 0.01 | ||||
| 
 | ||||
| -- View stuff | ||||
| 
 | ||||
| @ -217,7 +228,7 @@ view { globals, state } = case state of | ||||
|           , Select.view SetLocation model.location | ||||
|           ] | ||||
|         , div [ class "form-input" ] | ||||
|           [ label [ for "net-unit-price" ] [ text "Stückpreis (Netto)" ] | ||||
|           [ label [ for "net-unit-price" ] [ text "Einkaufspreis (Netto)" ] | ||||
|           , input | ||||
|             [ value <| NumberInput.show model.netUnitPrice | ||||
|             , onInput SetNetUnitPrice | ||||
| @ -231,28 +242,35 @@ view { globals, state } = case state of | ||||
|           [ label [ for "tax-group" ] [ text "Steuergruppe" ] | ||||
|           , Select.view SetTaxGroup model.taxGroup | ||||
|           ] | ||||
|         ] | ||||
|       , fieldset [] | ||||
|         [ legend [] [ text "Neuer Snackeintrag" ] | ||||
|         , div [ class "form-input" ] | ||||
|           [ label [ for "snack-name" ] [ text "Name" ] | ||||
|           , input [ value model.name, disabled True, id "snack-name" ] [] | ||||
|           [ label [ for "gross-unit-price" ] [ text "Verkaufspreis (Brutto)" ] | ||||
|           , input | ||||
|             [ value <| NumberInput.show model.grossUnitPrice | ||||
|             , onInput SetGrossUnitPrice | ||||
|             , type_ "number" | ||||
|             , id "gross-unit-price" | ||||
|             , step "0.01" | ||||
|             ] | ||||
|             [] | ||||
|           , viewSetSuggestedPriceButton model | ||||
|           ] | ||||
|         , viewGrossUnitPriceInput model | ||||
|         ] | ||||
|       ] | ||||
| 
 | ||||
| viewGrossUnitPriceInput model = | ||||
| viewSetSuggestedPriceButton model = | ||||
|   case NumberInput.get model.netUnitPrice of | ||||
|     Nothing -> | ||||
|       button [ disabled True ] [ text "Auf ? setzen" ] | ||||
|     Just netUnitPrice -> | ||||
|       let | ||||
|     suggestedPriceStr = case calculateGarfieldPrice model of | ||||
|       Nothing -> "?" | ||||
|       Just suggestedPrice -> String.fromFloat suggestedPrice | ||||
|         grossUnitPrice = suggestedGrossPrice netUnitPrice (Select.get model.taxGroup).percentage | ||||
|       in | ||||
|     div [ class "form-input" ] | ||||
|       [ label [ for "gross-unit-price" ] | ||||
|         [ text <| "Stückpreis (Brutto), Vorschlag: " ++ suggestedPriceStr | ||||
|         button | ||||
|           [ onClick <| SetGrossUnitPrice <| String.fromFloat grossUnitPrice | ||||
|           -- Prevent submitting the form | ||||
|           , type_ "button" | ||||
|           ] | ||||
|       , input [ onInput SetGrossUnitPrice, value <| NumberInput.show model.grossUnitPrice, id "gross-unit-price", type_ "number", step "0.01" ] [] | ||||
|           [ text <| "Auf " ++ String.fromFloat grossUnitPrice ++ " setzen" | ||||
|           ] | ||||
| 
 | ||||
| searchResultHeaders = | ||||
|  | ||||
| @ -11119,6 +11119,17 @@ var $author$project$Entry$searchResultDecoder = A3( | ||||
| 											'item_barcode', | ||||
| 											$elm$json$Json$Decode$string, | ||||
| 											$elm$json$Json$Decode$succeed($author$project$Entry$SearchResult)))))))))))); | ||||
| var $elm$core$Basics$pow = _Basics_pow; | ||||
| var $elm$core$Basics$round = _Basics_round; | ||||
| var $author$project$Entry$roundTo = F2( | ||||
| 	function (places, x) { | ||||
| 		return $elm$core$Basics$round( | ||||
| 			x * A2($elm$core$Basics$pow, 10, places)) / A2($elm$core$Basics$pow, 10, places); | ||||
| 	}); | ||||
| var $author$project$Entry$suggestedGrossPrice = F2( | ||||
| 	function (netPrice, percentage) { | ||||
| 		return A2($author$project$Entry$roundTo, 2, (netPrice * (1 + percentage)) + 0.01); | ||||
| 	}); | ||||
| var $author$project$NumberInput$update = F2( | ||||
| 	function (str, model) { | ||||
| 		return _Utils_update( | ||||
| @ -11152,53 +11163,6 @@ var $author$project$Select$update = F2( | ||||
| 				{selected: x}); | ||||
| 		} | ||||
| 	}); | ||||
| var $author$project$NumberInput$get = function ($) { | ||||
| 	return $.value; | ||||
| }; | ||||
| var $author$project$Select$get = function ($) { | ||||
| 	return $.selected; | ||||
| }; | ||||
| var $elm$core$Maybe$map = F2( | ||||
| 	function (f, maybe) { | ||||
| 		if (maybe.$ === 'Just') { | ||||
| 			var value = maybe.a; | ||||
| 			return $elm$core$Maybe$Just( | ||||
| 				f(value)); | ||||
| 		} else { | ||||
| 			return $elm$core$Maybe$Nothing; | ||||
| 		} | ||||
| 	}); | ||||
| var $elm$core$Basics$pow = _Basics_pow; | ||||
| var $elm$core$Basics$round = _Basics_round; | ||||
| var $author$project$Entry$roundTo = F2( | ||||
| 	function (places, x) { | ||||
| 		return $elm$core$Basics$round( | ||||
| 			x * A2($elm$core$Basics$pow, 10, places)) / A2($elm$core$Basics$pow, 10, places); | ||||
| 	}); | ||||
| var $author$project$Entry$calculateGarfieldPrice = function (model) { | ||||
| 	return A2( | ||||
| 		$elm$core$Maybe$map, | ||||
| 		function (netUnitPrice) { | ||||
| 			return A2( | ||||
| 				$author$project$Entry$roundTo, | ||||
| 				2, | ||||
| 				(netUnitPrice * (1 + $author$project$Select$get(model.taxGroup).percentage)) + 0.01); | ||||
| 		}, | ||||
| 		$author$project$NumberInput$get(model.netUnitPrice)); | ||||
| }; | ||||
| var $author$project$Entry$updateGrossUnitPrice = function (model) { | ||||
| 	return _Utils_update( | ||||
| 		model, | ||||
| 		{ | ||||
| 			grossUnitPrice: A2( | ||||
| 				$elm$core$Maybe$withDefault, | ||||
| 				model.grossUnitPrice, | ||||
| 				A2( | ||||
| 					$elm$core$Maybe$map, | ||||
| 					$author$project$NumberInput$fromFloat, | ||||
| 					$author$project$Entry$calculateGarfieldPrice(model))) | ||||
| 		}); | ||||
| }; | ||||
| var $author$project$Entry$updateState = F3( | ||||
| 	function (msg, globals, state) { | ||||
| 		if (state.$ === 'ItemSearch') { | ||||
| @ -11251,10 +11215,10 @@ var $author$project$Entry$updateState = F3( | ||||
| 							var taxGroup = _v2.a; | ||||
| 							return _Utils_Tuple2( | ||||
| 								$author$project$Entry$ItemEditor( | ||||
| 									$author$project$Entry$updateGrossUnitPrice( | ||||
| 									{ | ||||
| 										barcode: searchResult.barcode, | ||||
| 											grossUnitPrice: $author$project$NumberInput$fromFloat(0), | ||||
| 										grossUnitPrice: $author$project$NumberInput$fromFloat( | ||||
| 											A2($author$project$Entry$suggestedGrossPrice, searchResult.netUnitPrice, taxGroup.percentage)), | ||||
| 										group: A4( | ||||
| 											$author$project$Select$init, | ||||
| 											A2( | ||||
| @ -11297,7 +11261,7 @@ var $author$project$Entry$updateState = F3( | ||||
| 											}, | ||||
| 											taxGroup, | ||||
| 											globals.taxGroups) | ||||
| 										})), | ||||
| 									}), | ||||
| 								$elm$core$Platform$Cmd$none); | ||||
| 						} | ||||
| 					default: | ||||
| @ -11338,12 +11302,11 @@ var $author$project$Entry$updateState = F3( | ||||
| 					var str = msg.a; | ||||
| 					return _Utils_Tuple2( | ||||
| 						$author$project$Entry$ItemEditor( | ||||
| 							$author$project$Entry$updateGrossUnitPrice( | ||||
| 							_Utils_update( | ||||
| 								model, | ||||
| 								{ | ||||
| 									netUnitPrice: A2($author$project$NumberInput$update, str, model.netUnitPrice) | ||||
| 									}))), | ||||
| 								})), | ||||
| 						$elm$core$Platform$Cmd$none); | ||||
| 				case 'SetGrossUnitPrice': | ||||
| 					var str = msg.a; | ||||
| @ -11379,12 +11342,11 @@ var $author$project$Entry$updateState = F3( | ||||
| 					var key = msg.a; | ||||
| 					return _Utils_Tuple2( | ||||
| 						$author$project$Entry$ItemEditor( | ||||
| 							$author$project$Entry$updateGrossUnitPrice( | ||||
| 							_Utils_update( | ||||
| 								model, | ||||
| 								{ | ||||
| 									taxGroup: A2($author$project$Select$update, key, model.taxGroup) | ||||
| 									}))), | ||||
| 								})), | ||||
| 						$elm$core$Platform$Cmd$none); | ||||
| 				default: | ||||
| 					return _Utils_Tuple2(state, $elm$core$Platform$Cmd$none); | ||||
| @ -11405,6 +11367,9 @@ var $author$project$Entry$update = F2( | ||||
| var $author$project$Entry$SetBarcode = function (a) { | ||||
| 	return {$: 'SetBarcode', a: a}; | ||||
| }; | ||||
| var $author$project$Entry$SetGrossUnitPrice = function (a) { | ||||
| 	return {$: 'SetGrossUnitPrice', a: a}; | ||||
| }; | ||||
| var $author$project$Entry$SetGroup = function (a) { | ||||
| 	return {$: 'SetGroup', a: a}; | ||||
| }; | ||||
| @ -11566,51 +11531,6 @@ var $author$project$Select$view = F2( | ||||
| 				]), | ||||
| 			A2($elm$core$List$map, viewOption, model.options)); | ||||
| 	}); | ||||
| var $author$project$Entry$SetGrossUnitPrice = function (a) { | ||||
| 	return {$: 'SetGrossUnitPrice', a: a}; | ||||
| }; | ||||
| var $author$project$Entry$viewGrossUnitPriceInput = function (model) { | ||||
| 	var suggestedPriceStr = function () { | ||||
| 		var _v0 = $author$project$Entry$calculateGarfieldPrice(model); | ||||
| 		if (_v0.$ === 'Nothing') { | ||||
| 			return '?'; | ||||
| 		} else { | ||||
| 			var suggestedPrice = _v0.a; | ||||
| 			return $elm$core$String$fromFloat(suggestedPrice); | ||||
| 		} | ||||
| 	}(); | ||||
| 	return A2( | ||||
| 		$elm$html$Html$div, | ||||
| 		_List_fromArray( | ||||
| 			[ | ||||
| 				$elm$html$Html$Attributes$class('form-input') | ||||
| 			]), | ||||
| 		_List_fromArray( | ||||
| 			[ | ||||
| 				A2( | ||||
| 				$elm$html$Html$label, | ||||
| 				_List_fromArray( | ||||
| 					[ | ||||
| 						$elm$html$Html$Attributes$for('gross-unit-price') | ||||
| 					]), | ||||
| 				_List_fromArray( | ||||
| 					[ | ||||
| 						$elm$html$Html$text('Stückpreis (Brutto), Vorschlag: ' + suggestedPriceStr) | ||||
| 					])), | ||||
| 				A2( | ||||
| 				$elm$html$Html$input, | ||||
| 				_List_fromArray( | ||||
| 					[ | ||||
| 						$elm$html$Html$Events$onInput($author$project$Entry$SetGrossUnitPrice), | ||||
| 						$elm$html$Html$Attributes$value( | ||||
| 						$author$project$NumberInput$show(model.grossUnitPrice)), | ||||
| 						$elm$html$Html$Attributes$id('gross-unit-price'), | ||||
| 						$elm$html$Html$Attributes$type_('number'), | ||||
| 						$elm$html$Html$Attributes$step('0.01') | ||||
| 					]), | ||||
| 				_List_Nil) | ||||
| 			])); | ||||
| }; | ||||
| var $author$project$Entry$GotoItemEditor = function (a) { | ||||
| 	return {$: 'GotoItemEditor', a: a}; | ||||
| }; | ||||
| @ -11712,6 +11632,47 @@ var $author$project$Entry$viewSearchResult = function (model) { | ||||
| 					])) | ||||
| 			])); | ||||
| }; | ||||
| var $author$project$NumberInput$get = function ($) { | ||||
| 	return $.value; | ||||
| }; | ||||
| var $author$project$Select$get = function ($) { | ||||
| 	return $.selected; | ||||
| }; | ||||
| var $author$project$Entry$viewSetSuggestedPriceButton = function (model) { | ||||
| 	var _v0 = $author$project$NumberInput$get(model.netUnitPrice); | ||||
| 	if (_v0.$ === 'Nothing') { | ||||
| 		return A2( | ||||
| 			$elm$html$Html$button, | ||||
| 			_List_fromArray( | ||||
| 				[ | ||||
| 					$elm$html$Html$Attributes$disabled(true) | ||||
| 				]), | ||||
| 			_List_fromArray( | ||||
| 				[ | ||||
| 					$elm$html$Html$text('Auf ? setzen') | ||||
| 				])); | ||||
| 	} else { | ||||
| 		var netUnitPrice = _v0.a; | ||||
| 		var grossUnitPrice = A2( | ||||
| 			$author$project$Entry$suggestedGrossPrice, | ||||
| 			netUnitPrice, | ||||
| 			$author$project$Select$get(model.taxGroup).percentage); | ||||
| 		return A2( | ||||
| 			$elm$html$Html$button, | ||||
| 			_List_fromArray( | ||||
| 				[ | ||||
| 					$elm$html$Html$Events$onClick( | ||||
| 					$author$project$Entry$SetGrossUnitPrice( | ||||
| 						$elm$core$String$fromFloat(grossUnitPrice))), | ||||
| 					$elm$html$Html$Attributes$type_('button') | ||||
| 				]), | ||||
| 			_List_fromArray( | ||||
| 				[ | ||||
| 					$elm$html$Html$text( | ||||
| 					'Auf ' + ($elm$core$String$fromFloat(grossUnitPrice) + ' setzen')) | ||||
| 				])); | ||||
| 	} | ||||
| }; | ||||
| var $author$project$Entry$view = function (_v0) { | ||||
| 	var globals = _v0.globals; | ||||
| 	var state = _v0.state; | ||||
| @ -11937,7 +11898,7 @@ var $author$project$Entry$view = function (_v0) { | ||||
| 										]), | ||||
| 									_List_fromArray( | ||||
| 										[ | ||||
| 											$elm$html$Html$text('Stückpreis (Netto)') | ||||
| 											$elm$html$Html$text('Einkaufspreis (Netto)') | ||||
| 										])), | ||||
| 									A2( | ||||
| 									$elm$html$Html$input, | ||||
| @ -11971,19 +11932,6 @@ var $author$project$Entry$view = function (_v0) { | ||||
| 											$elm$html$Html$text('Steuergruppe') | ||||
| 										])), | ||||
| 									A2($author$project$Select$view, $author$project$Entry$SetTaxGroup, model.taxGroup) | ||||
| 								])) | ||||
| 						])), | ||||
| 					A2( | ||||
| 					$elm$html$Html$fieldset, | ||||
| 					_List_Nil, | ||||
| 					_List_fromArray( | ||||
| 						[ | ||||
| 							A2( | ||||
| 							$elm$html$Html$legend, | ||||
| 							_List_Nil, | ||||
| 							_List_fromArray( | ||||
| 								[ | ||||
| 									$elm$html$Html$text('Neuer Snackeintrag') | ||||
| 								])), | ||||
| 							A2( | ||||
| 							$elm$html$Html$div, | ||||
| @ -11997,23 +11945,26 @@ var $author$project$Entry$view = function (_v0) { | ||||
| 									$elm$html$Html$label, | ||||
| 									_List_fromArray( | ||||
| 										[ | ||||
| 											$elm$html$Html$Attributes$for('snack-name') | ||||
| 											$elm$html$Html$Attributes$for('gross-unit-price') | ||||
| 										]), | ||||
| 									_List_fromArray( | ||||
| 										[ | ||||
| 											$elm$html$Html$text('Name') | ||||
| 											$elm$html$Html$text('Verkaufspreis (Brutto)') | ||||
| 										])), | ||||
| 									A2( | ||||
| 									$elm$html$Html$input, | ||||
| 									_List_fromArray( | ||||
| 										[ | ||||
| 											$elm$html$Html$Attributes$value(model.name), | ||||
| 											$elm$html$Html$Attributes$disabled(true), | ||||
| 											$elm$html$Html$Attributes$id('snack-name') | ||||
| 											$elm$html$Html$Attributes$value( | ||||
| 											$author$project$NumberInput$show(model.grossUnitPrice)), | ||||
| 											$elm$html$Html$Events$onInput($author$project$Entry$SetGrossUnitPrice), | ||||
| 											$elm$html$Html$Attributes$type_('number'), | ||||
| 											$elm$html$Html$Attributes$id('gross-unit-price'), | ||||
| 											$elm$html$Html$Attributes$step('0.01') | ||||
| 										]), | ||||
| 									_List_Nil) | ||||
| 								])), | ||||
| 							$author$project$Entry$viewGrossUnitPriceInput(model) | ||||
| 									_List_Nil), | ||||
| 									$author$project$Entry$viewSetSuggestedPriceButton(model) | ||||
| 								])) | ||||
| 						])) | ||||
| 				])); | ||||
| 	} | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user