From baef2afc63f49b8b3a8fb676ca1651ff03bfcee0 Mon Sep 17 00:00:00 2001 From: Bryce Date: Mon, 18 May 2026 16:21:07 -0700 Subject: [PATCH] fixes --- src/clj/auto_ap/ssr/pos/sales_summaries.clj | 214 ++++++++++---------- 1 file changed, 107 insertions(+), 107 deletions(-) diff --git a/src/clj/auto_ap/ssr/pos/sales_summaries.clj b/src/clj/auto_ap/ssr/pos/sales_summaries.clj index 9e863afe..3581634d 100644 --- a/src/clj/auto_ap/ssr/pos/sales_summaries.clj +++ b/src/clj/auto_ap/ssr/pos/sales_summaries.clj @@ -133,6 +133,19 @@ (str (subs s 0 (- max-len 3)) "...") s)) +(defn account-typeahead* + [{:keys [name value client-id]}] + [:div.flex.flex-col + (com/typeahead {:name name + :placeholder "Search..." + :url (hu/url (bidi/path-for ssr-routes/only-routes :account-search) + {:client-id client-id + :purpose "invoice"}) + :value value + :content-fn (fn [value] + (:account/name (d-accounts/clientize (dc/pull (dc/db conn) d-accounts/default-read value) + client-id)))})]) + (defn account-display-cell [{:keys [item field-name-prefix client-id]}] (let [account-id (:ledger-mapped/account item) account-name (when account-id @@ -140,7 +153,7 @@ client-id)))] [:div.account-cell.flex.items-center.gap-2 (com/hidden {:name (str field-name-prefix "[ledger-mapped/account]") - :value (or account-id "")}) + :value (or account-id "")}) (if account-id [:span.text-sm account-name] (com/pill {:color :red} "Missing acct")) @@ -157,22 +170,22 @@ [:div.account-cell.flex.flex-col.gap-2 (account-typeahead* {:name account-input-name :value current-account-id - :client-id client-id}) - [:div.flex.gap-1 - (com/a-icon-button {:hx-put (bidi/path-for ssr-routes/only-routes ::route/save-item-account) - :hx-target "closest .account-cell" - :hx-swap "outerHTML" - :hx-include "closest .account-cell" - :hx-vals (hx/json {:field-name-prefix field-name-prefix - :client-id client-id})} - svg/check) - (com/a-icon-button {:hx-get (bidi/path-for ssr-routes/only-routes ::route/cancel-item-account) - :hx-target "closest .account-cell" - :hx-swap "outerHTML" - :hx-vals (hx/json {:field-name-prefix field-name-prefix - :client-id client-id - :current-account-id (or current-account-id "")})} - svg/x)]])) + :client-id client-id} + [:div.flex.gap-1 + (com/a-icon-button {:hx-put (bidi/path-for ssr-routes/only-routes ::route/save-item-account) + :hx-target "closest .account-cell" + :hx-swap "outerHTML" + :hx-include "closest .account-cell"} + :hx-vals (hx/json {:field-name-prefix field-name-prefix + :client-id client-id}) + svg/check) + (com/a-icon-button {:hx-get (bidi/path-for ssr-routes/only-routes ::route/cancel-item-account) + :hx-target "closest .account-cell" + :hx-swap "outerHTML" + :hx-vals (hx/json {:field-name-prefix field-name-prefix} + :client-id client-id + :current-account-id (or current-account-id ""))} + svg/x)])])) (def grid-page (helper/build {:id "entity-table" @@ -401,19 +414,19 @@ :step-params :sales-summary/items (total-debits))] - [:div.flex.justify-between.text-sm.py-1.border-t.mt-1 - {:id "total-display"} - [:span.font-semibold "Total"] - [:div.flex.gap-8 - [:span.font-mono (format "$%,.2f" total-debits)] - [:span.font-mono (format "$%,.2f" total-credits)]]])) + [:div.flex.justify-between.text-sm.py-1.border-t.mt-1 + {:id "total-display"}] + [:span.font-semibold "Total"] + [:div.flex.gap-8 + [:span.font-mono (format "$%,.2f" total-debits)] + [:span.font-mono (format "$%,.2f" total-credits)]])) (defn unbalanced-display [request] (let [total-credits (-> request - :multi-form-state - :step-params - :sales-summary/items - (total-credits)) + :multi-form-state + :step-params + :sales-summary/items + (total-credits)) total-debits (-> request :multi-form-state :step-params @@ -422,24 +435,11 @@ delta (- total-debits total-credits)] (when-not (dollars-0? delta) [:div.flex.justify-between.text-sm.py-1 - {:id "unbalanced-display"} + {:id "unbalanced-display"} [:span.font-semibold.text-red-600 "Unbalanced"] [:div.flex.gap-8 - [:span.font-mono (when (pos? delta) (format "$%,.2f" delta))] - [:span.font-mono (when (neg? delta) (format "$%,.2f" (Math/abs delta)))]]]))) - -(defn account-typeahead* - [{:keys [name value client-id]}] - [:div.flex.flex-col - (com/typeahead {:name name - :placeholder "Search..." - :url (hu/url (bidi/path-for ssr-routes/only-routes :account-search) - {:client-id client-id - :purpose "invoice"}) - :value value - :content-fn (fn [value] - (:account/name (d-accounts/clientize (dc/pull (dc/db conn) d-accounts/default-read value) - client-id)))})]) + [:span.font-mono (when (pos? delta) (format "$%,.2f" delta)) + [:span.font-mono (when (neg? delta) (format "$%,.2f" (Math/abs delta)))]]]]))) (defn sales-summary-item-row* [{:keys [value client-id]}] (let [manual? (fc/field-value (:sales-summary-item/manual? value))] @@ -543,28 +543,28 @@ (if item (let [manual? (:sales-summary-item/manual? item)] (if manual? - [:div.flex.items-center.gap-2.text-sm {:x-ref "p" :x-data (hx/json {})} - (com/hidden {:name (str "step-params[sales-summary/items][" actual-idx "][db/id]") - :value (:db/id item)}) - (com/hidden {:name (str "step-params[sales-summary/items][" actual-idx "][sales-summary-item/manual?]") - :value "true"}) - (fc/start-form-with-prefix [(str "step-params[sales-summary/items][" actual-idx "]")] - item [] - (fc/with-field :sales-summary-item/category - (com/text-input {:placeholder "Category" - :name (fc/field-name) - :value (fc/field-value) - :class "w-32 text-sm"}))) - (account-typeahead* {:name (str "step-params[sales-summary/items][" actual-idx "][ledger-mapped/account]") - :value (:ledger-mapped/account item) - :client-id client-id}) - (fc/start-form-with-prefix [(str "step-params[sales-summary/items][" actual-idx "]")] - item [] - (fc/with-field :debit - (com/money-input {:class "w-24 text-right font-mono tabular-nums" - :name (fc/field-name) - :value (fc/field-value)}))) - (com/a-icon-button {"@click.prevent.stop" "$refs.p.remove()"} svg/x)] + [:div.flex.items-center.gap-2.text-sm {:x-ref "p" :x-data (hx/json {})} + (com/hidden {:name (str "step-params[sales-summary/items][" actual-idx "][db/id]") + :value (:db/id item)}) + (com/hidden {:name (str "step-params[sales-summary/items][" actual-idx "][sales-summary-item/manual?]") + :value "true"}) + (fc/start-form-with-prefix [(str "step-params[sales-summary/items][" actual-idx "]")] + item [] + (fc/with-field :sales-summary-item/category + (com/text-input {:placeholder "Category" + :name (fc/field-name) + :value (fc/field-value) + :class "w-32 text-sm"}))) + (account-typeahead* {:name (str "step-params[sales-summary/items][" actual-idx "][ledger-mapped/account]") + :value (:ledger-mapped/account item) + :client-id client-id}) + (fc/start-form-with-prefix [(str "step-params[sales-summary/items][" actual-idx "]")] + item [] + (fc/with-field :debit + (com/money-input {:class "w-24 text-right font-mono tabular-nums" + :name (fc/field-name) + :value (fc/field-value)}))) + (com/a-icon-button {"@click.prevent.stop" "$refs.p.remove()"} svg/x)] [:div.flex.items-center.gap-2.text-sm (com/hidden {:name (str "step-params[sales-summary/items][" actual-idx "][db/id]") :value (:db/id item)}) @@ -572,8 +572,8 @@ :value (:sales-summary-item/category item)}) [:span.text-gray-500 (truncate (:sales-summary-item/category item) 30)] (account-display-cell {:item (assoc item :item-index actual-idx) - :field-name-prefix (str "step-params[sales-summary/items][" actual-idx "]") - :client-id client-id}) + :field-name-prefix (str "step-params[sales-summary/items][" actual-idx "]") + :client-id client-id}) [:span.font-mono.tabular-nums.text-gray-900 (format "$%,.2f" (:ledger-mapped/amount item))]])) [:div.h-6]))] [:div.mt-2.border-t.pt-1 @@ -586,28 +586,28 @@ (if item (let [manual? (:sales-summary-item/manual? item)] (if manual? - [:div.flex.items-center.gap-2.text-sm {:x-ref "p" :x-data (hx/json {})} - (com/hidden {:name (str "step-params[sales-summary/items][" actual-idx "][db/id]") - :value (:db/id item)}) - (com/hidden {:name (str "step-params[sales-summary/items][" actual-idx "][sales-summary-item/manual?]") - :value "true"}) - (fc/start-form-with-prefix [(str "step-params[sales-summary/items][" actual-idx "]")] - item [] - (fc/with-field :sales-summary-item/category - (com/text-input {:placeholder "Category" - :name (fc/field-name) - :value (fc/field-value) - :class "w-32 text-sm"}))) - (account-typeahead* {:name (str "step-params[sales-summary/items][" actual-idx "][ledger-mapped/account]") - :value (:ledger-mapped/account item) - :client-id client-id}) - (fc/start-form-with-prefix [(str "step-params[sales-summary/items][" actual-idx "]")] - item [] - (fc/with-field :credit - (com/money-input {:class "w-24 text-right font-mono tabular-nums" - :name (fc/field-name) - :value (fc/field-value)}))) - (com/a-icon-button {"@click.prevent.stop" "$refs.p.remove()"} svg/x)] + [:div.flex.items-center.gap-2.text-sm {:x-ref "p" :x-data (hx/json {})} + (com/hidden {:name (str "step-params[sales-summary/items][" actual-idx "][db/id]") + :value (:db/id item)}) + (com/hidden {:name (str "step-params[sales-summary/items][" actual-idx "][sales-summary-item/manual?]") + :value "true"}) + (fc/start-form-with-prefix [(str "step-params[sales-summary/items][" actual-idx "]")] + item [] + (fc/with-field :sales-summary-item/category + (com/text-input {:placeholder "Category" + :name (fc/field-name) + :value (fc/field-value) + :class "w-32 text-sm"}))) + (account-typeahead* {:name (str "step-params[sales-summary/items][" actual-idx "][ledger-mapped/account]") + :value (:ledger-mapped/account item) + :client-id client-id}) + (fc/start-form-with-prefix [(str "step-params[sales-summary/items][" actual-idx "]")] + item [] + (fc/with-field :credit + (com/money-input {:class "w-24 text-right font-mono tabular-nums" + :name (fc/field-name) + :value (fc/field-value)}))) + (com/a-icon-button {"@click.prevent.stop" "$refs.p.remove()"} svg/x)] [:div.flex.items-center.gap-2.text-sm (com/hidden {:name (str "step-params[sales-summary/items][" actual-idx "][db/id]") :value (:db/id item)}) @@ -615,8 +615,8 @@ :value (:sales-summary-item/category item)}) [:span.text-gray-500 (truncate (:sales-summary-item/category item) 30)] (account-display-cell {:item (assoc item :item-index actual-idx) - :field-name-prefix (str "step-params[sales-summary/items][" actual-idx "]") - :client-id client-id}) + :field-name-prefix (str "step-params[sales-summary/items][" actual-idx "]") + :client-id client-id}) [:span.font-mono.tabular-nums.text-gray-900 (format "$%,.2f" (:ledger-mapped/amount item))]])) [:div.h-6]))] [:div.mt-2.border-t.pt-1 @@ -634,7 +634,7 @@ :footer (mm/default-step-footer linear-wizard this :validation-route ::route/edit-wizard-navigate) :validation-route ::route/edit-wizard-navigate - :width-height-class "lg:w-[900px] lg:h-[600px]"))) + :width-height-class "lg:w-[900px] lg:h-[600px]")))) (defn attach-ledger [i] (cond-> i @@ -757,24 +757,24 @@ ::route/edit-wizard-navigate (-> mm/next-handler (mm/wrap-wizard edit-wizard) (mm/wrap-decode-multi-form-state)) - ::route/new-summary-item (-> (add-new-entity-handler [:step-params :sales-summary/items] - (fn render [cursor request] - (sales-summary-item-row* - {:value cursor - :client-id (:client-id (:query-params request))})) - (fn build-new-row [base _] - (assoc base :sales-summary-item/manual? true))) + ::route/new-summary-item (-> (add-new-entity-handler [:step-params :sales-summary/items] + (fn render [cursor request] + (sales-summary-item-row* + {:value cursor + :client-id (:client-id (:query-params request))})) + (fn build-new-row [base _] + (assoc base :sales-summary-item/manual? true))) (wrap-schema-enforce :query-schema [:map [:client-id {:optional true} [:maybe entity-id]]])) - ::route/edit-item-account (-> edit-item-account - (wrap-schema-enforce :query-schema [:map - [:item-index nat-int?] - [:client-id {:optional true} [:maybe entity-id]] - [:current-account-id {:optional true} [:maybe :string]]])) - ::route/save-item-account save-item-account - ::route/cancel-item-account cancel-item-account - ::route/edit-wizard-submit (-> mm/submit-handler + ::route/edit-item-account (-> edit-item-account + (wrap-schema-enforce :query-schema [:map + [:item-index nat-int?] + [:client-id {:optional true} [:maybe entity-id]] + [:current-account-id {:optional true} [:maybe :string]]])) + ::route/save-item-account save-item-account + ::route/cancel-item-account cancel-item-account + ::route/edit-wizard-submit (-> mm/submit-handler (mm/wrap-wizard edit-wizard) (mm/wrap-decode-multi-form-state))}) (fn [h]