Skip to content

Commit

Permalink
feat: add previous import listing
Browse files Browse the repository at this point in the history
  • Loading branch information
Gum-Joe committed Aug 21, 2024
1 parent 951b952 commit 457e305
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 5 deletions.
3 changes: 2 additions & 1 deletion collection/app/(app)/CSVImport.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,8 @@ const CSVImportForm: React.FC<CSVImportFormProp> = ({

startTransition(async () => {
const csvString = await values.csv[0].text();
const res = await importCsv(csvString, productId, academicYear);
const filename = values.csv[0].name;
const res = await importCsv(csvString, filename, productId, academicYear);
setFormState(res);
});
};
Expand Down
29 changes: 29 additions & 0 deletions collection/app/(app)/ImportsList.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
"use client";

import { Accordion, Paper, Stack, Title } from "@mantine/core";
import { OrderItemImport } from "@prisma/client";
import React from "react";

interface ImportsListProps {
imports: OrderItemImport[];
}

export const ImportsList: React.FC<ImportsListProps> = ({ imports }) => {
return (
<Paper p="lg" withBorder mt="xl">
<Stack>
<Title order={3}>Previous Imports</Title>
<Accordion>
{imports.map((importItem, index) => (
<Accordion.Item key={index} value={importItem.id}>
<Accordion.Control>{importItem.name}</Accordion.Control>
<Accordion.Panel>
<div>{importItem.name}</div>
</Accordion.Panel>
</Accordion.Item>
))}
</Accordion>
</Stack>
</Paper>
);
};
7 changes: 6 additions & 1 deletion collection/app/(app)/page.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
import { auth } from "@/auth";
import { getAcademicYear } from "@/lib/config";
import { getAcademicYearsInDB } from "@/lib/crud/academic-year";
import { getImportList } from "@/lib/crud/importCsv";
import { Stack, Title } from "@mantine/core";
import { redirect } from "next/navigation";
import React from "react";

import { ImportsList } from "./ImportsList";
import { UserSearch } from "./UserSearch";
import { getAcademicYearsInDB } from "@/lib/crud/academic-year";

export default async function Index() {
const session = await auth();
Expand All @@ -16,13 +18,16 @@ export default async function Index() {
const currentAcademicYear = await getAcademicYear();
const academicYears = await getAcademicYearsInDB();

const imports = await getImportList();

return (
<Stack gap="lg">
<Title order={1}>DoCSoc Collection System</Title>
<UserSearch
currentAcademicYear={currentAcademicYear}
validAcaemicYears={academicYears}
/>
<ImportsList imports={imports} />
</Stack>
);
}
28 changes: 26 additions & 2 deletions collection/lib/crud/importCsv.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,12 @@ import { StatusReturn } from "../types";

const logger = createLogger("collection.importCsv");

async function importFile(fileContents: string, itemId: number, academicYear: AcademicYear) {
async function importFile(
fileContents: string,
fileName: string,
itemId: number,
academicYear: AcademicYear,
) {
logger.info("Importing file for: ", itemId);

const iter = parse(fileContents, {
Expand All @@ -30,6 +35,15 @@ async function importFile(fileContents: string, itemId: number, academicYear: Ac

const academicYearReference = academicYearDB.year;

// 0.1: Create import
// Name: <csv file name> DD/MM/YYYY HH:MM
const importName = `${fileName} @ ${new Date().toLocaleString("en-GB")}`;
const importItem = await prisma.orderItemImport.create({
data: {
name: importName,
},
});

for await (const record of iter) {
logger.debug(`Record: ${JSON.stringify(record)}`);

Expand Down Expand Up @@ -123,6 +137,7 @@ async function importFile(fileContents: string, itemId: number, academicYear: Ac
variantId: varientDB.id,
quantity: quantity,
collected: false,
importId: importItem.id,
},
});
}
Expand All @@ -135,6 +150,7 @@ export interface CSVFormValues {

export async function importCsv(
fileContents: string,
fileName: string,
productId: number,
academicYear: AcademicYear,
): Promise<StatusReturn> {
Expand All @@ -145,7 +161,7 @@ export async function importCsv(
});

try {
await importFile(fileContents, productId, academicYear);
await importFile(fileContents, fileName, productId, academicYear);
} catch (e: any) {
return {
status: "error",
Expand All @@ -161,3 +177,11 @@ export async function importCsv(
message: `Data imported for ${product?.name} in ${academicYear}`,
};
}

export async function getImportList() {
return prisma.orderItemImport.findMany({
orderBy: {
date: "asc",
},
});
}
2 changes: 1 addition & 1 deletion collection/prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ model Order {

// Imports of data, to allow rollback
model OrderItemImport {
id String @id @default(cuid()) @db.Uuid
id String @id @default(uuid()) @db.Uuid
date DateTime @default(now())
name String
Expand Down

0 comments on commit 457e305

Please sign in to comment.