ддд
This commit is contained in:
parent
89b1399fb8
commit
755c3027c4
@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using UniversityContracts.ViewModels;
|
||||
|
||||
namespace UniversityContracts.BindingModels
|
||||
{
|
||||
public class StreamStudentBindingModel
|
||||
{
|
||||
public string FileType { get; set; } = string.Empty;
|
||||
public List<StudentViewModel> Students { get; set; } = new();
|
||||
}
|
||||
}
|
@ -116,6 +116,55 @@ namespace UniversityProvider.Controllers
|
||||
($"api/discipline/getnumberofpages?userId={APIClient.User.Id}");
|
||||
return View();
|
||||
}
|
||||
public IActionResult StreamStudentList()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public int[]? StreamStudentList([FromBody] StreamStudentBindingModel listModel)
|
||||
{
|
||||
if (APIClient.User == null)
|
||||
{
|
||||
return Array.Empty<int>();
|
||||
}
|
||||
byte[]? file = APIClient.PostRequestWithResult<StreamStudentBindingModel, byte[]>
|
||||
("api/reportprovider/streamstudentlist", listModel);
|
||||
return file!.Select(b => (int)b).ToArray();
|
||||
}
|
||||
|
||||
public IActionResult GetReport()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public List<ReportStreamStudentEdStatPeriodViewModel>? GetReport([FromBody] ReportBindingModel reportModel)
|
||||
{
|
||||
if (APIClient.User == null)
|
||||
{
|
||||
return new();
|
||||
}
|
||||
reportModel.UserId = APIClient.User.Id;
|
||||
reportModel.UserEmail = APIClient.User.Login;
|
||||
List<ReportStreamStudentEdStatPeriodViewModel>? list = APIClient.PostRequestWithResult<ReportBindingModel, List<ReportStreamStudentEdStatPeriodViewModel>>
|
||||
("api/reportprovider/getreportdata", reportModel);
|
||||
return list;
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public void SendByMailStatusReport([FromBody] ReportBindingModel reportModel)
|
||||
{
|
||||
if (APIClient.User == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
reportModel.UserId = APIClient.User.Id;
|
||||
reportModel.UserEmail = APIClient.User.Login;
|
||||
APIClient.PostRequest("api/reportprovider/sendbymailstatusreport", reportModel);
|
||||
}
|
||||
|
||||
|
||||
|
||||
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
|
||||
public IActionResult Error()
|
||||
|
44
UniversityCustomer/Views/Home/StreamStudentList.cshtml
Normal file
44
UniversityCustomer/Views/Home/StreamStudentList.cshtml
Normal file
@ -0,0 +1,44 @@
|
||||
@{
|
||||
ViewData["Title"] = "Список студентов по потокам";
|
||||
}
|
||||
|
||||
<div class="text-center">
|
||||
<h1 class="display-4">Список студентов по потокам</h1>
|
||||
</div>
|
||||
|
||||
<div id="error-div-shell" class="error-div-shell mb-2">
|
||||
<div>
|
||||
<p id="error-p" class="error-p"></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row justify-content-between">
|
||||
<select class="form-select" id="file-type">
|
||||
<option>docx</option>
|
||||
<option>xlsx</option>
|
||||
</select>
|
||||
|
||||
<button id="create-button" type="button" class="btn btn-primary mt-4">
|
||||
Получить список по выбранным записям
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="mt-4">
|
||||
<div class="scrollable-table">
|
||||
<table class="table table-bordered">
|
||||
<thead class="thead-light">
|
||||
<tr>
|
||||
<th>Имя</th>
|
||||
<th>Фамилия</th>
|
||||
<th>Дата рождения</th>
|
||||
<th>Номер студ. билета</th>
|
||||
<th>Статус обучения</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="scrollable-table__tbody">
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="~/js/report/reportlist.js" asp-append-version="true"></script>
|
@ -28,6 +28,12 @@
|
||||
<li class="nav-item">
|
||||
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Disciplines">Дисциплины</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="StreamStudentList">Получить список</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="GetReport">Получить отчёт</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
97
UniversityCustomer/wwwroot/js/report/reportlist.js
Normal file
97
UniversityCustomer/wwwroot/js/report/reportlist.js
Normal file
@ -0,0 +1,97 @@
|
||||
const createBtn = document.getElementById("create-button")
|
||||
const tbody = document.getElementById("scrollable-table__tbody")
|
||||
const nameInput = document.getElementById("name-input")
|
||||
var fileType = document.getElementById("file-type")
|
||||
var students = []
|
||||
var dataArray = [];
|
||||
const wordMIME = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
|
||||
const excelMIME = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
|
||||
|
||||
window.addEventListener('load', () => {
|
||||
$.ajax({
|
||||
url: "/student/getallbyuser",
|
||||
type: "GET",
|
||||
contentType: "json"
|
||||
}).done((result) => {
|
||||
students = result;
|
||||
students.forEach((student) => createRowForStudentsTable(student));
|
||||
});
|
||||
})
|
||||
|
||||
createBtn.addEventListener('click', () => {
|
||||
let listModel = {
|
||||
"Students": Array.from(dataArray),
|
||||
"FileType": fileType.value
|
||||
};
|
||||
$.ajax({
|
||||
url: "/home/streamstudentlist",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify(listModel)
|
||||
}).done((file) => {
|
||||
let byteArray = new Uint8Array(file);
|
||||
saveFile(byteArray, fileType);
|
||||
});
|
||||
})
|
||||
|
||||
const saveFile = async function (bytes, fileType) {
|
||||
if (window.showSaveFilePicker) {
|
||||
let type;
|
||||
if (fileType.value == "docx") {
|
||||
type = {
|
||||
description: "Microsoft Word (OpenXML)",
|
||||
accept: { [wordMIME]: [".docx"] }
|
||||
};
|
||||
} else if (fileType.value == "xlsx") {
|
||||
type = {
|
||||
description: "Microsoft Excel (OpenXML)",
|
||||
accept: { [excelMIME]: [".xlsx"] }
|
||||
};
|
||||
}
|
||||
|
||||
const opts = {
|
||||
suggestedName: `stream-student-list.${fileType.value}`,
|
||||
types: [type],
|
||||
};
|
||||
const handle = await showSaveFilePicker(opts);
|
||||
const writable = await handle.createWritable();
|
||||
await writable.write(bytes);
|
||||
writable.close();
|
||||
}
|
||||
}
|
||||
|
||||
const createRowForStudentsTable = (student) => {
|
||||
const { id, name, surname, dateOfBirth, studentCard, educationStatusName } = student;
|
||||
const row = tbody.insertRow();
|
||||
row.setAttribute("data-id", id);
|
||||
|
||||
const cells = [name, surname, formatDate(dateOfBirth), studentCard, educationStatusName];
|
||||
cells.forEach((value) => {
|
||||
const cell = row.insertCell();
|
||||
cell.textContent = value;
|
||||
});
|
||||
|
||||
row.addEventListener('click', () => addAndRemoveFromList(row));
|
||||
};
|
||||
|
||||
const formatDate = (dateString) => {
|
||||
const date = new Date(dateString);
|
||||
const year = date.getFullYear();
|
||||
const month = ('0' + (date.getMonth() + 1)).slice(-2);
|
||||
const day = ('0' + date.getDate()).slice(-2);
|
||||
return `${year}-${month}-${day}`;
|
||||
};
|
||||
|
||||
const addAndRemoveFromList = (row) => {
|
||||
var id = parseInt(row.dataset.id);
|
||||
console.log(students.find(x => x.id === id))
|
||||
var index = dataArray.indexOf(students.find(x => x.id === id));
|
||||
if (index === -1) {
|
||||
dataArray.push(students.find(x => x.id === id));
|
||||
row.classList.add("bg-success");
|
||||
} else {
|
||||
dataArray.splice(index, 1);
|
||||
row.classList.remove("bg-success");
|
||||
}
|
||||
console.log(dataArray);
|
||||
}
|
87
UniversityCustomer/wwwroot/js/report/reportpdf.js
Normal file
87
UniversityCustomer/wwwroot/js/report/reportpdf.js
Normal file
@ -0,0 +1,87 @@
|
||||
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 tbody = document.getElementById("tbody");
|
||||
|
||||
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);
|
||||
});
|
||||
});
|
||||
|
||||
const formatDate = (dateString) => {
|
||||
const date = new Date(dateString);
|
||||
const year = date.getFullYear();
|
||||
const month = ('0' + (date.getMonth() + 1)).slice(-2);
|
||||
const day = ('0' + date.getDate()).slice(-2);
|
||||
return `${year}-${month}-${day}`;
|
||||
};
|
||||
|
||||
sendByMailButton.addEventListener("click", () => {
|
||||
const dateFrom = new Date(dateFromInput.value);
|
||||
const dateTo = new Date(dateToInput.value);
|
||||
const reportModel = {
|
||||
"DateFrom": dateFrom,
|
||||
"DateTo": dateTo
|
||||
};
|
||||
$.ajax({
|
||||
url: "/home/sendbymailstatusreport",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify(reportModel)
|
||||
}).done(() => {
|
||||
alert("Отчет успешно отправлен на вашу почту!")
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
|
||||
const renderTable = (data) => {
|
||||
tbody.innerHTML = "";
|
||||
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
var streamData = data[i];
|
||||
var streamName = streamData.streamName;
|
||||
|
||||
for (var j = 0; j < streamData.studentStatus.length; j++) {
|
||||
var student = streamData.studentStatus[j];
|
||||
|
||||
if (j === 0) {
|
||||
var row = tbody.insertRow();
|
||||
var streamNameCell = row.insertCell()
|
||||
streamNameCell.textContent = streamName;
|
||||
var studentNameCell = row.insertCell();
|
||||
var dateOfAdmissionCell = row.insertCell();
|
||||
var studentStatusCell = row.insertCell();
|
||||
tbody.appendChild(row)
|
||||
}
|
||||
|
||||
var row = tbody.insertRow();
|
||||
var streamNameCell = row.insertCell()
|
||||
var studentNameCell = row.insertCell();
|
||||
studentNameCell.textContent = student.studentName;
|
||||
var dateOfAdmissionCell = row.insertCell();
|
||||
dateOfAdmissionCell.textContent = formatDate(student.dateOfAddmission);
|
||||
var studentStatusCell = row.insertCell();
|
||||
studentStatusCell.textContent = student.educationStatus;
|
||||
|
||||
tbody.appendChild(row);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user