Member 13746082 Ответов: 1

Как установить ограничение по времени для системы timein/timeout


В настоящее время я работаю над системой Timein/Timeout.

Что я уже пробовал:

Моя система уже может записывать время и тайм-аут сотрудника. Мой вопрос заключается в том, как сотрудник узнает, что он опаздывает (в минутах), и как я могу записать это в базу данных? Я хотел бы поставить льготный период в 5 минут. Например, если сотрудник пришел в 8:03 утра, он не опаздывает, но если он пришел в 8:06 утра, он опаздывает на 1 минуту.

Richard MacCutchan

Это льготный период всего в 5 минут, а не в 15.

И вам не нужно больше ничего записывать в базу данных. Если время входа позже ожидаемого плюс льготный период, то у вас есть все детали, необходимые для сообщения о проблеме.

Member 13746082

Я уже меняю свой вопрос, Спасибо, что заметили. Можете ли вы привести мне пример того, как это реализовать?

Richard MacCutchan

Здесь нечего реализовывать. Если вы уже записываете время, то вам больше ничего не нужно.

1 Ответов

Рейтинг:
1

CHill60

Вот вам пример.
Во первых вот данные которые я использовал

create table #TimeCard
(
	id int identity(1,1)
	,empId int
	,eTimeIn datetime
	,eTimeOut datetime
)

insert into #TimeCard (empId, eTimeIn, eTimeOut) values
(1, '2018-04-11 08:00:00','2018-04-11 18:00:00'),
(2, '2018-04-11 08:16:00','2018-04-11 18:00:00'),
(3, '2018-04-11 08:06:00','2018-04-11 18:00:00'),
(4, '2018-04-11 07:56:00','2018-04-11 18:00:00')
Затем я использовал этот запрос:
declare @grace int = 15 
declare @startTime datetime = dateadd(hh, 8, dateadd(dd, datediff(dd, 0, getdate()), 0))	--08:00 today

select empId, eTimeIn, eTimeOut, 
CASE WHEN DateDiff(mi, @startTime,eTimeIn) > @grace THEN 'Late' ELSE 'On-time' END
from #TimeCard
Что и дало свои результаты:
1	2018-04-11 08:00:00.000	2018-04-11 18:00:00.000	On-time
2	2018-04-11 08:16:00.000	2018-04-11 18:00:00.000	Late
3	2018-04-11 08:06:00.000	2018-04-11 18:00:00.000	On-time
4	2018-04-11 07:56:00.000	2018-04-11 18:00:00.000	On-time
Нет необходимости записывать это в базу данных, так как оно может быть вычислено в любое время.
Однако если вы думаете, что льготный период изменится в будущем, то просто храните
DateDiff(mi, @startTime,eTimeIn)-@grace в целочисленном столбце в той же строке. Любое положительное число указывает на количество минут опоздания