Esempio n. 1
0
 /// <summary>
 /// 返回保存成功,并在一定时间后刷新当前页面
 /// </summary>
 /// <param name="form">表单</param>
 /// <param name="milliseconds">刷新延迟</param>
 /// <returns></returns>
 public static object SaveSuccessAndRefreshPage(this IModelFormBuilder form, int milliseconds)
 {
     return(new {
         message = new T("Saved Successfully"),
         script = BaseScriptStrings.RefreshAfter(milliseconds)
     });
 }
Esempio n. 2
0
        public IActionResult Rate(string serial)
        {
            var buyerOrderManager    = Application.Ioc.Resolve <BuyerOrderManager>();
            var productRatingManager = Application.Ioc.Resolve <ProductRatingManager>();
            var buyerOrderId         = buyerOrderManager.GetBuyerOrderIdFromSerial(serial);

            if (Request.Method == HttpMethods.GET)
            {
                // 显示可评价的商品
                if (buyerOrderId == null && Context.GetIsEditingPage())
                {
                    var sessionManager = Application.Ioc.Resolve <SessionManager>();
                    var userId         = sessionManager.GetSession().GetUser().Id;
                    buyerOrderId = productRatingManager.SelectOneRatableBuyerOrder(userId);
                }
                var displayInfos = buyerOrderId == null ?
                                   new List <OrderProductDisplayInfo>() :
                                   productRatingManager.GetUnratedOrderProductDisplayInfos(buyerOrderId.Value);
                return(new TemplateResult("shopping.productrating/order_rate.html", new { displayInfos }));
            }
            // 提交评价
            var arguments = Request.GetAllDictionary();
            var files     = Request.GetPostedFiles();

            productRatingManager.AddRatingsFromRequestArguments(buyerOrderId.Value, arguments, files);
            return(new JsonResult(new {
                message = new T("Rating successful, Redirecting to order list..."),
                script = BaseScriptStrings.Redirect("/user/orders", 1500)
            }));
        }
Esempio n. 3
0
        public IActionResult UpdateTransactionState(Guid transactionId)
        {
            // 更新交易状态
            var alipayMobileManager = Application.Ioc.Resolve <AlipayMobileManager>();

            alipayMobileManager.UpdateTransactionState(transactionId);
            // 支付成功或失败时跳转到结果页
            var transactionManager = Application.Ioc.Resolve <PaymentTransactionManager>();
            var transaction        = transactionManager.Get(transactionId);
            var resultUrl          = transactionManager.GetResultUrl(transactionId);

            if (transaction.State == PaymentTransactionState.Success)
            {
                return(new JsonResult(new {
                    message = new T("Alipay qrcode payment success, redirecting to result page..."),
                    script = BaseScriptStrings.Redirect(resultUrl, 3000)
                }));
            }
            else if (!transaction.Check(t => t.IsPayable).First)
            {
                return(new JsonResult(new {
                    message = new T("Alipay qrcode payment failed, redirecting to result page..."),
                    script = BaseScriptStrings.Redirect(resultUrl, 3000)
                }));
            }
            return(new JsonResult(new { hint = "success but nothing changed" }));
        }
            /// <summary>
            /// 提交表单
            /// </summary>
            /// <returns></returns>
            protected override object OnSubmit()
            {
                var app = new PaymentApiCrudController();
                var url = string.Format("{0}?type={1}", app.AddUrl, Type);

                return(new { script = BaseScriptStrings.RedirectModal(url) });
            }
            /// <summary>
            /// 添加列和操作
            /// </summary>
            public override void OnResponse(
                AjaxTableSearchRequest request, AjaxTableSearchResponse response)
            {
                var idColumn = response.Columns.AddIdColumn("Id");

                idColumn.StandardSetupFor <BuyerOrderCrudController>(request);
                response.Columns.AddHtmlColumn("OrderProducts", "30%");
                response.Columns.AddHtmlColumn("Price", "70");
                response.Columns.AddHtmlColumn("Quantity", "70");
                response.Columns.AddHtmlColumn("ShippedQuantity", "70");
                response.Columns.AddHtmlColumn("TotalCost", "70");
                response.Columns.AddEnumLabelColumn("State", typeof(OrderState), "50");
                response.Columns.AddMemberColumn("Seller", "70");
                response.Columns.AddEnumLabelColumn("Deleted", typeof(EnumDeleted), "70");
                var actionColumn = response.Columns.AddActionColumn("5%");
                var deleted      = request.Conditions.GetOrDefault <bool>("Deleted");

                if (!deleted)
                {
                    idColumn.AddConfirmActionForMultiChecked(
                        new T("MergePayment"),
                        "fa fa-credit-card",
                        new T("Please select orders to merge payment"),
                        new T("MergePayment"),
                        BaseScriptStrings.ConfirmMessageTemplateForMultiSelected(
                            new T("Sure to merge following order's payment?"), "ToString"),
                        BaseScriptStrings.PostConfirmedActionForMultiSelected(
                            "Serial", "/user/orders/merge_payment"));
                    actionColumn.AddButtonForOpenLink(
                        new T("View"), "btn btn-xs btn-info", "fa fa-edit",
                        "/user/orders/edit?serial=<%-row.Serial%>");
                }
                actionColumn.AddHtmlAction("OrderActions");
            }
        public IActionResult ApplyBackupTheme(string filename)
        {
            var themeManager = Application.Ioc.Resolve <VisualThemeManager>();

            themeManager.ApplyBackupTheme(filename);
            return(new JsonResult(new {
                message = new T("Apply theme success, reloading this page......"),
                script = BaseScriptStrings.RefreshAfter(3000)
            }));
        }
Esempio n. 7
0
        public IActionResult Create()
        {
            this.RequireAjaxRequest();
            var orderManager          = Application.Ioc.Resolve <SellerOrderManager>();
            var transactionManager    = Application.Ioc.Resolve <PaymentTransactionManager>();
            var sessionManager        = Application.Ioc.Resolve <SessionManager>();
            var createOrderParameters = Request
                                        .Get <CreateOrderParameters>("CreateOrderParameters") ?? new CreateOrderParameters();

            createOrderParameters.SetLoginInfo();
            var result      = orderManager.CreateOrder(createOrderParameters);
            var transaction = result.CreatedTransactions.Last();
            var resultUrl   = transactionManager.GetResultUrl(transaction.Id);

            return(new JsonResult(new { script = BaseScriptStrings.Redirect(resultUrl) }));
        }
Esempio n. 8
0
        /// <summary>
        /// 提交表单
        /// </summary>
        /// <returns></returns>
        protected override object OnSubmit()
        {
            var orderManager          = Application.Ioc.Resolve <SellerOrderManager>();
            var transactionManager    = Application.Ioc.Resolve <PaymentTransactionManager>();
            var sessionManager        = Application.Ioc.Resolve <SessionManager>();
            var createOrderParameters = string.IsNullOrEmpty(CreateOrderParameters) ?
                                        new CreateOrderParameters() :
                                        JsonConvert.DeserializeObject <CreateOrderParameters>(CreateOrderParameters);

            createOrderParameters.SetLoginInfo();
            var result      = orderManager.CreateOrder(createOrderParameters);
            var transaction = result.CreatedTransactions.Last();
            var resultUrl   = transactionManager.GetResultUrl(transaction.Id);

            return(new { script = BaseScriptStrings.Redirect(resultUrl) });
        }
 /// <summary>
 /// 添加删除按钮
 /// 点击后弹出确认框,确认后把json=[数据Id]提交到删除url
 /// </summary>
 /// <param name="column">操作列</param>
 /// <param name="typeName">类型名称</param>
 /// <param name="deleteUrl">删除使用的Url</param>
 /// <param name="name">名称,不指定时使用默认值</param>
 /// <param name="buttonClass">按钮的Css类,不指定时使用默认值</param>
 /// <param name="iconClass">图标的Css类,不指定时使用默认值</param>
 /// <param name="titleTemplate">标题的模板,格式是underscore.js的格式,参数传入rows</param>
 /// <param name="urlTemplate">编辑Url的模板,格式是underscore.js的格式,参数传入rows</param>
 /// <param name="primaryKey">数据Id保存的名称,不指定时使用默认值</param>
 /// <param name="dialogParameters">弹出框的参数,不指定时使用默认值</param>
 public static void AddDeleteAction(
     this AjaxTableActionColumn column, string typeName, string deleteUrl,
     string name          = null, string buttonClass      = null, string iconClass = null,
     string titleTemplate = null, string urlTemplate      = null,
     string primaryKey    = null, object dialogParameters = null)
 {
     primaryKey = primaryKey ?? nameof(IEntity <Guid> .Id);
     column.AddConfirmActionForBelongedRow(
         name ?? new T("Delete"),
         buttonClass ?? "btn btn-xs btn-danger",
         iconClass ?? "fa fa-remove",
         titleTemplate ?? string.Format(new T("Delete {0}"), new T(typeName)),
         BaseScriptStrings.ConfirmMessageTemplateForMultiSelected(
             string.Format(new T("Sure to delete following {0}?"), new T(typeName)), "ToString"),
         BaseScriptStrings.PostConfirmedActionForMultiSelected(primaryKey, deleteUrl),
         dialogParameters ?? new { type = "type-danger" });
 }
 /// <summary>
 /// 添加恢复按钮
 /// 点击后弹出确认框,确认后把json=[数据Id]提交到恢复url
 /// </summary>
 /// <param name="column">操作列</param>
 /// <param name="typeName">类型名称</param>
 /// <param name="recoverUrl">恢复使用的Url</param>
 /// <param name="name">名称,不指定时使用默认值</param>
 /// <param name="buttonClass">按钮的Css类,不指定时使用默认值</param>
 /// <param name="iconClass">图标的Css类,不指定时使用默认值</param>
 /// <param name="titleTemplate">标题的模板,格式是underscore.js的格式,参数传入rows</param>
 /// <param name="urlTemplate">编辑Url的模板,格式是underscore.js的格式,参数传入rows</param>
 /// <param name="primaryKey">数据Id保存的名称,不指定时使用默认值</param>
 /// <param name="dialogParameters">弹出框的参数,不指定时使用默认值</param>
 public static void AddRecoverAction(
     this AjaxTableActionColumn column, string typeName, string recoverUrl,
     string name          = null, string buttonClass      = null, string iconClass = null,
     string titleTemplate = null, string urlTemplate      = null,
     string primaryKey    = null, object dialogParameters = null)
 {
     primaryKey = primaryKey ?? nameof(IEntity <Guid> .Id);
     column.AddConfirmActionForBelongedRow(
         name ?? new T("Recover"),
         buttonClass ?? "btn btn-xs btn-info",
         iconClass ?? "fa fa-history",
         titleTemplate ?? string.Format(new T("Recover {0}"), new T(typeName)),
         BaseScriptStrings.ConfirmMessageTemplateForMultiSelected(
             string.Format(new T("Sure to recover following {0}?"), new T(typeName)), "ToString"),
         BaseScriptStrings.PostConfirmedActionForMultiSelected(primaryKey, recoverUrl),
         dialogParameters);
 }
        protected IActionResult MergePayment()
        {
            var serials      = Request.Get <IList <string> >("json");
            var orderManager = Application.Ioc.Resolve <BuyerOrderManager>();
            var orderIds     = orderManager.GetBuyerOrderIdsFromSerials(serials);

            if (orderIds.Count != serials.Count)
            {
                throw new BadRequestException(new T("Some order not exists"));
            }
            else if (orderIds.Count <= 1)
            {
                throw new BadRequestException(new T("Merge payment required atleast 2 orders"));
            }
            var transactionId      = orderManager.MergePayment(orderIds);
            var transactionManager = Application.Ioc.Resolve <PaymentTransactionManager>();
            var checkoutUrl        = transactionManager.GetResultUrl(transactionId);

            return(new JsonResult(new { script = BaseScriptStrings.Redirect(checkoutUrl) }));
        }
