Кок посчитать, сколько дней отпуска осталось?
Мне нужно посчитать, сколько у человека осталось дней отпуска. Например, он работает с 2020-05-13 по 2020-08-26.
- Если его первый рабочий день был с 1 по 15 - он получает
2дня отпуска; - С 15 по 25 -
1день; - С 26 по 31 -
0дней.
Дальше каждый месяц первого числа начисляется 2 дня.
Он может взять отпуск в этот период, тогда количество дней, что он взял, нужно отнять из общего числа дней отпуска.
Есть таблица с рабочими днями (1) и днями, когда он был в отпуске (3). По ней нужно почситать, сколько дней отпуска осталось.
Ответы (2 шт):
Автор решения: MBo
→ Ссылка
Псевдокод для обхода таблицы может выглядеть примерно так:
month = -1
rest = 0
for x in table:
if x.month != month:
if month >=0 || x.day <=15 :
rest +=2
elif x.day <= 25:
rest +=1
month = x.month
if x.reasonId = 3:
rest -=1
Автор решения: Johannes Krauser III
→ Ссылка
Если честно, я не до конца понял задачу. Но решение, думаю, будет таким:
DateTime[] workDays; //Рабочие дни в табличке, пусть формально она уже отсортирована по возрастанию
DateTime[] restDays; //Отпускные дни в табличке, тут уже сортировка не важна
int restCount = 0; //отпуск
DateTime tmp = new DateTime(); //Это для определения смены месяца
foreach (var item in workDays)
{
if (item.Month != tmp.Month) //Если наступил следующий месяц
{
rest -= restDays.Where(d => d.Year == tmp.Year && d.Month == tmp.Month).Count(); //Вычитаем все отгуляные дни за этот месяц
if (item.Day <= 15)
{
restCount += 2; //Если он вышел на работу до 15, то добавляем ему 2 дня отпуска
}
else if (item.Day <= 25)
{
restCount += 1; //Если он вышел на работу до 25, то добавляем ему 1 день отпуска
}
//Если не попал ни под одно условие, то ничего не добавляем
tmp = item; //Зачитываем новый месяц
}
}
