chore(allocation-info): extend for lecturers

Fixes #619
This commit is contained in:
Gregor Kleen 2021-06-18 15:43:46 +02:00
parent de39686d89
commit 6c12737ad9
14 changed files with 294 additions and 105 deletions

View File

@ -84,7 +84,7 @@ CsvColumnAllocationUserMatriculation: Matrikelnummer des/der Bewerbers/Bewerberi
CsvColumnAllocationUserStudyFeatures: Studiendaten
CsvColumnAllocationUserRequested: Maximale Anzahl von Plätzen, die der Bewerber bereit ist, zu akzeptieren
CsvColumnAllocationUserApplied: Anzahl von Bewerbungen, die der/die Bewerber/Bewerberin eingereicht hat
CsvColumnAllocationUserVetos: Anzahl von Bewerbungen, die von Kursverwaltern ein Veto oder eine Note erhalten haben, die äquivalent ist zu "Nicht Bestanden" (5.0)
CsvColumnAllocationUserVetos: Anzahl von Bewerbungen, die von Kursverwalter:innen ein Veto oder eine Note erhalten haben, die äquivalent ist zu "Nicht Bestanden" (5.0)
CsvColumnAllocationUserAssigned: Anzahl von Plätzen, die der/die Bewerber/Bewerberin durch diese Zentralanmeldung bereits erhalten hat
CsvColumnAllocationUserNewAssigned: Anzahl von Plätzen, die der/die Bewerber/Bewerberin, nach Akzeptieren der berechneten Verteilung, zusätzlich erhalten würde
CsvColumnAllocationUserPriority: Zentrale Dringlichkeit des/der Bewerbers/Bewerberin; entweder einzelne Zahl für Sortierungsbasierte Dringlichkeiten (höhere Dringlichkeit entspricht größerer Zahl) oder Komma-separierte Liste von numerischen Dringlichkeiten in eckigen Klammern (z.B. [1, 2, 3])
@ -127,11 +127,12 @@ AllocationRegisterFrom: Bewerbung ab
AllocationRegister: Bewerbung
AllocationRegisterClosed: Die Zentralanmeldung ist aktuell geschlossen.
AllocationRegisterOpensIn difftime@Text: Die Zentralanmeldung öffnet voraussichtlich in #{difftime}
AllocationRegisterByStaff: An- und Abmeldung durch Kursverwalter:in
AllocationRegisterByStaffFrom: An- und Abmeldung durch Kursverwalter:in ab
AllocationRegisterByStaffTo: An- und Abmeldung durch Kursverwalter:in bis
AllocationRegisterByStaff: An- und Abmeldung durch Kursverwalter:innen
AllocationRegisterByStaffFrom: An- und Abmeldung durch Kursverwalter:innen ab
AllocationRegisterByStaffTo: An- und Abmeldung durch Kursverwalter:innen bis
AllocationRegisterByStaffTip: In diesem Zeitraum können Kursverwalter:innen Teilnehmer:innen zu und von ihren Kursen an- und abmelden.
AllocationRegisterByStaffFromTip: Ab diesem Zeitpunkt können Kursverwalter:innen Teilnehmer:innen zu und von ihren Kursen an- und abmelden.
AllocationRegisterByCourse: Direkte An- und Abmeldung
AllocationRegisterByCourseFrom: Direkte An- und Abmeldung ab
AllocationRegisterByCourseFromTip: Frühestens ab diesem Zeitpunkt ist die eigentständige An- und Abmeldung zu und von den Kursen, die an der Zentralanmeldung teilnehmen, möglich. Kontrolle über die genauen Fristen haben die Kursverwalter:innen.
AllocationRegisterTo: Anmeldungen bis
@ -175,6 +176,7 @@ AllocationPrioritiesOrdinal: Dringlichkeiten durch Sortierung
AllocationUsersCsvSheetName tid@TermId ssh@SchoolId ash@AllocationShorthand: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase ash} Bewerber
AllocationApplication: Bewerbung
AllocationProcess: Platzvergabe
AllocationSubstitutesProcess: Platzvergabe an Nachrücker:innen
AllocationFormTerm: Semester
AllocationFormSchool: Institut
@ -189,7 +191,7 @@ AllocationFormStaffDescription: Beschreibung für Dozierende
AllocationFormStaffDescriptionTip: Wird nur (potentiellen) Dozierenden angezeigt; sowohl beim Anlegen eines Kurses, wie auch auf der Seite der Zentralanmeldung
AllocationFormDeadlines: Fristen
AllocationFormStaffRegisterFrom: Eintragung der Kurse ab
AllocationFormStaffRegisterFromTip: Ab diesem Zeitpunkt können Kursverwalter ihre Kurse selbstständig zur Zentralanmeldung eintragen. Falls kein Zeitpunkt angegeben wird, ist dies nie gestattet.
AllocationFormStaffRegisterFromTip: Ab diesem Zeitpunkt können Kursverwalter:innen ihre Kurse selbstständig zur Zentralanmeldung eintragen. Falls kein Zeitpunkt angegeben wird, ist dies nie gestattet.
AllocationFormStaffRegisterTo: Eintragung der Kurse bis
AllocationFormStaffRegisterToTip: Falls kein Zeitpunkt angegeben wird, ist die Eintragung zunächst für immer möglich.
AllocationFormStaffAllocationFrom: Bewertung der Bewerbungen ab

