Пример #1
0
        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"
                }));
            }
        }