Exemple #1
0
        public HttpStatusCodeResult LaunchCampaign(LaunchCampaignData data)
        {
            CurrencyRecord currencyRecod = null;

            if (data.Currency.HasValue)
            {
                currencyRecod = _currencyRepository.Table.FirstOrDefault(aa => aa.Id == data.Currency.Value);
            }
            else
            {
                currencyRecod = _currencyRepository.Table.FirstOrDefault(aa => aa.Code == "USD");
            }
            if (currencyRecod == null)
            {
                _currencyRepository.Table.FirstOrDefault(aa => aa.Code == "USD");
            }


            if (string.IsNullOrWhiteSpace(data.CampaignTitle) && string.IsNullOrWhiteSpace(data.Description) &&
                string.IsNullOrWhiteSpace(data.Alias))
            {
                var error = "name|" + T("Campaign Title can't be empty") + "|campaign_description_text|" +
                            T("Campaign Description can't be empty") + "|url|" +
                            T("Campaign URL can't be empty");
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, error));
            }

            if (string.IsNullOrWhiteSpace(data.CampaignTitle) && string.IsNullOrWhiteSpace(data.Description))
            {
                var error = "name|" + T("Campaign Title can't be empty") + "|campaign_description_text|" +
                            T("Campaign Description can't be empty");
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, error));
            }

            if (string.IsNullOrWhiteSpace(data.CampaignTitle) && string.IsNullOrWhiteSpace(data.Alias))
            {
                var error = "name|" + T("Campaign Title can't be empty") + "|url|" +
                            T("Campaign URL can't be empty");
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, error));
            }

            if (string.IsNullOrWhiteSpace(data.Description) && string.IsNullOrWhiteSpace(data.Alias))
            {
                var error = "campaign_description_text|" + T("Campaign Description can't be empty") +
                            "|url|" + T("Campaign URL can't be empty");
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, error));
            }

            if (string.IsNullOrWhiteSpace(data.CampaignTitle))
            {
                var error = "name|" + T("Campaign Title can't be empty");
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, error));
            }

            if (string.IsNullOrWhiteSpace(data.Description))
            {
                var error = "campaign_description_text|" + T("Campaign Description can't be empty");
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, error));
            }

            if (string.IsNullOrWhiteSpace(data.Alias))
            {
                var error = "url|" + T("Campaign URL can't be empty");
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, error));
            }

            data.Alias = data.Alias.Trim();

            if (data.Alias.Any(ch => char.IsWhiteSpace(ch)))
            {
                var error = "url|" + T("Campaign URL can't contain whitespaces");
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, error));
            }

            if (data.Alias.Contains('&') || data.Alias.Contains('?') || data.Alias.Contains('/') ||
                data.Alias.Contains('\\'))
            {
                var error = "url|" + T("Campaign URL has wrong format");
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, error));
            }

            if (_campaignService.GetCampaignByAlias(data.Alias) != null)
            {
                var error = "url|" + T("Campaign with this URL already exists");
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, error));
            }
            if (data.Alias.Length < 4)
            {
                var error = "url|" + T("Campaign URL must be at least 4 characters long");
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, error));
            }

            if (string.IsNullOrWhiteSpace(data.Design))
            {
                var error = "Design|" + T("No design found for your campaign");
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, error));
            }

            if (_orchardServices.WorkContext.CurrentUser == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Forbidden));
            }

            var campaignCurrency = _currencyRepository.Get(data.CampaignCurrencyId);

            //if (campaignCurrency != _priceConversionService.CurrentUserCurrency)
            //{
            //    var error = T("Campaign currency is not the same as user currency").ToString();
            //    return new HttpStatusCodeResult(HttpStatusCode.BadRequest, error);
            //}

            try
            {
                foreach (var prod in data.Products)
                {
                    double price;
                    if (!double.TryParse(prod.Price, out price))
                    {
                        double.TryParse(prod.Price.Replace('.', ','), out price);
                    }
                    double cost;
                    if (!double.TryParse(prod.BaseCost, out cost))
                    {
                        double.TryParse(prod.BaseCost.Replace('.', ','), out cost);
                    }

                    if (price < cost)
                    {
                        prod.Price = prod.BaseCost;
                    }
                }

                data.CampaignCulture = _cultureUsed;
                ////TODO: (auth:keinlekan) После удаления поля в таблице/моделе - удалить данный код

                var campaign = _campaignService.CreateNewCampiagn(data);

                CreateImagesForCampaignProducts(campaign);
                var pathToTemplates = Server.MapPath("/Modules/Teeyoot.Module/Content/message-templates/");
                var pathToMedia     = Request.Url.Scheme + "://" + Request.Url.Authority +
                                      Request.ApplicationPath.TrimEnd('/');
                _teeyootMessagingService.SendNewCampaignAdminMessage(pathToTemplates, pathToMedia, campaign.Id);


                ////TODO: add conditional here to allow admin to set setting for it, is campaign is auto-approved or not.
                Approve(campaign.Id);

                return(new HttpStatusCodeResult(HttpStatusCode.OK));
            }
            catch (Exception e)
            {
                Logger.Log(LogLevel.Error, e, "", null);
                Logger.Error("Error occured when trying to create new campaign ---------------> " + e);
                return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError,
                                                T("Error occured when trying to create new campaign").ToString()));
            }
        }