diff --git a/config/settings.yml b/config/settings.yml index 3593e7890..4cf018f7a 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -127,7 +127,7 @@ ldap-re-test-failover: 60 avs: host: "_env:AVSHOST:skytest.fra.fraport.de" - port: "_env:AVSPORT:80" + port: "_env:AVSPORT:443" user: "_env:AVSUSER:fradrive" pass: "_env:AVSPASS:" diff --git a/messages/uniworx/utils/navigation/menu/de-de-formal.msg b/messages/uniworx/utils/navigation/menu/de-de-formal.msg index 6192f9f1a..d3d7fface 100644 --- a/messages/uniworx/utils/navigation/menu/de-de-formal.msg +++ b/messages/uniworx/utils/navigation/menu/de-de-formal.msg @@ -133,6 +133,7 @@ MenuLmsUpload: Hochladen MenuLmsDirect: Direkter Upload MenuAvs: Schnitstelle AVS +MenuApc: Schnitstelle Druckerei MenuApiDocs: API-Dokumentation (Englisch) MenuSwagger !ident-ok: OpenAPI 2.0 (Swagger) \ No newline at end of file diff --git a/messages/uniworx/utils/navigation/menu/en-eu.msg b/messages/uniworx/utils/navigation/menu/en-eu.msg index b9297cb40..45a0062c3 100644 --- a/messages/uniworx/utils/navigation/menu/en-eu.msg +++ b/messages/uniworx/utils/navigation/menu/en-eu.msg @@ -134,6 +134,7 @@ MenuLmsUpload: Upload MenuLmsDirect: Direct Upload MenuAvs: AVS Interface +MenuApc: Print Center Interface MenuApiDocs: API documentation MenuSwagger: OpenAPI 2.0 (Swagger) diff --git a/routes b/routes index 4417ddf6e..b98e0b8f7 100644 --- a/routes +++ b/routes @@ -60,6 +60,7 @@ /admin/tokens AdminTokensR GET POST /admin/crontab AdminCrontabR GET /admin/avs AdminAvsR GET POST +/admin/apc AdminApcR GET POST /health HealthR GET !free /instance InstanceR GET !free diff --git a/src/Foundation/Navigation.hs b/src/Foundation/Navigation.hs index 27234cd01..34791143f 100644 --- a/src/Foundation/Navigation.hs +++ b/src/Foundation/Navigation.hs @@ -105,6 +105,7 @@ breadcrumb AdminErrMsgR = i18nCrumb MsgMenuAdminErrMsg $ Just AdminR breadcrumb AdminTokensR = i18nCrumb MsgMenuAdminTokens $ Just AdminR breadcrumb AdminCrontabR = i18nCrumb MsgBreadcrumbAdminCrontab $ Just AdminR breadcrumb AdminAvsR = i18nCrumb MsgMenuAvs $ Just AdminR +breadcrumb AdminApcR = i18nCrumb MsgMenuApc $ Just AdminR breadcrumb SchoolListR = i18nCrumb MsgMenuSchoolList $ Just AdminR breadcrumb (SchoolR ssh sRoute) = case sRoute of @@ -803,6 +804,14 @@ defaultLinks = fmap catMaybes . mapM runMaybeT $ -- Define the menu items of the , navQuick' = mempty , navForceActive = False } + , NavLink + { navLabel = MsgMenuApc + , navRoute = AdminApcR + , navAccess' = NavAccessTrue + , navType = NavTypeLink { navModal = False } + , navQuick' = mempty + , navForceActive = False + } ] } diff --git a/src/Handler/Admin.hs b/src/Handler/Admin.hs index 262223ac4..72a47ed2f 100644 --- a/src/Handler/Admin.hs +++ b/src/Handler/Admin.hs @@ -9,6 +9,7 @@ import Handler.Admin.ErrorMessage as Handler.Admin import Handler.Admin.Tokens as Handler.Admin import Handler.Admin.Crontab as Handler.Admin import Handler.Admin.Avs as Handler.Admin +import Handler.Admin.Apc as Handler.Admin getAdminR :: Handler Html getAdminR = diff --git a/src/Handler/Admin/Apc.hs b/src/Handler/Admin/Apc.hs new file mode 100644 index 000000000..bdf0ac790 --- /dev/null +++ b/src/Handler/Admin/Apc.hs @@ -0,0 +1,89 @@ +module Handler.Admin.Apc + ( getAdminApcR + , postAdminApcR + ) where + +import Import +-- import qualified Control.Monad.State.Class as State +-- import Data.Aeson (encode) +-- import qualified Data.Text as Text +-- import qualified Data.Set as Set + +-- import Handler.Utils + + +{- +makePrintForm :: Maybe AvsPersonQuery -> Form AvsPersonQuery +makeAvsPersonForm tmpl = identifyForm FIDAvsPersonQuery . validateForm validateAvsPersonQuery $ \html -> + flip (renderAForm FormStandard) html $ AvsPersonQuery + <$> aopt textField (fslI MsgAvsCardNo) (avsPersonQueryCardNo <$> tmpl) + <*> aopt textField (fslI MsgAvsFirstName) (avsPersonQueryFirstName <$> tmpl) + <*> aopt textField (fslI MsgAvsLastName) (avsPersonQueryLastName <$> tmpl) + <*> aopt textField (fslI MsgAvsInternalPersonalNo) (avsPersonQueryInternalPersonalNo <$> tmpl) + <*> aopt textField (fslI MsgAvsVersionNo) (avsPersonQueryVersionNo <$> tmpl) + +validateAvsPersonQuery :: FormValidator AvsPersonQuery Handler () +validateAvsPersonQuery = do + AvsPersonQuery{..} <- State.get + guardValidation MsgAvsQueryEmpty $ + is _Just avsPersonQueryCardNo || + is _Just avsPersonQueryFirstName || + is _Just avsPersonQueryLastName || + is _Just avsPersonQueryInternalPersonalNo || + is _Just avsPersonQueryVersionNo + +makeAvsStatusForm :: Maybe AvsStatusQuery -> Form AvsStatusQuery +makeAvsStatusForm tmpl = identifyForm FIDAvsStatusQuery . validateForm validateAvsStatusQuery $ \html -> + flip (renderAForm FormStandard) html $ + parseAvsIds <$> areq textField (fslI MsgAvsCardNo) (unparseAvsIds <$> tmpl) + where + parseAvsIds :: Text -> AvsStatusQuery + parseAvsIds txt = AvsStatusQuery $ Set.fromList ids + where + nonemptys = filter (not . Text.null) $ Text.strip <$> Text.split (==',') txt + ids = catMaybes $ readMay <$> nonemptys + unparseAvsIds :: AvsStatusQuery -> Text + unparseAvsIds (AvsStatusQuery ids) = Text.intercalate ", " $ tshow <$> Set.toAscList ids + +validateAvsStatusQuery :: FormValidator AvsStatusQuery Handler () +validateAvsStatusQuery = do + AvsStatusQuery ids <- State.get + guardValidation (MsgAvsStatusQueryInvalid $ tshow ids) $ not (null ids) +-} +getAdminApcR, postAdminApcR :: Handler Html +getAdminApcR = postAdminApcR +postAdminApcR = do + {- + ((presult, pwidget), penctype) <- runFormPost $ makeAvsPersonForm Nothing + let procFormPerson fr = do + res <- runAvsPersonSearch fr + case res of + Left err -> return $ Just err + Right jsn -> return $ Just $ tshow jsn + mbPerson <- formResultMaybe presult procFormPerson + + ((sresult, swidget), senctype) <- runFormPost $ makeAvsStatusForm Nothing + let procFormStatus fr = do + res <- runAvsStatusSearch fr + case res of + Left err -> return $ Just err + Right jsn -> return $ Just $ tshow jsn + mbStatus <- formResultMaybe sresult procFormStatus + -} + -- actionUrl <- fromMaybe AdminAvsR <$> getCurrentRoute + siteLayoutMsg MsgMenuAvs $ do + setTitleI MsgMenuApc + {- + let personForm = wrapForm pwidget def + { formAction = Just $ SomeRoute actionUrl + , formEncoding = penctype + } + statusForm = wrapForm swidget def + { formAction = Just $ SomeRoute actionUrl + , formEncoding = senctype + } + -} + let personForm = [whamlet|TODO|] + mbPerson = Just ("Not yet implemented"::Text) + -- TODO: use i18nWidgetFile instead if this is to become permanent + $(widgetFile "apc") diff --git a/src/Handler/Admin/Avs.hs b/src/Handler/Admin/Avs.hs index 5b5179921..7b8062802 100644 --- a/src/Handler/Admin/Avs.hs +++ b/src/Handler/Admin/Avs.hs @@ -40,7 +40,7 @@ makeAvsStatusForm tmpl = identifyForm FIDAvsStatusQuery . validateForm validateA where parseAvsIds :: Text -> AvsStatusQuery parseAvsIds txt = AvsStatusQuery $ Set.fromList ids - where + where nonemptys = filter (not . Text.null) $ Text.strip <$> Text.split (==',') txt ids = catMaybes $ readMay <$> nonemptys unparseAvsIds :: AvsStatusQuery -> Text diff --git a/templates/apc.hamlet b/templates/apc.hamlet new file mode 100644 index 000000000..b696a644a --- /dev/null +++ b/templates/apc.hamlet @@ -0,0 +1,8 @@ +
+

+ Print Demo: + ^{personForm} + $maybe answer <- mbPerson +

+ Unverarbeitete Antwort: # + #{answer} \ No newline at end of file