diff --git a/src/Model/Types/Avs.hs b/src/Model/Types/Avs.hs index a259654b8..7f84fa578 100644 --- a/src/Model/Types/Avs.hs +++ b/src/Model/Types/Avs.hs @@ -79,7 +79,7 @@ licence2char AvsLicenceVorfeld = 'F' licence2char AvsLicenceRollfeld = 'R' -data AvsDataCardColor = AvsCardColorGrün | AvsCardColorBlau | AvsCardColorRot | AvsCardColorGelb | AvsCardColorMisc Text +data AvsDataCardColor = AvsCardColorMisc Text | AvsCardColorGrün | AvsCardColorBlau | AvsCardColorRot | AvsCardColorGelb deriving (Eq, Ord, Read, Show, Generic, Typeable) deriving anyclass (NFData) @@ -104,12 +104,12 @@ data AvsDataPersonCard = AvsDataPersonCard { avsDataValid :: Bool -- card currently valid? Note that AVS encodes booleans as JSON String "true" and "false" and not as JSON booleans , avsDataValidTo :: Maybe Day -- always Nothing if returned with AvsResponseStatus , avsDataIssueDate :: Maybe Day -- always Nothing if returned with AvsResponseStatus + , avsDataCardColor :: AvsDataCardColor , avsDataCardAreas :: Set Char -- logically a set of upper-case letters , avsDataStreet :: Maybe Text -- always Nothing if returned with AvsResponseStatus , avsDataPostalCode:: Maybe Text -- always Nothing if returned with AvsResponseStatus , avsDataCity :: Maybe Text -- always Nothing if returned with AvsResponseStatus - , avsDataFirm :: Maybe Text -- always Nothing if returned with AvsResponseStatus - , avsDataCardColor :: AvsDataCardColor + , avsDataFirm :: Maybe Text -- always Nothing if returned with AvsResponseStatus , avsDataCardNo :: Text -- always 8 digits , avsDataVersionNo :: Text } @@ -134,12 +134,12 @@ instance FromJSON AvsDataPersonCard where <$> ((v .: "Valid") <&> sloppyBool) <*> v .:? "ValidTo" <*> v .:? "IssueDate" + <*> v .: "CardColor" <*> ((v .: "CardAreas") <&> charSet) <*> v .:? "Street" <*> v .:? "PostalCode" <*> v .:? "City" - <*> v .:? "Firm" - <*> v .: "CardColor" + <*> v .:? "Firm" <*> v .: "CardNo" <*> v .: "VersionNo" @@ -298,6 +298,8 @@ pickLicenceAddress a b | Just r <- pickBetter' avsDataValid = r -- prefer valid cards | Just r <- pickBetter' (Set.member licenceRollfeld . avsDataCardAreas) = r -- prefer 'R' cards | Just r <- pickBetter' (Set.member licenceVorfeld . avsDataCardAreas) = r -- prefer 'F' cards + | avsDataCardColor a > avsDataCardColor b = a -- prefer Yellow over Green, etc. + | avsDataCardColor a < avsDataCardColor b = b | avsDataIssueDate a > avsDataIssueDate b = a -- prefer later issue date | avsDataIssueDate a < avsDataIssueDate b = b | avsDataValidTo a > avsDataValidTo b = a -- prefer later validto date