This commit is contained in:
2025-12-11 23:19:43 -03:00
parent 7a9a3ba543
commit 979ef22126
3 changed files with 36 additions and 12 deletions

View File

@@ -307,6 +307,8 @@ def enroll_later(enrollment: Enrollment, context: Context):
exc_cls=DeduplicationConflictError,
)
return enrollment
def date_to_midnight(dt: date) -> datetime:
return datetime.combine(dt, time(0, 0)).replace(tzinfo=pytz.timezone(TZ))

View File

@@ -7,7 +7,8 @@ import {
CalendarIcon,
UserIcon,
BanIcon,
PlusIcon
PlusIcon,
XIcon
} from 'lucide-react'
import { Link } from 'react-router'
import { Suspense } from 'react'
@@ -46,6 +47,7 @@ import { Skeleton } from '@repo/ui/components/skeleton'
import { Await } from 'react-router'
import { Abbr } from '@repo/ui/components/abbr'
import { Button } from '@repo/ui/components/ui/button'
import { Badge } from '@repo/ui/components/ui/badge'
export function meta({}: Route.MetaArgs) {
return [{ title: 'Relatório de matrículas' }]
@@ -88,12 +90,13 @@ export default function Route({ loaderData: { data } }: Route.ComponentProps) {
</BreadcrumbList>
</Breadcrumb>
<Await resolve={data} errorElement={<NotFound />}>
{/*<Await resolve={data} errorElement={<NotFound />}>*/}
<Await resolve={data}>
{({ enrolled, scheduled, sk, created_by }) => {
const succeed = enrolled.filter(
const succeed = enrolled?.filter(
({ status }) => status === 'success'
)
const failed = enrolled.filter(({ status }) => status === 'fail')
const failed = enrolled?.filter(({ status }) => status === 'fail')
return (
<div className="lg:max-w-4xl mx-auto space-y-2.5">
@@ -156,8 +159,25 @@ export default function Route({ loaderData: { data } }: Route.ComponentProps) {
</AlertTitle>
<AlertDescription>
<ul className="list-decimal list-inside">
<li>...</li>
<li>...</li>
{scheduled.map(
({ output, input_record, status }, index) =>
status === 'success' ? (
<li className="space-x-1" key={index}>
<Abbr>{output.user.name}</Abbr>
<span>&mdash;</span>
<Abbr>{output.course.name}</Abbr>
</li>
) : (
<li className="space-x-1" key={index}>
<Abbr>{input_record.user.name}</Abbr>
<span>&mdash;</span>
<Abbr>{input_record.course.name}</Abbr>
<span className=" text-red-500 lowercase">
(Agendado anteriormente)
</span>
</li>
)
)}
</ul>
</AlertDescription>
</Alert>
@@ -174,11 +194,9 @@ export default function Route({ loaderData: { data } }: Route.ComponentProps) {
<CalendarIcon className="size-3.5" />
{formatted.format(new Date(sk))}
</li>
{created_by && (
<li>
<UserIcon className="size-3.5" /> {created_by.name}
</li>
)}
<li>
<UserIcon className="size-3.5" /> {created_by.name}
</li>
</ul>
</CardFooter>
</Card>

View File

@@ -1,4 +1,5 @@
import { z } from 'zod'
import { format } from 'date-fns'
export const MAX_ITEMS = 50
@@ -30,7 +31,10 @@ export const enrollment = z.object({
offset_days: z.number()
})
.optional(),
scheduled_for: z.date().optional()
scheduled_for: z
.date()
.optional()
.transform((date) => (date ? format(date, 'yyyy-MM-dd') : undefined))
})
export const formSchema = z.object({