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); }
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(); }
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); }
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); }
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(); } }
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(); }
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, "*****@*****.**"); }
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); }
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); }
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); }
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); }
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)); }
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()); }
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())); }
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); }
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); }
public SpamAdRequest(BaseAd ad) { this.Ad = ad; }
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); }
public virtual void AddAd(BaseAd ad) { this.Ads.Add(ad); ad.City = this; }
//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; }
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(); } }