Exemplo n.º 1
0
        public SpamAdRequestModel SpamRequestAd(SpamAdRequestModel model)
        {
            SpamAdRequestModel result = CanSpamRequestAd(model.AdId);

            if (!result.CanSignal)
            {
                return(result);
            }

            BaseAd ad = _adRepository.GetAdById <BaseAd>(model.AdId);

            this.CanSpamRequestAd(model.AdId);

            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))
            {
                SpamAdRequest req = new SpamAdRequest();
                req.Ad                    = ad;
                req.RequestDate           = _helper.GetCurrentDateTime();
                req.RequestorEmailAddress = model.RequestorEmail;
                req.SpamType              = _repository.Get <SpamAdType>(model.SelectedSpamAdTypeId);
                req.Description           = model.Description;

                _repository.Save(req);
                scope.Complete();
            }

            result.InfoMessage = "Votre signalement a correctement été transmis. Merci de votre précieuse aide dans la chasse aux mauvaises annonces !";
            result.CanSignal   = false;

            return(result);
        }
Exemplo n.º 2
0
        public AdCreateModel(BaseAd ad)
            : this()
        {
            Body    = ad.Body;
            IsOffer = ad.IsOffer;
            Price   = ad.Price;

            if (ad.Category != null)
            {
                SelectedCategoryId = ad.Category.Id;
            }

            if (ad.City != null)
            {
                SelectedCityId     = ad.City.Id;
                SelectedProvinceId = ad.City.Province.Id;
            }

            Telephone = ad.PhoneNumber;
            Title     = ad.Title;

            if (ad.CreatedBy != null)
            {
                Email = ad.CreatedBy.Email;
                Name  = ad.CreatedBy.Firstname;
            }

            // Create the ImageIds list based on the images of the Ad
            StringBuilder sb = new StringBuilder();

            ad.Images.ToList().ForEach(x => sb.AppendFormat("{0};", x.Id.ToString()));
            ImageIds = sb.ToString();
        }
Exemplo n.º 3
0
        public void GetAdPicturesFromModel_2Pictures_FetchThemFromRepoAndSetFirstAsMainImage()
        {
            // Given
            BaseAd ad     = new Ad();
            String images = "b9da8b1e-aa77-401b-84e0-a1290130b7b7;b9da8b1e-aa77-401b-84e0-a1290130b999;";

            AdImage img1 = new AdImage()
            {
                Id = Guid.Parse("b9da8b1e-aa77-401b-84e0-a1290130b7b7")
            };
            AdImage img2 = new AdImage()
            {
                Id = Guid.Parse("b9da8b1e-aa77-401b-84e0-a1290130b999")
            };

            var repoMock = new Moq.Mock <IRepository>();

            repoMock.Setup(x => x.Get <AdImage>(Guid.Parse("b9da8b1e-aa77-401b-84e0-a1290130b7b7"))).Returns(img1);
            repoMock.Setup(x => x.Get <AdImage>(Guid.Parse("b9da8b1e-aa77-401b-84e0-a1290130b999"))).Returns(img2);

            AdServices service = new AdServices(null, repoMock.Object, null);

            // When
            BaseAd result = service.GetAdPicturesFromModel(ad, images);

            // Then
            Assert.AreEqual(ad, result);
            Assert.AreEqual(2, ad.Images.Count);
            Assert.AreEqual("b9da8b1e-aa77-401b-84e0-a1290130b7b7", ad.Images[0].Id.ToString());
            Assert.AreEqual(ad, ad.Images[0].BaseAd);
            Assert.IsTrue(ad.Images[0].IsPrimary);
            Assert.AreEqual("b9da8b1e-aa77-401b-84e0-a1290130b999", ad.Images[1].Id.ToString());
            Assert.AreEqual(ad, ad.Images[1].BaseAd);
            Assert.IsFalse(ad.Images[1].IsPrimary);
        }
Exemplo n.º 4
0
        public BaseAd GetAdFromAdCreateModel(AdvancedAdCreateModel model)
        {
            BaseAd   baseAd           = null;
            Category selectedCategory = null;

            //Should not happened, category is mandatory
            if (!model.SelectedCategoryId.HasValue)
            {
                return(baseAd);
            }
            else
            {
                selectedCategory = _repository.Get <Category>(model.SelectedCategoryId);
            }
            switch (selectedCategory.Type)
            {
            case AdTypeEnum.Ad:
                baseAd = GetAdFromCreateModel <Ad>(baseAd, model);
                break;

            case AdTypeEnum.CarAd:
                baseAd = GetAdFromCreateModel <CarAd>(baseAd, model);
                break;

            case AdTypeEnum.RealEstateAd:
                baseAd = GetAdFromCreateModel <RealEstateAd>(baseAd, model);
                break;

            case AdTypeEnum.MotoAd:
                baseAd = GetAdFromCreateModel <MotoAd>(baseAd, model);
                break;

            case AdTypeEnum.OtherVehiculeAd:
                baseAd = GetAdFromCreateModel <OtherVehicleAd>(baseAd, model);
                break;

            case AdTypeEnum.VehiculeAd:
                baseAd = GetAdFromCreateModel <VehicleAd>(baseAd, model);
                break;

            case AdTypeEnum.MotorBoatAd:
                baseAd = GetAdFromCreateModel <MotorBoatAd>(baseAd, model);
                break;

            case AdTypeEnum.MotorBoatEngineAd:
                baseAd = GetAdFromCreateModel <MotorBoatEngineAd>(baseAd, model);
                break;

            case AdTypeEnum.SailingBoatAd:
                baseAd = GetAdFromCreateModel <SailingBoatAd>(baseAd, model);
                break;
            }
            return(baseAd);
        }
Exemplo n.º 5
0
 public void AddAd(BaseAd ad)
 {
     using (TransactionScope scope = new TransactionScope())
     {
         _repository.Save(ad.CreatedBy);
         _repository.Save(ad.City);
         _repository.Save(ad);
         _repository.Flush();
         _adActivationServices.SendActivationEmail(ad);
         scope.Complete();
     }
 }
Exemplo n.º 6
0
 public SearchAdCache(BaseAd ad)
 {
     AdId         = ad.Id;
     Title        = ad.Title;
     Body         = ad.Body;
     Province     = ad.City.Province;
     City         = ad.City;
     Category     = ad.Category;
     Price        = ad.Price;
     CreationDate = ad.CreationDate;
     AdType       = ad.Category.Type;
     AdImageId    = ad.Images.Where(x => x.IsPrimary).Select(x => x.Id.ToString()).SingleOrDefault();
 }
Exemplo n.º 7
0
        public void SendActivationEmail(BaseAd ad)
        {
            IDictionary <String, String> data = new Dictionary <String, String>();

            data.Add("name", ad.CreatedBy.Firstname);
            data.Add("title", ad.Title);
            data.Add("id", ad.Id.ToString());
            data.Add("activationToken", ad.ActivationToken);
            data.Add("websiteAddress", _appSettingsProvider.WebsiteAddress);
            data.Add("websiteName", _appSettingsProvider.WebsiteName);

            String subject = String.Format("BEA Activez votre annonce \"{0}\"", ad.Title);
            String body    = _templatingService.GetTemplatedDocument("ActivationEmail.vm", data);

            _emailService.SendEmail(subject, body, ad.CreatedBy.Email, "*****@*****.**");
        }
Exemplo n.º 8
0
        public void GetAdPicturesFromModel_NoPictures_ReturnAdWithoutPictures()
        {
            // Given
            BaseAd ad     = new Ad();
            String images = null;

            AdServices service = new AdServices(null, null, null);

            // When

            BaseAd result = service.GetAdPicturesFromModel(ad, images);

            // Then
            Assert.AreEqual(ad, result);
            Assert.AreEqual(0, ad.Images.Count);
        }
