cash payments add transactions

This commit is contained in:
2022-02-16 08:19:25 -08:00
parent 286c300dd0
commit 85a47ee54d
2 changed files with 38 additions and 19 deletions

View File

@@ -2,6 +2,7 @@
(:require
[amazonica.aws.s3 :as s3]
[auto-ap.datomic :refer [audit-transact remove-nils]]
[auto-ap.datomic.accounts :as a]
[auto-ap.datomic.bank-accounts :as d-bank-accounts]
[auto-ap.datomic.checks :as d-checks]
[auto-ap.datomic.clients :as d-clients]
@@ -22,7 +23,8 @@
[clojure.set :as set]
[clojure.string :as str]
[com.walmartlabs.lacinia.util :refer [attach-resolvers]]
[config.core :refer [env]])
[config.core :refer [env]]
[digest])
(:import
(java.io ByteArrayOutputStream)
(java.text DecimalFormat)
@@ -203,8 +205,7 @@
:content-type "application/pdf"})
(str "http://" (:data-bucket env) ".s3-website-us-east-1.amazonaws.com/merged-checks/" uuid ".pdf")))
#_{:clj-kondo/ignore [:unused-binding]}
(defmulti invoices->entities (fn [invoices vendor-id client bank-account type index invoice-amounts]
type))
(defn invoice-payments [invoices invoice-amounts]
@@ -216,7 +217,7 @@
[:pay (:db/id invoice) invoice-amount]])
(reduce into [])))
(defn base-payment [invoices vendor client bank-account type index invoice-amounts]
(defn base-payment [invoices vendor client bank-account _ _ invoice-amounts]
{:db/id (str (:db/id vendor))
:payment/bank-account (:db/id bank-account)
:payment/amount (reduce + 0 (map (comp invoice-amounts :db/id) invoices))
@@ -315,16 +316,34 @@
0.001)
(throw (ex-info "The selected invoices do not have an outstanding balance."
{:validation-error "The selected invoices do not have an outstanding balance."})))
(let [payment (assoc (base-payment invoices vendor client bank-account type index invoice-amounts)
(let [base-payment (base-payment invoices vendor client bank-account type index invoice-amounts)
transaction-id (str (UUID/randomUUID))
memo (str "Cash Invoice #'s: "
(str/join ", "
(map (fn [i]
(str (:invoice/invoice-number i) "(" (invoice-amounts (:db/id i)) ")"))
invoices)))
payment (assoc base-payment
:payment/type :payment-type/cash
:payment/memo (str "Cash Invoice #'s: "
(str/join ", "
(map (fn [i]
(str (:invoice/invoice-number i) "(" (invoice-amounts (:db/id i)) ")"))
invoices)))
:payment/status :payment-status/cleared)]
:payment/memo memo
:payment/status :payment-status/cleared)
transaction {:db/id (str "transaction-" (:db/id vendor))
:transaction/amount (:payment/amount base-payment)
:transaction/payment (str (:db/id vendor))
:transaction/client (:db/id client)
:transaction/bank-account (:db/id bank-account)
:transaction/id #_{:clj-kondo/ignore [:unresolved-var]} (digest/sha-256 transaction-id)
:transaction/raw-id transaction-id
:transaction/vendor (:db/id vendor)
:transaction/description-original memo
:transaction/date (:payment/date base-payment)
:transaction/approval-status :transaction-approval-status/approved
:transaction/accounts [{:transaction-account/account (:db/id (a/get-account-by-numeric-code-and-sets 21000 ["default"]))
:transaction-account/location "A"
:transaction-account/amount (Math/abs (:payment/amount base-payment))}]}]
(-> []
(conj payment)
(conj transaction)
(into (invoice-payments invoices invoice-amounts)))))
(defn validate-belonging [client-id invoices bank-account]
@@ -373,7 +392,7 @@
(merge-pdfs (filter identity (map :payment/s3-key checks)))
nil)}))
(defn get-payment-page [context args value]
(defn get-payment-page [context args _]
(let [args (assoc args :id (:id context))
[payments checks-count] (d-checks/get-graphql (-> args
(<-graphql)
@@ -393,16 +412,16 @@
:start (:start args 0)
:end (+ (:start args 0) (count payments))}]))
(defn get-potential-payments [context args value]
(defn get-potential-payments [context args _]
(let [transaction (d-transactions/get-by-id (:transaction_id args))
_ (assert-can-see-client (:id context) (:transaction/client transaction))
[payments payments-count] (d-checks/get-graphql {:client-id (:db/id (:transaction/client transaction))
[payments _] (d-checks/get-graphql {:client-id (:db/id (:transaction/client transaction))
:bank-account-id (:db/id (:transaction/bank-account transaction))
:amount (- (:transaction/amount transaction))
:status :payment-status/pending})]
(map ->graphql payments)))
(defn add-handwritten-check [context args value]
(defn add-handwritten-check [context args _]
(let [invoices (d-invoices/get-multi (map :invoice_id (:invoice_payments args)))
bank-account-id (:bank_account_id args)
bank-account (d-bank-accounts/get-by-id bank-account-id)
@@ -431,7 +450,7 @@
:invoices (d-invoices/get-multi (map :invoice_id (:invoice_payments args)))})))
(defn void-check [context {id :payment_id} value]
(defn void-check [context {id :payment_id} _]
(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))))
@@ -457,13 +476,13 @@
(-> (d-checks/get-by-id id)
(->graphql))))
(defn get-all-payments [context args value]
(defn get-all-payments [context args _]
(assert-admin (:id context))
(map
->graphql
(first (d-checks/get-graphql (assoc (<-graphql args) :count Integer/MAX_VALUE)))))
(defn print-checks [context args value]
(defn print-checks [context args _]
(assert-can-see-client (:id context) (:client_id args))
(->graphql

View File

@@ -92,5 +92,5 @@
:stop (scheduler/stop import-worker))
(mount/defstate account-worker
:start (scheduler/every (* 1000 60 60 24) upsert-accounts)
:start (scheduler/every (* 1000 60 30) upsert-accounts)
:stop (scheduler/stop account-worker))