public ActionResult AddPetReservation(ReservationGroup reservationGroup, Guid skuCategoryId, Guid?addPetId) { // Step 1. Sync ReservationGroupId reservationGroup.PetReservationList.ForEach(x => x.ReservationGroupId = reservationGroup.Id); // Step 2. Get First PetReservation petReservation = reservationGroup.PetReservationList.FirstOrDefault(); if (petReservation == null) { throw new InvalidOperationException("Pet Reservation Required"); } // Step 3. Add Pet if (addPetId != null) { reservationGroup.PetReservationList.Add(new PetReservation() { SkuCategoryId = skuCategoryId, PetId = addPetId.Value }); } // Step 4. Add viewData this.ViewData["__Pet"] = new Paw.Services.Messages.Web.Pets.GetPet() { Id = petReservation.PetId, ProviderGroupId = (Guid)this.ViewData["__ProviderGroupId"] }.ExecuteItem(); return(View(reservationGroup)); }
public void CanInsertFacilityDownTime() { int resourceId = 80010; //Zygo NewView 5000 int rid = 0; int fdtid = 0; using (ContextManager.StartRequest(1600)) { // Create a reservation that starts at 10 am tomorrow. var data = new ReservationData() { ClientID = 1600, ResourceID = resourceId, ActivityID = 6, AccountID = 67, Notes = "Test Reservation", AutoEnd = true, KeepAlive = true, ReservationDuration = new ReservationDuration(DateTime.Now.Date.AddDays(1).AddHours(10), TimeSpan.FromMinutes(5)) }; var rsv = ReservationUtility.Create(data); rid = rsv.ReservationID; } using (ContextManager.StartRequest(155)) { int clientId = HttpContext.Current.CurrentUser().ClientID; DateTime sd = DateTime.Now.Date.AddDays(1).AddHours(9); DateTime ed = sd.AddHours(4); ReservationGroup group = FacilityDownTimeUtility.CreateFacilityDownTimeGroup(clientId, sd, ed); var result = FacilityDownTimeUtility.InsertFacilityDownTime( resourceId: 80010, groupId: group.GroupID, clientId: clientId, beginDateTime: sd, endDateTime: ed, notes: "EECS building fire drill" ); Assert.AreEqual(1, result.Existing.Count()); Assert.AreEqual(rid, result.Existing.ElementAt(0).ReservationID); fdtid = result.ReservationID; var rsv = DA.Current.Single <Reservation>(fdtid); Assert.IsTrue(rsv.Activity.IsFacilityDownTime); } using (ContextManager.StartRequest(1301)) { // clean up PurgeReservations(new[] { rid, fdtid }); } }
public static OutgoingMinimalReservationGroup Parse(ReservationGroup x) { if (x == null) { return(null); } return(new OutgoingMinimalReservationGroup { Id = x.Id, UserId = x.UserId, HotelId = x.HotelId }); }
public ActionResult AddPetReservation(Guid skuCategoryId, Guid petId) { ReservationGroup reservationGroup = new ReservationGroup(); reservationGroup.PetReservationList.Add(new PetReservation() { SkuCategoryId = skuCategoryId, PetId = petId }); this.ViewData["__Pet"] = new Paw.Services.Messages.Web.Pets.GetPet() { Id = petId, ProviderGroupId = (Guid)this.ViewData["__ProviderGroupId"] }.ExecuteItem(); return(View(reservationGroup)); }
public static OutgoingReservationGroup Parse(ReservationGroup x) { if (x == null) { return(null); } return(new OutgoingReservationGroup { Id = x.Id, Status = OutgoingReservationGroupStatus.Parse(x.ReservationGroupStatus), UserId = x.UserId, HotelId = x.HotelId, StatusDate = x.StatusDate, StatusGuid = x.StatusGuid, ReserveItems = x.ReserveItems?.Select(y => OutgoingReservationItem.Parse(y))?.ToList() }); }
public static OutgoingMinimalReservationGroupExtra Parse(ReservationGroup x) { if (x == null) { return(null); } return(new OutgoingMinimalReservationGroupExtra { Id = x.Id, UserId = x.UserId, HotelId = x.HotelId, HotelName = x.Hotels.Name, StartDate = x.ReserveItems?.Where(y => y.IsDeleted == false)?.OrderByDescending(y => y.DateReservedFor)?.FirstOrDefault()?.DateReservedFor, EndDate = x.ReserveItems?.Where(y => y.IsDeleted == false)?.OrderBy(y => y.DateReservedFor)?.FirstOrDefault()?.DateReservedFor, NumberOfItems = x.ReserveItems?.Where(y => y.IsDeleted == false)?.Count() ?? 0, Status = OutgoingReservationGroupStatus.Parse(x.ReservationGroupStatus), UsersName = x?.AspNetUsers?.FirstName + " " + x?.AspNetUsers?.LastName, UsersEmail = x?.AspNetUsers?.Email }); }
public BeginTransactionGroupSummary BeginReservation(string currentUserId, BeginReservation reservationDetails) { var currentSummary = new BeginTransactionGroupSummary { OriginalObject = reservationDetails }; if ((reservationDetails?.Items?.Count() ?? 0) < 1) { currentSummary.Status.FailedCode = BeginTransactionGroupFailedCodes.NO_ITEMS_IN_RESERVATION; throw new BeginTransactionException { Summary = currentSummary }; } using (var dbTransaction = this.dbContext.Database.BeginTransaction()) { try { var currentUser = this.unitOfWork.Users.GetUserById(reservationDetails.UserId, reservationDetails.UserId); if (currentUser == null) { currentSummary.Status.FailedCode = BeginTransactionGroupFailedCodes.USER_NOT_FOUND; throw new BeginTransactionException { Summary = currentSummary }; } var currentHotel = this.unitOfWork.Hotels.GetHotelById(currentUser.Id, reservationDetails.HotelId); if (currentHotel == null) { currentSummary.Status.FailedCode = BeginTransactionGroupFailedCodes.HOTEL_NOT_FOUND; throw new BeginTransactionException { Summary = currentSummary }; } if (currentUser.Id == currentUserId) { var auth = this.CanUserAddReservation(currentUser.Id, currentHotel.Id); if (auth == false) { currentSummary.Status.FailedCode = BeginTransactionGroupFailedCodes.NOT_AUTHORIZED; throw new BeginTransactionException { Summary = currentSummary }; } } else { var auth = this.CanUserAddOtherReservations(currentUserId, currentHotel.Id); if (auth == false) { currentSummary.Status.FailedCode = BeginTransactionGroupFailedCodes.NOT_AUTHORIZED; throw new BeginTransactionException { Summary = currentSummary }; } } var currentTaxRate = currentHotel.TaxRate; var theNewReservationGroup = new ReservationGroup(); theNewReservationGroup.HotelId = reservationDetails.HotelId; theNewReservationGroup.UserId = reservationDetails.UserId; theNewReservationGroup.StatusId = Convert.ToInt32(ReservationGroupStatusEnum.PENDING); theNewReservationGroup.StatusDate = DateTime.UtcNow; theNewReservationGroup.StatusGuid = null; theNewReservationGroup.DateCreated = DateTime.UtcNow; this.dbContext.ReservationGroup.Add(theNewReservationGroup); currentSummary.Status.Valid = true; try { this.dbContext.SaveChanges(); } catch (Exception) { currentSummary.Status.FailedCode = BeginTransactionGroupFailedCodes.UNKNOWN_INVALID_GROUP; throw new BeginTransactionException { Summary = currentSummary }; } currentSummary.ReservationGroupId = theNewReservationGroup.Id; currentSummary.Status.Completed = true; decimal FinalOverallPrice = 0.0M; foreach (var item in reservationDetails.Items) { var currentItemSummary = new BeginTransactionItemSummary { OriginalObject = item }; currentSummary.ItemSummaries.Add(currentItemSummary); if (item == null) { currentItemSummary.Status.FailedCode = BeginTransactionItemFailedCodes.NULL_ITEM; throw new BeginTransactionException { Summary = currentSummary }; } if (item.Date == null) { currentItemSummary.Status.FailedCode = BeginTransactionItemFailedCodes.NULL_DAY; throw new BeginTransactionException { Summary = currentSummary }; } if (item.Date.Date.ToUniversalTime().Equals(DateTime.UtcNow.Date)) { currentItemSummary.Status.FailedCode = BeginTransactionItemFailedCodes.INVALID_SAME_DAY; throw new BeginTransactionException { Summary = currentSummary }; } var itemToReserve = this.unitOfWork.VenueItems.GetVenueItemById(currentUser.Id, item.ItemId); if (itemToReserve == null) { currentItemSummary.Status.FailedCode = BeginTransactionItemFailedCodes.ITEM_NOT_FOUND; throw new BeginTransactionException { Summary = currentSummary }; } if (item.Quantity <= 0) { currentItemSummary.Status.FailedCode = BeginTransactionItemFailedCodes.QUANTITY_TOO_SMALL; throw new BeginTransactionException { Summary = currentSummary }; } var newItem = new ReserveItems(); newItem.ItemId = item.ItemId; newItem.Quantity = item.Quantity; newItem.PricePreTax = itemToReserve.Price; newItem.TaxRate = (decimal)currentTaxRate; newItem.DateReservedFor = item.Date; newItem.FinalPrice = (newItem.PricePreTax + (1.0M * newItem.TaxRate)) * item.Quantity; theNewReservationGroup.ReserveItems.Add(newItem); currentItemSummary.Status.Valid = true; try { this.dbContext.SaveChanges(); } catch (Exception) { currentItemSummary.Status.FailedCode = BeginTransactionItemFailedCodes.UNKNOWN_ITEM_EXCEPTION; throw new BeginTransactionException { Summary = currentSummary }; } currentItemSummary.ReservationItemId = newItem.Id; currentItemSummary.Status.Completed = true; currentItemSummary.FinalPrice = newItem.FinalPrice; FinalOverallPrice += newItem.FinalPrice; } dbTransaction.Commit(); FinalOverallPrice = Math.Round(FinalOverallPrice * 100.0M) / 100.0M; //Must update controller if changed. Rounds to the nearest penny. currentSummary.FinalPrice = FinalOverallPrice; return(currentSummary); } catch (Exception) { dbTransaction.Rollback(); if (currentSummary != null) { currentSummary.ReservationGroupId = null; } throw new BeginTransactionException { Summary = currentSummary }; } } }
public ActionResult UpdatePetReservation(ReservationGroup reservationGroup) { throw new NotImplementedException(); }
private async Task InitPlane() { var airPortFrom = new Airport { Name = "Brussels Airport", Code = "BRS", Country = "BElGIUM" }; var airPortTo = new Airport { Name = "John F Kennedy (JFK). ", Code = "JFK", Country = "AMERICA" }; var plane = new Plane(new FlightInfo(airPortFrom, airPortTo, DateTime.Now, DateTime.Now.AddHours(8)), new Catalog()) { TailNumber = "LMAO42069", Type = "AIRBUS A380" }; for (var i = 1; i < 20; i++) { if (i < 4) { plane.AddSeat("A", i, FlightClass.Business); plane.AddSeat("B", i, FlightClass.Business); plane.AddSeat("C", i, FlightClass.Business); plane.AddSeat("D", i, FlightClass.Business); plane.AddSeat("E", i, FlightClass.Business); plane.AddSeat("F", i, FlightClass.Business); } else { plane.AddSeat("A", i, FlightClass.Economy); plane.AddSeat("B", i, FlightClass.Economy); plane.AddSeat("C", i, FlightClass.Economy); plane.AddSeat("D", i, FlightClass.Economy); plane.AddSeat("E", i, FlightClass.Economy); plane.AddSeat("F", i, FlightClass.Economy); } } _context.Plane.Add(plane); _context.SaveChanges(); plane = _context.Plane.Include(p => p.Seats).FirstOrDefault(); for (var i = 1; i < 20; i++) { var list = new List <string>() { "A", "B", "C", "D", "E", "F", }; foreach (var c in list) { var passenger = new Passenger() { ReservationCode = "resvcode" + i + c, UserName = "******" + i + c }; plane.AssingPassengerToSeat(passenger, c, i); var a = await _userManager.CreateAsync(passenger, "Test123!"); if (a != IdentityResult.Success) { continue; } } } for (var i = 0; i < 4; i++) { var crewMem = new CabinCrew() { UserName = "******" + i, }; var a = await _userManager.CreateAsync(crewMem, "Test123!"); if (a != IdentityResult.Success) { continue; } var crewManInit = await _userManager.FindByNameAsync("CrewMem" + i); plane.PutCrewManToWork(crewManInit as CabinCrew); } plane.Catalog = new Catalog(); plane.Catalog.Items = new List <CatalogItem>(); plane.Catalog.Items.AddRange((InitMovies.GetVideos())); plane.Catalog.Items.AddRange((AudioInit.GetAudio())); plane.Catalog.Items.AddRange((FoodInit.getFoods())); plane.Catalog.Items.AddRange((InitBeverage.GetBeverages())); // plane.Catalog.Items.Add(new); var passengrs = plane.Seats.Select(p => p.Passenger).OrderBy(p => p.Id).ToList(); var groups = SplitList <Passenger>(passengrs); foreach (var item in groups) { var group = new ReservationGroup { Passengers = new List <Passenger>() }; group.Passengers.AddRange(item); _context.ReservationGroups.Add(group); } _context.SaveChanges(); }
public HttpResponseMessage ProcessTransaction(IncomingProcessTransaction model) { return(ErrorFactory.Handle(() => { var userId = User?.Identity?.GetUserId(); if (string.IsNullOrWhiteSpace(userId)) { throw new Exception(); } var context = new PoolReservationEntities(); using (var unitOfWork = new UnitOfWork(context)) { PrepareAndGetReservationForProcessing_Result reservation = null; try { reservation = context.PrepareAndGetReservationForProcessing(model.ReservationId)?.FirstOrDefault(); } catch (Exception) { context.ChangeProcessingStatusToPending(model.ReservationId); } if (reservation == null) { try { context.ChangeProcessingStatusToPending(model.ReservationId); } catch (Exception) { } return JsonFactory.CreateJsonMessage(null, HttpStatusCode.NotFound, this.Request); } if (reservation.StatusId != Convert.ToInt32(ReservationGroupStatusEnum.PROCESSING)) { try { context.ChangeProcessingStatusToPending(model.ReservationId); } catch (Exception) { } return JsonFactory.CreateJsonMessage(new OutgoingMessage { Action = "wrongStatus" }, HttpStatusCode.NotFound, this.Request); } ReservationGroup reservationDBObject = null; try { reservationDBObject = unitOfWork.Reservations.GetReservationWithItems(userId, model.ReservationId); if (reservationDBObject == null) { return JsonFactory.CreateJsonMessage(null, HttpStatusCode.NotFound, this.Request); } } catch (Exception) { context.ChangeProcessingStatusToPending(model.ReservationId); } if (reservationDBObject.StatusId != Convert.ToInt32(ReservationGroupStatusEnum.PROCESSING)) { try { context.ChangeProcessingStatusToPending(model.ReservationId); } catch (Exception) { } return JsonFactory.CreateJsonMessage(new OutgoingMessage { Action = "wrongStatus" }, HttpStatusCode.NotFound, this.Request); } ReservationTransaction resTransaction = null; int stripeModifiedPriceInCents = 0; try { decimal priceToCharge = 0M; foreach (var item in reservationDBObject.ReserveItems) { if (item.IsDeleted == true) { continue; } priceToCharge += item.FinalPrice; } decimal stripeModifiedPrice = priceToCharge * 100.0M; stripeModifiedPriceInCents = (int)Math.Round(stripeModifiedPrice); //Must Update Repo If Changed. Rounds to the nearest penny. if (stripeModifiedPriceInCents <= 50) { return JsonFactory.CreateJsonMessage(new OutgoingMessage { Action = "noPriceToCharge" }, HttpStatusCode.NotFound, this.Request); } resTransaction = unitOfWork.Reservations.AddStripeChargeToPendingReservation(userId, userId, model.ReservationId, model.StripeTokenId, priceToCharge); unitOfWork.Complete(); } catch (Exception e) { context.ChangeProcessingStatusToPending(model.ReservationId); } string chargeId = null; try { if (resTransaction == null) { throw new Exception(); } var myCharge = new StripeChargeCreateOptions(); // always set these properties myCharge.Amount = stripeModifiedPriceInCents; myCharge.Currency = "usd"; // set this if you want to myCharge.Description = "JustMosey Reservation"; myCharge.SourceTokenOrExistingSourceId = model.StripeTokenId; // (not required) set this to false if you don't want to capture the charge yet - requires you call capture later myCharge.Capture = true; var chargeService = new StripeChargeService(); StripeCharge stripeCharge = chargeService.Create(myCharge); chargeId = stripeCharge.Id; unitOfWork.Reservations.UpdateStripeSuccessfulChargeOnPendingReservation(userId, userId, resTransaction.Id, chargeId); unitOfWork.Complete(); } catch (Exception e) { try { var refundService = new StripeRefundService(); StripeRefund refund = refundService.Create(chargeId, new StripeRefundCreateOptions() { Amount = stripeModifiedPriceInCents, Reason = StripeRefundReasons.Unknown }); } catch (Exception) { } try { unitOfWork.Reservations.RefundStripeSuccessfulChargeOnPendingReservation(userId, userId, resTransaction.Id); unitOfWork.Complete(); } catch (Exception) { } try { } catch (Exception) { context.ChangeProcessingStatusToPending(model.ReservationId); } return JsonFactory.CreateJsonMessage(new OutgoingMessage { Action = "unknownErrorAfterProcessing" }, HttpStatusCode.InternalServerError, this.Request); } try { var updatedReservationDBObject = unitOfWork.Reservations.GetReservationWithItems(userId, model.ReservationId); var outgoingRes = OutgoingReservationGroup.Parse(updatedReservationDBObject); return JsonFactory.CreateJsonMessage(outgoingRes, HttpStatusCode.OK, this.Request); } catch (Exception) { return JsonFactory.CreateJsonMessage(null, HttpStatusCode.OK, this.Request); } } }, this.Request)); }