public async Task <ConsultationDTO> SaveRequestData(ConsultationDTO dto)
        {
            await AddNewRequest(dto.DomainModel);

            dto.DomainModel.JobId = await KtaService.CreateJobAsync(dto.SessionId, AppConfiguaraton.KTAProcessIdConsultation, dto.DomainModel.Id);

            await UpdateKtaJobID(dto.DomainModel.Id, dto.DomainModel.JobId);

            await AddAvailability(dto);

            var ConsulationViewModel = new NewConsultationViewModel();

            Mapper.Map(dto.DomainModel, ConsulationViewModel);

            var responce = await _uacService.PostConsultationData(ConsulationViewModel);

            if (dto.Attachement != null)
            {
                FileService.UploadRequestFiles(typeof(ConsultationDTO), dto,
                                               AppConfiguaraton.ConsultaionAttachementPath,
                                               dto.DomainModel.JobId, AppConfiguaraton.ConsultaionAttachementListName,
                                               string.Empty, dto.Requester.Username, multiTypes: true,
                                               uploadToSharepoint: true, multi: true);
            }
            return(dto);
        }
        public async Task <ConsultationDTO> ReviewRequestData(RequestDataModel data)
        {
            var             activity = KtaService.OpenActivityInReviewMode(data.SessionId, data.JobId, data.NodeId, data.epc);
            ConsultationDTO dto      = new ConsultationDTO();

            dto.DomainModel  = FindOneByJobId(data.JobId);
            dto.activity     = activity;
            dto.IsReviewMode = true;
            return(dto);
        }
        public async Task AddAvailability(ConsultationDTO dto)
        {
            var ConsultantAvailability = new ConsultantAvailability();

            ConsultantAvailability.ConsultationRequestId = dto.DomainModel.Id;
            ConsultantAvailability.ConsultantEmail       = dto.DomainModel.ConsultantEmail;
            ConsultantAvailability.StartDate             = dto.DomainModel.DateFrom;
            ConsultantAvailability.EndDate = dto.DomainModel.DateTo;
            ConsultantAvailability.Days    = dto.DomainModel.Duration;
            ConsultantAvailability.Year    = DateTime.Parse(ConsultantAvailability.StartDate.ToString()).Year;;

            await _availabilityservice.AddNewRequest(ConsultantAvailability);
        }
        public async Task <ConsultationDTO> GetRequestData(RequestDataModel data)
        {
            var activity = await KtaService.TakeActivityAsync(data.SessionId, data.JobId, data.NodeId, data.epc);

            ConsultationDTO dto = new ConsultationDTO();

            dto.DomainModel = FindOneByJobId(data.JobId);
            dto.Requester   = await employeeService.FindEmployeeWithEmailAsync(dto.DomainModel.EmployeeEmail);

            dto.Decisions = decisionService.GetDecisionList(activity.HelpText);
            dto.activity  = activity;
            dto.ConsultationRequestsHistory = await GetConsultationRequestsHistory(dto.DomainModel.EmployeeEmail);

            return(dto);
        }
        public async Task <ConsultationDTO> ProcessRequest(ConsultationDTO dto)
        {
            logger.LogDebug("activity", (dto.activity));

            if (dto.activity == null)
            {
                dto.activity = await KtaService.TakeActivityAsync(dto.SessionId, dto.DomainModel.JobId, dto.NodeID, dto.EPC);
            }


            if (dto.activity.Identity.NodeId == dto.NodeID && dto.activity.Identity.NodeId == ConstantNodes.Research_Collaboration_Committee)
            {
                if (dto.ManagerDecision.Id == ((int)ConstantNodes.ConsultationDecisions.Approved).ToString())
                {
                    dto.DomainModel.Status = "Approved";;
                }
                else if (dto.ManagerDecision.Id == ((int)ConstantNodes.ConsultationDecisions.Rejected).ToString())
                {
                    dto.DomainModel.Status = "Rejected";
                }
            }
            else if (dto.activity.Identity.NodeId == dto.NodeID && (dto.activity.Identity.NodeId == ConstantNodes.UCP_Admin__NodeId || dto.activity.Identity.NodeId == ConstantNodes.DM_NodeID) && dto.ManagerDecision.Id == ((int)ConstantNodes.EnumITStatus.Rejected).ToString())
            {
                dto.DomainModel.Status = "Rejected";
            }

            var entity = FindOneById(dto.DomainModel.Id);

            if (dto.DomainModel.Id == entity.Id)
            {
                Mapper.Map(dto.DomainModel, entity);
            }

            await UpdateRequest();

            if (dto.DomainModel.Status == "Rejected")
            {
                await DeleteAvailability(dto);
            }

            var ConsulationCompletionViewModel = new EditConsultationDataViewModel();

            if (dto.DomainModel.Status != null)
            {
                Mapper.Map(dto.DomainModel, ConsulationCompletionViewModel);

                var jsonPatch = new JsonPatchDocument <EditConsultationDataViewModel>();
                jsonPatch.Replace(m => m.Status, ConsulationCompletionViewModel.Status);
                jsonPatch.Replace(m => m.IsConfidential, ConsulationCompletionViewModel.IsConfidential);
                logger.LogDebug("jsonPatch", (jsonPatch));

                var responce = await _uacService.PatchConsultationData(jsonPatch, dto.DomainModel.JobId);

                logger.LogDebug("responce", (responce));
            }
            if (dto.Attachement != null)
            {
                FileService.UploadRequestFiles(typeof(ConsultationDTO), dto,
                                               AppConfiguaraton.ConsultaionAttachementPath,
                                               dto.DomainModel.JobId, AppConfiguaraton.ConsultaionAttachementListName,
                                               string.Empty, dto.Requester.Username, multiTypes: false,
                                               uploadToSharepoint: true, multi: true);
            }
            await KtaService.CompleteActivityAsync(dto.SessionId, dto.Requester.Username, dto.ManagerDecision.Id, dto.ManagerDecision.Comment, dto.activity.Identity);

            return(dto);
        }
 public async Task DeleteAvailability(ConsultationDTO dto)
 {
     var ConsultantAvailability     = new ConsultantAvailability();
     var ConsultantAvailabilityItem = _availabilityservice.Find(x => x.ConsultationRequestId == dto.DomainModel.Id).FirstOrDefault();
     await _availabilityservice.DeleteRequest(ConsultantAvailabilityItem);
 }