percentage-based splitting.

This commit is contained in:
Bryce Covert
2019-04-23 07:09:21 -07:00
parent 81a13bf2e0
commit 9f30c74619
6 changed files with 158 additions and 56 deletions

View File

@@ -6,7 +6,7 @@
[auto-ap.subs :as subs]
[auto-ap.views.components.dropdown :refer [drop-down]]
[auto-ap.views.components.typeahead :refer [typeahead]]
[auto-ap.views.components.expense-accounts-field :refer [expense-accounts-field]]
[auto-ap.views.components.expense-accounts-field :refer [expense-accounts-field recalculate-amounts]]
[auto-ap.views.pages.invoices.common :refer [invoice-read]]
[auto-ap.views.utils
:refer
@@ -104,7 +104,10 @@
(re-frame/reg-event-db
::adding
(fn [db [_ new]]
(-> db (forms/start-form ::form (assoc new :expense-accounts [{:amount 0 :id (str "new-" (random-uuid))}])))))
(-> db (forms/start-form ::form (assoc new :expense-accounts [{:amount 0
:id (str "new-" (random-uuid))
:amount-percentage 100
:amount-mode "%"}])))))
(re-frame/reg-event-db
::editing
@@ -113,16 +116,28 @@
edit-invoice (assoc edit-invoice :original edit-invoice)]
(-> db
(forms/start-form ::form {:id (:id edit-invoice)
:status (:status edit-invoice)
:date (:date edit-invoice)
:invoice-number (:invoice-number edit-invoice)
:total (:total edit-invoice)
:original edit-invoice
:vendor-id (:id (:vendor edit-invoice))
:vendor-name (:name (:vendor edit-invoice))
:client-id (:id (:client edit-invoice))
:expense-accounts (:expense-accounts edit-invoice)
:client-name (:name (:client edit-invoice))})))))
:status (:status edit-invoice)
:date (:date edit-invoice)
:invoice-number (:invoice-number edit-invoice)
:total (:total edit-invoice)
:original edit-invoice
:vendor-id (:id (:vendor edit-invoice))
:vendor-name (:name (:vendor edit-invoice))
:client-id (:id (:client edit-invoice))
:expense-accounts (if (seq (:expense-accounts which))
(vec (map
(fn [a]
(-> a
(update :amount #(js/parseFloat %))
(assoc :amount-percentage (* 100 (/ (js/parseFloat (:amount a))
(Math/abs (js/parseFloat (:total which))))))
(assoc :amount-mode "%")))
(:expense-accounts edit-invoice)))
[{:id (str "new-" (random-uuid))
:amount-mode "$"
:amount (Math/abs (:total edit-invoice))
:amount-percentage 100}])
:client-name (:name (:client edit-invoice))})))))
(re-frame/reg-event-fx
@@ -135,6 +150,15 @@
[:client-id] value
[:location] first-location]})))
(re-frame/reg-event-fx
::change-amount
[(forms/in-form ::form)]
(fn [{{:keys [data]} :db} [_ field value]]
(print field value (:expense-accounts data))
{:dispatch [::forms/change ::form
field value
[:expense-accounts] (recalculate-amounts (:expense-accounts data) value)]}))
(re-frame/reg-event-fx
::change-vendor
[(forms/in-form ::form)]
@@ -148,6 +172,8 @@
field value
[:expense-accounts] [{:id (str "new-" (random-uuid))
:amount (:total data)
:amount-percentage 100
:amount-mode "%"
:account @(re-frame/subscribe [::subs/vendor-default-account value])}]]}
{:dispatch [::forms/change ::form
field value]}))))
@@ -284,7 +310,7 @@
[:input.input {:type "number"
:field [:total]
:disabled (if can-change-amount? "" "disabled")
:event change-event
:event [::change-amount]
:min min-total
:subscription data
:spec ::invoice/total
@@ -297,7 +323,7 @@
:descriptor "expense account"
:event change-event
:locations locations
:max-value (:total data)
:max (:total data)
:field [:expense-accounts]}]]]