public IActionResult Index(PointAdjustDTO model)
 {
     if (!_loginServices.isInAdminRoles(this.GetRoles()))
     {
         return(RedirectToAction("Login", "Accounts"));
     }
     model.PointAdjusts = new List <PointAdjust>();
     return(View("PointAdjust", model));
 }
        public async Task <IActionResult> Modify(PointAdjustDTO model, IFormFile file)
        {
            if (!_loginServices.isInAdminRoles(this.GetRoles()))
            {
                return(RedirectToAction("Login", "Accounts"));
            }
            if (model.valid)
            {
                if (model.PointAdjusts != null && model.PointAdjusts.Count() > 0)
                {
                    foreach (var item in model.PointAdjusts)
                    {
                        var point = new CustomerPoint();
                        point.CustomerID       = item.CustomerID;
                        point.Code             = item.ConditionCode;
                        point.Name             = item.Name;
                        point.Point            = item.Point;
                        point.PurchaseAmt      = item.PurchaseAmt;
                        point.TransacionTypeID = item.TransacionTypeID;
                        point.CustomerChanal   = item.CustomerChanal;
                        point.Source           = "tipsociety-adjust";

                        point.Create_On = item.Create_On;
                        point.Create_By = item.Create_By;
                        point.Update_On = item.Update_On;
                        point.Update_By = item.Update_By;
                        this._context.CustomerPoints.Add(point);
                    }
                    this._context.PointAdjusts.AddRange(model.PointAdjusts);
                    this._context.SaveChanges();
                    return(RedirectToAction("Index", new { result = 1 }));
                }
            }
            else
            {
                if (file == null)
                {
                    ModelState.AddModelError("Error", "ไม่พบข้อมูลไฟล์นำเข้า");
                }
                else
                {
                    model.PointAdjusts     = new List <PointAdjust>();
                    model.PointAdjustFails = new List <PointAdjustFail>();

                    ModelState.Clear();
                    using (var memoryStream = new MemoryStream())
                    {
                        await file.CopyToAsync(memoryStream).ConfigureAwait(false);

                        using (var package = new ExcelPackage(memoryStream))
                        {
                            var workbook  = package.Workbook;
                            var worksheet = workbook.Worksheets.First();

                            var rowCount = worksheet.Dimension?.Rows;
                            var colCount = worksheet.Dimension?.Columns;
                            if (rowCount.HasValue && colCount.HasValue)
                            {
                                for (int row = 2; row <= rowCount.Value; row++)
                                {
                                    if (colCount >= 2)
                                    {
                                        var username      = worksheet.Cells["A" + row].Value.ToString();
                                        var conditioncode = worksheet.Cells["B" + row].Value.ToString();
                                        var purchaseAmt   = NumUtil.ParseDecimal(worksheet.Cells["C" + row].Value);
                                        var condition     = this._context.PointConditions.Where(w => w.ConditionCode == conditioncode).FirstOrDefault();
                                        var customer      = this._context.Customers.Include(i => i.User).Where(w => w.User.UserName == username).FirstOrDefault();
                                        if (customer != null && condition != null)
                                        {
                                            var adjust = new PointAdjust();
                                            adjust.Customer         = customer;
                                            adjust.ConditionCode    = condition.ConditionCode;
                                            adjust.CustomerChanal   = customer.Channel;
                                            adjust.TransacionTypeID = condition.TransacionTypeID;
                                            adjust.CustomerID       = customer.ID;
                                            adjust.Point            = GetPoint(condition, customer, purchaseAmt, false);
                                            adjust.Name             = condition.Name;
                                            adjust.Create_On        = DateUtil.Now();
                                            adjust.Create_By        = this.HttpContext.User.Identity.Name;
                                            adjust.Update_On        = DateUtil.Now();
                                            adjust.Update_By        = this.HttpContext.User.Identity.Name;
                                            model.PointAdjusts.Add(adjust);
                                        }
                                        else
                                        {
                                            var msg = new StringBuilder();
                                            if (condition == null)
                                            {
                                                msg.AppendLine("ไม่พบข้อมูลเงื่อนไขการสะสมคะแนน");
                                            }
                                            if (customer == null)
                                            {
                                                msg.AppendLine("ไม่พบข้อมูลสมาชิก");
                                            }
                                            var fail = new PointAdjustFail();
                                            fail.username      = worksheet.Cells["A" + row].Value;
                                            fail.conditioncode = worksheet.Cells["B" + row].Value;
                                            fail.message       = msg.ToString();
                                            fail.row           = row + 1;
                                            model.PointAdjustFails.Add(fail);
                                        }
                                    }
                                    else
                                    {
                                        ModelState.AddModelError("Error", "รูปแบบไฟล์ไม่ถูกต้อง");
                                    }
                                }
                            }
                            else
                            {
                                ModelState.AddModelError("Error", "รูปแบบไฟล์ไม่ถูกต้องหรือไม่มีข้อมูล");
                            }
                        }
                    }
                }
            }
            return(View("PointAdjust", model));
        }