Задать вопрос
mrusklon
@mrusklon
Не получается? Яростно гугли!

Как устроить логику добавления данных в БД с проверкой на выходные и праздники?

Делаю табель учета времени работы , надо считать количество часов "переработки" которые оплачиваются по другому тарифу. Этот тариф х2 на выходных и праздниках в БД надо 2 столбца делать, часы отработки и часы переработки.

А вносить данные для удобства в одно поле на фронтенде в форму , затем если дата добавления в БД == выходной то записать все данные в колонку переработка. Тоже и к празднику
Если не выходной день но отработано больше 8 часов то записать 8 в часы и остаток в БД переработку.
до этого вроде все просто , а теперь если выходной , значит укороченный день , значит 7 часов пишем в работу и остаток в переработку
и самый главный вопрос: как узнать что дата к примеру 2019-03-22 это выходной или праздник? Значит надо делать отдельную таблицу с этими датами для сравнения? Не понимаю я принципа до конца , кто подскажет логику как правильно сделать?
  • Вопрос задан
  • 104 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 3
AnatolTh
@AnatolTh
Full Stack Developer
Ну выходной можно узнать по дню недели, а вот праздники придётся где-то хранить в БД, либо поискать готовое API на эту тему, либо найти API какого-нибудь сервиса, где можно вытянуть праздники.

Вот и вот
Ответ написан
@Kennius
Начинающий фронт-эндер
я праздничные и выходные дни определяю с помощью https://isdayoff.ru/
Ответ написан
duhbox
@duhbox
Официальная информация по рабочим и праздничным дням в РФ находится вот здесь: https://data.gov.ru/opendata/7708660670-proizvcalendar
тут можно взять csv файл и на его основе создать календарь у себя в БД.

На моем проекте используется календарь следующего вида:
create table CALENDAR
(
date_id NUMBER not null,
name VARCHAR2(255) not null,
short_name VARCHAR2(50) not null,
date_level NUMBER not null,
date_level_name VARCHAR2(50) not null,
start_date DATE not null,
finish_date DATE not null,
cout_days_period NUMBER,
n_day_w NUMBER,
n_day_m NUMBER,
n_day_y NUMBER,
n_week_y NUMBER,
n_month_y NUMBER,
n_quart_y NUMBER,
n_halfyear_y NUMBER,
n_year NUMBER,
calendar_date DATE,
month_eng VARCHAR2(20),
short_month_eng VARCHAR2(20),
month_rus VARCHAR2(20),
short_month_rus VARCHAR2(20),
is_lastday_m NUMBER,
year_month VARCHAR2(30),
is_working_day CHAR(1)
)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы