public IActionResult InsertComission(InsertComissionDto input) { try { var userId = ClaimPrincipalFactory.GetUserId(User); #region Validation var validator = new ParamValidator(); validator.ValidateNull(input.Title, General.Messages_.NullInputMessages_.GeneralNullMessage("عنوان")) .ValidateNull(input.Value, General.Messages_.NullInputMessages_.GeneralNullMessage("مقدار کمیسیون")) .Throw(General.Results_.FieldNullErrorCode()); if (input.Value > 70) { throw new BusinessException("مقدار کمیسیون نباید بیشتر از 70 باشد.", 1001); } if (input.ProductIdList.Count == 0) { throw new BusinessException("محصولی انتخاب نشده است.", 1001); } #endregion var productIdList = new List <Product>(); var comission = new Comission { Cdate = DateTime.Now.Ticks, CuserId = userId, SendEmail = input.SendEmail, SendSms = input.SendSms, Title = input.Title, Value = input.Value, ProductComission = new List <ProductComission>() }; input.ProductIdList.ForEach(c => { #region Change Product Status var product = _repository.Product.FindByCondition(x => x.Id == c).Include(c => c.Seller).FirstOrDefault(); if (product == null) { throw new BusinessException("کد محصولات صحیح نیست", 1001); } productIdList.Add(product); product.FinalStatusId = 7; _repository.Product.Update(product); #endregion #region Deactive Previous Comission var _productComission = _repository.ProductComission .FindByCondition(x => x.ProductId == c && x.DaDate == null).FirstOrDefault(); if (_productComission != null) { _productComission.DaDate = DateTime.Now.Ticks; _productComission.DaUserId = userId; _repository.ProductComission.Update(_productComission); } #endregion var productComission = new ProductComission { CuserId = userId, Cdate = DateTime.Now.Ticks, ProductId = c, }; comission.ProductComission.Add(productComission); }); #region SendSms if (input.SendSms) { productIdList.ForEach(c => { var sms = new SendSMS(); sms.SendChangeComissionSms(c.Seller.Mobile.Value, c.Seller.Name + " " + c.Seller.Fname, c.Name, comission.Value.Value); }); } #endregion #region SendEmail if (input.SendEmail) { productIdList.ForEach(c => { var email = new SendEmail(); email.SendChangeComissionEmail(c.Seller.Email, c.Seller.Name + " " + c.Seller.Fname, c.Name, comission.Value.Value); }); } #endregion _repository.Comission.Create(comission); _repository.Save(); _logger.LogData(MethodBase.GetCurrentMethod(), comission.Id, null, input); return(Ok(comission.Id)); } catch (Exception e) { _logger.LogError(e, MethodBase.GetCurrentMethod(), input); return(BadRequest(e.Message)); } }