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); } }
public IHttpActionResult EditOffer(OfferEditDataDto dto) { using (var context = _provider.GetNewContext()) { using (var transaction = new TransactionScope()) { User user = context.Users.FirstOrDefault(u => u.Username.Equals(dto.Username)); if (user == null) { return(NotFound()); } Offer offer = context.Offers.FirstOrDefault(x => x.Id == dto.OfferId); if (offer == null) { return(NotFound()); } HistoricalOffer ho = context.HistoricalOffers.FirstOrDefault(x => x.OriginalOfferId == offer.Id); ho.OfferInfo = offer.OfferInfo = dto.OfferInfo; ho.Vendor = offer.Vendor = user; ho.Room = offer.Room = dto.Room; ho.Room.Place = offer.Room.Place = dto.Place; ho.Room.Place.Address = offer.Room.Place.Address = dto.Place.Address; context.SaveChanges(); transaction.Complete(); } } return(Ok()); }
/// <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); } }
public UserMarksViewModel(HistoricalOffer offer, User user) { OfferInfo offerInfo = offer.OfferInfo; OfferStartTime = offerInfo.OfferStartTime.Date.ToString("dd/MM/yyyy"); OfferEndTime = offerInfo.OfferEndTime.Date.ToString("dd/MM/yyyy"); OfferEndTimeDate = offerInfo.OfferEndTime; OfferStartTimeDate = offerInfo.OfferStartTime; PlaceName = offer.Room.Place.PlaceName; RoomNumber = offer.Room.Number; Username = user.Username; ReservedOfferId = offer.Id; }
public DisplayableOffer(HistoricalOffer offer) { OfferInfo offerInfo = offer.OfferInfo; OfferStartTime = offerInfo.OfferStartTime.Date.ToString("dd/MM/yyyy"); OfferEndTime = offerInfo.OfferEndTime.Date.ToString("dd/MM/yyyy"); OfferEndTimeDate = offerInfo.OfferEndTime; OfferStartTimeDate = offerInfo.OfferStartTime; Address = offer.Room.Place.Address; PlaceName = offer.Room.Place.PlaceName; AvailableVacanciesNumber = offer.Room.Capacity; RoomNumber = offer.Room.Number; Price = offerInfo.Price; Description = offerInfo.Description; OfferPublishTime = offerInfo.OfferPublishTime; Id = offer.Id; IsBooked = offer.IsBooked; }
public IHttpActionResult GetHistorcialOffer(int id) { HistoricalOffer offer = null; using (var context = _provider.GetNewContext()) { if (context is DbContext) { (context as DbContext).Configuration.ProxyCreationEnabled = false; } offer = context.HistoricalOffers.FirstOrDefault(o => o.OriginalOfferId == id); } if (offer == null) { return((IHttpActionResult)NotFound()); } return(Ok(offer)); }
/// <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); } }
public IHttpActionResult SaveOfferAsync(OfferAllDataDto dto) { using (var context = _provider.GetNewContext()) { using (var transaction = new TransactionScope()) { Offer offerToAdd = new Offer(); User user = context.Users.FirstOrDefault(x => x.Id == dto.Vendor.Id); if (user == null) { return(NotFound()); } offerToAdd.Vendor = user; offerToAdd.OfferInfo = dto.OfferInfo; Place place = context.Places.FirstOrDefault(p => p.PlaceName.Equals(dto.Place.PlaceName) && p.Address.City.Equals(dto.Place.Address.City) && p.Address.Street.Equals(dto.Place.Address.Street) && p.Address.LocalNumber == dto.Place.Address.LocalNumber); if (place != null) { //istnieje to miejsce w bazie danych Room room = context.Rooms.FirstOrDefault(r => r.PlaceId == place.Id && r.Number == dto.Room.Number); if (room != null) { //istnieje oferta na ten pokój List <Offer> off = context.Offers.Where(offer => offer.RoomId == room.Id) .Include(o => o.OfferInfo) .ToList(); if (off.Any(offer => (offer.OfferInfo.OfferStartTime <= dto.OfferInfo.OfferStartTime && offer.OfferInfo.OfferEndTime >= dto.OfferInfo.OfferStartTime) || (offer.OfferInfo.OfferStartTime >= dto.OfferInfo.OfferStartTime && offer.OfferInfo.OfferEndTime <= dto.OfferInfo.OfferEndTime))) { return(BadRequest()); } //żadna oferta nie koliduje offerToAdd.Room = room; } else { //nowy pokój offerToAdd.Room = dto.Room; offerToAdd.Room.Place = place; } } else { offerToAdd.Room = dto.Room; offerToAdd.Room.Place = dto.Place; offerToAdd.Room.Place.Address = dto.Place.Address; } user.MyOffers.Add(offerToAdd); //zapisanie do historii HistoricalOffer historicalOffer = new HistoricalOffer(); historicalOffer.OfferInfo = offerToAdd.OfferInfo; historicalOffer.Vendor = offerToAdd.Vendor; historicalOffer.Room = offerToAdd.Room; historicalOffer.Room.Place = offerToAdd.Room.Place; historicalOffer.Room.Place.Address = offerToAdd.Room.Place.Address; historicalOffer.OriginalOffer = offerToAdd; user.MyHistoricalOffers.Add(historicalOffer); //ewentualna zmiana rangi int c = user.MyHistoricalOffers.Count; if (c >= 4 && c < 8) { user.Rank = context.Ranks.FirstOrDefault(r => r.Name.Equals("Junior")); } else if (c >= 8 && c < 15) { user.Rank = context.Ranks.FirstOrDefault(r => r.Name.Equals("Znawca")); } else if (c >= 15 && c < 25) { user.Rank = context.Ranks.FirstOrDefault(r => r.Name.Equals("Mistrz")); } else if (c >= 25) { user.Rank = context.Ranks.FirstOrDefault(r => r.Name.Equals("Guru")); } context.SaveChanges(); transaction.Complete(); } } return(Ok(true)); }
/// <summary> /// Zapisuje daną ofertę w bazie /// </summary> /// <param name="context">Kontekst bazy danych</param> /// <param name="model">Model z danymi oferty</param> /// <param name="username">Aktualnie zalogowany użytkownik</param> /// <param name="image">Opcjonalny obrazek</param> /// <returns></returns> public static bool SaveOffer(IAccommodationContext context, AddNewOfferViewModel model, string username, HttpPostedFileBase image = null) { try { Offer offerToAdd = new Offer(); User user = context.Users.FirstOrDefault(x => x.Username == username); if (user == null) { return(false); } offerToAdd.Vendor = user; offerToAdd.OfferInfo = new OfferInfo { OfferStartTime = model.StartDate, OfferEndTime = model.EndDate, OfferPublishTime = DateTime.Now, Price = double.Parse(model.Price), Description = model.Description }; if (image != null) { offerToAdd.OfferInfo.OfferImage = new byte[image.ContentLength]; image.InputStream.Read(offerToAdd.OfferInfo.OfferImage, 0, image.ContentLength); } Place place = context.Places.FirstOrDefault(p => p.PlaceName.Equals(model.AccommodationName) && p.Address.City.Equals(model.City) && p.Address.Street.Equals(model.Street) && p.Address.LocalNumber == model.LocalNumber); if (place != null) { //istnieje to miejsce w bazie danych Room room = context.Rooms.FirstOrDefault(r => r.PlaceId == place.Id && r.Number == model.RoomNumber); if (room != null) { //istnieje oferta na ten pokój List <Offer> off = context.Offers.Where(offer => offer.RoomId == room.Id) .Include(o => o.OfferInfo) .ToList(); if (off.Any(offer => (offer.OfferInfo.OfferStartTime <= model.StartDate && offer.OfferInfo.OfferEndTime >= model.EndDate) || (offer.OfferInfo.OfferStartTime >= model.StartDate && offer.OfferInfo.OfferEndTime <= model.EndDate))) { return(false); } //żadna oferta nie koliduje offerToAdd.Room = room; } else { //nowy pokój Room newRoom = new Room { Capacity = int.Parse(model.AvailiableVacanciesNumber), Number = model.RoomNumber, Place = place, }; offerToAdd.Room = newRoom; offerToAdd.Room.Place = place; } } else { 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, }; offerToAdd.Room = newRoom; } user.MyOffers.Add(offerToAdd); //zapisanie do historii HistoricalOffer historicalOffer = new HistoricalOffer(); historicalOffer.OfferInfo = offerToAdd.OfferInfo; historicalOffer.Vendor = offerToAdd.Vendor; historicalOffer.Room = offerToAdd.Room; historicalOffer.Room.Place = offerToAdd.Room.Place; historicalOffer.Room.Place.Address = offerToAdd.Room.Place.Address; historicalOffer.OriginalOffer = offerToAdd; user.MyHistoricalOffers.Add(historicalOffer); //ewentualna zmiana rangi int c = user.MyHistoricalOffers.Count; if (c >= 4 && c < 8) { user.Rank = context.Ranks.FirstOrDefault(r => r.Name.Equals("Junior")); } else if (c >= 8 && c < 15) { user.Rank = context.Ranks.FirstOrDefault(r => r.Name.Equals("Znawca")); } else if (c >= 15 && c < 25) { user.Rank = context.Ranks.FirstOrDefault(r => r.Name.Equals("Mistrz")); } else if (c >= 25) { user.Rank = context.Ranks.FirstOrDefault(r => r.Name.Equals("Guru")); } context.SaveChanges(); return(true); } catch (Exception ex) { return(false); } }