Beispiel #1
0
        public bool Authorize(Transaction t, HotcakesApplication app)
        {
            try
            {
                var ppAPI = PaypalExpressUtilities.GetPaypalAPI(app.CurrentStore);

                if (t.PreviousTransactionNumber != null)
                {
                    var OrderNumber = t.MerchantInvoiceNumber + Guid.NewGuid();

                    var paymentResponse = ppAPI.DoExpressCheckoutPayment(t.PreviousTransactionNumber,
                                                                         t.PreviousTransactionAuthCode,
                                                                         t.Amount.ToString("N", CultureInfo.InvariantCulture),
                                                                         PaymentActionCodeType.Order,
                                                                         PayPalAPI.GetCurrencyCodeType(app.CurrentStore.Settings.PayPal.Currency),
                                                                         OrderNumber);

                    if (paymentResponse.Ack == AckCodeType.Success ||
                        paymentResponse.Ack == AckCodeType.SuccessWithWarning)
                    {
                        var paymentInfo = paymentResponse.DoExpressCheckoutPaymentResponseDetails.PaymentInfo[0];

                        t.Result.Succeeded               = true;
                        t.Result.ReferenceNumber         = paymentInfo.TransactionID;
                        t.Result.ResponseCode            = "OK";
                        t.Result.ResponseCodeDescription = "PayPal Express Payment Authorized Successfully.";
                        return(true);
                    }
                    t.Result.Succeeded = false;
                    t.Result.Messages.Add(new Message("PayPal Express Payment Authorization Failed.", string.Empty,
                                                      MessageType.Error));
                    foreach (var ppError in paymentResponse.Errors)
                    {
                        t.Result.Messages.Add(new Message(ppError.LongMessage, ppError.ErrorCode, MessageType.Error));
                    }
                    return(false);
                }
            }
            catch (Exception ex)
            {
                HandleException(t, ex);
            }

            return(false);
        }
Beispiel #2
0
        public bool OrdersDeleteWithInventoryReturn(string orderBvin, HotcakesApplication app)
        {
            var o = Orders.FindForCurrentStore(orderBvin);

            if (o == null)
            {
                return(true);
            }

            // return items to inventory
            foreach (var li in o.Items)
            {
                // We need to unreserve items instead increase inventory
                app.CatalogServices.InventoryLineItemUnreserveInventory(li);
            }

            return(OrdersDelete(o.bvin, app));
        }
Beispiel #3
0
        public override string FriendlyDescription(HotcakesApplication app)
        {
            var isDiscount = Amount < 0;

            var result = (isDiscount ? "Decrease" : "Increase") + " Product Price by ";

            switch (AdjustmentType)
            {
            case AmountTypes.MonetaryAmount:
                result += Math.Abs(Amount).ToString("c");
                break;

            case AmountTypes.Percent:
                result += (Math.Abs(Amount) / 100m).ToString("p");
                break;
            }
            return(result);
        }
        // Use this VERY carefully
        public bool DestroyAllCustomers(HotcakesApplication app)
        {
            var current        = DateTime.UtcNow;
            var availableUntil = app.CurrentStore.Settings.AllowApiToClearUntil;
            var compareResult  = DateTime.Compare(current, availableUntil);

            if (compareResult >= 0)
            {
                return(false);
            }
            var all = Customers.FindAll();

            foreach (var a in all)
            {
                Customers.Delete(a.Bvin);
            }
            return(true);
        }
