summaryrefslogtreecommitdiff
path: root/pages/shop/order/index.fnl
diff options
context:
space:
mode:
authorunwox <me@unwox.com>2025-10-30 19:01:32 +0600
committerunwox <me@unwox.com>2025-10-30 20:36:58 +0600
commit4151e7a73ef0476b4aea5a356d391a7060b8a01c (patch)
treea576a0017fa5fa0c368d39c270a1df99b79b6014 /pages/shop/order/index.fnl
parentb06fdc9c3b4b6dc0d5d60098303dd57d5c098e13 (diff)
small improvements here and there
Diffstat (limited to 'pages/shop/order/index.fnl')
-rw-r--r--pages/shop/order/index.fnl71
1 files changed, 45 insertions, 26 deletions
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}