(cherry picked from commitpull/5/head7d983ad5a9) (cherry picked from commit7929cfd7a0)
| @@ -36,6 +36,7 @@ interface Props<EntryTableProps = object> { | |||||
| EntryTableProps & { day: string; isHoliday: boolean } | EntryTableProps & { day: string; isHoliday: boolean } | ||||
| >; | >; | ||||
| entryTableProps: EntryTableProps; | entryTableProps: EntryTableProps; | ||||
| isSaturdayWorker: boolean | |||||
| } | } | ||||
| function DateHoursTable<EntryTableProps>({ | function DateHoursTable<EntryTableProps>({ | ||||
| @@ -45,9 +46,9 @@ function DateHoursTable<EntryTableProps>({ | |||||
| leaveEntries, | leaveEntries, | ||||
| timesheetEntries, | timesheetEntries, | ||||
| companyHolidays, | companyHolidays, | ||||
| isSaturdayWorker, | |||||
| }: Props<EntryTableProps>) { | }: Props<EntryTableProps>) { | ||||
| const { t } = useTranslation("home"); | const { t } = useTranslation("home"); | ||||
| return ( | return ( | ||||
| <TableContainer sx={{ maxHeight: 400 }}> | <TableContainer sx={{ maxHeight: 400 }}> | ||||
| <Table stickyHeader> | <Table stickyHeader> | ||||
| @@ -71,6 +72,7 @@ function DateHoursTable<EntryTableProps>({ | |||||
| timesheetEntries={timesheetEntries} | timesheetEntries={timesheetEntries} | ||||
| EntryTableComponent={EntryTableComponent} | EntryTableComponent={EntryTableComponent} | ||||
| entryTableProps={entryTableProps} | entryTableProps={entryTableProps} | ||||
| isSaturdayWorker={isSaturdayWorker} | |||||
| /> | /> | ||||
| ); | ); | ||||
| })} | })} | ||||
| @@ -87,6 +89,7 @@ function DayRow<EntryTableProps>({ | |||||
| entryTableProps, | entryTableProps, | ||||
| EntryTableComponent, | EntryTableComponent, | ||||
| companyHolidays, | companyHolidays, | ||||
| isSaturdayWorker, | |||||
| }: { | }: { | ||||
| day: string; | day: string; | ||||
| companyHolidays: HolidaysResult[]; | companyHolidays: HolidaysResult[]; | ||||
| @@ -96,16 +99,18 @@ function DayRow<EntryTableProps>({ | |||||
| EntryTableProps & { day: string; isHoliday: boolean } | EntryTableProps & { day: string; isHoliday: boolean } | ||||
| >; | >; | ||||
| entryTableProps: EntryTableProps; | entryTableProps: EntryTableProps; | ||||
| isSaturdayWorker: boolean | |||||
| }) { | }) { | ||||
| const { | const { | ||||
| t, | t, | ||||
| i18n: { language }, | i18n: { language }, | ||||
| } = useTranslation("home"); | } = useTranslation("home"); | ||||
| const dayJsObj = dayjs(day); | const dayJsObj = dayjs(day); | ||||
| const [open, setOpen] = useState(false); | |||||
| const [open, setOpen] = useState(false); | |||||
| const holiday = getHolidayForDate(day, companyHolidays); | const holiday = getHolidayForDate(day, companyHolidays); | ||||
| const isHoliday = holiday || dayJsObj.day() === 0 || dayJsObj.day() === 6; | |||||
| const isWeekend = !isSaturdayWorker ? dayJsObj.day() === 0 || dayJsObj.day() === 6 : dayJsObj.day() === 0; | |||||
| const isHoliday = holiday || isWeekend; | |||||
| const leaves = leaveEntries[day]; | const leaves = leaveEntries[day]; | ||||
| const leaveHours = | const leaveHours = | ||||
| @@ -54,6 +54,7 @@ interface Props { | |||||
| isFullTime: boolean; | isFullTime: boolean; | ||||
| joinDate: Dayjs; | joinDate: Dayjs; | ||||
| miscTasks: Task[]; | miscTasks: Task[]; | ||||
| isSaturdayWorker: boolean | |||||
| } | } | ||||
| const modalSx: SxProps = { | const modalSx: SxProps = { | ||||
| @@ -81,6 +82,7 @@ const TimeLeaveModal: React.FC<Props> = ({ | |||||
| isFullTime, | isFullTime, | ||||
| joinDate, | joinDate, | ||||
| miscTasks, | miscTasks, | ||||
| isSaturdayWorker, | |||||
| }) => { | }) => { | ||||
| const { t } = useTranslation("home"); | const { t } = useTranslation("home"); | ||||
| @@ -227,6 +229,7 @@ const TimeLeaveModal: React.FC<Props> = ({ | |||||
| leaveTypes, | leaveTypes, | ||||
| miscTasks, | miscTasks, | ||||
| }} | }} | ||||
| isSaturdayWorker={isSaturdayWorker} | |||||
| /> | /> | ||||
| </Box> | </Box> | ||||
| {errorComponent} | {errorComponent} | ||||
| @@ -43,6 +43,7 @@ export interface Props { | |||||
| isFullTime: boolean; | isFullTime: boolean; | ||||
| joinDate?: number | null; | joinDate?: number | null; | ||||
| miscTasks: Task[]; | miscTasks: Task[]; | ||||
| isSaturdayWorker: boolean | |||||
| } | } | ||||
| const menuItemSx: SxProps = { | const menuItemSx: SxProps = { | ||||
| @@ -65,6 +66,7 @@ const UserWorkspacePage: React.FC<Props> = ({ | |||||
| isFullTime, | isFullTime, | ||||
| joinDate, | joinDate, | ||||
| miscTasks, | miscTasks, | ||||
| isSaturdayWorker | |||||
| }) => { | }) => { | ||||
| const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null); | const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null); | ||||
| @@ -183,6 +185,7 @@ const UserWorkspacePage: React.FC<Props> = ({ | |||||
| allProjects={allProjects} | allProjects={allProjects} | ||||
| leaveTypes={leaveTypes} | leaveTypes={leaveTypes} | ||||
| companyHolidays={holidays} | companyHolidays={holidays} | ||||
| isSaturdayWorker={isSaturdayWorker} | |||||
| /> | /> | ||||
| <TimeLeaveModal | <TimeLeaveModal | ||||
| fastEntryEnabled={fastEntryEnabled} | fastEntryEnabled={fastEntryEnabled} | ||||
| @@ -197,6 +200,7 @@ const UserWorkspacePage: React.FC<Props> = ({ | |||||
| isFullTime={isFullTime} | isFullTime={isFullTime} | ||||
| joinDate={dayjs(joinDate)} | joinDate={dayjs(joinDate)} | ||||
| miscTasks={miscTasks} | miscTasks={miscTasks} | ||||
| isSaturdayWorker={isSaturdayWorker} | |||||
| /> | /> | ||||
| <LeaveModal | <LeaveModal | ||||
| open={isLeaveCalendarVisible} | open={isLeaveCalendarVisible} | ||||
| @@ -16,6 +16,7 @@ import { | |||||
| MAINTAIN_TIMESHEET_FAST_TIME_ENTRY, | MAINTAIN_TIMESHEET_FAST_TIME_ENTRY, | ||||
| MAINTAIN_NORMAL_STAFF_WORKSPACE, | MAINTAIN_NORMAL_STAFF_WORKSPACE, | ||||
| MAINTAIN_MANAGEMENT_STAFF_WORKSPACE, | MAINTAIN_MANAGEMENT_STAFF_WORKSPACE, | ||||
| SATURDAY_WORKERS | |||||
| } from "@/middleware"; | } from "@/middleware"; | ||||
| import { fetchAllTasks } from "@/app/api/tasks"; | import { fetchAllTasks } from "@/app/api/tasks"; | ||||
| @@ -59,6 +60,8 @@ const UserWorkspaceWrapper: React.FC = async () => { | |||||
| const miscTasks = allTasks.filter((t) => t.taskGroup.id === 5); | const miscTasks = allTasks.filter((t) => t.taskGroup.id === 5); | ||||
| const isSaturdayWorker = abilities.includes(SATURDAY_WORKERS) | |||||
| return ( | return ( | ||||
| <UserWorkspacePage | <UserWorkspacePage | ||||
| joinDate={userStaff?.joinDate} | joinDate={userStaff?.joinDate} | ||||
| @@ -78,6 +81,7 @@ const UserWorkspaceWrapper: React.FC = async () => { | |||||
| maintainManagementStaffWorkspaceAbility={ | maintainManagementStaffWorkspaceAbility={ | ||||
| maintainManagementStaffWorkspaceAbility | maintainManagementStaffWorkspaceAbility | ||||
| } | } | ||||
| isSaturdayWorker={isSaturdayWorker} | |||||
| /> | /> | ||||
| ); | ); | ||||
| }; | }; | ||||
| @@ -58,14 +58,6 @@ export const authOptions: AuthOptions = { | |||||
| jwt(params) { | jwt(params) { | ||||
| // Add the data from user to the token | // Add the data from user to the token | ||||
| const { token, user, account, trigger, session } = params; | const { token, user, account, trigger, session } = params; | ||||
| // console.log("--------------------------") | |||||
| // console.log("%c [ token ]:", 'font-size:13px; background:#A888B5; color:#bf2c9f;', token) | |||||
| // console.log("%c [ user ]:", 'font-size:13px; background:pink; color:#bf2c9f;', user) | |||||
| // console.log("%c [ account ]:", 'font-size:13px; background:pink; color:#bf2c9f;', account) | |||||
| // console.log("%c [ session ]:", 'font-size:13px; background:#FFD2A0; color:#bf2c9f;', session) | |||||
| // console.log("%c [ trigger ]:", 'font-size:13px; background:#EFB6C8; color:#bf2c9f;', trigger) | |||||
| // console.log(params) | |||||
| // console.log("--------------------------") | |||||
| if (trigger === "update" && session?.accessToken && session?.refreshToken) { | if (trigger === "update" && session?.accessToken && session?.refreshToken) { | ||||
| token.accessToken = session.accessToken | token.accessToken = session.accessToken | ||||
| @@ -71,7 +71,8 @@ export const [ | |||||
| GENERATE_PROJECT_CASH_FLOW_REPORT, | GENERATE_PROJECT_CASH_FLOW_REPORT, | ||||
| GENERATE_STAFF_MONTHLY_WORK_HOURS_ANALYSIS_REPORT, | GENERATE_STAFF_MONTHLY_WORK_HOURS_ANALYSIS_REPORT, | ||||
| GENERATE_CROSS_TEAM_CHARGE_REPORT, | GENERATE_CROSS_TEAM_CHARGE_REPORT, | ||||
| VIEW_ALL_PROJECTS | |||||
| VIEW_ALL_PROJECTS, | |||||
| SATURDAY_WORKERS | |||||
| ] = [ | ] = [ | ||||
| 'MAINTAIN_USER', | 'MAINTAIN_USER', | ||||
| 'MAINTAIN_TIMESHEET', | 'MAINTAIN_TIMESHEET', | ||||
| @@ -124,7 +125,8 @@ export const [ | |||||
| 'G_PROJECT_CASH_FLOW_REPORT', | 'G_PROJECT_CASH_FLOW_REPORT', | ||||
| 'G_STAFF_MONTHLY_WORK_HOURS_ANALYSIS_REPORT', | 'G_STAFF_MONTHLY_WORK_HOURS_ANALYSIS_REPORT', | ||||
| 'G_CROSS_TEAM_CHARGE_REPORT', | 'G_CROSS_TEAM_CHARGE_REPORT', | ||||
| 'VIEW_ALL_PROJECTS' | |||||
| 'VIEW_ALL_PROJECTS', | |||||
| 'SATURDAY_WORKERS' | |||||
| ] | ] | ||||
| const PRIVATE_ROUTES = [ | const PRIVATE_ROUTES = [ | ||||