Example #1
0
        public ResponseModel <LateCharge> GetLateChage(LateCharge req)
        {
            var methodName = MethodBase.GetCurrentMethod().Name;

            try
            {
                _logger.LogInformation($"Start Function => {methodName}, Parameters => {JsonSerializer.ToJsonString(req)}");
                var result = _context.LateCharge.FirstOrDefault(r => r.ApplicationNo == req.ApplicationNo);
                _logger.LogInformation($"Finish Function => {methodName}, Result => {JsonSerializer.ToJsonString(result)}");
                return(new ResponseModel <LateCharge>
                {
                    Success = true,
                    Datas = result
                });
            }
            catch (Exception ex)
            {
                var messageError = $"Error Function => {methodName}";
                _logger.LogError(ex, messageError);
                throw new ArgumentException(messageError, ex);
            }
        }
Example #2
0
        protected LateCharge GetObject(DataRow dr)
        {
            LateCharge objLateCharge = new LateCharge();
            objLateCharge.Id = (dr["Id"] == DBNull.Value) ? 0 : (Int64)dr["Id"];
            objLateCharge.ShopId = (dr["ShopId"] == DBNull.Value) ? 0 : (Int64)dr["ShopId"];
            objLateCharge.TenantId = (dr["TenantId"] == DBNull.Value) ? 0 : (Int64)dr["TenantId"];
            objLateCharge.Month = (dr["Month"] == DBNull.Value) ? 0 : (Int32)dr["Month"];
            objLateCharge.Year = (dr["Year"] == DBNull.Value) ? 0 : (Int32)dr["Year"];
            objLateCharge.AppliedDate = (dr["AppliedDate"] == DBNull.Value) ? DateTime.MinValue : (DateTime)dr["AppliedDate"];
            objLateCharge.Amount = (dr["Amount"] == DBNull.Value) ? 0 : (Decimal)dr["Amount"];

            return objLateCharge;
        }
