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

461 lines
19 KiB
C#

using System;
using System.Collections.Generic;
using System.Data;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Web;
using System.Web.Http;
using System.Web.Http.ModelBinding;
using System.Web.Http.Results;
using Kendo.Mvc.Extensions;
using Kendo.Mvc.UI;
using Kreta.BusinessLogic.Classes.ComboBox;
using Kreta.BusinessLogic.Exceptions;
using Kreta.BusinessLogic.HelperClasses;
using Kreta.BusinessLogic.Helpers;
using Kreta.BusinessLogic.Logic;
using Kreta.BusinessLogic.Security;
using Kreta.Core;
using Kreta.Core.Exceptions;
using Kreta.Framework;
using Kreta.Framework.Entities;
using Kreta.Framework.Util;
using Kreta.Resources;
using Kreta.Web.Areas.Tantargy.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.Tantargy.ApiControllers
{
public class BaseTantargyFelosztasApiController : ApiController
{
public DataSourceResult GetTantargyFelosztasok(string data, DataSourceRequest request)
{
var (gridParameter, modelList, _) = GetGridData(data, request);
var ret = modelList.ToDataSourceResult(gridParameter);
return ret;
}
public HttpResponseMessage GetExport(string data, DataSourceRequest request)
{
try
{
var (gridParameter, modelList, exportAttributeName) = GetGridData(data, request);
modelList = modelList.SortingAndPaging(gridParameter.OrderDictionary);
var simpleExportColumnCos = SimpleExportLogic.GetSimpleExportColumnCos<TantargyFelosztasGridModel>(exportAttributeName);
var memoryStream = SimpleExportLogic.GetExport(TantargyfelosztasResource.ExportSheetName, simpleExportColumnCos, modelList, ClaimData.SelectedTanevID.Value);
return HttpResponseExtensions.GetFileHttpResponse(memoryStream.ToArray(), string.Format(TantargyfelosztasResource.ExportFileNameFormat, ClaimData.IntezmenyAzonosito));
}
catch (Exception ex)
{
throw new StatusError(HttpStatusCode.BadRequest, ErrorResource.HibaTortentAFajlExportalasaKozben) { UnHandledException = ex };
}
}
private (GridParameters gridParameter, List<TantargyFelosztasGridModel> modelList, string exportAttributeName) GetGridData(string data, DataSourceRequest request)
{
var connection = ConnectionTypeExtensions.GetSessionConnectionType();
var model = JsonConvert.DeserializeObject<TantargyFelosztasModel>(data);
var gridParameter = Converter.GridParameter(request);
var keresesModel = model.ConvertToCo();
if (model.IsFromSzervezet)
{
var szervezetId = new SzervezetHelper(connection).GetAlkalmazottSzervezetId(ClaimData.FelhasznaloId);
keresesModel.SzervezetId = szervezetId;
}
var coList = new TantargyFelosztasHelper(connection).GetTantargyFelosztasCoList(keresesModel);
var modelList = new List<TantargyFelosztasGridModel>();
foreach (var co in coList)
{
var gridModel = new TantargyFelosztasGridModel(co);
modelList.Add(gridModel);
}
var exportAttributeName = model.IsFromSzervezet ? TantargyFelosztasGridModel.DualisTantargyFelosztasExportAttributeId : TantargyFelosztasGridModel.TantargyFelosztasExportAttributeId;
return (gridParameter, modelList, exportAttributeName);
}
[ApiRolePackageAuthorize(KretaClaimPackages.Adminisztrator.ClaimValue, KretaClaimPackages.Dualis_Admin.ClaimValue, KretaClaimPackages.IsSzakiranyuOktatasertFelelos.ClaimValue)]
[HttpPost]
[ApiValidateAjaxAntiForgeryToken]
public void StoreSelectedTanar([FromBody] int tanarID)
{
if (tanarID > 0)
{
HttpContext.Current.Application["tanarId"] = tanarID;
}
}
[HttpPost]
public JsonResult<bool> ValidateTantargyFelosztasModify(TantargyFelosztasModositasaModel model)
{
var helper = new TantargyFelosztasHelper(ConnectionTypeExtensions.GetSessionConnectionType());
var result = helper.DuplicatedTantargyfelosztas(model.TanarId, model.CsoportID, model.TantargyId, model.Id);
return Json(result);
}
[HttpPost]
[ApiValidateAjaxAntiForgeryToken]
public HttpResponseMessage SaveFelosztas(SaveFelosztasModel model)
{
try
{
var helper = new TantargyFelosztasHelper(ConnectionTypeExtensions.GetSessionConnectionType());
foreach (var item in model.felosztasok)
{
if (item?.CsoportID.HasValue == true && ((item.TantargyID.HasValue && item.Oraszam.HasValue) || (item.TantargyID.HasValue && model.IsFromSzervezet)))
{
helper.CreateOrUpdateFelosztas(new TantargyFelosztasCO
{
TanarID = model.tanarID,
OsztalyCsoportID = item.CsoportID.Value,
TantargyID = item.TantargyID.Value,
Oraszam = item.Oraszam ?? 0,
TuloraSzam = item.TuloraSzam ?? 0,
OsszevontOra = item.OsszevontOra,
NemzetisegiOra = item.NemzetisegiOra,
MegbizasiOraszam = item.MegbizasiOraszam ?? 0
},
isFromSzervezet: model.IsFromSzervezet);
}
}
return new HttpResponseMessage(HttpStatusCode.OK);
}
catch (BlException e)
{
throw new StatusError(HttpStatusCode.BadRequest, e.Message);
}
}
public DataSourceResult GetTantargyFelosztasokFelvetel(string data, bool isFromSzervezet, [ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))] DataSourceRequest request)
{
var model = JsonConvert.DeserializeObject<TantargyFelosztasFelveteleModel>(data);
var dataSet = new DataSet();
var dataTable = new DataTable();
dataTable.Columns.Add("ID");
dataTable.Columns.Add("OsztalyCsoport");
dataTable.Columns.Add("OsztalyCsoportID");
dataTable.Columns.Add("Tantargy");
dataTable.Columns.Add("TantargyID");
dataTable.Columns.Add("Oraszam");
dataTable.Columns.Add("Tuloraszam");
dataTable.Columns.Add("OsszevontOra");
dataTable.Columns.Add("OsszevontOra_BNAME");
dataTable.Columns.Add("NemzetisegiOra");
dataTable.Columns.Add("NemzetisegiOra_BNAME");
dataTable.Columns.Add("MegbizasiOraszam");
dataTable.Columns.Add("Valid");
if (model.TanarId.HasValue)
{
DataSet tantargyfelosztasDataSet;
var helper = new TantargyFelosztasHelper(ConnectionTypeExtensions.GetSessionConnectionType());
helper.GridParameters = Converter.GridParameter(request);
tantargyfelosztasDataSet = helper.GetTantargyFelosztasData(model.TanarId, isFromSzervezet: isFromSzervezet);
foreach (DataRow dataRow in tantargyfelosztasDataSet.Tables[0].Rows)
{
dataTable.Rows.Add(
dataRow["ID"],
dataRow["OsztalyCsoport"],
dataRow["OsztalyCsoportID"],
dataRow["Tantargy"],
dataRow["TantargyID"],
dataRow["Oraszam"],
dataRow["Tuloraszam"],
dataRow["OsszevontOra"],
dataRow["OsszevontOra_BNAME"],
dataRow["NemzetisegiOra"],
dataRow["NemzetisegiOra_BNAME"],
dataRow["MegbizasiOraszam"],
true
);
}
for (int i = 0; i < 20; i++)
{
dataTable.Rows.Add(
Guid.NewGuid(),
string.Empty,
string.Empty,
string.Empty,
string.Empty,
string.Empty,
string.Empty,
false,
string.Empty,
false,
string.Empty,
string.Empty,
false
);
}
}
dataSet.Tables.Add(dataTable);
return dataSet.ToDataSourceResult();
}
public JsonResult<List<ComboBoxListItem>> GetTantargyakDD([DataSourceRequest] DataSourceRequest request)
{
var helper = new TantargyHelper(ConnectionTypeExtensions.GetSessionConnectionType());
var tantargyak = helper.GetTanarTantargyaiByTanevCsoportositva(isSzakkepzo: ClaimData.IsSzakkepzoIntezmeny);
var dropdownListItems = new List<ComboBoxListItem>();
foreach (var row in tantargyak)
{
if (!string.IsNullOrWhiteSpace(row.Value))
{
var sli = new ComboBoxListItem()
{
Text = row.Text,
Value = row.Value
};
dropdownListItems.Add(sli);
}
}
return Json(dropdownListItems);
}
[HttpPost]
[ApiValidateAjaxAntiForgeryToken]
public HttpResponseMessage ModifyTantargyFelosztas(TantargyFelosztasModositasaModel model)
{
try
{
if (model.Oraszam < model.TuloraSzam)
{
ModelState.AddModelError("TuloraSzam", TantargyfelosztasResource.ATuloraNemLehetNagyobbMintAzOraszam);
}
if (ModelState.IsValid)
{
var connectionType = ConnectionTypeExtensions.GetSessionConnectionType();
var helper = new TantargyFelosztasHelper(connectionType);
var orarendiOraHelper = new OrarendiOraHelper(connectionType);
var eredetiTtf = helper.GetFoglalkozasById(model.Id);
var tanarId = Convert.ToInt32(eredetiTtf.Tables[0].Rows[0]["TanarID"]);
var tantargyId = Convert.ToInt32(eredetiTtf.Tables[0].Rows[0]["TantargyID"]);
var osztalycsoportId = Convert.ToInt32(eredetiTtf.Tables[0].Rows[0]["OsztalyCsoportID"]);
var ttfCo = new TantargyFelosztasVisszamenolegesCO
{
EredetiTanarId = tanarId,
EredetiTantargyId = tantargyId,
EredetiOsztalyCsoportId = osztalycsoportId,
ModosultTanarId = model.TanarId,
ModosultTantargyId = model.TantargyId,
ModosultOsztalyCsoportId = model.CsoportID
};
if (model.VisszamenolegesModositas)
{
if (tanarId != model.TanarId)
{
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, TantargyResource.VisszamenolegesModositasNemLehetHaTanar);
}
if (!helper.ValidateTantargyfelosztasVisszamenolegesModositas(ttfCo, out var errorMessage))
{
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, errorMessage);
}
if (tantargyId != model.TantargyId || osztalycsoportId != model.CsoportID)
{
helper.TantargyfelosztasVisszamenolegesModositas(ttfCo);
new TanuloErtekelesHelper(ConnectionTypeExtensions.GetSessionConnectionType()).AtlagUjraSzamitasVisszamenolegesModositasUtan(ttfCo);
}
}
if (model.KapcsolodoOrarendiOrakModositasa)
{
helper.UpdateOrarendiOraAfterTantargyfelosztasUpdate(ttfCo);
}
else if (tantargyId != model.TantargyId || osztalycsoportId != model.CsoportID)
{
helper.RemoveOrarendiOraTTFRelation(model.Id);
}
helper.CreateOrUpdateFelosztas(new TantargyFelosztasCO
{
ID = model.Id,
Oraszam = model.Oraszam,
OsztalyCsoportID = model.CsoportID,
TanarID = model.TanarId,
TantargyID = model.TantargyId,
FoglalkozasTipusa = model.TipusId,
OsszevontOra = model.OsszevontOra,
NemzetisegiOra = model.NemzetisegiOra,
MegbizasiOraszam = model.MegbizasiOraszam,
TuloraSzam = model.TuloraSzam
});
if (tanarId != model.TanarId)
{
helper.HandleTanarValtozasOrarendiOrakon(model.Id);
}
orarendiOraHelper.UpdateOrarend();
return new HttpResponseMessage(HttpStatusCode.OK);
}
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
}
catch (BlException e)
{
throw new StatusError(HttpStatusCode.BadRequest, e.Message);
}
catch (Exception e)
{
throw new StatusError(HttpStatusCode.BadRequest, ErrorResource.HibaTortentAMuveletSoran)
{
UnHandledException = e
};
}
}
[HttpPost]
public JsonResult<string> ModifyTantargyFelosztasConfirmContent(TantargyFelosztasModositasaModel model)
{
var sb = new StringBuilder();
var helper = new TantargyFelosztasHelper(ConnectionTypeExtensions.GetSessionConnectionType());
var eredetiTtf = helper.GetFoglalkozasById(model.Id);
var tanarId = Convert.ToInt32(eredetiTtf.Tables[0].Rows[0]["TanarID"]);
var tantargyId = Convert.ToInt32(eredetiTtf.Tables[0].Rows[0]["TantargyID"]);
var osztalycsoportId = Convert.ToInt32(eredetiTtf.Tables[0].Rows[0]["OsztalyCsoportID"]);
var ttfCo = new TantargyFelosztasVisszamenolegesCO
{
EredetiTanarId = tanarId,
EredetiTantargyId = tantargyId,
EredetiOsztalyCsoportId = osztalycsoportId,
ModosultTanarId = model.TanarId,
ModosultTantargyId = model.TantargyId,
ModosultOsztalyCsoportId = model.CsoportID
};
if (model.VisszamenolegesModositas)
{
sb.AppendFormat(TantargyResource.VisszamenolegesModositasFormat,
model.TanorakSzama.ToString(), model.ErtekelesekSzama.ToString(), model.MulasztasokSzama.ToString()).AppendLine();
if (model.TantargyId != tantargyId)
{
if (helper.GetEgyszerAdhatoErtekelesekTanatargyfelosztasModositasAlapjan(ttfCo).Count > 0)
{
sb.AppendLine(TantargyResource.MarLetezikEgyszerAdhatoErtekeles);
}
}
}
if (model.KapcsolodoOrarendiOrakModositasa)
{
var m = helper.TantargyfelosztasbanValtozoOrarendiOrak(ttfCo);
if (m.Tables[0].Rows.Count > 0)
{
sb.AppendLine(TantargyResource.AtirasraKerulOrarendiElemek);
foreach (var row in m.Tables[0].AsEnumerable())
{
var kezdete = DateTime.Parse(row["ErvenyessegKezdete"].ToString()).ToShortDateString();
var vege = row["ErvenyessegVege"] != null ? DateTime.Parse(row["ErvenyessegVege"].ToString()).ToShortDateString() : string.Empty;
sb.AppendFormat(TantargyResource.AtirasraKerulOrarendiElemekFormat,
row["Hetirend"], row["Nap"], row["Ora"], kezdete, vege).AppendLine();
}
}
else
{
sb.AppendLine(TantargyResource.NincsModositandoOrarendiElem);
}
}
return Json(sb.ToString());
}
[HttpPost]
[ApiValidateAjaxAntiForgeryToken]
public HttpResponseMessage DeleteTantargyFelosztas([FromBody] int id)
{
try
{
var helper = new TantargyFelosztasHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType());
helper.DeleteTargyFelosztas(id);
return new HttpResponseMessage(HttpStatusCode.OK);
}
catch (Framework.Entities.EntityDeleteFailedException)
{
var uzenet = string.Format(StringResourcesUtil.GetString(5490), StringResourcesUtil.GetString(1621));
throw new StatusError(HttpStatusCode.BadRequest, uzenet);
}
}
[HttpPost]
[ApiValidateAjaxAntiForgeryToken]
public IHttpActionResult DeleteSelectedTantargyFelosztas(List<int> idList)
{
string errorMsg = string.Empty, entityName = string.Empty;
var counter = 0;
var helper = new TantargyFelosztasHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType());
foreach (var id in idList)
{
try
{
helper.DeleteTargyFelosztas(id);
counter++;
}
catch (CannotBeDeletedException ex)
{
errorMsg += $"{ex.Message}{Environment.NewLine}";
continue;
}
catch (EntityDeleteFailedException ex)
{
var errorMessage = string.Format(ErrorResource.NemTorolhetoKapcsolatMiatt, OrarendResource.Tantargyfelosztas, ex.ConnectionErrorMessage);
errorMsg += $"{errorMessage}{Environment.NewLine}{Environment.NewLine}";
continue;
}
}
if (string.IsNullOrWhiteSpace(errorMsg))
{
return Json(new { Message = string.Format(ErrorResource.NSorTorlesSikeres, counter) });
}
if (counter > 0)
{
errorMsg += Environment.NewLine + string.Format(ErrorResource.NSorTorlesSikeres, counter);
}
throw new StatusError(HttpStatusCode.BadRequest, errorMsg);
}
}
}