kreta/KretaWeb/Areas/Tanar/ApiControllers/HaziFeladatCsatolmanyokApiController.cs
2024-03-13 00:33:46 +01:00

288 lines
11 KiB
C#

using System;
using System.Collections.Generic;
using System.Data;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Web.Http;
using System.Web.Http.ModelBinding;
using Kendo.Mvc.UI;
using Kreta.BusinessLogic.Helpers;
using Kreta.BusinessLogic.Interfaces;
using Kreta.BusinessLogic.Logic;
using Kreta.BusinessLogic.Security;
using Kreta.BusinessLogic.Utils;
using Kreta.Core;
using Kreta.Framework.Util;
using Kreta.Resources;
using Kreta.Web.Areas.Tanar.Models;
using Kreta.Web.Helpers;
using Kreta.Web.Helpers.Error;
using Kreta.Web.Helpers.Grid;
using Kreta.Web.Security;
using Newtonsoft.Json;
namespace Kreta.Web.Areas.Tanar.ApiControllers
{
[ApiRoleClaimsAuthorize(true)]
[ApiRolePackageAuthorize(KretaClaimPackages.Adminisztrator.ClaimValue, KretaClaimPackages.Tanar.ClaimValue)]
public class HaziFeladatCsatolmanyokApiController : ApiController
{
private readonly IFileServiceHelper fileServiceHelper;
public HaziFeladatCsatolmanyokApiController(IFileServiceHelper fileServiceHelper)
{
this.fileServiceHelper = fileServiceHelper ?? throw new ArgumentNullException(nameof(fileServiceHelper));
}
public DataSourceResult GetHFCsatolmanyokGrid(string data, DataSourceRequest request)
{
var (gridParameter, modelList) = GetGridData(data, request);
return modelList.ToDataSourceResult(gridParameter);
}
public HttpResponseMessage GetExport(string data, DataSourceRequest request)
{
try
{
var (gridParameter, modelList) = GetGridData(data, request);
modelList = modelList.SortingAndPaging(gridParameter.OrderDictionary);
var simpleExportColumnCos = SimpleExportLogic.GetSimpleExportColumnCos<HFCsatolmanyGridModel>(HFCsatolmanyGridModel.HazifeladatCsatolmanyExportAttributeId);
var memoryStream = SimpleExportLogic.GetExport(OrarendResource.HazifeladatExportSheetName, simpleExportColumnCos, modelList, ClaimData.SelectedTanevID.Value);
return HttpResponseExtensions.GetFileHttpResponse(memoryStream.ToArray(), OrarendResource.HazifeladatCsatolmanyExportFileName);
}
catch (Exception ex)
{
throw new StatusError(HttpStatusCode.BadRequest, ErrorResource.HibaTortentAFajlExportalasaKozben) { UnHandledException = ex };
}
}
private (GridParameters gridParameter, List<HFCsatolmanyGridModel> modelList) GetGridData(string data, DataSourceRequest request)
{
data = data.Replace("-", "");
var model = JsonConvert.DeserializeObject<HFCsatolmanyokSearchModel>(data) ?? new HFCsatolmanyokSearchModel();
var gridParameter = Converter.GridParameter(request);
var tanarId = ClaimData.IsAdministrator ? (int?)null : ClaimData.FelhasznaloId;
var coList = new DktFileHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetHazifeladatCsatolmanyCoList(model.ConvertModelToCo(tanarId));
var modelList = new List<HFCsatolmanyGridModel>();
foreach (var co in coList)
{
var gridModel = new HFCsatolmanyGridModel(co);
modelList.Add(gridModel);
}
return (gridParameter, modelList);
}
public DataSourceResult GetHFCsatolmanyokGridForHazi(int haziFeladatId, [ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))] DataSourceRequest request)
{
var helper = new DktFileHelper(ConnectionTypeExtensions.GetSessionConnectionType())
{
GridParameters = Converter.GridParameter(request)
};
DataSet ds = helper.GetCsatolmanyokForHaziFeladatDataSet(haziFeladatId);
return ds.ToDataSourceResult();
}
[HttpPost]
[ApiValidateAjaxAntiForgeryToken]
public HttpResponseMessage DeleteCsatolmany([FromBody] int id)
{
try
{
var helper = new DktFileHelper(ConnectionTypeExtensions.GetSessionConnectionType(), fileServiceHelper);
helper.DeleteCsatolmany(id, true);
return new HttpResponseMessage(HttpStatusCode.OK);
}
catch (Exception ex)
{
throw new StatusError(HttpStatusCode.BadRequest, ErrorResource.FajlTorleseSikertelen) { UnHandledException = ex };
}
}
[HttpPost]
[ApiValidateAjaxAntiForgeryToken]
public HttpResponseMessage DeleteSelectedCsatolmany(List<int> idList)
{
try
{
var helper = new DktFileHelper(ConnectionTypeExtensions.GetSessionConnectionType(), fileServiceHelper);
foreach (var item in idList)
{
helper.DeleteCsatolmany(item, true);
}
return new HttpResponseMessage(HttpStatusCode.OK);
}
catch (Exception ex)
{
throw new StatusError(HttpStatusCode.BadRequest, ErrorResource.FajlokTorleseSikertelen) { UnHandledException = ex };
}
}
[HttpPost]
[ApiRolePackageAuthorize(KretaClaimPackages.Adminisztrator.ClaimValue, KretaClaimPackages.Tanar.ClaimValue, KretaClaimPackages.Tanulo.ClaimValue)]
public HttpResponseMessage DownloadCsatolmanyFile(DownloadModel model)
{
try
{
var helper = new DktFileHelper(ConnectionTypeExtensions.GetSessionConnectionType(), fileServiceHelper);
var co = helper.GetCsatolmanyFile(model.Id);
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = new StreamContent(co.Stream);
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
response.Content.Headers.ContentDisposition.FileName = co.FileName;
return response;
}
catch (Exception ex)
{
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.InternalServerError);
response.Content = new StringContent(@"
<!DOCTYPE html>
<html lang=""hu"">
<head>
<meta charset=""utf-8"" />
<meta name=""format-detection"" content=""telephone=no"" />
<meta name=""viewport"" content=""width=device-width, initial-scale=1.0"" />
<meta http-equiv=""X-UA-Compatible"" content =""IE=Edge"" />
<title>Hiba file letöltés során!</title>
<link rel=""preconnect"" href=""https://fonts.googleapis.com"" crossorigin>
<link rel=""preconnect"" href=""https://fonts.gstatic.com"" crossorigin>
<link href=""https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300;0,400;0,600;0,700;1,300;1,400;1,600&family=Roboto+Condensed:wght@300;400;700&display=swap"" rel=""stylesheet"">
<link rel=""icon"" href=""~/favicon.ico"" type=""image/x-icon"">
<style>
html {
height: 100%;
}
body {
margin: 0;
padding: 0;
height: 100%;
font-family: ""Open Sans"";
font-size: 14px;
font-weight: 400;
color: #445261;
background: #406a7c; /* For browsers that do not support gradients */
background: -webkit-radial-gradient(circle, #518094, #406a7c); /* Safari */
background: -o-radial-gradient(circle, #518094, #406a7c); /* Opera 11.6 to 12.0 */
background: -moz-radial-gradient(circle, #518094, #406a7c); /* Firefox 3.6 to 15 */
background: radial-gradient(circle, #518094, #406a7c); /* Standard syntax */
}
# main {
height: 100 %;
top: 0;
position: absolute;
width: 100 %;
background-repeat: no-repeat;
background-position: bottom right 30px;
}
#main h2 {
color: white;
font-weight: 400;
font-size: 2em;
}
#main .login_logo {
margin: 0 auto;
margin-top: 10%;
width: 400px;
display: block;
background-position: center center;
background-repeat: no-repeat;
height: 100px;
padding-top: 25px;
}
#main .login_container {
width: 40%;
margin: 0 auto;
display: block;
background-color: transparent;
}
#main .login_problems {
width: 100%;
margin: 0 auto;
display: block;
background-color: transparent;
line-height: 30px;
color: white;
}
#main .login_header {
background-color: transparent;
text-align: center;
margin-top: 40px;
}
#main .login_content {
text-align: center;
padding: 20px;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
overflow-y: auto;
color: white;
font-size: 18px;
font-weight: 300;
}
</style>
</head>
<body>
<div id = ""main"" >
<div class=""login_logo"">
</div>
<div class=""login_container"">
<div class=""login_header"">
<h2>Hiba történt a file letöltése során!</h2>
</div>
</div>
<div class=""login_problems"">
<div class=""login_content"">
A file service nem elérhető jelenleg vagy a letölteni kívánt filet már törölték.
</div>
</div>
</div>
</body>
</html>
");
response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
return response;
}
}
[HttpGet]
public Dictionary<string, string> GetFelhasznaloAdatmennyisege(int felhasznaloId)
{
Dictionary<string, string> result = new Dictionary<string, string>();
var dktFileHelper = new DktFileHelper(ConnectionTypeExtensions.GetSessionConnectionType());
var osszMeret = dktFileHelper.GetHaziFeladatCsatolmanyokOsszMeret(felhasznaloId);
var maxMegengedettAdatmennyiseg = dktFileHelper.GetMaxAdatmennyisegFelhasznalokent(felhasznaloId);
var marFeltoltottAdatmennyisegInMB = string.Format("{0:0.00}", CommonUtils.ConvertByteToMByte(osszMeret)); // DB-ben byte van
var maxAdatmennyisegInMB = string.Format("{0:0.00}", CommonUtils.ConvertKByteToGByte(maxMegengedettAdatmennyiseg)); // DB-ben kByte van
result.Add("marFeltoltottAdatmennyiseg", ClaimData.IsAdministrator ? string.Format(TanarResource.MarFeltoltottAdatmennyiseg, marFeltoltottAdatmennyisegInMB) : string.Format(TanarResource.KorabbanMarFeltoltottAdatmennyiseg, marFeltoltottAdatmennyisegInMB));
result.Add("maxAdatmennyiseg", ClaimData.IsAdministrator ? string.Format(TanarResource.FelhasznalokentMaxAdatmennyiseg, maxAdatmennyisegInMB) : string.Format(TanarResource.MaximalisMegengedettAdatmennyiseg, maxAdatmennyisegInMB));
return result;
}
}
}