Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/Modules/FileTracking/components/Archive.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ import {
MagnifyingGlass,
ArrowClockwise,
FileText,
FolderNotch,
Folder,
} from "@phosphor-icons/react";

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This icon rename (FolderNotchFolder) is unrelated to the Central Mess module. Changes to FileTracking should go through a separate PR targeting that module.

import axios from "axios";
import { useSelector } from "react-redux";
Expand Down Expand Up @@ -224,7 +224,7 @@ export default function ArchiveFiles() {
return (
<Center style={{ height: "200px" }}>
<Stack align="center" spacing="xs">
<FolderNotch size={48} color={theme.colors.gray[5]} />
<Folder size={48} color={theme.colors.gray[5]} />
<Text c="dimmed" size="lg">
No archived files found!
</Text>
Expand Down Expand Up @@ -336,7 +336,7 @@ export default function ArchiveFiles() {
return (
<Center style={{ height: "200px" }}>
<Stack align="center" spacing="xs">
<FolderNotch size={48} color={theme.colors.gray[5]} />
<Folder size={48} color={theme.colors.gray[5]} />
<Text color="dimmed" size="lg">
No archived files found
</Text>
Expand Down
84 changes: 67 additions & 17 deletions src/Modules/Mess/components/ApplyForSpecialFood.jsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import React, { useState } from "react";
import axios from "axios";
import {
Alert,
Button,
Select,
Container,
FileInput,
Paper,
Title,
Group,
Expand All @@ -19,51 +21,67 @@ import { specialFoodRequestRoute } from "../routes";
function ApplyForSpecialFood() {
const [food, setFood] = useState("");
const [timing, setTiming] = useState("");
const [requestType, setRequestType] = useState("event");
const [medicalProof, setMedicalProof] = useState(null);
const [fromDate, setFromDate] = useState(null);
const [toDate, setToDate] = useState(null);
const [purpose, setPurpose] = useState("");
const [error, setError] = useState("");
const authToken = localStorage.getItem("authToken");
const today = new Date();
const minstartdate = new Date();
minstartdate.setDate(today.getDate() + 3);
// console.log(authToken);

const handleSubmit = async (event) => {
event.preventDefault();
setError("");

const requestData = {
start_date: fromDate.toISOString().split("T")[0],
end_date: toDate.toISOString().split("T")[0],
status: "1", // Pending status
app_date: new Date().toISOString().split("T")[0],
request: purpose,
item1: food,
item2: timing,
};
console.log(requestData);
if (!fromDate || !toDate) {
setError("Select both the start and end dates.");
return;
}

if (requestType === "medical" && !medicalProof) {
setError("Upload medical proof for illness-based requests.");
return;
}

const requestData = new FormData();
requestData.append("start_date", fromDate.toISOString().split("T")[0]);
requestData.append("end_date", toDate.toISOString().split("T")[0]);
requestData.append("status", "1");
requestData.append("app_date", new Date().toISOString().split("T")[0]);
requestData.append("request", purpose);
requestData.append("item1", food);
requestData.append("item2", timing);
requestData.append("request_type", requestType);
if (medicalProof) {
requestData.append("supporting_document", medicalProof);
}

try {
const response = await axios.post(specialFoodRequestRoute, requestData, {
headers: {
Authorization: `Token ${authToken}`,
"Content-Type": "application/json",
},
});

if (response.status === 200) {
if (response.status === 200 || response.status === 201) {
alert("Special food request submitted successfully!");
setFood("");
setTiming("");
setRequestType("event");
setMedicalProof(null);
setFromDate(null);
setToDate(null);
setPurpose("");
} else {
console.error("Failed to submit request:", response.data);
alert(`Error: ${response.data.message || "Submission failed."}`);
setError(response.data.message || "Submission failed.");
}
} catch (error) {
console.error("Error submitting request:", error);
alert(`Error: ${error.response?.data?.message || error.message}`);
} catch (submitError) {
console.error("Error submitting request:", submitError);
setError(submitError.response?.data?.message || submitError.message);
}
};

Expand All @@ -90,6 +108,12 @@ function ApplyForSpecialFood() {

<form onSubmit={handleSubmit}>
<Flex direction="column" gap="md">
{error ? (
<Alert color="red" variant="light">
{error}
</Alert>
) : null}

<Select
label="Select Food"
placeholder="Choose food"
Expand All @@ -108,6 +132,18 @@ function ApplyForSpecialFood() {
required
/>

<Select
label="Request Type"
placeholder="Choose the reason category"
data={[
{ value: "event", label: "Event" },
{ value: "medical", label: "Illness / Medical" },
]}
value={requestType}
onChange={(value) => setRequestType(value || "event")}
required
/>

<DateInput
label="From"
placeholder="Select start date"
Expand Down Expand Up @@ -135,6 +171,20 @@ function ApplyForSpecialFood() {
onChange={(event) => setPurpose(event.currentTarget.value)}
required
/>

<FileInput
label="Supporting Document"
description={
requestType === "medical"
? "Medical proof is required for illness-based requests."
: "Attach proof if your event request needs supporting approval."
}
placeholder="Upload a document"
value={medicalProof}
onChange={setMedicalProof}
clearable
required={requestType === "medical"}
/>
</Flex>

<Group position="right" mt="lg">
Expand Down
Loading