Beispiel #5
0
        public object GetCategoryPerformanceData(HttpRequest request, HotcakesApplication hccApp)
        {
            var categoryId = request.Params["categoryId"];
            var period     = (SalesPeriod)Enum.Parse(typeof(SalesPeriod), request.Params["period"]);

            // Update setting only if it is different
            var performanceUserSelections = new PerformanceUserSelections();

            if (performanceUserSelections.CategoriesPerformacePeriod != period)
            {
                performanceUserSelections.CategoriesPerformacePeriod = period;
            }

            var reportingService = Factory.CreateService <ReportingService>();
            var performanceInfo  = reportingService.GetCategoryPerformance(categoryId, period);

            return(new PerformanceInfoJson(performanceInfo, period, Localization));
        }
        public DateTime GetEndDateUtc(HotcakesApplication hccApp)
        {
            DateTime result;

            if (RangeType == DateRangeType.Custom)
            {
                var date = DateTime.Parse(radStartDate.Text.Trim());
                result = date.MaxOutTime();
            }
            else
            {
                _range.RangeType = RangeType;
                _range.CalculateDatesFromType(DateHelper.ConvertUtcToStoreTime(hccApp));
                result = _range.EndDate;
            }

            return(DateHelper.ConvertStoreTimeToUtc(hccApp, result));
        }
Beispiel #7
0
        public DateTime GetEndDateUtc(HotcakesApplication hccApp)
        {
            DateTime result;

            if (RangeType == DateRangeType.Custom)
            {
                var date = radEndDate.SelectedDate;
                result = (date ?? radEndDate.MaxDate).MaxOutTime();
            }
            else
            {
                _range.RangeType = RangeType;
                _range.CalculateDatesFromType(DateHelper.ConvertUtcToStoreTime(hccApp));
                result = _range.EndDate;
            }

            return(DateHelper.ConvertStoreTimeToUtc(hccApp, result));
        }
Beispiel #8
0
        internal static ICartIntegration Create(HotcakesApplication hccApp)
        {
            var settings = hccApp.CurrentStore.Settings.Urls;
            if (!string.IsNullOrEmpty(settings.CartIntegrationAssemblyAndType))
            {
                try
                {
                    var type = Type.GetType(settings.CartIntegrationAssemblyAndType);
                    return (ICartIntegration) Activator.CreateInstance(type);
                }
                catch
                {
                    settings.CartIntegrationAssemblyAndType = string.Empty;
                    hccApp.UpdateCurrentStore();
                }
            }

            return new CartIntegration();
        }
        public static bool DownloadFile(ProductFile file, HotcakesApplication app)
        {
            var    extension = Path.GetExtension(file.FileName);
            var    name      = Path.GetFileName(file.FileName);
            double fileSize  = 0;

            var storeId      = app.CurrentRequestContext.CurrentStore.Id;
            var diskFileName = file.Bvin + "_" + file.FileName + ".config";

            if (!DiskStorage.FileVaultFileExists(storeId, diskFileName))
            {
                return(false);
            }

            var bytes = DiskStorage.FileVaultGetBytes(storeId, diskFileName);

            var type = MimeTypes.FindTypeForExtension(extension);

            fileSize = bytes.Length;

            HttpContext.Current.Response.Clear();
            HttpContext.Current.Response.ClearContent();
            HttpContext.Current.Response.ClearHeaders();

            if (!string.IsNullOrEmpty(type))
            {
                HttpContext.Current.Response.ContentType = type;
            }

            HttpContext.Current.Response.AppendHeader("content-disposition", "attachment; filename=" + name);

            if (fileSize > 0)
            {
                HttpContext.Current.Response.AddHeader("Content-Length", fileSize.ToString());
            }

            HttpContext.Current.Response.BinaryWrite(bytes);
            HttpContext.Current.Response.Flush();
            HttpContext.Current.Response.End();

            return(true);
        }
        public override bool Execute(OrderTaskContext context)
        {
            _app = context.HccApp;

            switch (TaskMode)
            {
            case Mode.OrderStatusChanged:
                HandleOrderStatusChanged(context);
                break;

            case Mode.PaymentChanged:
                HandlePaymentChanged(context);
                break;

            default:
                break;
            }

            return(true);
        }
