aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJoris2016-06-26 17:30:03 +0200
committerJoris2016-06-26 17:30:03 +0200
commit885dfd7708e338a3220c85b7f22a3ac267aad3f7 (patch)
treeff259354eb9fd97fc0bab2775296830dcced5693 /src
parentcfade71c343eb29c8873011f5878a39aed8257b2 (diff)
Add the clone functionality on payments
Diffstat (limited to 'src')
-rw-r--r--src/client/elm/Dialog/AddPaymentButton/View.elm (renamed from src/client/elm/Dialog/AddPayment/View.elm)13
-rw-r--r--src/client/elm/Dialog/Model.elm15
-rw-r--r--src/client/elm/LoggedIn/Home/Header/View.elm18
-rw-r--r--src/client/elm/LoggedIn/Home/View/Table.elm13
-rw-r--r--src/client/elm/Model/Payment.elm9
-rw-r--r--src/server/Design/LoggedIn/Home/Table.hs4
6 files changed, 51 insertions, 21 deletions
diff --git a/src/client/elm/Dialog/AddPayment/View.elm b/src/client/elm/Dialog/AddPaymentButton/View.elm
index 30df617..8014571 100644
--- a/src/client/elm/Dialog/AddPayment/View.elm
+++ b/src/client/elm/Dialog/AddPaymentButton/View.elm
@@ -1,4 +1,4 @@
-module Dialog.AddPayment.View exposing
+module Dialog.AddPaymentButton.View exposing
( view
)
@@ -7,9 +7,9 @@ import Html.Attributes exposing (..)
import Html.Events exposing (..)
import Html.App as Html
import Task
-import Date
import Form exposing (Form)
+import Form.Field as Field exposing (Field)
import Utils.Form as Form
import Dialog
@@ -31,8 +31,8 @@ import Dialog.Msg as DialogMsg
import LoggedData exposing (LoggedData)
import LoggedIn.Home.Model as HomeModel
-view : LoggedData -> Frequency -> Html Msg
-view loggedData frequency =
+view : LoggedData -> List (String, Field) -> Html Msg -> Html Msg
+view loggedData initialForm content =
let dialogConfig =
{ className = "paymentDialog"
, title = getMessage "AddPayment" loggedData.translations
@@ -41,12 +41,11 @@ view loggedData frequency =
, confirmMsg = submitForm << .addPayment
, undo = getMessage "Undo" loggedData.translations
}
- currentDate = Date.fromTime loggedData.currentTime
in button
[ class "addPayment"
- , onClick (Msg.Dialog <| Dialog.OpenWithUpdate dialogConfig (DialogMsg.AddPaymentMsg <| Form.Reset (DialogModel.addPaymentInitial loggedData.translations currentDate frequency)))
+ , onClick (Msg.Dialog <| Dialog.OpenWithUpdate dialogConfig (DialogMsg.AddPaymentMsg <| Form.Reset initialForm))
]
- [ text (getMessage "AddPayment" loggedData.translations) ]
+ [ content ]
addPaymentForm : LoggedData -> Form String DialogModel.AddPayment -> Html Msg
addPaymentForm loggedData addPayment =
diff --git a/src/client/elm/Dialog/Model.elm b/src/client/elm/Dialog/Model.elm
index 2ac4591..6256fea 100644
--- a/src/client/elm/Dialog/Model.elm
+++ b/src/client/elm/Dialog/Model.elm
@@ -3,6 +3,7 @@ module Dialog.Model exposing
, AddPayment
, init
, addPaymentInitial
+ , clonePaymentInitial
)
import Date exposing (Date)
@@ -13,7 +14,7 @@ import Form.Field as Field exposing (Field)
import Form.Validate as Validate exposing (Validation)
import Validation
-import Model.Payment as Payment
+import Model.Payment as Payment exposing (Payment, Frequency)
import Model.Translations exposing (Translations)
type alias Model =
@@ -24,7 +25,7 @@ type alias AddPayment =
{ name : String
, cost : Int
, date : Date
- , frequency : Payment.Frequency
+ , frequency : Frequency
}
init : Model
@@ -32,12 +33,20 @@ init =
{ addPayment = Form.initial [] addPaymentValidation
}
-addPaymentInitial : Translations -> Date -> Payment.Frequency -> List (String, Field)
+addPaymentInitial : Translations -> Date -> Frequency -> List (String, Field)
addPaymentInitial translations date frequency =
[ ("date", Field.Text (Date.shortView date translations))
, ("frequency", Field.Radio (toString frequency))
]
+clonePaymentInitial : Translations -> Date -> Payment -> List (String, Field)
+clonePaymentInitial translations date payment =
+ [ ("name", Field.Text payment.name)
+ , ("cost", Field.Text (toString payment.cost))
+ , ("date", Field.Text (Date.shortView date translations))
+ , ("frequency", Field.Radio (toString payment.frequency))
+ ]
+
addPaymentValidation : Validation String AddPayment
addPaymentValidation =
Validate.form4 AddPayment
diff --git a/src/client/elm/LoggedIn/Home/Header/View.elm b/src/client/elm/LoggedIn/Home/Header/View.elm
index 9468a04..753a120 100644
--- a/src/client/elm/LoggedIn/Home/Header/View.elm
+++ b/src/client/elm/LoggedIn/Home/Header/View.elm
@@ -8,6 +8,7 @@ import Html.Events exposing (..)
import Html.App as Html
import String
import Dict
+import Date
import Form exposing (Form)
import View.Form as Form
@@ -24,7 +25,8 @@ import Model.Conf exposing (Conf)
import Model.Payment as Payment exposing (Payments, Frequency(..))
import Model.Translations exposing (getMessage)
-import Dialog.AddPayment.View as AddPayment
+import Dialog.Model as DialogModel
+import Dialog.AddPaymentButton.View as AddPaymentButton
import LoggedIn.Home.View.ExceedingPayers as ExceedingPayers
import LoggedIn.View.Format as Format
@@ -43,11 +45,15 @@ view loggedData { search } payments frequency =
searchLine : LoggedData -> Form String Home.Search -> Frequency -> Html Msg
searchLine loggedData search frequency =
- Html.div
- [ class "searchLine" ]
- [ searchForm loggedData search
- , AddPayment.view loggedData frequency
- ]
+ let currentDate = Date.fromTime loggedData.currentTime
+ in Html.div
+ [ class "searchLine" ]
+ [ searchForm loggedData search
+ , AddPaymentButton.view
+ loggedData
+ (DialogModel.addPaymentInitial loggedData.translations currentDate frequency)
+ (text (getMessage "AddPayment" loggedData.translations))
+ ]
searchForm : LoggedData -> Form String Home.Search -> Html Msg
searchForm loggedData search =
diff --git a/src/client/elm/LoggedIn/Home/View/Table.elm b/src/client/elm/LoggedIn/Home/View/Table.elm
index 282f00a..d2087bb 100644
--- a/src/client/elm/LoggedIn/Home/View/Table.elm
+++ b/src/client/elm/LoggedIn/Home/View/Table.elm
@@ -29,6 +29,8 @@ import Model.Payment as Payment exposing (..)
import Model.Translations exposing (getMessage)
import Dialog
+import Dialog.Model as DialogModel
+import Dialog.AddPaymentButton.View as AddPaymentButton
view : LoggedData -> HomeModel.Model -> Payments -> Frequency -> Html Msg
view loggedData homeModel payments frequency =
@@ -61,6 +63,7 @@ headerLine loggedData frequency =
Punctual -> div [ class "cell date" ] [ text <| getMessage "Date" loggedData.translations ]
Monthly -> text ""
, div [ class "cell" ] []
+ , div [ class "cell" ] []
]
paymentLine : LoggedData -> HomeModel.Model -> Frequency -> Payment -> Html Msg
@@ -96,7 +99,15 @@ paymentLine loggedData homeModel frequency payment =
Monthly ->
text ""
, div
- [ class "cell delete" ]
+ [ class "cell button" ]
+ [ let currentDate = Date.fromTime loggedData.currentTime
+ in AddPaymentButton.view
+ loggedData
+ (DialogModel.clonePaymentInitial loggedData.translations currentDate payment)
+ (FontAwesome.clone Color.chestnutRose 18)
+ ]
+ , div
+ [ class "cell button" ]
[ if loggedData.me /= payment.userId
then
text ""
diff --git a/src/client/elm/Model/Payment.elm b/src/client/elm/Model/Payment.elm
index c89e709..7e5b37d 100644
--- a/src/client/elm/Model/Payment.elm
+++ b/src/client/elm/Model/Payment.elm
@@ -101,9 +101,14 @@ search : String -> Frequency -> Payments -> Payments
search name frequency payments =
payments
|> List.filter ((==) frequency << .frequency)
- |> List.sortBy (Date.toTime << .date)
+ |> paymentSort frequency
|> List.filter (searchSuccess name)
- |> List.reverse
+
+paymentSort : Frequency -> Payments -> Payments
+paymentSort frequency =
+ case frequency of
+ Punctual -> List.reverse << List.sortBy (Date.toTime << .date)
+ Monthly -> List.sortBy (String.toLower << .name)
searchSuccess : String -> Payment -> Bool
searchSuccess text { name } = (String.toLower text) `String.contains` (String.toLower name)
diff --git a/src/server/Design/LoggedIn/Home/Table.hs b/src/server/Design/LoggedIn/Home/Table.hs
index 0085e4a..23b924f 100644
--- a/src/server/Design/LoggedIn/Home/Table.hs
+++ b/src/server/Design/LoggedIn/Home/Table.hs
@@ -45,7 +45,7 @@ design = do
display tableCell
position relative
verticalAlign middle
- ".category" & width (pct 40)
+ ".category" & width (pct 37)
".cost" & do
width (pct 17)
".refund" & color Color.mossGreen
@@ -58,7 +58,7 @@ design = do
Media.desktop $ do
".shortDate" ? display none
".longDate" ? display inline
- ".delete" & do
+ ".cell.button" & do
position relative
width (pct 3)
textAlign (alignSide sideCenter)