461 lines
19 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|