Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        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();
        }