public ActionResult RevenueCalCulator(DateTime startDate, DateTime endDate) { int Sales = _context.Reports .Where(r => r.Date >= startDate) .Where(r => r.Date <= endDate) .Select(r => r.Price) .ToList() .Sum(); int Discount = _context.Bills .Where(r => r.Date >= startDate) .Where(r => r.Date <= endDate) .Select(b => b.Discount) .ToList() .Sum(); int revenue = Sales - Discount; //var currentMonthSale = _context.Reports // .Where(r => r.Date>= startDate) // .Where(r=>r.Date<=endDate) // .Select(r => r.Price) // .Sum(); //var currentMonthDiscount = _context.Bills // .Where(r => r.Date >= startDate) // .Where(r => r.Date <= endDate) // .Select(b => b.Discount) // .Sum(); //var currentMonthRevenue = currentMonthSale - currentMonthDiscount; var viewModel = new RevenueCalculatorViewModel { Revenue = revenue, StartDate = startDate, EndDate = endDate }; return(View(viewModel)); }
public ActionResult RevenueDetalis(RevenueCalculatorViewModel revenueCalculatorViewModel) { var startDate = revenueCalculatorViewModel.StartDate; var endDate = revenueCalculatorViewModel.EndDate; // var numberOfReports, number of patients, try to get graph of report numbers with nme,most referred doctor, and no of refered by him var reports = _context.Reports .Where(r => r.Date >= startDate) .Where(r => r.Date <= endDate) .Include(r => r.Patient) .Include(r => r.Doctor) .Include(r => r.TestTitle); int Sales = reports .Select(r => r.Price) .ToList() .Sum(); int Discount = _context.Bills .Where(r => r.Date >= startDate) .Where(r => r.Date <= endDate) .Select(b => b.Discount) .ToList() .Sum(); int revenue = Sales - Discount; var numberofReports = reports .Select(r => r.Id) .ToList() .Count(); var numberofPatients = reports.Select(r => r.PatientId) .ToHashSet() .ToList() .Count(); var testTitleIds = reports .Where(r => r.Date >= startDate) .Where(r => r.Date <= endDate) .Select(r => r.TestTitle.Id) .ToList(); var uniqueTestTitleIds = testTitleIds.ToHashSet(); var uniquetestTitleCounts = new List <int>(); foreach (var testTitleid in uniqueTestTitleIds) { var count = testTitleIds.Where(t => t == testTitleid).ToList().Count(); uniquetestTitleCounts.Add(count); } var uniqueTestTitles = new List <TestTitle>(); foreach (var id in uniqueTestTitleIds) { var testTitle = _context.TestTitles.Single(t => t.Id == id); uniqueTestTitles.Add(testTitle); } var doctorIdUniqueList = reports.Select(r => r.DoctorId).ToHashSet().ToList(); var doctorsList = reports.Select(r => r.DoctorId).ToList(); var doctorRefCounts = new List <int>(); foreach (var doctor in doctorIdUniqueList) { var count = doctorsList.Where(t => t == doctor).ToList().Count(); doctorRefCounts.Add(count); } var doctorsUniqueList = new List <Doctor>(); foreach (var doctorId in doctorIdUniqueList) { var doctor = _context.Doctors.Single(d => d.Id == doctorId); doctorsUniqueList.Add(doctor); } var uniqueDates = new List <DateTime>(); for (var sd = startDate; sd <= endDate; sd = sd.AddDays(1)) { uniqueDates.Add(sd); } var dateReportCounts = new List <int>(); foreach (var date in uniqueDates) { var count = reports.Where(r => r.Date == date).ToList().Count(); dateReportCounts.Add(count); } List <DataPoint> dataPoints = new List <DataPoint>(); for (int i = 0; i < uniqueTestTitles.Count(); i++) { dataPoints.Add(new DataPoint(uniqueTestTitles[i].Name, uniquetestTitleCounts[i])); } List <DataPoint> dataPoints1 = new List <DataPoint>(); for (int i = 0; i < uniqueDates.Count(); i++) { dataPoints1.Add(new DataPoint(string.Format("{0:d MMM yyyy}", uniqueDates[i]), dateReportCounts[i])); } List <DataPoint> dataPoints2 = new List <DataPoint>(); for (int i = 0; i < doctorsUniqueList.Count(); i++) { dataPoints2.Add(new DataPoint(doctorsUniqueList[i].Name, doctorRefCounts[i])); } var uniqueDateRevenues = new List <int>(); foreach (var date in uniqueDates) { var saleOnDate = reports.Where(r => r.Date == date).Select(r => r.Price).ToList().Sum(); var discountOnDate = _context.Bills.Where(b => b.Date == date).Select(b => b.Discount).ToList().Sum(); var revenueOnDate = saleOnDate - discountOnDate; uniqueDateRevenues.Add(revenueOnDate); } List <DataPoint> dataPoints3 = new List <DataPoint>(); for (int i = 0; i < uniqueDates.Count(); i++) { dataPoints3.Add(new DataPoint(string.Format("{0:d MMM yyyy}", uniqueDates[i]), uniqueDateRevenues[i])); } //string.Format("{0:d MMM yyyy}", item.Report.Date) //dataPoints.Add(new DataPoint("Albert", 10)); //dataPoints.Add(new DataPoint("Tim", 30)); //dataPoints.Add(new DataPoint("Wilson", 17)); //dataPoints.Add(new DataPoint("Joseph", 39)); //dataPoints.Add(new DataPoint("Robert", 30)); //dataPoints.Add(new DataPoint("Sophia", 25)); //dataPoints.Add(new DataPoint("Emma", 15)); ViewBag.DataPoints = JsonConvert.SerializeObject(dataPoints); ViewBag.DataPoints1 = JsonConvert.SerializeObject(dataPoints1); ViewBag.DataPoints2 = JsonConvert.SerializeObject(dataPoints2); ViewBag.DataPoints3 = JsonConvert.SerializeObject(dataPoints3); var billItems = _context.BillItems .Include(t => t.Report) .Include(t => t.Report.Doctor) .Include(t => t.Report.Patient) .Include(t => t.Report.TestTitle) .Include(t => t.Report.ConsultingPathologist) .Where(t => t.Report.Date >= startDate) .Where(r => r.Report.Date <= endDate) .ToList().OrderByDescending(t => t.BillId).ToList(); var viewModel = new RevenueDetailsViewModel { UniqueDoctorRefCounts = doctorRefCounts, EndDate = endDate, NumberOfPatients = numberofPatients, NumberOfReports = numberofReports, Revenue = revenue, StartDate = startDate, UniqueDates = uniqueDates, Billitems = billItems }; return(View(viewModel)); }