Exemplo n.º 9
0
        public DeleteAdModel DeleteAd(DeleteAdModel model)
        {
            DeleteAdModel result = new DeleteAdModel();

            result.AdId = model.AdId;

            BaseAd ad = _adRepository.GetAdById <BaseAd>(model.AdId);

            if (ad == null || ad.IsDeleted)
            {
                result.InfoMessage = "Cette annonce n'existe pas ou plus.";
                result.CanDeleteAd = false;
                return(result);
            }

            if (model.Password != ad.CreatedBy.Password)
            {
                result.NbTry = ++model.NbTry;
                result.SelectedDeletionReasonId = model.SelectedDeletionReasonId;
                result.CanDeleteAd = true;
                return(result);
            }

            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))
            {
                ad.IsDeleted    = true;
                ad.DeletionDate = _helper.GetCurrentDateTime();
                if (model.SelectedDeletionReasonId.HasValue)
                {
                    ad.DeletedReason = _repository.Get <DeletionReason>(model.SelectedDeletionReasonId);
                }
                _repository.Save <BaseAd>(ad);

                SearchAdCache adCache = _repository.Get <SearchAdCache>(ad.Id);
                if (adCache != null)
                {
                    _repository.Delete <SearchAdCache>(adCache);
                }

                result.IsDeleted   = true;
                result.InfoMessage = "Votre annonce a correctement été supprimée. Elle n'est plus disponible à la recherche.";

                scope.Complete();
            }

            return(result);
        }
Exemplo n.º 10
0
        public AdActivationResultModel ActivateAd(long adId, String activationToken)
        {
            AdActivationResultModel model = new AdActivationResultModel();

            model.AdId = adId;

            BaseAd adToValidate = _repository.Get <BaseAd>(adId);

            if (adToValidate == null)
            {
                model.InfoMessage = "Cette annonce n'existe pas ou a expiré.";
                model.IsActivated = false;
                return(model);
            }

            if (adToValidate.IsActivated)
            {
                model.InfoMessage = "Cette annonce a déjà été activée.";
                model.IsActivated = true;
                return(model);
            }

            if (!adToValidate.ActivationToken.Equals(activationToken))
            {
                model.InfoMessage = "Vous ne pouvez pas activer cette annonce.";
                model.IsActivated = false;
                return(model);
            }

            // Actually activate the ad
            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew))
            {
                adToValidate.IsActivated = true;
                _repository.Save(adToValidate);
                SearchAdCache searchAdCache = new SearchAdCache(adToValidate);
                _repository.Save(searchAdCache);
                _repository.Flush();
                scope.Complete();
            }

            model.InfoMessage = "Merci d'avoir activé votre annonce.";
            model.IsActivated = true;

            return(model);
        }
Exemplo n.º 11
0
        public BaseAd GetAdPicturesFromModel(BaseAd ad, String imageIds)
        {
            if (String.IsNullOrEmpty(imageIds))
            {
                return(ad);
            }

            bool first = true;

            foreach (String imageId in imageIds.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries))
            {
                AdImage image = _repository.Get <AdImage>(Guid.Parse(imageId));
                if (first)
                {
                    image.IsPrimary = true;
                    first           = false;
                }
                ad.AddImage(image);
            }
            return(ad);
        }
Exemplo n.º 12
0
        public ActionResult Create(AdvancedAdCreateModel model)
        {
            IDictionary <string, string> errors = _adConsistencyServices.GetAdDataConsistencyErrors(model);

            foreach (string key in errors.Keys)
            {
                ModelState.AddModelError(key, errors[key]);
            }

            // This line validates the captcha code and creates a ModelError if not valid
            this.IsCaptchaValid("Code invalide");

            if (ModelState.IsValid)
            {
                BaseAd newAd = _adServices.GetAdFromAdCreateModel(model);
                _adServices.AddAd(newAd);
                return(View("Created"));
            }

            FillViewLists(model.Type);
            return(View(model));
        }
Exemplo n.º 13
0
        public void ActivateAd_AdDoesNotExist_ReturnModelIsActivatedFalse()
        {
            // Given
            BaseAd ad = null;

            var repoMock = new Moq.Mock <IRepository>();

            repoMock.Setup(x => x.Get <BaseAd>(78)).Returns(ad);

            AdActivationServices service = new AdActivationServices(repoMock.Object, null, null, null);

            // When
            AdActivationResultModel model = service.ActivateAd(78, null);

            // Then
            Assert.IsFalse(model.IsActivated);
            Assert.AreEqual(78, model.AdId);
            Assert.AreEqual("Cette annonce n'existe pas ou a expiré.", model.InfoMessage);

            repoMock.Verify(x => x.Save(ad), Moq.Times.Never());
            repoMock.Verify(x => x.Save(Moq.It.IsAny <SearchAdCache>()), Moq.Times.Never());
        }
