public JsonResult ApplyLeave(HrpLeaveApp leave) { try { var settings = _context.Settings.FirstOrDefault(); settings.Initials = settings?.Initials ?? ""; if (string.IsNullOrEmpty(leave.Reliever) && settings.LeaveRelieverMandatory) { return(Json(new ReturnData <string> { Success = false, Message = "Kindly select your reliver" })); } leave.Sdate = leave.Sdate.GetValueOrDefault().AddDays(1); leave.Edate = leave.Edate.GetValueOrDefault().AddDays(1); var daysFromStartDay = (leave.Sdate - DateTime.UtcNow).GetValueOrDefault().TotalDays; leave.Emergency = leave.Emergency == null ? false : leave.Emergency; if (daysFromStartDay < 14 && settings.Initials.ToUpper().Equals("ABNO") && leave.LeaveType.ToUpper().Equals("ANNUAL LEAVE") && !(bool)leave.Emergency) { UpdateDocument(leave); return(Json(new ReturnData <string> { Success = false, Message = "Sorry, leave start date must be atleast two weeks from the application date" })); } leave.Rdate = DateTime.UtcNow; var token = _tokenValidator.Validate(HttpContext); if (!token.Success) { return(Json(new ReturnData <string> { Success = false, NotAuthenticated = true, Message = $"Unauthorized:-{token.Message}", })); } if (token.Role != Role.Staff) { return(Json(new ReturnData <string> { Success = false, NotAuthenticated = true, Message = "Sorry, you are not authorized to perform this action", })); } var app = _unisolApiProxy.ApplyLeave(leave, settings.LeaveRelieverMandatory).Result; var jdata = JsonConvert.DeserializeObject <ReturnData <HrpLeaveApp> >(app); var document = _context.LeaveDocument.Where(d => d.UserName.ToUpper().Equals(leave.EmpNo.ToUpper())).OrderByDescending(d => d.DateCreated).FirstOrDefault(); if (jdata.Success) { if (!string.IsNullOrEmpty(jdata.Data.Reliever)) { _context.Add(new Obstructor { LeaveRef = jdata.Data?.Ref ?? "", Requestor = leave?.EmpNo ?? "", Reliver = jdata.Data?.Reliever ?? "", Status = "Pending" }); if (document != null) { document.LeaveRef = jdata.Data?.Ref ?? ""; } _context.SaveChanges(); } } else { if (document != null) { UpdateDocument(leave); } } return(Json(jdata)); } catch (Exception) { return(Json(new ReturnData <string> { Success = false, Message = "Sorry, An error occurred" })); } }