/// <summary>
        ///
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public static MemberRateDataModel ToDataModel(this NormalRate model)
        {
            var t = new MemberRateDataModel()
            {
                User             = model.User.ToSummaryDto(),
                CompanyCode      = model.CompanyCode,
                CompanyName      = model.Company?.Name,
                Level            = model.Level,
                LevelName        = ToLevelName(model.Level),
                Rank             = model.Rank,
                Remark           = model.Remark,
                UserId           = model.UserId,
                RatingCycleCount = model.RatingCycleCount,
                RatingType       = model.RatingType
            };

            //var user = model.User;
            //if (user != null)
            //{
            //    var b = user.BaseInfo;
            //    t.RealName = b.RealName;
            //    t.Cid = b.Cid;
            //    var c = user.CompanyInfo;
            //    t.CompanyName = c.Company.Name;
            //    t.Duty = c.Duties.Name;
            //}
            return(t);
        }
        public static async Task <ParkingRateDTO> CalcNRAsync(
            [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function CalcNormalRates processed a request.");

            string       name              = string.Empty;
            string       requestBody       = await new StreamReader(req.Body).ReadToEndAsync();
            EntryExitDTO entryExitDateTime = JsonConvert.DeserializeObject <EntryExitDTO>(requestBody);

            ParkingRateDTO result = new ParkingRateDTO()
            {
                Name = CONSTANTS.RateType.STANDARD
            };

            string response = await client.GetStringAsync(CONSTANTS.ProjectURLs.ReturnParkingRatesNormal);

            List <NormalRate> normalRates = JsonConvert.DeserializeObject <List <NormalRate> >(response);

            double     resultNormalMacro = 0.0;
            double     resultNormalMicro = 0.0;
            bool       isNormal          = false;
            double     duration          = (entryExitDateTime.EndDT - entryExitDateTime.StartDT).TotalHours;
            NormalRate maxNormalRate     = normalRates.OrderBy(nr => nr.MaxHours).LastOrDefault();

            if (duration >= maxNormalRate.MaxHours)
            {
                resultNormalMacro = Math.Floor(duration / maxNormalRate.MaxHours) * maxNormalRate.Rate;
                duration          = duration % maxNormalRate.MaxHours;
            }
            if (duration > 0)
            {
                foreach (NormalRate normalRate in normalRates)
                {
                    if (!isNormal && duration <= normalRate.MaxHours)
                    {
                        isNormal          = true;
                        resultNormalMicro = normalRate.Rate;
                    }
                }
            }

            result.Price = resultNormalMacro + resultNormalMicro;

            return(result);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="model"></param>
        /// <param name="companies"></param>
        /// <param name="users"></param>
        /// <returns></returns>
        public static NormalRate ToModel(this MemberRateImportDto model, IQueryable <DAL.Entities.Company> companies, IQueryable <DAL.Entities.UserInfo.User> users)
        {
            var company = companies.FirstOrDefault(i => i.Code == model.Company);
            var user    = users.FirstOrDefault(i => i.BaseInfo.Cid == model.UserCid);
            var raw     = new NormalRate()
            {
                Company     = company,
                CompanyCode = company?.Code,
                Create      = DateTime.Now,
                Level       = (int)model.Level,
                Rank        = model.Rank,
                Remark      = model.Remark,
                User        = user,
                UserId      = user?.Id
            };

            return(raw);
        }