diff --git a/src/clj/auto_ap/datomic/invoices.clj b/src/clj/auto_ap/datomic/invoices.clj index e94e8bfa..dd3faab2 100644 --- a/src/clj/auto_ap/datomic/invoices.clj +++ b/src/clj/auto_ap/datomic/invoices.clj @@ -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))) diff --git a/src/clj/auto_ap/graphql.clj b/src/clj/auto_ap/graphql.clj index 18aea21e..c81bbb90 100644 --- a/src/clj/auto_ap/graphql.clj +++ b/src/clj/auto_ap/graphql.clj @@ -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)) + ))) diff --git a/src/clj/auto_ap/graphql/invoices.clj b/src/clj/auto_ap/graphql/invoices.clj index 567dec9a..7d46c361 100644 --- a/src/clj/auto_ap/graphql/invoices.clj +++ b/src/clj/auto_ap/graphql/invoices.clj @@ -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)))) diff --git a/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs b/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs index ce6ddfc7..01be6216 100644 --- a/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs +++ b/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs @@ -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