From e10531ba4e60c8709088798763ae3bae6608f9c9 Mon Sep 17 00:00:00 2001 From: Joris Date: Sun, 6 Sep 2015 12:39:03 +0200 Subject: Show montly payments with an expandable mechanism --- src/client/Update/LoggedView.elm | 64 ++++++++++++++++++++++++++++++++ src/client/Update/LoggedView/Add.elm | 29 +++++++++++++++ src/client/Update/LoggedView/Monthly.elm | 19 ++++++++++ src/client/Update/Payment.elm | 53 -------------------------- src/client/Update/Payment/Add.elm | 29 --------------- 5 files changed, 112 insertions(+), 82 deletions(-) create mode 100644 src/client/Update/LoggedView.elm create mode 100644 src/client/Update/LoggedView/Add.elm create mode 100644 src/client/Update/LoggedView/Monthly.elm delete mode 100644 src/client/Update/Payment.elm delete mode 100644 src/client/Update/Payment/Add.elm (limited to 'src/client/Update') diff --git a/src/client/Update/LoggedView.elm b/src/client/Update/LoggedView.elm new file mode 100644 index 0000000..4a53ac4 --- /dev/null +++ b/src/client/Update/LoggedView.elm @@ -0,0 +1,64 @@ +module Update.LoggedView + ( LoggedAction(..) + , updateLoggedView + ) where + +import Date +import Dict + +import Model exposing (Model) +import Model.User exposing (UserId) +import Model.Payment exposing (..) +import Model.Payers exposing (..) +import Model.View.LoggedView exposing (..) +import Model.View.Payment.Add exposing (..) + +import Update.LoggedView.Add exposing (..) +import Update.LoggedView.Monthly exposing (..) + +type LoggedAction = + UpdateAdd AddPaymentAction + | UpdatePayments Payments + | AddPayment UserId PaymentId String Int Frequency Payments + | ToggleEdit PaymentId + | Remove UserId Int Payments + | UpdatePage Int Payments + | UpdateMonthly MonthlyAction + +updateLoggedView : Model -> LoggedAction -> LoggedView -> LoggedView +updateLoggedView model action loggedView = + case action of + UpdateAdd addPaymentAction -> + { loggedView | add <- updateAddPayment addPaymentAction loggedView.add } + UpdatePayments payments -> + { loggedView | payments <- payments } + AddPayment userId paymentId name cost frequency payments -> + { loggedView + | payments <- payments + , currentPage <- 1 + , add <- initAddPayment loggedView.add.frequency + , payers <- updatePayers loggedView.payers userId cost + , paymentsCount <- loggedView.paymentsCount + 1 + , monthly <- + if frequency == Monthly + then + let payment = Payment paymentId (Date.fromTime model.currentTime) name cost userId + in updateMonthly (AddMonthlyPayment payment) loggedView.monthly + else + loggedView.monthly + } + ToggleEdit id -> + { loggedView | paymentEdition <- if loggedView.paymentEdition == Just id then Nothing else Just id } + Remove userId cost payments -> + { loggedView + | payments <- payments + , payers <- updatePayers loggedView.payers userId -cost + , paymentsCount <- loggedView.paymentsCount - 1 + } + UpdatePage page payments -> + { loggedView + | currentPage <- page + , payments <- payments + } + UpdateMonthly monthlyAction -> + { loggedView | monthly <- updateMonthly monthlyAction loggedView.monthly } diff --git a/src/client/Update/LoggedView/Add.elm b/src/client/Update/LoggedView/Add.elm new file mode 100644 index 0000000..05c2c30 --- /dev/null +++ b/src/client/Update/LoggedView/Add.elm @@ -0,0 +1,29 @@ +module Update.LoggedView.Add + ( AddPaymentAction(..) + , updateAddPayment + ) where + +import Model.View.Payment.Add exposing (..) + +type AddPaymentAction = + UpdateName String + | UpdateCost String + | AddError (Maybe String) (Maybe String) + | ToggleFrequency + +updateAddPayment : AddPaymentAction -> AddPayment -> AddPayment +updateAddPayment action addPayment = + case action of + UpdateName name -> + { addPayment | name <- name } + UpdateCost cost -> + { addPayment | cost <- cost } + AddError nameError costError -> + { addPayment + | nameError <- nameError + , costError <- costError + } + ToggleFrequency -> + { addPayment + | frequency <- if addPayment.frequency == Punctual then Monthly else Punctual + } diff --git a/src/client/Update/LoggedView/Monthly.elm b/src/client/Update/LoggedView/Monthly.elm new file mode 100644 index 0000000..8d02c5e --- /dev/null +++ b/src/client/Update/LoggedView/Monthly.elm @@ -0,0 +1,19 @@ +module Update.LoggedView.Monthly + ( MonthlyAction(..) + , updateMonthly + ) where + +import Model.Payment exposing (Payment) +import Model.View.Payment.Monthly exposing (..) + +type MonthlyAction = + ToggleDetail + | AddMonthlyPayment Payment + +updateMonthly : MonthlyAction -> Monthly -> Monthly +updateMonthly action monthly = + case action of + ToggleDetail -> + { monthly | visibleDetail <- not monthly.visibleDetail } + AddMonthlyPayment payment -> + { monthly | payments <- payment :: monthly.payments } diff --git a/src/client/Update/Payment.elm b/src/client/Update/Payment.elm deleted file mode 100644 index 2cae679..0000000 --- a/src/client/Update/Payment.elm +++ /dev/null @@ -1,53 +0,0 @@ -module Update.Payment - ( PaymentAction(..) - , updatePayment - ) where - -import Date -import Dict - -import Model exposing (Model) -import Model.User exposing (UserId) -import Model.Payment exposing (..) -import Model.Payers exposing (..) -import Model.View.LoggedView exposing (..) -import Model.View.Payment.Add exposing (..) - -import Update.Payment.Add exposing (..) - -type PaymentAction = - UpdateAdd AddPaymentAction - | UpdatePayments Payments - | AddPayment UserId Int Payments - | ToggleEdit PaymentId - | Remove UserId Int Payments - | UpdatePage Int Payments - -updatePayment : Model -> PaymentAction -> LoggedView -> LoggedView -updatePayment model action loggedView = - case action of - UpdateAdd addPaymentAction -> - { loggedView | add <- updateAddPayment addPaymentAction loggedView.add } - UpdatePayments payments -> - { loggedView | payments <- payments } - AddPayment userId cost payments -> - { loggedView - | payments <- payments - , currentPage <- 1 - , add <- initAddPayment loggedView.add.frequency - , payers <- updatePayers loggedView.payers userId cost - , paymentsCount <- loggedView.paymentsCount + 1 - } - ToggleEdit id -> - { loggedView | edition <- if loggedView.edition == Just id then Nothing else Just id } - Remove userId cost payments -> - { loggedView - | payments <- payments - , payers <- updatePayers loggedView.payers userId -cost - , paymentsCount <- loggedView.paymentsCount - 1 - } - UpdatePage page payments -> - { loggedView - | currentPage <- page - , payments <- payments - } diff --git a/src/client/Update/Payment/Add.elm b/src/client/Update/Payment/Add.elm deleted file mode 100644 index 27f2af0..0000000 --- a/src/client/Update/Payment/Add.elm +++ /dev/null @@ -1,29 +0,0 @@ -module Update.Payment.Add - ( AddPaymentAction(..) - , updateAddPayment - ) where - -import Model.View.Payment.Add exposing (..) - -type AddPaymentAction = - UpdateName String - | UpdateCost String - | AddError (Maybe String) (Maybe String) - | ToggleFrequency - -updateAddPayment : AddPaymentAction -> AddPayment -> AddPayment -updateAddPayment action addPayment = - case action of - UpdateName name -> - { addPayment | name <- name } - UpdateCost cost -> - { addPayment | cost <- cost } - AddError nameError costError -> - { addPayment - | nameError <- nameError - , costError <- costError - } - ToggleFrequency -> - { addPayment - | frequency <- if addPayment.frequency == Punctual then Monthly else Punctual - } -- cgit v1.2.3