diff --git a/src/clj/auto_ap/ssr/components/aside.clj b/src/clj/auto_ap/ssr/components/aside.clj index 88f2e43c..f975947c 100644 --- a/src/clj/auto_ap/ssr/components/aside.clj +++ b/src/clj/auto_ap/ssr/components/aside.clj @@ -198,13 +198,14 @@ [:li (menu-button- {:icon svg/restaurant - :href (bidi/path-for client-routes/routes - :admin-clients)} + :href (bidi/path-for client-routes/routes :admin-clients) + :target "_new"} "Clients")] [:li (menu-button- {:icon svg/vendors :href (bidi/path-for client-routes/routes - :admin-vendors)} + :admin-vendors) + :target "_new"} "Vendors")] [:li (menu-button- {:icon svg/user diff --git a/src/cljs/auto_ap/views/main.cljs b/src/cljs/auto_ap/views/main.cljs index affe1917..df4db337 100644 --- a/src/cljs/auto_ap/views/main.cljs +++ b/src/cljs/auto_ap/views/main.cljs @@ -8,7 +8,6 @@ [auto-ap.views.pages.needs-activation :refer [needs-activation-page]] [auto-ap.views.pages.transactions :refer [transactions-page]] [auto-ap.views.pages.ledger :refer [ledger-page]] - [auto-ap.views.pages.reports :refer [reports-page]] [auto-ap.views.pages.error :refer [error-page]] [auto-ap.views.pages.ledger.balance-sheet :refer [balance-sheet-page]] [auto-ap.views.pages.ledger.external-import :refer [external-import-page]] @@ -30,8 +29,6 @@ (defmethod page :import-invoices [_] (import-invoices-page )) -(defmethod page :reports [_] - (reports-page )) (defmethod page :paid-invoices [_] ^{:key :paid} diff --git a/src/cljs/auto_ap/views/pages/pos/expected_deposits.cljs b/src/cljs/auto_ap/views/pages/pos/expected_deposits.cljs deleted file mode 100644 index 53ced149..00000000 --- a/src/cljs/auto_ap/views/pages/pos/expected_deposits.cljs +++ /dev/null @@ -1,78 +0,0 @@ -(ns auto-ap.views.pages.pos.expected-deposits - (:require [auto-ap.forms :as forms] - [auto-ap.subs :as subs] - [auto-ap.views.components.layouts :refer [side-bar-layout appearing-side-bar]] - [auto-ap.views.pages.data-page :as data-page] - [auto-ap.views.pages.pos.form :as form] - [auto-ap.views.pages.pos.side-bar :as side-bar] - [auto-ap.views.pages.pos.expected-deposits.table :as table] - [auto-ap.views.utils :refer [with-user]] - [clojure.set :as set] - [re-frame.core :as re-frame] - [reagent.core :as reagent] - [vimsical.re-frame.fx.track :as track])) - -(re-frame/reg-event-fx - ::params-change - [with-user] - (fn [{:keys [user]}[_ params]] - {:graphql {:token user - :owns-state {:single [::data-page/page ::page]} - :query-obj {:venia/queries [[:expected_deposit_page - (if (:exact-match-id params) - {:exact-match-id (some-> (:exact-match-id params) str) - :client-id (:id @(re-frame/subscribe [::subs/client]))} - {:start (:start params 0) - :sort (:sort params) - :per-page (:per-page params) - :exact-match-id (some-> (:exact-match-id params) str) - :total-gte (:amount-gte (:total-range params)) - :total-lte (:amount-lte (:total-range params)) - :date-range (:date-range params) - :client-id (:id @(re-frame/subscribe [::subs/client]))}) - [[:expected-deposits [:id :total :fee :location :date :status - [:totals [:date :count :amount]] - [:transaction [:id :date]] - [:client [:name :id]]]] - :total - :start - :end]]]} - :on-success (fn [result] - (let [result (set/rename-keys (:expected-deposit-page result) - {:expected-deposits :data})] - [::data-page/received ::page result]))}})) - - -(re-frame/reg-event-fx - ::unmounted - (fn [_ _] - {:dispatch [::data-page/dispose ::page] - ::track/dispose {:id ::params}})) - -(re-frame/reg-event-fx - ::mounted - (fn [_ _] - {::track/register {:id ::params - :subscription [::data-page/params ::page] - :event-fn (fn [params] - [::params-change params])}})) - -(defn content [] - [:div - [:h1.title "Expected Deposits"] - [table/table {:id :expected-deposits - :data-page ::page}]]) - -(defn expected-deposits-page [] - (reagent/create-class - {:display-name "expected-deposits-page" - :component-will-unmount #(re-frame/dispatch-sync [::unmounted]) - :component-did-mount #(re-frame/dispatch [::mounted]) - :reagent-render - (fn [] - (let [{form-active? :active?} @(re-frame/subscribe [::forms/form ::form/form])] - [side-bar-layout {:side-bar [side-bar/side-bar {:data-page ::page}] - :main [content] - :right-side-bar [appearing-side-bar {:visible? form-active?} - [form/form {}]]}]))})) - diff --git a/src/cljs/auto_ap/views/pages/pos/expected_deposits/table.cljs b/src/cljs/auto_ap/views/pages/pos/expected_deposits/table.cljs deleted file mode 100644 index 0144e6b6..00000000 --- a/src/cljs/auto_ap/views/pages/pos/expected_deposits/table.cljs +++ /dev/null @@ -1,89 +0,0 @@ - -(ns auto-ap.views.pages.pos.expected-deposits.table - (:require - [auto-ap.events :as events] - [auto-ap.routes :as routes] - [auto-ap.subs :as subs] - [auto-ap.views.components.buttons :as buttons] - [auto-ap.views.components.dropdown - :refer [drop-down drop-down-contents]] - [auto-ap.views.components.grid :as grid] - [auto-ap.views.pages.data-page :as data-page] - [auto-ap.views.pages.pos.form :as form] - [auto-ap.views.utils - :refer [date->str dispatch-event-with-propagation nf pretty ->$]] - [bidi.bidi :as bidi] - [cemerick.url :as url] - [re-frame.core :as re-frame])) - -(defn row [{sales-order :sales-order - selected-client :selected-client}] - (let [{:keys [client transaction status location date total fee id totals]} sales-order] - [grid/row {:class (:class sales-order) :id id} - (when-not selected-client - [grid/cell {} (:name client)]) - [grid/cell location ] - [grid/cell {} (date->str date) ] - [grid/cell {} status ] - [grid/cell {:class "has-text-right"} (nf total )] - [grid/cell {:class "has-text-right"} (nf fee )] - [grid/button-cell {} - [:div.buttons - [buttons/fa-icon {:event [::form/editing sales-order] :icon "fa-pencil"}] - (when (or transaction - (seq totals)) - [drop-down {:id [::links id] - :is-right? true - :header [buttons/fa-icon {:class "badge" - :on-click (dispatch-event-with-propagation [::events/toggle-menu [::links id]]) - :data-badge (str 1) - :icon "fa-paperclip"}]} - [drop-down-contents - [:div.dropdown-item - [:table.table.grid.compact - [:tbody - (when transaction - [:tr - [:td - "Transaction"] - [:td (some-> transaction :date (date->str pretty))] - [:td - [buttons/fa-icon {:icon "fa-external-link" - :href (str (bidi/path-for routes/routes :transactions ) - "?" - (url/map->query {:exact-match-id (:id transaction)}))}]]]) - (when (seq totals) - (into - [:<>] - (for [t totals] - [:tr - [:td - "Sales"] - [:td (some-> t :date (date->str pretty))] - [:td (str (some-> t :count ) " (" (some-> t :amount ->$) ")") - ]])))]]]]])]]])) - -(defn table [{:keys [data-page]}] - (let [selected-client @(re-frame/subscribe [::subs/client]) - {:keys [data]} @(re-frame/subscribe [::data-page/page data-page])] - [grid/grid {:data-page data-page - :column-count (if selected-client 7 8)} - [grid/controls data] - [grid/table {:fullwidth true} - [grid/header {} - [grid/row {} - (when-not selected-client - [grid/sortable-header-cell {:sort-key "client" :sort-name "Client"} "Client"]) - [grid/sortable-header-cell {:sort-key "location" :sort-name "Location" :style {:width "7em"}} "Location"] - [grid/sortable-header-cell {:sort-key "date" :sort-name "Date" :style {:width "8em"}} "Date"] - [grid/sortable-header-cell {:sort-key "status" :sort-name "Status" :style {:width "8em"}} "Status"] - [grid/sortable-header-cell {:sort-key "total" :sort-name "Total" :class "has-text-right" :style {:width "8em"}} "Total"] - [grid/sortable-header-cell {:sort-key "fee" :sort-name "Fee" :class "has-text-right" :style {:width "7em"}} "Fee"] - - [grid/header-cell {:style {:width "4em"}}]]] - [grid/body - (for [sales-order (:data data)] - ^{:key (:id sales-order)} - [row {:sales-order sales-order - :selected-client selected-client}])]] - [grid/bottom-paginator data]])) diff --git a/src/cljs/auto_ap/views/pages/pos/form.cljs b/src/cljs/auto_ap/views/pages/pos/form.cljs deleted file mode 100644 index 15eaabdd..00000000 --- a/src/cljs/auto_ap/views/pages/pos/form.cljs +++ /dev/null @@ -1,85 +0,0 @@ -(ns auto-ap.views.pages.pos.form - (:require - [auto-ap.forms :as forms] - [auto-ap.subs :as subs] - [auto-ap.views.components.layouts :as layouts] - [auto-ap.views.components.money-field :refer [money-field]] - [auto-ap.views.utils - :refer [date->str date-picker dispatch-event standard]] - [re-frame.core :as re-frame] - [auto-ap.forms.builder :as form-builder] - [auto-ap.views.components :as com])) - - -(re-frame/reg-event-db - ::editing - (fn [db [_ which]] - (let [which (update which :date #(date->str % standard))] - (forms/start-form db ::form which)))) - - -(defn form [] - [layouts/side-bar {:on-close (dispatch-event [::forms/form-closing ::form ])} - (let [{:keys [data]} @(re-frame/subscribe [::forms/form ::form])] - [form-builder/builder {:submit-event [::saving ] - :id ::form} - [form-builder/section {:title "Sales Order"} - [:div - "Order " (:id data) - (when (:reference-link data) - [:a {:href (:reference-link data) - :target "_new"} - [:span.icon - [:i.fa.fa-external-link - ]]])] - (when-not @(re-frame/subscribe [::subs/client]) - [form-builder/field-v2 {:field :client} - "Client" - [com/entity-typeahead {:entities @(re-frame/subscribe [::subs/clients]) - :entity->text :name - :disabled true}]]) - - - [form-builder/field-v2 {:field :date} - "Date" - [date-picker {:output :cljs-date - :disabled true}]] - [form-builder/field-v2 {:field :total} - "Total" - [money-field {:disabled true}]] - [form-builder/field-v2 {:field :tax} - "Tax" - [money-field {:disabled true}] - [form-builder/field-v2 {:field :discount} - "Discount" - [money-field {:disabled true}]]] - - [form-builder/field-v2 {:field :returns} - "Returns" - [money-field {:disabled true}]] - - [form-builder/field-v2 {:field :service-charge} - "Service Charge" - [money-field {:disabled true}]] - - [form-builder/field-v2 {:field :tip} - "Tip" - [money-field {:disabled true}]] - - [form-builder/section {:title "Charges"} - [:ul - (for [charge (:charges data)] - ^{:key (:id charge)} - [:li [:span (:type-name charge) ": " (:total charge) - (when (:reference-link charge) - [:a {:href (:reference-link charge) :target "_new"} - [:span.icon - [:i.fa.fa-external-link - ]]])]])]] - - [form-builder/section {:title "Line Items"} - [:ul - (for [line-item (:line-items data)] - ^{:key (:item-name line-item)} - [:li (:item-name line-item) ": " (:total line-item) [:span.tag (:category line-item)]])]]]])]) - diff --git a/src/cljs/auto_ap/views/pages/pos/sales_orders.cljs b/src/cljs/auto_ap/views/pages/pos/sales_orders.cljs deleted file mode 100644 index 65e41d35..00000000 --- a/src/cljs/auto_ap/views/pages/pos/sales_orders.cljs +++ /dev/null @@ -1,83 +0,0 @@ -(ns auto-ap.views.pages.pos.sales-orders - (:require - [auto-ap.forms :as forms] - [auto-ap.subs :as subs] - [auto-ap.views.components.layouts - :refer [appearing-side-bar side-bar-layout]] - [auto-ap.views.pages.data-page :as data-page] - [auto-ap.views.pages.pos.form :as form] - [auto-ap.views.pages.pos.side-bar :as side-bar] - [auto-ap.views.pages.pos.table :as table] - [auto-ap.views.utils :refer [with-user standard date->str]] - [cljs-time.core :as time] - [clojure.set :as set] - [re-frame.core :as re-frame] - [reagent.core :as reagent] - [vimsical.re-frame.fx.track :as track])) - -(re-frame/reg-event-fx - ::params-change - [with-user] - (fn [{:keys [user]}[_ params]] - {:graphql {:token user - :owns-state {:single [::data-page/page ::page]} - :query-obj {:venia/queries [[:sales_order_page - {:start (:start params 0) - :sort (:sort params) - :per-page (:per-page params) - :type-name (:type-name params) - :category (:category params) - :total-gte (:amount-gte (:total-range params)) - :total-lte (:amount-lte (:total-range params)) - :date-range (:date-range params) - :processor (some-> (:processor params) keyword)} - [[:sales-orders [:id :source :total :tax :tip :reference-link :discount :service-charge :returns :date - [:charges [:type-name :note :reference-link :total :processor :id [:expected-deposit [:id]] ]] - [:line-items [:item-name :total :category]] - [:client [:name :id]]]] - :total - :start - :end - :sales_order_total - :sales_order_tax]]]} - :on-success (fn [result] - (let [result (set/rename-keys (:sales-order-page result) - {:sales-orders :data})] - [::data-page/received ::page result]))}})) - - -(re-frame/reg-event-fx - ::unmounted - (fn [_ _] - {:dispatch [::data-page/dispose ::page] - ::track/dispose {:id ::params}})) - -(re-frame/reg-event-fx - ::mounted - (fn [{:keys [db]} _] - {:db (assoc-in db [::data-page/settled-filters ::page :date-range] {:start (date->str (time/plus (time/now) (time/days -3)) - standard)}) - ::track/register {:id ::params - :subscription [::data-page/params ::page] - :event-fn (fn [params] - [::params-change params])}})) - -(defn content [] - [:div - [:h1.title "Sales Orders"] - [table/table {:id :sales-orders - :data-page ::page}]]) - -(defn sales-orders-page [] - (reagent/create-class - {:display-name "sales-orders-page" - :component-will-unmount #(re-frame/dispatch-sync [::unmounted]) - :component-did-mount #(re-frame/dispatch [::mounted]) - :reagent-render - (fn [] - (let [{form-active? :active?} @(re-frame/subscribe [::forms/form ::form/form])] - [side-bar-layout {:side-bar [side-bar/side-bar {:data-page ::page}] - :main [content] - :right-side-bar [appearing-side-bar {:visible? form-active?} - [form/form {}]]}]))})) - diff --git a/src/cljs/auto_ap/views/pages/pos/side_bar.cljs b/src/cljs/auto_ap/views/pages/pos/side_bar.cljs deleted file mode 100644 index 8a77a074..00000000 --- a/src/cljs/auto_ap/views/pages/pos/side_bar.cljs +++ /dev/null @@ -1,110 +0,0 @@ -(ns auto-ap.views.pages.pos.side-bar - (:require - [auto-ap.routes :as routes] - [auto-ap.subs :as subs] - [auto-ap.views.components.date-range-filter :refer [date-range-filter]] - [auto-ap.views.components.number-filter :refer [number-filter]] - [auto-ap.views.pages.data-page :as data-page] - [auto-ap.views.utils - :refer [active-when dispatch-event dispatch-value-change]] - [bidi.bidi :as bidi] - [re-frame.core :as re-frame])) - -(defn side-bar [{:keys [data-page]}] - (let [ap @(re-frame/subscribe [::subs/active-page])] - [:div - [:div [:p.menu-label "Type"] - [:ul.menu-list - [:li.menu-item - [:a.item {:href (bidi/path-for routes/routes :sales-orders) - :class [(active-when ap = :sales-orders)]} - [:span {:class "icon icon-accounting-invoice-mail" :style {:font-size "25px"}}] - [:span {:class "name"} "Sales Orders"]]] - [:li.menu-item - [:a.item {:href (bidi/path-for routes/routes :expected-deposits) - :class [(active-when ap = :expected-deposits)]} - [:span {:class "icon icon-accounting-invoice-mail" :style {:font-size "25px"}}] - [:span {:class "name"} "Expected Deposits"]]]]] - - [:div - [:p.menu-label "Date Range"] - [:div - [date-range-filter - {:on-change-event [::data-page/filter-changed data-page :date-range] - :value @(re-frame/subscribe [::data-page/filter data-page :date-range])}]] - - [:p.menu-label "Total"] - [:div - [number-filter - {:on-change-event [::data-page/filter-changed data-page :total-range] - :value @(re-frame/subscribe [::data-page/filter data-page :total-range])}]] - - (when (= :sales-orders ap) - [:<> - [:p.menu-label "Payment Method"] - [:div - [:nav.panel - [:a.panel-block {:on-click (dispatch-event [::data-page/filter-changed data-page :type-name nil])} - [:span.panel-icon] - "All"] - [:a.panel-block {:on-click (dispatch-event [::data-page/filter-changed data-page :type-name "CASH"])} - [:span.panel-icon - [:span {:class "icon-accounting-bill" :style {:font-weight "400"}}]] - "Cash"] - [:a.panel-block {:on-click (dispatch-event [::data-page/filter-changed data-page :type-name "CARD"])} - [:span.panel-icon - [:span {:class "icon-credit-card-1" :style {:font-weight "400"}}]] - "Card"] - - [:a.panel-block {:on-click (dispatch-event [::data-page/filter-changed data-page :type-name "SQUARE_GIFT_CARD"])} - [:span.panel-icon - [:span {:class "icon-gift-box" :style {:font-weight "400"}}]] - "Gift Card"] - - - [:a.panel-block {:on-click (dispatch-event [::data-page/filter-changed data-page :type-name "OTHER"])} - [:span.panel-icon ] - "Other"]]] - - [:p.menu-label "Processor"] - [:div - [:nav.panel - [:a.panel-block {:on-click (dispatch-event [::data-page/filter-changed data-page :processor nil])} - [:span.panel-icon] - "All"] - [:a.panel-block {:on-click (dispatch-event [::data-page/filter-changed data-page :processor "square"])} - [:span.panel-icon [:img.level-item {:src "/img/square.png"}]] - "Square"] - [:a.panel-block {:on-click (dispatch-event [::data-page/filter-changed data-page :processor "doordash"])} - [:span.panel-icon [:img.level-item {:src "/img/doordash.png"}]] - "Doordash"] - - [:a.panel-block {:on-click (dispatch-event [::data-page/filter-changed data-page :processor "uber-eats"])} - [:span.panel-icon [:img.level-item {:src "/img/ubereats.png" }]] - "Uber Eats"] - [:a.panel-block {:on-click (dispatch-event [::data-page/filter-changed data-page :processor "grubhub"])} - [:span.panel-icon [:img.level-item {:src "/img/grubhub.png"}]] - "Grubhub"] - [:a.panel-block {:on-click (dispatch-event [::data-page/filter-changed data-page :processor "koala"])} - [:span.panel-icon [:img.level-item {:src "/img/koala.png"}]] - "Koala"] - [:a.panel-block {:on-click (dispatch-event [::data-page/filter-changed data-page :processor "ezcater"])} - [:span.panel-icon [:img.level-item {:src "/img/ezcater.png"}]] - "EZCater"] - [:a.panel-block {:on-click (dispatch-event [::data-page/filter-changed data-page :processor "na"])} - [:span.panel-icon #_[:img.level-item {:src "/img/grubhub.png"}]] - "No Processor"] - ]] - [:p.menu-label "Category"] - [:div.field - [:div.control [:input.input {:placeholder "Fries" - :value @(re-frame/subscribe [::data-page/filter data-page :category]) - :on-change (dispatch-value-change [::data-page/filter-changed data-page :category])} ]]]]) - - (when-let [exact-match-id @(re-frame/subscribe [::data-page/filter data-page :exact-match-id])] - [:div - [:p.menu-label "Specific Expected Deposit"] - [:span.tag.is-medium exact-match-id " " - [:button.delete.is-small {:on-click - (dispatch-event [::data-page/filter-changed data-page :exact-match-id nil])}]]])]])) - diff --git a/src/cljs/auto_ap/views/pages/pos/table.cljs b/src/cljs/auto_ap/views/pages/pos/table.cljs deleted file mode 100644 index 88e34eab..00000000 --- a/src/cljs/auto_ap/views/pages/pos/table.cljs +++ /dev/null @@ -1,139 +0,0 @@ -(ns auto-ap.views.pages.pos.table - (:require [auto-ap.subs :as subs] - [auto-ap.routes :as routes] - [auto-ap.events :as events] - [auto-ap.views.components.buttons :as buttons] - [auto-ap.views.components.grid :as grid] - [auto-ap.views.pages.data-page :as data-page] - [auto-ap.views.pages.pos.form :as form] - [bidi.bidi :as bidi] - [cemerick.url :as url] - [auto-ap.views.components.dropdown - :refer - [drop-down drop-down-contents]] - [auto-ap.views.utils :refer [date->str nf dispatch-event-with-propagation]] - [clojure.string :as str] - [re-frame.core :as re-frame])) - -(defn row [{sales-order :sales-order - selected-client :selected-client}] - (let [{:keys [client date total tax tip charges source line-items id]} sales-order - expected-deposits (->> charges (filter :expected-deposit) (map :expected-deposit))] - [grid/row {:class (:class sales-order) :id id} - (when-not selected-client - [grid/cell {} (:name client)]) - [grid/cell {} (date->str date)] - [grid/cell {} source] - [grid/cell {:class "has-text-right"} (nf total)] - [grid/cell {:class "has-text-right"} (nf tax)] - [grid/cell {:class "has-text-right"} (nf tip)] - [grid/cell {} - [:div.level-left - (for [charge charges] - - (with-meta - (condp = (:type-name charge) - "CASH" - [:span.icon.level-item {:style {:font-size "24px"}} [:span {:class "icon-accounting-bill" :style {:font-weight "400"}}]] - - "CARD" - [:span.icon.level-item {:style {:font-size "24px"}} [:span {:class "icon-credit-card-1" :style {:font-weight "400"}}]] - - "SQUARE_GIFT_CARD" - [:span.icon.level-item {:style {:font-size "24px"}} [:span {:class "icon-gift-box" :style {:font-weight "400"}}]] - - [:span.level-item [:span (:type-name charge) (when-let [note (:note charge)] - [:span - [:i.has-text-grey " (" note ")"]])] ]) - - {:key (:id charge)}))]] - [grid/cell {} - [:div.level - [:div.level-left - (for [charge charges] - - (with-meta - (condp = (:processor charge) - :grubhub - [:img.level-item {:src "/img/grubhub.png" :style {:width "24px" :height "24px"}}] - - :doordash - [:img.level-item {:src "/img/doordash.png" :style {:width "24px" :height "24px"}}] - - :uber-eats - [:img.level-item {:src "/img/ubereats.png" :style {:width "24px" :height "24px"}}] - - :square - [:img.level-item {:src "/img/square.png" :style {:width "24px" :height "24px"}}] - - :koala - [:img.level-item {:src "/img/koala.png" :style {:width "24px" :height "24px"}}] - - :ezcater - [:img.level-item {:src "/img/ezcater.png" :style {:width "24px" :height "24px"}}] - nil) - - {:key (:id charge)}))]]] - - - [grid/cell {} (str/join ", " (map :item-name line-items))] - [grid/button-cell {} - [:div.buttons - (when (seq expected-deposits) - [:<> - [drop-down {:id [::links id] - :is-right? true - :header [buttons/fa-icon {:class "badge" - :on-click (dispatch-event-with-propagation [::events/toggle-menu [::links id]]) - :data-badge (str (clojure.core/count expected-deposits)) - :icon "fa-paperclip"}]} - [drop-down-contents - [:div.dropdown-item - [:table.table.grid.compact - [:tbody - (for [ed expected-deposits] - ^{:key (:id ed)} - [:tr - [:td - "Expected Deposit " (:id ed) - ] - [:td - [buttons/fa-icon {:icon "fa-external-link" - :href (str (bidi/path-for routes/routes :expected-deposits ) - "?" - (url/map->query {:exact-match-id (:id ed)}))}]]])]]]]] - [:span {:style {:margin-left "1em"}}]]) - - - [buttons/fa-icon {:event [::form/editing sales-order] :icon "fa-pencil"}]]]])) - -(defn table [{:keys [data-page]}] - (let [selected-client @(re-frame/subscribe [::subs/client]) - {:keys [data]} @(re-frame/subscribe [::data-page/page data-page])] - [grid/grid {:data-page data-page - :column-count (if selected-client 7 8)} - [grid/controls data - [:div.level-item - [:div.tag "Total: " (nf (:sales-order-total data))]] - [:div.level-item - [:div.tag " Tax: " (nf (:sales-order-tax data))]]] - [grid/table {:fullwidth true} - [grid/header {} - [grid/row {} - (when-not selected-client - [grid/sortable-header-cell {:sort-key "client" :sort-name "Client"} "Client"]) - [grid/sortable-header-cell {:sort-key "date" :sort-name "Date" :style {:width "8em"}} "Date"] - [grid/sortable-header-cell {:sort-key "source" :sort-name "Source"} "Source"] - [grid/sortable-header-cell {:sort-key "total" :sort-name "Total" :class "has-text-right" :style {:width "8em"}} "Total"] - [grid/sortable-header-cell {:sort-key "tax" :sort-name "Tax" :class "has-text-right" :style {:width "7em"}} "Tax"] - [grid/sortable-header-cell {:sort-key "tip" :sort-name "Tip" :class "has-text-right" :style {:width "7em"}} "Tip"] - [grid/header-cell {} "Payment Methods"] - [grid/header-cell {} "Processor"] - [grid/header-cell {} "Line Items"] - [grid/header-cell {:style {:width "8em"}}]]] - [grid/body - (for [sales-order (:data data)] - ^{:key (:id sales-order)} - [row {:sales-order sales-order - :selected-client selected-client}])]] - [grid/bottom-paginator data]])) diff --git a/src/cljs/auto_ap/views/pages/reports.cljs b/src/cljs/auto_ap/views/pages/reports.cljs deleted file mode 100644 index ac408388..00000000 --- a/src/cljs/auto_ap/views/pages/reports.cljs +++ /dev/null @@ -1,79 +0,0 @@ -(ns auto-ap.views.pages.reports - (:require - [auto-ap.subs :as subs] - [auto-ap.views.components.layouts :refer [side-bar-layout]] - [auto-ap.views.pages.data-page :as data-page] - [auto-ap.shared-views.company.sidebar - :as side-bar - :refer [company-side-bar]] - [auto-ap.views.pages.reports.table :as table] - [auto-ap.views.utils :refer [with-user]] - [clojure.set :as set] - [re-frame.core :as re-frame] - [reagent.core :as reagent] - [vimsical.re-frame.fx.track :as track])) - -(defn data-params->query-params [params] - {:start (:start params 0) - :sort (:sort params) - :per-page (:per-page params)}) - - -(re-frame/reg-event-fx - ::params-change - [with-user] - (fn [{:keys [user]} [_ params]] - {:graphql {:token user - :owns-state {:single [::data-page/page ::page]} - :query-obj {:venia/queries [[:report-page - {:filters (data-params->query-params params)} - [[:reports [:id - :name - :created - :creator - :url]] - :total - :start - :end]]]} - :on-success (fn [result] - [::data-page/received ::page (set/rename-keys (:report-page result) - {:reports :data})])}})) - -(re-frame/reg-event-fx - ::unmounted - (fn [_ _] - {:dispatch [::data-page/dispose ::page] - ::track/dispose {:id ::params}})) - -(re-frame/reg-event-fx - ::mounted - (fn [_ _] - {::track/register {:id ::params - :subscription [::data-page/params ::page] - :event-fn (fn [params] [::params-change params])}})) - - - -(defn ledger-content [] - (let [_ @(re-frame/subscribe [::subs/client])] - [:div - [:h1.title "Reports"] - [table/table {:id :reports - :data-page ::page}]])) - - -(defn reports-page [] - (let [user (re-frame/subscribe [::subs/user])] - (reagent/create-class - {:display-name "report-page" - :component-did-mount #(re-frame/dispatch [::mounted]) - :component-will-unmount #(re-frame/dispatch [::unmounted]) - :reagent-render - (fn [] - (println "ROLE" (:user/role @user)) - (if (not= "manager" (:user/role @user)) - [side-bar-layout - {:side-bar [company-side-bar {:data-page ::page}] - :main [ledger-content]}] - [:div "Not authorized"]))}))) - diff --git a/src/cljs/auto_ap/views/pages/reports/table.cljs b/src/cljs/auto_ap/views/pages/reports/table.cljs deleted file mode 100644 index 3a12cc12..00000000 --- a/src/cljs/auto_ap/views/pages/reports/table.cljs +++ /dev/null @@ -1,66 +0,0 @@ -(ns auto-ap.views.pages.reports.table - (:require - [auto-ap.status :as status] - [auto-ap.subs :as subs] - [auto-ap.views.components.buttons :as buttons] - [auto-ap.views.components.grid :as grid] - [auto-ap.views.pages.data-page :as data-page] - [auto-ap.views.utils :refer [action-cell-width date->str dispatch-event]] - [re-frame.core :as re-frame])) - -(re-frame/reg-event-fx - ::delete-report - (fn [{:keys [db]} [_ {id :id data-page :data-page}]] - {:graphql - {:token (-> db :user) - :owns-state {:single ::delete} - :query-obj {:venia/operation {:operation/type :mutation - :operation/name "DeleteReport"} - :venia/queries [{:query/data [:delete-report - {:id id} - [:message]]}]} - :on-success (fn [_] - [::data-page/updated-entity data-page {:name "deleted" - :id id}] - #_[::invoice-updated ()(:void-invoice result)])}})) - -(defn row [{{:keys [name creator created url id] :as i} :row is-admin? :is-admin? data-page :data-page}] - [:<> - [grid/row {:class (:class i) :id id} - [grid/cell {} name] - [grid/cell {} creator] - [grid/cell {} (date->str created) ] - [grid/button-cell {} - [:div.buttons - (when (not= "deleted" name) - [buttons/fa-icon {:icon "fa-external-link" - :href url}]) - (when (not= "deleted" name) - (when is-admin? - [buttons/fa-icon {:icon "fa-trash" - :on-click (dispatch-event [::delete-report {:id id :data-page data-page}])}]))]]]]) - -(defn table [{:keys [data-page]}] - (let [{:keys [data]} @(re-frame/subscribe [::data-page/page data-page]) - is-admin? @(re-frame/subscribe [::subs/is-admin?])] - [:div - [status/status-notification {:statuses [[::status/single ::delete]]}] - [grid/grid {:data-page data-page - :column-count 3} - [grid/controls data] - [grid/table {:fullwidth true :class ["wrappable"]} - [grid/header - [grid/row {} - [grid/sortable-header-cell {:sort-key "name" :sort-name "Name"} "Name"] - [grid/sortable-header-cell {:sort-key "creator" :sort-name "Created by"} "Created by"] - [grid/sortable-header-cell {:sort-key "created" :sort-name "Created" :style {:width "8em"}} "Created"] - [grid/header-cell {:style {:width (action-cell-width (if - is-admin? - 2 - 1))}}]]] - [grid/body - (for [i (:data data)] - ^{:key (:id i)} - [row {:row i :is-admin? is-admin? :data-page data-page}])]] - [grid/bottom-paginator data]]])) -