Пример #1
0
        /// <summary>
        /// Рассчитывает стоимость обеда сотрудника за указанный период с учетом перерыва и изменения стоимости обеда
        /// </summary>
        /// <param name="request">Настройки обеда</param>
        /// <returns>Возвращает стоимость обеда</returns>
        public decimal GetPaid(LunchRequest request)
        {
            decimal paid;
            double  totalDays;

            //если отсутствует дата смены стоимости обеда, то считаем весь период одинаково
            if (request.CostChangeStart == default)
            {
                totalDays = GetTotalDaysOfPeriod(request.Start, request.End, request.ExcludeStart, request.ExcludeEnd);
                paid      = Convert.ToInt32(Math.Ceiling(totalDays)) * request.Cost;
            }
            //в случае, если установлена дата смены стоимости, то
            else
            {
                //считаем стоимость за первый период (до даты смены стоимости обеда)
                totalDays = GetTotalDaysOfPeriod(request.Start, request.CostChangeStart, request.ExcludeStart, request.ExcludeEnd);
                paid      = Convert.ToInt32(Math.Ceiling(totalDays)) * request.Cost;

                //считаем стоимость за второй период (после даты смены стоимости обеда)
                totalDays = GetTotalDaysOfPeriod(request.CostChangeStart, request.End, request.ExcludeStart, request.ExcludeEnd);
                paid     += Convert.ToInt32(Math.Ceiling(totalDays)) * request.CostAfterChange;
            }

            return(paid);
        }
Пример #2
0
        public IActionResult GetPaid([FromQuery] LunchRequest request)
        {
            if (request.Start >= request.End || request.ExcludeStart >= request.ExcludeEnd)
            {
                return(BadRequest("Дата начала не может быть больше или равна дате окончания"));
            }

            if (request.CostChangeStart < request.Start || request.CostChangeStart > request.End)
            {
                return(BadRequest("Дата смены стоимости обеда должна входить в расчетный период"));
            }

            if (request.CostChangeStart != default && request.CostAfterChange == default)
            {
                return(BadRequest("Необходимо указать последующую стоимость обеда после указанной даты"));
            }

            try
            {
                return(Ok(_lunchService.GetPaid(request)));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }