using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Net; using System.Net.Http; using System.Text.RegularExpressions; using System.Web.Http; using Kendo.Mvc.UI; using Kreta.BusinessLogic.Classes; using Kreta.BusinessLogic.Exceptions; using Kreta.BusinessLogic.HelperClasses; using Kreta.BusinessLogic.Helpers; using Kreta.BusinessLogic.Interfaces; using Kreta.BusinessLogic.Security; using Kreta.BusinessLogic.Utils; using Kreta.Core; using Kreta.Core.Exceptions; using Kreta.Core.Iktato.Poszeidon.Factory.Interface; using Kreta.Enums; using Kreta.Framework; using Kreta.Framework.Entities; using Kreta.Framework.Util; using Kreta.Resources; using Kreta.Web.Areas.Intezmeny.Models; using Kreta.Web.Helpers; using Kreta.Web.Helpers.Error; using Kreta.Web.Helpers.Grid; using Kreta.Web.Security; namespace Kreta.Web.Areas.Intezmeny.ApiControllers { [ApiRoleClaimsAuthorize(true)] [ApiRolePackageAuthorize(KretaClaimPackages.Adminisztrator.ClaimValue)] public class IntezmenyApiController : ApiController { private readonly IJiraHelper JiraHelper; public IntezmenyApiController(IJiraHelper jiraHelper) { JiraHelper = jiraHelper ?? throw new ArgumentNullException(nameof(jiraHelper)); } [HttpGet] [ApiRolePackageAuthorize(KretaClaimPackages.Adminisztrator.ClaimValue, KretaClaimPackages.Ellenorzo.ClaimValue)] public IntezmenyModel GetIntezmeny(IIktatoRepositoryFactory iktatoRepositoryFactory, IktatoServiceConfiguration iktatoServiceConfiguration) { IntezmenyModel model = new IntezmenyModel(); var helper = new IntezmenyHelper(ConnectionTypeExtensions.GetSessionConnectionType()); IntezmenyCO co = helper.GetIntezmenyiAdatok(); if (co != null) { var posziHelper = new PoszeidonHelper(ConnectionTypeExtensions.GetSessionConnectionType(), iktatoRepositoryFactory, iktatoServiceConfiguration); var dokumentumCO = posziHelper.IntezmenyiKotelezoDokumentum(null, DokumentumTipusEnum.AlapitoOkirat); co.AlapitoOkirat = dokumentumCO; dokumentumCO = posziHelper.IntezmenyiKotelezoDokumentum(null, DokumentumTipusEnum.SzervezetiEsMukodesiSzabalyzat); co.SzervezetiEsMukodesiSzabalyzat = dokumentumCO; dokumentumCO = posziHelper.IntezmenyiKotelezoDokumentum(null, DokumentumTipusEnum.PedagogiaiProgram); co.PedagogiaiProgram = dokumentumCO; dokumentumCO = posziHelper.IntezmenyiKotelezoDokumentum(null, DokumentumTipusEnum.Hazirend); co.Hazirend = dokumentumCO; dokumentumCO = posziHelper.IntezmenyiKotelezoDokumentum(ClaimData.SelectedTanevID, DokumentumTipusEnum.Munkaterv); co.Munkaterv = dokumentumCO; dokumentumCO = posziHelper.IntezmenyiKotelezoDokumentum(null, DokumentumTipusEnum.mukodesi_engedely); co.MukodesiEngedely = dokumentumCO; model = ConvertIntezmenyCoToModel(co); } return model; } [ApiRolePackageAuthorize(KretaClaimPackages.Adminisztrator.ClaimValue, KretaClaimPackages.Ellenorzo.ClaimValue)] public DataSourceResult GetIntezmenyMukodesiHelyGrid(string data, [System.Web.Http.ModelBinding.ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))] DataSourceRequest request) { MukodesiHelyHelper helper = new MukodesiHelyHelper(ConnectionTypeExtensions.GetSessionConnectionType()); helper.GridParameters = Converter.GridParameter(request); var helyek = helper.GetMukodesiHelyek(); return helyek.ToDataSourceResult(); } [ApiRolePackageAuthorize(KretaClaimPackages.Adminisztrator.ClaimValue, KretaClaimPackages.Ellenorzo.ClaimValue)] public DataSourceResult GetIntezmenyFeladatEllatasiHelyGrid(string id, [System.Web.Http.ModelBinding.ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))] DataSourceRequest request) { FeladatEllatasiHelyHelper helper = new FeladatEllatasiHelyHelper(ConnectionTypeExtensions.GetSessionConnectionType()); helper.GridParameters = Converter.GridParameter(request); var ds = helper.GetFeladatEllatasiHelyByMukodesiHelyID(int.Parse(id)); return ds.ToDataSourceResult(); } [HttpPost] [ApiValidateAjaxAntiForgeryToken] public HttpResponseMessage SaveIntezmeny(IntezmenyModel pmodel) { bool isNevOmKodModosithato = ApplicationData.SystemType == SystemType.AZURE || ApplicationData.SystemType == SystemType.NSZFH_EMA; if (IsOMKodValid(pmodel.OMKod) == false && isNevOmKodModosithato) { ModelState.AddModelError("OMKod", StringResourcesUtil.GetString(4483) /*Az OM kódnak 6 számjegyűnek kell lennie!*/); } if (!pmodel.Telefon.IsValidPhone()) { ModelState.AddModelError("Telefon", ErrorResource.ATelefonszamFormatumaNemMegfelelo); } if (ClaimData.IsKretaAdministrator) { if (string.IsNullOrWhiteSpace(pmodel.AdminEmail)) { ModelState.AddModelError("AdminEmail", string.Format(ErrorResource.Required, CommonResource.AdminEmail)); } else if (!pmodel.AdminEmail.IsValidEmail()) { ModelState.AddModelError("AdminEmail", ErrorResource.EMailCimFormatumaNemMegfelelo); } } if (ModelState.IsValid) { var helper = new IntezmenyHelper(ConnectionTypeExtensions.GetSessionConnectionType()); if (ClaimData.IsKretaAdministrator) { JiraHelper.ChangeAdminEmail(ClaimData.IntezmenyAzonosito, pmodel.AdminEmail); } IntezmenyCO co = ConvertIntezmenyModelToCo(pmodel, isNevOmKodModosithato); helper.SaveIntezmenyiAdatok(co, isNevOmKodModosithato, ClaimData.IsKretaAdministrator); ClaimData.OrganizationShortName = co.RovidNev; ClaimData.OrganizationCode = co.OMKod; ClaimData.RefreshOrganizationFullAddress(co); return new HttpResponseMessage(HttpStatusCode.OK); } return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState); } [HttpPost] [ApiValidateAjaxAntiForgeryToken] public HttpResponseMessage SaveMukodesiHely(MukodesiHelyModel pmodel) { try { if (pmodel.MukodesiHelyTipusa.HasValue && pmodel.MukodesiHelyTipusa.Value == (int)MukodesiHelyTipusEnum.Telephely && !pmodel.TelephelyAnyaintezmeny.HasValue) { ModelState.AddModelError(nameof(pmodel.TelephelyAnyaintezmeny), IntezmenyResource.TelephelyAnyaIntezmenyKotelezo); } if (ModelState.IsValid) { MukodesiHelyHelper helper = new MukodesiHelyHelper(ConnectionTypeExtensions.GetSessionConnectionType()); if (pmodel.MukodesiHelyTipusa != null && (MukodesiHelyTipusEnum)pmodel.MukodesiHelyTipusa == MukodesiHelyTipusEnum.Szekhely) { bool vanMasikSzekhely; if (!pmodel.Id.HasValue) { var mukodesiHelyek = helper.GetMukodesiHelyek() .Tables[0] .Rows.Cast().ToList(); vanMasikSzekhely = mukodesiHelyek .Any(CheckSzekhely(pmodel)); } else { var mukodesiHelyek = helper.GetMukodesiHelyek() .Tables[0] .Rows.Cast(); vanMasikSzekhely = mukodesiHelyek .Any(CheckSzekhely(pmodel)); } if (vanMasikSzekhely) { ModelState.AddModelError(nameof(pmodel.MukodesiHelyTipusa), IntezmenyResource.CsakEgySzekhelyLehet); return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState); } } if (pmodel.MukodesiHelyTipusa.HasValue && pmodel.MukodesiHelyTipusa.Value != (int)MukodesiHelyTipusEnum.Tagintezmeny) { pmodel.VezetoNeve = string.Empty; } var co = pmodel.ToCo(); if (helper.MukodesiHelyAzonositoExists(co)) { ModelState.AddModelError(nameof(pmodel.MukodesiHelyAzonosito), ErrorResource.AMegadottMukodesiHelyAzonositoMarLetezik); return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState); } helper.SaveMukodesiHely(co); return new HttpResponseMessage(HttpStatusCode.OK); } return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState); } catch (SDA.DataProvider.SDADataProviderException ex) { if (ex.Error == SDA.DataProvider.SDADataProviderError.UniqueKeyViolation) { ModelState.AddModelError(nameof(pmodel.Nev), ErrorResource.IlyenNevuMukodesiHelyMarLetezik); return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState); } throw; } catch (CannotBeInsertedException ex) { ModelState.AddModelError(nameof(pmodel.MukodesiHelyAzonosito), ex.Message); return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState); } } [HttpPost] [ApiValidateAjaxAntiForgeryToken] [ApiRolePackageAuthorize(KretaClaimPackages.Adminisztrator.ClaimValue)] public MukodesiHelyModel GetMukodesiHely([FromBody] int pId) { var helper = new MukodesiHelyHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()); MukodesiHelyCO co = helper.GetMukodesiHelyAdatok(pId); return new MukodesiHelyModel(co); } [HttpPost] [ApiValidateAjaxAntiForgeryToken] public HttpResponseMessage SaveFeladat(FeladatellatasiHelyModel pmodel) { if (ModelState.IsValid) { var helper = new FeladatEllatasiHelyHelper(ConnectionTypeExtensions.GetSessionConnectionType()); if (!string.IsNullOrWhiteSpace(pmodel.KIRFeladatellatasiHelySorszama)) { pmodel.KIRFeladatellatasiHelySorszama = pmodel.KIRFeladatellatasiHelySorszama.Replace("_", string.Empty); if (!Regex.IsMatch(pmodel.KIRFeladatellatasiHelySorszama, Core.Constants.RegularExpressions.KIRFeladatellatasiHelySorszama)) { throw new StatusError(HttpStatusCode.BadRequest, ErrorResource.KIRFeladatellatasiHelySorszamCsak3JegyuSzamLehet); } } var co = ConvertFeladatellatasiHelyModelToCo(pmodel); try { helper.SaveFeladatEllatasiHelyAdatok(co); } catch (BlException blex) { throw new StatusError(HttpStatusCode.BadRequest, blex.Message); } return new HttpResponseMessage(HttpStatusCode.OK); } return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState); } [HttpPost] [ApiValidateAjaxAntiForgeryToken] public HttpResponseMessage DeleteMukodesiHely([FromBody] int pID) { try { MukodesiHelyHelper helper = new MukodesiHelyHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()); helper.DeleteMukodesiHely(pID); return new HttpResponseMessage(HttpStatusCode.OK); } catch (CannotBeDeletedException ex) { throw new StatusError(HttpStatusCode.BadRequest, ex.Message); } catch (EntityDeleteFailedException ex) { var uzenet = string.Format(ErrorResource.NemTorolhetoKapcsolatMiatt, IntezmenyResource.MukodesiHely, ex.ConnectionErrorMessage); throw new StatusError(HttpStatusCode.BadRequest, uzenet); } } [HttpPost] [ApiValidateAjaxAntiForgeryToken] public HttpResponseMessage DeleteFeladat([FromBody] int pID) { try { FeladatEllatasiHelyHelper helper = new FeladatEllatasiHelyHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()); helper.FeladatEllatasiHelyTorles(pID); return new HttpResponseMessage(HttpStatusCode.OK); } catch (EntityDeleteFailedException ex) { var errorMessage = string.Format(ErrorResource.NemTorolhetoKapcsolatMiatt, CommonResource.Feladatellatasihely, ex.ConnectionErrorMessage); throw new StatusError(HttpStatusCode.BadRequest, errorMessage); } } [HttpPost] [ApiValidateAjaxAntiForgeryToken] [ApiRolePackageAuthorize(KretaClaimPackages.Adminisztrator.ClaimValue)] public FeladatellatasiHelyModel GetFeladatellatasiHely([FromBody] int pfeladatellatasiHelyId) { FeladatellatasiHelyModel model = new FeladatellatasiHelyModel(); var helper = new FeladatEllatasiHelyHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()); FeladatEllatasiHelyCO co = helper.GetFeladatEllatasiHelyAdatok(pfeladatellatasiHelyId); if (co != null) { model = ConvertFeladatellatasiHelyCoToModel(co); } return model; } [HttpPost] [ApiValidateAjaxAntiForgeryToken] [ApiRolePackageAuthorize(KretaClaimPackages.Adminisztrator.ClaimValue)] public List GetFeladatListByMukodesiHelyId([FromBody] int pmukodesiHelyId) { var helper = new FeladatEllatasiHelyHelper(ConnectionTypeExtensions.GetSessionConnectionType()); var feladatIdList = helper.GetGetFeladatEllatasiHelyIdListByMukodesiHelyID(pmukodesiHelyId); var feladatDDLDataSource = ((int)GeneratedAdatszotarTipusEnum.OktatasiNevelesiFeladat).GetItemsByType(ClaimData.SelectedTanevID.Value, true).ToSelectItemList(); foreach (var id in feladatIdList) { feladatDDLDataSource.RemoveAll(i => i.Value == id.ToString()); } return feladatDDLDataSource; } [HttpPost] [ApiValidateAjaxAntiForgeryToken] public HttpResponseMessage SetSzekhely([FromBody] int pmukodesiHelyId) { var helper = new MukodesiHelyHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()); helper.SetSzekhely(pmukodesiHelyId); return new HttpResponseMessage(HttpStatusCode.OK); } [ApiRolePackageAuthorize(KretaClaimPackages.Adminisztrator.ClaimValue)] public FeladatellatasiHelyModel GetFeladatellatasiHelyAlapadatok(int feladellHelyID) { var helper = new FeladatEllatasiHelyHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()); var co = helper.GetFeladatEllatasiHelyAdatok(feladellHelyID); var model = new FeladatellatasiHelyModel(); model.ID = co.ID; model.MukodesiHelyNev = co.MukodesiHelyNev; model.FeladatTipusNev = co.OktatasiNevelesiFeladatNev; return model; } [ApiRolePackageAuthorize(KretaClaimPackages.Adminisztrator.ClaimValue)] public DataSourceResult GetFeladatellatasiHelyOsztalycsoportjai(string id, [System.Web.Http.ModelBinding.ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))] DataSourceRequest request) { var helper = new FeladatEllatasiHelyHelper(ConnectionTypeExtensions.GetSessionConnectionType()); helper.GridParameters = Converter.GridParameter(request); var ds = helper.GetFeladatellatasiHelyOsztalycsoportjai(SDAConvert.ToInt32(id)); return ds.ToDataSourceResult(); } [ApiRolePackageAuthorize(KretaClaimPackages.Adminisztrator.ClaimValue)] public DataSourceResult GetFeladatellatasiHelyAlkalmazottjai(string id, [System.Web.Http.ModelBinding.ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))] DataSourceRequest request) { var helper = new FeladatEllatasiHelyHelper(ConnectionTypeExtensions.GetSessionConnectionType()); helper.GridParameters = Converter.GridParameter(request); var ds = helper.GetFeladatellatasiHelyAlkalmazottjai(SDAConvert.ToInt32(id)); return ds.ToDataSourceResult(); } public IntezmenyiDokumentumModel GetIntezmenyiDokumentumModel(Enums.DokumentumTipusEnum dokumentumTipus, IIktatoRepositoryFactory iktatoRepositoryFactory, IktatoServiceConfiguration iktatoServiceConfiguration) { var helper = new PoszeidonHelper(ConnectionTypeExtensions.GetSessionConnectionType(), iktatoRepositoryFactory, iktatoServiceConfiguration); var co = helper.IntezmenyiKotelezoDokumentum((dokumentumTipus != Enums.DokumentumTipusEnum.Munkaterv) ? null : ClaimData.SelectedTanevID, dokumentumTipus); return ConvertIntezmenyiDokumentumCoToModel(co); } #region Others private IntezmenyModel ConvertIntezmenyCoToModel(IntezmenyCO co) { IntezmenyModel model = new IntezmenyModel() { Email = co.Email, AdminEmail = co.AdminEmail, Id = co.ID, IgazgatoNeve = co.Igazgato, IntezmenyNev = co.Nev, OMKod = co.OMKod, RovidNev = co.RovidNev, Telefon = co.Telefonszam, EngedelyezettAllashely = co.EngedelyezettAllashely ?? 0, Orszag = co.Orszag, Iranyitoszam = co.Iranyitoszam, Iranyitoszam_Str = co.Iranyitoszam, HelysegNev = co.Varos, HelysegNev_Str = co.Varos, KozteruletTipus = co.KozteruletJellegNev, KozteruletTipus_Str = co.KozteruletJellegNev, KozteruletNev = co.Kozterulet, Emelet = co.Emelet, Hazszam = co.Hazszam, Ajto = co.Ajto, IsSzakkepzo = co.IsSzakkepzo, JuttatasHatarnap = co.JuttatasHatarnap - 1, }; model.AlapitoOkirat = ConvertIntezmenyiDokumentumCoToModel(co.AlapitoOkirat); model.SZMSZ = ConvertIntezmenyiDokumentumCoToModel(co.SzervezetiEsMukodesiSzabalyzat); model.PedagogiaiProgram = ConvertIntezmenyiDokumentumCoToModel(co.PedagogiaiProgram); model.Hazirend = ConvertIntezmenyiDokumentumCoToModel(co.Hazirend); model.Munkaterv = ConvertIntezmenyiDokumentumCoToModel(co.Munkaterv); model.MukodesiEngedely = ConvertIntezmenyiDokumentumCoToModel(co.MukodesiEngedely); return model; } private IntezmenyCO ConvertIntezmenyModelToCo(IntezmenyModel model, bool isNevOMKodModosithato) { IntezmenyCO co = new IntezmenyCO() { Email = model.Email, AdminEmail = model.AdminEmail, ID = model.Id ?? (int)default, Igazgato = model.IgazgatoNeve, RovidNev = model.RovidNev, Telefonszam = model.Telefon, EngedelyezettAllashely = model.EngedelyezettAllashely.HasValue ? model.EngedelyezettAllashely : 0, Orszag = model.Orszag, Iranyitoszam = model.Iranyitoszam_Str, Varos = model.HelysegNev_Str, Kozterulet = model.KozteruletNev, KozteruletJellegNev = model.KozteruletTipus_Str, Emelet = model.Emelet, Hazszam = model.Hazszam, Ajto = model.Ajto, IsSzakkepzo = model.IsSzakkepzo, JuttatasHatarnap = model.JuttatasHatarnap + 1, }; if (isNevOMKodModosithato) { co.Nev = model.IntezmenyNev; co.OMKod = model.OMKod; } if (model.AlapitoOkirat != null) { co.AlapitoOkirat = ConvertIntezmenyiDokumentumModelToCo(model.AlapitoOkirat); } if (model.SZMSZ != null) { co.SzervezetiEsMukodesiSzabalyzat = ConvertIntezmenyiDokumentumModelToCo(model.SZMSZ); } if (model.PedagogiaiProgram != null) { co.PedagogiaiProgram = ConvertIntezmenyiDokumentumModelToCo(model.PedagogiaiProgram); } if (model.Hazirend != null) { co.Hazirend = ConvertIntezmenyiDokumentumModelToCo(model.Hazirend); } if (model.Munkaterv != null) { co.Munkaterv = ConvertIntezmenyiDokumentumModelToCo(model.Munkaterv); } if (model.MukodesiEngedely != null) { co.MukodesiEngedely = ConvertIntezmenyiDokumentumModelToCo(model.MukodesiEngedely); } return co; } private FeladatellatasiHelyModel ConvertFeladatellatasiHelyCoToModel(FeladatEllatasiHelyCO co) { FeladatellatasiHelyModel model = new FeladatellatasiHelyModel() { FeladatTipus = co.OktatasiNevelesiFeladat.Value, ID = co.ID, MukodesiHelyID = co.MukodesiHelyID, KIRFeladatellatasiHelySorszama = co.KIRFeladatellatasiHelySorszama }; return model; } private FeladatEllatasiHelyCO ConvertFeladatellatasiHelyModelToCo(FeladatellatasiHelyModel model) { FeladatEllatasiHelyCO co = new FeladatEllatasiHelyCO() { OktatasiNevelesiFeladat = model.FeladatTipus, ID = model.ID, MukodesiHelyID = model.MukodesiHelyID, KIRFeladatellatasiHelySorszama = model.KIRFeladatellatasiHelySorszama, TanevId = ClaimData.SelectedTanevID.Value }; return co; } private IntezmenyiDokumentumModel ConvertIntezmenyiDokumentumCoToModel(IntezmenyiDokumentumCO co) { return new IntezmenyiDokumentumModel() { Nev = co.Nev, Tipus = co.Tipus, FajlNev = co.FajlNev, Statusz = co.Statusz, IktatottDokumentumId = co.IktatottDokumentumId }; } private IntezmenyiDokumentumCO ConvertIntezmenyiDokumentumModelToCo(IntezmenyiDokumentumModel model) { return new IntezmenyiDokumentumCO() { Nev = model.Nev, Tipus = model.Tipus, FajlNev = model.FajlNev, Statusz = model.Statusz, IktatottDokumentumId = model.IktatottDokumentumId }; } private bool IsOMKodValid(string omKod) { return !string.IsNullOrWhiteSpace(omKod) && Regex.IsMatch(omKod, Core.Constants.RegularExpressions.OMAzonosito); } #endregion #region PrivateMethods /// /// Can be used as the evaluator for iterating through the list of MukodesiHely-s within an Any function to check if there is already a Szekhely which is not the one currently being edited. /// /// MukodesiHely currently being edited. /// private Func CheckSzekhely(MukodesiHelyModel pmodel) { return row => { MukodesiHelyTipusEnum castedValue; var successParse = Enum.TryParse(row["C_MUKODESIHELYTIPUSA"]?.ToString(), out castedValue); if (successParse && castedValue == MukodesiHelyTipusEnum.Szekhely) { if (pmodel.Id.HasValue && row["ID"]?.ToString() == pmodel.Id.Value.ToString()) { return false; } return true; } return false; }; } #endregion } }