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

124 lines
5 KiB
C#

using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Web.Http.ModelBinding;
using Kendo.Mvc.UI;
using Kreta.BusinessLogic.Helpers;
using Kreta.BusinessLogic.Security;
using Kreta.Core.Exceptions;
using Kreta.Resources;
using Kreta.Web.Areas.Leptetes.Models;
using Kreta.Web.Helpers;
using Kreta.Web.Helpers.Error;
using Kreta.Web.Helpers.Grid;
using Kreta.Web.Security;
namespace Kreta.Web.Areas.Leptetes.ApiControllers
{
[ApiRoleClaimsAuthorize(true)]
[ApiRolePackageAuthorize(KretaClaimPackages.Adminisztrator.ClaimValue)]
public class OsztalyLeptetesApiController : ApiController
{
public DataSourceResult GetOsztalyLeptetesGrid(string data, [ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))] DataSourceRequest request)
{
SetOsztalyLeptetesGridDefaultSorting(request);
var helper = new LeptetesHelper(ConnectionTypeExtensions.GetSessionConnectionType())
{
GridParameters = Converter.GridParameter(request)
};
DataSet ds = helper.GetOsztalyLeptetesGridData(ClaimData.AktivTanevID.Value);
return ds.ToDataSourceResult();
}
[HttpPost]
[ApiValidateAjaxAntiForgeryToken]
public HttpResponseMessage SaveOsztalyLeptetes(List<OsztalyLeptetesRowModel> model)
{
try
{
var errorStr = OsztalyCustomValidation(model);
if (string.IsNullOrWhiteSpace(errorStr))
{
LeptetesHelper helper = new LeptetesHelper(ConnectionTypeExtensions.GetSessionConnectionType());
foreach (var item in model)
{
helper.CopyOsztalyToKovTanev(item.SourceID, item.Nev, item.Evfolyam, ClaimData.SelectedTanevID.Value);
}
return new HttpResponseMessage(HttpStatusCode.OK);
}
throw new StatusError(HttpStatusCode.BadRequest, errorStr);
}
catch (BlException e)
{
StatusError error = new StatusError(HttpStatusCode.BadRequest, e.Message);
throw error;
}
}
public string OsztalyCustomValidation(List<OsztalyLeptetesRowModel> model)
{
var result = string.Empty;
var duplicated = from m in model group m by m.Nev into g where g.Count() > 1 select g.Key;
foreach (var item in duplicated)
{
result += string.Format(LeptetesResource.OsztalyEgynelTobbszor, model.Where(x => x.Nev.Contains(item)).FirstOrDefault()?.Nev ?? string.Empty);
}
OsztalyCsoportHelper helper = new OsztalyCsoportHelper(ConnectionTypeExtensions.GetSessionConnectionType());
var data = helper.GetOsztalyCsoportCoList();
FeladatEllatasiHelyHelper feHelper = new FeladatEllatasiHelyHelper(ConnectionTypeExtensions.GetSessionConnectionType());
var feData = feHelper.GetFeladatEllatasiHelyDDl();
foreach (var item in model)
{
if (data.Where(x => x.Nev == item.Nev).ToList().Count > 0)
{
result += string.Format(LeptetesResource.OsztalyLetezikKovTanevben, item.Nev);
}
OsztalyHelper ocshelper = new OsztalyHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType());
var osztalyData = helper.GetOsztalyByOsztalyId(item.SourceID);
FeladatEllatasiHelyHelper ahelper = new FeladatEllatasiHelyHelper(ConnectionTypeExtensions.GetSessionConnectionType());
if (ahelper.GetKovTanevIdByAktTanevId(osztalyData.FeladatEllatasiHelyId) == 0)
{
result += string.Format(LeptetesResource.OsztalyFelhelyNemtalalhato, item.Nev);
}
}
return result;
}
private void SetOsztalyLeptetesGridDefaultSorting(DataSourceRequest request)
{
// NOTE: Ha a felhasználó nem választott ki semmilyen rendezést a griden,
// akkor évfolyam sorszám alapján és osztály név alapján rendezzük default a gridet,
// egyébként pedig a griden használt rendezés kell!
if (request.Sorts == null || !request.Sorts.Any())
{
request.Sorts = new List<Kendo.Mvc.SortDescriptor>
{
new Kendo.Mvc.SortDescriptor
{
Member = nameof(OsztalyLeptetesGridModel.DicOrder),
SortDirection = System.ComponentModel.ListSortDirection.Ascending
},
new Kendo.Mvc.SortDescriptor
{
Member = nameof(OsztalyLeptetesGridModel.OsztalyNeve),
SortDirection = System.ComponentModel.ListSortDirection.Ascending
}
};
}
}
}
}