Esempio n. 12
0
            /// <summary>
            /// 提交表单
            /// </summary>
            /// <returns></returns>
            protected override object OnSubmit()
            {
                // 检查支付密码是否正确
                var apiData = Transaction.Api.ExtraData.GetOrDefault <ApiData>("ApiData") ?? new ApiData();

                apiData.CheckPaymentPassword(PaymentPassword);
                // 按类型执行支付操作
                var transactionManager = Application.Ioc.Resolve <PaymentTransactionManager>();
                var state = PayType == (int)PayTypes.ImmediateArrival ?
                            PaymentTransactionState.Success : PaymentTransactionState.SecuredPaid;

                transactionManager.Process(Transaction.Id, null, state);
                // 返回成功并跳转到交易结果页
                var resultUrl = string.Format("/payment/transaction/pay_result?id={0}", Transaction.Id);

                return(new {
                    message = new T("Payment Successfully, Redirecting to result page..."),
                    script = BaseScriptStrings.Redirect(resultUrl, 3000)
                });
            }
Esempio n. 13
0
        /// <summary>
        /// 提交表单
        /// </summary>
        /// <returns></returns>
        protected override object OnSubmit()
        {
            // 创建交易
            var api                = GetApiFromRequest();
            var sessionManager     = Application.Ioc.Resolve <SessionManager>();
            var payerId            = sessionManager.GetSession().GetUser().Id;
            var payeeId            = api.Owner?.Id;
            var transactionManager = Application.Ioc.Resolve <PaymentTransactionManager>();
            var apiManager         = Application.Ioc.Resolve <PaymentApiManager>();
            var paymentFee         = apiManager.CalculatePaymentFee(api.Id, Amount);
            var transaction        = transactionManager.CreateTransaction(
                "TestTransaction", api.Id, Amount, paymentFee,
                Currency, payerId, payeeId, payerId, Description);
            // 跳转到支付url地址
            var url = transactionManager.GetPaymentUrl(transaction.Id);

            return(new {
                message = new T("Create test transaction success, redirecting to payment page..."),
                script = BaseScriptStrings.Redirect(url, 3000)
            });
        }
        public object Add(Guid productId)
        {
            // 获取当前登录的用户
            var sessionManager = Application.Ioc.Resolve <SessionManager>();
            var session        = sessionManager.GetSession();
            var user           = session.GetUser();

            if (user == null)
            {
                // 用户不存在时跳转到登录页面
                return(new {
                    message = new T("Bookmark product require login, redirecting to login page..."),
                    script = BaseScriptStrings.Redirect("/user/login", 1500)
                });
            }
            // 调用管理器添加
            var productBookmarkManager = Application.Ioc.Resolve <ProductBookmarkManager>();

            if (!productBookmarkManager.Add(user.Id, productId))
            {
                return(new { message = new T("Product already bookmarked"), bookmarked = true });
            }
            return(new { message = new T("Bookmark product success"), bookmarked = true });
        }
