diff --git a/app/models/timeEntry.server.ts b/app/models/timeEntry.server.ts index 7b35bc6..2e530b0 100644 --- a/app/models/timeEntry.server.ts +++ b/app/models/timeEntry.server.ts @@ -145,7 +145,33 @@ export function createTimeEntry({ }); } -export function stopAllTimeEntries(userId: User['id']) { +export async function updateDuration(userId: User['id']) { + const timeEntriesWithoutDuration = await prisma.timeEntry.findMany({ + where: { + userId, + endTime: { not: null }, + duration: null + } + }); + + Promise.all( + timeEntriesWithoutDuration.map( + async (entry) => + await prisma.timeEntry.update({ + where: { id: entry.id }, + data: { + duration: + (entry.endTime || new Date(Date.now())).getTime() - + entry.startTime.getTime() + } + }) + ) + ); +} + +export async function stopAllTimeEntries(userId: User['id']) { + await updateDuration(userId); + return prisma.timeEntry.updateMany({ where: { userId, endTime: null }, data: { endTime: new Date() } diff --git a/app/routes/reports.tsx b/app/routes/reports.tsx index d34cc4d..3378232 100644 --- a/app/routes/reports.tsx +++ b/app/routes/reports.tsx @@ -12,7 +12,10 @@ import { } from '@mantine/core'; import { MetaFunction, LoaderArgs, redirect, json } from '@remix-run/node'; import { Link, useFetcher, useLoaderData, useNavigate } from '@remix-run/react'; -import { getTimeEntriesByDateAndProject } from '~/models/timeEntry.server'; +import { + getTimeEntriesByDateAndProject, + updateDuration +} from '~/models/timeEntry.server'; import { getProjects, Project } from '~/models/project.server'; import { requireUserId } from '~/session.server'; import { DateRangePicker, DateRangePickerValue } from '@mantine/dates'; @@ -43,6 +46,8 @@ export async function loader({ request }: LoaderArgs) { ? dayjs(url.searchParams.get('dateTo')).toDate() : dayjs().endOf('month').toDate(); + await updateDuration(userId); + return json({ timeByProject: await getTimeEntriesByDateAndProject({ userId, diff --git a/app/routes/time-entries.tsx b/app/routes/time-entries.tsx index bf2e242..58b3ca6 100644 --- a/app/routes/time-entries.tsx +++ b/app/routes/time-entries.tsx @@ -387,11 +387,7 @@ export default function TimeEntriesPage() { {timeEntry.endTime ? (