Beispiel #11
0
        public List <HtmlTemplateTag> DefaultReplacementTags(HccRequestContext context)
        {
            var tags = new List <HtmlTemplateTag>();

            var store             = context.CurrentStore;
            var hccApp            = new HotcakesApplication(context);
            var addressRepository = Factory.CreateRepo <AddressRepository>(context);

            tags.Add(new HtmlTemplateTag("[[Store.Address]]", addressRepository.FindStoreContactAddress().ToHtmlString()));
            tags.Add(new HtmlTemplateTag("[[Store.ContactEmail]]", store.Settings.MailServer.EmailForGeneral));
            tags.Add(new HtmlTemplateTag("[[Store.Logo]]", HtmlRendering.Logo(hccApp, false)));
            tags.Add(new HtmlTemplateTag("[[Store.SecureUrl]]", store.RootUrlSecure()));
            tags.Add(new HtmlTemplateTag("[[Store.StoreName]]", store.Settings.FriendlyName));
            tags.Add(new HtmlTemplateTag("[[Store.RawStoreName]]", store.StoreName));
            tags.Add(new HtmlTemplateTag("[[Store.StandardUrl]]", store.RootUrl()));
            tags.Add(new HtmlTemplateTag("[[Store.CurrentLocalTime]]", DateTime.Now.ToString()));
            tags.Add(new HtmlTemplateTag("[[Store.CurrentUtcTime]]", DateTime.UtcNow.ToString()));

            return(tags);
        }
        public static MenuItem GetByBaseUrl(HotcakesApplication hccApp, string url, int level = 1)
        {
            MenuItem item  = null;
            var      items = GetFilteredMenuItems(hccApp);

            while (level > 0)
            {
                item = items.FirstOrDefault(mi => IsCurrent(mi, url));

                if (item == null)
                {
                    return(null);
                }

                items = item.ChildItems;
                level--;
            }

            return(item);
        }
Beispiel #13
0
        public static string HeaderLinks(HotcakesApplication app, string currentUserId)
        {
            var sb = new StringBuilder();

            var rootUrl       = app.StoreUrl(false, true);
            var rootUrlSecure = app.StoreUrl(true, false);

            sb.Append("<ul>");

            sb.Append("<li><a class=\"myaccountlink\" href=\"" + rootUrlSecure + "account\"><span>");
            sb.Append("My Account");
            sb.Append("</span></a></li>");

            sb.Append("<li><a class=\"signinlink\"");

            if (currentUserId == string.Empty)
            {
                sb.Append(" href=\"" + rootUrlSecure + "SignIn\"><span>");
                sb.Append("Sign In");
            }
            else
            {
                var name = string.Empty;
                var a    = app.MembershipServices.Customers.Find(currentUserId);
                if (a != null)
                {
                    name = a.Email;
                }
                sb.Append(" href=\"" + rootUrlSecure + "SignOut\" title=\"" + HttpUtility.HtmlEncode(name) + "\"><span>");
                sb.Append("Sign Out");
            }
            sb.Append("</span></a></li>");

            sb.Append("<li><a class=\"contactlink\" href=\"" + rootUrl + "Checkout\"><span>");
            sb.Append("Checkout");
            sb.Append("</span></a></li>");

            sb.Append("</ul>");

            return(sb.ToString());
        }
Beispiel #14
0
        /// <summary>
        ///     Set parameter values with provided product object
        /// </summary>
        /// <param name="p">Product information.</param>
        /// <param name="hccApp">An instance of the Hotcakes Application context.</param>
        public SingleProductViewModel(Product p, HotcakesApplication hccApp)
        {
            if (p == null)
            {
                throw new ArgumentNullException("Product");
            }
            if (hccApp == null)
            {
                throw new ArgumentNullException("HotcakesApplication");
            }

            UserPrice = hccApp.PriceProduct(p, hccApp.CurrentCustomer, null, hccApp.CurrentlyActiveSales);
            Item      = p;

            ProductLink          = UrlRewriter.BuildUrlForProduct(p);
            ProductAddToCartLink = UrlRewriter.BuildUrlForProductAddToCart(p);
            ImageUrls            = new ProductImageUrls();
            ImageUrls.LoadProductImageUrls(hccApp, p);

            SwatchDisplay = ImageHelper.GenerateSwatchHtmlForProduct(p, hccApp);
        }
Beispiel #15
0
        private string CreateSku(string sku, HotcakesApplication hccApp)
        {
            // Try 10000 times to append to URL if in use
            var skuInUse = hccApp.CatalogServices.Products.IsSkuExist(sku);
            var baseSku  = sku;

            for (var i = 2; i < 10000; i++)
            {
                if (skuInUse)
                {
                    sku      = string.Concat(baseSku, "-", i.ToString());
                    skuInUse = hccApp.CatalogServices.Products.IsSkuExist(sku);

                    if (!skuInUse)
                    {
                        return(sku);
                    }
                }
            }
            return(string.Empty);
        }
Beispiel #16
0
        private string CreateUrlSlug(string ulrSlug, HotcakesApplication hccApp)
        {
            // Try 10000 times to append to URL if in use
            var rewriteUrlInUse = UrlRewriter.IsProductSlugInUse(ulrSlug, string.Empty, hccApp);
            var baseRewriteUrl  = ulrSlug;

            for (var i = 2; i < 10000; i++)
            {
                if (rewriteUrlInUse)
                {
                    ulrSlug         = string.Concat(baseRewriteUrl, "-", i.ToString());
                    rewriteUrlInUse = UrlRewriter.IsProductSlugInUse(ulrSlug, string.Empty, hccApp);

                    if (!rewriteUrlInUse)
                    {
                        return(ulrSlug);
                    }
                }
            }
            return(string.Empty);
        }
Beispiel #17
0
        public override string FriendlyDescription(HotcakesApplication app)
        {
            var result = "When Item Category Is ";

            if (CategoryNot)
            {
                result += "Not ";
            }
            result += ":<ul>";
            foreach (var bvin in CurrentCategoryIds())
            {
                var c = app.CatalogServices.Categories.Find(bvin);
                if (c != null)
                {
                    result += "<li>" + c.Name + "<br />";
                    result += "<em>" + c.RewriteUrl + "</em></li>";
                }
            }
            result += "</ul>";
            return(result);
        }
        public override string FriendlyDescription(HotcakesApplication app)
        {
            var allTypes = app.CatalogServices.ProductTypes.FindAll();

            allTypes.Insert(0, new Catalog.ProductType {
                Bvin = "0", ProductTypeName = "Generic"
            });

            var result = "When Product Type is" + (IsNotMode ? " not" : string.Empty) + " :<ul>";

            foreach (var bvin in CurrentIds())
            {
                var p = allTypes.Where(y => y.Bvin == bvin).FirstOrDefault();
                if (p != null)
                {
                    result += "<li>" + p.ProductTypeName + "</li>";
                }
            }
            result += "</ul>";
            return(result);
        }
Beispiel #19
0
        public void UpdateGiftCardsStatus(Order o, bool enabled, HotcakesApplication app)
        {
            var payManager = new OrderPaymentManager(o, app);

            foreach (var item in o.Items.Where(i => i.IsGiftCard))
            {
                var cards = app.CatalogServices.GiftCards.FindByLineItem(item.Id);

                foreach (var card in cards)
                {
                    if (enabled)
                    {
                        payManager.GiftCardActivate(card.CardNumber);
                    }
                    else
                    {
                        payManager.GiftCardDeactivate(card.CardNumber);
                    }
                }
            }
        }
        public static void MarkAllToBeShippedOrdersAsComplete(HotcakesApplication app)
        {
            var criteria = new OrderSearchCriteria();

            criteria.IsPlaced   = true;
            criteria.StatusCode = OrderStatusCode.ReadyForShipping;
            var pageSize   = 1000;
            var totalCount = 0;

            var orders = app.OrderServices.Orders.FindByCriteriaPaged(criteria, 1, pageSize, ref totalCount);

            if (orders != null)
            {
                foreach (var os in orders)
                {
                    var o = app.OrderServices.Orders.FindForCurrentStore(os.bvin);
                    o.MoveToNextStatus();
                    app.OrderServices.Orders.Update(o);
                }
            }
        }
