using System; using System.Collections.Generic; using System.Net; using Kreta.Core.SAP.CommunicationModels; using Kreta.Core.SAP.CommunicationModels.SzamfejtettTavolletek; using Kreta.Core.SAP.CommunicationModels.TavolletIgenyekKezelese; using Kreta.Core.SAP.Enums; using Kreta.Framework; using Kreta.Framework.Logging; using Kreta.Resources; using Newtonsoft.Json; using RestSharp; namespace Kreta.Client.Tavollet { public class TavolletClient { private readonly string baseUrl; private readonly string apiKey; public TavolletClient(string baseUrl, string apiKey) { this.baseUrl = baseUrl; this.apiKey = apiKey; } private IRestResponse Http(Method method, string relativeUri, Dictionary parameters = null, Object body = null) { var restRequest = new RestRequest(relativeUri, method); restRequest.AddHeader("ApiKey", apiKey); if (parameters != null && parameters.Count > 0) { foreach (var parameter in parameters) { restRequest.AddParameter(parameter.Key, parameter.Value); } } if (method == Method.POST && body != null) { restRequest.AddJsonBody(body); } var result = new RestClient(string.Format(baseUrl)).Execute(restRequest); if (result.StatusCode == HttpStatusCode.InternalServerError) { throw new Exception(result.ErrorMessage); } if (result.StatusCode == HttpStatusCode.NotFound || result.StatusCode == HttpStatusCode.BadRequest) { SDAServer.Instance.Logger.CustomEvent(Events.CLIENT_GENERAL, LogLevel.WARNING, result.Content); } return result; } private TResponse Http(Method method, string relativeUri, Dictionary parameters = null, Object body = null) where TResponse : IBaseResponseModel, new() { var result = Http(method, relativeUri, parameters, body); if (result.StatusCode == HttpStatusCode.BadRequest) { var errorModel = new TResponse(); errorModel.IsSuccess = false; errorModel.ErrorMessage = result.Content; return errorModel; } if (result.StatusCode == HttpStatusCode.NotFound) { var errorModel = new TResponse(); errorModel.IsSuccess = false; errorModel.ErrorMessage = HRModulResource.SzolgaltatasJelenlegNemElerheto; return errorModel; } var response = JsonConvert.DeserializeObject(result.Content); return response; } private TResponse PostAsync(string relativeUri, Dictionary parameters = null, Object body = null) where TResponse : IBaseResponseModel, new() { return Http(Method.POST, relativeUri, parameters, body); } public TavolletjelentoListaResponseModel GetTavolletek(TavolletjelentoListaRequestModel request) { var response = PostAsync("/api/holidaysmanagement/external/getTavolletjelentoLista", null, request); return response; } public TavolletAdatokResponseModel GetTavolletAlkalmazottakAdatai(TavolletAdatokRequestModel request) { var response = PostAsync("/api/holidaysmanagement/external/getTavolletAdatok", null, request); return response; } public IntezmenyiTavolletBefogadottResponseModel GetVezetokTavolletAdatok(IntezmenyiTavolletBefogadottRequestModel request) { var response = PostAsync("/api/holidaysmanagement/external/vezetok/getIntezmenyiTavolletBefogadott", null, request); return response; } public IntezmenyiTavolletBefogadottResponseModel GetAlkalmazottakTavolletAdatok(IntezmenyiTavolletBefogadottRequestModel request) { var response = PostAsync("/api/holidaysmanagement/external/alkalmazottak/getIntezmenyiTavolletBefogadott", null, request); return response; } public TavolletjelentoDetailResponseModel GetTavollet(TavolletjelentoCRUDRequestModel request) { var response = PostAsync("/api/holidaysmanagement/external/getTavolletDetail", null, request); return response; } public TavolletjelentoListaResponseModel GetTavolletDetailList(TavolletjelentoCRUDRequestModel request) { var response = PostAsync("/api/holidaysmanagement/external/getTavolletDetailList", null, request); return response; } public TavolletjelentoCRUDResponseModel SaveOrUpdateTavollet(TavolletjelentoCRUDRequestModel request) { var response = new TavolletjelentoCRUDResponseModel(); switch (request.Action) { case WorkflowMuveletek.Letrehoz: response = PostAsync("/api/holidaysmanagement/external/createTavollet", null, request); break; case WorkflowMuveletek.Modosit: case WorkflowMuveletek.Hianypotlas: case WorkflowMuveletek.Elutasit: response = PostAsync("/api/holidaysmanagement/external/updateTavollet", null, request); break; default: throw new Exception(); } return response; } public IntezmenyiTavolletIgenyElfogadasResponseModel JovahagyTavolletek(List request) { var response = PostAsync("/api/holidaysmanagement/external/jovahagyTavolletek", null, request); return response; } public TavolletjelentoCRUDResponseModel DeleteTavollet(TavolletjelentoCRUDRequestModel request) { var response = PostAsync("/api/holidaysmanagement/external/deleteTavollet", null, request); return response; } public TavolletDokumentumSyncResponseModel SyncTavolletIktatott(TavolletDokumentumSyncRequestModel request) { var result = PostAsync("/api/holidaysmanagement/external/syncDocumentInfo", null, request); return result; } } }