Esempio n. 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public async Task <ComeToOfficeRequest> CreateRequest(ComeToOfficeRequest request)
        {
            _context.ComeToOfficeRequest.Add(request);
            await _context.SaveChangesAsync();

            _context.Entry(request).Reference(c => c.Employee).Load();
            return(request);
        }
Esempio n. 2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public async Task <ComeToOfficeRequest> UpdateRequest(ComeToOfficeRequest request)
        {
            var officeRequest = _context.ComeToOfficeRequest.Include(t => t.Employee).FirstOrDefault(req => req.Id == request.Id && req.Status == EntityStatus.Active);

            if (officeRequest == null)
            {
                throw new ArgumentException("Update failed: No such request found");
            }

            // other fields can not be edited
            officeRequest.IsApproved = request.IsApproved;
            officeRequest.IsDeclined = request.IsDeclined;
            officeRequest.Status     = request.Status;
            await _context.SaveChangesAsync();

            return(officeRequest);
        }
        /// <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>
        /// <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);
            }
        }