From ef1d60b3b3b54d3ec4073cafb9349472f72be6c9 Mon Sep 17 00:00:00 2001 From: ciukstar Date: Fri, 13 Oct 2023 01:30:36 +0300 Subject: [PATCH] Add more demo data --- messages/en.msg | 2 + messages/fr.msg | 2 + messages/ro.msg | 2 + messages/ru.msg | 2 + src/Admin/Contacts.hs | 4 +- src/Demo/DemoDataEN.hs | 319 +++++++++++++++++- src/Handler/Requests.hs | 99 ++++-- static/img/milk-peel.avif | Bin 0 -> 9448 bytes static/img/perm.avif | Bin 0 -> 29105 bytes templates/account.cassius | 4 +- templates/admin/about/create.cassius | 3 + templates/admin/about/edit.cassius | 3 + templates/admin/business/form.cassius | 4 +- templates/admin/contacts/create.cassius | 2 + templates/admin/contacts/edit.cassius | 3 + .../admin/services/expert/create.cassius | 6 +- templates/admin/services/expert/edit.cassius | 2 + templates/admin/services/form.cassius | 2 +- templates/admin/services/offer/create.cassius | 2 + templates/admin/services/offer/edit.cassius | 2 + templates/admin/staff/create.cassius | 2 + templates/admin/staff/edit.cassius | 2 + templates/admin/staff/role/create.cassius | 2 + templates/admin/staff/role/edit.cassius | 2 + templates/appointments/hist.hamlet | 2 +- templates/book/time/form.cassius | 9 +- templates/book/time/form.hamlet | 2 +- templates/login.cassius | 4 +- templates/menu.hamlet | 8 - templates/requests/hist.hamlet | 4 +- templates/requests/requests.hamlet | 111 +++--- templates/requests/search/search.cassius | 4 +- 32 files changed, 501 insertions(+), 114 deletions(-) create mode 100644 static/img/milk-peel.avif create mode 100644 static/img/perm.avif diff --git a/messages/en.msg b/messages/en.msg index c65902a..6a6d360 100644 --- a/messages/en.msg +++ b/messages/en.msg @@ -1,3 +1,5 @@ +OnlyEmployeesMaySeeRequests: Only employees may see requests +YouAreNotAnEmployeeOfFacility: You are not an employee of this facility InvalidBusinessTimeZone: Invalid business time zone InvalidBusinessTimeZoneOffset: Invalid business time zone offset InvalidBusinessAddress: Invalid business address diff --git a/messages/fr.msg b/messages/fr.msg index 29e5f3e..d6531bd 100644 --- a/messages/fr.msg +++ b/messages/fr.msg @@ -1,3 +1,5 @@ +OnlyEmployeesMaySeeRequests: Seuls les employés peuvent voir les demandes +YouAreNotAnEmployeeOfFacility: Vous n'êtes pas un employé de cet établissement InvalidBusinessTimeZone: Fuseau horaire professionnel non valide InvalidBusinessTimeZoneOffset: Décalage de fuseau horaire professionnel non valide InvalidBusinessAddress: Adresse professionnelle invalide diff --git a/messages/ro.msg b/messages/ro.msg index fbe54cf..7249b86 100644 --- a/messages/ro.msg +++ b/messages/ro.msg @@ -1,3 +1,5 @@ +OnlyEmployeesMaySeeRequests: Doar angajații pot vedea cererile +YouAreNotAnEmployeeOfFacility: Nu sunteți angajat al acestei unități InvalidBusinessTimeZone: Fus orar al afacerii nevalid InvalidBusinessTimeZoneOffset: Compensație nevalidă de fus orar al companiei InvalidBusinessAddress: Adresa companiei nevalidă diff --git a/messages/ru.msg b/messages/ru.msg index 8258275..27486b5 100644 --- a/messages/ru.msg +++ b/messages/ru.msg @@ -1,3 +1,5 @@ +OnlyEmployeesMaySeeRequests: Запросы могут видеть только сотрудники +YouAreNotAnEmployeeOfFacility: Вы не сотрудник этого учреждения InvalidBusinessTimeZone: Неверный часовой пояс компании InvalidBusinessTimeZoneOffset: Неверное смещение часового пояса компании InvalidBusinessAddress: Неверный адрес компании diff --git a/src/Admin/Contacts.hs b/src/Admin/Contacts.hs index 492ada4..80f57d7 100644 --- a/src/Admin/Contacts.hs +++ b/src/Admin/Contacts.hs @@ -49,7 +49,7 @@ import Database.Esqueleto.Experimental ( selectOne, from, table, where_, val , (^.), (==.) ) - + import Model ( ContentsId, Contents (Contents, contentsContent) , EntityField (ContentsSection) @@ -164,7 +164,7 @@ formContacts c extra = do x <- runDB $ selectOne $ do y <- from $ table @Contents where_ $ y ^. ContentsSection ==. val section - return y + return y case x of Just _ -> return $ Left MsgAlreadyExists Nothing -> return $ Right text diff --git a/src/Demo/DemoDataEN.hs b/src/Demo/DemoDataEN.hs index c6561d1..84edd0b 100644 --- a/src/Demo/DemoDataEN.hs +++ b/src/Demo/DemoDataEN.hs @@ -103,7 +103,7 @@ populateEN = do

