repository migration

This commit is contained in:
2025-05-20 11:46:50 -04:00
commit bf536b8774
213 changed files with 117679 additions and 0 deletions
@@ -0,0 +1,156 @@
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.Web.ViewModels;
namespace WhiteLagoon.Application.Services.Implementation
{
public class DashboardService : IDashboardService
{
private readonly IUnitOfWork _unitOfWork;
static int previousMonth = DateTime.Now.Month == 1 ? 12 : DateTime.Now.Month - 1;
readonly DateTime previousMonthStartDate = new(DateTime.Now.Year, previousMonth, 1);
readonly DateTime currentMonthStartDate = new(DateTime.Now.Year, DateTime.Now.Month, 1);
public DashboardService(IUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
}
public async Task<PieChartDto> GetBookingPieChartData()
{
var totalBookings = _unitOfWork.Booking.GetAll(u => u.BookingDate >= DateTime.Now.AddDays(-30) &&
(u.Status != SD.StatusPending || u.Status == SD.StatusCancelled));
var customerWithOneBooking = totalBookings.GroupBy(b => b.UserId).Where(x => x.Count() == 1).Select(x => x.Key).ToList();
int bookingsByNewCustomer = customerWithOneBooking.Count();
int bookingsByReturningCustomer = totalBookings.Count() - bookingsByNewCustomer;
PieChartDto PieChartDto = new()
{
Labels = new string[] { "New Customer Bookings", "Returning Customer Bookings" },
Series = new decimal[] { bookingsByNewCustomer, bookingsByReturningCustomer }
};
return PieChartDto;
}
public async Task<LineChartDto> GetMemberAndBookingLineChartData()
{
var bookingData = _unitOfWork.Booking.GetAll(u => u.BookingDate >= DateTime.Now.AddDays(-30) &&
u.BookingDate.Date <= DateTime.Now)
.GroupBy(b => b.BookingDate.Date)
.Select(u => new {
DateTime = u.Key,
NewBookingCount = u.Count()
});
var customerData = _unitOfWork.User.GetAll(u => u.CreatedAt >= DateTime.Now.AddDays(-30) &&
u.CreatedAt.Date <= DateTime.Now)
.GroupBy(b => b.CreatedAt.Date)
.Select(u => new {
DateTime = u.Key,
NewCustomerCount = u.Count()
});
var leftJoin = bookingData.GroupJoin(customerData, booking => booking.DateTime, customer => customer.DateTime,
(booking, customer) => new
{
booking.DateTime,
booking.NewBookingCount,
NewCustomerCount = customer.Select(x => x.NewCustomerCount).FirstOrDefault()
});
var rightJoin = customerData.GroupJoin(bookingData, customer => customer.DateTime, booking => booking.DateTime,
(customer, booking) => new
{
customer.DateTime,
NewBookingCount = booking.Select(x => x.NewBookingCount).FirstOrDefault(),
customer.NewCustomerCount
});
var mergedData = leftJoin.Union(rightJoin).OrderBy(x => x.DateTime).ToList();
var newBookingData = mergedData.Select(x => x.NewBookingCount).ToArray();
var newCustomerData = mergedData.Select(x => x.NewCustomerCount).ToArray();
var categories = mergedData.Select(x => x.DateTime.ToString("MM/dd/yyyy")).ToArray();
List<ChartData> chartDataList = new()
{
new ChartData
{
Name = "New Bookings",
Data = newBookingData
},
new ChartData
{
Name = "New Members",
Data = newCustomerData
},
};
LineChartDto LineChartDto = new()
{
Categories = categories,
Series = chartDataList
};
return LineChartDto;
}
public async Task<RadialBarChartDto> GetRegisteredUserChartData()
{
var totalUsers = _unitOfWork.User.GetAll();
var countByCurrentMonth = totalUsers.Count(u => u.CreatedAt >= currentMonthStartDate &&
u.CreatedAt <= DateTime.Now);
var countByPreviousMonth = totalUsers.Count(u => u.CreatedAt >= previousMonthStartDate &&
u.CreatedAt <= currentMonthStartDate);
return SD.GetRadialCartDataModel(totalUsers.Count(), countByCurrentMonth, countByPreviousMonth);
}
public async Task<RadialBarChartDto> GetRevenueChartData()
{
var totalBookings = _unitOfWork.Booking.GetAll(u => u.Status != SD.StatusPending
|| u.Status == SD.StatusCancelled);
var totalRevenue = Convert.ToInt32(totalBookings.Sum(u => u.TotalCost));
var countByCurrentMonth = totalBookings.Where(u => u.BookingDate >= currentMonthStartDate &&
u.BookingDate <= DateTime.Now).Sum(u => u.TotalCost);
var countByPreviousMonth = totalBookings.Where(u => u.BookingDate >= previousMonthStartDate &&
u.BookingDate <= currentMonthStartDate).Sum(u => u.TotalCost);
return SD.GetRadialCartDataModel(totalRevenue, countByCurrentMonth, countByPreviousMonth);
}
public async Task<RadialBarChartDto> GetTotalBookingRadialChartData()
{
var totalBookings = _unitOfWork.Booking.GetAll(u => u.Status != SD.StatusPending
|| u.Status == SD.StatusCancelled);
var countByCurrentMonth = totalBookings.Count(u => u.BookingDate >= currentMonthStartDate &&
u.BookingDate <= DateTime.Now);
var countByPreviousMonth = totalBookings.Count(u => u.BookingDate >= previousMonthStartDate &&
u.BookingDate <= currentMonthStartDate);
return SD.GetRadialCartDataModel(totalBookings.Count(), countByCurrentMonth, countByPreviousMonth);
}
}
}