Skip to content
Snippets Groups Projects
Verified Commit f5d743bc authored by Andreas Ellewsen's avatar Andreas Ellewsen
Browse files

Mark roles expiring soon

Resolves: GREG-167
parent 64161ead
No related branches found
No related tags found
1 merge request!267Mark roles expiring soon
Pipeline #113773 passed
...@@ -91,6 +91,8 @@ ...@@ -91,6 +91,8 @@
"statusText": { "statusText": {
"active": "Active", "active": "Active",
"expired": "Expired", "expired": "Expired",
"expiring_other": "Expiring in {{count}} days",
"expiring_one": "Expiring in {{count}} day",
"waitingForGuest": "Waiting for guest", "waitingForGuest": "Waiting for guest",
"waitingForSponsor": "Needs confirmation" "waitingForSponsor": "Needs confirmation"
}, },
......
...@@ -91,6 +91,8 @@ ...@@ -91,6 +91,8 @@
"statusText": { "statusText": {
"active": "Aktiv", "active": "Aktiv",
"expired": "Utgått", "expired": "Utgått",
"expiring_other": "Utløper om {{count}} dager",
"expiring_one": "Utløper om {{count}} dag",
"waitingForGuest": "Venter på gjest", "waitingForGuest": "Venter på gjest",
"waitingForSponsor": "Trenger godkjenning" "waitingForSponsor": "Trenger godkjenning"
}, },
......
...@@ -91,6 +91,8 @@ ...@@ -91,6 +91,8 @@
"statusText": { "statusText": {
"active": "Aktiv", "active": "Aktiv",
"expired": "Utgått", "expired": "Utgått",
"expiring_other": "Utløper om {{count}} dagar",
"expiring_one": "Utløper om {{count}} dag",
"waitingForGuest": "Venter på gjest", "waitingForGuest": "Venter på gjest",
"waitingForSponsor": "Trenger godkjenning" "waitingForSponsor": "Trenger godkjenning"
}, },
......
...@@ -21,7 +21,7 @@ import Page from 'components/page' ...@@ -21,7 +21,7 @@ import Page from 'components/page'
import { useTranslation, Trans } from 'react-i18next' import { useTranslation, Trans } from 'react-i18next'
import { Link } from 'react-router-dom' import { Link } from 'react-router-dom'
import { Guest, Role } from 'interfaces' import { Guest, Role } from 'interfaces'
import { isBefore } from 'date-fns' import { differenceInDays, isBefore } from 'date-fns'
import { getRoleName, getRoleOuName } from 'utils' import { getRoleName, getRoleOuName } from 'utils'
import SponsorGuestButtons from '../../components/sponsorGuestButtons' import SponsorGuestButtons from '../../components/sponsorGuestButtons'
...@@ -35,7 +35,8 @@ interface PersonLineProps { ...@@ -35,7 +35,8 @@ interface PersonLineProps {
} }
interface StatusProps { interface StatusProps {
status: string person: Guest
role: Role
} }
interface GuestTableProps { interface GuestTableProps {
...@@ -81,8 +82,27 @@ const StyledTableHead = styled(TableHead)(({ theme }) => ({ ...@@ -81,8 +82,27 @@ const StyledTableHead = styled(TableHead)(({ theme }) => ({
borderRadius: '0', borderRadius: '0',
})) }))
const Status = ({ status }: StatusProps) => { const Status = ({ person, role }: StatusProps) => {
const today = new Date()
today.setHours(0, 0, 0, 0)
const { t } = useTranslation('common') const { t } = useTranslation('common')
let status = ''
const days = differenceInDays(role.end_date, today)
if (!person.registered) {
status = 'waitingForGuest'
} else if (person.registered && !person.verified) {
status = 'waitingForSponsor'
} else if (person.registered && person.verified) {
if (isBefore(role.end_date, today)) {
status = 'expired'
} else if (days <= 7) {
status = 'expiring'
} else {
status = 'active'
}
}
switch (status) { switch (status) {
case 'active': case 'active':
return ( return (
...@@ -108,6 +128,12 @@ const Status = ({ status }: StatusProps) => { ...@@ -108,6 +128,12 @@ const Status = ({ status }: StatusProps) => {
{t('statusText.waitingForSponsor')} {t('statusText.waitingForSponsor')}
</TableCell> </TableCell>
) )
case 'expiring':
return (
<TableCell sx={{ color: 'blue' }} align="left">
<Trans t={t} i18nKey="statusText.expiring" count={days} />
</TableCell>
)
default: default:
return ( return (
<TableCell sx={{ color: 'error.main' }} align="left"> <TableCell sx={{ color: 'error.main' }} align="left">
...@@ -119,21 +145,6 @@ const Status = ({ status }: StatusProps) => { ...@@ -119,21 +145,6 @@ const Status = ({ status }: StatusProps) => {
const PersonLine = ({ person, role }: PersonLineProps) => { const PersonLine = ({ person, role }: PersonLineProps) => {
const [t] = useTranslation(['common']) const [t] = useTranslation(['common'])
const today = new Date()
today.setHours(0, 0, 0, 0)
let status = ''
if (!person.registered) {
status = 'waitingForGuest'
} else if (person.registered && !person.verified) {
status = 'waitingForSponsor'
} else if (person.registered && person.verified) {
if (!isBefore(role.end_date, today)) {
status = 'active'
} else {
status = 'expired'
}
}
return ( return (
<StyledTableRow key={`${person.first} ${person.last}`}> <StyledTableRow key={`${person.first} ${person.last}`}>
...@@ -141,7 +152,7 @@ const PersonLine = ({ person, role }: PersonLineProps) => { ...@@ -141,7 +152,7 @@ const PersonLine = ({ person, role }: PersonLineProps) => {
{`${person.first} ${person.last}`} {`${person.first} ${person.last}`}
</TableCell> </TableCell>
<TableCell align="left">{getRoleName(role)}</TableCell> <TableCell align="left">{getRoleName(role)}</TableCell>
<Status status={status} /> <Status person={person} role={role} />
<TableCell align="left">{getRoleOuName(role)}</TableCell> <TableCell align="left">{getRoleOuName(role)}</TableCell>
<TableCell align="left"> <TableCell align="left">
<Button <Button
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment