ScientificReport
TeacherReportController.cs
Go to the documentation of this file.
1 using System;
2 using System.Linq;
3 using Microsoft.AspNetCore.Authorization;
4 using Microsoft.AspNetCore.Mvc;
5 using Microsoft.EntityFrameworkCore;
6 using Rotativa.AspNetCore;
12 
13 namespace ScientificReport.Controllers
14 {
15  [Authorize(Roles = UserProfileRole.Teacher)]
16  public class TeacherReportController : Controller
17  {
18  private readonly ITeacherReportService _teacherReportService;
19  private readonly IUserProfileService _userProfileService;
20  private readonly IPublicationService _publicationService;
21  private readonly IArticleService _articleService;
22  private readonly IScientificWorkService _scientificWorkService;
23  private readonly IReportThesisService _reportThesisService;
24  private readonly IMembershipService _membershipService;
25  private readonly IGrantService _grantService;
26  private readonly IOppositionService _oppositionService;
27  private readonly IPatentLicenseActivityService _patentService;
28  private readonly IPostgraduateDissertationGuidanceService _postgraduateDissertationGuidanceService;
29  private readonly IPostgraduateGuidanceService _postgraduateGuidanceService;
30  private readonly IReviewService _reviewService;
31  private readonly IScientificConsultationService _scientificConsultationService;
32  private readonly IScientificInternshipService _scientificInternshipService;
33  private readonly IDepartmentService _departmentService;
34 
36  ITeacherReportService teacherReportService,
37  IUserProfileService userProfileService,
38  IArticleService articleService,
39  IScientificWorkService scientificWorkService,
40  IReportThesisService reportThesisService,
41  IMembershipService membershipService,
42  IGrantService grantService,
43  IOppositionService oppositionService,
44  IPatentLicenseActivityService patentService,
45  IPostgraduateDissertationGuidanceService postgraduateDissertationGuidanceService,
46  IPostgraduateGuidanceService postgraduateGuidanceService,
47  IReviewService reviewService,
48  IScientificConsultationService scientificConsultationService,
49  IScientificInternshipService scientificInternshipService,
50  IPublicationService publicationService,
51  IDepartmentService departmentService
52  )
53  {
54  _teacherReportService = teacherReportService;
55  _userProfileService = userProfileService;
56  _publicationService = publicationService;
57  _articleService = articleService;
58  _scientificWorkService = scientificWorkService;
59  _reportThesisService = reportThesisService;
60  _membershipService = membershipService;
61  _grantService = grantService;
62  _oppositionService = oppositionService;
63  _patentService = patentService;
64  _postgraduateDissertationGuidanceService = postgraduateDissertationGuidanceService;
65  _postgraduateGuidanceService = postgraduateGuidanceService;
66  _reviewService = reviewService;
67  _scientificConsultationService = scientificConsultationService;
68  _scientificInternshipService = scientificInternshipService;
69  _departmentService = departmentService;
70  }
71 
72  // GET: Report
73  public IActionResult Index()
74  {
75  return View(_teacherReportService.GetAll());
76  }
77 
78  // GET: Report/Details/{id}
79  public IActionResult Details(Guid? id)
80  {
81  if (id == null)
82  {
83  return NotFound();
84  }
85 
86  var report = _teacherReportService.GetById(id.Value);
87  if (report == null)
88  {
89  return NotFound();
90  }
91 
92  return View(report);
93  }
94 
95  // GET: Report/Print/{id}
96  public IActionResult Print(Guid? id)
97  {
98  if (id == null)
99  {
100  return NotFound();
101  }
102 
103 // ViewData["Message"] = "Your application description page.";
104  var report = _teacherReportService.GetById(id.Value);
105 
106  var filename = $"{report.Teacher.UserName}-{report.Created}_report.pdf";
107 
108  // TODO: delete the next row, when the development is finished
109  filename = null;
110 
111  var department = _departmentService.Get(
112  d => d.Staff.Contains(_userProfileService.Get(User))
113  );
114  ViewData["department"] = department != null ? department.Title : "undefined";
115 
116  return new ViewAsPdf(report, ViewData)
117  {
118  FileName = filename
119  };
120  }
121 
122  // GET: Report/Create
123  public IActionResult Create()
124  {
125  var viewModel = new TeacherReportCreateViewModel
126  {
127  UserId = _userProfileService.Get(u => u.UserName == HttpContext.User.Identity.Name).Id,
128  Users = _userProfileService.GetAll()
129  };
130 
131  return View(viewModel);
132  }
133 
134  // POST: Report/Create
135  [HttpPost]
136  [ValidateAntiForgeryToken]
137  public IActionResult Create(Guid userId)
138  {
139  if (!ModelState.IsValid)
140  {
141  var viewModel = new TeacherReportCreateViewModel
142  {
143  UserId = _userProfileService.Get(u => u.UserName == HttpContext.User.Identity.Name).Id,
144  Users = _userProfileService.GetAll()
145  };
146 
147  ModelState.AddModelError("key", "Failed to create");
148  return View(viewModel);
149  }
150 
151  var report = new TeacherReport
152  {
153  Teacher = _userProfileService.GetById(userId)
154  };
155 
156  _teacherReportService.CreateItem(report);
157  return RedirectToAction(nameof(Index));
158  }
159 
160 
161  // GET: Report/Edit/{id}
162  public IActionResult Edit(Guid? id)
163  {
164  if (id == null)
165  {
166  return NotFound();
167  }
168 
169  var report = _teacherReportService.GetById(id.Value);
170  if (report == null)
171  {
172  return NotFound();
173  }
174 
175  var user = _userProfileService.Get(u => u.UserName == HttpContext.User.Identity.Name);
176 
177  var data = new TeacherReportEditViewModel
178  {
179  TeacherReport = report,
180  Users = _userProfileService.GetAll(),
181  Publications = _publicationService.GetAll()
182  .OrderByDescending(p => report.TeacherReportsPublications.Any(tp => tp.Publication.Id == p.Id))
183  .ThenByDescending(p => p.UserProfilesPublications.Any(u => u.UserProfile.Id == user.Id))
184  .ThenBy(p => p.Title),
185  Articles = _articleService.GetAll(),
186  ScientificWorks = _scientificWorkService.GetAll(),
187  ReportTheses = _reportThesisService.GetAll(),
188  Grants = _grantService.GetAll(),
189  ScientificInternships = _scientificInternshipService.GetAll(),
190  PostgraduateGuidances = _postgraduateGuidanceService.GetAll(),
191  ScientificConsultations = _scientificConsultationService.GetAll(),
192  PostgraduateDissertationGuidances = _postgraduateDissertationGuidanceService.GetAll(),
193  Reviews = _reviewService.GetAll(),
194  Oppositions = _oppositionService.GetAll(),
195  Patents = _patentService.GetAll(),
196  Memberships = _membershipService.GetAll()
197  };
198  return View(data);
199  }
200 
201  // POST: Report/Edit/{id}
202  [HttpPost]
203  [ValidateAntiForgeryToken]
204  public IActionResult Edit(Guid id, TeacherReportEditViewModel data)
205  {
206  if (id != data.TeacherReport.Id)
207  {
208  return NotFound();
209  }
210 
211  if (!ModelState.IsValid)
212  {
213  data.Publications = _publicationService.GetAll();
214  data.Users = _userProfileService.GetAll();
215 
216  return View(data);
217  }
218 
219  data.TeacherReport.Teacher = _userProfileService.GetById(data.TeacherReport.Teacher.Id);
220 
221  try
222  {
223  _teacherReportService.UpdateItem(data.TeacherReport);
224  }
225  catch (DbUpdateConcurrencyException)
226  {
227  if (!_teacherReportService.Exists(data.TeacherReport.Id))
228  return NotFound();
229  Console.WriteLine();
230  throw;
231  }
232 
233  return RedirectToAction(nameof(Index));
234  }
235 
236  // GET: Report/Delete/{id}
237  public IActionResult Delete(Guid? id)
238  {
239  if (id == null)
240  {
241  return NotFound();
242  }
243 
244  var report = _teacherReportService.GetById(id.Value);
245  if (report == null)
246  {
247  return NotFound();
248  }
249 
250  return View(report);
251  }
252 
253  // POST: TeacherReport/Delete/{id}
254  [HttpPost, ActionName("Delete")]
255  [ValidateAntiForgeryToken]
256  public IActionResult DeleteConfirmed(Guid id)
257  {
258  _teacherReportService.DeleteById(id);
259  return RedirectToAction(nameof(Index));
260  }
261 
262  // POST: TeacherReport/AddAuthor/5
263  [HttpPost]
264 // [ValidateAntiForgeryToken]
265  public IActionResult AddPublication(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
266  {
267  _teacherReportService.AddPublication(id, request.EntityId);
268  return Json(ApiResponse.Ok);
269  }
270 
271  // POST: TeacherReport/DeleteAuthor/5
272  [HttpPost]
273 // [ValidateAntiForgeryToken]
274  public IActionResult DeletePublication(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
275  {
276  _teacherReportService.RemovePublication(id, request.EntityId);
277  return Json(ApiResponse.Ok);
278  }
279 
280  [HttpPost]
281  public IActionResult AddArticle(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
282  {
283  _teacherReportService.AddArticle(id, request.EntityId);
284  return Json(ApiResponse.Ok);
285  }
286 
287  [HttpPost]
288  public IActionResult DeleteArticle(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
289  {
290  _teacherReportService.RemoveArticle(id, request.EntityId);
291  return Json(ApiResponse.Ok);
292  }
293 
294  [HttpPost]
295  public IActionResult AddScientificWork(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
296  {
297  _teacherReportService.AddScientificWork(id, request.EntityId);
298  return Json(ApiResponse.Ok);
299  }
300 
301  [HttpPost]
302  public IActionResult DeleteScientificWork(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
303  {
304  _teacherReportService.RemoveScientificWork(id, request.EntityId);
305  return Json(ApiResponse.Ok);
306  }
307 
308  [HttpPost]
309  public IActionResult AddReportThesis(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
310  {
311  _teacherReportService.AddReportThesis(id, request.EntityId);
312  return Json(ApiResponse.Ok);
313  }
314 
315  [HttpPost]
316  public IActionResult DeleteReportThesis(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
317  {
318  _teacherReportService.RemoveReportThesis(id, request.EntityId);
319  return Json(ApiResponse.Ok);
320  }
321 
322  [HttpPost]
323  public IActionResult AddGrant(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
324  {
325  _teacherReportService.AddGrant(id, request.EntityId);
326  return Json(ApiResponse.Ok);
327  }
328 
329  [HttpPost]
330  public IActionResult DeleteGrant(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
331  {
332  _teacherReportService.RemoveGrant(id, request.EntityId);
333  return Json(ApiResponse.Ok);
334  }
335  [HttpPost]
336  public IActionResult AddScientificInternship(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
337  {
338  _teacherReportService.AddScientificInternship(id, request.EntityId);
339  return Json(ApiResponse.Ok);
340  }
341 
342  [HttpPost]
343  public IActionResult DeleteScientificInternship(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
344  {
345  _teacherReportService.RemoveScientificInternship(id, request.EntityId);
346  return Json(ApiResponse.Ok);
347  }
348  [HttpPost]
349  public IActionResult AddPostgraduateGuidance(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
350  {
351  _teacherReportService.AddPostgraduateGuidance(id, request.EntityId);
352  return Json(ApiResponse.Ok);
353  }
354 
355  [HttpPost]
356  public IActionResult DeletePostgraduateGuidance(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
357  {
358  _teacherReportService.RemovePostgraduateGuidance(id, request.EntityId);
359  return Json(ApiResponse.Ok);
360  }
361  [HttpPost]
362  public IActionResult AddScientificConsultation(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
363  {
364  _teacherReportService.AddScientificConsultation(id, request.EntityId);
365  return Json(ApiResponse.Ok);
366  }
367 
368  [HttpPost]
369  public IActionResult DeleteScientificConsultation(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
370  {
371  _teacherReportService.RemoveScientificConsultation(id, request.EntityId);
372  return Json(ApiResponse.Ok);
373  }
374  [HttpPost]
375  public IActionResult AddPostgraduateDissertationGuidance(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
376  {
377  _teacherReportService.AddPostgraduateDissertationGuidance(id, request.EntityId);
378  return Json(ApiResponse.Ok);
379  }
380 
381  [HttpPost]
382  public IActionResult DeletePostgraduateDissertationGuidance(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
383  {
384  _teacherReportService.RemovePostgraduateDissertationGuidance(id, request.EntityId);
385  return Json(ApiResponse.Ok);
386  }
387  [HttpPost]
388  public IActionResult AddReview(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
389  {
390  _teacherReportService.AddReview(id, request.EntityId);
391  return Json(ApiResponse.Ok);
392  }
393 
394  [HttpPost]
395  public IActionResult DeleteReview(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
396  {
397  _teacherReportService.RemoveReview(id, request.EntityId);
398  return Json(ApiResponse.Ok);
399  }
400  [HttpPost]
401  public IActionResult AddOpposition(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
402  {
403  _teacherReportService.AddOpposition(id, request.EntityId);
404  return Json(ApiResponse.Ok);
405  }
406 
407  [HttpPost]
408  public IActionResult DeleteOpposition(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
409  {
410  _teacherReportService.RemoveOpposition(id, request.EntityId);
411  return Json(ApiResponse.Ok);
412  }
413  [HttpPost]
414  public IActionResult AddPatent(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
415  {
416  _teacherReportService.AddPatent(id, request.EntityId);
417  return Json(ApiResponse.Ok);
418  }
419 
420  [HttpPost]
421  public IActionResult DeletePatent(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
422  {
423  _teacherReportService.RemovePatent(id, request.EntityId);
424  return Json(ApiResponse.Ok);
425  }
426 
427  [HttpPost]
428  public IActionResult AddMembership(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
429  {
430  _teacherReportService.AddMembership(id, request.EntityId);
431  return Json(ApiResponse.Ok);
432  }
433 
434  [HttpPost]
435  public IActionResult DeleteMembership(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
436  {
437  _teacherReportService.RemoveMembership(id, request.EntityId);
438  return Json(ApiResponse.Ok);
439  }
440  }
441 }
IActionResult DeleteOpposition(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
IActionResult DeleteScientificConsultation(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
IActionResult DeleteScientificInternship(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
IActionResult AddOpposition(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
IActionResult DeletePatent(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
IActionResult AddPostgraduateDissertationGuidance(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
TeacherReportController(ITeacherReportService teacherReportService, IUserProfileService userProfileService, IArticleService articleService, IScientificWorkService scientificWorkService, IReportThesisService reportThesisService, IMembershipService membershipService, IGrantService grantService, IOppositionService oppositionService, IPatentLicenseActivityService patentService, IPostgraduateDissertationGuidanceService postgraduateDissertationGuidanceService, IPostgraduateGuidanceService postgraduateGuidanceService, IReviewService reviewService, IScientificConsultationService scientificConsultationService, IScientificInternshipService scientificInternshipService, IPublicationService publicationService, IDepartmentService departmentService)
IActionResult AddReportThesis(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
IActionResult DeleteArticle(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
IActionResult AddPublication(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
IActionResult AddMembership(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
IActionResult AddGrant(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
IActionResult AddPostgraduateGuidance(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
IActionResult DeleteGrant(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
IActionResult DeletePostgraduateDissertationGuidance(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
IActionResult AddReview(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
IActionResult AddPatent(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
IActionResult Edit(Guid id, TeacherReportEditViewModel data)
IActionResult AddScientificWork(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
IActionResult DeleteReview(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
IActionResult AddArticle(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
IActionResult DeletePostgraduateGuidance(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
IActionResult DeleteScientificWork(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
IActionResult AddScientificConsultation(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
IActionResult DeleteReportThesis(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
IActionResult DeletePublication(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
IEnumerable< DAL.Entities.Publications.Publication > Publications
IActionResult AddScientificInternship(Guid id, [FromBody] TeacherReportToggleEntityRequest request)
IActionResult DeleteMembership(Guid id, [FromBody] TeacherReportToggleEntityRequest request)