From 93768f4d4a893e5e76954dcef0d5df5656c774c5 Mon Sep 17 00:00:00 2001 From: sopheedaire Date: Sat, 6 Jan 2024 11:44:46 +0800 Subject: [PATCH 01/28] Add styles for student --- .../StatusTextColor/StatusTextColor.tsx | 2 +- .../TransactionEntry/TransactionEntry.tsx | 241 ++++++++---------- src/Pages/DashboardPage/DashboardPage.tsx | 2 +- src/styles.tsx | 38 +++ 4 files changed, 141 insertions(+), 142 deletions(-) diff --git a/src/Components/StatusTextColor/StatusTextColor.tsx b/src/Components/StatusTextColor/StatusTextColor.tsx index 17695fb..4354cff 100644 --- a/src/Components/StatusTextColor/StatusTextColor.tsx +++ b/src/Components/StatusTextColor/StatusTextColor.tsx @@ -11,7 +11,7 @@ export default function StatusTextColor(status: string) { status === "Finalized" || status === "Borrowed" ) { - return colors.green; + return colors.dark_green; } else { return colors.red; } diff --git a/src/Components/TransactionEntry/TransactionEntry.tsx b/src/Components/TransactionEntry/TransactionEntry.tsx index ca8e9d5..2a47bff 100644 --- a/src/Components/TransactionEntry/TransactionEntry.tsx +++ b/src/Components/TransactionEntry/TransactionEntry.tsx @@ -2,174 +2,135 @@ import styles from "../../styles"; import { colors } from "../../styles"; import { TransactionType } from "../Types/Types"; import StatusTextColor from "../StatusTextColor/StatusTextColor"; +import CircleSharpIcon from '@mui/icons-material/CircleSharp'; export interface props { transaction: TransactionType; onClick?: React.MouseEventHandler; -} + + +} export default function TransactionEntry(props: props) { + + return ( ); } diff --git a/src/Pages/DashboardPage/DashboardPage.tsx b/src/Pages/DashboardPage/DashboardPage.tsx index 89ce800..11f01e2 100644 --- a/src/Pages/DashboardPage/DashboardPage.tsx +++ b/src/Pages/DashboardPage/DashboardPage.tsx @@ -19,7 +19,7 @@ export default function Dashboard() {
Date: Sat, 6 Jan 2024 14:45:24 +0800 Subject: [PATCH 02/28] student styles --- .../Student/StudentDashboard.tsx | 35 ++++++++----------- .../Student/StudentTransactionListView.tsx | 10 ++++-- src/Pages/DashboardPage/DashboardPage.tsx | 3 +- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/Components/DashboardPage/Student/StudentDashboard.tsx b/src/Components/DashboardPage/Student/StudentDashboard.tsx index 702e93f..24fbc03 100644 --- a/src/Components/DashboardPage/Student/StudentDashboard.tsx +++ b/src/Components/DashboardPage/Student/StudentDashboard.tsx @@ -7,21 +7,19 @@ export default function StudentDashboard() { const navigate = useNavigate(); return (
-

- Student Actions -

+
@@ -32,28 +30,25 @@ export default function StudentDashboard() { alignSelf: "center", justifyContent: "center", flexWrap: "wrap", + backgroundColor: "#CCDDFF", + paddingInline: "90px", + borderRadius: "20px" }, }} onClick={() => { navigate("/new/transaction"); }} > - +

- New Transaction + CLICK TO REQUEST BORROW ITEMS

diff --git a/src/Components/DashboardPage/Student/StudentTransactionListView.tsx b/src/Components/DashboardPage/Student/StudentTransactionListView.tsx index 7917ec8..ef08e2c 100644 --- a/src/Components/DashboardPage/Student/StudentTransactionListView.tsx +++ b/src/Components/DashboardPage/Student/StudentTransactionListView.tsx @@ -39,14 +39,18 @@ export default function StudentTransactionListView() { ); } return ( -
-
+
+
{transactions.data ? ( diff --git a/src/Pages/DashboardPage/DashboardPage.tsx b/src/Pages/DashboardPage/DashboardPage.tsx index 11f01e2..4f493d9 100644 --- a/src/Pages/DashboardPage/DashboardPage.tsx +++ b/src/Pages/DashboardPage/DashboardPage.tsx @@ -28,8 +28,9 @@ export default function Dashboard() { }, }} > - + +
From 8bc97608346ccf0b12c8bcd64e0284ffd0cc8cb7 Mon Sep 17 00:00:00 2001 From: Jerilyn Yare <102701655+Jy-re@users.noreply.github.com> Date: Sat, 6 Jan 2024 15:22:30 +0800 Subject: [PATCH 03/28] fixed redundant labels, margins and alignments --- .../AddTransactionPage/AddTransactionPage.tsx | 25 ++++++++----------- src/styles.tsx | 8 ++++++ 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/Pages/AddTransactionPage/AddTransactionPage.tsx b/src/Pages/AddTransactionPage/AddTransactionPage.tsx index d088a53..4b698f9 100644 --- a/src/Pages/AddTransactionPage/AddTransactionPage.tsx +++ b/src/Pages/AddTransactionPage/AddTransactionPage.tsx @@ -121,12 +121,12 @@ export default function AddTransactionPage() { marginRight: "1rem", }} /> -

New Transaction

+

Borrowing Form

