module Customer.View exposing (..) import Html exposing (..) import Html.Attributes exposing (..) import Html.Events exposing (onClick) import RemoteData exposing (..) import Css.Admin as CSSAdmin exposing (..) import Css.Classes as C import Common.Customer.Types exposing (..) import Customer.Types exposing (..) import Date exposing (..) import Date.Extra exposing (toFormattedString) customerActions : String -> Authorized -> Html Msg customerActions id authorizedOverride = case authorizedOverride of Blocked -> button [ onClick (PatchCustomer id "authorizedOverride" Verified) ] [ text "Unblock" ] Verified -> button [ onClick (PatchCustomer id "authorizedOverride" Blocked) ] [ text "Block" ] Automatic -> button [ onClick (PatchCustomer id "authorizedOverride" Blocked) ] [ text "Block" ] formatDate : Maybe Date -> String formatDate date = case date of Just date -> toFormattedString "yyyy-MM-dd HH:mm" date Nothing -> "" maybeText : Maybe String -> Html Msg maybeText maybeString = text (Maybe.withDefault "" maybeString) actions : String -> String -> Authorized -> Html Msg actions id fieldKey checkedValue = (div [] [ div [] [ radio fieldKey checkedValue Automatic (PatchCustomer id fieldKey Automatic) , radio fieldKey checkedValue Blocked (PatchCustomer id fieldKey Blocked) , radio fieldKey checkedValue Verified (PatchCustomer id fieldKey Verified) ] ] ) radio : String -> Authorized -> Authorized -> msg -> Html msg radio inputName checkedValue value msg = label [ style [ ( "padding", "5px" ) ] ] [ input [ checked (checkedValue == value), type_ "radio", name inputName, onClick msg ] [] , text (authorizedToString value) ] verifyStatus : Maybe a -> Authorized -> Html Msg verifyStatus complianceType fieldOverride = if fieldOverride == Verified || (complianceType /= Nothing && fieldOverride == Automatic) then text "Verified" else text "Unverified" customerView : Customer -> Html Msg customerView customer = div [] [ h1 [] [ text "Customer Details" ] , table [ CSSAdmin.class [ C.TxTable ] ] [ tbody [] [ tr [] [ td [] [ text "Customer ID" ] , td [] [ text customer.id ] ] , tr [] [ td [] [ text "Name" ] , td [] [ maybeText customer.name ] ] , tr [] [ td [] [ text "Phone" ] , td [] [ maybeText customer.phone ] ] , tr [] [ td [] [ text "Completed phone at" ] , td [] [ text (formatDate customer.phoneAt) ] ] , tr [] [ td [] [ text "Created" ] , td [] [ text (toFormattedString "yyyy-MM-dd HH:mm" customer.created) ] ] , tr [] [ td [] [ text "Block Customer" ] , td [] [ customerActions customer.id customer.authorizedOverride ] ] , tr [] [ td [] [ text "Authorized at " ] , td [] [ text (formatDate customer.authorizedAt) ] ] , tr [] [ td [] [ text "Daily Volume " ] , td [] [ maybeText customer.dailyVolume ] ] ] ] , h2 [] [ text "Compliance types" ] , table [ CSSAdmin.class [ C.TxTable ] ] [ thead [] [ tr [] [ td [] [ text "Name" ] , td [] [ text "Date" ] , td [] [ text "Verify Status" ] , td [] [ text "Override Status" ] , td [] [ text "User who overrode" ] , td [] [ text "Actions" ] ] ] , tbody [] [ tr [] [ td [] [ text "SMS" ] , td [] [ text (formatDate customer.phoneAt) ] , td [] [ verifyStatus customer.phone customer.smsOverride ] , td [] [ text (authorizedToString customer.smsOverride) ] , td [] [ maybeText customer.smsOverrideByName ] , td [] [ actions customer.id "smsOverride" customer.smsOverride ] ] , tr [] [ td [] [ text "ID Card Data" ] , td [] [ text (formatDate customer.idCardDataAt) ] , td [] [ verifyStatus customer.idCardData customer.idCardDataOverride ] , td [] [ text (authorizedToString customer.idCardDataOverride) ] , td [] [ maybeText customer.idCardDataOverrideByName ] , td [] [ actions customer.id "idCardDataOverride" customer.idCardDataOverride ] ] , tr [] [ td [] [ text "ID Card Photo" ] , td [] [ text (formatDate customer.idCardPhotoAt) ] , td [] [ verifyStatus customer.idCardPhotoPath customer.idCardPhotoOverride ] , td [] [ text (authorizedToString customer.idCardPhotoOverride) ] , td [] [ maybeText customer.idCardPhotoOverrideByName ] , td [] [ actions customer.id "idCardPhotoOverride" customer.idCardPhotoOverride ] ] , tr [] [ td [] [ text "Front Facing Camera" ] , td [] [ text (formatDate customer.frontCameraAt) ] , td [] [ verifyStatus customer.frontCameraPath customer.frontCameraOverride ] , td [] [ text (authorizedToString customer.frontCameraOverride) ] , td [] [ maybeText customer.frontCameraOverrideByName ] , td [] [ actions customer.id "frontCameraOverride" customer.frontCameraOverride ] ] , tr [] [ td [] [ text "Sanctions Check" ] , td [] [ text (formatDate customer.sanctionsAt) ] , td [] [ verifyStatus customer.sanctions customer.sanctionsOverride ] , td [] [ text (authorizedToString customer.sanctionsOverride) ] , td [] [ maybeText customer.sanctionsOverrideByName ] , td [] [ actions customer.id "sanctionsOverride" customer.sanctionsOverride ] ] ] ] , h2 [] [ text "ID Card Photo" ] , case customer.idCardPhotoPath of Nothing -> text "N/A" Just idCardPhotoPath -> div [] [ img [ src ("/id-card-photo/" ++ idCardPhotoPath) , height 200 , alt "N/A" ] [] ] ] view : Model -> Html Msg view model = case model of NotAsked -> div [] [] Loading -> div [] [ text "Loading..." ] Failure err -> div [] [ text (toString err) ] Success customer -> div [] [ customerView customer ]