View File

@ -132,6 +132,7 @@ AllocationRegisterByStaffFrom: Enrollment by course administrators starts
AllocationRegisterByStaffTo: Enrollment by course administrators ends
AllocationRegisterByStaffTip: In this periods course administrators may enroll participants in their courses.
AllocationRegisterByStaffFromTip: Starting at this time course administrators may enroll participants in their courses.
AllocationRegisterByCourse: Direct enrollment
AllocationRegisterByCourseFrom: Direct enrollment starts
AllocationRegisterByCourseFromTip: Starting at this time course administrators participating in this central allocation may open their courses for participants to manage their participation themselves.
AllocationRegisterTo: Registration until
@ -174,6 +175,7 @@ AllocationPrioritiesOrdinal: Priorities based on sorted list
AllocationUsersCsvSheetName tid ssh ash: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase ash} Applicants
AllocationApplication: Application
AllocationProcess: Allocation process
AllocationSubstitutesProcess: Allocation of substitutes
AllocationFormTerm: Term
AllocationFormSchool: Department

View File

@ -21,7 +21,6 @@ LecturerType: Rolle
CourseLecturerRightsIdentical: Alle Sorten von Kursverwalter:innen haben identische Rechte.
CourseAllocationOption term@Text name@Text !ident-ok: #{name} (#{term})
CourseAllocationParticipate: Teilnahme an Zentralanmeldung
CourseAllocationParticipateTip: Wird an einer Zentralanmeldung teilgenommen, kann es sein, dass Sie bestimmte Rechte, die Sie normalerweise bzgl. Ihres Kurses hätten, nicht ausüben können (z.B. Studierende direkt zum Kurs anmelden, Studierende abmelden, ...).
CourseNoAllocationsAvailable: Es sind aktuell keine Zentralanmeldungen verfügbar
CourseAllocation: Zentralanmeldung
CourseAllocationMinCapacity: Minimale Teilnehmeranzahl

View File

@ -21,7 +21,6 @@ LecturerType: Role
CourseLecturerRightsIdentical: All sorts of course administrators have the same permissions.
CourseAllocationOption term name: #{name} (#{term})
CourseAllocationParticipate: Participate in central allocation
CourseAllocationParticipateTip: If a course participates in a central allocation, you might lose some permissions that you would normally have (e.g. registering students for the course directly, deregistering students, ...)
CourseNoAllocationsAvailable: There are no ongoing central allocations
CourseAllocation: Central allocation
CourseAllocationMinCapacity: Minimum number of participants

View File

@ -5,9 +5,12 @@ module Handler.Allocation.Info
import Import
import Handler.Utils
import Handler.Info (FAQItem(..))
getInfoAllocationR :: Handler Html
getInfoAllocationR =
siteLayoutMsg MsgHeadingAllocationInfo $ do
setTitleI MsgHeadingAllocationInfo
faqItemUrlAllocationNoPlaces <- toTextUrl $ FaqR :#: FAQAllocationNoPlaces
$(i18nWidgetFile "allocation-info")

View File

