Esempio n. 1
0
        private void PopulateModel(CouponDetail model, IDictionary values)
        {
            string ID           = nameof(CouponDetail.id);
            string COUPON_CODE  = nameof(CouponDetail.coupon_code);
            string COUPON_NAME  = nameof(CouponDetail.coupon_name);
            string COUPON_TYPE  = nameof(CouponDetail.coupon_type);
            string VALUE        = nameof(CouponDetail.value);
            string STATE        = nameof(CouponDetail.state);
            string START_PERIOD = nameof(CouponDetail.start_period);
            string END_PERIOD   = nameof(CouponDetail.end_period);
            string CREATED_AT   = nameof(CouponDetail.created_at);

            if (values.Contains(ID))
            {
                model.id = Convert.ToInt32(values[ID]);
            }

            if (values.Contains(COUPON_CODE))
            {
                model.coupon_code = Convert.ToInt32(values[COUPON_CODE]);
            }

            if (values.Contains(COUPON_NAME))
            {
                model.coupon_name = Convert.ToString(values[COUPON_NAME]);
            }

            if (values.Contains(COUPON_TYPE))
            {
                model.coupon_type = Convert.ToString(values[COUPON_TYPE]);
            }

            if (values.Contains(VALUE))
            {
                model.value = Convert.ToString(values[VALUE]);
            }

            if (values.Contains(STATE))
            {
                model.state = Convert.ToString(values[STATE]);
            }

            if (values.Contains(START_PERIOD))
            {
                model.start_period = Convert.ToDateTime(values[START_PERIOD]);
            }

            if (values.Contains(END_PERIOD))
            {
                model.end_period = Convert.ToDateTime(values[END_PERIOD]);
            }

            if (values.Contains(CREATED_AT))
            {
                model.created_at = Convert.ToDateTime(values[CREATED_AT]);
            }
        }
Esempio n. 2
0
        public ActionResult GetCouponsDetails(CouponDetail coupondetail, int page = 1, int rows = 20)
        {
            PageInfo pageInfo = new PageInfo()
            {
                Page = page, Rows = rows
            };
            int totalCount = 0;
            var result     = CouponsService.GetCouponsDetails(coupondetail, pageInfo, out totalCount);

            return(Json(new { total = totalCount, rows = result }));
        }
 public CouponDetailModel ToCouponDetailModel(CouponDetail couponDetail)
 {
     if (couponDetail == null)
     {
         return(null);
     }
     return(new CouponDetailModel
     {
         Id = couponDetail.Id.ToString(),
         Code = couponDetail.Code,
         Amount = couponDetail.Amount,
         Description = couponDetail.Description,
     });
 }
Esempio n. 4
0
        public HttpResponseMessage Post(FormDataCollection form)
        {
            var model  = new CouponDetail();
            var values = JsonConvert.DeserializeObject <IDictionary>(form.Get("values"));

            PopulateModel(model, values);

            Validate(model);
            if (!ModelState.IsValid)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, GetFullErrorMessage(ModelState)));
            }

            var result = _context.CouponDetails.Add(model);

            _context.SaveChanges();

            return(Request.CreateResponse(HttpStatusCode.Created, result.id));
        }
Esempio n. 5
0
        public ActionResult CouponsExportExcel(CouponDetail couponsDetail, string memberMobile)
        {
            EFDbContext _context      = new EFDbContext();
            var         memberMobiles = "";

            if (memberMobile != "")
            {
                var customer = _context.Customers.Where(p => p.Mobile.Contains(memberMobile) && p.IsDeleted != 1);
                if (customer != null)
                {
                    foreach (var item in customer)
                    {
                        memberMobiles += item.Id + ",";
                    }
                }
            }
            OpResult result = CouponsService.CouponsExport(couponsDetail, memberMobiles);

            return(Json(result));
        }
Esempio n. 6
0
        /// <summary>
        /// This method is used to save coupon details on the basis of coupon Id in CouponDetail Table
        /// </summary>
        /// <param name="couponDetails"></param>
        /// <param name="CouponId"></param>
        /// <returns></returns>
        private bool SaveCouponDetails(CouponModel couponDetails, int CouponId)
        {
            bool isSaved;
            List <CouponDetail> listCouponDetails = new List <CouponDetail>();
            CouponDetail        objCouponDetails;

            foreach (CouponDetailsModel items in couponDetails.CouponDetails)
            {
                ///Updating Coupon Id to all new Coupons
                objCouponDetails            = new CouponDetail();
                objCouponDetails.CouponCode = CouponId;
                objCouponDetails.CouponNo   = items.CouponNo;
                objCouponDetails.IsRedeem   = items.IsRedeem;
                objCouponDetails.RedeemDate = items.RedeemDate;
                listCouponDetails.Add(objCouponDetails);
            }
            ///Insett in Coupon Detail Table
            isSaved = _couponDetailsRepository.SaveCoupons(listCouponDetails);
            return(isSaved);
        }
        /// <summary>
        /// 新增优惠券从表数据
        /// </summary>
        /// <param name="coupons">优惠券主表数据</param>
        /// <param name="customers">优惠券绑定客户信息</param>
        /// <returns></returns>
        public OpResult CreateCouponsDetail(Coupons coupons, Customers customers, Random _random)
        {
            OpResult result = new OpResult()
            {
                Successed = false
            };

            try
            {
                CouponDetail couponDetail = new CouponDetail()
                {
                    Id = CommonRules.GUID
                };
                couponDetail.CouponId       = coupons.Id;                         //  优惠券id
                couponDetail.CouponSN       = CommonRules.CouponsNo(12, _random); //优惠券号
                couponDetail.MemberId       = customers.Id;
                couponDetail.UseState       = 0;                                  //生成状态
                couponDetail.CouponBatch    = coupons.CouponBatch;
                couponDetail.Title          = coupons.Title;
                couponDetail.Denomination   = coupons.Denomination;
                couponDetail.SalesMoney     = coupons.SalesMoney;
                couponDetail.ConditionMoney = coupons.ConditionMoney;
                couponDetail.BeginValidDate = coupons.BeginValidDate;
                couponDetail.EndValidDate   = coupons.EndValidDate;
                couponDetail.CreatedOn      = DateTime.Now;
                couponDetail.CreatedBy      = coupons.CreatedBy;
                couponDetail.IsDeleted      = 0;
                _context.CouponDetails.Add(couponDetail);
                result.Successed = true;
            }
            catch (Exception e)
            {
                result.Message = e.Message;
            }
            return(result);
        }
        public OperationResult CreateOrder(UserForm userForm, OrderData data, out string productName)
        {
            var result = new OperationResult();
            //尋找是否有可用Coupon
            CouponDetail couponDetail = CheckCoupon(data.AccountName, data.CouponDetailId);

            if (couponDetail == null)
            {
                data.CouponDetailId = null;
            }
            else
            {
                data.CouponDetailId = couponDetail.CouponDetailId;
            }
            byte?invoiceDonateTo;

            if (userForm.InvoiceDonateTo == null)
            {
                invoiceDonateTo = null;
            }
            else
            {
                invoiceDonateTo = byte.Parse(userForm.InvoiceDonateTo);
            }
            UserFavorite favorite = _repository.GetAll <UserFavorite>()
                                    .First(x => x.FavoriteId == data.FavoriteId);
            PackageProduct            package         = null;
            List <UserDefinedProduct> userDefinedList = null;

            if (favorite.IsPackage)
            {
                package     = GetPackage(favorite);
                productName = package.Name;
            }
            else
            {
                userDefinedList = GetUserDefinedList(favorite);
                productName     = userDefinedList[0].Name;
            }
            using (var transaction = _context.Database.BeginTransaction()) {
                try {
                    Order order = new Order {
                        OrderId         = Guid.NewGuid(),
                        AccountName     = data.AccountName,
                        FullName        = userForm.FullName,
                        Email           = userForm.Email,
                        Phone           = userForm.Phone,
                        DateService     = DateTime.Parse(userForm.DateService),
                        Address         = $"{userForm.County}{userForm.District}{userForm.Address}",
                        Remark          = userForm.Remark == null ? string.Empty : userForm.Remark,
                        OrderState      = (byte)OrderState.Unpaid,
                        Rate            = null,
                        Comment         = string.Empty,
                        CouponDetailId  = data.CouponDetailId,
                        PaymentType     = string.Empty,
                        InvoiceType     = byte.Parse(userForm.InvoiceType),
                        InvoiceDonateTo = invoiceDonateTo,
                        MerchantTradeNo = data.MerchantTradeNo,
                        TradeNo         = string.Empty,
                        CreateTime      = data.Now,
                        EditTime        = data.Now,
                        CreateUser      = data.AccountName,
                        EditUser        = data.AccountName,
                    };
                    _repository.Create <Order>(order);
                    _context.SaveChanges();

                    OrderDetail od = new OrderDetail {
                        OrderDetailId = Guid.NewGuid(),
                        OrderId       = order.OrderId,
                        FavoriteId    = data.FavoriteId,
                        FinalPrice    = data.FinalPrice,
                        ProductName   = productName,
                        CreateTime    = data.Now,
                        EditTime      = data.Now,
                        CreateUser    = data.AccountName,
                        EditUser      = data.AccountName,
                    };
                    _repository.Create <OrderDetail>(od);
                    _context.SaveChanges();

                    if (favorite.IsPackage)
                    {
                        List <int?> roomTypes = new List <int?> {
                            package.RoomType, package.RoomType2
                        };
                        if (package.RoomType3 >= 0)
                        {
                            roomTypes.Add(package.RoomType3);
                        }
                        List <int?> squareFeets = new List <int?> {
                            package.Squarefeet, package.Squarefeet2
                        };
                        if (package.Squarefeet3 >= 0)
                        {
                            squareFeets.Add(package.Squarefeet3);
                        }

                        OrderPackage orderPackage = new OrderPackage {
                            OrderId      = order.OrderId,
                            RoomTypes    = string.Join(",", roomTypes),
                            SquareFeets  = string.Join(",", squareFeets),
                            ServiceItems = package.ServiceItem,
                            Hour         = package.Hour,
                            Price        = package.Price,
                            CreateTime   = data.Now,
                            EditTime     = data.Now,
                            CreateUser   = data.AccountName,
                            EditUser     = data.AccountName,
                        };
                        _repository.Create <OrderPackage>(orderPackage);
                    }
                    else
                    {
                        foreach (var item in userDefinedList)
                        {
                            OrderUserDefined orderUserDefined = new OrderUserDefined {
                                OrderId      = order.OrderId,
                                RoomType     = item.RoomType,
                                SquareFeet   = item.Squarefeet,
                                ServiceItems = item.ServiceItems,
                                Hour         = item.Hour,
                                Price        = item.Price,
                                CreateTime   = data.Now,
                                EditTime     = data.Now,
                                CreateUser   = data.AccountName,
                                EditUser     = data.AccountName,
                            };
                            _repository.Create <OrderUserDefined>(orderUserDefined);
                        }
                    }
                    _context.SaveChanges();

                    if (couponDetail != null)
                    {
                        couponDetail.State = (int)UseState.Used;
                        _context.SaveChanges();
                    }

                    result.IsSuccessful = true;
                    transaction.Commit();
                } catch (Exception ex) {
                    result.IsSuccessful = false;
                    result.Exception    = ex;
                    transaction.Rollback();
                }
            }
            return(result);
        }
        /// <summary>
        /// 创建优惠券
        /// </summary>
        /// <param name="coupons">优惠券实体</param>
        /// <returns>成功或失败,失败信息</returns>
        public OpResult CreateCoupons(Coupons coupons)
        {
            OpResult result = new OpResult()
            {
                Successed = false
            };
            bool isEdit = false;

            try
            {
                if (coupons.Id == null)
                {
                    //id为空 添加id
                    coupons.Id          = CommonRules.GUID;
                    coupons.CouponBatch = CommonRules.CommonNoRules("couponbatch");
                }
                else
                {
                    isEdit = true;
                }

                //如果优惠券是要生成的则执行生成的代码
                if (coupons.Status == 1)
                {
                    if (coupons.GiveWay == 1)
                    {
                        //hstodo:检查短信条数
                        //if (coupons.IsSendSMS == 1 && coupons.DistributingType == 0)
                        //{
                        //    int SMSBalance = 0;
                        //    var SMSBalanceStr = EChiHelper.GetBalance_Normal();
                        //    if (!string.IsNullOrEmpty(SMSBalanceStr))
                        //    {
                        //        try
                        //        {
                        //            SMSBalance = int.Parse(SMSBalanceStr);
                        //        }
                        //        catch (Exception ex)
                        //        {
                        //            return OpResult.Fail("对不起,查询短信余额时发生错误,错误:" + SMSBalanceStr);
                        //        }
                        //        if (SMSBalance < coupons.Quantity)
                        //        {
                        //            return OpResult.Fail(string.Format("对不起,需要发送短信{0}条,短信余额剩余{1}条,短信余额不足,请充值。", coupons.Quantity, SMSBalance));
                        //        }
                        //    }
                        //}
                        Random _random = new Random();
                        switch (coupons.GivenObjectType)
                        {
                        case 1:    //1的时候是所有用户都加入数据
                            List <Customers> datas = new FCake.Bll.CustomersService().GetCustomerByWhere(a => a.IsDeleted != 1);
                            coupons.Quantity = datas.Count();
                            foreach (var item in datas)
                            {
                                CreateCouponsDetail(coupons, item, _random);
                            }
                            break;

                        case 2:    //2的时候按会员等级来
                            List <Customers> customers = new FCake.Bll.CustomersService().GetCustomerByWhere(a => coupons.GivenObjectIds.Contains(a.MemberLevelValue.ToString()));
                            coupons.Quantity = customers.Count();
                            foreach (var item in customers)
                            {
                                CreateCouponsDetail(coupons, item, _random);
                            }
                            break;

                        case 3:    //3的时候按指定用户来
                            List <Customers> customer = new FCake.Bll.CustomersService().GetCustomerByWhere(a => coupons.GivenObjectIds.Contains(a.Id));
                            if (coupons.DistributingType == 1)
                            {
                                var cu = customer.FirstOrDefault();
                                if (cu != null)
                                {
                                    for (var i = 0; i < coupons.Quantity; i++)
                                    {
                                        CreateCouponsDetail(coupons, cu, _random);
                                    }
                                }
                            }
                            else
                            {
                                coupons.Quantity = customer.Count();
                                foreach (var item in customer)
                                {
                                    CreateCouponsDetail(coupons, item, _random);
                                }
                            }
                            break;
                        }
                    }
                    else
                    {
                        var    createCount = coupons.Quantity;
                        Random _random     = new Random();
                        //不绑定客户生成优惠券
                        for (int i = 0; i < createCount; i++)
                        {
                            CouponDetail couponDetail = new CouponDetail()
                            {
                                Id = CommonRules.GUID
                            };
                            couponDetail.CouponId = coupons.Id;                         //  优惠券id
                            couponDetail.CouponSN = CommonRules.CouponsNo(12, _random); //优惠券号
                            //查询重复
                            var data = _context.CouponDetails.SingleOrDefault(p => p.CouponSN.Equals(couponDetail.CouponSN) && p.IsDeleted != 1);
                            if (data != null)
                            {
                                createCount++;
                                continue;
                            }
                            //couponDetail.MemberId = customers.Id;
                            couponDetail.UseState       = 0; //生成状态
                            couponDetail.Title          = coupons.Title;
                            couponDetail.CouponBatch    = coupons.CouponBatch;
                            couponDetail.Denomination   = coupons.Denomination;
                            couponDetail.SalesMoney     = coupons.SalesMoney;
                            couponDetail.ConditionMoney = coupons.ConditionMoney;
                            couponDetail.BeginValidDate = coupons.BeginValidDate;
                            couponDetail.EndValidDate   = coupons.EndValidDate;
                            couponDetail.CreatedOn      = DateTime.Now;
                            couponDetail.CreatedBy      = coupons.CreatedBy;
                            couponDetail.IsDeleted      = 0;
                            _context.CouponDetails.Add(couponDetail);
                        }
                    }
                }
                if (!isEdit)
                {
                    _context.Coupons.Add(coupons);
                }
                else
                {
                    var cdata = _context.Coupons.SingleOrDefault(p => p.Id.Equals(coupons.Id) && p.IsDeleted != 1);
                    if (cdata != null)
                    {
                        cdata.CopyProperty(coupons);
                        cdata.ModifiedOn = DateTime.Now;
                    }
                }
                if (_context.SaveChanges() > 0)
                {
                    result.Successed = true;
                    result.Message   = "创建优惠券成功!";
                    result.Code      = coupons.Quantity.ToString();

                    #region 发送短信

                    if (coupons.IsSendSMS == 1 && coupons.Status == 1)
                    {
                        List <string> mobileList = new List <string>();
                        mobileList = GetMobileListByCouponId(coupons.Id);
                        //将需要发送短信的号码加入result.Data中,导出Excel手动发送
                        result.Data = mobileList;
                    }
                    #endregion
                }
                else
                {
                    result.Message = "创建优惠券失败!";
                }
            }
            catch (Exception e)
            {
                result.Message = "创建优惠券发生异常!";
            }
            return(result);
        }
Esempio n. 10
0
 /// <summary>
 /// 优惠券导出到excel
 /// </summary>
 /// <param name="coupons"></param>
 /// <param name="memberMobile"></param>
 /// <returns></returns>
 public OpResult CouponsExport(CouponDetail coupons, string memberMobile)
 {
     SqlParameter[] param = new SqlParameter[7];
     if (coupons.BeginValidDate != new DateTime())
     {
         param[0] = new SqlParameter("@beginValidDate", coupons.BeginValidDate);
     }
     else
     {
         param[0] = new SqlParameter("@beginValidDate", DBNull.Value);
     }
     if (coupons.EndValidDate != new DateTime())
     {
         param[1] = new SqlParameter("@endValidDate", coupons.EndValidDate);
     }
     else
     {
         param[1] = new SqlParameter("@endValidDate", DBNull.Value);
     }
     if (coupons.CouponSN.IsNotNullOrEmpty())
     {
         param[2] = new SqlParameter("@couponSN", coupons.CouponSN);
     }
     else
     {
         param[2] = new SqlParameter("@couponSN", DBNull.Value);
     }
     param[3]       = new SqlParameter("@useState", SqlDbType.SmallInt, 2);
     param[3].Value = coupons.UseState;
     param[4]       = new SqlParameter("@denomination", coupons.Denomination);
     if (memberMobile.IsNotNullOrEmpty())
     {
         param[5] = new SqlParameter("@memberId", memberMobile);
     }
     else
     {
         param[5] = new SqlParameter("@memberId", DBNull.Value);
     }
     if (coupons.CouponBatch.IsNotNullOrEmpty())
     {
         param[6] = new SqlParameter("@couponBatch", coupons.CouponBatch);
     }
     else
     {
         param[6] = new SqlParameter("@couponBatch", DBNull.Value);
     }
     try
     {
         DataTable dt = _context.Database.SqlQueryForDataTatable("EXEC dbo.Proc_CouponsExport @useState = @useState,@beginValidDate = @beginValidDate,@endValidDate = @endValidDate,@couponSN = @couponSN,@denomination = @denomination,@memberId = @memberId,@couponBatch=@couponBatch", param);
         if (dt.Rows.Count == 0)
         {
             return(OpResult.Fail("无可导出数据!"));
         }
         dt = UpdateDataTable(dt);
         for (int i = 0; i < dt.Rows.Count; i++)
         {
             if (dt.Rows[i]["ConditionMoney"].ToString() != "0.0000")
             {
                 dt.Rows[i]["ConditionMoney"] = "满" + String.Format("{0:F}", Convert.ToDecimal(dt.Rows[i]["ConditionMoney"])) + "元使用";
             }
             else
             {
                 dt.Rows[i]["ConditionMoney"] = "无条件使用";
             }
         }
         var      fileName = DateTime.Now.ToString("yyyyMMddHHmmss");
         string[] fields   = { "CouponBatch", "CouponSN", "Title", "Denomination", "CouponStatus", "ConditionMoney", "FullName", "Mobile", "useFullName", "UseDate", "UseOrderSN", "BeginValidDate", "EndValidDate" };
         string[] names    = { "批次号", "优惠券券号", "优惠券名称", "金额", "使用状态", "使用条件", "拥有者姓名", "拥有者电话", "使用人", "使用时间", "使用订单", "有效期开始时间", "有效期结束时间" };
         Dictionary <int, int> colWidth = new Dictionary <int, int>();
         colWidth.Add(0, 20);
         colWidth.Add(1, 20);
         FCake.Core.Common.ExportExcel exceExport = new ExportExcel();
         string fileUrl = exceExport.ToExcel(fileName, dt, fields, names, null, null, colWidth);
         return(OpResult.Success("导出成功!", null, fileUrl));
     }
     catch (Exception ex)
     {
         return(OpResult.Fail("导出失败:" + ex.Message));
     }
 }
Esempio n. 11
0
        /// <summary>
        /// 优惠券明细数据过滤
        /// </summary>
        /// <param name="couponsNo"></param>
        /// <param name="user"></param>
        /// <param name="status"></param>
        /// <param name="faceVal"></param>
        /// <param name="beginTime"></param>
        /// <param name="endTime"></param>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <returns></returns>
        public dynamic GetCouponsDetails(CouponDetail coupondetail, PageInfo pageInfo, out int totalCount)
        {
            var query = _context.CouponDetails.Where(p => p.IsDeleted != 1);

            if (!coupondetail.CouponSN.IsNullOrEmpty())
            {
                query = query.Where(p => p.CouponSN.Contains(coupondetail.CouponSN));
            }
            if (!coupondetail.MemberId.IsNullOrEmpty())
            {//coupondetail.MemberId 传手机号
                var customer = new CustomersService().GetCustomerByWhere(a => a.Mobile.Contains(coupondetail.MemberId) && a.IsDeleted != 1);
                if (customer.Count() > 0)
                {
                    string ids = "";
                    foreach (var item in customer)
                    {
                        ids += item.Id + ",";
                    }
                    query = query.Where(p => ids.Contains(p.MemberId));
                }
            }
            //-1=全部
            if (coupondetail.UseState != -1)
            {
                query = query.Where(a => a.UseState.Equals(coupondetail.UseState));
            }
            if (coupondetail.CouponBatch.IsNotNullOrEmpty())
            {
                query = query.Where(a => a.CouponBatch.Contains(coupondetail.CouponBatch));
            }
            if (coupondetail.Denomination > 0)
            {
                query = query.Where(a => a.Denomination.Equals(coupondetail.Denomination));
            }
            if (coupondetail.BeginValidDate != new DateTime())
            {
                query = query.Where(a => a.BeginValidDate <coupondetail.BeginValidDate && a.EndValidDate> coupondetail.BeginValidDate);
            }
            //if (coupondetail.EndValidDate != new DateTime())
            //{
            //    query = query.Where(a => a.EndValidDate < coupondetail.EndValidDate);
            //}
            totalCount = query.Count();
            var result = (from x in query
                          join cu1 in _context.Customers
                          on x.MemberId equals cu1.Id into temp1
                          join cu2 in _context.Customers
                          on x.UseMemberId equals cu2.Id into temp2
                          from cu1 in temp1.DefaultIfEmpty()
                          from cu2 in temp2.DefaultIfEmpty()
                          where x.IsDeleted != 1
                          select new
            {
                x.CouponSN,
                x.Denomination,
                x.SalesMoney,
                x.CreatedOn,
                x.BeginValidDate,
                x.EndValidDate,
                x.UseDate,
                x.UseState,
                x.UseMemberId,
                x.ConditionMoney,
                UseOrderSN = x.UseOrderSN,
                x.Title,
                OwnerMobile = cu1.Mobile,
                OwnerTel = cu1.Tel,
                OwnerFullName = cu1.FullName,
                UsedMobile = cu2.Mobile,
                UsedTel = cu2.Tel,
                UsedFullName = cu2.FullName,
                CouponBatch = x.CouponBatch
            }).OrderBy(p => p.UseState).ThenByDescending(p => p.CreatedOn).Skip((pageInfo.Page - 1) * pageInfo.Rows).Take(pageInfo.Rows);

            return(result.ToList());
        }
Esempio n. 12
0
        public OperationResult CreateOrder(UserForm userForm, OrderData data, out string productName)
        {
            var result = new OperationResult();
            //尋找是否有可用Coupon
            CouponDetail cd = CheckCoupon(data.AccountName, data.CouponDetailId);

            if (cd == null)
            {
                data.CouponDetailId = null;
            }
            else
            {
                data.CouponDetailId = cd.CouponDetailId;
            }
            byte?invoiceDonateTo;

            if (userForm.InvoiceDonateTo == null)
            {
                invoiceDonateTo = null;
            }
            else
            {
                invoiceDonateTo = byte.Parse(userForm.InvoiceDonateTo);
            }
            UserFavorite favorite = _repository.GetAll <UserFavorite>()
                                    .First(x => x.FavoriteId == data.FavoriteId);

            if (favorite.IsPackage)
            {
                productName = _repository.GetAll <PackageProduct>()
                              .First(x => x.PackageProductId == favorite.PackageProductId)
                              .Name;
            }
            else
            {
                productName = _repository.GetAll <UserDefinedProduct>()
                              .First(x => x.UserDefinedId == favorite.UserDefinedId)
                              .Name;
            }
            using (var transcation = _context.Database.BeginTransaction()) {
                try {
                    Order order = new Order {
                        OrderId         = Guid.NewGuid(),
                        AccountName     = data.AccountName,
                        FullName        = userForm.FullName,
                        Email           = userForm.Email,
                        Phone           = userForm.Phone,
                        DateService     = DateTime.Parse(userForm.DateService),
                        Address         = $"{userForm.County}{userForm.District}{userForm.Address}",
                        Remark          = userForm.Remark == null ? string.Empty : userForm.Remark,
                        OrderState      = (byte)OrderState.Unpaid,
                        Rate            = null,
                        Comment         = string.Empty,
                        CouponDetailId  = data.CouponDetailId,
                        PaymentType     = string.Empty,
                        InvoiceType     = byte.Parse(userForm.InvoiceType),
                        InvoiceDonateTo = invoiceDonateTo,
                        MerchantTradeNo = data.MerchantTradeNo,
                        TradeNo         = string.Empty,
                        CreateTime      = data.Now,
                        EditTime        = data.Now,
                        CreateUser      = data.AccountName,
                        EditUser        = data.AccountName,
                    };
                    _repository.Create <Order>(order);
                    _context.SaveChanges();

                    OrderDetail od = new OrderDetail {
                        OrderDetailId = Guid.NewGuid(),
                        OrderId       = order.OrderId,
                        FavoriteId    = data.FavoriteId,
                        FinalPrice    = data.FinalPrice,
                        ProductName   = productName,
                        CreateTime    = data.Now,
                        EditTime      = data.Now,
                        CreateUser    = data.AccountName,
                        EditUser      = data.AccountName,
                    };
                    _repository.Create <OrderDetail>(od);
                    _context.SaveChanges();

                    if (cd != null)
                    {
                        cd.State = (int)UseState.Used;
                        _context.SaveChanges();
                    }

                    result.IsSuccessful = true;
                    transcation.Commit();
                } catch (Exception ex) {
                    result.IsSuccessful = false;
                    result.Exception    = ex;
                    transcation.Rollback();
                }
            }
            return(result);
        }