/// <summary> /// Umożliwia pobranie zarezerwwanych ofert użytkownika z bazy /// </summary> /// <param name="context">Kontekst bazy danych</param> /// <param name="username">Nazwa zalogowanego użytkownika</param> /// <returns>Zwraca listę zarezerwowanych ofert</returns> public static List <OfferViewModel> GetUserReservedOffers(IAccommodationContext context, string username) { try { List <Offer> offerList = new List <Offer>(); List <OfferViewModel> offerViewModelList = new List <OfferViewModel>(); User user = context.Users.FirstOrDefault(u => u.Username == username); offerList = context.Offers.Where(o => o.CustomerId == user.Id).Include(o => o.OfferInfo).Include(o => o.Room).ToList(); foreach (var offer in offerList) { offer.Room.Place = context.Places.FirstOrDefault(p => p.Id == offer.Room.PlaceId); offer.Room.Place.Address = context.Addresses.FirstOrDefault(a => a.Id == offer.Room.Place.AddressId); offerViewModelList.Add(new OfferViewModel(offer)); } return(offerViewModelList); } catch (Exception ex) { return(new List <OfferViewModel>()); } }
/// <summary> /// Zapisuje nowe dane użytkownika. /// </summary> /// <param name="context">Kontekst bazy danych</param> /// <param name="username">Nazwa użytkownika</param> /// <param name="model">Model z nowymi danymi</param> /// <returns>True, jeśli zapis się powiódł, false w przypadku błędu.</returns> public bool SaveUserData(IAccommodationContext context, string username, ChangeUserDataViewModel model) { try { var user = context.Users.FirstOrDefault(u => u.Username.Equals(username)); if (user == null) { return(false); } var data = context.UserData.FirstOrDefault(ud => ud.Id == user.UserDataId); if (data == null) { return(false); } data.Email = model.Email; data.CompanyName = model.CompanyName; data.FirstName = model.FirstName; data.LastName = model.LastName; context.SaveChanges(); return(true); } catch (Exception) { return(false); } }
public static bool GiveUserMark(IAccommodationContext context, MarkViewModel model) { try { User user = context.Users.FirstOrDefault(u => u.Username == model.Username); HistoricalOffer offer = context.HistoricalOffers.FirstOrDefault(o => o.Id == model.ReservedOfferId); int mark = (int)model.mark; if (user.AverageMark == null || user.MarkCount == null) { user.AverageMark = 0; user.MarkCount = 0; } user.AverageMark = (user.AverageMark * user.MarkCount + mark) / (user.MarkCount + 1); user.MarkCount += 1; offer.IsMarked = true; context.SaveChanges(); return(true); } catch (Exception ex) { return(false); } }
/// <summary> /// Asynchronicznie zmienia hasło użytkownika. /// </summary> /// <param name="context">Kontekst bazy danych</param> /// <param name="username">Nazwa uzytkownika</param> /// <param name="model">Obiekt z hasłami uzytkownika</param> /// <returns>String z ewentualną przyczyną błędu (pusty, jeśli wszystko przebiegło pomyślnie).</returns> public async Task <string> ChangePasswordAsync(IAccommodationContext context, string username, ChangePasswordViewModel model) { try { IUserAuthenticationService authenticationService = new UserAuthenticationService(); var identity = await authenticationService.AuthenticateUserAsync(context, username, model.OldPassword); if (identity == null) { return("Nieprawidłowe hasło dla użytkownika " + username); } IRegisterUser register = new UserRegister(); User newUser = register.GetNewUser(username, model.NewPassword); User user = context.Users.FirstOrDefault(u => u.Username.Equals(username)); if (user == null) { return("Błąd! Nie odnaleziono użytkownika"); } user.HashedPassword = newUser.HashedPassword; user.Salt = newUser.Salt; context.SaveChanges(); return(string.Empty); } catch (Exception) { return("Błąd!"); } }
/// <summary> /// Pobiera informacje o użytkowniku. /// </summary> /// <param name="context">Kontekst bazy danych z użytkownikami</param> /// <param name="username">Nazwa uzytkownika</param> /// <returns>Obiekt zawierający dane uzytkownika.</returns> public UserProfileViewModel GetInfoAboutUser(IAccommodationContext context, string username) { try { User user = context.Users.FirstOrDefault(u => u.Username.Equals(username)); if (user == null) { return(null); } UserData data = context.UserData.FirstOrDefault(ud => ud.Id == user.UserDataId); if (data == null) { return(null); } UserProfileViewModel vm = new UserProfileViewModel() { Username = user.Username, FirstName = data.FirstName, LastName = data.LastName, CompanyName = data.CompanyName, Email = data.Email, Rank = user.Rank.Name, AvarageMark = user.AverageMark != null?user.AverageMark?.ToString() : "Brak ocen" }; return(vm); } catch (Exception) { return(null); } }
public static List <UserMarksViewModel> GetUsersToMark(IAccommodationContext context, string username) { try { List <UserMarksViewModel> list = new List <UserMarksViewModel>(); User user = context.Users.FirstOrDefault(u => u.Username == username); if (user == null) { return(new List <UserMarksViewModel>()); } var offersList = context.HistoricalOffers.Where(o => o.CustomerId == user.Id).Include(o => o.OfferInfo).Include(o => o.Room); foreach (var offer in offersList) { if (!offer.IsMarked) { User vendor = context.Users.FirstOrDefault(u => u.Id == offer.VendorId); Place place = context.Places.FirstOrDefault(x => x.Id == offer.Room.PlaceId); list.Add(new UserMarksViewModel(offer, vendor)); } } return(list); } catch (Exception ex) { return(new List <UserMarksViewModel>()); } }
/// <summary> /// Usuwa ofertę o danym id z bazy /// </summary> /// <param name="context">Kontekst bazy danych</param> /// <param name="offerId">Id oferty</param> /// <param name="username">Nazwa użytkownika</param> /// <returns></returns> public static bool DeleteOfferById(IAccommodationContext context, int offerId, string username) { try { Offer offer = context.Offers.FirstOrDefault(x => x.Id == offerId); if (offer == null) { return(false); } User user = context.Users.FirstOrDefault(u => u.Username == username); OfferInfo offerInfo = context.OfferInfo.FirstOrDefault(x => x.Id == offer.OfferInfoId); Room room = context.Rooms.FirstOrDefault(x => x.Id == offer.RoomId); Place place = context.Places.FirstOrDefault(x => x.Id == room.PlaceId); Address address = context.Addresses.FirstOrDefault(x => x.Id == place.AddressId); var ho = context.HistoricalOffers.FirstOrDefault(h => h.OriginalOfferId == offer.Id); if (ho != null) { ho.OriginalOffer = null; } //usuń z bazy ofertę oraz jej dane context.Offers.Remove(offer); user?.MyOffers?.Remove(offer); context.SaveChanges(); return(true); } catch (Exception ex) { return(false); } }
public IList <OfferViewModel> SearchByPlace(IAccommodationContext context, PlaceSearchingModel model) { ISearchingCriterion <Offer> criterion = OffersSearchingCriteriaFactory.CreatePlaceSearchingCriterion(model.PlaceName, model.CityName); return(Search(context, model.Username, new[] { criterion }, model.SortType, model.SortBy)); }
public IList <OfferViewModel> SearchByPrice(IAccommodationContext context, PriceSearchingModel model) { ISearchingCriterion <Offer> criterion = OffersSearchingCriteriaFactory.CreatePriceSearchingCriterion(PriceFromString(model.MinimalPrice), PriceFromString(model.MaximalPrice)); return(Search(context, model.Username, new[] { criterion }, model.SortType, model.SortBy)); }
public IList <OfferViewModel> SearchByDate(IAccommodationContext context, DateSearchingModel model) { ISearchingCriterion <Offer> criterion = OffersSearchingCriteriaFactory.CreateDateSearchingCriterion(model.MinimalDate, model.MaximalDate, model.ShowPartiallyMatchingResults); return(Search(context, model.Username, new[] { criterion }, model.SortType, model.SortBy)); }
public IList <OfferViewModel> SearchByMultipleCriteria(IAccommodationContext context, AdvancedSearchingModel model) { ISearchingCriterion <Offer>[] criteria = new[] { OffersSearchingCriteriaFactory.CreatePlaceSearchingCriterion(model.PlaceName, model.CityName), OffersSearchingCriteriaFactory.CreateDateSearchingCriterion(model.MinimalDate, model.MaximalDate), OffersSearchingCriteriaFactory.CreatePriceSearchingCriterion(PriceFromString(model.MinimalPrice), PriceFromString(model.MaximalPrice)) }; return(Search(context, model.Username, criteria, model.SortType, model.SortBy)); }
/// <summary> /// Umożliwia edycję oferty w bazie /// </summary> /// <param name="context">Kontekst bazy danych</param> /// <param name="model">Model z danymi oferty</param> /// <returns></returns> public static bool EditOffer(IAccommodationContext context, AddNewOfferViewModel model) { try { Offer offer = context.Offers.FirstOrDefault(x => x.Id == model.Id); if (offer == null) { return(false); } HistoricalOffer ho = context.HistoricalOffers.FirstOrDefault(x => x.OriginalOfferId == offer.Id); OfferInfo newOfferInfo = new OfferInfo { Description = model.Description, OfferEndTime = model.EndDate, OfferStartTime = model.StartDate, OfferPublishTime = DateTime.Now, Price = double.Parse(model.Price) }; Address newAddress = new Address { City = model.City, Street = model.Street, LocalNumber = model.LocalNumber, PostalCode = model.PostalCode, }; Place newPlace = new Place { Address = newAddress, PlaceName = model.AccommodationName, }; Room newRoom = new Room { Capacity = int.Parse(model.AvailiableVacanciesNumber), Number = model.RoomNumber, Place = newPlace, }; ho.OfferInfo = offer.OfferInfo = newOfferInfo; ho.Room = offer.Room = newRoom; ho.Room.Place = offer.Room.Place = newPlace; ho.Room.Place.Address = offer.Room.Place.Address = newAddress; context.SaveChanges(); return(true); } catch (Exception ex) { return(false); } }
/// <summary> /// Waliduje nazwę użytkownika. /// </summary> /// <param name="context">Kontekst bazy danych</param> /// <param name="model">Model z danymi.</param> /// <returns>String z ewentualną przyczyną niepowodzenia.</returns> public async Task <string> ValidateUserAsync(IAccommodationContext context, RegisterViewModel model) { string errorMessage; bool b = await _validator.ValidateUsernameAsync(context, model.Username); if (!b) { return("Nazwa użytkownika musi być unikalna. Proszę wybrać unikalną nazwę."); } return(!ValidateUserData(model, out errorMessage) ? errorMessage : string.Empty); }
/// <summary> /// Zapisuje użytkownika z jego danymi do bazy danych. /// </summary> /// <param name="context">Kontekst bazy danych.</param> /// <param name="user">Nazwa użytkownika</param> /// <param name="userdata">Dane osobowe użytkownika</param> /// <param name="address">Dane adresowe użytkownika</param> /// <returns>True jeśli operacja zakończyła się suksecem, w przeciwnym wypadklu false.</returns> public bool SaveUser(IAccommodationContext context, User user, UserData userdata, Address address) { try { user.UserData = userdata; user.UserData.Address = address; user.Rank = context.Ranks.FirstOrDefault(r => r.Name.Equals("Nowicjusz")); context.Users.Add(user); context.SaveChanges(); return(true); } catch (Exception) { return(false); } }
private static double[] ThisYearReservedOffersPrices(IAccommodationContext context, User user, out int[] counts) { int year = DateTime.Now.Year; double[] prices = new double[12]; counts = new int[12]; var offers = context.HistoricalOffers.Where(o => o.CustomerId == user.Id) .Include(o => o.OfferInfo) .Where(o => o.OfferInfo.OfferStartTime.Year == year).ToList(); foreach (var offer in offers) { int month = offer.OfferInfo.OfferStartTime.Month - 1; prices[month] = (prices[month] * counts[month] + offer.OfferInfo.Price) / (counts[month] + 1); counts[month]++; } return(prices); }
/// <summary> /// Zapisuje użytkownika do bazy danych. /// </summary> /// <param name="context">Kontekst bazy danych</param> /// <param name="model">Model z danymi.</param> public async Task SaveUserAsync(IAccommodationContext context, RegisterViewModel model) { User user = _register.GetNewUser(model.Username, model.Password); UserData data = new UserData() { Email = model.Email, CompanyName = model.CompanyName, FirstName = model.FirstName, LastName = model.LastName }; Address address = new Address() { City = model.City, Street = model.Street, LocalNumber = model.LocalNumber, PostalCode = model.PostalCode }; await _register.SaveUserAsync(context, user, data, address); }
/// <summary> /// Pobiera ofertę o danym id z bazy /// </summary> /// <param name="context">Kontekst bazy danych</param> /// <param name="offerId">id oferty</param> /// <returns></returns> public static AddNewOfferViewModel GetOfferById(IAccommodationContext context, int offerId) { try { Offer offer = context.Offers.Where(o => o.Id == offerId).Include(o => o.OfferInfo).Include(o => o.Room).First(); if (offer == null) { return(null); } Place place = context.Places.FirstOrDefault(p => p.Id == offer.Room.PlaceId); Address address = context.Addresses.FirstOrDefault(a => a.Id == offer.Room.Place.AddressId); offer.Room.Place = place; offer.Room.Place.Address = address; return(new AddNewOfferViewModel(offer)); } catch (Exception ex) { return(null); } }
/// <summary> /// Wyszukuje oferty. /// </summary> /// <param name="context">Kontkst bazy danych</param> /// <param name="username">Nazwa użytkwnika</param> /// <param name="criteria">Kryteria wyszukiwania</param> /// <param name="sortBy">Po jakiej właściwości posortować wyniki</param> /// <param name="sortType">Porządek sortowania.</param> /// <returns>Lista z wynikami wyszukiwania.</returns> private IList <OfferViewModel> Search(IAccommodationContext context, string username, ISearchingCriterion <Offer>[] criteria, SortType sortType, SortBy sortBy) { if (string.IsNullOrEmpty(username)) { return(null); } User u = context.Users.FirstOrDefault(us => us.Username.Equals(username)); if (u == null) { return(null); } IQueryable <Offer> offers = context.Offers.Where(o => o.VendorId != u.Id).Where(o => !o.IsBooked); offers = criteria.Aggregate(offers, (current, criterion) => current.Where(criterion.SelectableExpression)); offers = offers.Take(20).OrderBy(sortType, sortBy); offers = offers.Include(o => o.OfferInfo).Include(o => o.Room); return(offers.ToList().Select(offer => new OfferViewModel(offer)).ToList()); }
/// <summary> /// Umożliwia rezygnacje z oferty danemu użytkownikowi /// </summary> /// <param name="context">Kontekst bazy danych</param> /// <param name="offerId">Id oferty</param> /// <param name="username">Nazwa użytkownika</param> /// <returns></returns> public static bool ResignOffer(IAccommodationContext context, int offerId, string username) { try { Offer offer = context.Offers.FirstOrDefault(o => o.Id == offerId); HistoricalOffer historicalOffer = context.HistoricalOffers.FirstOrDefault(ho => ho.OriginalOfferId == offer.Id); User customer = context.Users.FirstOrDefault(u => u.Username.Equals(username)); User vendor = context.Users.FirstOrDefault(x => x.Id == offer.VendorId); if (offer == null || customer == null) { return(false); } if (!offer.IsBooked) { return(false); } OfferInfo offerInfo = context.OfferInfo.FirstOrDefault(o => o.Id == offer.OfferInfoId); UserData customerData = context.UserData.FirstOrDefault(x => x.Id == customer.UserDataId); UserData vendorData = context.UserData.FirstOrDefault(x => x.Id == vendor.UserDataId); Room room = context.Rooms.FirstOrDefault(x => x.Id == offer.RoomId); Place place = context.Places.FirstOrDefault(x => x.Id == room.PlaceId); offer.IsBooked = false; offer.Customer = null; historicalOffer.IsBooked = false; historicalOffer.Customer = null; context.SaveChanges(); //Wysłanie powiadomienia mailowego, ostatni parametr oznacza rezygnację EmailNotification.SendNotification(offerInfo, place, vendorData, customerData, room, false); return(true); } catch (Exception ex) { return(false); } }
/// <summary> /// Gets users statistics /// </summary> /// <param name="context">Db context</param> /// <param name="username">Name of the user</param> /// <returns>Model filled with statistics</returns> public StatisticsViewModel GetUserStatistics(IAccommodationContext context, string username) { try { User user = context.Users.FirstOrDefault(u => u.Username.Equals(username)); if (user == null) { return(null); } StatisticsViewModel model = new StatisticsViewModel(); model.Username = username; model.Rank = user.Rank.Name; model.AllMyOffersCount = context.HistoricalOffers.Count(o => o.VendorId == user.Id); model.AllMyReservedOffersCount = context.HistoricalOffers.Count(o => o.CustomerId == user.Id); model.MyOffersCountNow = context.Offers.Count(o => o.VendorId == user.Id); model.MyReservedOffersCountNow = context.Offers.Count(o => o.CustomerId == user.Id); List <HistoricalOffer> myOffers = context.HistoricalOffers.Where(o => o.VendorId == user.Id).Include(o => o.OfferInfo).ToList(); if (myOffers.Count > 0) { model.MyLessValuableOffer = myOffers.Min(o => o.OfferInfo.Price); model.MyMostValuableOffer = myOffers.Max(o => o.OfferInfo.Price); } int[] counts; model.ThisYearOffersPrices = ThisYearOfferPrices(context, user, out counts); model.ThisYearOffersCountOnMonth = counts; int[] counts2; model.ThisYearReservedOffersPrices = ThisYearReservedOffersPrices(context, user, out counts2); model.ThisYearReservedOffersCountOnMonth = counts2; return(model); } catch (Exception) { return(null); } }
/// <summary> /// Asynchronously gets user statistics /// </summary> /// <param name="context">Db context</param> /// <param name="username">Name of the user</param> /// <returns>Model filled with statistics</returns> public async Task <StatisticsViewModel> GetUserStatisticsAsync(IAccommodationContext context, string username) { return(await Task.Run(() => GetUserStatistics(context, username))); }
/// <summary> /// Asynchroniczna metoda do usuwania ofert /// </summary> /// <param name="context">Kontekst bazy danych</param> /// <param name="id">Id oferty do usunięcia</param> /// <param name="username">Nazwa użytkownika</param> /// <returns></returns> public static async Task <bool> DeleteOfferByIdAsync(IAccommodationContext context, int id, string username) { return(await Task.Run(() => DeleteOfferById(context, id, username))); }
/// <summary> /// Asynchroniczna metoda wywołująca metodę do /// edycji ofert w bazie /// </summary> /// <param name="context">Kontekst bazy danych</param> /// <param name="model">Model z danymi oferty do edycji</param> /// <returns></returns> public static async Task <bool> EditOfferAsync(IAccommodationContext context, AddNewOfferViewModel model) { return(await Task.Run(() => EditOffer(context, model))); }
/// <summary> /// Asynchroniczna metoda do rezygnacji z oferty /// </summary> /// <param name="context">Kontekst bazy danych</param> /// <param name="id">Id oferty</param> /// <param name="username"></param> /// <returns></returns> public async static Task <bool> ResignOfferAsync(IAccommodationContext context, int id, string username) { return(await Task.Run(() => ResignOffer(context, id, username))); }
public async Task <IList <OfferViewModel> > SearchByMultipleCriteriaAsync(IAccommodationContext context, AdvancedSearchingModel model) { return(await Task.Run(() => SearchByMultipleCriteria(context, model))); }
public async static Task <List <UserMarksViewModel> > GetUsersToMarkAsync(IAccommodationContext context, string username) { return(await Task.Run(() => GetUsersToMark(context, username))); }
/// <summary> /// Asynchronicznie zapisuje użytkownika z jego danymi do bazy danych. /// </summary> /// <param name="context">Kontekst bazy danych.</param> /// <param name="user">Nazwa użytkownika</param> /// <param name="userdata">Dane osobowe użytkownika</param> /// <param name="address">Dane adresowe użytkownika</param> /// <returns>True jeśli operacja zakończyła się suksecem, w przeciwnym wypadklu false.</returns> public async Task <bool> SaveUserAsync(IAccommodationContext context, User user, UserData userdata, Address address) { return(await Task.Run(() => SaveUser(context, user, userdata, address))); }
public async static Task <bool> GiveUserMarkAsync(IAccommodationContext context, MarkViewModel model) { return(await Task.Run(() => GiveUserMark(context, model))); }
public async Task <IList <OfferViewModel> > SearchByPriceAsync(IAccommodationContext context, PriceSearchingModel model) { return(await Task.Run(() => SearchByPrice(context, model))); }
/// <summary> /// Asynchroniczna metoda wywołująca metodę /// do pobierania oferty o danym id /// </summary> /// <param name="context">Kontekst bazy danych</param> /// <param name="id">id oferty</param> /// <returns></returns> public static async Task <AddNewOfferViewModel> GetOfferByIdAsync(IAccommodationContext context, int id) { return(await Task.Run(() => GetOfferById(context, id))); }