Exemplo n.º 14
0
        public AdDetailsModel(BaseAd ad)
            : this()
        {
            AdId               = ad.Id;
            Title              = ad.Title;
            Location           = ad.City.Label;
            Price              = String.Format(CultureInfo.GetCultureInfo("fr-FR"), "{0:0,0 Francs}", ad.Price);
            CreationDateString = String.Format(CultureInfo.GetCultureInfo("fr-FR"), "{0:f}", ad.CreationDate);
            Body               = ad.Body;

            if (ad.Category != null)
            {
                Category             = ad.Category.Label;
                CategoryUrlPart      = ad.Category.LabelUrlPart;
                CategoryGroup        = ad.Category.ParentCategory.Label;
                CategoryGroupUrlPart = ad.Category.ParentCategory.LabelUrlPart;
            }

            UserFirstName   = ad.CreatedBy.Firstname;
            UserPhoneNumber = ad.PhoneNumber;

            ad.Images.ToList().ForEach(i => ImagesIds.Add(i.Id.ToString()));
        }
Exemplo n.º 15
0
        public ContactAdModel ContactAd(ContactAdModel model)
        {
            //ContactAdModel result = new ContactAdModel(model.AdId);
            BaseAd ad = _adRepository.GetAdById <BaseAd>(model.AdId);

            if (ad == null || ad.IsDeleted)
            {
                model.InfoMessage  = "Cette annonce n'existe pas ou plus.";
                model.CanContactAd = false;
                return(model);
            }
            //Should never happened, and should be logged for investigation if it does
            if (ad.CreatedBy == null)
            {
                model.InfoMessage  = "Impossible de contacter l'annonceur.";
                model.CanContactAd = false;
                return(model);
            }
            User user = _repository.Get <User>(ad.CreatedBy.Id);

            if (user == null)
            {
                model.InfoMessage  = "Impossible de contacter l'annonceur.";
                model.CanContactAd = false;
                return(model);
            }
            model.EmailTo = user.Email;
            SendEmailToUser(model);
            if (model.CopySender)
            {
                model.EmailTo = model.Email;
                SendEmailToUser(model);
            }
            model.CanContactAd = true;
            model.InfoMessage  = "Votre message a été envoyé !";
            return(model);
        }
Exemplo n.º 16
0
        protected AdDetailsModel CreateAdDetailsModelFromAd(AdTypeEnum adType, long adId)
        {
            AdDetailsModel model = null;
            BaseAd         ad    = null;

            // Get the right Ad based on its type
            switch (adType)
            {
            case AdTypeEnum.Ad:
                ad    = _adRepository.GetAdById <Ad>(adId);
                model = new AdDetailsModel(ad);
                break;

            case AdTypeEnum.CarAd:
                ad    = _adRepository.GetAdById <CarAd>(adId);
                model = new CarAdDetailsModel(ad as CarAd);
                break;

            case AdTypeEnum.MotoAd:
                ad    = _adRepository.GetAdById <MotoAd>(adId);
                model = new MotoAdDetailsModel(ad as MotoAd);
                break;

            case AdTypeEnum.OtherVehiculeAd:
                ad    = _adRepository.GetAdById <OtherVehicleAd>(adId);
                model = new OtherVehicleAdDetailsModel(ad as OtherVehicleAd);
                break;

            case AdTypeEnum.SailingBoatAd:
                ad    = _adRepository.GetAdById <SailingBoatAd>(adId);
                model = new SailingBoatAdDetailsModel(ad as SailingBoatAd, _helperService);
                break;

            case AdTypeEnum.MotorBoatAd:
                ad    = _adRepository.GetAdById <MotorBoatAd>(adId);
                model = new MotorBoatAdDetailsModel(ad as MotorBoatAd, _helperService);
                break;

            case AdTypeEnum.MotorBoatEngineAd:
                ad    = _adRepository.GetAdById <MotorBoatEngineAd>(adId);
                model = new MotorBoatEngineAdDetailsModel(ad as MotorBoatEngineAd);
                break;

            case AdTypeEnum.WaterSportAd:
                ad    = _adRepository.GetAdById <WaterSportAd>(adId);
                model = new WaterSportAdDetailsModel(ad as WaterSportAd);
                break;

            case AdTypeEnum.RealEstateAd:
                ad    = _adRepository.GetAdById <RealEstateAd>(adId);
                model = new RealEstateAdDetailsModel(ad as RealEstateAd);
                break;

            default:
                return(null);
            }

            // Compute whether or not this Ad is new (less than 3 days)
            model.IsNew = ad.CreationDate > _helperService.GetCurrentDateTime().AddHours(-72);

            return(model);
        }
Exemplo n.º 17
0
 public SpamAdRequest(BaseAd ad)
 {
     this.Ad = ad;
 }
Exemplo n.º 18
0
        private T GetAdFromCreateModel <T>(BaseAd baseAd, AdvancedAdCreateModel model) where T : BaseAd, new()
        {
            dynamic ad = new T();

            //Common data
            if (model.SelectedCityId.HasValue)
            {
                ad.City = _repository.Get <City>(model.SelectedCityId.Value);
            }
            if (model.SelectedCategoryId.HasValue)
            {
                ad.Category = _repository.Get <Category>(model.SelectedCategoryId.Value);
            }
            ad.Body            = model.Body;
            ad.CreationDate    = DateTime.Now;
            ad.Price           = model.Price.GetValueOrDefault();
            ad.Title           = model.Title;
            ad.IsOffer         = model.IsOffer;
            ad.PhoneNumber     = model.Telephone;
            ad.ActivationToken = _adActivationServices.GenerateActivationToken();
            User createdBy = new User();

            createdBy.Firstname = model.Name;
            createdBy.Email     = model.Email;
            createdBy.Password  = model.Password;
            ad.CreatedBy        = createdBy;
            GetAdPicturesFromModel(ad, model.ImageIds);

            //Other Data
            if (model.Km.HasValue)
            {
                ad.Kilometers = model.Km.Value;
            }
            if (model.SelectedYearId.HasValue)
            {
                ad.Year = model.SelectedYearId.Value;
            }
            if (model.IsAutomatic.HasValue)
            {
                ad.IsAutomatic = model.IsAutomatic.Value;
            }
            if (model.SelectedCarBrandId.HasValue)
            {
                ad.Brand = _repository.Get <VehicleBrand>(model.SelectedCarBrandId.Value);
            }
            if (model.SelectedFuelId.HasValue)
            {
                ad.Fuel = _repository.Get <CarFuel>(model.SelectedFuelId);
            }
            if (model.SelectedMotoBrandId.HasValue)
            {
                ad.Brand = _repository.Get <MotoBrand>(model.SelectedMotoBrandId.Value);
            }
            if (model.EngineSize.HasValue)
            {
                ad.EngineSize = model.EngineSize.Value;
            }

            if (model.RoomNb.HasValue)
            {
                ad.RoomsNumber = model.RoomNb.Value;
            }
            if (model.SelectedRealEstateTypeId.HasValue)
            {
                ad.Type = _repository.Get <RealEstateType>(model.SelectedRealEstateTypeId);
            }
            if (model.SurfaceArea.HasValue)
            {
                ad.SurfaceArea = model.SurfaceArea.Value;
            }
            if (model.IsFurnished.HasValue)
            {
                ad.IsFurnished = model.IsFurnished.Value;
            }
            if (model.SelectedDistrictId.HasValue)
            {
                ad.District = _repository.Get <District>(model.SelectedDistrictId.Value);
            }

            if (model.Length.HasValue)
            {
                ad.Length = model.Length.Value;
            }
            if (model.SelectedSailingBoatTypeId.HasValue)
            {
                ad.SailingBoatType = _repository.Get <SailingBoatType>(model.SelectedSailingBoatTypeId);
            }
            if (model.SelectedHullTypeId.HasValue)
            {
                ad.HullType = _repository.Get <SailingBoatHullType>(model.SelectedHullTypeId);
            }
            if (model.SelectedMotorBoatTypeId.HasValue)
            {
                ad.MotorBoatType = _repository.Get <MotorBoatType>(model.SelectedMotorBoatTypeId);
            }
            if (model.Hp.HasValue)
            {
                ad.Hp = model.Hp.Value;
            }
            if (model.SelectedMotorBoatEngineTypeId.HasValue)
            {
                ad.MotorType = _repository.Get <MotorBoatEngineType>(model.SelectedMotorBoatEngineTypeId);
            }

            return(ad);
        }