-
+
- Items Requested + Items Requested - Assigned Teacher + Assigned Teacher - Subject + Subject ) => { SetTransaction({ ...transaction, subject: e.target.value }); setError(""); }} - label={"Subject"} value={transaction.subject} placeholder={"The subject requiring the equipments"} /> - Remarks + Remarks - Consumables + Consumables - Additional Members + Additional Members Date: Sat, 6 Jan 2024 15:26:03 +0800 Subject: [PATCH 04/28] transferred buttons --- .../Technician/TechnicianEquipmentButtons.tsx | 12 +- .../EquipmentInstancesListPage.tsx | 132 ++++++++++++++++++ 2 files changed, 138 insertions(+), 6 deletions(-) diff --git a/src/Components/DashboardPage/Technician/TechnicianEquipmentButtons.tsx b/src/Components/DashboardPage/Technician/TechnicianEquipmentButtons.tsx index 094289d..27225da 100644 --- a/src/Components/DashboardPage/Technician/TechnicianEquipmentButtons.tsx +++ b/src/Components/DashboardPage/Technician/TechnicianEquipmentButtons.tsx @@ -68,7 +68,7 @@ export default function TechnicianEquipmentButtons() { View All

- + */} - + */}
- SetAddItemModalOpen(false)} modal @@ -304,7 +304,7 @@ export default function TechnicianEquipmentButtons() { }} > - + */} ); } diff --git a/src/Pages/EquipmentInstancesListPage/EquipmentInstancesListPage.tsx b/src/Pages/EquipmentInstancesListPage/EquipmentInstancesListPage.tsx index 432b58a..f875f95 100644 --- a/src/Pages/EquipmentInstancesListPage/EquipmentInstancesListPage.tsx +++ b/src/Pages/EquipmentInstancesListPage/EquipmentInstancesListPage.tsx @@ -16,10 +16,23 @@ import { useState } from "react"; import Popup from "reactjs-popup"; import Autocomplete from "@mui/material/Autocomplete"; import SearchIcon from "@mui/icons-material/Search"; +import AddItemModal from "../../Components/AddItemModal/AddItemModal"; +import AddToQueueIcon from "@mui/icons-material/AddToQueue"; +import ScienceIcon from "@mui/icons-material/Science"; +import ColorizeIcon from "@mui/icons-material/Colorize"; + +import { Button } from "@mui/material"; +import { useNavigate } from "react-router-dom"; + + export default function EquipmentInstancesListPage() { const [editmodalOpen, SetEditModalOpen] = useState(false); const [selectedItem, SetSelectedItem] = useState(0); + const [additemmodalOpen, SetAddItemModalOpen] = useState(false); + + const navigate = useNavigate(); + const equipment_instances = useQuery({ queryKey: ["equipment_instances"], queryFn: EquipmentInstancesAPI, @@ -54,6 +67,9 @@ export default function EquipmentInstancesListPage() { } return (
+ + +
+ {/* ADDED/INSERTED BUTTON,POPUP, TWO CATEGORY BUTTONS*/} + + + SetAddItemModalOpen(false)} + modal + position={"top center"} + contentStyle={{ + width: "32rem", + borderRadius: 16, + borderColor: "grey", + borderStyle: "solid", + borderWidth: 1, + padding: 16, + alignContent: "center", + justifyContent: "center", + textAlign: "center", + }} + > + + + + + +
Date: Sat, 6 Jan 2024 15:37:07 +0800 Subject: [PATCH 05/28] fixed scrollbars --- src/index.css | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/index.css b/src/index.css index 2c3fac6..b2acf00 100644 --- a/src/index.css +++ b/src/index.css @@ -14,6 +14,21 @@ -webkit-text-size-adjust: 100%; } +/* width */ +::-webkit-scrollbar { + width: 5px; +} + +/* Track */ +::-webkit-scrollbar-track { + background: none; +} + +/* Handle */ +::-webkit-scrollbar-thumb { + background: #888; +} + a { font-weight: 500; color: #646cff; From 675a1f0716fff2dba43e36b44ca766c8d120c67a Mon Sep 17 00:00:00 2001 From: psofia Date: Sat, 6 Jan 2024 15:40:12 +0800 Subject: [PATCH 06/28] transferred skus --- .../Technician/TechnicianEquipmentButtons.tsx | 8 +-- .../EquipmentListPage/EquipmentListPage.tsx | 62 +++++++++++++++++++ 2 files changed, 66 insertions(+), 4 deletions(-) diff --git a/src/Components/DashboardPage/Technician/TechnicianEquipmentButtons.tsx b/src/Components/DashboardPage/Technician/TechnicianEquipmentButtons.tsx index 27225da..c944e3a 100644 --- a/src/Components/DashboardPage/Technician/TechnicianEquipmentButtons.tsx +++ b/src/Components/DashboardPage/Technician/TechnicianEquipmentButtons.tsx @@ -99,7 +99,7 @@ export default function TechnicianEquipmentButtons() { Add Item

*/} - + */} */}
- SetAddSKUModalOpen(false)} modal @@ -285,7 +285,7 @@ export default function TechnicianEquipmentButtons() { }} > - + */} {/* SetAddItemModalOpen(false)} diff --git a/src/Pages/EquipmentListPage/EquipmentListPage.tsx b/src/Pages/EquipmentListPage/EquipmentListPage.tsx index 69054b8..332c297 100644 --- a/src/Pages/EquipmentListPage/EquipmentListPage.tsx +++ b/src/Pages/EquipmentListPage/EquipmentListPage.tsx @@ -14,10 +14,16 @@ import { colors } from "../../styles"; import EditSKUModal from "../../Components/EditSKUModal/EditSKUModal"; import Popup from "reactjs-popup"; import { useState } from "react"; +import NoteAddIcon from "@mui/icons-material/NoteAdd"; +import { Button } from "@mui/material"; +import AddSKUModal from "../../Components/AddSKUModal/AddSKUModal"; + export default function EquipmentListPage() { const [editmodalOpen, SetEditModalOpen] = useState(false); const [selectedItem, SetSelectedItem] = useState(0); + const [addSKUmodalOpen, SetAddSKUModalOpen] = useState(false); + const equipments = useQuery({ queryKey: ["equipments"], queryFn: EquipmentsAPI, @@ -64,7 +70,63 @@ export default function EquipmentListPage() { minWidth: "100%", flexWrap: "wrap", }} + + > + + + + + SetAddSKUModalOpen(false)} + modal + position={"top center"} + contentStyle={{ + width: "32rem", + borderRadius: 16, + borderColor: "grey", + borderStyle: "solid", + borderWidth: 1, + padding: 16, + alignContent: "center", + justifyContent: "center", + textAlign: "center", + }} + > + + + Date: Sun, 7 Jan 2024 08:29:30 +0800 Subject: [PATCH 07/28] add sku button position and alignment --- .../EquipmentListPage/EquipmentListPage.tsx | 111 +++++++++--------- 1 file changed, 55 insertions(+), 56 deletions(-) diff --git a/src/Pages/EquipmentListPage/EquipmentListPage.tsx b/src/Pages/EquipmentListPage/EquipmentListPage.tsx index 332c297..58bb098 100644 --- a/src/Pages/EquipmentListPage/EquipmentListPage.tsx +++ b/src/Pages/EquipmentListPage/EquipmentListPage.tsx @@ -64,68 +64,67 @@ export default function EquipmentListPage() { display: "flex", alignItems: "center", justifyContent: "center", - height: "100%", + height: "80%", width: "100%", - minHeight: "100%", + minHeight: "80%", minWidth: "100%", - flexWrap: "wrap", - }} + }}> + +
+ +
- > - - - - - SetAddSKUModalOpen(false)} - modal - position={"top center"} - contentStyle={{ - width: "32rem", - borderRadius: 16, - borderColor: "grey", - borderStyle: "solid", - borderWidth: 1, - padding: 16, - alignContent: "center", - justifyContent: "center", - textAlign: "center", - }} - > - - + +
Date: Sun, 7 Jan 2024 12:56:01 +0800 Subject: [PATCH 08/28] student and teacher dashboard responsive --- .../DashboardPage/Student/StudentDashboard.tsx | 17 +++++++---------- .../Student/StudentTransactionListView.tsx | 7 ++++--- .../Teacher/TeacherTransactionListView.tsx | 2 +- .../TransactionEntry/TransactionEntry.tsx | 4 ++-- .../TransactionFilterMenu.tsx | 3 ++- src/Pages/DashboardPage/DashboardPage.tsx | 6 +++--- 6 files changed, 19 insertions(+), 20 deletions(-) diff --git a/src/Components/DashboardPage/Student/StudentDashboard.tsx b/src/Components/DashboardPage/Student/StudentDashboard.tsx index 24fbc03..fcc8f40 100644 --- a/src/Components/DashboardPage/Student/StudentDashboard.tsx +++ b/src/Components/DashboardPage/Student/StudentDashboard.tsx @@ -1,7 +1,6 @@ + import styles from "../../../styles"; import { Button } from "@mui/material"; -import AddBoxIcon from "@mui/icons-material/AddBox"; -import { colors } from "../../../styles"; import { useNavigate } from "react-router-dom"; export default function StudentDashboard() { const navigate = useNavigate(); @@ -17,7 +16,7 @@ export default function StudentDashboard() { justifyContent: "center", flexWrap: "wrap", marginTop: "40px", - + width: "100%" }, @@ -28,11 +27,10 @@ export default function StudentDashboard() { ...styles.flex_column, ...{ alignSelf: "center", - justifyContent: "center", - flexWrap: "wrap", backgroundColor: "#CCDDFF", - paddingInline: "90px", - borderRadius: "20px" + borderRadius: "20px", + paddingInline: "100px", + width: "100%", }, }} onClick={() => { @@ -43,9 +41,8 @@ export default function StudentDashboard() {

CLICK TO REQUEST BORROW ITEMS diff --git a/src/Components/DashboardPage/Student/StudentTransactionListView.tsx b/src/Components/DashboardPage/Student/StudentTransactionListView.tsx index ef08e2c..f41bf1f 100644 --- a/src/Components/DashboardPage/Student/StudentTransactionListView.tsx +++ b/src/Components/DashboardPage/Student/StudentTransactionListView.tsx @@ -39,10 +39,11 @@ export default function StudentTransactionListView() { ); } return ( -

+
diff --git a/src/Components/DashboardPage/Teacher/TeacherTransactionListView.tsx b/src/Components/DashboardPage/Teacher/TeacherTransactionListView.tsx index 69d6818..351b62a 100644 --- a/src/Components/DashboardPage/Teacher/TeacherTransactionListView.tsx +++ b/src/Components/DashboardPage/Teacher/TeacherTransactionListView.tsx @@ -48,7 +48,7 @@ export default function TeacherTransactionListView() {
{transactions.data ? ( diff --git a/src/Components/TransactionEntry/TransactionEntry.tsx b/src/Components/TransactionEntry/TransactionEntry.tsx index 2a47bff..757d53a 100644 --- a/src/Components/TransactionEntry/TransactionEntry.tsx +++ b/src/Components/TransactionEntry/TransactionEntry.tsx @@ -18,11 +18,11 @@ export default function TransactionEntry(props: props) { style={{ alignSelf: "center", justifySelf: "center", - width: "584px", backgroundColor: colors.header_color, borderRadius: 16, - margin: "10px", + marginTop: "10px", paddingTop: "15px", + width: "100%" }} onClick={props.onClick} diff --git a/src/Components/TransactionFilterMenu/TransactionFilterMenu.tsx b/src/Components/TransactionFilterMenu/TransactionFilterMenu.tsx index 467b007..a3c9f24 100644 --- a/src/Components/TransactionFilterMenu/TransactionFilterMenu.tsx +++ b/src/Components/TransactionFilterMenu/TransactionFilterMenu.tsx @@ -41,10 +41,11 @@ export default function TransactionFilterMenu(props: props) { alignSelf: "center", justifyContent: "center", flexWrap: "wrap", + width: "100%" }, }} > - + Filter Transactions diff --git a/src/Pages/DashboardPage/DashboardPage.tsx b/src/Pages/DashboardPage/DashboardPage.tsx index 4f493d9..6dd68b6 100644 --- a/src/Pages/DashboardPage/DashboardPage.tsx +++ b/src/Pages/DashboardPage/DashboardPage.tsx @@ -21,10 +21,10 @@ export default function Dashboard() { style={{ ...styles.flex_column, ...{ - flexWrap: "wrap", justifyContent: "center", - marginLeft: "16px", - marginRight: "16px", + alignItems: "center", + marginInline: "10px" + }, }} > From f00432aab717900ca9ccee522c24c203d4275293 Mon Sep 17 00:00:00 2001 From: psofia Date: Sun, 7 Jan 2024 16:40:28 +0800 Subject: [PATCH 09/28] unc --- .../Technician/TechnicianEquipmentButtons.tsx | 20 +-- .../EquipmentInstancesListPage.tsx | 126 +----------------- 2 files changed, 14 insertions(+), 132 deletions(-) diff --git a/src/Components/DashboardPage/Technician/TechnicianEquipmentButtons.tsx b/src/Components/DashboardPage/Technician/TechnicianEquipmentButtons.tsx index c944e3a..3e5ed98 100644 --- a/src/Components/DashboardPage/Technician/TechnicianEquipmentButtons.tsx +++ b/src/Components/DashboardPage/Technician/TechnicianEquipmentButtons.tsx @@ -68,7 +68,7 @@ export default function TechnicianEquipmentButtons() { View All

- {/* */} - {/* */} + - {/* */} +
- {/* SetAddSKUModalOpen(false)} modal @@ -285,8 +285,8 @@ export default function TechnicianEquipmentButtons() { }} > - */} - {/* + SetAddItemModalOpen(false)} modal @@ -304,7 +304,7 @@ export default function TechnicianEquipmentButtons() { }} > - */} + ); } diff --git a/src/Pages/EquipmentInstancesListPage/EquipmentInstancesListPage.tsx b/src/Pages/EquipmentInstancesListPage/EquipmentInstancesListPage.tsx index 4ef4751..e72d3c5 100644 --- a/src/Pages/EquipmentInstancesListPage/EquipmentInstancesListPage.tsx +++ b/src/Pages/EquipmentInstancesListPage/EquipmentInstancesListPage.tsx @@ -16,22 +16,14 @@ import { useState } from "react"; import Popup from "reactjs-popup"; import Autocomplete from "@mui/material/Autocomplete"; import SearchIcon from "@mui/icons-material/Search"; -import AddItemModal from "../../Components/AddItemModal/AddItemModal"; -import AddToQueueIcon from "@mui/icons-material/AddToQueue"; -import ScienceIcon from "@mui/icons-material/Science"; -import ColorizeIcon from "@mui/icons-material/Colorize"; -import { Button } from "@mui/material"; -import { useNavigate } from "react-router-dom"; export default function EquipmentInstancesListPage() { const [editmodalOpen, SetEditModalOpen] = useState(false); const [selectedItem, SetSelectedItem] = useState(0); - const [additemmodalOpen, SetAddItemModalOpen] = useState(false); - const navigate = useNavigate(); const equipment_instances = useQuery({ queryKey: ["equipment_instances"], @@ -83,121 +75,11 @@ export default function EquipmentInstancesListPage() { minWidth: "100%", }} > - {/* ADDED/INSERTED BUTTON,POPUP, TWO CATEGORY BUTTONS*/} - + + - SetAddItemModalOpen(false)} - modal - position={"top center"} - contentStyle={{ - width: "32rem", - borderRadius: 16, - borderColor: "grey", - borderStyle: "solid", - borderWidth: 1, - padding: 16, - alignContent: "center", - justifyContent: "center", - textAlign: "center", - }} - > - - - - - + +
Date: Tue, 9 Jan 2024 06:17:30 +0800 Subject: [PATCH 10/28] Changes Dashboard, Form, Added divs lang gyud. fix fix lang gamay --- src/Components/API/API.tsx | 2 +- .../Teacher/TeacherTransactionListView.tsx | 2 +- .../TransactionEntry/TransactionEntry.tsx | 3 +- .../AddTransactionPage/AddTransactionPage.tsx | 118 ++++++++++++------ 4 files changed, 84 insertions(+), 41 deletions(-) diff --git a/src/Components/API/API.tsx b/src/Components/API/API.tsx index 4c43e72..2d6f26f 100644 --- a/src/Components/API/API.tsx +++ b/src/Components/API/API.tsx @@ -23,7 +23,7 @@ import { TransactionCreateType, } from "../Types/Types"; -const debug = false; +const debug = true; let backendURL; if (debug) { diff --git a/src/Components/DashboardPage/Teacher/TeacherTransactionListView.tsx b/src/Components/DashboardPage/Teacher/TeacherTransactionListView.tsx index 351b62a..592df68 100644 --- a/src/Components/DashboardPage/Teacher/TeacherTransactionListView.tsx +++ b/src/Components/DashboardPage/Teacher/TeacherTransactionListView.tsx @@ -48,7 +48,7 @@ export default function TeacherTransactionListView() {
{transactions.data ? ( diff --git a/src/Components/TransactionEntry/TransactionEntry.tsx b/src/Components/TransactionEntry/TransactionEntry.tsx index 757d53a..8f0ed31 100644 --- a/src/Components/TransactionEntry/TransactionEntry.tsx +++ b/src/Components/TransactionEntry/TransactionEntry.tsx @@ -22,7 +22,8 @@ export default function TransactionEntry(props: props) { borderRadius: 16, marginTop: "10px", paddingTop: "15px", - width: "100%" + width: "100%", + maxWidth: "550px" }} onClick={props.onClick} diff --git a/src/Pages/AddTransactionPage/AddTransactionPage.tsx b/src/Pages/AddTransactionPage/AddTransactionPage.tsx index c8c2cf2..13ea135 100644 --- a/src/Pages/AddTransactionPage/AddTransactionPage.tsx +++ b/src/Pages/AddTransactionPage/AddTransactionPage.tsx @@ -3,7 +3,6 @@ import styles from "../../styles"; import { colors } from "../../styles"; import TextField from "@mui/material/TextField"; import AddToQueueIcon from "@mui/icons-material/AddToQueue"; -import Button from "../../Components/Button/Button"; import { toast } from "react-toastify"; import { AvailableEquipmentInstancesAPI, @@ -21,6 +20,9 @@ import { MenuItem, OutlinedInput, Autocomplete, + Alert, + Stack + } from "@mui/material"; import React from "react"; import Header from "../../Components/Header/Header"; @@ -125,11 +127,17 @@ export default function AddTransactionPage() {

Borrowing Form

-
+
@@ -207,26 +215,7 @@ export default function AddTransactionPage() { placeholder={"The subject requiring the equipments"} /> - - - Remarks - - ) => { - SetTransaction({ ...transaction, remarks: e.target.value }); - setError(""); - }} - value={transaction.remarks} - placeholder={"Optionally add a brief description of the request"} - /> - + @@ -268,24 +259,63 @@ export default function AddTransactionPage() { }} value={transaction.additional_members} placeholder={ - "Write down any additional members borrowing on behalf of this transaction" + "1. Full Name ex. (Daniel John Padilla)\n2. Kathryn Bernardo \n3. ..." } /> + + + Remarks (optional) + + ) => { + SetTransaction({ ...transaction, remarks: e.target.value }); + setError(""); + }} + value={transaction.remarks} + placeholder={"Add a brief description of the request or N/A."} + /> +
-

{error}

+ +
-
+ +

{error}

+ + +
); } From b7f39a517b912a1b36f2a510e3d443266c66cd3a Mon Sep 17 00:00:00 2001 From: "Pongot, Jophiel" Date: Tue, 9 Jan 2024 06:31:42 +0800 Subject: [PATCH 11/28] Landing Page configs. --- src/Pages/LandingPage/LandingPage.tsx | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/Pages/LandingPage/LandingPage.tsx b/src/Pages/LandingPage/LandingPage.tsx index c91d636..9058a1b 100644 --- a/src/Pages/LandingPage/LandingPage.tsx +++ b/src/Pages/LandingPage/LandingPage.tsx @@ -37,6 +37,7 @@ export default function LandingPage() { minHeight: "100%", minWidth: "100%", flexWrap: "wrap", + backgroundColor: "#F2FAF4" }} >
@@ -51,19 +52,26 @@ export default function LandingPage() { >

- CSM Inventory + Welcome! +

+ +

+ CSM Borrowing and Inventory
Monitoring and Management System

From d08b43b3ad137aefaa8d11a805fd7dcac1c46d5f Mon Sep 17 00:00:00 2001 From: "Pongot, Jophiel" Date: Tue, 9 Jan 2024 06:47:50 +0800 Subject: [PATCH 12/28] added and made chages to Login Modal --- src/Components/API/API.tsx | 2 +- src/Components/LoginModal/LoginModal.tsx | 101 +++++++++++++++-------- src/styles.tsx | 28 ++++++- 3 files changed, 90 insertions(+), 41 deletions(-) diff --git a/src/Components/API/API.tsx b/src/Components/API/API.tsx index 2d6f26f..4c43e72 100644 --- a/src/Components/API/API.tsx +++ b/src/Components/API/API.tsx @@ -23,7 +23,7 @@ import { TransactionCreateType, } from "../Types/Types"; -const debug = true; +const debug = false; let backendURL; if (debug) { diff --git a/src/Components/LoginModal/LoginModal.tsx b/src/Components/LoginModal/LoginModal.tsx index fb6a5c0..ba18222 100644 --- a/src/Components/LoginModal/LoginModal.tsx +++ b/src/Components/LoginModal/LoginModal.tsx @@ -6,7 +6,6 @@ import InputAdornment from "@mui/material/InputAdornment"; import IconButton from "@mui/material/IconButton"; import Visibility from "@mui/icons-material/Visibility"; import VisibilityOff from "@mui/icons-material/VisibilityOff"; -import LoginIcon from "@mui/icons-material/Login"; import Checkbox from "@mui/material/Checkbox"; import Button from "../Button/Button"; import { useNavigate } from "react-router-dom"; @@ -14,6 +13,8 @@ import { LoginAPI } from "../API/API"; import { useDispatch } from "react-redux"; import { auth_toggle } from "../Plugins/Redux/Slices/AuthSlice/AuthSlice"; import { toast } from "react-toastify"; +import Logo_dako from "../../assets/Logo_dako.png" + export default function LoginModal() { const navigate = useNavigate(); const [showPassword, setShowPassword] = useState(false); @@ -28,25 +29,41 @@ export default function LoginModal() { <>
- -

Welcome back!

+ +

+ Welcome back! +

+

+ Sign In to Continue +

-
+
+

{error}

+
+ +
-

{error}

- +
+ ); } diff --git a/src/styles.tsx b/src/styles.tsx index 315f0fa..73e7bb3 100644 --- a/src/styles.tsx +++ b/src/styles.tsx @@ -1,5 +1,5 @@ export const colors = { - background: "#FFFFFF", + background: "#F2FAF4", header_color: "#b2dfab", font_dark: "#2e482e", font_light: "#0e410d", @@ -11,9 +11,20 @@ export const colors = { green: "#80b28a", gray: "#8F8F8F", dark_green: "#17561D", - dark_blue: "#19639D" + dark_blue: "#19639D", + + font_dark_red: "#570404", + + dandelion: "#FBB217", + + lightgreen: "#D9FFD8", + darkgreen: "#00360C", + lightorange: "#FEFFCD", + lightred: "#ECC4B8", + + form_dark: "#000000", + form_title: "#1E1A4D" - }; const styles: { [key: string]: React.CSSProperties } = { @@ -30,7 +41,16 @@ const styles: { [key: string]: React.CSSProperties } = { overflowY: "scroll", }, - + text_normal: { + color: colors.font_dark, + fontWeight: "500", + }, + + text_dark_red: { + color: colors.font_dark_red, + fontWeight: "bold", + }, + text_dark: { color: colors.font_dark, fontWeight: "bold", From 8a53d12c8aeb720edc21784b937b221cc54cf66f Mon Sep 17 00:00:00 2001 From: "Pongot, Jophiel" Date: Tue, 9 Jan 2024 06:56:05 +0800 Subject: [PATCH 13/28] si register modal sab, scrollable and noyys kaayo iyang scroll bar. --- src/Components/LoginModal/LoginModal.tsx | 1 - .../RegisterModal/RegisterModal.tsx | 457 ++++++++++-------- src/index.css | 22 + 3 files changed, 273 insertions(+), 207 deletions(-) diff --git a/src/Components/LoginModal/LoginModal.tsx b/src/Components/LoginModal/LoginModal.tsx index ba18222..d92cd0d 100644 --- a/src/Components/LoginModal/LoginModal.tsx +++ b/src/Components/LoginModal/LoginModal.tsx @@ -7,7 +7,6 @@ import IconButton from "@mui/material/IconButton"; import Visibility from "@mui/icons-material/Visibility"; import VisibilityOff from "@mui/icons-material/VisibilityOff"; import Checkbox from "@mui/material/Checkbox"; -import Button from "../Button/Button"; import { useNavigate } from "react-router-dom"; import { LoginAPI } from "../API/API"; import { useDispatch } from "react-redux"; diff --git a/src/Components/RegisterModal/RegisterModal.tsx b/src/Components/RegisterModal/RegisterModal.tsx index ca49625..4bf18d8 100644 --- a/src/Components/RegisterModal/RegisterModal.tsx +++ b/src/Components/RegisterModal/RegisterModal.tsx @@ -1,13 +1,11 @@ import { useState } from "react"; -import styles from "../../styles"; -import { colors } from "../../styles"; +import styles, { colors } from "../../styles"; import TextField from "@mui/material/TextField"; import InputAdornment from "@mui/material/InputAdornment"; import IconButton from "@mui/material/IconButton"; import Visibility from "@mui/icons-material/Visibility"; import VisibilityOff from "@mui/icons-material/VisibilityOff"; -import { AppRegistration } from "@mui/icons-material"; -import Button from "../Button/Button"; +import Logo_dako from "../../assets/Logo_dako.png"; import { useNavigate } from "react-router-dom"; import { RegisterAPI } from "../API/API"; import { toast } from "react-toastify"; @@ -34,216 +32,263 @@ export default function RegisterModal() { const [error, setError] = useState(""); return ( <> -
- +
-

Get Started

-
+ > + -
- ) => { - setUser({ ...user, first_name: e.target.value }); - setError(""); - }} - value={user.first_name} - placeholder={"Enter your first name"} - /> - ) => - setUser({ ...user, last_name: e.target.value }) - } - value={user.last_name} - placeholder={"Enter your last name"} - /> - ) => - setUser({ ...user, email: e.target.value }) - } - value={user.email} - placeholder={"Enter your email"} - /> - - - Course - - ) => { - setUser({ ...user, course: e.target.value }); - setError(""); +

-

+

+ Enter required fields +

+
+ +
+

+ {error} +

+
+ +
+ ) => { + setUser({ ...user, first_name: e.target.value }); + setError(""); + }} + value={user.first_name} + placeholder={"Enter your first name"} + /> + ) => + setUser({ ...user, last_name: e.target.value }) + } + value={user.last_name} + placeholder={"Enter your last name"} + /> + ) => + setUser({ ...user, email: e.target.value }) + } + value={user.email} + placeholder={"Enter your email"} + /> + + + + Course + + ) => { + setUser({ ...user, course: e.target.value }); + setError(""); }} > - } - label="BS Chemistry" - style={styles.text_dark} - /> - } - label="BS Food Technology" - style={styles.text_dark} - /> - } - label="BS Applied Physics" - style={styles.text_dark} - /> - } - label="BS Environmental Science" - style={styles.text_dark} - /> -
-
-
- ) => { - setUser({ ...user, username: e.target.value }); - setError(""); - }} - value={user.username} - placeholder={"Enter username"} - /> - - setShowPassword(!showPassword)} - edge="end" - > - {showPassword ? : } - - - ), - }} - label="Password" - placeholder={"Enter password"} - onChange={(e: React.ChangeEvent) => - setUser({ ...user, password: e.target.value }) - } - value={user.password} - /> - - setShowPassword(!showPassword)} - edge="end" - > - {showPassword ? : } - - - ), - }} - label="Confirm Password" - placeholder={"Re-enter password"} - onChange={(e: React.ChangeEvent) => { - setUser({ ...user, confirm_password: e.target.value }); - setError(""); - }} - value={user.confirm_password} - /> -
-

