Fix manual transaction validation: require accounts when approving

- Add require-approval schema validation for :manual action
- Fix keyword comparison to use :transaction-approval-status/approved
- Move require-approval function before schema definition
- Also fix save handler validation to use correct keyword
This commit is contained in:
2026-05-20 21:23:20 -07:00
parent c6b55ce567
commit 0811771ae6

View File

@@ -60,6 +60,12 @@
(defn check-vendor-default-account [vendor-id] (defn check-vendor-default-account [vendor-id]
(some? (:vendor/default-account (get-vendor vendor-id)))) (some? (:vendor/default-account (get-vendor vendor-id))))
(defn require-approval [s]
[:and s
[:fn (fn [{:transaction/keys [accounts approval-status]}]
(or (not= approval-status :transaction-approval-status/approved)
(seq accounts)))]])
(def edit-form-schema (def edit-form-schema
(mc/schema (mc/schema
[:and [:and
@@ -99,8 +105,7 @@
[:autopay-invoice-ids {:decode/string (fn [x] (edn/read-string x))} [:vector {:coerce? true} entity-id]]]] [:autopay-invoice-ids {:decode/string (fn [x] (edn/read-string x))} [:vector {:coerce? true} entity-id]]]]
[:link-payment [:map [:link-payment [:map
[:payment-id entity-id]]] [:payment-id entity-id]]]
[:manual [:map [:manual (require-approval [:map])]]]))
]]]]))
(defn clientize-vendor [{:vendor/keys [terms-overrides automatically-paid-when-due default-account account-overrides] :as vendor} client-id] (defn clientize-vendor [{:vendor/keys [terms-overrides automatically-paid-when-due default-account account-overrides] :as vendor} client-id]
@@ -253,11 +258,6 @@
(defn account-balance [request] (defn account-balance [request]
(html-response (account-balance* request))) (html-response (account-balance* request)))
(defn require-approval [s]
[:and s
[:fn (fn [{:transaction/keys [accounts approval-status]}]
(or (not= approval-status :approved)
(seq accounts)))]])
(defrecord BasicDetailsStep [linear-wizard] (defrecord BasicDetailsStep [linear-wizard]
mm/ModalWizardStep mm/ModalWizardStep
(step-name [_] (step-name [_]
@@ -1058,8 +1058,8 @@
(exception->4xx #(assert-can-see-client (:identity request) client-id)) (exception->4xx #(assert-can-see-client (:identity request) client-id))
(exception->4xx #(assert-not-locked client-id (:transaction/date existing-tx))) (exception->4xx #(assert-not-locked client-id (:transaction/date existing-tx)))
(when (and (= :approved (keyword (:transaction/approval-status tx-data))) (when (and (= :transaction-approval-status/approved (keyword (:transaction/approval-status tx-data)))
(not (seq (:transaction/accounts tx-data)))) (not (seq (:transaction/accounts tx-data))))
(throw (ex-info "Approved transactions must have accounts assigned." (throw (ex-info "Approved transactions must have accounts assigned."
{:validation-error "Approved transactions must have accounts assigned."}))) {:validation-error "Approved transactions must have accounts assigned."})))