public void BuildingWithNoOrderNullSelectedRibbon()
        {
            PropertyPromoteInputModel model = new PropertyPromoteInputModel(building, featured);

            Assert.IsNull(model.SelectedRibbonId);
            Assert.IsNull(model.SelectedRibbonName);
        }
        public void ToBuildingBasicInformation()
        {
            PropertyPromoteInputModel model = new PropertyPromoteInputModel(building, featured);
            var b = model.ToBuilding();

            Assert.AreEqual(b.Title, this.building.Title);
            Assert.AreEqual(b.BuildingId, this.building.BuildingId);
            Assert.AreEqual(b.Description, this.building.Description);
        }
示例#3
0
        public ActionResult Promote(PropertyPromoteInputModel input)
        {
            if (ModelState.IsValid)
            {
                // rebuild building
                Building building = input.ToBuilding();

                if (input.SelectedRibbonId.ToLower() == "none")
                {
                    input.SelectedRibbonId = null;
                }

                var status = this.propertyAdapter.UpdatePropertyPromotions(
                    User.Identity.Name, building, input.SelectedRibbonId, input.FeaturedDates);

                if (status.StatusCode == 200)
                {
                    // see if user selected a ribbon or requested to feature their property (coming soon)
                    if (status.Result.TemporaryOrder == null)
                    {
                        return(Redirect("/listing/index/" + input.BuildingId));
                    }
                    else
                    {
                        return(Redirect("/dashboard/order/checkout/" + status.Result.TemporaryOrderId));
                    }
                }

                HandleErrors(status);
            }

            var buildingVal = this.propertyAdapter.GetProperty(input.BuildingId, User.Identity.Name);

            if (buildingVal.StatusCode != 200)
            {
                return(HttpNotFound());
            }

            // reset model properties not persisted
            input.PrimaryPhotoId        = buildingVal.Result.PrimaryPhotoId;
            input.PrimaryPhotoExtension = buildingVal.Result.PrimaryPhotoExtension;

            input.CalendarDates = new CalendarDatesModel();
            // TODO: also need to restore blackout and featured dates too
            input.CalendarDates.ReservedDates =
                input.FeaturedDates.Select(d => d.ToString("G")).ToArray();

            PropertyPromoteModel model = new PropertyPromoteModel()
            {
                Input          = input,
                StepsAvailable = GetStepsAvailable(buildingVal.Result)
            };

            // return the model back with model state errors
            return(View(model));
        }
        public void BuildingWithOrderSelectedRibbonId()
        {
            // add a temporary order
            Order     order      = new Order();
            string    ribbonType = Rentler.Configuration.Ribbons.Current.AvailableRibbons.First().Key;
            OrderItem item       = Rentler.Configuration.Products.GetProduct("ribbon").ToOrderItem(ribbonType, 1);

            order.OrderItems = new List <OrderItem>();
            order.OrderItems.Add(item);
            building.TemporaryOrder = order;

            // test
            PropertyPromoteInputModel model = new PropertyPromoteInputModel(building, featured);

            Assert.AreEqual(item.ProductOption, model.SelectedRibbonId);
        }
示例#5
0
        public ActionResult Promote(PropertyPromoteInputModel input)
        {
            if (ModelState.IsValid)
            {
                // rebuild building
                Building building = input.ToBuilding();

                if (string.IsNullOrWhiteSpace(input.SelectedRibbonId) || input.SelectedRibbonId.ToLower() == "none")
                {
                    input.SelectedRibbonId = null;
                }

                var status = this.propertyAdapter.UpdatePropertyPromotions(
                    User.Identity.Name,
                    building,
                    input.SelectedRibbonId,
                    input.FeaturedDates,
                    input.ListingHasPriority ? "prioritylisting" : string.Empty
                    );

                if (status.StatusCode == 200)
                {
                    // see if user selected a ribbon or requested to feature their property (coming soon)
                    if (status.Result.TemporaryOrder == null)
                    {
                        this.propertyAdapter.ActivateBuilding(building.BuildingId, User.Identity.Name);

                        return(RedirectToAction("complete", new { id = input.BuildingId }));
                    }
                    else
                    {
                        return(Redirect("/order/checkout/" + status.Result.TemporaryOrderId));
                    }
                }

                HandleErrors(status);
            }

            var buildingVal = this.propertyAdapter.GetProperty(input.BuildingId, User.Identity.Name);

            if (buildingVal.StatusCode != 200)
            {
                return(this.NotFoundException());
            }

            // reset model properties not persisted
            input.PrimaryPhotoId        = buildingVal.Result.PrimaryPhotoId;
            input.PrimaryPhotoExtension = buildingVal.Result.PrimaryPhotoExtension;

            input.CalendarDates = new CalendarDatesModel();
            // TODO: also need to restore blackout and featured dates too

            if (input.CalendarDates.ReservedDates.Any())
            {
                input.CalendarDates.ReservedDates =
                    input.FeaturedDates.Select(d => d.ToString("G")).ToArray();
            }
            else
            {
                input.CalendarDates.ReservedDates = new string[] { }
            };

            PropertyPromoteModel model = new PropertyPromoteModel()
            {
                Input          = input,
                StepsAvailable = GetStepsAvailable(buildingVal.Result)
            };

            // return the model back with model state errors
            return(View(model));
        }