This commit is contained in:
Bryce
2024-03-21 22:33:05 -07:00
parent 9cf81f6d15
commit 5596848cfc
2 changed files with 99 additions and 94 deletions

View File

@@ -157,7 +157,7 @@
(defn date-input- [{:keys [size] :as params}] (defn date-input- [{:keys [size] :as params}]
[:div.shrink [:div.shrink
[:input [:input
(-> params (-> params
(update :class (fnil hh/add-class "") default-input-classes) (update :class (fnil hh/add-class "") default-input-classes)
(assoc :type "text") (assoc :type "text")

View File

@@ -2,6 +2,7 @@
(:require [auto-ap.datomic (:require [auto-ap.datomic
:refer [conn pull-attr]] :refer [conn pull-attr]]
[auto-ap.datomic.accounts :as d-accounts] [auto-ap.datomic.accounts :as d-accounts]
[auto-ap.logging :as alog]
[auto-ap.routes.invoice :as route] [auto-ap.routes.invoice :as route]
[auto-ap.routes.utils [auto-ap.routes.utils
:refer [wrap-client-redirect-unauthenticated]] :refer [wrap-client-redirect-unauthenticated]]
@@ -13,10 +14,11 @@
[auto-ap.ssr.hx :as hx] [auto-ap.ssr.hx :as hx]
[auto-ap.ssr.svg :as svg] [auto-ap.ssr.svg :as svg]
[auto-ap.ssr.utils [auto-ap.ssr.utils
:refer [apply-middleware-to-all-handlers entity-id html-response :refer [apply-middleware-to-all-handlers clj-date-schema
money wrap-schema-enforce]] entity-id html-response money wrap-schema-enforce]]
[auto-ap.time :as atime] [auto-ap.time :as atime]
[bidi.bidi :as bidi] [bidi.bidi :as bidi]
[clj-time.core :as time]
[datomic.api :as dc] [datomic.api :as dc]
[malli.core :as mc] [malli.core :as mc]
[malli.util :as mut])) [malli.util :as mut]))
@@ -24,8 +26,9 @@
(def new-form-schema (def new-form-schema
[:map [:map
[:invoice/client entity-id] [:invoice/client entity-id]
[:invoice/date clj-date-schema]
[:invoice/vendor entity-id] [:invoice/vendor entity-id]
[:invoice/expense-accounts [:invoice/expense-accounts
[:vector {:coerce? true} [:vector {:coerce? true}
[:map [:map
[:invoice-expense-account/account entity-id] [:invoice-expense-account/account entity-id]
@@ -43,98 +46,99 @@
[]) [])
(step-schema [_] (step-schema [_]
(mut/select-keys (mm/form-schema linear-wizard) #{:invoice/client :invoice/vendor})) (mut/select-keys (mm/form-schema linear-wizard) #{:invoice/client :invoice/vendor :invoice/date}))
(render-step [this request] (render-step [this request]
(mm/default-render-step (alog/peek ::check (:multi-form-state request))
linear-wizard this (mm/default-render-step
:head [:div.p-2 "New invoice"] linear-wizard this
:body (mm/default-step-body :head [:div.p-2 "New invoice"]
{} :body (mm/default-step-body
[:div {} {}
(fc/with-field :invoice/client [:div {}
(if (:client request) (fc/with-field :invoice/client
(com/hidden {:name (fc/field-name) (if (:client request)
:value (:db/id (:client request))}) (com/hidden {:name (fc/field-name)
(com/validated-field :value (:db/id (:client request))})
{:label "Client" (com/validated-field
:errors (fc/field-errors)} {:label "Client"
[:div.w-96 :errors (fc/field-errors)}
(com/typeahead {:name (fc/field-name) [:div.w-96
:error? (fc/error?) (com/typeahead {:name (fc/field-name)
:class "w-96" :error? (fc/error?)
:placeholder "Search..." :class "w-96"
:url (bidi/path-for ssr-routes/only-routes :company-search) :placeholder "Search..."
:value (fc/field-value) :url (bidi/path-for ssr-routes/only-routes :company-search)
:content-fn (fn [c] (pull-attr (dc/db conn) :client/name c))})]))) :value (fc/field-value)
(fc/with-field :invoice/vendor :content-fn (fn [c] (pull-attr (dc/db conn) :client/name c))})])))
(com/validated-field (fc/with-field :invoice/vendor
{:label "Vendor" (com/validated-field
:errors (fc/field-errors)} {:label "Vendor"
[:div.w-96 :errors (fc/field-errors)}
(com/typeahead {:name (fc/field-name) [:div.w-96
:error? (fc/error?) (com/typeahead {:name (fc/field-name)
:class "w-96" :error? (fc/error?)
:placeholder "Search..." :class "w-96"
:url (bidi/path-for ssr-routes/only-routes :vendor-search) :placeholder "Search..."
:value (fc/field-value) :url (bidi/path-for ssr-routes/only-routes :vendor-search)
:content-fn (fn [c] (pull-attr (dc/db conn) :vendor/name c))})])) :value (fc/field-value)
:content-fn (fn [c] (pull-attr (dc/db conn) :vendor/name c))})]))
[:div.flex.space-x-8
(fc/with-field :invoice/date
(com/validated-field
{:label "Date"
:errors (fc/field-errors)}
[:div {:class "w-24"}
(com/date-input {:value (-> (fc/field-value)
(atime/unparse-local atime/normal-date))
:name (fc/field-name)
:error? (fc/field-errors)
:placeholder "1/1/2024"})]))
(fc/with-field :invoice/due
(com/validated-field
{:label "Due (optional)"
:errors (fc/field-errors)}
[:div {:class "w-24"}
(com/date-input {:value (-> (fc/field-value)
(atime/unparse-local atime/normal-date))
:name (fc/field-name)
:error? (fc/field-errors)
:placeholder "1/1/2024"})]))
(fc/with-field :invoice/scheduled-payment
(com/validated-field
{:label "Scheduled payment (optional)"
:errors (fc/field-errors)}
[:div {:class "w-24"}
(com/date-input {:value (-> (fc/field-value)
(atime/unparse-local atime/normal-date))
:name (fc/field-name)
:error? (fc/field-errors)
:placeholder "1/1/2024"})]))]
(fc/with-field :invoice/invoice-number [:div.flex.space-x-8
(com/validated-field (fc/with-field :invoice/date
{:label "Invoice Number" (com/validated-field
:errors (fc/field-errors)} {:label "Date"
[:div {:class "w-24"} :errors (fc/field-errors)}
(com/text-input {:value (-> (fc/field-value)) [:div {:class "w-24"}
:name (fc/field-name) (com/date-input {:value (some-> (fc/field-value)
:error? (fc/field-errors) (atime/unparse-local atime/normal-date))
:placeholder "HA-123"})])) :name (fc/field-name)
(fc/with-field :invoice/total :error? (fc/field-errors)
(com/validated-field :placeholder "1/1/2024"})]))
{:label "Total" (fc/with-field :invoice/due
:errors (fc/field-errors)} (com/validated-field
[:div {:class "w-16"} {:label "Due (optional)"
(com/money-input {:value (-> (fc/field-value)) :errors (fc/field-errors)}
:name (fc/field-name) [:div {:class "w-24"}
:class "w-24" (com/date-input {:value (some-> (fc/field-value)
:error? (fc/field-errors) (atime/unparse-local atime/normal-date))
:placeholder "212.44"})]))]) :name (fc/field-name)
:error? (fc/field-errors)
:placeholder "1/1/2024"})]))
(fc/with-field :invoice/scheduled-payment
(com/validated-field
{:label "Scheduled payment (optional)"
:errors (fc/field-errors)}
[:div {:class "w-24"}
(com/date-input {:value (some-> (fc/field-value)
(atime/unparse-local atime/normal-date))
:name (fc/field-name)
:error? (fc/field-errors)
:placeholder "1/1/2024"})]))]
:footer (fc/with-field :invoice/invoice-number
(mm/default-step-footer linear-wizard this :validation-route ::route/new-wizard-navigate) (com/validated-field
:validation-route ::route/new-wizard-navigate))) {:label "Invoice Number"
:errors (fc/field-errors)}
[:div {:class "w-24"}
(com/text-input {:value (-> (fc/field-value))
:name (fc/field-name)
:error? (fc/field-errors)
:placeholder "HA-123"})]))
(fc/with-field :invoice/total
(com/validated-field
{:label "Total"
:errors (fc/field-errors)}
[:div {:class "w-16"}
(com/money-input {:value (-> (fc/field-value))
:name (fc/field-name)
:class "w-24"
:error? (fc/field-errors)
:placeholder "212.44"})]))])
:footer
(mm/default-step-footer linear-wizard this :validation-route ::route/new-wizard-navigate)
:validation-route ::route/new-wizard-navigate)))
(defn- location-select* (defn- location-select*
[{:keys [name account-location client-locations value]}] [{:keys [name account-location client-locations value]}]
@@ -294,9 +298,10 @@
(defn initial-new-wizard-state [request] (defn initial-new-wizard-state [request]
(mm/->MultiStepFormState {:TODO nil} (mm/->MultiStepFormState {:TODO nil
:invoice/date (time/plus (time/now) (time/days 12))}
[] []
{})) {:invoice/date (time/plus (time/now) (time/days 12))}))
(defn location-select [{{:keys [name account-id client-id value] :as qp} :query-params}] (defn location-select [{{:keys [name account-id client-id value] :as qp} :query-params}]
(html-response (location-select* {:name name (html-response (location-select* {:name name