Пытался сделать отчеты

This commit is contained in:
Артём Алейкин 2023-05-25 01:59:24 +04:00
parent f108c6d8f0
commit a1a7f49996
11 changed files with 274 additions and 17 deletions

View File

@ -40,6 +40,11 @@ namespace CaseAccountingBusinessLogic.BusinessLogics
}
public List<ReportHearingSpecializationViewModel> GetHearingSpecialization(ReportBindingModel model)
{
throw new NotImplementedException();
}
/*public List<ReportHearingSpecializationViewModel> GetHearingSpecialization(ReportBindingModel model)
{
var result = _hearingStorage
.GetFilteredList(new HearingSearchModel { UserId = model.UserId })
@ -56,7 +61,7 @@ namespace CaseAccountingBusinessLogic.BusinessLogics
})
.ToList();
return result;
}
}*/
public List<ReportLawyerHearingViewModel> GetLawyersHearing(List<LawyerViewModel> lawyers)
{
@ -109,6 +114,44 @@ namespace CaseAccountingBusinessLogic.BusinessLogics
throw new NotImplementedException();
}
/*public List<ReportHearingSpecializationViewModel> GetHearingSpecialization(ReportBindingModel model)
{
var hearings = _hearingStorage.GetFilteredList(new HearingSearchModel
{
DateFrom = model.DateFrom,
DateTo = model.DateTo
});
var casesIds = hearings.Select(x => x.CaseId).ToList();
var cases = _caseStorage.GetFullList().Where(x => casesIds.Contains(x.Id));
List<SpecializationViewModel> specializations = new List<SpecializationViewModel>();
foreach (var _case in cases)
{
specializations.Add(_specializationStorage.GetElement(new SpecializationSearchModel { Id = _case.Id }));
}
*//*var reportRecords = new List<ReportHearingSpecializationViewModel>();
foreach (var _case in cases)
{
ReportHearingSpecializationViewModel reportData = new ReportHearingSpecializationViewModel();
reportData.Name = _case.Name;
var hearings = _caseStorage.GetCaseHearing(new() { Id = _case.Id });
var specialization = _caseStorage.GetCaseSpecialization(new() { Id = _case.Id });
reportData.hearings = hearings;
reportData.Specialization = specialization.Name;
reportRecords.Add(reportData);
}*//*
//return reportRecords;
}*/
/*public void SendByMailStatusReport(ReportBindingModel reportModel)
{
byte[] file = _pdfBuilder.GetHearingSpecializationReportFile(new()
@ -116,7 +159,7 @@ namespace CaseAccountingBusinessLogic.BusinessLogics
Title = "Отчет по слушаниям",
DateFrom = reportModel.DateFrom,
DateTo = reportModel.DateTo,
//Records = GetHearingLawyer(reportModel)
Records = GetHearingSpecialization(reportModel)
});
_mailSender.SendMailAsync(new()
{

View File

@ -136,25 +136,26 @@ namespace CaseAccountingBusinessLogic.OfficePackage
ParagraphAlignment = PdfParagraphAlignmentType.Center
});
CreateTable(new List<string> { "4cm", "5cm", "3cm", "3cm" });
CreateTable(new List<string> { "4cm", "2cm", "4cm", "2cm", "4cm" });
CreateRow(new PdfRowParameters
{
Texts = new List<string> { "Номер слушания", "Дело", "Дата проведения", "Юрист" },
Texts = new List<string> { "Продукт", "Блюдо", "Дата заказа", "Напиток", "Дата заказа" },
Style = "NormalTitle",
ParagraphAlignment = PdfParagraphAlignmentType.Center
});
foreach (var record in data.Records)
{
List<> casesAndLawyes = record.CaseLawyers;
int recordHeight = casesAndLawyes.Count + 1;
List<HearingViewModel> hearings = record.hearings;
string specialization = record.Specialization;
int recordHeight = Math.Max(hearings.Count + 1, 1);
for (int i = 0; i < recordHeight; i++)
{
List<string> cellsData = new() { "", "", "", "" };
List<string> cellsData = new() { "", "", "", "", "" };
if (i == 0)
{
cellsData[0] = record.Hearing;
cellsData[0] = record.Information;
CreateRow(new PdfRowParameters
{
Texts = cellsData,
@ -164,12 +165,13 @@ namespace CaseAccountingBusinessLogic.OfficePackage
continue;
}
int k = i - 1;
if (k < casesAndLawyes.Count)
if (k < hearings.Count)
{
cellsData[1] = casesAndLawyes[k].Case;
cellsData[2] = casesAndLawyes[k].Date.ToString("yyyy-MM-dd");
cellsData[3] = casesAndLawyes[k].Lawyer;
cellsData[1] = hearings[k].Id.ToString();
cellsData[2] = hearings[k].Date.ToString();
}
cellsData[3] = specialization;
CreateRow(new PdfRowParameters
{
Texts = cellsData,

View File

@ -21,5 +21,9 @@ namespace CaseAccountingContracts.SearchModels
public int? SpecializationId { get; set; }
public int? UserId { get; set; }
public DateTime? DateFrom { get; set; }
public DateTime? DateTo { get; set; }
}
}

View File

@ -15,5 +15,8 @@ namespace CaseAccountingContracts.SearchModels
public int? CaseId { get; set; }
public int? UserId { get; set; }
public DateTime? DateFrom { get; set; }
public DateTime? DateTo { get; set; }
}
}

View File

@ -18,6 +18,10 @@ namespace CaseAccountingContracts.StoragesContracts
CaseViewModel? Update(CaseBindingModel model);
CaseViewModel? Delete(CaseBindingModel model);
List<HearingViewModel> GetCaseHearing(CaseSearchModel model);
SpecializationViewModel GetCaseSpecialization(SpecializationSearchModel model);
List<CaseViewModel> GetCaseMTM(int lawyerId);
List<SpecializationCasesViewModel>? GetSpecializationCases();
}

View File

@ -9,10 +9,10 @@ namespace CaseAccountingContracts.ViewModels
{
public class ReportHearingSpecializationViewModel
{
public string Information { get; set; } = string.Empty;
public DateTime Date { get; set; }
public string Specialization { get; set; } = string.Empty;
public string Name { get; set; } = string.Empty;
public List<HearingViewModel> hearings { get; set; } = new();
}
}

View File

@ -117,5 +117,24 @@ namespace CaseAccountingCustomerView.Controllers
{
return View();
}
public IActionResult GetReport()
{
return View();
}
[HttpPost]
public List<ReportHearingSpecializationViewModel>? GetReport([FromBody] ReportBindingModel reportModel)
{
if (APIUser.User == null)
{
return new();
}
reportModel.UserId = APIUser.User.Id;
reportModel.UserEmail = APIUser.User.Login;
List<ReportHearingSpecializationViewModel>? list = APIUser.PostRequestWithResult<ReportBindingModel, List<ReportHearingSpecializationViewModel>>
("api/reportcustomer/getreportdata", reportModel);
return list;
}
}
}

View File

@ -1 +1,121 @@


const dateFromInput = document.getElementById("date-from-input");
const dateToInput = document.getElementById("date-to-input");
const generateButton = document.getElementById("generate-button");
const sendByMailButton = document.getElementById("send-by-mail-button");
const dateToSpan = document.getElementById("date-to-span");
const dateFromSpan = document.getElementById("date-from-span");
const dateFrom = new Date(dateFromInput.value);
const dateTo = new Date(dateToInput.value);
const reportModel = {
"DateFrom": dateFrom,
"DateTo": dateTo
};
const tbody = document.getElementById("tbody");
function sendByMail() {
$.ajax({
url: "/home/sendbymailstatusreport",
type: "POST",
contentType: "application/json",
data: JSON.stringify(reportModel)
}).done(() => {
alert("Отчет успешно отправлен на вашу почту!")
});
}
generateButton.addEventListener("click", () => {
const dateFrom = new Date(dateFromInput.value);
const dateTo = new Date(dateToInput.value);
const reportModel = {
"DateFrom": dateFrom,
"DateTo": dateTo
};
$.ajax({
url: "/home/getreport",
type: "POST",
contentType: "application/json",
data: JSON.stringify(reportModel)
}).done((data) => {
dateFromSpan.innerHTML = reportModel["DateFrom"].toLocaleDateString();
dateToSpan.innerHTML = reportModel["DateTo"].toLocaleDateString();
renderTable(data);
});
});
function populateTable(data) {
tbody.innerHTML = ""; // Clear the tbody before populating with new data
// Find the maximum length between dishes and alcohol drinks
let maxLength = 0;
data.forEach((item) => {
maxLength = Math.max(maxLength, item.hearings, 1);
});
// Loop through the data and create table rows
data.forEach((item) => {
const caseName = item.caseName;
const hearings = item.hearings;
const specialization = item.specialization;
for (let i = 0; i < maxLength; i++) {
// Create a new row for each product, but without the productNameCell for additional dishes or drinks
const row = document.createElement("tr");
if (i === 0) {
// Create the productNameCell and set the rowSpan attribute
const caseNameCell = document.createElement("td");
caseNameCell.textContent = caseName;
caseNameCell.rowSpan = maxLength; // Set the rowSpan to the maximum length
row.appendChild(caseNameCell);
}
if (i < hearings.length) {
// Create cells for dishes if available
const hearing = hearings[i];
const hearingId = hearing.hearingId;
const hearingDate = new Date(hearing.Date);
const hearingNumberCell = document.createElement("td");
hearingNumberCell.textContent = hearingId;
row.appendChild(hearingNumberCell);
const hearingDateCell = document.createElement("td");
if (hearing.dateCreate === null) {
hearingDateCell.textContent = ""
}
else {
hearingDateCell.textContent = formatDate(hearingDate); // Format the date
} row.appendChild(hearingDateCell);
} else {
// Create empty cells for dishes if not available
const emptyCell = document.createElement("td");
row.appendChild(emptyCell);
row.appendChild(emptyCell.cloneNode());
}
if (i < 1) {
// Create cells for alcohol drinks if available
const specialization = specialization;
const specializationId = specialization.specializationId;
const specializationNumberCell = document.createElement("td");
specializationNumberCell.textContent = specializationId;
row.appendChild(specializationNumberCell);
const specializationDateCell = document.createElement("td");
console.log(drink.dateCreate === null);
row.appendChild(specializationDateCell);
} else {
// Create empty cells for alcohol drinks if not available
const emptyCell = document.createElement("td");
row.appendChild(emptyCell);
row.appendChild(emptyCell.cloneNode());
}
tbody.appendChild(row);
}
});
}

View File

@ -110,6 +110,15 @@ namespace CaseAccountingDataBaseImplement.Implements
.Select(x => x.GetViewModel)
.ToList();
}
else if (model.DateFrom != null && model.DateTo != null)
{
return context.Cases
.Include(x => x.Specialization)
.Include(x => x.User)
.Where(x => x.Date >= model.DateFrom && x.Date <= model.DateTo)
.Select(x => x.GetViewModel)
.ToList();
}
else
{
return new();
@ -202,5 +211,34 @@ namespace CaseAccountingDataBaseImplement.Implements
return result;
}
public List<HearingViewModel> GetCaseHearing(CaseSearchModel model)
{
if (model == null)
{
return new();
}
using var context = new CaseAccountingDatabase();
var hearing = context.Hearings.
Where(x => x.CaseId == model.Id).
Select(x => x.GetViewModel).
ToList();
return hearing;
}
public SpecializationViewModel GetCaseSpecialization(SpecializationSearchModel model)
{
if (model == null)
{
return new();
}
using var context = new CaseAccountingDatabase();
var specialization = context.Specializations.
FirstOrDefault(x => x.Id == model.Id)?.
GetViewModel;
return specialization;
}
}
}

View File

@ -83,6 +83,15 @@ namespace CaseAccountingDataBaseImplement.Implements
.Select(x => x.GetViewModel)
.ToList();
}
else if (model.DateFrom != null && model.DateTo != null)
{
return context.Hearings
.Include(x => x.Case)
.Include(x => x.User)
.Where(x => x.Date <= model.DateTo && x.Date >= model.DateFrom)
.Select(x => x.GetViewModel)
.ToList();
}
else
{
return new();

View File

@ -1,5 +1,6 @@
using CaseAccountingContracts.BindingModels;
using CaseAccountingContracts.BusinessLogicContracts;
using CaseAccountingContracts.ViewModels;
using Microsoft.AspNetCore.Mvc;
namespace CaseAccountingRestApi.Controllers
@ -21,5 +22,19 @@ namespace CaseAccountingRestApi.Controllers
byte[] file = reportLogic.SaveListFile(listModel);
return file;
}
[HttpPost]
public List<ReportHearingSpecializationViewModel> GetReportData(ReportBindingModel reportModel)
{
var list = reportLogic.GetHearingSpecialization(reportModel);
return list;
}
[HttpPost]
public void SendByMailStatusReport(ReportBindingModel reportModel)
{
reportLogic.SendByMailStatusReport(reportModel);
}
}
}