Esempio n. 15
0
        /// <summary>
        /// 添加删除相关的按钮
        /// 如果数据类型可以回收,则添加批量删除或批量恢复和永久删除
        /// 如果数据类型不可以回收,则添加批量永久删除
        /// </summary>
        /// <param name="column">Id列</param>
        /// <param name="request">搜索请求</param>
        /// <param name="dataType">数据类型</param>
        /// <param name="typeName">类型名称</param>
        /// <param name="batchUrl">批量操作使用的Url</param>
        /// <param name="primaryKey">主键名称,不传入时使用默认</param>
        /// <param name="allowDeleteRecover">是否允许删除恢复,不传入时使用默认</param>
        /// <param name="allowDeleteForever">是否允许永久删除,不传入时使用默认</param>
        public static void AddDeleteActions(
            this AjaxTableIdColumn column, AjaxTableSearchRequest request,
            Type dataType, string typeName, string batchUrl, string primaryKey = null,
            bool?allowDeleteRecover = null, bool?allowDeleteForever = null)
        {
            // 判断需要添加哪些操作
            bool addBatchDelete        = false;
            bool addBatchRecover       = false;
            bool addBatchDeleteForever = false;

            if (typeof(IHaveDeleted).GetTypeInfo().IsAssignableFrom(dataType))
            {
                var deleted = request.Conditions.GetOrDefault <bool>("Deleted");
                addBatchDelete        = (allowDeleteRecover == false) ? false : !deleted;
                addBatchRecover       = (allowDeleteRecover == false) ? false : deleted;
                addBatchDeleteForever = (allowDeleteForever == false) ? false : deleted;
            }
            else
            {
                addBatchDeleteForever = allowDeleteForever ?? true;
            }
            // 添加批量删除
            typeName   = new T(typeName);
            primaryKey = primaryKey ?? nameof(IEntity <Guid> .Id);
            if (addBatchDelete)
            {
                column.AddConfirmActionForMultiChecked(
                    new T("Batch Delete"),
                    "fa fa-recycle",
                    new T("Please select {0} to delete", typeName),
                    new T("Batch Delete"),
                    BaseScriptStrings.ConfirmMessageTemplateForMultiSelected(
                        new T("Sure to delete following {0}?", typeName), "ToString"),
                    BaseScriptStrings.PostConfirmedActionForMultiSelected(
                        primaryKey, batchUrl + "?action=delete"),
                    new { type = "type-danger" });
            }
            // 添加批量恢复
            if (addBatchRecover)
            {
                column.AddConfirmActionForMultiChecked(
                    new T("Batch Recover"),
                    "fa fa-history",
                    new T("Please select {0} to recover", typeName),
                    new T("Batch Recover"),
                    BaseScriptStrings.ConfirmMessageTemplateForMultiSelected(
                        new T("Sure to recover following {0}?", typeName), "ToString"),
                    BaseScriptStrings.PostConfirmedActionForMultiSelected(
                        primaryKey, batchUrl + "?action=recover"));
            }
            // 添加批量永久删除
            if (addBatchDeleteForever)
            {
                column.AddConfirmActionForMultiChecked(
                    new T("Batch Delete Forever"),
                    "fa fa-remove",
                    new T("Please select {0} to delete", typeName),
                    new T("Batch Delete Forever"),
                    BaseScriptStrings.ConfirmMessageTemplateForMultiSelected(
                        new T("Sure to delete following {0} forever?", typeName), "ToString"),
                    BaseScriptStrings.PostConfirmedActionForMultiSelected(
                        primaryKey, batchUrl + "?action=delete_forever"),
                    new { type = "type-danger" });
            }
        }
 public IActionResult SwitchToLanguage(string language)
 {
     Context.PutCookie(LocaleUtils.LanguageKey, language);
     return(new JsonResult(new { script = BaseScriptStrings.RefreshAfter(0) }));
 }