public IActionResult RaisePayment([FromBody] PaymentRequest request) { if (ModelState.IsValid) { var user = _context.Users.SingleOrDefault(u => request.Email.Trim().Equals(u.Email, StringComparison.OrdinalIgnoreCase)); if (user == null) { user = new User { Email = request.Email.Trim().ToLower() }; SetUserDetails(request, user); _context.Users.Add(user); } else { SetUserDetails(request, user); _context.Users.Update(user); } _context.SaveChanges(); var bookingExists = _context.Bookings.Any(x => x.ActivityID == request.ActivityID && x.UserID == user.Id && (x.PaymentStatus == PaymentStatus.Successful || (x.PaymentType == PaymentType.Cash && x.PaymentStatus != PaymentStatus.Failed))); if (bookingExists) { return(Json(new Response { Code = "XX", Description = "You have already booked for this activity before." })); } var activity = _context.Activities .Include(x => x.ActivityType) .Include(x => x.Location) .SingleOrDefault(a => a.Id == request.ActivityID); if (activity == null || !activity.IsActive) { return(Json(new Response { Code = "XX", Description = "Activity not found" })); } var bookingsCount = _context.Bookings.Count(a => a.ActivityID == request.ActivityID && (a.PaymentStatus == PaymentStatus.Successful || (a.PaymentType == PaymentType.Cash && a.PaymentStatus != PaymentStatus.Failed))); if (bookingsCount >= activity.Capacity) { return(Json(new Response { Code = "XX", Description = "No space left, you can try again later." })); } var totalAmount = activity.Amount * request.NoOfSpaces; var booking = CreateBooking(request, user, activity, totalAmount); _context.Bookings.Add(booking); _context.SaveChanges(); if (request.PaymentType == PaymentType.Cash) { SendCashBookingEmail(request, booking); } if (request.PaymentType == PaymentType.Online) { totalAmount = decimal.Parse(((totalAmount + 150) / (decimal)0.985).ToString("0")); } return(Json(new Response { Code = "00", Description = "Successful", Amount = (totalAmount * 100), Email = user.Email, Ref = booking.TransactionRef, PaymentType = booking.PaymentType })); } return(Json(null)); }
public static void Initialize(RetreatDBContext context) { context.Database.EnsureCreated(); if (!context.ActivityTypes.Any()) { var activityTypes = new ActivityType[] { new ActivityType { Name = "Retreat", Description = "Retreat" }, new ActivityType { Name = "Workshop", Description = "Workshop" } }; context.ActivityTypes.AddRange(activityTypes); } if (!context.Settings.Any()) { var settings = new Setting[] { new Setting { Name = SupportEmail, Value = "[email protected], [email protected]" }, new Setting { Name = SupportPhone, Value = "08020577959" }, new Setting { Name = BankName, Value = "Access Bank" }, new Setting { Name = AccountName, Value = "Wetland Booking" }, new Setting { Name = AccountNumber, Value = "0768518344" }, }; context.Settings.AddRange(settings); } if (!context.Centres.Any()) { var centres = new Centre[] { new Centre { Name = "Abuja" }, new Centre { Name = "Ekulu" }, new Centre { Name = "Eleko" }, new Centre { Name = "Helmbridge" }, new Centre { Name = "Irawo" }, new Centre { Name = "Ugwuoma" }, new Centre { Name = "VI Centre" } }; context.Centres.AddRange(centres); } context.SaveChanges(); }