@ -274,7 +274,12 @@ makeCourseForm miButtonAction template = identifyForm FIDcourse . validateFormDB
<*> aopt utcTimeField (fslI MsgCourseAcceptSubstitutesUntil & setTooltip MsgCourseAcceptSubstitutesUntilTip) (fmap acfAcceptSubstitutes $ template >>= cfAllocation)
<*> apopt checkBoxField (fslI MsgCourseDeregisterNoShow & setTooltip MsgCourseDeregisterNoShowTip) ((<|> Just True) . fmap acfDeregisterNoShow $ template >>= cfAllocation)
optionalActionW' (bool mforcedJust mpopt mayChange) allocationForm' (fslI MsgCourseAllocationParticipate & setTooltip MsgCourseAllocationParticipateTip) (is _Just . cfAllocation <$> template)
let
addTip :: (MonadHandler m, HandlerSite m ~ UniWorX)
=> FieldView UniWorX -> m (FieldView UniWorX)
addTip = addFieldViewTooltipWidget $(i18nWidgetFile "allocation-participate-tip")
hoist (censorM $ traverseOf _head addTip) $ optionalActionW' (bool mforcedJust mpopt mayChange) allocationForm' (fslI MsgCourseAllocationParticipate) (is _Just . cfAllocation <$> template)
-- let autoUnzipInfo = [|Entpackt hochgeladene Zip-Dateien (*.zip) automatisch und fügt den Inhalt dem Stamm-Verzeichnis der Abgabe hinzu. TODO|]

View File

@ -62,34 +62,6 @@ getInfoR = do
changelogItems = $(i18nWidgetFiles "changelog")
getInfoLecturerR :: Handler Html
getInfoLecturerR =
siteLayoutMsg MsgInfoLecturerTitle $ do
setTitleI MsgInfoLecturerTitle
$(i18nWidgetFile "info-lecturer")
where
allocationInfo = $(i18nWidgetFile "allocation-info")
tooltipNew, tooltipProblem, tooltipPlanned, tooltipNewU2W :: WidgetFor UniWorX ()
tooltipNew = [whamlet| _{MsgLecturerInfoTooltipNew} |]
tooltipProblem = [whamlet| _{MsgLecturerInfoTooltipProblem} |]
tooltipPlanned = [whamlet| _{MsgLecturerInfoTooltipPlanned} |]
tooltipNewU2W = [whamlet| _{MsgLecturerInfoTooltipNewU2W} |]
newU2WFeat, probFeatInline, plannedFeat, plannedFeatInline :: WidgetFor UniWorX ()
newU2WFeat = [whamlet| ^{iconTooltip tooltipNewU2W (Just IconAnnounce) True} |] -- to be used inside text blocks
probFeatInline = [whamlet| ^{iconTooltip tooltipProblem (Just IconProblem) True} |] -- to be used inside text blocks
plannedFeat = [whamlet| ^{iconTooltip tooltipPlanned (Just IconPlanned) False} |]
plannedFeatInline = [whamlet| ^{iconTooltip tooltipPlanned (Just IconPlanned) True} |] -- to be used inside text blocks
-- new feature with given introduction date
newFeat :: Integer -> Int -> Int -> WidgetFor UniWorX ()
newFeat y m d = do
currentTime <- liftIO getCurrentTime
let expiryTime = UTCTime (addGregorianMonthsRollOver 1 $ fromGregorian y m d) 0
if currentTime > expiryTime
then mempty
else toWidget [whamlet| ^{iconTooltip tooltipNew (Just IconNew) False} |]
getGlossaryR :: Handler Html
getGlossaryR =
siteLayoutMsg MsgGlossaryTitle $ do
@ -218,3 +190,34 @@ prioFAQ _ FAQCourseCorrectorsTutors = return 1
prioFAQ _ FAQExamPoints = return 2
prioFAQ _ FAQAllocationNoPlaces = return 2
prioFAQ _ FAQInvalidCredentialsAdAccountDisabled = return 3
getInfoLecturerR :: Handler Html
getInfoLecturerR =
siteLayoutMsg MsgInfoLecturerTitle $ do
setTitleI MsgInfoLecturerTitle
$(i18nWidgetFile "info-lecturer")
where
allocationInfo = do
faqItemUrlAllocationNoPlaces <- toTextUrl $ FaqR :#: FAQAllocationNoPlaces
$(i18nWidgetFile "allocation-info")
tooltipNew, tooltipProblem, tooltipPlanned, tooltipNewU2W :: WidgetFor UniWorX ()
tooltipNew = [whamlet| _{MsgLecturerInfoTooltipNew} |]
tooltipProblem = [whamlet| _{MsgLecturerInfoTooltipProblem} |]
tooltipPlanned = [whamlet| _{MsgLecturerInfoTooltipPlanned} |]
tooltipNewU2W = [whamlet| _{MsgLecturerInfoTooltipNewU2W} |]
newU2WFeat, probFeatInline, plannedFeat, plannedFeatInline :: WidgetFor UniWorX ()
newU2WFeat = [whamlet| ^{iconTooltip tooltipNewU2W (Just IconAnnounce) True} |] -- to be used inside text blocks
probFeatInline = [whamlet| ^{iconTooltip tooltipProblem (Just IconProblem) True} |] -- to be used inside text blocks
plannedFeat = [whamlet| ^{iconTooltip tooltipPlanned (Just IconPlanned) False} |]
plannedFeatInline = [whamlet| ^{iconTooltip tooltipPlanned (Just IconPlanned) True} |] -- to be used inside text blocks
-- new feature with given introduction date
newFeat :: Integer -> Int -> Int -> WidgetFor UniWorX ()
newFeat y m d = do
currentTime <- liftIO getCurrentTime
let expiryTime = UTCTime (addGregorianMonthsRollOver 1 $ fromGregorian y m d) 0
if currentTime > expiryTime
then mempty
else toWidget [whamlet| ^{iconTooltip tooltipNew (Just IconNew) False} |]

