コード例 #1
0
        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));
            }
        }