Example #3
0
        public ResponseModel <LateCharge> CalculationRate(LateChargeReqModel req)
        {
            var methodName  = MethodBase.GetCurrentMethod().Name;
            var LateCharges = req.LateCharges;
            var header      = req.Header;
            var rateMax     = new LateChargeModel();

            try
            {
                _logger.LogInformation($"Start Function => {methodName}, Parameters => {JsonSerializer.ToJsonString(req)}");

                #region Step 1 check parameter

                var parameter = _context.Parameter.FirstOrDefault(r => r.Name == "FirstLateCharge");
                if (parameter == null)
                {
                    return(new ResponseModel <LateCharge>
                    {
                        Message = $"ไม่พบ FirstLateCharge ในฐานข้อมูล"
                    });
                }

                #endregion

                #region Step 2 หาค่า ratemax จากค่าทั้งหมด

                if (LateCharges.Count(r => !r.RateCode.HasValue && string.IsNullOrEmpty(r.Sign)) == LateCharges.Count)
                {//Rate Fix
                    var late = LateCharges.OrderByDescending(r => r.RateAmount).FirstOrDefault();
                    late.RateCal = late.RateAmount;
                    rateMax      = late;
                }
                else
                {
                    //AlternateRate
                    var rateCodes = LateCharges.Select(r => r.RateCode).ToList();
                    var sSRATEs   = _context.SSRATE.Where(r => rateCodes.Contains(r.JRRATN)).ToList();
                    if (!sSRATEs.Any())
                    {
                        return(new ResponseModel <LateCharge>
                        {
                            Message = $"ไม่พบ RateCode: {string.Join(",", rateCodes)} ในฐานข้อมูล"
                        });
                    }

                    LateCharges.ForEach(LateCharge =>
                    {
                        var rateByInterfaceDate = (decimal?)null;
                        if (LateCharge.InterfaceDate.HasValue)
                        {
                            var rateByDate = sSRATEs.FirstOrDefault(sRate
                                                                    => (sRate.JRDATE_FUTURE.HasValue && sRate.JRCRAT_FUTURE.HasValue) &&
                                                                    (sRate.JRRATN == LateCharge.RateCode) &&
                                                                    (LateCharge.InterfaceDate.Value.Date >= sRate.JRDATE_FUTURE.Value.Date));

                            if (rateByDate != null)
                            {
                                rateByInterfaceDate = rateByDate.JRCRAT_FUTURE.Value;
                                //LateCharge.Late = rateByInterfaceDate;
                                LateCharge.MrrEffectiveRateDate = rateByDate.JRDATE_FUTURE;
                            }
                        }

                        //Initial rate
                        var late           = rateByInterfaceDate ?? (sSRATEs.FirstOrDefault(sRate => sRate.JRRATN == LateCharge.RateCode)?.JRCRAT ?? 0);
                        LateCharge.MrrRate = late;

                        LateCharge.RateCal = LateCharge.Sign switch
                        {
                            "+" => (late + LateCharge.RateAmount),
                            "-" => (late - LateCharge.RateAmount),
                            _ => LateCharge.RateAmount,
                        };
                    });

                    rateMax = LateCharges.OrderByDescending(r => r.RateCal).FirstOrDefault();
                }


                #endregion

                #region Step 3 validate product type and business logic

                //Validate ProductType
                var productType = _context.LNPAR2.FirstOrDefault(r => r.PTYPE == rateMax.Type);

                //Variable response
                var result = new LateCharge
                {
                    ApplicationNo        = rateMax.ApplicationNo,
                    MrrRate              = rateMax.MrrRate,
                    MrrEffectiveRateDate = rateMax.MrrEffectiveRateDate
                };

                if (productType != null)
                {
                    var calRateMax = 0M;
                    if (productType.LATCHGCOD.HasValue)
                    {
                        _          = decimal.TryParse(parameter.Value, out var firstLate);
                        calRateMax = (rateMax.RateCal + firstLate);
                    }
                    else
                    {
                        calRateMax = rateMax.RateCal;
                    }

                    var type    = rateMax.Type;
                    var cELRATE = _context.CELRATE.FirstOrDefault(r => r.PTYPE == type);
                    if (cELRATE == null)
                    {
                        return(new ResponseModel <LateCharge>
                        {
                            Message = $"ไม่พบ Celrate Type: {type} ในฐานข้อมูล"
                        });
                    }

                    var prrcelRATE = cELRATE.PRRCELRATE;
                    result.FirstLateCharge = (calRateMax > prrcelRATE ? prrcelRATE : calRateMax);
                }
                else
                {
                    //result.FirstLateCharge = 0;
                }

                #endregion

                #region Step 4 commit transation to db and  data response

                var obj = _context.LateCharge.FirstOrDefault(r => r.ApplicationNo == result.ApplicationNo);
                if (obj == null)
                {
                    var _dateNow = DateTime.Now;
                    result.CreateBy   = header.UserID;
                    result.CreateDate = _dateNow;
                    result.UpdateBy   = header.UserID;
                    result.UpdateDate = _dateNow;
                    _context.LateCharge.Add(result);
                    _context.SaveChanges();
                    _logger.LogInformation($"Finish (New Insert) Function => {methodName}, Result => {JsonSerializer.ToJsonString(result)}");
                    return(new ResponseModel <LateCharge>
                    {
                        Success = true,
                        Datas = result
                    });
                }
                else
                {
                    obj.FirstLateCharge      = result.FirstLateCharge;
                    obj.MrrRate              = result.MrrRate;
                    obj.MrrEffectiveRateDate = result.MrrEffectiveRateDate;
                    obj.UpdateBy             = header.UserID;
                    obj.UpdateDate           = DateTime.Now;
                    _context.SaveChanges();
                    _logger.LogInformation($"Finish (Update) Function => {methodName}, Result => {JsonSerializer.ToJsonString(result)}");

                    return(new ResponseModel <LateCharge>
                    {
                        Success = true,
                        Datas = obj
                    });
                }

                #endregion
            }
            catch (Exception ex)
            {
                var messageError = $"Error Function => {methodName}";
                _logger.LogError(ex, messageError);
                throw new ArgumentException(messageError, ex);
            }
        }