Complete expense-account field

This commit is contained in:
Bryce Covert
2019-04-17 09:34:08 -07:00
parent b3e407d211
commit 30a6ac99c9
2 changed files with 40 additions and 53 deletions

View File

@@ -51,6 +51,12 @@
:invoice/client client_id}))
(throw (ex-info (str "Invoice '" invoice_number "' already exists.") {:invoice-number invoice_number :validation-error (str "Invoice '" invoice_number "' already exists.")}))))
(defn expense-account->entity [{:keys [id account_id amount location]}]
(remove-nils #:invoice-expense-account {:amount (Double/parseDouble amount)
:db/id id
:account account_id
:location location}))
(defn add-invoice-transaction [{:keys [total invoice_number location client_id vendor_id vendor_name date expense_accounts] :as in}]
(let [vendor (d-vendors/get-by-id vendor_id)
account (:vendor/default-account vendor)
@@ -65,13 +71,22 @@
:invoice/outstanding-balance total
:invoice/status :invoice-status/unpaid
:invoice/date (coerce/to-date date)
:invoice/expense-accounts (map (fn [ea]
(remove-nils {:db/id (:id ea)
:invoice-expense-account/account (:account_id ea)
:invoice-expense-account/location (:location ea)
:invoice-expense-account/amount (Double/parseDouble (:amount ea))}))
:invoice/expense-accounts (map expense-account->entity
expense_accounts)}))
(defn deleted-expense-accounts [invoice expense-accounts]
(let [current-expense-accounts (:invoice/expense-accounts invoice)
specified-ids (->> expense-accounts
(map :id)
set)
existing-ids (->> current-expense-accounts
(map :db/id)
set)]
(set/difference existing-ids specified-ids)))
(defn add-invoice [context {{:keys [total invoice_number location client_id vendor_id vendor_name date] :as in} :invoice} value]
(assert-no-conflicting in)
(assert-can-see-client (:id context) client_id)
@@ -97,10 +112,7 @@
(defn edit-invoice [context {{:keys [id invoice_number total vendor_id date client_id expense_accounts] :as in} :invoice} value]
(let [invoice (d-invoices/get-by-id id)
_ (when (seq (doto (d-invoices/find-conflicting {:db/id id
:invoice/invoice-number invoice_number
:invoice/vendor (:db/id (:invoice/vendor invoice))
@@ -114,18 +126,18 @@
(throw (ex-info error {:validation-error error}))))
paid-amount (- (:invoice/total invoice) (:invoice/outstanding-balance invoice))
_ (assert-can-see-client (:id context) (:db/id (:invoice/client invoice)))
updated-invoice (d-invoices/update {:db/id id
:invoice/invoice-number invoice_number
:invoice/date (coerce/to-date (parse date iso-date))
:invoice/total total
:invoice/outstanding-balance (- total paid-amount)
:invoice/expense-accounts (map (fn [ea]
(remove-nils {:db/id (:id ea)
:invoice-expense-account/location (:location ea)
:invoice-expense-account/account (:account_id ea)
:invoice-expense-account/amount (Double/parseDouble (:amount ea))}))
expense_accounts)})]
(-> updated-invoice
deleted (deleted-expense-accounts invoice expense_accounts)
updated-invoice {:db/id id
:invoice/invoice-number invoice_number
:invoice/date (coerce/to-date (parse date iso-date))
:invoice/total total
:invoice/outstanding-balance (- total paid-amount)
:invoice/expense-accounts (map expense-account->entity
expense_accounts)}]
@(d/transact (d/connect uri) (concat [updated-invoice]
(map (fn [d] [:db/retract id :invoice/expense-accounts d]) deleted)))
(-> (d-invoices/get-by-id id)
(->graphql))))
(defn void-invoice [context {id :invoice_id} value]
@@ -173,42 +185,18 @@
(-> (d-invoices/get-by-id id)
(->graphql))))
(defn edit-expense-accounts [context args value]
;; TODO - Can expense account id be used as a unique field? It may compose with component, meaning
;; that you don't have to figure out which ones to delete and which ones to add. Just set to 0.
(assert-can-see-client (:id context) (:db/id (:invoice/client (d-invoices/get-by-id (:invoice_id args)))))
(let [current-expense-accounts (:invoice/expense-accounts (d-invoices/get-by-id (:invoice_id args)))
invoice-id (:invoice_id args)
(let [invoice-id (:invoice_id args)
invoice (d-invoices/get-by-id invoice-id)
deleted (deleted-expense-accounts invoice (:expense_accounts args))
updated {:db/id invoice-id
:invoice/expense-accounts (map
expense-account->entity
(:expense_accounts args))}]
specified-ids (->> (:expense_accounts args)
(map :id)
set)
existing-ids (->> current-expense-accounts
(map :db/id)
set)
deleted (set/difference existing-ids specified-ids)
updated (map
(fn [{:keys [id account_id amount location]}]
{:db/id invoice-id
:invoice/expense-accounts [#:invoice-expense-account {
:amount (Double/parseDouble amount)
:db/id id
:account account_id
:location location}
]}
)
(:expense_accounts args))]
@(d/transact (d/connect uri) (concat updated
@(d/transact (d/connect uri) (concat [updated]
(map (fn [d] [:db/retract invoice-id :invoice/expense-accounts d])deleted)))
(->graphql
(d-invoices/get-by-id (:invoice_id args)))))

View File

@@ -24,7 +24,6 @@
::can-submit-edit-invoice
:<- [::forms/form ::form]
(fn [{:keys [data status]} _]
(println (s/explain-data ::invoice/invoice data))
(let [min-total (if (= (:total (:original data)) (:outstanding-balance (:original data)))
nil
(- (:total (:original data)) (:outstanding-balance (:original data))))]