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