View File

@ -1,5 +1,5 @@
module Handler.Utils.I18n
( i18nWidgetFile
( i18nWidgetFile, i18nHamletFile
, i18nWidgetFiles
, i18nMessage
, authorizedI18n, authenticationRequiredI18n, unauthorizedI18n
@ -22,8 +22,25 @@ import qualified Data.List.NonEmpty as NonEmpty
import qualified Data.Map as Map
import System.Directory (listDirectory)
import Text.Hamlet (hamletFile)
i18nFile :: (FilePath -> Q Exp) -> FilePath -> Q Exp
i18nFile includeFile basename = do
-- Construct list of available translations (@de@, @en@, ...) at compile time
let i18nDirectory = "templates" </> "i18n" </> basename
availableFiles <- qRunIO $ listDirectory i18nDirectory
let availableTranslations = sortWith (NTop . flip List.elemIndex (NonEmpty.toList appLanguages)) . List.nub $ pack . takeBaseName <$> availableFiles
availableTranslations' <- maybe (fail $ "" <> i18nDirectory <> " is empty") return $ NonEmpty.nonEmpty availableTranslations
-- Dispatch to correct language (depending on user settings via `selectLanguage`) at run time
ws <- newName "ws" -- Name for dispatch function
letE
[ funD ws $ [ clause [litP $ stringL l] (normalB . includeFile $ "i18n" </> basename </> l) []
| l <- unpack <$> NonEmpty.toList availableTranslations' -- One function definition for every available language
] ++ [ clause [wildP] (normalB [e| error "selectLanguage returned an invalid translation" |]) [] ] -- Fallback mostly there so compiler does not complain about non-exhaustive pattern match
] [e|selectLanguage availableTranslations' >>= $(varE ws)|]
-- | Add language dependent template files
--
-- For large files which are translated as a whole.
@ -38,20 +55,10 @@ import System.Directory (listDirectory)
-- for directories)
-- @$ stack clean@ is required so new translations show up
i18nWidgetFile :: FilePath -> Q Exp
i18nWidgetFile basename = do
-- Construct list of available translations (@de@, @en@, ...) at compile time
let i18nDirectory = "templates" </> "i18n" </> basename
availableFiles <- qRunIO $ listDirectory i18nDirectory
let availableTranslations = sortWith (NTop . flip List.elemIndex (NonEmpty.toList appLanguages)) . List.nub $ pack . takeBaseName <$> availableFiles
availableTranslations' <- maybe (fail $ "" <> i18nDirectory <> " is empty") return $ NonEmpty.nonEmpty availableTranslations
i18nWidgetFile = i18nFile widgetFile
-- Dispatch to correct language (depending on user settings via `selectLanguage`) at run time
ws <- newName "ws" -- Name for dispatch function
letE
[ funD ws $ [ clause [litP $ stringL l] (normalB . widgetFile $ "i18n" </> basename </> l) []
| l <- unpack <$> NonEmpty.toList availableTranslations' -- One function definition for every available language
] ++ [ clause [wildP] (normalB [e| error "selectLanguage returned an invalid translation" |]) [] ] -- Fallback mostly there so compiler does not complain about non-exhaustive pattern match
] [e|selectLanguage availableTranslations' >>= $(varE ws)|]
i18nHamletFile :: FilePath -> Q Exp
i18nHamletFile basename = [e|$(i18nFile (hamletFile . (<.> "hamlet")) basename) <$> getUrlRenderParams|]
i18nWidgetFiles :: FilePath -> Q Exp
i18nWidgetFiles basename = do

View File

@ -1011,14 +1011,22 @@ tellMPoint = tellM . fmap opoint
class IsWriterT t where
runWriterT' :: (Monad m, Monoid w) => t w m a -> m (a, w)
mapWriterT' :: (m (a, w) -> n (b, w')) -> t w m a -> t w' n b
instance IsWriterT Strict.WriterT where
runWriterT' = Strict.runWriterT
mapWriterT' = Strict.mapWriterT
instance IsWriterT Lazy.WriterT where
runWriterT' = Lazy.runWriterT
mapWriterT' = Lazy.mapWriterT
evalWriterT :: (IsWriterT t, Monoid w, Monad m) => t w m a -> m a
evalWriterT = fmap fst . runWriterT'
censorM :: (IsWriterT t, Monad m)
=> (w -> m w)
-> t w m a -> t w m a
censorM f = mapWriterT' (>>= \(x, w) -> (x, ) <$> f w)
-------------
-- Conduit --
-------------

View File

@ -188,6 +188,23 @@ addAutosubmit = addAttr "uw-auto-submit-input" ""
asyncSubmitAttr :: (Text,Text)
asyncSubmitAttr = ("uw-async-form", "")
---------------
-- FieldView --
---------------
addFieldViewTooltipWidget :: (MonadHandler m, Yesod (HandlerSite m))
=> WidgetFor (HandlerSite m) ()
-> FieldView (HandlerSite m) -> m (FieldView (HandlerSite m))
addFieldViewTooltipWidget wgt fv = do
renderUrl <- getUrlRenderParams
PageContent{..} <- liftHandler $ widgetToPageContent wgt
let addPC = do
when (pageTitle /= mempty) $
setTitle pageTitle
toWidgetHead $ pageHead renderUrl
return $ fv
& _fvTooltip ?~ pageBody renderUrl
& _fvInput <>~ addPC
------------------------------------------------
-- Unique Form Identifiers to avoid accidents --

View File

@ -1,84 +1,150 @@
$newline text
<p>
Jede Zentralanmeldung durchläuft
der Reihe nach folgende Phasen:
Jede Zentralanmeldung durchläuft die folgenden Phasen, idR. auch in
dieser Reihenfolge:
<dl .deflist>
<dt .deflist__dt>
_{MsgAllocationStaffRegister}
<dd .deflist__dd>
<p>
Veranstalter:innen können nur in diesem Zeitraum ihre Veranstaltungen
zur Zentralanmeldung hinzufügen oder entfernen.
Veranstalter:innen können nur in diesem Zeitraum ihre
Veranstaltungen zur Zentralanmeldung hinzufügen oder entfernen.
<p>
Pro Veranstaltung wird einzeln festgelegt,
ob Studierende einen Bewerbungstext und/oder Bewerbungsdateien
einreichen sollen.
Pro Veranstaltung wird einzeln festgelegt, ob Studierende einen
Bewerbungstext und/oder Bewerbungsdateien einreichen sollen.
Veranstalter:innen stellen auch Anweisungen zur Bewerbung ein,
z.B. welchen Inhalt abzugebende Bewerbungsdateien enthalten sollen.
z.B. welchen Inhalt abzugebende Bewerbungsdateien enthalten
sollen.
<p>
Zur Zentralanmeldung eingetragene Kurse
erlauben während dem gesamten Ablauf
der Zentralanmeldung keine anderweitigen Kursanmeldung mehr,
auch nicht durch den Veranstalter selbst.
Zur Zentralanmeldung eingetragene Kurse erlauben während dem
gesamten Ablauf der Zentralanmeldung keine anderweitige
Kursanmeldung mehr, auch nicht durch den Veranstalter selbst.
<dt .deflist__dt>
_{MsgAllocationRegister}
<dd .deflist__dd>
<p>
Studierende können sich nur in diesem Zeitraum
auf Plätze in Kursen einer Zentralanmeldung bewerben.
Studierende können sich nur in diesem Zeitraum auf Plätze in
Kursen einer Zentralanmeldung bewerben.
<p>
Bewerber:innen können jedem Kurs der Zentralanmeldung eine Priorität zuweisen,
zwischen "dieser Kurs wäre meine erste Wahl" und "diesen Kurs besuche
ich nur, wenn ich keinen anderen Platz kriege".
Bewerber:innen können jedem Kurs der Zentralanmeldung eine
Priorität zuweisen, zwischen „dieser Kurs wäre meine erste Wahl“
und “diesen Kurs besuche ich nur, wenn ich keinen anderen Platz
kriege“.
Es kann auch mehreren Kursen die gleiche Priorität eingeräumt werden.
<p>
Bewerbungen für und Prioritisierung der Kurse können innerhalb des
Bewerbungszeitraums beliebig angepasst und zurückgezogen werden.
Bewerbungen für und Prioritisierung der Kurse können innerhalb
des Bewerbungszeitraums beliebig angepasst und zurückgezogen
werden.
<p>
Studierende können auch mehr als einen Platz
in verschiedenen Kursen einer Zentralanmeldung anfordern,
falls die Kurskapazitäten und/oder Dringlichkeit ausreichend sind.
Studierende können auch mehr als einen Platz in verschiedenen
Kursen einer Zentralanmeldung anfordern, falls die
Kurskapazitäten und/oder Dringlichkeit ausreichend sind.
<p>
Bewerbungstexte und/oder Bewerbungsdateien
sind pro Kurs anzugeben, falls vom Veranstalter gefordert.
Bewerbungstexte und/oder Bewerbungsdateien sind pro Kurs
anzugeben, falls vom Veranstalter gefordert.
<p>
Während der Bewerbungsphase wird die Sichtbarkeit aller
teilnehmenden Kurse forciert.
„_{MsgCourseVisibleFrom}“ und „_{MsgCourseVisibleTo}“ werden
dementsprechend während dieser Phase ignoriert.
<dt .deflist__dt>
_{MsgAllocationStaffAllocation}
<dd .deflist__dd>
<p>
Veranstalter:innen können nur in diesem Zeitraum die
Bewerbungen einsehen und bewerten.
Veranstalter:innen können nur in diesem Zeitraum die Bewerbungen
einsehen und (optional) bewerten.
$# <p>
$# Nur in manchen Zentralanmeldungen dürfen Veranstalter:innen
$# Bewerber:innen jetzt direkt ablehnen und/oder übernehmen.
$# <p>
$# Veranstalter:innen haben noch eine letzte Möglichkeit,
$# die Kurskapazität anzupassen.
<p>
Veranstalter:innen haben noch eine letzte Möglichkeit,
die Kurskapazität anzupassen.
<dt .deflist__dt>
_{MsgAllocationProcess}
<dd .deflist__dd>
<p>
Die Plätze werden gemäß Studienfortschritt, Dringlichkeit
und der Bewertung durch den Veranstalter/die Veranstalterin auf die Bewerber:innen verteilt.
Die Plätze werden gemäß Studienfortschritt, Dringlichkeit und
der Bewertung durch die Veranstalter:innen auf die
Bewerber:innen verteilt.
Näheres zum Vergabeverfahren finden Sie auch #
<a href=#{faqItemUrlAllocationNoPlaces}>
im FAQ
.
<p>
Die Bewerber:innen werden diekt in den jeweiligen Kursen angemeldet.
Übernommene Bewerber:innen, welche einen zugeteilten Platz
ohne Angabe eines triftigen Grundes nicht antreten,
werden in zukünftigen Zentralanmeldungen
unter Umständen benachteiligt.
Die Bewerber:innen werden diekt zu den jeweiligen Kursen
angemeldet.
Übernommene Bewerber:innen, welche einen zugeteilten Platz ohne
Angabe eines triftigen Grundes nicht antreten, werden in
zukünftigen Zentralanmeldungen unter Umständen benachteiligt.
$# <p>
$# Veranstalter:innen können frühestens nach der erfolgten
$# Zuteilung Teilnehmer:innen selbst an-/abmelden und
$# ggf. Nachrücker für freigewordene Plätze anfordern.
<dt .deflist__dt>
_{MsgAllocationSubstitutesProcess}
<dd .deflist__dd>
<p>
Veranstalter:innen können frühestens nach der erfolgten Zuteilung
Teilnehmer:innen selbst an-/abmelden
und ggf. Nachrücker für freigewordene Plätze anfordern.
Systemadministratoren lösen nach der Platzvergabe gelegentlich
manuell das Verteilen von Nachrücker:innen aus.
<p>
Veranstalter:innen haben hierfür die Möglichkeit eine Frist zu
hinterlegen bis zu der sie bereit sind Nachrücker:innen in ihren
Kursen zu akzeptieren.
<p>
<em>
Achtung: #
Hinterlegen die Veranstalter:innen eines Kurses keine
Nachrückerfrist, so werden #
<em>
i.A. ohne weitere Nachfrage #
diesem Kurs keine Nachrücker:innen zugeteilt.
<dt .deflist__dt>
_{MsgAllocationRegisterByStaff}
<dd .deflist__dd>
<p>
Die direkte Anmeldung zu Kursen, die an der Zentralanmeldung
teilnehmen, wird ab Eintragung des jeweiligen Kurses zunächst
unterbunden.
<p>
Ab einem für die Zentralanmeldung eingestellten Zeitpunkt
(„_{MsgAllocationRegisterByStaffFrom}“) ist es Kursverwaltenden
wieder möglich Teilnehmer direkt zu ihren Kursen anzumelden
bzw. von ihren Kursen abzumelden.
<dt .deflist__dt>
_{MsgAllocationRegisterByCourse}
<dd .deflist__dd>
<p>
Studierende können sich ab dem Zeitpunkt
„_{MsgAllocationRegisterByCourseFrom}“ direkt zu den Kursen
anmelden.
Hierbei finden natürlich die von den Kursverwaltenden
eingestellten Regeln Anwendung.
<p>
Insbesondere sollten Veranstalter:innen daher darauf achten,
dass für ihre Kurse, trotz Teilnahme an einer Zentralanmeldung,
sinnvolle Anmeldungsfristen eingestellt sind.
<p>
In aller Regel werden alle zur Verfügung stehenden Plätze
bereits durch die zentrale Platzvergabe gefüllt.
Es ist also für Studierende nicht ratsam sich darauf zu
verlassen sich direkt anmelden zu können und daher nicht an der
Zentralvergabe teilzunehmen.
<p>
Der Ablauf einer Zentralanmeldung kann unter Umständen noch variieren.
Der Ablauf einer Zentralanmeldung kann unter Umständen noch
variieren.
<br>
<em>
Insbesondere: #
Fehlt in der Übersichtsseite einer Zentralanmeldung die Angabe einer dieser
Phasen, dann wurden die entsprechenden Zeiten noch nicht festgelegt!
Fehlt in der Übersichtsseite einer Zentralanmeldung die Angabe einer
dieser Phasen, dann wurden die entsprechenden Zeiten noch nicht
festgelegt!
<p>
Mehrere Zentralanmeldungen werden völlig unabhängig voneinander
abgewickelt.

View File

@ -1,6 +1,7 @@
$newline text
<p>
Every central allocations progresses through the following stages in order:
Every central allocations progresses through the following stages
(usually in order):
<dl .deflist>
<dt .deflist__dt>
_{MsgAllocationStaffRegister}
@ -15,7 +16,7 @@ $newline text
content the application files should have.
<p>
Courses registered for participation in the central allocation can not
gain participants through the entire course of the allocation.
gain participants throughout the entire course of the allocation.
Not even through manual enrollment by course administrators.
<dt .deflist__dt>
@ -25,21 +26,25 @@ $newline text
Only during this phase may students apply to the various courses which
participate in the central allocation.
<p>
Applicants may assign priorities ("this course would be my first choice"
down to "I will only participate in this course if nothing else is
available to me") to courses they apply to.
Applicants may assign priorities (“this course would be my first choice”
down to I will only participate in this course if nothing else is
available to me) to courses they apply to.
Multiple courses may have the same priority.
<p>
Applications and priorities may be freely edited and retracted during
the application period.
<p>
Students may request more than one placement from a central allocation.
Additional placements are made if sufficient capacity is available
and/or placements are sufficiently urgent.
<p>
Application texts and/or files need to be specified for each course
individually, as requested by the course administrators.
<p>
During the application phase courses that participate in the
central allocation are forced to be visible.
“_{MsgCourseVisibleFrom}” and “_{MsgCourseVisibleTo}” are thus
ignored during this phase.
<dt .deflist__dt>
_{MsgAllocationStaffAllocation}
@ -53,6 +58,9 @@ $newline text
$# <p>
$# Veranstalter haben noch eine letzte Möglichkeit,
$# die Kurskapazität anzupassen.
<p>
Course administrators have one last chance to edit their courses'
capacities.
<dt .deflist__dt>
_{MsgAllocationProcess}
@ -61,24 +69,73 @@ $newline text
Placements in courses are made with regard to the current study
progress, urgency, and the grading of the application as determined by a
course administrator.
Further details wrt. to the allocation process can be found #
<a href=#{faqItemUrlAllocationNoPlaces}>
in the FAQ
.
<p>
Applicants are directly enrolled in the selected courses.
Applicants which leave courses they were assigned in the course of a
central allocation may be affected negatively by this in future central
allocations.
$# <p>
$# Only after placements have been made, may course administrators enroll
$# and deregister participants of their courses.
$# Course administrators can request to be assigned successors to fill
$# their courses' remaining capacity.
<dt .deflist__dt>
_{MsgAllocationSubstitutesProcess}
<dd .deflist__dd>
<p>
Only after placements have been made, may course administrators enroll
and deregister participants of their courses.
Course administrators can request to be assigned successors to fill
their courses' remaining capacity.
System administrators occasionally trigger the distribution of
allocation places to substitute participants.
<p>
Course administrators may specify a deadline until which they
are prepared to accept substitutes for their courses.
<p>
<em>
Caution: #
If the administrators for a certain course do not specify a
deadline no substitutes will ever be assigned to that course. #
<em>
In general without consulting the course adminstrators.
<dt .deflist__dt>
_{MsgAllocationRegisterByStaff}
<dd .deflist__dd>
<p>
Direct registration to courses is prevented from the time at
which they are registered to a central allocation.
<p>
Starting with “_{MsgAllocationRegisterByStaffFrom}” course
administrators are once again permitted to add/remove
participants to and from their courses.
<dt .deflist__dt>
_{MsgAllocationRegisterByCourse}
<dd .deflist__dd>
<p>
Students can, starting with
“_{MsgAllocationRegisterByCourseFrom}”, once again register
themselves for the courses directly.
The rules specified by course administrators for direct
registration to their courses apply.
<p>
It is therefore advised that course administrators take care to
define sensible deadlines for direct registration to their
courses, even if they participate in a central allocation.
<p>
The central allocation usually fills all available places.
It is therefore not recommended that students do not participate
in the central allocation in hopes of being able to register
themselves afterwards.
<p>
Central allocation procedure may vary.
<br>
<em>
In particular: #
If, on the central allocation's page, no times are specified for one of the
phases mentioned above, the time in question has not been determined yet!
<p>

View File

@ -0,0 +1,11 @@
$newline never
Wird an einer Zentralanmeldung teilgenommen, können Sie für gewöhnlich #
bestimmte Rechte, die Sie normalerweise bzgl. Ihres Kurses hätten, #
nicht ausüben.
<br>
Details finden Sie unter: #
^{modal (toWidget (mr MsgMenuAllocationInfo)) (Left (SomeRoute InfoAllocationR))}

View File

@ -0,0 +1,10 @@
$newline never
If a course participates in a central allocation, you will usually #
lose some permissions that you would normally have.
<br>
For details see: #
^{modal (toWidget (mr MsgMenuAllocationInfo)) (Left (SomeRoute InfoAllocationR))}