makes check voiding work correctly
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
(ns auto-ap.graphql.checks
|
||||
(:require [auto-ap.graphql.utils :refer [->graphql <-graphql assert-can-see-company]]
|
||||
[datomic.api :as d]
|
||||
|
||||
[com.walmartlabs.lacinia :refer [execute]]
|
||||
[com.walmartlabs.lacinia.executor :as executor]
|
||||
@@ -9,6 +10,7 @@
|
||||
[auto-ap.datomic.checks :as d-checks]
|
||||
[auto-ap.db.vendors :as vendors]
|
||||
[auto-ap.db.invoices :as invoices]
|
||||
[auto-ap.datomic :refer [uri]]
|
||||
[auto-ap.utils :refer [by]]
|
||||
[auto-ap.db.companies :as companies]
|
||||
[auto-ap.time :refer [parse normal-date iso-date]]))
|
||||
@@ -49,27 +51,27 @@
|
||||
:invoices [(invoices/get-by-id (:invoice_id args))]})))
|
||||
|
||||
|
||||
(defn void-check [context {id :check_id} value]
|
||||
(let [check (checks/get-by-id id)
|
||||
invoices-checks (invoices-checks/get-by-check-id id)]
|
||||
(assert (or (= "pending" (:status check))
|
||||
(#{"cash" "debit"} (:type check))))
|
||||
|
||||
(defn void-check [context {id :payment_id} value]
|
||||
(let [check (d-checks/get-by-id id)]
|
||||
(assert (or (= :payment-status/pending (:payment/status check))
|
||||
(#{:payment-type/cash :payment-type/debit} (:payment/type check))))
|
||||
(assert-can-see-company (:id context) (:company-id check))
|
||||
(doseq [ci invoices-checks
|
||||
:let [{:keys [outstanding-balance status] :as invoice invoice-id :id} (invoices/get-by-id (:invoice-id ci))
|
||||
new-balance (+ outstanding-balance (:amount ci))
|
||||
updated-invoice {:id invoice-id
|
||||
:outstanding-balance new-balance
|
||||
:status (if (> new-balance 0)
|
||||
"unpaid"
|
||||
status)}] ]
|
||||
(println updated-invoice)
|
||||
(invoices-checks/delete! (:id ci))
|
||||
(invoices/update updated-invoice))
|
||||
(let [removing-payments (mapcat (fn [x]
|
||||
(let [invoice (:invoice-payment/invoice x)
|
||||
new-balance (+ (:invoice/outstanding-balance invoice)
|
||||
(:invoice-payment/amount x))]
|
||||
[[:db.fn/retractEntity (:db/id x)]
|
||||
{:db/id (:db/id invoice)
|
||||
:invoice/outstanding-balance new-balance
|
||||
:invoice/status (if (> new-balance 0)
|
||||
:invoice-status/unpaid
|
||||
(:invoice/status invoice))}]))
|
||||
(:payment/invoices check))
|
||||
updated-payment {:db/id (Long/parseLong id)
|
||||
:payment/amount 0.0
|
||||
:payment/status :payment-status/voided}]
|
||||
|
||||
@(d/transact (d/connect uri) (conj removing-payments updated-payment)))
|
||||
|
||||
(checks/update! {:id id
|
||||
:amount 0
|
||||
:status "voided"})
|
||||
(-> (checks/get-by-id id)
|
||||
(-> (d-checks/get-by-id id)
|
||||
(->graphql))))
|
||||
|
||||
Reference in New Issue
Block a user