Beispiel #21
0
        // Mailing List Send Functions
        public void SendToList(HtmlTemplate t, bool sendAsync, HotcakesApplication app)
        {
            if (t == null)
            {
                return;
            }

            foreach (var m in Members)
            {
                try
                {
                    var copy = t.ReplaceTagsInTemplate(app.CurrentRequestContext, m);
                    var msg  = copy.ConvertToMailMessage(m.EmailAddress);
                    MailServices.SendMail(msg, app.CurrentStore);
                }
                catch (Exception ex)
                {
                    EventLog.LogEvent(ex);
                }
            }
        }
        public void LoadPaymentInfo(HotcakesApplication app)
        {
            var o      = app.OrderServices.Orders.FindForCurrentStore(_li.OrderBvin);
            var payMan = new OrderPaymentManager(o, app);

            var payments = payMan.RecurringPaymentsGetByLineItem(_li.Id);

            TotalPayed = payments.Sum(t => t.Amount);

            var paymentsCount = payments.Count;

            StartsOn = o.TimeOfOrderUtc;
            if (IntervalType == RecurringIntervalType.Days)
            {
                NextPaymentDate = StartsOn.AddDays(Interval * paymentsCount);
            }
            else if (IntervalType == RecurringIntervalType.Months)
            {
                NextPaymentDate = StartsOn.AddMonths(Interval * paymentsCount);
            }
        }
        public override string FriendlyDescription(HotcakesApplication app)
        {
            var result   = string.Empty;
            var products = GetQuantities();

            result = "Receive Free Product<ul>";

            foreach (var bvin in products.Keys)
            {
                var p = app.CatalogServices.Products.FindWithCache(bvin);

                if (p != null)
                {
                    result += string.Format("<li>[{0}]{1} ({2})</li>", p.Sku, p.ProductName, products[bvin]);
                }
            }

            result += "</ul>";

            return(result);
        }
Beispiel #24
0
        public bool Refund(Transaction t, HotcakesApplication app)
        {
            try
            {
                var ppAPI = PaypalExpressUtilities.GetPaypalAPI(app.CurrentStore);

                if (t.PreviousTransactionNumber != null)
                {
                    var refundType = string.Empty;
                    //per paypal's request, the refund type should always be set to partial
                    refundType = "Partial";
                    var refundResponse = ppAPI.RefundTransaction(
                        t.PreviousTransactionNumber,
                        refundType,
                        t.Amount.ToString("N", CultureInfo.InvariantCulture),
                        PayPalAPI.GetCurrencyCodeType(app.CurrentStore.Settings.PayPal.Currency));
                    if (refundResponse.Ack == AckCodeType.Success ||
                        refundResponse.Ack == AckCodeType.SuccessWithWarning)
                    {
                        t.Result.Succeeded = true;
                        t.Result.Messages.Add(new Message("PayPal Express Payment Refunded Successfully.", "OK",
                                                          MessageType.Information));
                        return(true);
                    }
                    t.Result.Succeeded = false;
                    t.Result.Messages.Add(new Message("Paypal Express Payment Refund Failed.", string.Empty,
                                                      MessageType.Error));
                    foreach (var ppError in refundResponse.Errors)
                    {
                        t.Result.Messages.Add(new Message(ppError.LongMessage, ppError.ErrorCode, MessageType.Error));
                    }
                    return(false);
                }
            }
            catch (Exception ex)
            {
                HandleException(t, ex);
            }
            return(false);
        }
        protected override object HandleAction(HttpRequest request, HotcakesApplication hccApp)
        {
            if (request.RequestContext.HttpContext.User.Identity.IsAuthenticated == false)
            {
                // not found
                request.RequestContext.HttpContext.Response.StatusCode = 404;
                request.RequestContext.HttpContext.Response.End();
                return(null);
            }

            var method = request.Params["method"];

            switch (method)
            {
            case "Slugify":
                return(Slugify(request, hccApp));

            case "ResortAdditionalImages":
                return(ResortAdditionalImages(request, hccApp));

            case "ResortRelatedProducts":
                return(ResortRelatedProducts(request, hccApp));

            case "ResortBundledProducts":
                return(ResortBundledProducts(request, hccApp));

            case "ResortProductPropertyChoices":
                return(ResortProductPropertyChoices(request, hccApp));

            case "ResortProductProperties":
                return(ResortProductProperties(request, hccApp));

            case "ResortChoiceItems":
                return(ResortChoiceItems(request, hccApp));

            default:
                break;
            }
            return(true);
        }
