diff options
| author | unwox <me@unwox.com> | 2025-10-30 19:01:32 +0600 |
|---|---|---|
| committer | unwox <me@unwox.com> | 2025-10-30 20:36:58 +0600 |
| commit | 4151e7a73ef0476b4aea5a356d391a7060b8a01c (patch) | |
| tree | a576a0017fa5fa0c368d39c270a1df99b79b6014 /pages/shop/order | |
| parent | b06fdc9c3b4b6dc0d5d60098303dd57d5c098e13 (diff) | |
small improvements here and there
Diffstat (limited to 'pages/shop/order')
| -rw-r--r-- | pages/shop/order/_id.fnl | 5 | ||||
| -rw-r--r-- | pages/shop/order/index.fnl | 71 |
2 files changed, 49 insertions, 27 deletions
diff --git a/pages/shop/order/_id.fnl b/pages/shop/order/_id.fnl index 5c929a3..03ec0a9 100644 --- a/pages/shop/order/_id.fnl +++ b/pages/shop/order/_id.fnl @@ -15,7 +15,10 @@ (+ sum (* v.quantity v.price-per)))) [(HTML [:aside {} - (templates.header "/shop/order" authenticated?)]) + (templates.header "/shop/order" authenticated?) + (templates.address-block) + (templates.conditions-block) + (templates.contact-block)]) (HTML [:div {:class "content"} [:div {:class "back"} [:a {:href "/shop"} "⟵ Обратно к списку"]] diff --git a/pages/shop/order/index.fnl b/pages/shop/order/index.fnl index 019b61a..35a48aa 100644 --- a/pages/shop/order/index.fnl +++ b/pages/shop/order/index.fnl @@ -4,7 +4,8 @@ (local shop (require :shop)) (local templates (require :templates)) -(local order-form +(local %page-title "Оформление заказ") +(local %order-form [{:title "" :fields [ (forms.text-input "name" "Как к вам обращаться?" true) @@ -12,21 +13,26 @@ (forms.checkbox-input "correct-order" "Данные заказа верны" true) (forms.checkbox-input "consent" (.. - "Я даю согласие " ;; "ИП «Горенкин Владислав Константинович» (ИНН ...)") - " на хранение и обработку предоставленных персональных данных для уточнения деталей заказа.") + "Я согласен с <a target=\"_blank\" href=\"/information/privacy-policy\">условиями обработки персональных данных</a>." + ;;"а также с <a target=\"_blank\" href=\"/information/offer\">нашей публичной офертой</a>." + ) true)]}]) -(fn content-template [db basket data errors] +(fn content [db basket data errors agreed-to-cookies? authenticated?] [(HTML [:aside {} (templates.header "/shop/order") - (if (< 0 (# basket)) (templates.basket basket "/shop/order") "")]) + (if (< 0 (# basket)) (templates.basket basket "/shop/order") "") + (templates.address-block) + (templates.conditions-block) + (templates.contact-block)]) (HTML [:div {:class "content"} + (if (not agreed-to-cookies?) (templates.cookies-agreement) "") [:div {:class "back"} [:a {:href "/shop"} "⟵ Обратно к списку"]] [:section {} [:h2 {} "Оформление заказа"] - (forms.render-form order-form data errors)]])]) + (forms.render-form %order-form data errors)]])]) (fn check-stocks [db basket] (var error nil) @@ -44,29 +50,42 @@ error) -(fn render [request db] - (let [order-id (shop.order-id request) +(fn render [request db authenticated?] + (let [order-id request.cookies.order + agreed-to-cookies? request.cookies.agreed-to-cookies basket (if order-id (shop.basket db order-id) [])] (if (= request.method "POST") - (let [data (forms.html-form->data order-form request.form) - stock-error (check-stocks db basket)] - (if (not stock-error) - (do - (shop.place-order db order-id data.name data.contact data.consent) - (lib.notify - (.. "Новый заказ " - "<a href=\"https://whitetoad.ru/shop/order/" order-id "\">" - order-id - "</a> от <b>" data.name "</b>.\n\n" - "<a href=\"https://whitetoad.ru/shop/order/list\">Список заказов</a>")) - ;; redirect and clear order cookie - (values 302 {:Location (.. "/shop/order/" order-id) - :Set-Cookie "order=; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT"} - "")) - (values 400 {} - (templates.base (content-template db basket data {:consent stock-error}))))) + (let [errors (forms.validate %order-form request.form) + has-errors? (not (lib.empty-table? errors))] + (if has-errors? + (values 400 {} (templates.base + (content db basket request.form errors + agreed-to-cookies? authenticated?) + %page-title)) + (let [data (forms.html-form->data %order-form request.form) + stock-error (check-stocks db basket)] + (if (not stock-error) + (do + (shop.place-order db order-id data.name data.contact data.consent) + (lib.notify + (.. "Новый заказ " + "<a href=\"https://whitetoad.ru/shop/order/" order-id "\">" + order-id + "</a> от <b>" data.name "</b>.\n\n" + "<a href=\"https://whitetoad.ru/shop/order/list\">Список заказов</a>")) + ;; redirect and clear order cookie + (values 302 {:Location (.. "/shop/order/" order-id) + :Set-Cookie "order=; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT"} + "")) + (values 400 {} + (templates.base (content db basket data {:consent stock-error} + agreed-to-cookies? authenticated?)) + %page-title))))) (if (< 0 (# basket)) - (values 200 {} (templates.base (content-template db basket {} {}))) + (values 200 {} (templates.base + (content db basket {} {} agreed-to-cookies? + authenticated?) + %page-title)) (values 302 {:Location "/shop"} ""))))) {: render} |
