Beispiel #1
0
        public virtual ActionResult ChildCategoryAttributes([Bind(Prefix = "ThreadForm.AttributeValues")]  AttributeValueModel[] attributeValues, int attributeId)
        {
            var helper = new CategoryAttributeHelper();
            var categoryAttributeValues = helper.GetCategoryAttributeValues(attributeValues != null ? attributeValues.Where(cv => cv.AttributeId == attributeId) : new AttributeValueModel[0]);
            var allSubAttributes = categoryAttributeValues.SelectMany(cav => cav.Attribute.ChildAttributes);
            var selectedSubAttributes = allSubAttributes.Where(sa => categoryAttributeValues.Any(cav => cav.SelectedOptions.Intersect(sa.ParentOptions).Any()));

            var model = new CategoryAttributesThreadFormModel
                            {
                                CategoryAttributes = selectedSubAttributes.ToList(),
                                CategoryAttributeValues = attributeValues
                            };

            return PartialView(MVC.Thread.Views._CategoryAttributes, model);
        }
Beispiel #2
0
        public virtual ActionResult ChildCategoryAttributes(
            [Bind(Prefix = "AttributeValues")] AttributeValueModel[] attributeValues, int attributeId)
        {
            var helper = new CategoryAttributeHelper();
            var categoryAttributeValues =
                helper.GetCategoryAttributeValues(attributeValues.Where(cv => cv.AttributeId == attributeId));
            var allSubAttributes = categoryAttributeValues.SelectMany(cav => cav.Attribute.ChildAttributes);
            var selectedSubAttributes =
                allSubAttributes.Where(
                    sa => categoryAttributeValues.Any(cav => cav.SelectedOptions.Intersect(sa.ParentOptions).Any()));

            var attributes =
                selectedSubAttributes.Where(
                    ca => ca.Type == CategoryAttributeType.MultiSelect || ca.Type == CategoryAttributeType.SingleSelect)
                    .ToList();

            var model = new KeywordProcessFormModel
                            {CategoryAttributes = attributes, CategoryAttributeValues = attributeValues};

            return PartialView(MVC.Catalog.Views._KeywordCategoryAttributes, model);
        }
Beispiel #3
0
        private int GetBestExpertId(ThreadForm form)
        {
            var categoryAttributes = new CategoryAttributeHelper().GetCategoryAttributeValues(form.AttributeValues).ToList();
            var experts = Repository.Expert.FindClosestMatches(form.CategoryId.Value, categoryAttributes, 10);

            var bestExpert = experts.First();
            var bestMatch = Repository.Expert.GetMatch(bestExpert, form.CategoryId.Value, categoryAttributes);

            var activeExpertsIds = ActiveUsersHelper.GetActivePublicExpertsIds(form.CategoryId);
            var bestActiveExpert = experts.FirstOrDefault(e => activeExpertsIds.Contains(e.Id));
            if (bestActiveExpert == null)
                return bestExpert.Id;

            var bestActiveMatch = Repository.Expert.GetMatch(bestActiveExpert, form.CategoryId.Value, categoryAttributes);

            return (double) bestActiveMatch/bestMatch > 0.8 ? bestActiveExpert.Id : bestExpert.Id;
        }
Beispiel #4
0
        private void SetValue(ThreadForm model)
        {
            var baseValue = Repository.Category.GetValue(model.CategoryId.Value, ThreadPriority.Medium, model.Verbosity);

            var categoryAttributes = new CategoryAttributeHelper().GetCategoryAttributeValues(model.AttributeValues).ToList();
            var priceModifier = 1 + categoryAttributes.Sum(ca => ca.SelectedOptions.Sum(o => o.PriceModifier));

            model.Value = Math.Round(baseValue*priceModifier, 0);
        }
Beispiel #5
0
        public virtual ActionResult Save(ThreadForm form)
        {
            ThreadMemoryHelper.PopRememberedThread();

            if (!ModelState.IsValid)
            {
                
                Log.Info(GetType(),"Thread Save Validation Failed with errors: {0}",string.Join(";",ModelState.SelectMany(keyValuePair => keyValuePair.Value.Errors).Select(x => x.ErrorMessage)));
                return View(MVC.Thread.Views.Options, form);
            }

            var thread = Mapper.Map<Thread>(form);

            var helper = new CategoryAttributeHelper();
            var categoryAttributes = helper.GetCategoryAttributeValues(form.AttributeValues).ToList();
            foreach (var categoryAttributeValue in categoryAttributes)
                thread.CategoryAttributes.Add(categoryAttributeValue);

            thread.Author = AuthenticationHelper.CurrentUser;
            thread.Category = Repository.Category.Get(form.CategoryId.Value);

            if (form.CustomValue == null)
                thread.Value = Repository.Category.GetValue(form.CategoryId.Value, ThreadPriority.Medium, form.Verbosity);

            thread.Posts.First().Author = AuthenticationHelper.CurrentUser;
            thread.Posts.First().Type = PostType.Question;

            var brokerId = BrokerHelper.GetBrokerIdFromCookie();
            if (brokerId != null)
                thread.Broker = Repository.User.Get(brokerId.Value);

            Repository.Thread.Add(thread);
            
            if (form.DirectQuestionExpertId != null) { DirectQuestion(form.DirectQuestionExpertId.Value, thread.Id); }

            if (form.CustomValue != null) { EventLog.Event<UserDefinedPriceEvent>(thread); }

            form.PaymentForm.RelatedId = thread.Id;

            var attachmentsDirPath = HttpContext.Server.MapPath("~/Attachments/");
            if (Directory.Exists(attachmentsDirPath + form.TemporaryAttachmentFolder)) { MoveAttachmentsFromTemporaryFolder(form.TemporaryAttachmentFolder, thread.Id); }

            var provisionData = "\r\n" + "Prowizja eksperta: " + thread.ExpertProvision.ToString() + 
                "\r\n" + "Prowizja brokera: " + thread.BrokerProvision.ToString();
            EventLog.Event<NewThreadEvent>(thread, provisionData);

            var model = form.PaymentForm.PreparePayment(Url);

            if (model.ImmediateRedirectActionResult != null)
                return RedirectToAction(model.ImmediateRedirectActionResult);

            return View(MVC.Payment.Views.PaymentRedirect, model);
        }
Beispiel #6
0
        private ActionResult GetChildCategoryAttributesActionResult(AttributeValueModel[] attributeValues, int attributeId)
        {
            var helper = new CategoryAttributeHelper();
            var categoryAttributeValues = helper.GetCategoryAttributeValues(attributeValues.Where(cv => cv.AttributeId == attributeId), true);
            var allSubAttributes = categoryAttributeValues.SelectMany(cav => cav.Attribute.ChildAttributes);
            var selectedSubAttributes = allSubAttributes.Where(sa => categoryAttributeValues.Any(cav => cav.SelectedOptions.Intersect(sa.ParentOptions).Any()));

            var attributes = selectedSubAttributes.Where(ca => ca.Type == CategoryAttributeType.MultiSelect || ca.Type == CategoryAttributeType.SingleSelect).ToList();

            var model = new ExpertCategoryAttributesModel
            {
                CategoryAttributes = attributes,
                CategoryAttributeValues = attributeValues
            };

            return PartialView(MVC.Account.Views._ExpertCategoryAttributes, model);
        }
Beispiel #7
0
        public virtual ActionResult ExpertCategoryAttributes(int categoryId, IEnumerable<AttributeValueModel> attributeValues, string expertReason)
        {
            var currentExpert = AuthenticationHelper.CurrentUser.Expert;

            var helper = new CategoryAttributeHelper();
            var category = Repository.Category.Get(categoryId);
            var categoryAttributeValues = new ExpertCategoryAttributeValues { Category = category };

            categoryAttributeValues.CategoryAttributes.AddRange(helper.GetCategoryAttributeValues(attributeValues, true));
            categoryAttributeValues.ExpertReason = expertReason;
            
            var currentCategoryAttributeValues = currentExpert.CategoryAttributes.SingleOrDefault(c => c.Category.Id == categoryId);

            if (currentCategoryAttributeValues != null)
               currentExpert.CategoryAttributes.Remove(currentCategoryAttributeValues);

            currentExpert.CategoryAttributes.Add(categoryAttributeValues);
            Repository.Expert.Update(currentExpert);

            EventLog.ExpertQualificationChangedEvent(currentExpert.User, string.Format(Resources.Account.ExpertCategoryAttributesChanged, category.Name));

            return RedirectToAction(currentExpert.CategoryAttributes.Count < currentExpert.Categories.Count ? MVC.Account.ExpertCategoryAttributes() : MVC.Profile.Edit());
        }
Beispiel #8
0
        public virtual ActionResult StoreKeyword([Bind(Prefix = "KeywordProcessForm")] KeywordProcessForm form)
        {
            var keyword = Repository.SEOKeyword.Get(form.SeoKeywordId);
            var category = Repository.Category.Get(form.CategoryId);

            keyword.Status = SEOKeywordStatus.Processed;
            keyword.Type = form.SeoKeywordType;
            keyword.Category = category;
            keyword.Phrase = form.SeoKeywordPhrase;

            var helper = new CategoryAttributeHelper();
            keyword.CategoryAttributes.Clear();
            keyword.CategoryAttributes.AddRange(helper.GetCategoryAttributeValues(form.AttributeValues));

            Repository.SEOKeyword.Update(keyword);

            Flash.Success(string.Format(Resources.Catalog.LandingPageCreated, keyword.Phrase));

            return RedirectToAction(MVC.Catalog.ProcessKeyword());
        }