Beispiel #26
0
        public bool OrdersDelete(string orderBvin, HotcakesApplication app)
        {
            var o = Orders.FindForCurrentStore(orderBvin);

            if (o == null)
            {
                return(true);
            }


            var currentProvider = TaxProviders.CurrentTaxProvider(app.CurrentStore);

            if (currentProvider != null)
            {
                currentProvider.CancelTaxDocument(o, app.CurrentRequestContext);
            }

            // Disables all giftcards associated with order
            UpdateGiftCardsStatus(o, false, app);

            return(Orders.Delete(o.bvin));
        }
Beispiel #27
0
        protected override object HandleAction(HttpContext context, HotcakesApplication hccApp)
        {
            if (context.User.Identity.IsAuthenticated == false)
            {
                // not found
                context.Response.StatusCode = 404;
                context.Response.End();
                return(null);
            }

            var method = context.Request.Params["method"];

            switch (method)
            {
            case "GetImportProgress":
                return(GetImportProgress(context, hccApp));

            default:
                break;
            }
            return(true);
        }
        public void Register301(string requestedUrl, string redirectUrl, string objectId, CustomUrlType customUrlType,
                                HccRequestContext context, HotcakesApplication app)
        {
            var AlreadyInUse = UrlRewriter.IsUrlInUse(requestedUrl, string.Empty, context, app);

            if (AlreadyInUse)
            {
                return;
            }
            var customUrl = new CustomUrl
            {
                IsPermanentRedirect = true,
                RedirectToUrl       = redirectUrl,
                RequestedUrl        = requestedUrl,
                StoreId             = app.CurrentRequestContext.CurrentStore.Id,
                SystemData          = objectId,
                SystemDataType      = customUrlType
            };

            Create(customUrl);
            UpdateAllUrlsForObject(objectId, redirectUrl);
        }
Beispiel #29
0
        protected override object HandleAction(HttpRequest request, HotcakesApplication hccApp)
        {
            if (request.RequestContext.HttpContext.User.Identity.IsAuthenticated == false)
            {
                // not found
                request.RequestContext.HttpContext.Response.StatusCode = 404;
                request.RequestContext.HttpContext.Response.End();
                return(null);
            }

            var method = request.Params["method"];

            switch (method)
            {
            case "ResortPromotions":
                return(ResortPromotions(request, hccApp));

            default:
                break;
            }
            return(true);
        }
        public static void CollectPaymentAndShipPendingOrders(HotcakesApplication app)
        {
            var criteria = new OrderSearchCriteria();

            criteria.IsPlaced   = true;
            criteria.StatusCode = OrderStatusCode.ReadyForPayment;
            var pageSize   = 1000;
            var totalCount = 0;

            var orders = app.OrderServices.Orders.FindByCriteriaPaged(criteria, 1, pageSize, ref totalCount);

            if (orders != null)
            {
                foreach (var os in orders)
                {
                    var o          = app.OrderServices.Orders.FindForCurrentStore(os.bvin);
                    var payManager = new OrderPaymentManager(o, app);
                    payManager.GiftCardCompleteAllGiftCards();
                    payManager.CreditCardCompleteAllCreditCards();
                    payManager.PayPalExpressCompleteAllPayments();
                    if (o.PaymentStatus == OrderPaymentStatus.Paid ||
                        o.PaymentStatus == OrderPaymentStatus.Overpaid)
                    {
                        if (o.ShippingStatus == OrderShippingStatus.FullyShipped)
                        {
                            o.StatusCode = OrderStatusCode.Completed;
                            o.StatusName = "Completed";
                        }
                        else
                        {
                            o.StatusCode = OrderStatusCode.ReadyForShipping;
                            o.StatusName = "Ready for Shipping";
                        }
                        app.OrderServices.Orders.Update(o);
                    }
                }
            }
        }