diff --git a/src/clj/auto_ap/graphql/checks.clj b/src/clj/auto_ap/graphql/checks.clj index 2dcedcbb..11afb057 100644 --- a/src/clj/auto_ap/graphql/checks.clj +++ b/src/clj/auto_ap/graphql/checks.clj @@ -328,9 +328,10 @@ :payment/memo memo :payment/status :payment-status/cleared) transaction {:db/id (str "transaction-" (:db/id vendor)) - :transaction/amount (:payment/amount base-payment) + :transaction/amount (- (:payment/amount base-payment)) :transaction/payment (str (:db/id vendor)) :transaction/client (:db/id client) + :transaction/status "POSTED" :transaction/bank-account (:db/id bank-account) :transaction/id #_{:clj-kondo/ignore [:unresolved-var]} (digest/sha-256 transaction-id) :transaction/raw-id transaction-id diff --git a/src/clj/auto_ap/routes/invoices.clj b/src/clj/auto_ap/routes/invoices.clj index 8f542624..a50d06dd 100644 --- a/src/clj/auto_ap/routes/invoices.clj +++ b/src/clj/auto_ap/routes/invoices.clj @@ -1,7 +1,8 @@ (ns auto-ap.routes.invoices - (:require [auto-ap.datomic :refer [remove-nils uri]] + (:require [auto-ap.datomic :refer [remove-nils uri conn]] [auto-ap.datomic.clients :as d-clients] [auto-ap.datomic.invoices :as d-invoices] + [auto-ap.datomic.accounts :as a] [auto-ap.datomic.vendors :as d-vendors] [auto-ap.graphql.utils :refer [assert-admin assert-can-see-client]] [auto-ap.import.manual :as manual] @@ -19,7 +20,8 @@ [ring.middleware.json :refer [wrap-json-response]] [unilog.context :as lc] [amazonica.aws.s3 :as s3] - [config.core :refer [env]]) + [config.core :refer [env]] + [digest]) (:import java.util.UUID)) (defn reset-id [i] @@ -184,7 +186,9 @@ (defn invoice-rows->transaction [rows user] (->> rows (mapcat (fn [{:keys [vendor-id total client-id date invoice-number default-location check automatically-paid-when-due]}] - (let [invoice #:invoice {:db/id (.toString (java.util.UUID/randomUUID)) + (let [payment-id (.toString (java.util.UUID/randomUUID)) + transaction-id (.toString (java.util.UUID/randomUUID)) + invoice #:invoice {:db/id (.toString (java.util.UUID/randomUUID)) :vendor vendor-id :client client-id :default-location default-location @@ -203,16 +207,39 @@ payment (when (= :invoice-status/paid (:invoice/status invoice)) #:invoice-payment {:invoice (:db/id invoice) :amount (:invoice/total invoice) - :payment (remove-nils #:payment {:db/id (.toString (java.util.UUID/randomUUID)) + :payment (remove-nils #:payment {:db/id payment-id :vendor (:invoice/vendor invoice) :client (:invoice/client invoice) :type :payment-type/cash :amount (:invoice/total invoice) :status :payment-status/cleared - :date (:invoice/date invoice)})})] + :date (:invoice/date invoice)})}) + transaction (when (= :invoice-status/paid (:invoice/status invoice)) + (let [[bank-account] (d/q '[:find [?ba ...] + :in $ ?c + :where [?c :client/bank-accounts ?ba] + [?ba :bank-account/type :bank-account-type/cash] + ] + (d/db conn))] + #:transaction {:amount (- (:invoice/total invoice)) + :payment payment-id + :client (:invoice/client invoice) + :status "POSTED" + :bank-account bank-account + :id #_ {:clj-kondo/ignore [:unresolved-var]} (digest/sha-256 transaction-id) + :raw-id transaction-id + :vendor (:invoice/vendor invoice) + :description-original "Cash payment" + :date date + :approval-status :transaction-approval-status/approved + :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 (:invoice/total invoice))}]})) + ] [[:propose-invoice (d-invoices/code-invoice (validate-invoice (remove-nils invoice) user))] - (some-> payment remove-nils)]))) + (some-> payment remove-nils) + transaction]))) (filter identity))) (defn admin-only-if-multiple-clients [is]