{error}

-
-
+ +
+ +
+ +
+
); } diff --git a/src/index.css b/src/index.css index b2acf00..69476d9 100644 --- a/src/index.css +++ b/src/index.css @@ -82,3 +82,25 @@ button:focus-visible { background-color: #f9f9f9; } } + +.custom-scrollbar { + overflow-y: scroll; + max-height: 800px; + scrollbar-width: thin; /* For Firefox */ + -webkit-overflow-scrolling: touch; /* For smooth scrolling on iOS */ + -ms-overflow-style: none; /* For IE */ + scrollbar-color: transparent transparent; /* For WebKit */ +} + +.custom-scrollbar::-webkit-scrollbar { + width: 6px; /* Adjust the width as needed */ +} + +.custom-scrollbar::-webkit-scrollbar-thumb { + background-color: #c4c4c4; /* Color of the thumb */ + border-radius: 3px; /* Rounded corners of the thumb */ +} + +.custom-scrollbar::-webkit-scrollbar-track { + background-color: #f0f0f0; /* Color of the track */ +} From fa89268e0ad5cc5a76d646c22bd9b5871f943059 Mon Sep 17 00:00:00 2001 From: "Pongot, Jophiel" Date: Tue, 9 Jan 2024 07:17:14 +0800 Subject: [PATCH 14/28] added homepage navigation, and configure header --- .../Technician/TechnicianNavigation.tsx | 124 ++++++++++++++++++ src/Components/Header/Header.tsx | 52 ++++++-- src/Pages/DashboardPage/DashboardPage.tsx | 53 ++++---- src/assets/Equipment.svg | 36 +++++ src/assets/Profile-Icon.png | Bin 0 -> 783 bytes src/assets/Transaction.svg | 9 ++ src/assets/ustp-logo.png | Bin 0 -> 50682 bytes 7 files changed, 238 insertions(+), 36 deletions(-) create mode 100644 src/Components/DashboardPage/Technician/TechnicianNavigation.tsx create mode 100644 src/assets/Equipment.svg create mode 100644 src/assets/Profile-Icon.png create mode 100644 src/assets/Transaction.svg create mode 100644 src/assets/ustp-logo.png diff --git a/src/Components/DashboardPage/Technician/TechnicianNavigation.tsx b/src/Components/DashboardPage/Technician/TechnicianNavigation.tsx new file mode 100644 index 0000000..dfa3f0a --- /dev/null +++ b/src/Components/DashboardPage/Technician/TechnicianNavigation.tsx @@ -0,0 +1,124 @@ +import styles from "../../../styles"; +import { useNavigate } from "react-router-dom"; +import AssessmentIcon from "@mui/icons-material/Assessment"; + +import equipment from "../../../assets/Equipment.svg"; +import transaction from "../../../assets/Transaction.svg"; + +export default function TechnicianNavigation() { + const navigate = useNavigate(); + return ( + <> +
+ +
+ +

+ Feature +

+ + + + +
+
+ + ); +} diff --git a/src/Components/Header/Header.tsx b/src/Components/Header/Header.tsx index 37984a6..b5680f7 100644 --- a/src/Components/Header/Header.tsx +++ b/src/Components/Header/Header.tsx @@ -10,26 +10,32 @@ export interface props { export default function Header(props: props) { const [SidebarOpen, SetSidebarOpen] = useState(false); return ( + +
-

- {props.label} -

+ +
+

{props.label}

+
+ +
+
+ + +
+
SetSidebarOpen(false)}> diff --git a/src/Pages/DashboardPage/DashboardPage.tsx b/src/Pages/DashboardPage/DashboardPage.tsx index 6dd68b6..ed18c6e 100644 --- a/src/Pages/DashboardPage/DashboardPage.tsx +++ b/src/Pages/DashboardPage/DashboardPage.tsx @@ -6,36 +6,39 @@ import TechnicianEquipmentButtons from "../../Components/DashboardPage/Technicia import TechnicianLogButtons from "../../Components/DashboardPage/Technician/TechnicianLogButtons"; import StudentTransactionListView from "../../Components/DashboardPage/Student/StudentTransactionListView"; import StudentDashboard from "../../Components/DashboardPage/Student/StudentDashboard"; +import TechnicianNavigation from "../../Components/DashboardPage/Technician/TechnicianNavigation"; import TeacherTransactionListView from "../../Components/DashboardPage/Teacher/TeacherTransactionListView"; export default function Dashboard() { return (
- - - - - - -
- - - -
-
- - - +
+ + + + + + + +
+ + +
+
+ + + +
); } diff --git a/src/assets/Equipment.svg b/src/assets/Equipment.svg new file mode 100644 index 0000000..5cc567e --- /dev/null +++ b/src/assets/Equipment.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/Profile-Icon.png b/src/assets/Profile-Icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c1f29dd79b19d1e7bc03ca962445f3467a26c136 GIT binary patch literal 783 zcmV+q1MvKbP)8FV+&kj~?S{I(7&N%=iSLefZW(7hL3ZlpS^L$@+#sHet+Dc})@oD8}{)8i;I z1b1?jSGj<0%0nzgcip4&0Q(f;d7YiBi;S|9=MM~{75?tg(PNb`%o9@laKa@+`Rr~m zOe@c2j}FPx5|A{aw>0SfU$F<+8JdG*wm7ZN)IL{gnV*V7TJ_ZV-VI>Zu;XFu*jPiE z8fo8TZyb>#tOtz4BV*_SWvGLE4)R^zTg15Y3*t(i%}11@#dzT?@0RQDAsF5K`b$qcGh?wZ$}pD=Dj2Lk?GhaJpI_VZS8n?!V_5>mXCF9SL#B z*7D9rBp;RSnVud1dNtV~hJp=7QsN@liQM7xMJ{*Z2{SHoZ`^qA`~%1B)hjXGs}}$O N002ovPDHLkV1k=?Z5#jq literal 0 HcmV?d00001 diff --git a/src/assets/Transaction.svg b/src/assets/Transaction.svg new file mode 100644 index 0000000..e81218f --- /dev/null +++ b/src/assets/Transaction.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/ustp-logo.png b/src/assets/ustp-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ff20f52bd517703d6c4105ddaab240fa16cc205b GIT binary patch literal 50682 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 u9khi8@Tr=>rq4X`-P%Cs)TWE96hPxY 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 literal 0 HcmV?d00001 From 209219afb4fefb175d04dad57a8715658d5ad1c3 Mon Sep 17 00:00:00 2001 From: "Pongot, Jophiel" Date: Tue, 9 Jan 2024 08:43:22 +0800 Subject: [PATCH 15/28] bonggang bonggang configuration T_T. p78a45k122y12u1245p56r4a446i41n1 --- src/App.tsx | 12 + .../Technician/TechnicianNavigation.tsx | 47 +- .../Technician/TechnicianWidgets.tsx | 544 ++++++++++++------ src/Components/Header/Header.tsx | 2 +- src/Pages/DashboardPage/DashboardPage.tsx | 7 +- .../ManageEquipmentPage.tsx | 20 + src/Pages/TransactionPage/TransactionPage.tsx | 1 + .../TransactionsListPage.tsx | 2 + src/index.css | 15 + src/styles.tsx | 2 +- 10 files changed, 439 insertions(+), 213 deletions(-) create mode 100644 src/Pages/ManageEquipmentPage/ManageEquipmentPage.tsx diff --git a/src/App.tsx b/src/App.tsx index d294418..ddc36da 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -22,6 +22,7 @@ import AddTransactionPage from "./Pages/AddTransactionPage/AddTransactionPage"; import TransactionPage from "./Pages/TransactionPage/TransactionPage"; import EquipmentInstanceTallyPage from "./Pages/EquipmentTallyPage/EquipmentTallyPage"; import TransactionReportPage from "./Pages/TransactionReportPage/TransactionReportPage"; +import ManageEquipmentPage from "./Pages/ManageEquipmentPage/ManageEquipmentPage"; const queryClient = new QueryClient(); const router = createHashRouter([ @@ -67,6 +68,17 @@ const router = createHashRouter([ ), errorElement: , }, + { + path: "/view/ManageEquipment", + element: ( + <> + + + + + ), + errorElement: , + }, { path: "/view/equipment_instances/filter/:filter_by", element: ( diff --git a/src/Components/DashboardPage/Technician/TechnicianNavigation.tsx b/src/Components/DashboardPage/Technician/TechnicianNavigation.tsx index dfa3f0a..ce853d5 100644 --- a/src/Components/DashboardPage/Technician/TechnicianNavigation.tsx +++ b/src/Components/DashboardPage/Technician/TechnicianNavigation.tsx @@ -16,34 +16,35 @@ export default function TechnicianNavigation() { alignItems: "center", gap: "24px", alignSelf: "stretch", + paddingBottom: "5rem" }} > - -
- -

- Feature -

+

+ Feature +

-
-
+ + {/* Yellow Capsule */}
-

- Available Equipments -

+ {/* Pending Req */} +
+

+ {queries[1].data?.length || "Loading..."} +

-

- {queries[1].data?.filter( - (equipment) => equipment.status == "Available" - ).length || "Loading..."} -

-
-
-

- Broken Equipments -

+

+ Total Equipment +

+
+
+
+

+ Available +

+

+ {queries[1].data?.filter( + (equipment) => equipment.status == "Available" + ).length || "Loading..."} +

-

- {queries[1].data?.filter( - (equipment) => equipment.status == "Broken" - ).length || "Loading..."} -

-
-
-
-
-

- Total Transactions Today -

+

+ Pending +

+

+ {queries[1].data?.filter( + (equipment) => equipment.status == "Pending" + ).length || 0} +

-

- {queries[3].data?.filter((transaction) => - moment(transaction.timestamp, "MM-DD-YYYY hh:mm A").isBetween( - todayStartOfDay, - todayEndOfDay - ) - ).length || "Loading..."} -

-
-
-

- Total Transactions this Month -

+

+ Broken +

+

+ {queries[1].data?.filter( + (equipment) => equipment.status == "Broken" + ).length || 0} +

+
+
+

- {queries[3].data?.filter((transaction) => - moment(transaction.timestamp, "MM-DD-YYYY hh:mm A").isBetween( - thisMonthStart, - thisMonthEnd - ) - ).length || "Loading..."} + Equipment Tracking

diff --git a/src/Components/Header/Header.tsx b/src/Components/Header/Header.tsx index b5680f7..219a8d1 100644 --- a/src/Components/Header/Header.tsx +++ b/src/Components/Header/Header.tsx @@ -1,5 +1,5 @@ import { useState } from "react"; -import styles, { colors } from "../../styles"; +import styles from "../../styles"; import MenuIcon from "@mui/icons-material/Menu"; import SidebarModal from "../Drawer/Drawer"; import { Drawer } from "@mui/material"; diff --git a/src/Pages/DashboardPage/DashboardPage.tsx b/src/Pages/DashboardPage/DashboardPage.tsx index ed18c6e..bc923ef 100644 --- a/src/Pages/DashboardPage/DashboardPage.tsx +++ b/src/Pages/DashboardPage/DashboardPage.tsx @@ -2,8 +2,6 @@ import Header from "../../Components/Header/Header"; import styles from "../../styles"; import RestrictedComponent from "../../Components/RestrictedComponent/RestrictedComponent"; import TechnicianWidgets from "../../Components/DashboardPage/Technician/TechnicianWidgets"; -import TechnicianEquipmentButtons from "../../Components/DashboardPage/Technician/TechnicianEquipmentButtons"; -import TechnicianLogButtons from "../../Components/DashboardPage/Technician/TechnicianLogButtons"; import StudentTransactionListView from "../../Components/DashboardPage/Student/StudentTransactionListView"; import StudentDashboard from "../../Components/DashboardPage/Student/StudentDashboard"; import TechnicianNavigation from "../../Components/DashboardPage/Technician/TechnicianNavigation"; @@ -16,8 +14,6 @@ export default function Dashboard() { - -
- + +
diff --git a/src/Pages/ManageEquipmentPage/ManageEquipmentPage.tsx b/src/Pages/ManageEquipmentPage/ManageEquipmentPage.tsx new file mode 100644 index 0000000..5bcabe9 --- /dev/null +++ b/src/Pages/ManageEquipmentPage/ManageEquipmentPage.tsx @@ -0,0 +1,20 @@ +import Header from "../../Components/Header/Header"; +import styles from "../../styles"; +import RestrictedComponent from "../../Components/RestrictedComponent/RestrictedComponent"; +import TechnicianEquipmentButtons from "../../Components/DashboardPage/Technician/TechnicianEquipmentButtons"; +import TechnicianLogButtons from "../../Components/DashboardPage/Technician/TechnicianLogButtons"; + + +export default function ManageEquipmentPage() { +return ( +
+
+
+ + + + +
+
+); +} diff --git a/src/Pages/TransactionPage/TransactionPage.tsx b/src/Pages/TransactionPage/TransactionPage.tsx index f4d7d5a..ab6ceb2 100644 --- a/src/Pages/TransactionPage/TransactionPage.tsx +++ b/src/Pages/TransactionPage/TransactionPage.tsx @@ -53,6 +53,7 @@ export default function TransactionPage() { alignContent: "center", justifyContent: "center", alignItems: "center", + marginTop: 64 }} > Date: Tue, 9 Jan 2024 11:20:15 +0800 Subject: [PATCH 16/28] basta daghan kaayo ko gi change specially katung tap to view nga makita ang mga pdf's pdf's. dili ra si student na ang makakita ra, pati ang teacher and lab technician. aside ana, daghan paa. salamat ol. in god's will. --- .../Student/StudentTransactionListView.tsx | 33 +- .../Teacher/TeacherTransactionListView.tsx | 36 +- .../StatusTextColor/StatusTextColor.tsx | 21 +- .../TransactionEntry/TransactionEntry.tsx | 27 +- .../TransactionPDF/TransactionPDF.tsx | 428 +++++++++++++----- src/Components/Types/Types.tsx | 1 + .../AddTransactionPage/AddTransactionPage.tsx | 1 + .../TransactionsListPage.tsx | 78 +++- 8 files changed, 478 insertions(+), 147 deletions(-) diff --git a/src/Components/DashboardPage/Student/StudentTransactionListView.tsx b/src/Components/DashboardPage/Student/StudentTransactionListView.tsx index f41bf1f..07c1fd7 100644 --- a/src/Components/DashboardPage/Student/StudentTransactionListView.tsx +++ b/src/Components/DashboardPage/Student/StudentTransactionListView.tsx @@ -1,6 +1,6 @@ import { useQuery } from "@tanstack/react-query"; import { TransactionsByStudentAPI } from "../../API/API"; -import styles from "../../../styles"; +import styles, { colors } from "../../../styles"; import CircularProgress from "@mui/material/CircularProgress/CircularProgress"; import React, { useState } from "react"; import TransactionEntry from "../../TransactionEntry/TransactionEntry"; @@ -70,12 +70,43 @@ export default function StudentTransactionListView() { }} transaction={transaction} /> + )) ) : ( <> )}
+ +
); diff --git a/src/Components/DashboardPage/Teacher/TeacherTransactionListView.tsx b/src/Components/DashboardPage/Teacher/TeacherTransactionListView.tsx index 592df68..b7f5b08 100644 --- a/src/Components/DashboardPage/Teacher/TeacherTransactionListView.tsx +++ b/src/Components/DashboardPage/Teacher/TeacherTransactionListView.tsx @@ -1,14 +1,16 @@ import { useQuery } from "@tanstack/react-query"; import { TransactionsByTeacherAPI } from "../../API/API"; -import styles from "../../../styles"; +import styles, { colors } from "../../../styles"; import CircularProgress from "@mui/material/CircularProgress/CircularProgress"; import React, { useState } from "react"; import TransactionEntry from "../../TransactionEntry/TransactionEntry"; import TransactionFilterMenu from "../../TransactionFilterMenu/TransactionFilterMenu"; import Popup from "reactjs-popup"; import EditTransactionModal from "../../EditTransactionModal/EditTransactionModal"; +import { useNavigate } from "react-router-dom"; export default function TeacherTransactionListView() { + const navigate = useNavigate(); const [EditTransactionOpen, SetEditTransactionOpen] = useState(false); const [SelectedTransaction, SetSelectedTransaction] = useState(0); const transactions = useQuery({ @@ -48,7 +50,7 @@ export default function TeacherTransactionListView() {
{transactions.data ? ( @@ -69,6 +71,35 @@ export default function TeacherTransactionListView() { }} transaction={transaction} /> + )) ) : ( @@ -76,6 +107,7 @@ export default function TeacherTransactionListView() { )}
+ SetEditTransactionOpen(false)} diff --git a/src/Components/StatusTextColor/StatusTextColor.tsx b/src/Components/StatusTextColor/StatusTextColor.tsx index 4354cff..6541377 100644 --- a/src/Components/StatusTextColor/StatusTextColor.tsx +++ b/src/Components/StatusTextColor/StatusTextColor.tsx @@ -1,6 +1,6 @@ import { colors } from "../../styles"; -export default function StatusTextColor(status: string) { +export function StatusTextColor(status: string) { if ( status === "Pending Approval" || status === "Returned: Pending Checking" @@ -11,8 +11,25 @@ export default function StatusTextColor(status: string) { status === "Finalized" || status === "Borrowed" ) { - return colors.dark_green; + return colors.darkgreen; } else { return colors.red; } } + +export function StatusBGColor(status: string) { + if ( + status === "Pending Approval" || + status === "Returned: Pending Checking" + ) { + return colors.lightorange; + } else if ( + status === "Approved" || + status === "Finalized" || + status === "Borrowed" + ) { + return colors.lightgreen; + } else { + return colors.lightred; + } +} diff --git a/src/Components/TransactionEntry/TransactionEntry.tsx b/src/Components/TransactionEntry/TransactionEntry.tsx index 8f0ed31..8458658 100644 --- a/src/Components/TransactionEntry/TransactionEntry.tsx +++ b/src/Components/TransactionEntry/TransactionEntry.tsx @@ -1,13 +1,13 @@ import styles from "../../styles"; import { colors } from "../../styles"; import { TransactionType } from "../Types/Types"; -import StatusTextColor from "../StatusTextColor/StatusTextColor"; +import { StatusTextColor } from "../StatusTextColor/StatusTextColor"; import CircleSharpIcon from '@mui/icons-material/CircleSharp'; export interface props { transaction: TransactionType; onClick?: React.MouseEventHandler; - + } export default function TransactionEntry(props: props) { @@ -19,7 +19,7 @@ export default function TransactionEntry(props: props) { alignSelf: "center", justifySelf: "center", backgroundColor: colors.header_color, - borderRadius: 16, + borderRadius: "7px 7px 0px 0px", marginTop: "10px", paddingTop: "15px", width: "100%", @@ -106,28 +106,7 @@ export default function TransactionEntry(props: props) { {/* //GIWALA */} - -
-

- TAP TO VIEW -

-
diff --git a/src/Components/TransactionPDF/TransactionPDF.tsx b/src/Components/TransactionPDF/TransactionPDF.tsx index 80c3e40..767b66a 100644 --- a/src/Components/TransactionPDF/TransactionPDF.tsx +++ b/src/Components/TransactionPDF/TransactionPDF.tsx @@ -1,161 +1,355 @@ -import { Document, Page, Text, View } from "@react-pdf/renderer"; +import { Document, Page, Text, View, Image } from "@react-pdf/renderer"; import { TransactionType } from "../Types/Types"; import { colors } from "../../styles"; -import StatusTextColor from "../StatusTextColor/StatusTextColor"; +import { + StatusTextColor, + StatusBGColor, +} from "../StatusTextColor/StatusTextColor"; +import ustplogo from "../../assets/ustp-logo.png"; type props = { - transaction: TransactionType | null; + transaction: TransactionType; }; + export default function TransactionPDF(props: props) { return ( - + + {/* Whole Page */} - - + - Transaction ID: {props.transaction?.id} - - - {props.transaction?.timestamp} - - - - - + /> + + - Borrower: {props.transaction?.borrower.name}{" "} - {`(ID:${props.transaction?.borrower.id})`} + Department of Chemistry (Laboratory) - {`(${props.transaction?.borrower.course})`} + University of Science and Technology of Southern Philippines{" "} + {"\n"} + Lapasan Cagayan de Oro City {"\n"} - Teacher: {props.transaction?.teacher.name}{" "} - {`(ID:${props.transaction?.teacher.id})`} - - - Subject: {props.transaction?.subject} - - - Remarks: {props.transaction?.remarks} - - - Consumables: {props.transaction?.consumables} + BORROWER'S SLIP - - - Equipments: - + + + {/* Status */} + + + Status: {`${props.transaction.transaction_status}`} + + + + {/* Transaction ID */} + + + Transaction ID: #{props.transaction.id} + + + + + + Borrower Details + + + {/* Top Details */} + + {/* Borrower Details */} + - {props.transaction?.equipments.map((equipment) => ( + + Name:{" "} + + {props.transaction.borrower.name} + {" "} + + + Course:{" "} - {` - ${equipment.name} (ID:${equipment.id})`} - - ))} + style={{ textDecoration: "underline" }} + >{`${props.transaction.borrower.course}`}{" "} + {"\n"} + {/* Section: {props.transaction.section} */} + + + + + Timestamp:{" "} + + {props.transaction.timestamp} + + {"\n"} + Lab instructor:{" "} + + {props.transaction.teacher.name} + {" "} + + + Subject:{" "} + + {props.transaction.subject} + + + - + + {/* Equipment Section */} + - {`${props.transaction?.transaction_status}`} + Selected Equipment + {props.transaction.equipments.map((equipment) => ( + + {` - ${equipment.name} (ID:${equipment.id})`} + + ))} + {/* total Equipment */} + + + Total Equipment: {props.transaction.equipments.length} + + + {/* Consumables Area */} + + + Consumables + + + {props.transaction?.consumables} + + + + {/* Members here */} + + + Members + + + {props.transaction?.additional_members} + + {/* Remarks */} + + + + + Remarks + + + + + {props.transaction.remarks} + + diff --git a/src/Components/Types/Types.tsx b/src/Components/Types/Types.tsx index 7e362b5..ec01f8b 100644 --- a/src/Components/Types/Types.tsx +++ b/src/Components/Types/Types.tsx @@ -110,6 +110,7 @@ export type UserType = { }; export type TransactionType = { + additional_members: string; id: number; borrower: { id: number; diff --git a/src/Pages/AddTransactionPage/AddTransactionPage.tsx b/src/Pages/AddTransactionPage/AddTransactionPage.tsx index 13ea135..cea0fe1 100644 --- a/src/Pages/AddTransactionPage/AddTransactionPage.tsx +++ b/src/Pages/AddTransactionPage/AddTransactionPage.tsx @@ -112,6 +112,7 @@ export default function AddTransactionPage() { alignItems: "center", justifyContent: "center", overflowY: "scroll", + marginTop: 64 }, }} > diff --git a/src/Pages/TransactionsListPage/TransactionsListPage.tsx b/src/Pages/TransactionsListPage/TransactionsListPage.tsx index 82fb7cc..db5da6e 100644 --- a/src/Pages/TransactionsListPage/TransactionsListPage.tsx +++ b/src/Pages/TransactionsListPage/TransactionsListPage.tsx @@ -16,8 +16,10 @@ import { useState } from "react"; import EditTransactionModal from "../../Components/EditTransactionModal/EditTransactionModal"; import EditItemInstanceModal from "../../Components/EditItemInstanceModal/EditItemInstanceModal"; import SearchIcon from "@mui/icons-material/Search"; +import { useNavigate } from "react-router-dom"; export default function TransactionsListPage() { + const navigate = useNavigate(); const [EditTransactionOpen, SetEditTransactionOpen] = useState(false); const [SelectedTransaction, SetSelectedTransaction] = useState(0); const [EditEquipmentsOpen, SetEditEquipmentsOpen] = useState(false); @@ -145,6 +147,9 @@ export default function TransactionsListPage() { transaction.teacher.name .toLowerCase() .includes(filter.toLowerCase()) || + transaction.additional_members + .toLowerCase() + .includes(filter.toLowerCase()) || transaction.remarks .toLowerCase() .includes(filter?.toLowerCase()) || @@ -178,7 +183,13 @@ export default function TransactionsListPage() { Consumables - Equipments + Additional Members + + + Additional Members + + + Actions @@ -191,6 +202,9 @@ export default function TransactionsListPage() { transaction.borrower.name .toLowerCase() .includes(filter.toLowerCase()) || + transaction.additional_members + .toLowerCase() + .includes(filter.toLowerCase()) || transaction.teacher.name .toLowerCase() .includes(filter.toLowerCase()) || @@ -315,6 +329,28 @@ export default function TransactionsListPage() { > {transaction.consumables} + { + if ( + transaction.transaction_status != "Finalized" && + transaction.transaction_status != "Rejected" + ) { + SetSelectedTransaction(transaction.id); + SetEditTransactionOpen(true); + } + }} + > + {transaction.additional_members} +

Involved Items: {transaction.equipments.length} @@ -405,6 +441,46 @@ export default function TransactionsListPage() { + + + )) ) : ( From 1c7aa9b2585869020d7190a761494d7d5786fe7b Mon Sep 17 00:00:00 2001 From: "Pongot, Jophiel" Date: Tue, 9 Jan 2024 12:48:26 +0800 Subject: [PATCH 17/28] fix item instance page search kay natambunan --- .../EquipmentInstancesListPage/EquipmentInstancesListPage.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Pages/EquipmentInstancesListPage/EquipmentInstancesListPage.tsx b/src/Pages/EquipmentInstancesListPage/EquipmentInstancesListPage.tsx index e72d3c5..d284330 100644 --- a/src/Pages/EquipmentInstancesListPage/EquipmentInstancesListPage.tsx +++ b/src/Pages/EquipmentInstancesListPage/EquipmentInstancesListPage.tsx @@ -73,6 +73,7 @@ export default function EquipmentInstancesListPage() { width: "100%", minHeight: "100%", minWidth: "100%", + marginTop: "100px" }} > From ac990aea50bd29545b603eaad14a80828ab7db35 Mon Sep 17 00:00:00 2001 From: "Pongot, Jophiel" Date: Wed, 10 Jan 2024 06:03:25 +0800 Subject: [PATCH 18/28] commit --- .../TransactionPDF/TransactionPDF.tsx | 17 +- .../TransactionReportPDF.tsx | 323 ++++++++++++------ .../EquipmentInstancesListPage.tsx | 2 +- 3 files changed, 219 insertions(+), 123 deletions(-) diff --git a/src/Components/TransactionPDF/TransactionPDF.tsx b/src/Components/TransactionPDF/TransactionPDF.tsx index 767b66a..e8efb2c 100644 --- a/src/Components/TransactionPDF/TransactionPDF.tsx +++ b/src/Components/TransactionPDF/TransactionPDF.tsx @@ -52,16 +52,7 @@ export default function TransactionPDF(props: props) { /> - - Department of Chemistry (Laboratory) - + University of Science and Technology of Southern Philippines{" "} {"\n"} - Lapasan Cagayan de Oro City {"\n"} + Lapasan, Cagayan de Oro City {"\n"} + College of Science and Mathematics + - BORROWER'S SLIP + BORROWER'S SLIP diff --git a/src/Components/TransactionReportPDF/TransactionReportPDF.tsx b/src/Components/TransactionReportPDF/TransactionReportPDF.tsx index 2c6889c..e98df3a 100644 --- a/src/Components/TransactionReportPDF/TransactionReportPDF.tsx +++ b/src/Components/TransactionReportPDF/TransactionReportPDF.tsx @@ -1,4 +1,4 @@ -import { Document, Page, Text, View } from "@react-pdf/renderer"; +import { Document, Page, Text, View, Image } from "@react-pdf/renderer"; import { TransactionListType } from "../Types/Types"; import { colors } from "../../styles"; import count_transaction_equipments from "../../CountTransactionEquipments/CountTransactionEquipments"; @@ -6,6 +6,7 @@ import { filter_today, filter_thismonth, } from "../FilterTransaction/FilterTransaction"; +import ustplogo from "../../assets/ustp-logo.png"; type props = { transactions: TransactionListType | []; @@ -18,143 +19,245 @@ export default function TransactionReportPDF(props: props) { return ( - - Daily Transaction Report - + {/* Header */} - + + - Total Equipments Processed:{" "} - {count_transaction_equipments(transactions_today)} - - - Total Transactions: {transactions_today.length} - - - Rejected Transactions:{" "} - { - transactions_today.filter( - (transaction) => transaction.transaction_status == "Rejected" - ).length - } - - - Finalized Transactions:{" "} - { - transactions_today.filter( - (transaction) => transaction.transaction_status == "Finalized" - ).length - } - + + + Republic of the Philippines{"\n"} + + {" "} + UNIVERSITY OF SCIENCE and TECHNOLOGY OF SCIENCE AND TECHNOLOGY{" "} + + {"\n"} + College of Science and Mathematics + + + + {" "} + Department of Chemistry (Laboratory) + + + + - Monthly Transaction Report + + LABORATORY REPORTS + + - - Total Equipments Processed:{" "} - {count_transaction_equipments(transactions_thismonth)} - - + Transaction + + + - Total Transactions: {transactions_thismonth.length} - - Daily Transaction Report + + {" "} + • Total Equipments Processed:{" "} + {count_transaction_equipments(transactions_today)} + + + + {" "} + • Total Transactions: {transactions_today.length} + + + + {" "} + • Rejected Transactions:{" "} + { + transactions_today.filter( + (transaction) => transaction.transaction_status == "Rejected" + ).length + } + + + + {" "} + • Finalized Transactions:{" "} + { + transactions_today.filter( + (transaction) => transaction.transaction_status == "Finalized" + ).length + } + + + - Rejected Transactions:{" "} - { - transactions_thismonth.filter( - (transaction) => transaction.transaction_status == "Rejected" - ).length - } - - - Finalized Transactions:{" "} - { - transactions_thismonth.filter( - (transaction) => transaction.transaction_status == "Finalized" - ).length - } - + Monthly Transaction Report + + {" "} + • Total Equipments Processed:{" "} + {count_transaction_equipments(transactions_thismonth)} + + + + {" "} + • Total Transactions: {transactions_thismonth.length} + + + + {" "} + • Rejected Transactions:{" "} + { + transactions_thismonth.filter( + (transaction) => transaction.transaction_status == "Rejected" + ).length + } + + + + {" "} + • Finalized Transactions:{" "} + { + transactions_thismonth.filter( + (transaction) => transaction.transaction_status == "Finalized" + ).length + } + + diff --git a/src/Pages/EquipmentInstancesListPage/EquipmentInstancesListPage.tsx b/src/Pages/EquipmentInstancesListPage/EquipmentInstancesListPage.tsx index d284330..6076761 100644 --- a/src/Pages/EquipmentInstancesListPage/EquipmentInstancesListPage.tsx +++ b/src/Pages/EquipmentInstancesListPage/EquipmentInstancesListPage.tsx @@ -73,7 +73,7 @@ export default function EquipmentInstancesListPage() { width: "100%", minHeight: "100%", minWidth: "100%", - marginTop: "100px" + marginTop: "0px" }} > From 44341e2645c7f3f4d3bfe4ab80dc0f844261230c Mon Sep 17 00:00:00 2001 From: "Pongot, Jophiel" Date: Wed, 10 Jan 2024 06:05:34 +0800 Subject: [PATCH 19/28] Item Tally to Sctock Check. might consider changing kung di japun ganahan amo adviser. --- .../Technician/TechnicianLogButtons.tsx | 34 ++----------------- .../EquipmentInstanceLogsPage.tsx | 1 + .../EquipmentTallyPage/EquipmentTallyPage.tsx | 2 +- 3 files changed, 4 insertions(+), 33 deletions(-) diff --git a/src/Components/DashboardPage/Technician/TechnicianLogButtons.tsx b/src/Components/DashboardPage/Technician/TechnicianLogButtons.tsx index 1b782e1..180d53f 100644 --- a/src/Components/DashboardPage/Technician/TechnicianLogButtons.tsx +++ b/src/Components/DashboardPage/Technician/TechnicianLogButtons.tsx @@ -118,40 +118,10 @@ export default function TechnicianLogButtons() { ...styles.text_M, }} > - Item Tally -

- - +
); diff --git a/src/Pages/EquipmentInstanceLogsPage/EquipmentInstanceLogsPage.tsx b/src/Pages/EquipmentInstanceLogsPage/EquipmentInstanceLogsPage.tsx index 80dd527..e78a342 100644 --- a/src/Pages/EquipmentInstanceLogsPage/EquipmentInstanceLogsPage.tsx +++ b/src/Pages/EquipmentInstanceLogsPage/EquipmentInstanceLogsPage.tsx @@ -58,6 +58,7 @@ export default function EquipmentInstanceLogsPage() { minHeight: "100%", minWidth: "100%", flexWrap: "wrap", + marginTop: "2rem", }} >
diff --git a/src/Pages/EquipmentTallyPage/EquipmentTallyPage.tsx b/src/Pages/EquipmentTallyPage/EquipmentTallyPage.tsx index 51101bc..38ab609 100644 --- a/src/Pages/EquipmentTallyPage/EquipmentTallyPage.tsx +++ b/src/Pages/EquipmentTallyPage/EquipmentTallyPage.tsx @@ -54,7 +54,7 @@ export default function EquipmentTallyPage() { } return (
-
+
Date: Wed, 10 Jan 2024 06:30:14 +0800 Subject: [PATCH 20/28] nag butang kog total, borrowed pud, gifix ang magin top, coloran lang og red ang broken. --- .../EquipmentTallyPage/EquipmentTallyPage.tsx | 32 +++++++++++++++++-- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/src/Pages/EquipmentTallyPage/EquipmentTallyPage.tsx b/src/Pages/EquipmentTallyPage/EquipmentTallyPage.tsx index 38ab609..41df947 100644 --- a/src/Pages/EquipmentTallyPage/EquipmentTallyPage.tsx +++ b/src/Pages/EquipmentTallyPage/EquipmentTallyPage.tsx @@ -65,6 +65,7 @@ export default function EquipmentTallyPage() { width: "100%", minHeight: "100%", minWidth: "100%", + marginTop: "6rem" }} >

- Available: + Available: {"\n"} { equipment_instances.data?.filter( (equipment_instance) => @@ -203,7 +204,7 @@ export default function EquipmentTallyPage() { }

- Pending: + Pending: {"\n"} { equipment_instances.data?.filter( (equipment_instance) => @@ -214,7 +215,18 @@ export default function EquipmentTallyPage() { }

- Broken: + Borrowed: {"\n"} + { + equipment_instances.data?.filter( + (equipment_instance) => + equipment_instance.equipment_name == + equipment.name && + equipment_instance.status == "Borrowed" + ).length + } +

+

+ Broken: {"\n"} { equipment_instances.data?.filter( (equipment_instance) => @@ -224,6 +236,20 @@ export default function EquipmentTallyPage() { ).length }

+
+

+ Total: {"\n"} + { + equipment_instances.data?.filter( + (equipment_instance) => + equipment_instance.equipment_name === + equipment.name + ).length + } +

+
From f208582444a7be5dd5e47b9f507ef8ee6efa8d12 Mon Sep 17 00:00:00 2001 From: "Pongot, Jophiel" Date: Wed, 10 Jan 2024 06:41:57 +0800 Subject: [PATCH 21/28] gibutang ko lang sa kilid ang search --- .../DashboardPage/Technician/TechnicianLogButtons.tsx | 4 ++-- src/Pages/EquipmentTallyPage/EquipmentTallyPage.tsx | 10 +++++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/Components/DashboardPage/Technician/TechnicianLogButtons.tsx b/src/Components/DashboardPage/Technician/TechnicianLogButtons.tsx index 180d53f..dde7da6 100644 --- a/src/Components/DashboardPage/Technician/TechnicianLogButtons.tsx +++ b/src/Components/DashboardPage/Technician/TechnicianLogButtons.tsx @@ -56,7 +56,7 @@ export default function TechnicianLogButtons() { ...styles.text_M, }} > - SKU Logs + SKU
History