From 5d221c1a2ccd1048b008f112bb0faa545a1558fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D8=AD=D8=B3=DB=8C=D9=86=20=D9=85=D8=B9=D8=B5=D9=88=D9=85?= =?UTF-8?q?=DB=8C=20=D9=BE=D9=88=D8=B1?= Date: Mon, 29 Jul 2024 21:25:55 +0330 Subject: [PATCH] add chart for phe & add notif && add strp 6 in setting && and .... --- .env | 12 +- .env.production | 2 +- Dockerfile.emergency | 4 +- components/AppHeader/page.jsx | 16 + components/EmployeesComponent/Tasks/page.jsx | 117 +++ components/LoginComponents/LoginStep.jsx | 5 + components/NavBar/NavBAr.jsx | 41 +- components/TaskPage/TasksCard/page.jsx | 128 ++- .../BottomSheet/BottomFilterActivities.jsx | 32 +- plugins/BottomSheet/BottomManageShift.jsx | 2 +- .../BottomSheetAddUserToPositionShiftPlan.jsx | 2 +- plugins/BottomSheet/BottomSheetChangeRole.jsx | 2 +- .../BottomSheetCreateEmployees.jsx | 2 +- .../BottomSheet/BottomSheetCreatePosition.jsx | 4 +- plugins/BottomSheet/BottomSheetCreateRole.jsx | 2 +- .../BottomSheet/BottomSheetCreateRoutine.jsx | 2 +- .../BottomSheet/BottomSheetCreateSection.jsx | 2 +- .../BottomSheet/BottomSheetCreateShifts.jsx | 2 +- plugins/BottomSheet/BottomSheetCreateTask.jsx | 745 ++++++++++++++++++ plugins/BottomSheet/BottomSheetReport.jsx | 6 +- .../BottomSheetReportManageShift.jsx | 44 +- plugins/Charts/CoffeeBrewChart.jsx | 113 +++ plugins/DatePickerIran/page.jsx | 4 +- public/images/notif.png | Bin 0 -> 11308 bytes public/images/setting.png | Bin 0 -> 10911 bytes public/sw.js.map | 2 +- src/app/acount/page.jsx | 33 +- src/app/coffee-brew/page.jsx | 4 +- src/app/employees/page.jsx | 88 ++- src/app/home/page.jsx | 145 +--- src/app/layout.jsx | 97 ++- src/app/news/page.jsx | 557 +++++++++++++ src/app/shifts/page.jsx | 7 +- src/app/tasks/page.jsx | 195 +++-- style/globals.css | 10 +- 35 files changed, 2038 insertions(+), 389 deletions(-) create mode 100644 components/EmployeesComponent/Tasks/page.jsx create mode 100644 plugins/BottomSheet/BottomSheetCreateTask.jsx create mode 100644 plugins/Charts/CoffeeBrewChart.jsx create mode 100644 public/images/notif.png create mode 100644 public/images/setting.png create mode 100644 src/app/news/page.jsx diff --git a/.env b/.env index dc12361..59f6f27 100644 --- a/.env +++ b/.env @@ -1,9 +1,9 @@ NODE_ENV="development" -NEXT_PUBLIC_SERVER_URL=http://192.168.1.100:32767 -NEXT_PUBLIC_PUBLIC_URL=http://192.168.1.100:32767 -NEXT_PUBLIC_API_URL=http://192.168.1.100:32767/api -NEXT_PUBLIC_VERSION=1.0.1.2 +NEXT_PUBLIC_SERVER_URL=http://192.168.1.10:32767 +NEXT_PUBLIC_PUBLIC_URL=http://192.168.1.10:32767 +NEXT_PUBLIC_API_URL=http://192.168.1.10:32767/api +# NEXT_PUBLIC_VERSION=1.0.1.2 # SECURE_LOCAL_STORAGE_HASH_KEY=f1da2b2c7a4c446934267fea631102ec389b5b99 # NEXT_PUBLIC_API_URL_IMAGE=https://192.168.88.12:49154/Files/ReportImages # NEXT_PUBLIC_API_URL_BackUp=https://192.168.88.12:49154/Files/BackUps @@ -17,6 +17,6 @@ NEXT_PUBLIC_VERSION=1.0.1.2 # NEXT_PUBLIC_SERVER_URL=https://api.brizco.io # NEXT_PUBLIC_PUBLIC_URL=https://api.brizco.io # NEXT_PUBLIC_API_URL=https://api.brizco.io/api -# NEXT_PUBLIC_VERSION=1.0.1.2 +# NEXT_PUBLIC_VERSION=1.0.3.4 # NEXT_PUBLIC_API_URL_IMAGE=https://api.macsonline.ir/Files/ReportImages -# NEXT_PUBLIC_API_URL_BackUp=https://api.macsonline.ir/Files/BackUps \ No newline at end of file +# NEXT_PUBLIC_API_URL_BackUp=https://api.macsonline.ir/Files/Back1.10 \ No newline at end of file diff --git a/.env.production b/.env.production index 5d011a0..6060884 100644 --- a/.env.production +++ b/.env.production @@ -2,4 +2,4 @@ NODE_ENV="production" NEXT_PUBLIC_SERVER_URL=https://api.brizco.io NEXT_PUBLIC_PUBLIC_URL=https://api.brizco.io NEXT_PUBLIC_API_URL=https://api.brizco.io/api -NEXT_PUBLIC_VERSION=1.0.1.2 \ No newline at end of file +NEXT_PUBLIC_VERSION=1.0.3.4 \ No newline at end of file diff --git a/Dockerfile.emergency b/Dockerfile.emergency index 29cde32..8f9c32f 100644 --- a/Dockerfile.emergency +++ b/Dockerfile.emergency @@ -14,5 +14,5 @@ CMD ["/app/node_modules/.bin/next", "start"] -# docker build -f Dockerfile.emergency -t registry.vnfco.ir/brizco/web:1.0.1.2 . -# docker push registry.vnfco.ir/brizco/web:1.0.1.2 \ No newline at end of file +# docker build -f Dockerfile.emergency -t registry.vnfco.ir/brizco/web:1.0.3.4 . +# docker push registry.vnfco.ir/brizco/web:1.0.3.4 \ No newline at end of file diff --git a/components/AppHeader/page.jsx b/components/AppHeader/page.jsx index 26cb5b8..9db6809 100644 --- a/components/AppHeader/page.jsx +++ b/components/AppHeader/page.jsx @@ -7,6 +7,8 @@ import React, { useContext } from "react"; import { useLongPress } from "@uidotdev/usehooks"; import { toast } from "react-toastify"; import AppContext from "@ctx/AppContext"; +import notifIcon from "@img/notif.png"; +import Image from "next/image"; const AppHeader = ({ title, @@ -26,9 +28,11 @@ const AppHeader = ({ userIconHref, userRole, logOut, + notif, }) => { const router = useRouter(); const CTX = useContext(AppContext); + const notifUnreadData = CTX.state.notifUnreadData; const handlelogOut = () => { CTX.setStepLogin(0); @@ -187,6 +191,18 @@ const AppHeader = ({ ) : ( "" )} + + {notif && ( + + {notifUnreadData > 0 && ( +
+
+
+ )} + + + + )} ) : (
{ + const CTX = useContext(AppContext); + const tasksData = CTX.state.tasksData; + const stopGetTasks = CTX.state.stopGetTasks; + const pageGetTasks = CTX.state.pageGetTasks; + const shiftsData = CTX.state.shiftsData; + const permissions = CTX.state.profile?.permissions; + + const [listTaskActive, setListTaskActive] = useState(-1); + + const handleInfiniteNextFetchTask = () => { + CTX.setPageGetTasks((e) => e + 1); + CTX.GetTasks(pageGetTasks + 1); + }; + + const handleListTaskActive = (id, index) => { + if (index == listTaskActive) { + setListTaskActive(-1); + } else { + setListTaskActive(index); + CTX.GetTasks(0, id); + } + }; + + return ( + <> + {shiftsData.length > 0 ? ( + <> + {shiftsData?.map((e, index) => ( + <> +
+
handleListTaskActive(e?.id, index)} + > +

{e?.title}

+ +
+ + + +
+
+
+ + {listTaskActive == index && ( +
+ {tasksData.length != 0 ? ( + + + + ) : ( + + )} +
+ )} + + ))} + + ) : ( + + )} + + ); +}; + +export default TasksEmployees; diff --git a/components/LoginComponents/LoginStep.jsx b/components/LoginComponents/LoginStep.jsx index 4de15b1..d2cdb77 100644 --- a/components/LoginComponents/LoginStep.jsx +++ b/components/LoginComponents/LoginStep.jsx @@ -25,6 +25,11 @@ const LoginStep = (props) => { closeOnClick: true, }); } else if (!roleCheckBox) { + toast.error(`برای ورود تایید قوانین الزامی است`, { + position: "bottom-right", + closeOnClick: true, + }); + setTimeout(() => { setAlertRolCheckBox(true); }, 100); diff --git a/components/NavBar/NavBAr.jsx b/components/NavBar/NavBAr.jsx index 6ffe936..9b3f517 100644 --- a/components/NavBar/NavBAr.jsx +++ b/components/NavBar/NavBAr.jsx @@ -5,12 +5,14 @@ import React, { useContext, useEffect, useState } from "react"; import { usePathname } from "next/navigation"; import Image from "next/image"; import logo from "@img/logo.png"; +import setting from "@img/setting.png"; import AppContext from "@ctx/AppContext"; import HasPermission from "plugins/HasPermission/page"; const NavBAr = (props) => { const usePath = usePathname(); const CTX = useContext(AppContext); + const notifUnreadData = CTX.state.notifUnreadData; const [profileFill, setProfileFill] = useState(false); const permissions = CTX.state.profile?.permissions; @@ -145,34 +147,16 @@ const NavBAr = (props) => { <> {usePath.includes("/employees") ? ( -
- - - +
+
+ +
) : (
- - - +
+ +
)} @@ -182,6 +166,13 @@ const NavBAr = (props) => { {HasPermission("ViewActivities", permissions) && ( <> + {notifUnreadData > 0 && ( +
+
+
+
+
+ )} {usePath.includes("/tasks") ? (
diff --git a/components/TaskPage/TasksCard/page.jsx b/components/TaskPage/TasksCard/page.jsx index af925c6..4012434 100644 --- a/components/TaskPage/TasksCard/page.jsx +++ b/components/TaskPage/TasksCard/page.jsx @@ -15,67 +15,111 @@ const TasksCard = ({ tasksData, permissions }) => { const goToEditTask = (id) => { if (!!HasPermission("ManageTasks", permissions)) { CTX.setGoToEditTask(true); - router.push("/tasks/add-task?new=false"); CTX.GetTask(id); CTX.setIdEditTask(id); + CTX.setBottomSheetCreateTaskOpen(true); } }; return ( -
+
{tasksData?.map((e, index) => ( -
{ - goToEditTask(e.id); - }} - > -
- {/*
+
+
+
+ {/*
*/} -
-
- {e?.scheduleType == 0 - ? "روزانه" - : e?.scheduleType == 1 - ? "هفتگی" - : e?.scheduleType == 2 - ? "مخصوص" - : ""} +
+
+ {e?.scheduleType == 0 + ? "روزانه" + : e?.scheduleType == 1 + ? "هفتگی" + : e?.scheduleType == 2 + ? "مخصوص" + : ""} +
+ +
+ +
+ {e?.shifts[0]} +
+ {e?.days?.length > 0 && ( + <> + {e?.days.map((s) => ( + <> +
+
+ {" "} + {s} +
+ + ))} + + )}
-
- {e?.shifts[0]} +
+ {" "} + {e?.positions[0]}
- {e?.days?.length > 0 && ( - <> - {e?.days.map((s) => ( - <> -
-
- {" "} - {s} -
- - ))} - - )} -
- -
- -
- {" "} - {e?.positions[0]}
+ {HasPermission("ManageShifts", permissions) && ( +
+
goToEditTask(e.id)} + > + + + + + + + + + + + + + + + +
+
+ )}
-

+

{e?.title}{" "}

diff --git a/plugins/BottomSheet/BottomFilterActivities.jsx b/plugins/BottomSheet/BottomFilterActivities.jsx index 1e3eb34..f1b572a 100644 --- a/plugins/BottomSheet/BottomFilterActivities.jsx +++ b/plugins/BottomSheet/BottomFilterActivities.jsx @@ -12,16 +12,22 @@ import moment from "jalali-moment"; import HasPermission from "plugins/HasPermission/page"; import PersianNumber from "plugins/PersianNumber"; -const BottomFilterActivities = (props) => { +const BottomFilterActivities = ({ + dateQueryFilterValue, + setActiveStaffIdValue, + activeStaffId, + setActiveStaff, +}) => { const CTX = useContext(AppContext); - const [typeFilter, setTypeFilter] = useState(0); const handleFilterActivity = (num) => { - setTypeFilter(num); + setActiveStaffIdValue(num); }; const handleChangeFilter = () => { - CTX.GetActivity(null, null, 0, typeFilter); + setActiveStaff(-1); + CTX.GetUserStaff(dateQueryFilterValue); + // CTX.GetActivity(null, null, 0, dateQueryFilterValue, activeStaffId); CTX.setBottomFilterActivitiesOpen(false); CTX.setStopGetActivities(false); CTX.setPageGetActivity(0); @@ -32,7 +38,7 @@ const BottomFilterActivities = (props) => { // onSpringStart={(e) => handleBottomSheetCreateRole(e)} open={CTX.state.BottomFilterActivitiesOpen} onDismiss={() => CTX.setBottomFilterActivitiesOpen(false)} - blocking={false} + blocking={true} >

@@ -43,9 +49,9 @@ const BottomFilterActivities = (props) => {

handleFilterActivity(3)} + onClick={() => handleFilterActivity(2)} >

اکتیویتی های دیروز @@ -63,9 +69,9 @@ const BottomFilterActivities = (props) => {

handleFilterActivity(0)} + onClick={() => handleFilterActivity(1)} >

اکتیویتی های امروز @@ -80,9 +86,9 @@ const BottomFilterActivities = (props) => {

handleFilterActivity(1)} + onClick={() => handleFilterActivity(3)} >

اکتیویتی های فردا @@ -100,9 +106,9 @@ const BottomFilterActivities = (props) => {

handleFilterActivity(2)} + onClick={() => handleFilterActivity(12)} >

اکتیویتی های هفته

diff --git a/plugins/BottomSheet/BottomManageShift.jsx b/plugins/BottomSheet/BottomManageShift.jsx index ccee12e..99e8b13 100644 --- a/plugins/BottomSheet/BottomManageShift.jsx +++ b/plugins/BottomSheet/BottomManageShift.jsx @@ -179,7 +179,7 @@ const BottomManageShift = (props) => { onSpringStart={(e) => handleBottomSheetCreateEmployeesOpen(e)} open={CTX.state.BottomManageShiftOpen} onDismiss={() => CTX.setBottomManageShiftOpen(false)} - blocking={false} + blocking={true} >

diff --git a/plugins/BottomSheet/BottomSheetAddUserToPositionShiftPlan.jsx b/plugins/BottomSheet/BottomSheetAddUserToPositionShiftPlan.jsx index eda286b..49621f9 100644 --- a/plugins/BottomSheet/BottomSheetAddUserToPositionShiftPlan.jsx +++ b/plugins/BottomSheet/BottomSheetAddUserToPositionShiftPlan.jsx @@ -39,7 +39,7 @@ const BottomSheetAddUserToPositionShiftPlan = ({ CTX.setBottomSheetAddUserToPositionShiftPlanOpen(false)} - blocking={false} + blocking={true} >

diff --git a/plugins/BottomSheet/BottomSheetChangeRole.jsx b/plugins/BottomSheet/BottomSheetChangeRole.jsx index 4029bae..dd1d2d7 100644 --- a/plugins/BottomSheet/BottomSheetChangeRole.jsx +++ b/plugins/BottomSheet/BottomSheetChangeRole.jsx @@ -24,7 +24,7 @@ const BottomSheetChangeRole = (props) => { CTX.setBottomSheetChangeRoleOpen(false)} - blocking={false} + blocking={true} >

diff --git a/plugins/BottomSheet/BottomSheetCreateEmployees.jsx b/plugins/BottomSheet/BottomSheetCreateEmployees.jsx index 6f9e492..a99efd2 100644 --- a/plugins/BottomSheet/BottomSheetCreateEmployees.jsx +++ b/plugins/BottomSheet/BottomSheetCreateEmployees.jsx @@ -195,7 +195,7 @@ const BottomSheetCreateEmployees = (props) => { onSpringStart={(e) => handleBottomSheetCreateEmployeesOpen(e)} open={CTX.state.BottomSheetCreateEmployeesOpen} onDismiss={() => CTX.setBottomSheetCreateEmployeesOpen(false)} - blocking={false} + blocking={true} >

diff --git a/plugins/BottomSheet/BottomSheetCreatePosition.jsx b/plugins/BottomSheet/BottomSheetCreatePosition.jsx index 5d5a2bf..b141eba 100644 --- a/plugins/BottomSheet/BottomSheetCreatePosition.jsx +++ b/plugins/BottomSheet/BottomSheetCreatePosition.jsx @@ -44,6 +44,7 @@ const BottomSheetCreatePosition = (props) => { description, title, sectionId, + permissions: [""], }; const bodyUpdate = { @@ -51,6 +52,7 @@ const BottomSheetCreatePosition = (props) => { title, sectionId, id: idEditPosition, + permissions: [""], }; const clear = () => { @@ -119,7 +121,7 @@ const BottomSheetCreatePosition = (props) => { onSpringStart={(e) => handleBottomSheetCreatePositionOpen(e)} open={CTX.state.BottomSheetCreatePositionOpen} onDismiss={() => CTX.setBottomSheetCreatePositionOpen(false)} - blocking={false} + blocking={true} >

diff --git a/plugins/BottomSheet/BottomSheetCreateRole.jsx b/plugins/BottomSheet/BottomSheetCreateRole.jsx index a7ecd84..aa5592c 100644 --- a/plugins/BottomSheet/BottomSheetCreateRole.jsx +++ b/plugins/BottomSheet/BottomSheetCreateRole.jsx @@ -109,7 +109,7 @@ const BottomSheetCreateRole = (props) => { onSpringStart={(e) => handleBottomSheetCreateRole(e)} open={CTX.state.BottomSheetCreateRoleOpen} onDismiss={() => CTX.setBottomSheetCreateRoleOpen(false)} - blocking={false} + blocking={true} >

افزودن نقش جدید

diff --git a/plugins/BottomSheet/BottomSheetCreateRoutine.jsx b/plugins/BottomSheet/BottomSheetCreateRoutine.jsx index 195393a..a148fa9 100644 --- a/plugins/BottomSheet/BottomSheetCreateRoutine.jsx +++ b/plugins/BottomSheet/BottomSheetCreateRoutine.jsx @@ -98,7 +98,7 @@ const BottomSheetCreateRoutine = (props) => { onSpringStart={(e) => handleBottomSheetCreateRoutineOpen(e)} open={CTX.state.BottomSheetCreateRoutineOpen} onDismiss={() => CTX.setBottomSheetCreateRoutineOpen(false)} - blocking={false} + blocking={true} >

diff --git a/plugins/BottomSheet/BottomSheetCreateSection.jsx b/plugins/BottomSheet/BottomSheetCreateSection.jsx index 77376d8..f61f338 100644 --- a/plugins/BottomSheet/BottomSheetCreateSection.jsx +++ b/plugins/BottomSheet/BottomSheetCreateSection.jsx @@ -98,7 +98,7 @@ const BottomSheetCreateSection = (props) => { onSpringStart={(e) => handleBottomSheetCreateSectionOpen(e)} open={CTX.state.BottomSheetCreateSectionOpen} onDismiss={() => CTX.setBottomSheetCreateSectionOpen(false)} - blocking={false} + blocking={true} >

diff --git a/plugins/BottomSheet/BottomSheetCreateShifts.jsx b/plugins/BottomSheet/BottomSheetCreateShifts.jsx index 7d908c3..0c7665e 100644 --- a/plugins/BottomSheet/BottomSheetCreateShifts.jsx +++ b/plugins/BottomSheet/BottomSheetCreateShifts.jsx @@ -149,7 +149,7 @@ const BottomSheetCreateShifts = (props) => { onSpringStart={(e) => handleBottomSheetCreateShift(e)} open={CTX.state.BottomSheetCreateShiftsOpen} onDismiss={() => CTX.setBottomSheetCreateShiftsOpen(false)} - blocking={false} + blocking={true} >

diff --git a/plugins/BottomSheet/BottomSheetCreateTask.jsx b/plugins/BottomSheet/BottomSheetCreateTask.jsx new file mode 100644 index 0000000..0e8dda2 --- /dev/null +++ b/plugins/BottomSheet/BottomSheetCreateTask.jsx @@ -0,0 +1,745 @@ +"use client"; + +import React, { useContext, useEffect, useRef, useState } from "react"; +import { BottomSheet } from "react-spring-bottom-sheet"; +import Input from "plugins/Input/page"; +import AppContext from "@ctx/AppContext"; +import SimpleReactValidator from "simple-react-validator"; +import { toast } from "react-toastify"; +import Buttonbriz from "plugins/Buttonbriz/page"; +import { useRouter } from "next/navigation"; +import DatePickerIran from "plugins/DatePickerIran/page"; +import moment from "jalali-moment"; +import Chapar from "plugins/Chapar"; + +const BottomSheetCreateTask = (props) => { + const CTX = useContext(AppContext); + + const router = useRouter(); + + const [routinesSelectData, setRoutinesSelectData] = useState([]); + const [routineForTaskCurrent, setRoutineForTaskCurrent] = useState([]); + + const [positionsSelectData, setPositionsSelectData] = useState([]); + const [positionsForTaskCurrent, setPositionsForTaskCurrent] = useState([]); + + const [shiftsSelectData, setShiftsSelectData] = useState([]); + const [shiftsForTaskCurrent, setShiftsForTaskCurrent] = useState([]); + + const [title, setTitle] = useState(""); + const [description, setDescription] = useState(""); + const [scheduleType, setScheduleType] = useState(1); + + const [birthDateTimeStamp, setBirthDateTimeStamp] = useState(0); + + const [shiftsDaysSelectData, setShiftsDaysSelectData] = useState(null); + const [shiftsDaysCurrent, setShiftsDaysCurrent] = useState(null); + + const [, forceUpdate] = useState(); + + const routinesData = CTX.state.routinesData; + const positionsData = CTX.state.positionsData; + const shiftsData = CTX.state.shiftsData; + const routineForTaskChoose = CTX.state.routineForTaskChoose; + const positionsForTaskChoose = CTX.state.positionsForTaskChoose; + const shiftsForTaskChoose = CTX.state.shiftsForTaskChoose; + const shiftsDaysChoose = CTX.state.shiftsDaysChoose; + const goToEditTask = CTX.state.goToEditTask; + const taskData = CTX.state.taskData; + const idEditTask = CTX.state.idEditTask; + + const schedule = [ + { key: "هفتگی", value: 1 }, + { key: "روزانه", value: 0 }, + { key: "مخصوص یک روز ", value: 2 }, + ]; + + const week = [ + { key: "شنبه", value: 6 }, + { key: "یکشنبه", value: 0 }, + { key: "دوشنبه", value: 1 }, + { key: "سه شنبه", value: 2 }, + { key: "چهار شنبه", value: 3 }, + { key: "پنج شنبه", value: 4 }, + { key: "جمعه", value: 5 }, + ]; + + const validator = useRef( + new SimpleReactValidator({ + messages: { + required: "پر کردن این فیلد الزامی میباشد", + }, + element: (message) => ( + <> +

+ {message} +
+ + ), + }) + ); + + const body = { + title, + description, + routines: routineForTaskChoose, + positions: positionsForTaskChoose, + shifts: shiftsForTaskChoose, + scheduleType, + setFor: + birthDateTimeStamp && + moment + .utc( + [ + birthDateTimeStamp.year, + birthDateTimeStamp.month, + birthDateTimeStamp.day, + ], + "jYYYY-jMM-jDDTHH" + ) + .unix(), + days: shiftsDaysChoose, + }; + + const bodyUpdate = { + title, + description, + routines: routineForTaskChoose, + positions: positionsForTaskChoose, + shifts: shiftsForTaskChoose, + scheduleType, + setFor: + birthDateTimeStamp && + moment + .utc( + [ + birthDateTimeStamp.year, + birthDateTimeStamp.month, + birthDateTimeStamp.day, + ], + "jYYYY-jMM-jDDTHH" + ) + .unix(), + days: shiftsDaysChoose, + id: idEditTask, + }; + + const clear = () => { + setPositionsForTaskCurrent([]); + // setPositionsSelectData([]); + setRoutineForTaskCurrent([]); + // setRoutinesSelectData([]); + setBirthDateTimeStamp(0); + setScheduleType([]); + setDescription(""); + setTitle(""); + setShiftsForTaskCurrent([]); + // setShiftsSelectData([]); + setShiftsDaysCurrent([]); + // setShiftsDaysSelectData([]); + CTX.setRoutineForTaskChoose([]); + CTX.setPositionsForTaskChoose([]); + CTX.setShiftsForTaskChoose([]); + CTX.setShiftsDaysChoose([]); + }; + + const CreateTask = async (body) => { + CTX.setLoading(true); + try { + const data = await Chapar.post( + `${process.env.NEXT_PUBLIC_API_URL}/task`, + JSON.stringify(body), + { + headers: { + Authorization: "Bearer " + localStorage.getItem("token"), + }, + } + ); + toast.success(`فعالیت ساخته شد`, { + position: "bottom-right", + closeOnClick: true, + }); + clear(); + CTX.setBottomSheetCreateTaskOpen(false); + CTX.setLoading(false); + } catch ({ error, status }) { + toast.error(`${error?.response?.data?.message}`, { + position: "bottom-right", + closeOnClick: true, + }); + CTX.setLoading(false); + } + }; + + const UpdateTask = async (body) => { + CTX.setLoading(true); + try { + const data = await Chapar.put( + `${process.env.NEXT_PUBLIC_API_URL}/task`, + body, + + { + headers: { + Authorization: "Bearer " + localStorage.getItem("token"), + }, + } + ); + toast.success(`فعالیت ویرایش شد`, { + position: "bottom-right", + closeOnClick: true, + }); + + // router-> + + CTX.setLoading(false); + + CTX.setStopGetTasks(false); + CTX.setPageGetTasks(0); + CTX.setBottomSheetCreateTaskOpen(false); + } catch ({ error, status }) { + toast.error(`${error?.response?.data?.message}`, { + position: "bottom-right", + closeOnClick: true, + }); + setLoading(false); + } + }; + + const handleCreateTask = (update) => { + if (scheduleType == 0) { + validator.current.message("shiftsDaysChoose", true, "required"); + validator.current.message("birthDateTimeStamp", true, "required"); + } + + if (scheduleType == 1) { + validator.current.message("birthDateTimeStamp", true, "required"); + } + + if (scheduleType == 2) { + validator.current.message("shiftsDaysChoose", true, "required"); + } + + if (validator.current.allValid()) { + if (update == "UPDATE") { + UpdateTask(bodyUpdate); + } else { + CreateTask(body); + } + } else { + toast.error("پرکردن همه ی فیلد ها واجب است", { + position: "bottom-right", + autoClose: 2000, + hideProgressBar: false, + closeOnClick: true, + pauseOnHover: true, + draggable: true, + progress: undefined, + }); + + validator.current.showMessages(); + forceUpdate(1); + } + }; + + const deleteRoutineForTask = (value) => { + CTX.setRoutineForTaskChoose( + routineForTaskChoose.filter((el) => el !== value) + ); + }; + + const deletePositionForTask = (value) => { + CTX.setPositionsForTaskChoose( + positionsForTaskChoose.filter((el) => el !== value) + ); + }; + + const deleteShiftForTask = (value) => { + CTX.setShiftsForTaskChoose( + shiftsForTaskChoose.filter((el) => el !== value) + ); + }; + + const deleteShiftsDaysForTask = (value) => { + CTX.setShiftsDaysChoose(shiftsDaysChoose.filter((el) => el !== value)); + }; + + const handleBottomSheetCreateTaskOpen = (e) => { + if (e.type == "OPEN") { + CTX.GetRoutines(); + CTX.GetPositions(); + } else if (e.type == "CLOSE") { + clear(); + } + }; + + useEffect(() => { + setRoutinesSelectData( + routinesData?.map((item) => ({ + key: item?.name, + value: item?.id, + })) + ); + }, [routinesData]); + + useEffect(() => { + setPositionsSelectData( + positionsData?.map((item) => ({ + key: item?.name, + value: item?.id, + })) + ); + }, [positionsData]); + + useEffect(() => { + setShiftsSelectData( + shiftsData?.map((item) => ({ + key: item?.title, + value: item?.id, + })) + ); + }, [shiftsData]); + + useEffect(() => { + setShiftsDaysSelectData( + shiftsForTaskChoose?.length > 0 && + shiftsData + ?.find((e) => e?.id == shiftsForTaskChoose[0]) + ?.days?.map((item) => ({ + key: week?.find((e) => e.value == item)?.key, + value: item, + })) + ); + }, [shiftsForTaskChoose]); + + useEffect(() => { + switch (scheduleType) { + case 0: + setBirthDateTimeStamp(0); + CTX.setShiftsDaysChoose([]); + + break; + case 1: + setBirthDateTimeStamp(0); + + break; + case 2: + CTX.setShiftsDaysChoose([]); + + break; + default: + break; + } + }, [scheduleType]); + + useEffect(() => { + if (goToEditTask) { + // const date = moment + // .unix(taskData.birthDateTimeStamp) + // .locale("fa") + // .format("YYYY/MM/DD") + // .split("/"); + + // setBirthDateTimeStamp({ + // day: parseInt(date[2]), + // month: parseInt(date[1]), + // year: parseInt(date[0]), + // }); + setScheduleType(taskData.scheduleType); + setDescription(taskData.description); + setTitle(taskData.title); + CTX.setRoutineForTaskChoose( + taskData.routines?.map((item) => item.routineId) + ); + CTX.setPositionsForTaskChoose( + taskData.positions?.map((item) => item.positionId) + ); + CTX.setShiftsDaysChoose(taskData.days?.map((item) => item.dayOfWeek)); + CTX.setShiftsForTaskChoose(taskData.shifts?.map((item) => item.shiftId)); + } + }, [taskData]); + + return ( + handleBottomSheetCreateTaskOpen(e)} + open={CTX.state.BottomSheetCreateTaskOpen} + onDismiss={() => CTX.setBottomSheetCreateTaskOpen(false)} + blocking={true} + > +
+

+ افزودن تسک جدید{" "} +

+
+
+
+
+ { + setTitle(e.target.value); + validator.current.showMessageFor("title"); + }} + style="text-right" + validator={true} + validatorData={validator.current.message( + "title", + title, + "required" + )} + /> +
+ +
+ { + setDescription(e.target.value); + }} + textarea={true} + style="text-right" + /> +
+ {/* ===========routine=============== */} + +
+ { + setRoutineForTaskCurrent(e.target.value); + validator.current.showMessageFor("routines"); + + if (!!routineForTaskChoose.find((b) => b == e.target.value)) { + toast.error("روز تکراری است", { + position: "bottom-right", + closeOnClick: true, + }); + } else { + CTX.setRoutineForTaskChoose(() => [e.target.value]); + } + }} + style="text-right" + validator={true} + validatorData={validator.current.message( + "routines", + routineForTaskChoose, + ["required", { min: 1 }] + )} + select={true} + selectData={routinesSelectData} + defaultValue={"انتخاب کنید"} + /> +
+ +
+ {routineForTaskChoose && + routineForTaskChoose.map((e, index) => ( +
+ {/*
deleteRoutineForTask(e)} + >
*/} + +
+

+ {routinesData?.find((b) => b.id == e)?.name} +

+
+
+ ))} +
+ {/* ===========position=============== */} + +
+ { + setPositionsForTaskCurrent(e.target.value); + validator.current.showMessageFor("positions"); + + if (positionsForTaskChoose.length >= 1) { + toast.error("شما فقط یک پوزیشن را میتوانید انتخاب کنید", { + position: "bottom-right", + closeOnClick: true, + }); + } else { + if ( + !!positionsForTaskChoose.find((b) => b == e.target.value) + ) { + toast.error("پوزیشن تکراری است", { + position: "bottom-right", + closeOnClick: true, + }); + } else { + CTX.setPositionsForTaskChoose((current) => [ + ...current, + e.target.value, + ]); + } + } + }} + style="text-right" + validatorData={validator.current.message( + "positions", + positionsForTaskChoose, + ["required", { min: 1 }] + )} + select={true} + selectData={positionsSelectData} + defaultValue={"انتخاب کنید"} + /> +
+ +
+ {positionsForTaskChoose && + positionsForTaskChoose.map((e, index) => ( +
+
deletePositionForTask(e)} + >
+ +
+

+ {positionsData?.find((b) => b.id == e)?.name} +

+
+
+ ))} +
+ + {/* ===========shifts=============== */} +
+ { + setShiftsForTaskCurrent(e.target.value); + validator.current.showMessageFor("shifts"); + + if (!!shiftsForTaskChoose.find((b) => b == e.target.value)) { + toast.error("روز تکراری است", { + position: "bottom-right", + closeOnClick: true, + }); + } else { + CTX.setShiftsForTaskChoose(() => [e.target.value]); + } + }} + style="text-right" + validatorData={validator.current.message( + "shifts", + shiftsForTaskChoose, + ["required", { min: 1 }] + )} + select={true} + selectData={shiftsSelectData} + defaultValue={"انتخاب کنید"} + /> +
+ +
+ {shiftsForTaskChoose && + shiftsForTaskChoose.map((e, index) => ( +
+ {/*
deleteShiftForTask(e)} + >
*/} + +
+

+ {shiftsData?.find((b) => b?.id == e)?.title} +

+
+
+ ))} +
+ + {/* ===========scheduleType=============== */} + +
+ { + setScheduleType(parseInt(e.target.value)); + validator.current.showMessageFor("scheduleType"); + }} + style="text-right" + validator={true} + validatorData={validator.current.message( + "scheduleType", + scheduleType, + ["required"] + )} + select={true} + selectData={[ + { key: "هفتگی", value: 1 }, + { key: "روزانه", value: 0 }, + { key: "مخصوص یک روز ", value: 2 }, + ]} + defaultValue={"انتخاب کنید"} + /> +
+ + {/*
+
+
+

+ {schedule?.find((b) => b.value == scheduleType)?.key} +

+
+
+
*/} + + {/* ===========scheduleType setFor=============== */} + + {scheduleType == 2 && ( + { + setBirthDateTimeStamp(e); + validator.current.showMessageFor("birthDateTimeStamp"); + }} + date={birthDateTimeStamp} + zindex="z-[101]" + validator={true} + validatorData={validator.current.message( + "birthDateTimeStamp", + birthDateTimeStamp, + ["required"] + )} + /> + )} +
+ {/* ===========shiftsDaysTask=============== */} + {scheduleType == 1 && ( + <> +
+ { + setShiftsDaysCurrent(e.target.value); + validator.current.showMessageFor("shiftsDaysChoose"); + + if (!!shiftsDaysChoose.find((b) => b == e.target.value)) { + toast.error("روز تکراری است", { + position: "bottom-right", + closeOnClick: true, + }); + } else { + CTX.setShiftsDaysChoose((current) => [ + ...current, + parseInt(e.target.value), + ]); + } + }} + validator={true} + validatorData={validator.current.message( + "shiftsDaysChoose", + shiftsDaysChoose, + ["required", { min: 1 }] + )} + style="text-right" + select={true} + selectData={shiftsDaysSelectData} + defaultValue={"انتخاب کنید"} + /> +
+ +
+ {shiftsDaysChoose && + shiftsDaysChoose.map((e, index) => ( +
+
deleteShiftsDaysForTask(e)} + >
+ +
+

+ {week?.find((b) => b.value == e).key} +

+
+
+ ))} +
+ + )} + {goToEditTask ? ( + handleCreateTask("UPDATE")} + subButton={true} + subButtonTitle="حذف فعالیت" + subButtonEvent={() => CTX.DeleteTask(idEditTask)} + /> + ) : ( + handleCreateTask()} + /> + )}{" "} +
+
+ ); +}; + +export default BottomSheetCreateTask; diff --git a/plugins/BottomSheet/BottomSheetReport.jsx b/plugins/BottomSheet/BottomSheetReport.jsx index 5717aa6..e40263e 100644 --- a/plugins/BottomSheet/BottomSheetReport.jsx +++ b/plugins/BottomSheet/BottomSheetReport.jsx @@ -27,10 +27,10 @@ const BottomSheetReport = (props) => { CTX.setBottomSheetReportOpen(false)} - blocking={false} + blocking={true} > -
-

گزارشات

+
+

گزارشات

diff --git a/plugins/BottomSheet/BottomSheetReportManageShift.jsx b/plugins/BottomSheet/BottomSheetReportManageShift.jsx index c0ad65a..2837342 100644 --- a/plugins/BottomSheet/BottomSheetReportManageShift.jsx +++ b/plugins/BottomSheet/BottomSheetReportManageShift.jsx @@ -15,6 +15,7 @@ const BottomSheetReportManageShift = (props) => { const CTX = useContext(AppContext); const shiftplansData = CTX.state.shiftPlansData; const [shiftplans, setShiftplans] = useState([]); + const [type, setType] = useState(0); // const reportDetail = CTX.state.reportDetail; @@ -31,9 +32,16 @@ const BottomSheetReportManageShift = (props) => { const handleBottomSheetCreateRole = (e) => { if (e.type == "OPEN") { CTX.GetShifPlans(0, 12); + } else if (e.type == "CLOSE") { + setType(0); } }; + const handleReportManageShift = (num, filterId) => { + setType(num); + CTX.GetShifPlans(0, filterId); + }; + const groupObjectsByPlanFor = (responseData) => { const groupedData = {}; @@ -107,12 +115,42 @@ const BottomSheetReportManageShift = (props) => { onSpringStart={(e) => handleBottomSheetCreateRole(e)} open={CTX.state.BottomSheetReportManageShiftOpen} onDismiss={() => CTX.setBottomSheetReportManageShiftOpen(false)} - blocking={false} + blocking={true} > -
-

گزارشات

+
+

گزارشات

+
+
handleReportManageShift(0, 12)} + > +

+ همین هفته{" "} +

+
+
handleReportManageShift(1, 11)} + > +

+ هفته بعد{" "} +

+
+

{shiftplans?.map((e, index) => ( diff --git a/plugins/Charts/CoffeeBrewChart.jsx b/plugins/Charts/CoffeeBrewChart.jsx new file mode 100644 index 0000000..b129c97 --- /dev/null +++ b/plugins/Charts/CoffeeBrewChart.jsx @@ -0,0 +1,113 @@ +// components/RecipeChart.js +import React from "react"; +import { Line } from "react-chartjs-2"; +import { + Chart as ChartJS, + CategoryScale, + LinearScale, + PointElement, + LineElement, + Title, + Tooltip, + Legend, +} from "chart.js"; + +ChartJS.register( + CategoryScale, + LinearScale, + PointElement, + LineElement, + Title, + Tooltip, + Legend +); + +const CoffeeBrewChart = ({ data }) => { + console.log("data", data); + const chartData = { + labels: data?.map((entry) => + new Date(entry?.logAt).toLocaleDateString("fa-IR", { + month: "numeric", + day: "numeric", + }) + ), // X-axis labels + datasets: [ + { + label: "Ratio", + data: data?.map((entry) => entry?.ratio), + borderColor: "rgba(75, 192, 192, 1)", + backgroundColor: "rgba(75, 192, 192, 0.2)", + fill: false, + }, + { + label: "Extraction Time", + data: data?.map((entry) => entry?.extractionTime), + borderColor: "rgba(153, 102, 255, 1)", + backgroundColor: "rgba(153, 102, 255, 0.2)", + fill: false, + }, + { + label: "Final Yield", + data: data?.map((entry) => entry?.finalYield), + borderColor: "rgba(255, 159, 64, 1)", + backgroundColor: "rgba(255, 159, 64, 0.2)", + fill: false, + }, + ], + }; + + const options = { + responsive: true, + maintainAspectRatio: false, // Disable aspect ratio to allow custom sizing + plugins: { + legend: { + display: false, // Hide the legend + }, + title: { + display: false, // Hide the title + }, + }, + scales: { + x: { + title: { + display: false, + text: "Date", + font: { + size: 16, + family: "KalamehWeb", // Customize font family if needed + style: "normal", + }, + }, + ticks: { + font: { + size: 12, + family: "KalamehWeb", // Customize font family if needed + style: "normal", + }, + }, + }, + y: { + title: { + display: false, // Hide the y-axis title + }, + ticks: { + font: { + size: 12, + family: "Arial", // Customize font family if needed + style: "normal", + }, + }, + }, + }, + }; + + return ( +

+
+ +
+
+ ); +}; + +export default CoffeeBrewChart; diff --git a/plugins/DatePickerIran/page.jsx b/plugins/DatePickerIran/page.jsx index 9a5f412..91563f7 100644 --- a/plugins/DatePickerIran/page.jsx +++ b/plugins/DatePickerIran/page.jsx @@ -31,7 +31,7 @@ const DatePickerIran = ({
-
+

{title}

@@ -41,7 +41,7 @@ const DatePickerIran = ({ onChange={datePickerEvent} shouldHighlightWeekends inputClassName={`peer w-full border-b placeholder:text-transparent relative !text-right ${ - 2 == 1 ? "form-control-white" : "form-control" + 1 == 1 ? "form-control-white" : "form-control" }`} locale="fa" name={name} diff --git a/public/images/notif.png b/public/images/notif.png new file mode 100644 index 0000000000000000000000000000000000000000..8d351b0c4250a9178c697e78d76fa0836d96909d GIT binary patch literal 11308 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 Rz@5DSXne`2?!3p{{|7N|T-E>p literal 0 HcmV?d00001 diff --git a/public/images/setting.png b/public/images/setting.png new file mode 100644 index 0000000000000000000000000000000000000000..c773f8007f587ccebf186a83ca3cfcb2d2c009d2 GIT binary patch literal 10911 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 eS^knP_QbdEisE@e && \"opaqueredirect\" === e.type ? new Response(e.body, { status: 200, statusText: \"OK\", headers: e.headers }) : e }, { handlerDidError: async ({ request: e })=>\"undefined\" != typeof self ? self.fallback(e) : Response.error() }] }), 'GET');\nworkbox_routing_registerRoute(/.*/i, new workbox_strategies_NetworkOnly({ \"cacheName\":\"dev\", plugins: [{ handlerDidError: async ({ request: e })=>\"undefined\" != typeof self ? self.fallback(e) : Response.error() }] }), 'GET');\n\n\n\n\nself.__WB_DISABLE_DEV_LOGS = true;"],"names":["importScripts","self","skipWaiting","workbox_core_clientsClaim","workbox_precaching_precacheAndRoute","workbox_precaching_cleanupOutdatedCaches","workbox_routing_registerRoute","workbox_strategies_NetworkFirst","plugins","cacheWillUpdate","response","e","type","Response","body","status","statusText","headers","handlerDidError","request","fallback","error","workbox_strategies_NetworkOnly","__WB_DISABLE_DEV_LOGS"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"sw.js","sources":["C:/Users/jp/AppData/Local/Temp/8c3af03a8ba81ebf81af28ca89289773/sw.js"],"sourcesContent":["import {registerRoute as workbox_routing_registerRoute} from 'Y:/projects/brizco/node_modules/workbox-routing/registerRoute.mjs';\nimport {NetworkFirst as workbox_strategies_NetworkFirst} from 'Y:/projects/brizco/node_modules/workbox-strategies/NetworkFirst.mjs';\nimport {NetworkOnly as workbox_strategies_NetworkOnly} from 'Y:/projects/brizco/node_modules/workbox-strategies/NetworkOnly.mjs';\nimport {clientsClaim as workbox_core_clientsClaim} from 'Y:/projects/brizco/node_modules/workbox-core/clientsClaim.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from 'Y:/projects/brizco/node_modules/workbox-precaching/precacheAndRoute.mjs';\nimport {cleanupOutdatedCaches as workbox_precaching_cleanupOutdatedCaches} from 'Y:/projects/brizco/node_modules/workbox-precaching/cleanupOutdatedCaches.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\nimportScripts(\n \"/fallback-development.js\"\n);\n\n\n\n\n\n\n\nself.skipWaiting();\n\nworkbox_core_clientsClaim();\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/offline\",\n \"revision\": \"development\"\n }\n], {\n \"ignoreURLParametersMatching\": [/^utm_/, /^fbclid$/, /ts/]\n});\nworkbox_precaching_cleanupOutdatedCaches();\n\n\n\nworkbox_routing_registerRoute(\"/\", new workbox_strategies_NetworkFirst({ \"cacheName\":\"start-url\", plugins: [{ cacheWillUpdate: async ({ response: e })=>e && \"opaqueredirect\" === e.type ? new Response(e.body, { status: 200, statusText: \"OK\", headers: e.headers }) : e }, { handlerDidError: async ({ request: e })=>\"undefined\" != typeof self ? self.fallback(e) : Response.error() }] }), 'GET');\nworkbox_routing_registerRoute(/.*/i, new workbox_strategies_NetworkOnly({ \"cacheName\":\"dev\", plugins: [{ handlerDidError: async ({ request: e })=>\"undefined\" != typeof self ? self.fallback(e) : Response.error() }] }), 'GET');\n\n\n\n\nself.__WB_DISABLE_DEV_LOGS = true;"],"names":["importScripts","self","skipWaiting","workbox_core_clientsClaim","workbox_precaching_precacheAndRoute","workbox_precaching_cleanupOutdatedCaches","workbox_routing_registerRoute","workbox_strategies_NetworkFirst","plugins","cacheWillUpdate","response","e","type","Response","body","status","statusText","headers","handlerDidError","request","fallback","error","workbox_strategies_NetworkOnly","__WB_DISABLE_DEV_LOGS"],"mappings":"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"} \ No newline at end of file diff --git a/src/app/acount/page.jsx b/src/app/acount/page.jsx index fc4089b..cc27bcf 100644 --- a/src/app/acount/page.jsx +++ b/src/app/acount/page.jsx @@ -18,8 +18,8 @@ const page = () => { const [fistName, setFistName] = useState(""); const [lastName, setLastName] = useState(""); const [phoneNumber, setPhoneNumber] = useState(""); - const [nationalId, setNationalId] = useState(""); - const [birthDateTimeStamp, setBirthDateTimeStamp] = useState(""); + // const [nationalId, setNationalId] = useState(""); + // const [birthDateTimeStamp, setBirthDateTimeStamp] = useState(""); const [, forceUpdate] = useState(); const validator = useRef( @@ -49,7 +49,7 @@ const page = () => { setFistName(profile?.firstName); setLastName(profile?.lastName); setPhoneNumber(profile?.phoneNumber); - setNationalId(profile?.nationalId); + // setNationalId(profile?.nationalId); // setBirthDateTimeStamp( // profile.birthDateTimeStamp < 0 ? ["1376", "09", "14"] : "" @@ -135,6 +135,7 @@ const page = () => { fistName, "required" )} + theme={1} />
@@ -155,6 +156,7 @@ const page = () => { lastName, "required" )} + theme={1} />
@@ -176,35 +178,16 @@ const page = () => { phoneNumber, "required" )} + theme={1} readOnly={true} />
-
- { - setNationalId(e.target.value); - validator.current.showMessageFor("nationalId"); - }} - style="text-right" - validator={true} - validatorData={validator.current.message( - "nationalId", - nationalId, - "required" - )} - /> -
- setBirthDateTimeStamp(e)} date={birthDateTimeStamp} zindex="z-[101]" - /> + /> */}
diff --git a/src/app/coffee-brew/page.jsx b/src/app/coffee-brew/page.jsx index de4229e..e902766 100644 --- a/src/app/coffee-brew/page.jsx +++ b/src/app/coffee-brew/page.jsx @@ -10,6 +10,7 @@ import CoffeeBrewCard from "@comp/CoffeeBrew/CoffeeBrewCard/page"; import AppContext from "@ctx/AppContext"; import Chapar from "plugins/Chapar"; import { toast } from "react-toastify"; +import CoffeeBrewChart from "plugins/Charts/CoffeeBrewChart"; const page = () => { const router = useRouter(); @@ -175,7 +176,8 @@ const page = () => {

تاریخچه ادجاست ها

-
+ + {coffeeBrewData?.pastRecipes?.map((e) => ( diff --git a/src/app/employees/page.jsx b/src/app/employees/page.jsx index a548f61..2662e46 100644 --- a/src/app/employees/page.jsx +++ b/src/app/employees/page.jsx @@ -20,16 +20,23 @@ import ShiftsEmployees from "@comp/EmployeesComponent/Shifts/page"; import ParseJwt from "plugins/ParseJwt/page"; import GoBack from "plugins/GoBack/page"; import HasPermission from "plugins/HasPermission/page"; +import { useRouter } from "next/navigation"; +import TasksEmployees from "@comp/EmployeesComponent/Tasks/page"; +import BottomSheetCreateTask from "plugins/BottomSheet/BottomSheetCreateTask"; // import second from "@img/test.png"; const Employees = (props) => { const CTX = useContext(AppContext); const permissions = CTX.state.profile?.permissions; + const pageGetTasks = CTX.state.pageGetTasks; + + const router = useRouter(); const [activeSection, setActiveSection] = useState(0); useEffect(() => { + CTX.GetUnReadNotif(); CTX.GetRoutines(); }, []); @@ -67,6 +74,11 @@ const Employees = (props) => { } break; + case 5: + if (activeSection != num) { + CTX.GetShifts(); + } + break; default: break; } @@ -79,12 +91,6 @@ const Employees = (props) => { { - GoBack(); - }} />
@@ -103,7 +109,7 @@ const Employees = (props) => {

- +

@@ -158,7 +164,7 @@ const Employees = (props) => {

- +

@@ -209,7 +215,7 @@ const Employees = (props) => {

- +

@@ -263,7 +269,7 @@ const Employees = (props) => {

- +

@@ -317,7 +323,7 @@ const Employees = (props) => {

- +

@@ -357,6 +363,65 @@ const Employees = (props) => {
{activeSection == 4 && }
+
+
handleGetApi(5)} + > +
+
+

+ +

+
+
+

افزودن تسک مجموعه

+
+
+ + {HasPermission("ManageTasks", permissions) && ( + <> + {activeSection == 5 ? ( +
{ + CTX.setTaskData([]); + CTX.setIdEditTask(""); + CTX.setGoToEditTask(false); + CTX.setBottomSheetCreateTaskOpen(true); + }} + > + + + +
+ ) : ( +
+ )} + + )} +
+ {activeSection == 5 && } +
{/* */} @@ -364,6 +429,7 @@ const Employees = (props) => { +
); }; diff --git a/src/app/home/page.jsx b/src/app/home/page.jsx index 2155b8c..ab45b3d 100644 --- a/src/app/home/page.jsx +++ b/src/app/home/page.jsx @@ -34,6 +34,7 @@ const Home = (props) => { useEffect(() => { CTX.GetHomePageData(); CTX.GetLatesCoffeeBrewData(); + CTX.GetUnReadNotif(); }, []); const dataChart = (totalActivitiesCount, doneActivitiesCount) => { @@ -65,9 +66,19 @@ const Home = (props) => { CTX.setBottomSheetReportOpen(true); }; + const handleActiveShiftPlanHom = (index) => { + if (activeShiftPlanHome == index) { + setActiveShiftPlanHome(-1); + } else { + setActiveShiftPlanHome(index); + } + }; + const today = new Date(); const formattedDate = FormatJalaliDate(today); + console.log(latesCoffeeBrewData); + return (
{
-
+ {latesCoffeeBrewData.logBy !== "" ? ( +
+ + + +
+ ) : ( - +
+

+ افزودن ادجاست جدید +

+
-
+ )}
{homePageData?.shiftPlans?.map((e, index) => ( <>
setActiveShiftPlanHome(index)} + onClick={() => handleActiveShiftPlanHom(index)} >
{homePageData?.currentShiftId == e.id && ( -
+
)} -

{e.shiftTitle}

+

{e.shiftTitle}

@@ -159,7 +180,9 @@ const Home = (props) => { viewBox="0 0 151 89" fill="none" xmlns="http://www.w3.org/2000/svg" - className="opacity-80 mt-2 mx-auto" + className={`opacity-80 mt-2 mx-auto tr03 ${ + activeShiftPlanHome == index ? "rotate-180" : "" + }`} > {
- -
-
-
- - - - - -
-
-

شیفت های تمام شده

-

- خروجی اکسل -

-
-
-
- -
-
-
- - - - - -
-
-

شیفت های مجموعه

-

- خروجی اکسل -

-
-
-
- -
-
-
- - - - - -
-
-

- {" "} - کاست تمام شده آیتم ها{" "} -

-

- خروجی اکسل -

-
-
-
diff --git a/src/app/layout.jsx b/src/app/layout.jsx index ed3c3d3..a142788 100644 --- a/src/app/layout.jsx +++ b/src/app/layout.jsx @@ -66,6 +66,9 @@ export default function RootLayout({ children }) { setBottomSheetReportManageShiftOpen, ] = useState(false); + const [BottomSheetCreateTaskOpen, setBottomSheetCreateTaskOpen] = + useState(false); + // BigPlus const [BigPlusOpen, setBigPlusOpen] = useState(false); const [BigPlusRotateIcon, setBigPlusRotateIcon] = useState(false); @@ -94,6 +97,7 @@ export default function RootLayout({ children }) { // createUser/ user const [usersData, setUsersData] = useState([]); + const [userStaffData, setUserStaffData] = useState([]); const [rolesChoose, setRolesChoose] = useState([]); const [userData, setUserData] = useState([]); const [goToEditUser, setGoToEditUser] = useState(false); @@ -166,6 +170,9 @@ export default function RootLayout({ children }) { const [coffeeBrewData, setCoffeeBrewData] = useState([]); const [latesCoffeeBrewData, setLatesCoffeeBrewData] = useState([]); + //notif + const [notifUnreadData, setNotifUnreadData] = useState(""); + const pathname = usePathname(); const router = useRouter(); const hiddenUrls = ["/login", "/pricing", "/about-us", "/"]; @@ -510,6 +517,30 @@ export default function RootLayout({ children }) { setLoading(false); } }; + const GetUserStaff = async (FilterDate) => { + setLoading(true); + try { + const data = await Chapar.get( + `${ + process.env.NEXT_PUBLIC_API_URL + }/user/staff?filter=${FilterDate}&page=${0}`, + + { + headers: { + Authorization: "Bearer " + localStorage.getItem("token"), + }, + } + ); + setUserStaffData(data); + setLoading(false); + } catch ({ error, status }) { + toast.error(`${error?.response?.data?.message}`, { + position: "bottom-right", + closeOnClick: true, + }); + setLoading(false); + } + }; const DeleteUser = async (id) => { setLoading(true); try { @@ -1122,7 +1153,6 @@ export default function RootLayout({ children }) { // router-> setLoading(false); - GetTasks(0); router.push("/tasks"); } catch ({ error, status }) { @@ -1154,7 +1184,6 @@ export default function RootLayout({ children }) { // router-> setLoading(false); - GetTasks(0); router.push("/tasks"); } catch ({ error, status }) { toast.error(`${error?.response?.data?.message}`, { @@ -1164,11 +1193,11 @@ export default function RootLayout({ children }) { setLoading(false); } }; - const GetTasks = async (page) => { + const GetTasks = async (page, shiftId) => { setLoading(true); try { const data = await Chapar.get( - `${process.env.NEXT_PUBLIC_API_URL}/task?page=${page}`, + `${process.env.NEXT_PUBLIC_API_URL}/task?page=${page}&shiftId=${shiftId}`, { headers: { Authorization: "Bearer " + localStorage.getItem("token"), @@ -1230,8 +1259,7 @@ export default function RootLayout({ children }) { ); setLoading(false); - GetTasks(); - router.push("/tasks"); + setBottomSheetCreateTaskOpen(false); } catch ({ error, status }) { toast.error(`${error?.response?.data?.message}`, { position: "bottom-right", @@ -1241,7 +1269,7 @@ export default function RootLayout({ children }) { } }; - const GetActivity = async (date, shift, page, dateQueryFilter) => { + const GetActivity = async (date, shift, page, dateQueryFilter, userId) => { setLoading(true); try { const data = await Chapar.get( @@ -1249,7 +1277,7 @@ export default function RootLayout({ children }) { date ? `&selectedDate=${date}` : "" }${shift ? `&selectedShiftPlanId=${shift}` : ""}${ dateQueryFilter != null ? `&dateQueryFilter=${dateQueryFilter}` : "" - }`, + }${userId != null ? `&userId=${userId}` : ""}`, { headers: { @@ -1540,15 +1568,34 @@ export default function RootLayout({ children }) { } }; + const GetUnReadNotif = async () => { + setLoading(true); + try { + const data = await Chapar.get( + `${process.env.NEXT_PUBLIC_API_URL}/notification/unread/count` + ); + setNotifUnreadData(data); + setLoading(false); + + return data; + } catch ({ error, status }) { + toast.error(`${error?.response?.data?.message}`, { + position: "bottom-right", + closeOnClick: true, + }); + setLoading(false); + } + }; + useEffect(() => { console.log(` - bbbbbbbb - b::::::b iiii - b::::::b i::::i - b::::::b iiii - b:::::b - b:::::bbbbbbbbb rrrrr rrrrrrrrr iiiiiiizzzzzzzzzzzzzzzzz cccccccccccccccc ooooooooooo - b::::::::::::::bb r::::rrr:::::::::ri:::::iz:::::::::::::::z cc:::::::::::::::coo:::::::::::oo + bbbbbbbb + b::::::b iiii + b::::::b i::::i + b::::::b iiii + b:::::b + b:::::bbbbbbbbb rrrrr rrrrrrrrr iiiiiiizzzzzzzzzzzzzzzzz cccccccccccccccc ooooooooooo + b::::::::::::::bb r::::rrr:::::::::ri:::::iz:::::::::::::::z cc:::::::::::::::coo:::::::::::oo b::::::::::::::::br:::::::::::::::::ri::::iz::::::::::::::z c:::::::::::::::::o:::::::::::::::o b:::::bbbbb:::::::rr::::::rrrrr::::::i::::izzzzzzzz::::::z c:::::::cccccc:::::o:::::ooooo:::::o b:::::b b::::::br:::::r r:::::i::::i z::::::z c::::::c cccccco::::o o::::o @@ -1557,18 +1604,20 @@ export default function RootLayout({ children }) { b:::::b b:::::br:::::r i::::i z::::::z c::::::c cccccco::::o o::::o b:::::bbbbbb::::::br:::::r i::::::i z::::::zzzzzzzc:::::::cccccc:::::o:::::ooooo:::::o b::::::::::::::::b r:::::r i::::::iz::::::::::::::zc:::::::::::::::::o:::::::::::::::o - b:::::::::::::::b r:::::r i::::::z:::::::::::::::z cc:::::::::::::::coo:::::::::::oo - bbbbbbbbbbbbbbbb rrrrrrr iiiiiiizzzzzzzzzzzzzzzzz cccccccccccccccc ooooooooooo + b:::::::::::::::b r:::::r i::::::z:::::::::::::::z cc:::::::::::::::coo:::::::::::oo + bbbbbbbbbbbbbbbb rrrrrrr iiiiiiizzzzzzzzzzzzzzzzz cccccccccccccccc ooooooooooo + + soli chizi bood bgo hossein__masoomi - soli chizi bood bgo hossein__masoomi - `); const token = localStorage.getItem("token"); // if (!token) { // router.push("/login"); // } - if (profile.length <= 0 && token) CheckUser(); + if (profile.length <= 0 && token) { + CheckUser(); + } }, []); return ( @@ -1652,6 +1701,9 @@ export default function RootLayout({ children }) { BottomSheetReportManageShiftOpen, coffeeBrewData, latesCoffeeBrewData, + BottomSheetCreateTaskOpen, + userStaffData, + notifUnreadData, }, setBottomSheetCreateRoleOpen, setBottomSheetCreateEmployeesOpen, @@ -1782,6 +1834,11 @@ export default function RootLayout({ children }) { GetCoffeeBrewData, GetLatesCoffeeBrewData, setLatesCoffeeBrewData, + setBottomSheetCreateTaskOpen, + setUserStaffData, + GetUserStaff, + setNotifUnreadData, + GetUnReadNotif, }} > diff --git a/src/app/news/page.jsx b/src/app/news/page.jsx new file mode 100644 index 0000000..179c0e0 --- /dev/null +++ b/src/app/news/page.jsx @@ -0,0 +1,557 @@ +"use client"; +import AppHeader from "@comp/AppHeader/page"; +import { useRouter } from "next/navigation"; +import React, { useContext, useEffect, useState } from "react"; + +import AppContext from "@ctx/AppContext"; +import Chapar from "plugins/Chapar"; +import { toast } from "react-toastify"; +import Avatar from "boring-avatars"; +import PersianNumber from "../../../plugins/PersianNumber"; +import moment from "jalali-moment"; +import InfiniteScroll from "react-infinite-scroll-component"; + +const page = () => { + const router = useRouter(); + const CTX = useContext(AppContext); + const [typeNews, setTypeNews] = useState(1); + const [notifData, setNotifData] = useState([]); + const [loading, setLoading] = useState(false); + const [page, setPage] = useState(0); + const [hasMore, setHasMore] = useState(true); + + const markAsRead = async (id, notifData, setNotifData) => { + console.log("ssssssssssssssssssssssssssss"); + try { + const data = await Chapar.post( + `${process.env.NEXT_PUBLIC_API_URL}/notification/${id}/read` + ); + + // Update the local state to mark the notification as read + const updatedNotifData = notifData.map((notif) => + notif.id === id ? { ...notif, isRead: true } : notif + ); + setNotifData(updatedNotifData); + return data; + } catch ({ error, status }) { + toast.error(`در خواندن نوتیف مشکلی هست`, { + position: "bottom-right", + closeOnClick: true, + }); + } + }; + + const loadNotifications = async () => { + setLoading(true); + try { + const data = await Chapar.get( + `${ + process.env.NEXT_PUBLIC_API_URL + }/notification?page=${page}&count=${40}` + ); + + if (data.length === 0) { + setHasMore(false); + } else { + setNotifData((prevData) => [...prevData, ...data]); + setPage((prevPage) => prevPage + 1); + } + setLoading(false); + } catch ({ error, status }) { + toast.error(`${error?.response?.data?.message}`, { + position: "bottom-right", + closeOnClick: true, + }); + setLoading(false); + } + }; + + useEffect(() => { + loadNotifications(); + }, []); + + let lastDate = null; + + return ( + <> + {" "} +
+ + + {} +
+ {" "} +
+
setTypeNews(0)} + > +

+ اخبار{" "} +

+
+
setTypeNews(1)} + > +

+ نوتیف{" "} +

+
+
+ {typeNews == 0 ? ( +
+
+
+
+
+ + +
+
+
+
+
+
+
+
+

محمد کاشغی

+ +
+
+ + + + +

+ نظر سنجی +

+
+ +
+ + + + +

+ اختصاصی{" "} +

+
+
+ +
+