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]
(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
(mc/schema
[:and
@@ -99,8 +105,7 @@
[:autopay-invoice-ids {:decode/string (fn [x] (edn/read-string x))} [:vector {:coerce? true} entity-id]]]]
[:link-payment [:map
[: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]
@@ -253,11 +258,6 @@
(defn 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]
mm/ModalWizardStep
(step-name [_]
@@ -1058,8 +1058,8 @@
(exception->4xx #(assert-can-see-client (:identity request) client-id))
(exception->4xx #(assert-not-locked client-id (:transaction/date existing-tx)))
(when (and (= :approved (keyword (:transaction/approval-status tx-data)))
(not (seq (:transaction/accounts tx-data))))
(when (and (= :transaction-approval-status/approved (keyword (:transaction/approval-status tx-data)))
(not (seq (:transaction/accounts tx-data))))
(throw (ex-info "Approved transactions must have accounts assigned."
{:validation-error "Approved transactions must have accounts assigned."})))