only one way to change invoices -> datomic!
This commit is contained in:
@@ -97,12 +97,17 @@
|
||||
)
|
||||
(<-datomic)))
|
||||
|
||||
(defn find-conflicting [{:keys [:invoice/invoice-number :invoice/vendor :invoice/client]}]
|
||||
(->> (d/query
|
||||
(cond-> {:query {:find [default-read]
|
||||
:in ['$ '?invoice-number '?vendor '?client]
|
||||
:where ['[?e :invoice/invoice-number ?invoice-number]
|
||||
'[?e :invoice/vendor ?vendor]
|
||||
'[?e :invoice/client ?client]]}
|
||||
:args [(d/db (d/connect uri)) invoice-number (Long/parseLong vendor) (Long/parseLong client)]}))
|
||||
(defn find-conflicting [{:keys [:invoice/invoice-number :invoice/vendor :invoice/client :db/id]}]
|
||||
(println invoice-number vendor client id)
|
||||
(->> (doto (d/query
|
||||
(cond-> {:query {:find [default-read]
|
||||
:in ['$ '?invoice-number '?vendor '?client '?invoice-id]
|
||||
:where '[[?e :invoice/invoice-number ?invoice-number]
|
||||
[?e :invoice/vendor ?vendor]
|
||||
[?e :invoice/client ?client]
|
||||
[(not= ?e ?invoice-id)]]}
|
||||
:args [(d/db (d/connect uri)) invoice-number vendor client id]}))
|
||||
println)
|
||||
(map first)
|
||||
|
||||
(<-datomic)))
|
||||
|
||||
@@ -288,7 +288,7 @@
|
||||
:total {:type 'Float}}}
|
||||
|
||||
:edit_invoice
|
||||
{:fields {:id {:type 'Int}
|
||||
{:fields {:id {:type 'String}
|
||||
:invoice_number {:type 'String}
|
||||
:date {:type 'String}
|
||||
:total {:type 'Float}}}}
|
||||
@@ -527,4 +527,9 @@
|
||||
(query id q nil ))
|
||||
([id q v]
|
||||
(println "executing graphql query" id q v)
|
||||
(time (simplify (execute schema q v {:id id})))))
|
||||
(try
|
||||
(time (simplify (execute schema q v {:id id})))
|
||||
(catch Exception e
|
||||
(println e)
|
||||
(throw e))
|
||||
)))
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
(ns auto-ap.graphql.invoices
|
||||
(:require [auto-ap.graphql.utils :refer [->graphql assert-can-see-company]]
|
||||
[auto-ap.db.invoices :as invoices]
|
||||
|
||||
[auto-ap.db.vendors :as vendors]
|
||||
[auto-ap.datomic.vendors :as d-vendors]
|
||||
[auto-ap.datomic.invoices :as d-invoices]
|
||||
@@ -20,8 +20,8 @@
|
||||
|
||||
(defn add-invoice [context {{:keys [total invoice_number location client_id vendor_id vendor_name date] :as in} :invoice} value]
|
||||
(when (seq (d-invoices/find-conflicting {:invoice/invoice-number invoice_number
|
||||
:invoice/vendor vendor_id
|
||||
:invoice/client client_id}))
|
||||
:invoice/vendor (Long/parseLong vendor_id)
|
||||
:invoice/client (Long/parseLong client_id)}))
|
||||
(throw (ex-info (str "Invoice '" invoice_number "' already exists.") {:invoice-number invoice_number})))
|
||||
(let [_ (assert-can-see-company (:id context) client_id)
|
||||
vendor (d-vendors/get-by-id vendor_id)
|
||||
@@ -48,19 +48,24 @@
|
||||
(->graphql))))
|
||||
|
||||
|
||||
(defn edit-invoice [context {{:keys [id invoice_number vendor_id company_id] :as in} :invoice} value]
|
||||
(defn edit-invoice [context {{:keys [id invoice_number total vendor_id date company_id] :as in} :invoice} value]
|
||||
|
||||
(let [invoice (invoices/get-by-id id)
|
||||
_ (when (seq (invoices/find-conflicting {:id id
|
||||
:invoice-number invoice_number
|
||||
:vendor-id (:vendor-id invoice)
|
||||
:company-id (:company-id invoice)}))
|
||||
|
||||
(let [invoice (d-invoices/get-by-id id)
|
||||
|
||||
_ (when (seq (doto (d-invoices/find-conflicting {:db/id (Long/parseLong id)
|
||||
:invoice/invoice-number invoice_number
|
||||
:invoice/vendor (:db/id (:invoice/vendor invoice))
|
||||
:invoice/client (:db/id (:invoice/client invoice))})
|
||||
println))
|
||||
(throw (ex-info (str "Invoice '" invoice_number "' already exists.") {:invoice-number invoice_number})))
|
||||
paid-amount (- (:total invoice) (:outstanding-balance invoice))
|
||||
_ (assert-can-see-company (:id context) (:company-id invoice))
|
||||
updated-invoice (invoices/update (-> in
|
||||
(update :date parse iso-date)
|
||||
(assoc :outstanding-balance (- (:total in) paid-amount))))]
|
||||
paid-amount (- (:invoice/total invoice) (:invoice/outstanding-balance invoice))
|
||||
_ (assert-can-see-company (:id context) (:db/id (:client invoice)))
|
||||
updated-invoice (d-invoices/update {:db/id (Long/parseLong id)
|
||||
:invoice/invoice-number invoice_number
|
||||
:invoice/date (coerce/to-date (parse date iso-date))
|
||||
:invoice/total total
|
||||
:invoice/outstanding-balance (- total paid-amount)})]
|
||||
(-> updated-invoice
|
||||
(->graphql))))
|
||||
|
||||
|
||||
@@ -289,7 +289,7 @@
|
||||
:venia/queries [{:query/data [:edit-invoice
|
||||
{:invoice {:id id :invoice-number invoice-number :date date :total total}}
|
||||
[:id :total :outstanding-balance :date :invoice-number
|
||||
[:company [:id :name :locations]]
|
||||
[:client [:id :name :locations]]
|
||||
[:vendor [:id :name]]
|
||||
[:expense_accounts [:amount :id :expense_account_id
|
||||
:location
|
||||
|
||||
Reference in New Issue
Block a user