module LoggedIn.View.Table ( paymentsTable ) where import Dict exposing (..) import Date exposing (Date) import Signal exposing (Address) import String exposing (append) import Html exposing (..) import Html.Attributes exposing (..) import Html.Events exposing (..) import LoggedIn.Action as LoggedInAction import LoggedIn.Model as LoggedInModel import Model exposing (Model) import Model.User exposing (getUserName) import Model.Payment exposing (..) import Model.Translations exposing (getMessage) import Action exposing (..) import View.Icon exposing (renderIcon) import View.Date exposing (..) import View.Price exposing (price) paymentsTable : Address Action -> Model -> LoggedInModel.Model -> Html paymentsTable address model loggedInModel = div [ class "table" ] ( headerLine model :: paymentLines address model loggedInModel) headerLine : Model -> Html headerLine model = div [ class "header" ] [ div [ class "cell category" ] [ renderIcon "shopping-cart" ] , div [ class "cell cost" ] [ text model.conf.currency ] , div [ class "cell user" ] [ renderIcon "user" ] , div [ class "cell date" ] [ renderIcon "calendar" ] , div [ class "cell" ] [] ] paymentLines : Address Action -> Model -> LoggedInModel.Model -> List Html paymentLines address model loggedInModel = loggedInModel.payments |> List.sortBy (Date.toTime << .creation) |> List.reverse |> List.drop ((loggedInModel.currentPage - 1) * perPage) |> List.take perPage |> List.map (paymentLine address model loggedInModel) paymentLine : Address Action -> Model -> LoggedInModel.Model -> Payment -> Html paymentLine address model loggedInModel payment = a [ classList [ ("row", True) , ("edition", loggedInModel.paymentEdition == Just payment.id) ] , onClick address (UpdateLoggedIn (LoggedInAction.ToggleEdit payment.id)) ] [ div [ class "cell category" ] [ text payment.name ] , div [ classList [ ("cell cost", True) , ("refund", payment.cost < 0) ] ] [ text (price model payment.cost) ] , div [ class "cell user" ] [ payment.userId |> getUserName loggedInModel.users |> Maybe.withDefault "−" |> text ] , div [ class "cell date" ] [ span [ class "shortDate" ] [ text (renderShortDate payment.creation model.translations) ] , span [ class "longDate" ] [ text (renderLongDate payment.creation model.translations) ] ] , if loggedInModel.account.me == payment.userId then div [ class "cell delete" ] [ button [ onClick address (UpdateLoggedIn <| LoggedInAction.DeletePayment payment Punctual)] [ renderIcon "times" ] ] else div [ class "cell" ] [] ]