Exemplo n.º 19
0
 public virtual void AddAd(BaseAd ad)
 {
     this.Ads.Add(ad);
     ad.City = this;
 }
Exemplo n.º 20
0
 //Add the Ad to the category and set the Ad category to this
 public virtual void AddAd(BaseAd adToBeAdded)
 {
     this.Ads.Add(adToBeAdded);
     adToBeAdded.Category = this;
 }
Exemplo n.º 21
0
        public void InsertInMemoryData()
        {
            //-------------------------------------------
            //         LOCATION REFERENCE TABLES
            //-------------------------------------------
            using (ITransaction transaction = _sessionFactory.GetCurrentSession().BeginTransaction())
            {
                //-------------------------------------------
                //         USER TABLE
                //-------------------------------------------

                //Create User 1
                User user = new User();
                user.Email     = "*****@*****.**";
                user.Password  = "******";
                user.Firstname = "Bruno";
                user.Lastname  = "Secret";
                _sessionFactory.GetCurrentSession().Save(user);

                //Create User 2
                User user2 = new User();
                user2.Email     = "*****@*****.**";
                user2.Password  = "******";
                user2.Firstname = "Nicolas";
                user2.Lastname  = "Secret";
                _sessionFactory.GetCurrentSession().Save(user2);

                //-------------------------------------------
                //         IMAGES
                //-------------------------------------------
                AdImage img1 = new AdImage();
                img1.Id           = Guid.Parse("acd04523-f2fc-47b5-a7af-50b33c49694f");
                img1.IsPrimary    = true;
                img1.UploadedDate = new DateTime();
                log.Info(_sessionFactory.GetCurrentSession().Save(img1));

                AdImage img2 = new AdImage();
                img2.Id           = Guid.Parse("262dcc07-8c90-4af8-b99c-12e48afac89f");
                img2.IsPrimary    = true;
                img2.UploadedDate = new DateTime();
                log.Info(_sessionFactory.GetCurrentSession().Save(img2));

                //-------------------------------------------
                //         AD TABLE
                //-------------------------------------------

                var normalCategories = _sessionFactory.GetCurrentSession().Query <Category>()
                                       .Where(x => x.Type == AdTypeEnum.Ad)
                                       .ToList();

                int nbCategories = normalCategories.Count;
                int nbCities     = _repository.CountAll <City>();

                for (int i = 1; i < 31; i++)
                {
                    BaseAd ad = null;

                    ad = new Ad();
                    normalCategories[Faker.RandomNumber.Next(0, nbCategories - 1)].AddAd(ad);

                    Faker.Lorem.Words(3).ForEach(s => ad.Title += " " + s);
                    ad.Body    = Faker.Lorem.Paragraph();
                    ad.IsOffer = true;

                    ad.CreationDate = DateTime.Now
                                      .AddDays(Faker.RandomNumber.Next(-7, 0))
                                      .AddHours(Faker.RandomNumber.Next(1, 23))
                                      .AddMinutes(Faker.RandomNumber.Next(1, 59))
                                      .AddSeconds(Faker.RandomNumber.Next(1, 59));
                    ad.Price       = Faker.RandomNumber.Next(1, 300000);
                    ad.PhoneNumber = String.Format("{0}.{1}.{2}", Faker.RandomNumber.Next(20, 99), Faker.RandomNumber.Next(20, 99), Faker.RandomNumber.Next(20, 99));
                    if (i == 1)
                    {
                        ad.AddImage(img1);
                    }
                    if (i == 2)
                    {
                        ad.AddImage(img2);
                    }
                    ad.CreatedBy = user;

                    ad.IsActivated     = false;
                    ad.ActivationToken = "activateme";

                    _repository.Get <City>(Faker.RandomNumber.Next(1, nbCities)).AddAd(ad);

                    _sessionFactory.GetCurrentSession().Save(ad);
                }

                _sessionFactory.GetCurrentSession().Update(img1);
                _sessionFactory.GetCurrentSession().Update(img2);


                //-------------------------------------------
                //         REFERENCE TABLES
                //-------------------------------------------


                transaction.Commit();
            }
        }