1
0
Fork 0
mirror of https://code.sup39.dev/repos/Wqawg synced 2025-01-10 16:36:46 +09:00
vervis/src/Vervis/Handler/Ticket.hs

129 lines
4.5 KiB
Haskell
Raw Normal View History

2016-05-01 07:32:22 +09:00
{- This file is part of Vervis.
-
- Written in 2016 by fr33domlover <fr33domlover@riseup.net>.
-
- Copying is an act of love. Please copy, reuse and share.
-
- The author(s) have dedicated all copyright and related and neighboring
- rights to this software to the public domain worldwide. This software is
- distributed without any warranty.
-
- You should have received a copy of the CC0 Public Domain Dedication along
- with this software. If not, see
- <http://creativecommons.org/publicdomain/zero/1.0/>.
-}
module Vervis.Handler.Ticket
( getTicketsR
, postTicketsR
, getTicketNewR
2016-05-01 08:02:44 +09:00
, getTicketR
, putTicketR
, deleteTicketR
, getTicketEditR
2016-05-01 07:32:22 +09:00
)
where
import Prelude
2016-05-01 18:58:55 +09:00
import Data.Maybe (fromMaybe)
2016-05-01 07:32:22 +09:00
import Data.Text (Text)
2016-05-01 18:58:55 +09:00
import Data.Time.Format (formatTime, defaultTimeLocale)
2016-05-01 19:15:38 +09:00
import Database.Esqueleto hiding ((==.), (+=.), update)
2016-05-01 08:02:44 +09:00
import Database.Persist
2016-05-01 07:32:22 +09:00
import Text.Blaze.Html (Html, toHtml)
2016-05-01 18:58:55 +09:00
import Yesod.Auth (requireAuthId)
2016-05-01 07:32:22 +09:00
import Yesod.Core (defaultLayout)
2016-05-01 19:15:38 +09:00
import Yesod.Core.Handler (redirectUltDest, setMessage)
2016-05-01 07:32:22 +09:00
import Yesod.Core.Widget (setTitle)
import Yesod.Form.Functions (runFormPost)
2016-05-01 19:15:38 +09:00
import Yesod.Form.Types (FormResult (..))
2016-05-01 18:58:55 +09:00
import Yesod.Persist.Core (runDB, get404, getBy404)
2016-05-01 07:32:22 +09:00
2016-05-01 18:58:55 +09:00
import qualified Data.Text as T (intercalate, pack)
import qualified Database.Esqueleto as E ((==.))
2016-05-01 07:32:22 +09:00
import Vervis.Form.Ticket
import Vervis.Foundation
import Vervis.Model
import Vervis.Settings (widgetFile)
getTicketsR :: Text -> Text -> Handler Html
2016-05-01 08:02:44 +09:00
getTicketsR shar proj = do
2016-05-01 18:58:55 +09:00
--tickets <- runDB $ do
-- Entity sid _sharer <- getBy404 $ UniqueSharerIdent shar
-- Entity pid _project <- getBy404 $ UniqueProject proj sid
-- selectList [TicketProject ==. pid] [Asc TicketNumber]
rows <- runDB $ select $ from $ \ (ticket, person, sharer) -> do
where_ $
ticket ^. TicketCreator E.==. person ^. PersonId &&.
person ^. PersonIdent E.==. sharer ^. SharerId
orderBy [asc $ ticket ^. TicketNumber]
return
( ticket ^. TicketNumber
, sharer ^. SharerIdent
, sharer ^. SharerName
, ticket ^. TicketTitle
, ticket ^. TicketDone
)
2016-05-01 08:02:44 +09:00
defaultLayout $ do
setTitle $ toHtml $ T.intercalate " :: " [shar, proj, "Tickes"]
$(widgetFile "ticket/list")
2016-05-01 07:32:22 +09:00
postTicketsR :: Text -> Text -> Handler Html
2016-05-01 19:15:38 +09:00
postTicketsR shar proj = do
Entity pid project <- runDB $ do
Entity sid _sharer <- getBy404 $ UniqueSharerIdent shar
getBy404 $ UniqueProject proj sid
let next = projectNextTicket project
author <- requireAuthId
((result, widget), enctype) <- runFormPost $ newTicketForm pid next author
case result of
FormSuccess ticket -> do
runDB $ do
update pid [ProjectNextTicket +=. 1]
insert_ ticket
setMessage "Ticket created."
redirectUltDest HomeR
FormMissing -> do
setMessage "Field(s) missing."
defaultLayout $(widgetFile "ticket/new")
FormFailure _l -> do
setMessage "Ticket creation failed, see errors below."
defaultLayout $(widgetFile "ticket/new")
2016-05-01 07:32:22 +09:00
getTicketNewR :: Text -> Text -> Handler Html
getTicketNewR shar proj = do
Entity pid project <- runDB $ do
Entity sid _sharer <- getBy404 $ UniqueSharerIdent shar
getBy404 $ UniqueProject proj sid
let next = projectNextTicket project
2016-05-01 18:58:55 +09:00
author <- requireAuthId
((_result, widget), enctype) <- runFormPost $ newTicketForm pid next author
2016-05-01 07:32:22 +09:00
defaultLayout $ do
setTitle $ toHtml $ T.intercalate " :: " [shar, proj, "New ticket"]
$(widgetFile "ticket/new")
2016-05-01 08:02:44 +09:00
getTicketR :: Text -> Text -> Int -> Handler Html
2016-05-01 18:58:55 +09:00
getTicketR shar proj num = do
(author, ticket) <- runDB $ do
Entity sid _sharer <- getBy404 $ UniqueSharerIdent shar
Entity pid _project <- getBy404 $ UniqueProject proj sid
Entity _tid ticket <- getBy404 $ UniqueTicket pid num
person <- get404 $ ticketCreator ticket
author <- get404 $ personIdent person
return (author, ticket)
defaultLayout $ do
setTitle $ toHtml $ T.intercalate " :: "
[shar, proj, "Tickets", T.pack ('#' : show num)]
$(widgetFile "ticket/one")
putTicketR :: Text -> Text -> Int -> Handler Html
putTicketR shar proj num = error "Not implemented"
deleteTicketR :: Text -> Text -> Int -> Handler Html
deleteTicketR shar proj num = error "Not implemented"
getTicketEditR :: Text -> Text -> Int -> Handler Html
getTicketEditR shar proj num = error "Not implemented"