99 lines
3.6 KiB
C#
99 lines
3.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using WhiteLagoon.Application.Common.Interfaces;
|
|
using WhiteLagoon.Application.Common.Utility;
|
|
using WhiteLagoon.Application.Services.Interface;
|
|
using WhiteLagoon.Domain.Entities;
|
|
|
|
namespace WhiteLagoon.Application.Services.Implementation
|
|
{
|
|
public class BookingService : IBookingService
|
|
{
|
|
private readonly IUnitOfWork _unitOfWork;
|
|
public BookingService(IUnitOfWork unitOfWork)
|
|
{
|
|
_unitOfWork = unitOfWork;
|
|
}
|
|
|
|
public void CreateBooking(Booking booking)
|
|
{
|
|
_unitOfWork.Booking.Add(booking);
|
|
_unitOfWork.Save();
|
|
}
|
|
|
|
public IEnumerable<Booking> GetAllBookings(string userId = "", string? statusFilterList = "")
|
|
{
|
|
IEnumerable<string> statusList = statusFilterList.ToLower().Split(",");
|
|
if(!string.IsNullOrEmpty(statusFilterList) && !string.IsNullOrEmpty(userId))
|
|
{
|
|
return _unitOfWork.Booking.GetAll(u => statusList.Contains(u.Status.ToLower()) &&
|
|
u.UserId == userId, includeProperties: "User,Villa");
|
|
}
|
|
else
|
|
{
|
|
if (!string.IsNullOrEmpty(statusFilterList))
|
|
{
|
|
return _unitOfWork.Booking.GetAll(u => statusList.Contains(u.Status.ToLower()), includeProperties: "User,Villa");
|
|
}
|
|
if (!string.IsNullOrEmpty(userId))
|
|
{
|
|
return _unitOfWork.Booking.GetAll(u => u.UserId == userId, includeProperties: "User,Villa");
|
|
}
|
|
}
|
|
return _unitOfWork.Booking.GetAll(includeProperties: "User, Villa");
|
|
}
|
|
|
|
public Booking GetBookingById(int bookingId)
|
|
{
|
|
return _unitOfWork.Booking.Get(u=>u.Id==bookingId,includeProperties: "User, Villa");
|
|
}
|
|
|
|
public IEnumerable<int> GetCheckedInVillaNumbers(int villaId)
|
|
{
|
|
return _unitOfWork.Booking.GetAll(u => u.VillaId == villaId && u.Status == SD.StatusCheckedIn)
|
|
.Select(u => u.VillaNumber);
|
|
}
|
|
|
|
public void UpdateStatus(int bookingId, string bookingStatus, int villaNumber = 0)
|
|
{
|
|
var bookingFromDb = _unitOfWork.Booking.Get(m => m.Id == bookingId, tracked:true);
|
|
if (bookingFromDb != null)
|
|
{
|
|
bookingFromDb.Status = bookingStatus;
|
|
if (bookingStatus == SD.StatusCheckedIn)
|
|
{
|
|
bookingFromDb.VillaNumber = villaNumber;
|
|
bookingFromDb.ActualCheckInDate = DateTime.Now;
|
|
}
|
|
if (bookingStatus == SD.StatusCompleted)
|
|
{
|
|
bookingFromDb.ActualCheckOutDate = DateTime.Now;
|
|
}
|
|
}
|
|
_unitOfWork.Save();
|
|
}
|
|
|
|
public void UpdateStripePaymentID(int bookingId, string sessionId, string paymentIntentId)
|
|
{
|
|
var bookingFromDb = _unitOfWork.Booking.Get(m => m.Id == bookingId, tracked: true);
|
|
if (bookingFromDb != null)
|
|
{
|
|
if (!string.IsNullOrEmpty(sessionId))
|
|
{
|
|
bookingFromDb.StripeSessionId = sessionId;
|
|
}
|
|
if (!string.IsNullOrEmpty(paymentIntentId))
|
|
{
|
|
bookingFromDb.StripePaymentIntentId = paymentIntentId;
|
|
bookingFromDb.PaymentDate = DateTime.Now;
|
|
bookingFromDb.IsPaymentSuccessful = true;
|
|
}
|
|
}
|
|
_unitOfWork.Save();
|
|
}
|
|
}
|
|
}
|