Compare commits
4 Commits
542748f12c
...
1ffda41f16
| Author | SHA1 | Date | |
|---|---|---|---|
| 1ffda41f16 | |||
| d5cbe67d3e | |||
| 292f80c9a8 | |||
| bd91f60e08 |
@ -73,7 +73,7 @@ const CheckCheckOutmodel = ({modeldata,closeModal,handleSubmitForm,}) => {
|
|||||||
label="Choose a time"
|
label="Choose a time"
|
||||||
onChange={(e) => setValue("markTime", e)}
|
onChange={(e) => setValue("markTime", e)}
|
||||||
interval={10}
|
interval={10}
|
||||||
activity={modeldata?.action}
|
checkOutTime={modeldata?.checkOutTime}
|
||||||
checkInTime={modeldata?.checkInTime}
|
checkInTime={modeldata?.checkInTime}
|
||||||
/>
|
/>
|
||||||
{errors. markTime && <p className="text-danger">{errors.markTime.message}</p>}
|
{errors. markTime && <p className="text-danger">{errors.markTime.message}</p>}
|
||||||
|
|||||||
@ -18,7 +18,8 @@ const RenderAttendanceStatus = ({ attendanceData, handleModalData,Tab,currentDat
|
|||||||
employeeId: attendanceData?.employeeId,
|
employeeId: attendanceData?.employeeId,
|
||||||
id: attendanceData?.id,
|
id: attendanceData?.id,
|
||||||
currentDate,
|
currentDate,
|
||||||
checkInTime:attendanceData.checkInTime
|
checkInTime: attendanceData.checkInTime,
|
||||||
|
checkOutTime:attendanceData.checkOutTime
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
import React, { useState, useRef, useEffect } from "react";
|
import React, { useState, useRef, useEffect } from "react";
|
||||||
|
import {THRESH_HOLD} from "../../utils/constants"
|
||||||
|
|
||||||
const TimePicker = ({ label, onChange, interval = 10, value,checkInTime,activity }) => {
|
const TimePicker = ({ label, onChange, interval = 10, value,checkInTime,checkOutTime }) => {
|
||||||
const [time, setTime] = useState(value || "");
|
const [time, setTime] = useState(value || "");
|
||||||
const [isOpen, setIsOpen] = useState(false);
|
const [isOpen, setIsOpen] = useState(false);
|
||||||
const dropdownRef = useRef(null);
|
const dropdownRef = useRef(null);
|
||||||
@ -41,59 +42,50 @@ const TimePicker = ({ label, onChange, interval = 10, value,checkInTime,activity
|
|||||||
|
|
||||||
const checkInDate = checkInTime ? new Date(checkInTime) : null;
|
const checkInDate = checkInTime ? new Date(checkInTime) : null;
|
||||||
|
|
||||||
|
const checkOutDate = checkOutTime ? new Date(checkOutTime) : null;
|
||||||
const fullStart = checkInDate ? new Date(checkInDate) : new Date();
|
|
||||||
fullStart.setHours(0, 0, 0, 0);
|
const dayStart = new Date();
|
||||||
|
const dayEnd = new Date();
|
||||||
const fullEnd = checkInDate ? new Date(checkInDate) : new Date();
|
if (checkInDate) {
|
||||||
fullEnd.setHours(23, 59, 59, 999);
|
dayStart.setTime(checkInDate.getTime());
|
||||||
|
dayEnd.setTime(checkInDate.getTime());
|
||||||
|
}
|
||||||
|
dayStart.setHours(0, 0, 0, 0);
|
||||||
|
dayEnd.setHours(23, 59, 59, 999);
|
||||||
|
|
||||||
let minSelectable = null;
|
let minSelectable = null;
|
||||||
let maxSelectable = null;
|
let maxSelectable = null;
|
||||||
|
|
||||||
// Activity 0: Time slots based on current time
|
// Activity 0: Time slots based on current time
|
||||||
if (activity === 0 && !checkInDate) {
|
if (!checkInDate) {
|
||||||
minSelectable = new Date(currentSlot.getTime() - 60 * 60000); // one hour before current time
|
// Case 1: No check-in time (new check-in)
|
||||||
|
minSelectable = new Date(dayStart);
|
||||||
maxSelectable = new Date(currentSlot);
|
maxSelectable = new Date(currentSlot);
|
||||||
}
|
}
|
||||||
// Activity 1: Time slots based on check-in time today
|
// Activity 1: Time slots based on check-in time today
|
||||||
else if (activity === 1 && checkInDate) {
|
else if (checkInDate && !checkOutDate) {
|
||||||
if (checkInDate.toDateString() === now.toDateString()) {
|
const hoursDiff = (now - checkInDate) / (1000 * 60 * 60);
|
||||||
|
if (hoursDiff < THRESH_HOLD) {
|
||||||
|
// Case 2: Check-in present, no checkout, within THRESH_HOLD hours
|
||||||
minSelectable = new Date(checkInDate);
|
minSelectable = new Date(checkInDate);
|
||||||
maxSelectable = new Date(currentSlot);
|
maxSelectable = new Date(currentSlot);
|
||||||
|
} else {
|
||||||
|
// Case 4: Check-in present, no checkout, more than THRESH_HOLD hours
|
||||||
|
minSelectable = new Date(checkInDate);
|
||||||
|
maxSelectable = new Date(dayEnd);
|
||||||
}
|
}
|
||||||
}
|
} else if (checkInDate && checkOutDate) {
|
||||||
// Activity 2: Time slots from check-in time to 12:00 AM of the same day
|
// Case 3: Both check-in and checkout present
|
||||||
else if (activity === 2 && checkInDate) {
|
minSelectable = new Date(checkOutDate);
|
||||||
// Set minSelectable to the exact check-in time
|
maxSelectable = new Date(currentSlot);
|
||||||
minSelectable = new Date(checkInDate);
|
|
||||||
|
|
||||||
// Set maxSelectable to midnight (12:00 AM) of the same day
|
|
||||||
maxSelectable = new Date(checkInDate);
|
|
||||||
maxSelectable.setHours(23, 59, 59, 999); // Set to 23:59:59.999 (end of the day)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Loop through every slot in the day to check which ones are selectable
|
const slot = new Date(dayStart.getTime());
|
||||||
const slot = new Date(fullStart.getTime());
|
while (slot <= dayEnd) {
|
||||||
while (slot <= fullEnd) {
|
|
||||||
const formatted = formatTime(slot);
|
const formatted = formatTime(slot);
|
||||||
let isSelectable = false;
|
|
||||||
|
|
||||||
// For activity 2, allow only slots from the check-in time up to 12:00 AM of the same day
|
|
||||||
if (minSelectable && maxSelectable) {
|
|
||||||
if (activity === 2 && checkInDate) {
|
|
||||||
// Ensure slot is greater than or equal to minSelectable and less than or equal to maxSelectable
|
|
||||||
isSelectable = slot >= minSelectable && slot <= maxSelectable;
|
|
||||||
} else {
|
|
||||||
isSelectable = slot >= minSelectable && slot <= maxSelectable;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
slots.push({
|
const isSelectable = slot >= minSelectable && slot <= maxSelectable;
|
||||||
time: formatted,
|
slots.push({ time: formatted, isSelectable });
|
||||||
isSelectable,
|
|
||||||
});
|
|
||||||
|
|
||||||
slot.setMinutes(slot.getMinutes() + interval);
|
slot.setMinutes(slot.getMinutes() + interval);
|
||||||
}
|
}
|
||||||
@ -137,13 +129,6 @@ const TimePicker = ({ label, onChange, interval = 10, value,checkInTime,activity
|
|||||||
}
|
}
|
||||||
}, [isOpen, time]);
|
}, [isOpen, time]);
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
if (activity === 2 && checkInTime) {
|
|
||||||
const slots = generateTimeSlots();
|
|
||||||
const selectableSlots = slots.filter(slot => slot.isSelectable);
|
|
||||||
console.log("Selectable Slots for Activity 2:", selectableSlots);
|
|
||||||
}
|
|
||||||
}, [activity, checkInTime]);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="position-relative w-100" ref={dropdownRef}>
|
<div className="position-relative w-100" ref={dropdownRef}>
|
||||||
@ -205,4 +190,4 @@ const TimePicker = ({ label, onChange, interval = 10, value,checkInTime,activity
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default TimePicker;
|
export default TimePicker;
|
||||||
Loading…
x
Reference in New Issue
Block a user