private async Task <string> SendRequestEmail(ComeToOfficeRequestViewModel requestViewModel, MailTemplate mailTemplate)
        {
            string message = "";

            try
            {
                appEmailHelper = new AppEmailHelper();
                var hrEmployeeList = await _employeeRepository.GetEmployeeDetailsByRole(EmployeeRolesEnum.HRManager.ToString());

                if (hrEmployeeList.Count > 0)
                {
                    foreach (var hrEmployee in hrEmployeeList)
                    {
                        appEmailHelper.ToMailAddresses.Add(new MailAddress(hrEmployee.Email, hrEmployee.Name));
                    }
                }
                appEmailHelper.CCMailAddresses.Add(new MailAddress(requestViewModel.Employee.Email, requestViewModel.Employee.Name));
                appEmailHelper.MailTemplate = mailTemplate;
                appEmailHelper.Subject      = "Request for attending Office";
                ComeToOfficeRequestEmailViewModel emailVm = new ComeToOfficeRequestEmailViewModel();
                emailVm.MapFromViewModel(requestViewModel);
                emailVm.LinkUrl = $"{ _configuration["AppUrl"]}requests";
                emailVm.HRName  = "HR";
                appEmailHelper.MailBodyViewModel = emailVm;
                await appEmailHelper.InitMailMessage();
            }
            catch (Exception e)
            {
                message = e.Message;
            }
            return(message);
        }
Пример #2
0
        public async Task <ActionResult <IResult> > UpdateRequest([FromBody] ComeToOfficeRequestViewModel requestiewModel)
        {
            _logger.LogInformation("Updating Request");
            var result = await _requestService.UpdateRequest(requestiewModel);

            return(StatusCode((int)result.StatusCode, result));
        }
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public IResult GetRequestsList(SearchSortModel search)
        {
            var requestViewModels = new List <ComeToOfficeRequestViewModel>();
            var result            = new Result
            {
                Operation  = Operation.Read,
                Status     = Status.Success,
                StatusCode = HttpStatusCode.OK
            };

            try
            {
                var requests = _requestRepository.GetRequestsList(search);
                if (requests.Any())
                {
                    requestViewModels = requests.Select(t =>
                    {
                        var requestViewModel = new ComeToOfficeRequestViewModel();
                        requestViewModel.MapFromModel(t);
                        var employeeVm = new EmployeeViewModel();
                        employeeVm.MapFromModel(t.Employee);
                        requestViewModel.Employee = employeeVm;

                        return(requestViewModel);
                    }).ToList();
                }
                else
                {
                    result.Message = "No records found";
                }
                search.SearchResult = requestViewModels;
                result.Body         = search;
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, ex.Message);
                result.Status     = Status.Error;
                result.Message    = ex.Message;
                result.StatusCode = HttpStatusCode.InternalServerError;
            }
            return(result);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="requestViewModel"></param>
        /// <returns></returns>
        public async Task <IResult> UpdateRequest(ComeToOfficeRequestViewModel requestViewModel)
        {
            var result = new Result
            {
                Operation  = Operation.Update,
                Status     = Status.Success,
                StatusCode = HttpStatusCode.OK
            };

            try
            {
                if (requestViewModel != null)
                {
                    var requestModel = new ComeToOfficeRequest();
                    // To map employee detail
                    requestModel.MapFromViewModel(requestViewModel, (ClaimsIdentity)_principal.Identity);

                    requestModel = await _requestRepository.UpdateRequest(requestModel);

                    var employeeVm = new EmployeeViewModel();
                    employeeVm.MapFromModel(requestModel.Employee);
                    requestViewModel.Employee = employeeVm;

                    // send HR response in email to employee and send link for declaration form to Employee if approved
                    var mailResult = await SendResponseEmail(requestViewModel, MailTemplate.ResponseFromHR);

                    result.Message = mailResult;
                    result.Body    = requestViewModel;
                    return(result);
                }
                result.Status     = Status.Fail;
                result.StatusCode = HttpStatusCode.BadRequest;
                return(result);
            }
            catch (Exception e)
            {
                _logger.LogError(e, e.Message);
                result.Message = e.Message;
                result.Status  = Status.Error;
                return(result);
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="requestViewModel"></param>
        /// <param name="mailTemplate"></param>
        private async Task <string> SendResponseEmail(ComeToOfficeRequestViewModel requestViewModel, MailTemplate mailTemplate)
        {
            string message = "";

            try
            {
                appEmailHelper = new AppEmailHelper();

                var activeUserEmailId = ((ClaimsIdentity)_principal.Identity).GetActiveUserEmailId();
                var activeUserName    = ((ClaimsIdentity)_principal.Identity).GetActiveUserName();
                if (!string.IsNullOrEmpty(activeUserEmailId))
                {
                    appEmailHelper.FromMailAddress = new MailAddress(activeUserEmailId, activeUserName ?? "HR");
                }

                appEmailHelper.ToMailAddresses.Add(new MailAddress(requestViewModel.Employee.Email, requestViewModel.Employee.Name));
                appEmailHelper.MailTemplate = mailTemplate;
                ComeToOfficeRequestEmailViewModel emailVm = new ComeToOfficeRequestEmailViewModel();
                emailVm.MapFromViewModel(requestViewModel);
                if (requestViewModel.IsApproved)
                {
                    emailVm.Status         = "Approved";
                    appEmailHelper.Subject = "Your request is approved by HR";
                }
                else if (requestViewModel.IsDeclined)
                {
                    emailVm.Status         = "Declined";
                    appEmailHelper.Subject = "Your request is declined by HR";
                }

                emailVm.LinkUrl = $"{ _configuration["AppUrl"]}declaration/{requestViewModel.RequestNumber}";
                emailVm.HRName  = activeUserName ?? "HR";
                appEmailHelper.MailBodyViewModel = emailVm;
                await appEmailHelper.InitMailMessage();
            }
            catch (Exception e)
            {
                message = e.Message;
            }
            return(message);
        }
        /// <summary>
        /// Returns Request detail
        /// </summary>
        /// <param name="requestId"></param>
        /// <returns></returns>
        public async Task <IResult> GetRequestDetail(int requestId)
        {
            var requestViewModel = new ComeToOfficeRequestViewModel();
            var result           = new Result
            {
                Operation  = Operation.Read,
                Status     = Status.Success,
                StatusCode = HttpStatusCode.OK
            };

            try
            {
                var request = await _requestRepository.GetRequestById(requestId);

                if (request != null)
                {
                    requestViewModel.MapFromModel(request);
                    var employeeVm = new EmployeeViewModel();
                    employeeVm.MapFromModel(request.Employee);
                    requestViewModel.Employee = employeeVm;
                }
                else
                {
                    result.Message = "No record found matching Id";
                }
                result.Body = requestViewModel;
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, ex.Message);
                result.Status     = Status.Error;
                result.Message    = ex.Message;
                result.StatusCode = HttpStatusCode.InternalServerError;
            }
            return(result);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="requestViewModel"></param>
        /// <returns></returns>
        public async Task <IResult> CreateRequest(ComeToOfficeRequestViewModel requestViewModel)
        {
            var result = new Result
            {
                Operation  = Operation.Create,
                Status     = Status.Success,
                StatusCode = HttpStatusCode.OK
            };

            try
            {
                var requesModel = new ComeToOfficeRequest();
                if (requestViewModel != null)
                {
                    // restrict past date requests
                    if (requestViewModel.ToDate.Date < DateTime.Now.Date)
                    {
                        result.Status     = Status.Fail;
                        result.StatusCode = HttpStatusCode.NotAcceptable;
                        result.Message    = "You can not add request for the past dates";
                        return(result);
                    }
                    // check if employee already has active request for current and next days
                    var empRequests = await _requestRepository.GetRequestsByEmployee(requestViewModel.EmployeeId);

                    if (empRequests.Count() > 0)
                    {
                        //  if request for the same date exists and is approved , then can not raise new request
                        if (empRequests.Where(x => x.ToDate.Date >= requestViewModel.ToDate.Date && x.IsApproved).Any())
                        {
                            result.Status     = Status.Fail;
                            result.StatusCode = HttpStatusCode.NotAcceptable;
                            result.Message    = "You already have approval for this date";
                            return(result);
                        }
                        //  if request for the same date exists and is declined , then can raise new request
                        //  and if no request matching date exists
                        else if (empRequests.Where(x => x.ToDate.Date <= requestViewModel.FromDate.Date).Any() || empRequests.Where(x => x.FromDate.Date >= requestViewModel.ToDate.Date).Any())
                        {
                            requesModel.MapFromViewModel(requestViewModel, (ClaimsIdentity)_principal.Identity);
                            requesModel.CreatedBy = requestViewModel.Employee.Email;
                            requesModel           = await _requestRepository.CreateRequest(requesModel);

                            requestViewModel.Id = requesModel.Id;
                            var employeeVm = new EmployeeViewModel();
                            employeeVm.MapFromModel(requesModel.Employee);
                            requestViewModel.Employee = employeeVm;
                            // send email to HR
                            var mailResult = await SendRequestEmail(requestViewModel, MailTemplate.RequestToHR);

                            result.Message = mailResult;
                            result.Body    = requestViewModel;
                            return(result);
                        }
                        else if (empRequests.Where(x => (x.ToDate.Date == requestViewModel.ToDate.Date || (requestViewModel.FromDate.Date < x.ToDate.Date && requestViewModel.FromDate.Date >= x.FromDate.Date) || (requestViewModel.ToDate.Date < x.ToDate.Date && requestViewModel.ToDate.Date >= x.FromDate.Date)) && !x.IsDeclined && !x.IsApproved).Any())
                        {
                            result.Status     = Status.Fail;
                            result.StatusCode = HttpStatusCode.NotAcceptable;
                            result.Message    = "You already have request pending for approval for this date";
                            return(result);
                        }
                    }
                    else
                    {
                        // To map employee detail
                        requesModel.MapFromViewModel(requestViewModel, (ClaimsIdentity)_principal.Identity);
                        requesModel.CreatedBy = requestViewModel.Employee.Email;
                        requesModel           = await _requestRepository.CreateRequest(requesModel);

                        requestViewModel.Id = requesModel.Id;
                        var employeeVm = new EmployeeViewModel();
                        employeeVm.MapFromModel(requesModel.Employee);
                        requestViewModel.Employee = employeeVm;
                        // send email to HR
                        await SendRequestEmail(requestViewModel, MailTemplate.RequestToHR);

                        result.Body = requestViewModel;
                        return(result);
                    }
                }
                result.Status     = Status.Fail;
                result.StatusCode = HttpStatusCode.BadRequest;
                return(result);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, ex.Message);
                result.Message = ex.Message;
                result.Status  = Status.Error;
                return(result);
            }
        }