- +

|] } @@ -251,14 +251,14 @@ We will continue to offer the latest treatments, the most innovative techniques , userPassword = decodeUtf8 pass5 , userAdmin = False , userFullName = Just "Chris Wilson" - , userEmail = Just "cwilson@mail.en" + , userEmail = Just "cwilson@mail.uk" } e5 <- insert $ Staff { staffName = "Chris Wilson" , staffStatus = EmplStatusEmployed , staffPhone = Just "0491 570 006" , staffMobile = Just "0491 570 156" - , staffEmail = Just "cwilson@mail.en" + , staffEmail = Just "cwilson@mail.uk" , staffUser = Just u5 } @@ -404,10 +404,16 @@ We will continue to offer the latest treatments, the most innovative techniques r111 <- insert $ Role { roleStaff = e1 , roleService = s11 - , roleName = "Makeup artist" + , roleName = "Barber" , roleRating = Just 5 } + insert_ $ Role { roleStaff = e2 + , roleService = s11 + , roleName = "Barber" + , roleRating = Just 5 + } + o111 <- insert $ Offer { offerService = s11 , offerName = "Price" , offerPrice = 26 @@ -452,6 +458,18 @@ We will continue to offer the latest treatments, the most innovative techniques , roleRating = Just 3 } + insert_ $ Role { roleStaff = e3 + , roleService = s12 + , roleName = "Hairdresser" + , roleRating = Just 5 + } + + insert_ $ Role { roleStaff = e4 + , roleService = s12 + , roleName = "Hairdresser" + , roleRating = Just 5 + } + s13 <- insert $ Service { serviceName = "Women hair cuts (below shoulders)" , servicePublished = True , serviceOverview = Just "Hair cuts below shoulders for women" @@ -569,9 +587,21 @@ We will continue to offer the latest treatments, the most innovative techniques Designed by Freepik|] } + insert_ $ Role { roleStaff = e3 + , roleService = s1511 + , roleName = "Stylist" + , roleRating = Just 4 + } + + insert_ $ Role { roleStaff = e4 + , roleService = s1511 + , roleName = "Stylist" + , roleRating = Just 4 + } + insert_ $ Role { roleStaff = e5 , roleService = s1511 - , roleName = "Barber" + , roleName = "Stylist" , roleRating = Just 4 } @@ -591,6 +621,24 @@ We will continue to offer the latest treatments, the most innovative techniques , offerDescr = Nothing } + insert_ $ Role { roleStaff = e4 + , roleService = s1512 + , roleName = "Stylist" + , roleRating = Just 5 + } + + insert_ $ Role { roleStaff = e5 + , roleService = s1512 + , roleName = "Stylist" + , roleRating = Just 5 + } + + insert_ $ Role { roleStaff = e6 + , roleService = s1512 + , roleName = "Stylist" + , roleRating = Just 5 + } + insert_ $ Thumbnail { thumbnailService = s1512 , thumbnailPhoto = $(embedFile "static/img/before-perm-conditioner.avif") , thumbnailMime = "image/avif" @@ -642,6 +690,18 @@ We will continue to offer the latest treatments, the most innovative techniques , roleRating = Just 5 } + insert_ $ Role { roleStaff = e9 + , roleService = s1521 + , roleName = "Colourist" + , roleRating = Just 5 + } + + insert_ $ Role { roleStaff = e10 + , roleService = s1521 + , roleName = "Colourist" + , roleRating = Just 5 + } + s1522 <- insert $ Service { serviceName = "Partial" , servicePublished = True , serviceOverview = Just "Partial" @@ -665,6 +725,18 @@ We will continue to offer the latest treatments, the most innovative techniques Designed by Freepik|] } + insert_ $ Role { roleStaff = e10 + , roleService = s1522 + , roleName = "Colourist" + , roleRating = Just 5 + } + + insert_ $ Role { roleStaff = e11 + , roleService = s1522 + , roleName = "Colourist" + , roleRating = Just 5 + } + s1523 <- insert $ Service { serviceName = "Permanent Color" , servicePublished = True , serviceOverview = Just "Permanent Color" @@ -688,14 +760,39 @@ We will continue to offer the latest treatments, the most innovative techniques Designed by Freepik|] } + insert_ $ Role { roleStaff = e9 + , roleService = s1523 + , roleName = "Colourist" + , roleRating = Just 5 + } + + insert_ $ Role { roleStaff = e10 + , roleService = s1523 + , roleName = "Colourist" + , roleRating = Just 5 + } + + insert_ $ Role { roleStaff = e11 + , roleService = s1523 + , roleName = "Colourist" + , roleRating = Just 5 + } + s153 <- insert $ Service { serviceName = "Perm" , servicePublished = True - , serviceOverview = Just "Perm" - , serviceDescr = Just "Perm" + , serviceOverview = Just "A permanent wave" + , serviceDescr = Just "Perm is a great way to give you a new look" , serviceDuration = duration "00:45" , serviceGroup = Just s15 } + insert_ $ Thumbnail { thumbnailService = s153 + , thumbnailPhoto = $(embedFile "static/img/perm.avif") + , thumbnailMime = "image/avif" + , thumbnailAttribution = Just [shamlet| + Designed by Freepik|] + } + s1531 <- insert $ Service { serviceName = "Full Perm" , servicePublished = True , serviceOverview = Just "Full Perm" @@ -719,6 +816,24 @@ We will continue to offer the latest treatments, the most innovative techniques Designed by Freepik|] } + insert_ $ Role { roleStaff = e1 + , roleService = s1531 + , roleName = "Stylist" + , roleRating = Just 5 + } + + insert_ $ Role { roleStaff = e2 + , roleService = s1531 + , roleName = "Stylist" + , roleRating = Just 5 + } + + insert_ $ Role { roleStaff = e3 + , roleService = s1531 + , roleName = "Stylist" + , roleRating = Just 5 + } + s1532 <- insert $ Service { serviceName = "Acid Repair Perm" , servicePublished = True , serviceOverview = Just "Acid Repair Perm" @@ -742,6 +857,24 @@ We will continue to offer the latest treatments, the most innovative techniques Designed by Freepik|] } + insert_ $ Role { roleStaff = e3 + , roleService = s1532 + , roleName = "Stylist" + , roleRating = Just 5 + } + + insert_ $ Role { roleStaff = e4 + , roleService = s1532 + , roleName = "Stylist" + , roleRating = Just 5 + } + + insert_ $ Role { roleStaff = e5 + , roleService = s1532 + , roleName = "Stylist" + , roleRating = Just 5 + } + s1533 <- insert $ Service { serviceName = "Japanese Straightening Perm" , servicePublished = True , serviceOverview = Just "Japanese Straightening Perm" @@ -765,6 +898,24 @@ We will continue to offer the latest treatments, the most innovative techniques Designed by Freepik|] } + insert_ $ Role { roleStaff = e5 + , roleService = s1533 + , roleName = "Stylist" + , roleRating = Just 5 + } + + insert_ $ Role { roleStaff = e6 + , roleService = s1533 + , roleName = "Stylist" + , roleRating = Just 5 + } + + insert_ $ Role { roleStaff = e7 + , roleService = s1533 + , roleName = "Stylist" + , roleRating = Just 5 + } + s2 <- insert $ Service { serviceName = "Facial Treatments" , servicePublished = True , serviceOverview = Just "Facial Treatments" @@ -811,6 +962,18 @@ We will continue to offer the latest treatments, the most innovative techniques Designed by Freepik|] } + insert_ $ Role { roleStaff = e8 + , roleService = s21 + , roleName = "Esthetician" + , roleRating = Just 5 + } + + insert_ $ Role { roleStaff = e9 + , roleService = s21 + , roleName = "Esthetician" + , roleRating = Just 5 + } + insert_ $ Role { roleStaff = e10 , roleService = s21 , roleName = "Esthetician" @@ -848,6 +1011,24 @@ We will continue to offer the latest treatments, the most innovative techniques Designed by Freepik|] } + insert_ $ Role { roleStaff = e6 + , roleService = s22 + , roleName = "Esthetician" + , roleRating = Just 5 + } + + insert_ $ Role { roleStaff = e7 + , roleService = s22 + , roleName = "Esthetician" + , roleRating = Just 5 + } + + insert_ $ Role { roleStaff = e8 + , roleService = s22 + , roleName = "Esthetician" + , roleRating = Just 5 + } + s23 <- insert $ Service { serviceName = "Pampering Facial (90 min)" , servicePublished = True , serviceOverview = Just "Pampering Facial (90 min)" @@ -879,6 +1060,30 @@ We will continue to offer the latest treatments, the most innovative techniques Designed by Freepik|] } + insert_ $ Role { roleStaff = e3 + , roleService = s23 + , roleName = "Esthetician" + , roleRating = Just 5 + } + + insert_ $ Role { roleStaff = e4 + , roleService = s23 + , roleName = "Esthetician" + , roleRating = Just 5 + } + + insert_ $ Role { roleStaff = e5 + , roleService = s23 + , roleName = "Esthetician" + , roleRating = Just 5 + } + + insert_ $ Role { roleStaff = e6 + , roleService = s23 + , roleName = "Esthetician" + , roleRating = Just 5 + } + s24 <- insert $ Service { serviceName = "Acne Treatment (120 min)" , servicePublished = True , serviceOverview = Just "Acne Treatment (120 min)" @@ -910,6 +1115,24 @@ We will continue to offer the latest treatments, the most innovative techniques Designed by Freepik|] } + insert_ $ Role { roleStaff = e1 + , roleService = s24 + , roleName = "Esthetician" + , roleRating = Just 5 + } + + insert_ $ Role { roleStaff = e2 + , roleService = s24 + , roleName = "Esthetician" + , roleRating = Just 5 + } + + insert_ $ Role { roleStaff = e3 + , roleService = s24 + , roleName = "Esthetician" + , roleRating = Just 5 + } + s25 <- insert $ Service { serviceName = "24k Gold Whitening Treatment" , servicePublished = True , serviceOverview = Just "24k Gold Whitening Treatment" @@ -941,6 +1164,30 @@ We will continue to offer the latest treatments, the most innovative techniques Designed by Freepik|] } + insert_ $ Role { roleStaff = e9 + , roleService = s25 + , roleName = "Esthetician" + , roleRating = Just 5 + } + + insert_ $ Role { roleStaff = e10 + , roleService = s25 + , roleName = "Esthetician" + , roleRating = Just 5 + } + + insert_ $ Role { roleStaff = e11 + , roleService = s25 + , roleName = "Esthetician" + , roleRating = Just 5 + } + + insert_ $ Role { roleStaff = e1 + , roleService = s25 + , roleName = "Esthetician" + , roleRating = Just 5 + } + s3 <- insert $ Service { serviceName = "Advanced Facial Treatments" , servicePublished = True , serviceOverview = Just "Advanced Facial Treatments" @@ -956,6 +1203,64 @@ We will continue to offer the latest treatments, the most innovative techniques Designed by Freepik|] } + s31 <- insert $ Service { serviceName = "Milk Peel (90 min)" + , servicePublished = True + , serviceOverview = Just "Safe skin exfoliation" + , serviceDescr = Just $ Textarea [st| +

+Milk Peel includes a natural extract from sour milk (lactic acid), papain (enzyme from papaya), salicylic acid (from natural plants), and a special penetration controller. Milk Peel provides a safe skin exfoliation process without the side effects phenol and TCA peels can cause. +

+

+Milk Peeling Formula performs the following functions: +

+ +

+As a result, the milk peel is a powerful skin resurfacing process with substantial dermal effects. It has several skin benefits such as: +

+
    +
  1. Removing wrinkles and visible fine lines on the skin.
  2. +
  3. Diminishing pimple or acne marks.
  4. +
  5. Reducing scars.
  6. +
  7. Smoothing depressed pits on the skin.
  8. +
  9. Decreasing stretch marks and birth marks.
  10. +
  11. Polishing the skin gently for facial renewal.
  12. +
+|] + , serviceDuration = duration "01:30" + , serviceGroup = Just s3 + } + + insert_ $ Offer { offerService = s31 + , offerName = "Price" + , offerPrice = 330 + , offerPrefix = Just "$" + , offerSuffix = Nothing + , offerDescr = Nothing + } + + insert_ $ Role { roleStaff = e8 + , roleService = s31 + , roleName = "Esthetician" + , roleRating = Just 5 + } + + insert_ $ Role { roleStaff = e9 + , roleService = s31 + , roleName = "Esthetician" + , roleRating = Just 5 + } + + insert_ $ Thumbnail { thumbnailService = s31 + , thumbnailPhoto = $(embedFile "static/img/milk-peel.avif") + , thumbnailMime = "image/avif" + , thumbnailAttribution = Just [shamlet| + Designed by Freepik|] + } + s4 <- insert $ Service { serviceName = "Anti-Aging Treatments" , servicePublished = True , serviceOverview = Just "Anti-Aging Treatments" diff --git a/src/Handler/Requests.hs b/src/Handler/Requests.hs index e844740..eec9f87 100644 --- a/src/Handler/Requests.hs +++ b/src/Handler/Requests.hs @@ -69,7 +69,7 @@ import Foundation , MsgFinishAppointmentConfirm, MsgDay, MsgTimeZone, MsgMinutes, MsgContinue , MsgAppointmentTimeIsInThePast, MsgAppointmentDayIsInThePast, MsgSave , MsgNoHistoryYet, MsgAdjusted, MsgLoginBanner, MsgNoAssigneeRequestApprove - , MsgNoAssigneeRequestReschedule, MsgTimeZoneOffset + , MsgNoAssigneeRequestReschedule, MsgTimeZoneOffset, MsgYouAreNotAnEmployeeOfFacility, MsgOnlyEmployeesMaySeeRequests ) ) @@ -95,20 +95,29 @@ import Model , EntityField ( BookOffer, OfferId, OfferService, ServiceId, BookDay, BookTime , BookRole, RoleId, RoleStaff, StaffId, StaffUser, ContentsSection, BookId - , ThumbnailService, BookCustomer, UserId, BookStatus, ServiceName, ServiceDescr - , ServiceOverview, RoleName, OfferName, OfferPrefix, OfferSuffix, OfferDescr - , StaffName, StaffPhone, StaffMobile, StaffEmail, UserName, UserFullName - , UserEmail, BookTz, HistBook, HistLogtime, RoleService, HistUser, BookTzo, BookAddr + , ThumbnailService, BookCustomer, UserId, BookStatus, ServiceName + , ServiceDescr, ServiceOverview, RoleName, OfferName, OfferPrefix + , OfferSuffix, OfferDescr, StaffName, StaffPhone, StaffMobile, StaffEmail + , UserName, UserFullName, UserEmail, BookTz, HistBook, HistLogtime + , RoleService, HistUser, BookTzo, BookAddr ) ) import Menu (menu) import Handler.Contacts (section) +import Control.Monad (unless) getRequestHistR :: BookId -> Handler Html getRequestHistR bid = do user <- maybeAuth + empl <- runDB $ selectOne $ do + x <- from $ table @Staff + where_ $ case user of + Nothing -> val False + Just (Entity uid _) -> x ^. StaffUser ==. just (val uid) + return x + unless (isJust empl) $ redirect RequestsR case user of Just _ -> do hist <- runDB $ select $ do @@ -130,6 +139,14 @@ getRequestHistR bid = do getRequestRescheduleR :: BookId -> Handler Html getRequestRescheduleR bid = do + user <- maybeAuth + unless (isJust user) $ redirect RequestsR + empls <- runDB $ selectOne $ do + x <- from $ table @Staff + where_ $ case user of + Nothing -> val False + Just (Entity uid _) -> x ^. StaffUser ==. just (val uid) + unless (isJust empls) $ redirect RequestsR book <- runDB $ selectOne $ do x <- from $ table @Book where_ $ x ^. BookId ==. val bid @@ -284,6 +301,12 @@ postRequestApproveR bid = do getRequestsSearchR :: Handler Html getRequestsSearchR = do user <- maybeAuth + empl <- runDB $ selectOne $ do + x <- from $ table @Staff + where_ $ case user of + Nothing -> val False + Just (Entity uid _) -> x ^. StaffUser ==. just (val uid) + unless (isJust empl) $ redirect RequestsR setUltDestCurrent msgs <- getMessages case user of @@ -416,6 +439,14 @@ postRequestR bid = do getRequestR :: BookId -> Handler Html getRequestR bid = do stati <- reqGetParams <$> getRequest + user <- maybeAuth + unless (isJust user) $ redirect (RequestsR, stati) + empl <- runDB $ selectOne $ do + x <- from $ table @Staff + where_ $ case user of + Nothing -> val False + Just (Entity uid _) -> x ^. StaffUser ==. just (val uid) + unless (isJust empl) $ redirect (RequestsR, stati) app <- getYesod langs <- languages location <- runDB $ selectOne $ do @@ -474,34 +505,40 @@ getRequestsR = do owners <- filter ((== "assignee") . fst) . reqGetParams <$> getRequest let assignees = mapMaybe (readMaybe . unpack . snd) owners dlgAssignee <- newIdent - requests <- runDB $ select $ do - x :& _ :& s :& _ :& e <- from $ table @Book - `innerJoin` table @Offer `on` (\(x :& o) -> x ^. BookOffer ==. o ^. OfferId) - `innerJoin` table @Service `on` (\(_ :& o :& s) -> o ^. OfferService ==. s ^. ServiceId) - `leftJoin` table @Role `on` (\(x :& _ :& _ :& r) -> x ^. BookRole ==. r ?. RoleId) - `leftJoin` table @Staff `on` (\(_ :& _ :& _ :& r :& e) -> r ?. RoleStaff ==. e ?. StaffId) - - case states of - [] -> return () - xs -> where_ $ x ^. BookStatus `in_` valList xs - - let ors = [ ( AssigneesMe `elem` assignees - , e ?. StaffUser ==. just (just (val uid)) - ) - , ( AssigneesNone `elem` assignees - , isNothing_ $ e ?. StaffUser - ) - , ( AssigneesOthers `elem` assignees - , not_ (isNothing_ $ e ?. StaffUser) &&. not_ (e ?. StaffUser ==. just (just (val uid))) - ) - ] + empl <- runDB $ selectOne $ do + x <- from $ table @Staff + where_ $ x ^. StaffUser ==. just (val uid) + return x + requests <- case empl of + Nothing -> return [] + Just _ -> runDB $ select $ do + x :& _ :& s :& _ :& e <- from $ table @Book + `innerJoin` table @Offer `on` (\(x :& o) -> x ^. BookOffer ==. o ^. OfferId) + `innerJoin` table @Service `on` (\(_ :& o :& s) -> o ^. OfferService ==. s ^. ServiceId) + `leftJoin` table @Role `on` (\(x :& _ :& _ :& r) -> x ^. BookRole ==. r ?. RoleId) + `leftJoin` table @Staff `on` (\(_ :& _ :& _ :& r :& e) -> r ?. RoleStaff ==. e ?. StaffId) + + case states of + [] -> return () + xs -> where_ $ x ^. BookStatus `in_` valList xs + + let ors = [ ( AssigneesMe `elem` assignees + , e ?. StaffUser ==. just (just (val uid)) + ) + , ( AssigneesNone `elem` assignees + , isNothing_ $ e ?. StaffUser + ) + , ( AssigneesOthers `elem` assignees + , not_ (isNothing_ $ e ?. StaffUser) &&. not_ (e ?. StaffUser ==. just (just (val uid))) + ) + ] - case snd <$> filter fst ors of - [] -> return () - xs -> where_ $ foldr (||.) (val False) xs + case snd <$> filter fst ors of + [] -> return () + xs -> where_ $ foldr (||.) (val False) xs - orderBy [desc (x ^. BookDay), desc (x ^. BookTime)] - return (x,s) + orderBy [desc (x ^. BookDay), desc (x ^. BookTime)] + return (x,s) defaultLayout $ do setTitleI MsgRequests $(widgetFile "requests/requests") diff --git a/static/img/milk-peel.avif b/static/img/milk-peel.avif new file mode 100644 index 0000000000000000000000000000000000000000..be4f5bd25ade7f71966c89fb94c6b3d5f75eb695 GIT binary patch literal 9448 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 literal 0 HcmV?d00001 diff --git a/templates/account.cassius b/templates/account.cassius index b2e045b..503a5a2 100644 --- a/templates/account.cassius +++ b/templates/account.cassius @@ -16,9 +16,9 @@ main flex-direction: column .mdc-text-field input.mdc-text-field__input - caret-color: var(--mdc-theme-text-primary-on-background) + caret-color: var(--theme-accent) div.actions display: flex flex-direction: row justify-content: flex-end - gap: 0.5rem \ No newline at end of file + gap: 0.5rem diff --git a/templates/admin/about/create.cassius b/templates/admin/about/create.cassius index fe25a31..e94ac04 100644 --- a/templates/admin/about/create.cassius +++ b/templates/admin/about/create.cassius @@ -1,3 +1,4 @@ + main margin: 0 1rem form @@ -5,6 +6,8 @@ main display: flex flex-direction: column margin-bottom: 1rem + .mdc-text-field .mdc-text-field__input + caret-color: var(--theme-accent) div.form-actions display: flex flex-direction: row diff --git a/templates/admin/about/edit.cassius b/templates/admin/about/edit.cassius index 9051545..92c4d6f 100644 --- a/templates/admin/about/edit.cassius +++ b/templates/admin/about/edit.cassius @@ -1,3 +1,4 @@ + main margin: 0 1rem form @@ -5,6 +6,8 @@ main display: flex flex-direction: column margin-bottom: 1rem + .mdc-text-field .mdc-text-field__input + caret-color: var(--theme-accent) div.form-actions display: flex flex-direction: row diff --git a/templates/admin/business/form.cassius b/templates/admin/business/form.cassius index 48ec519..42d7de7 100644 --- a/templates/admin/business/form.cassius +++ b/templates/admin/business/form.cassius @@ -5,9 +5,9 @@ form flex-direction: column margin-bottom: 1rem .mdc-text-field__input - caret-color: var(---mdc-theme-text-primary-on-light) + caret-color: var(--theme-accent) div.form-actions display: flex flex-direction: row justify-content: flex-end - gap: 0.5rem \ No newline at end of file + gap: 0.5rem diff --git a/templates/admin/contacts/create.cassius b/templates/admin/contacts/create.cassius index fe25a31..ffe177a 100644 --- a/templates/admin/contacts/create.cassius +++ b/templates/admin/contacts/create.cassius @@ -5,6 +5,8 @@ main display: flex flex-direction: column margin-bottom: 1rem + .mdc-text-field .mdc-text-field__input + caret-color: var(--theme-accent) div.form-actions display: flex flex-direction: row diff --git a/templates/admin/contacts/edit.cassius b/templates/admin/contacts/edit.cassius index 9051545..92c4d6f 100644 --- a/templates/admin/contacts/edit.cassius +++ b/templates/admin/contacts/edit.cassius @@ -1,3 +1,4 @@ + main margin: 0 1rem form @@ -5,6 +6,8 @@ main display: flex flex-direction: column margin-bottom: 1rem + .mdc-text-field .mdc-text-field__input + caret-color: var(--theme-accent) div.form-actions display: flex flex-direction: row diff --git a/templates/admin/services/expert/create.cassius b/templates/admin/services/expert/create.cassius index 9e8f999..e7e310b 100644 --- a/templates/admin/services/expert/create.cassius +++ b/templates/admin/services/expert/create.cassius @@ -8,11 +8,11 @@ main display: flex flex-direction: column margin-bottom: 1rem - input.mdc-text-field__input - caret-color: var(--mdc-theme-text-primary-on-light) + .mdc-text-field .mdc-text-field__input + caret-color: var(--theme-accent) div.form-actions display: flex flex-direction: row justify-content: flex-end gap: 0.5rem - \ No newline at end of file + diff --git a/templates/admin/services/expert/edit.cassius b/templates/admin/services/expert/edit.cassius index f1d7cb2..2bd69cd 100644 --- a/templates/admin/services/expert/edit.cassius +++ b/templates/admin/services/expert/edit.cassius @@ -8,6 +8,8 @@ main display: flex flex-direction: column margin-bottom: 1rem + .mdc-text-field .mdc-text-field__input + caret-color: var(--theme-accent) div.form-actions display: flex flex-direction: row diff --git a/templates/admin/services/form.cassius b/templates/admin/services/form.cassius index 25f8715..50d71ec 100644 --- a/templates/admin/services/form.cassius +++ b/templates/admin/services/form.cassius @@ -11,4 +11,4 @@ border-color: var(--theme-accent,#018786) .mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input - caret-color: var(--theme-accent,#018786) \ No newline at end of file + caret-color: var(--theme-accent) diff --git a/templates/admin/services/offer/create.cassius b/templates/admin/services/offer/create.cassius index 5630b29..6d21566 100644 --- a/templates/admin/services/offer/create.cassius +++ b/templates/admin/services/offer/create.cassius @@ -11,6 +11,8 @@ main div.form-field display: flex flex-direction: column + .mdc-text-field .mdc-text-field__input + caret-color: var(--theme-accent) div.actions display: flex flex-direction: row diff --git a/templates/admin/services/offer/edit.cassius b/templates/admin/services/offer/edit.cassius index 5630b29..6d21566 100644 --- a/templates/admin/services/offer/edit.cassius +++ b/templates/admin/services/offer/edit.cassius @@ -11,6 +11,8 @@ main div.form-field display: flex flex-direction: column + .mdc-text-field .mdc-text-field__input + caret-color: var(--theme-accent) div.actions display: flex flex-direction: row diff --git a/templates/admin/staff/create.cassius b/templates/admin/staff/create.cassius index f3d63e3..43f5953 100644 --- a/templates/admin/staff/create.cassius +++ b/templates/admin/staff/create.cassius @@ -10,6 +10,8 @@ main margin-bottom: 1rem display: flex flex-direction: column + .mdc-text-field .mdc-text-field__input + caret-color: var(--theme-accent) div.form-actions display: flex flex-direction: row diff --git a/templates/admin/staff/edit.cassius b/templates/admin/staff/edit.cassius index f3d63e3..43f5953 100644 --- a/templates/admin/staff/edit.cassius +++ b/templates/admin/staff/edit.cassius @@ -10,6 +10,8 @@ main margin-bottom: 1rem display: flex flex-direction: column + .mdc-text-field .mdc-text-field__input + caret-color: var(--theme-accent) div.form-actions display: flex flex-direction: row diff --git a/templates/admin/staff/role/create.cassius b/templates/admin/staff/role/create.cassius index f1d7cb2..2bd69cd 100644 --- a/templates/admin/staff/role/create.cassius +++ b/templates/admin/staff/role/create.cassius @@ -8,6 +8,8 @@ main display: flex flex-direction: column margin-bottom: 1rem + .mdc-text-field .mdc-text-field__input + caret-color: var(--theme-accent) div.form-actions display: flex flex-direction: row diff --git a/templates/admin/staff/role/edit.cassius b/templates/admin/staff/role/edit.cassius index f1d7cb2..2bd69cd 100644 --- a/templates/admin/staff/role/edit.cassius +++ b/templates/admin/staff/role/edit.cassius @@ -8,6 +8,8 @@ main display: flex flex-direction: column margin-bottom: 1rem + .mdc-text-field .mdc-text-field__input + caret-color: var(--theme-accent) div.form-actions display: flex flex-direction: row diff --git a/templates/appointments/hist.hamlet b/templates/appointments/hist.hamlet index 4c21f3b..4a76b1a 100644 --- a/templates/appointments/hist.hamlet +++ b/templates/appointments/hist.hamlet @@ -25,7 +25,7 @@ #{icon} - $with dt <- formatTime defaultTimeLocale "%Y-%m-%d %H:%M:%S" logtime + $with dt <- formatTime defaultTimeLocale "%Y-%m-%d %H:%M:%S%z" logtime #{dt} diff --git a/templates/book/time/form.cassius b/templates/book/time/form.cassius index de4dc6f..c772f5c 100644 --- a/templates/book/time/form.cassius +++ b/templates/book/time/form.cassius @@ -9,7 +9,7 @@ flex-direction: column .mdc-text-field input.mdc-text-field__input - caret-color: var(--mdc-theme-text-primary-on-background) + caret-color: var(--theme-accent) ##{detailsLocation} div.form-field @@ -20,7 +20,10 @@ text-transform: lowercase .mdc-text-field input.mdc-text-field__input - caret-color: var(--mdc-theme-text-primary-on-background) + caret-color: var(--theme-accent) + textarea[readonly], input[readonly] + pointer-events: none + color: var(--mdc-theme-text-disabled-on-light) ##{detailsStaff}, ##{detailsServices} div.mdc-list-item__primary-text @@ -32,4 +35,4 @@ padding: 2px 4px line-height: 1 border-radius: 25% - background-color: var(--mdc-theme-primary) \ No newline at end of file + background-color: var(--mdc-theme-primary) diff --git a/templates/book/time/form.hamlet b/templates/book/time/form.hamlet index 003fb4a..0f768fa 100644 --- a/templates/book/time/form.hamlet +++ b/templates/book/time/form.hamlet @@ -21,7 +21,7 @@ #{errs} diff --git a/templates/login.cassius b/templates/login.cassius index dd6534d..8d6904d 100644 --- a/templates/login.cassius +++ b/templates/login.cassius @@ -12,7 +12,7 @@ main gap: 1rem .mdc-text-field input.mdc-text-field__input - caret-color: var(--mdc-theme-text-primary-on-background) + caret-color: var(--theme-accent) #btnLogin margin: 1rem 0 @@ -44,4 +44,4 @@ div.mdc-dialog width: 100% opacity: 0.6 div.mdc-dialog__actions - gap: 1rem \ No newline at end of file + gap: 1rem diff --git a/templates/menu.hamlet b/templates/menu.hamlet index d1720be..42939ab 100644 --- a/templates/menu.hamlet +++ b/templates/menu.hamlet @@ -54,14 +54,6 @@ free_cancellation _{MsgRequests} - - - calendar_month - _{MsgCalendar} - #{icon} - $with dt <- formatTime defaultTimeLocale "%Y-%m-%d %H:%M:%S" logtime - + $with dt <- formatTime defaultTimeLocale "%Y-%m-%d %H:%M:%S%z" logtime + #{dt} $maybe fname <- fname diff --git a/templates/requests/requests.hamlet b/templates/requests/requests.hamlet index 7097ed8..9bd9399 100644 --- a/templates/requests/requests.hamlet +++ b/templates/requests/requests.hamlet @@ -30,59 +30,76 @@ -
- - - - _{MsgStatus} - $if null states - arrow_drop_down - $else - counter_#{show (length states)} - - - - - _{MsgAssignee} - $if null assignees - arrow_drop_down - $else - counter_#{show (length assignees)} + $maybe _ <- empl +
+ + + + _{MsgStatus} + $if null states + arrow_drop_down + $else + counter_#{show (length states)} + + + + + _{MsgAssignee} + $if null assignees + arrow_drop_down + $else + counter_#{show (length assignees)} - $if null requests + $if null requests +
+ ∅ +
+

_{MsgNoPendingRequestsYet}. + + + + _{MsgShowAll} + $else + + $forall (Entity bid (Book _ _ _ date time _ _ _ status),Entity _ (Service sname _ _ _ _ _)) <- requests + $with (color,icon,msg) <- resolve status + + + + #{icon} + + + #{show date} #{show time} + + #{sname} + + _{msg} + + arrow_forward_ios + + $nothing

-

_{MsgNoPendingRequestsYet}. - +

+ _{MsgNoRequestsFound}. +

+ + _{MsgYouAreNotAnEmployeeOfFacility}. +
+ + _{MsgOnlyEmployeesMaySeeRequests}. + - _{MsgShowAll} - $else - - $forall (Entity bid (Book _ _ _ date time _ _ _ status),Entity _ (Service sname _ _ _ _ _)) <- requests - $with (color,icon,msg) <- resolve status - - - - #{icon} - - - #{show date} #{show time} - - #{sname} - - _{msg} - - arrow_forward_ios - + _{MsgLogin} $forall (_,msg) <- msgs diff --git a/templates/requests/search/search.cassius b/templates/requests/search/search.cassius index 2eb308e..a79c2bf 100644 --- a/templates/requests/search/search.cassius +++ b/templates/requests/search/search.cassius @@ -4,7 +4,7 @@ header width: 100% border-radius: 0 input[type=search] - caret-color: var(--mdc-theme-on-background) + caret-color: var(--theme-accent) .mdc-line-ripple.mdc-line-ripple--active::before border-bottom-color: var(--theme-accent) main @@ -49,4 +49,4 @@ div.mdc-dialog flex-direction: column div.mdc-dialog__actions margin: 0 1rem 1rem 0 - gap: 0.5rem \ No newline at end of file + gap: 0.5rem