public async Task <SoftwareDTO> ProcessRequest(SoftwareDTO dto)
        {
            logger.LogDebug($"ProcessRequest method fired {dto.JobID} and {dto.NodeID}");

            logger.LogDebug($"TakeActivity method fired {dto.SessionId} and {dto.DomainModel.JobId} and { dto.NodeID} and {dto.EPC}");

            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.DirectManager_NodeId || dto.activity.Identity.NodeId == ConstantNodes.ITSolutions_NodeId || dto.activity.Identity.NodeId == ConstantNodes.NodeId_EmployeeUpdate || dto.activity.Identity.NodeId == ConstantNodes.HelpDesk_NodeId ||
                                                               dto.activity.Identity.NodeId == ConstantNodes.DepartmentManager_NodeId || dto.activity.Identity.NodeId == ConstantNodes.NodeId_EmployeeUpdate))
            {
                dto.DomainModel.ITSoftwareRequestItems = await Task.Run(() => SetSoftwareRequestItems(dto));

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

                await UpdateRequest();
            }

            logger.LogDebug($"CompleteActivity method fired SessionId {dto.SessionId} and Username {dto.Requester.Username} and Id { dto.ManagerDecision.Id} and Comment {dto.ManagerDecision.Comment} and Identity {dto.activity.Identity}");

            await KtaService.CompleteActivityAsync(dto.SessionId, dto.Requester.Username, dto.ManagerDecision.Id, dto.ManagerDecision.Comment, dto.activity.Identity);

            return(dto);
        }
        private async Task <SoftwareDTO> PrepareDTO(RequestDataModel data)
        {
            SoftwareDTO dto = new SoftwareDTO();


            dto.DomainModel = await GetQuerable().Where(x => x.JobId == data.JobId).Include(x => x.ITSoftwareContractor).FirstOrDefaultAsync();

            //Get Software items
            var SoftwareItems = _itSoftwareRequestItemsService.GetQuerable().Where(x => x.RequestID == dto.DomainModel.Id).Include(x => x.ITStatuses).Include(x => x.ITSoftwareApps).Include(x => x.ITSoftwareApps.ITSoftwareCategory);

            var itSoftwareRequestItems = new List <SoftwareRequestItemsModel>();

            foreach (var item in SoftwareItems)
            {
                var tobeAdded = Mapper.Map <SoftwareRequestItemsModel>(item);
                tobeAdded.RequestDate = dto.DomainModel.RDate;
                itSoftwareRequestItems.Add(tobeAdded);
            }

            dto.ITSoftwareRequestItems = itSoftwareRequestItems;

            dto.EmployeeRequestsHistory = RetriveHistory(dto.DomainModel.EmployeeEmail);

            return(dto);
        }
        private List <SoftwareRequestItems> SetSoftwareRequestItems(SoftwareDTO dto)
        {
            var itSoftwareRequestItems = new List <SoftwareRequestItems>();


            foreach (var item in dto.ITSoftwareRequestItems)
            {
                if (item.Status == null)
                {
                    if (dto.ManagerDecision != null && dto.ManagerDecision.Id == ((int)EnumITStatus.Approved).ToString())
                    {
                        item.Status = EnumITStatus.Approved.ToString();
                    }
                    else if (dto.ManagerDecision != null && dto.ManagerDecision.Id == ((int)EnumITStatus.Rejected).ToString())
                    {
                        item.Status = EnumITStatus.Rejected.ToString();
                    }
                    else if (dto.ManagerDecision != null && dto.ManagerDecision.Id == ((int)EnumITStatus.ReturnToEmp).ToString())
                    {
                        item.Status = EnumITStatus.ReturnToEmp.ToString();
                    }
                    else if (dto.ManagerDecision != null && dto.ManagerDecision.Id == ((int)EnumITStatus.ForwardToITGov).ToString())
                    {
                        item.Status = EnumITStatus.ForwardToITGov.ToString();
                    }
                    else if (dto.ManagerDecision != null && dto.ManagerDecision.Id == ((int)EnumITStatus.Executed).ToString())
                    {
                        if (dto.activity.Identity.NodeId == ConstantNodes.HelpDesk_NodeId || dto.activity.Identity.NodeId == ConstantNodes.NodeId_EmployeeUpdate)
                        {
                            item.Status = EnumITStatus.Executed.ToString();
                        }
                    }
                    else if (dto.ManagerDecision != null && dto.ManagerDecision.Id == ((int)EnumITStatus.NotExecuted).ToString())
                    {
                        if (dto.activity.Identity.NodeId == ConstantNodes.HelpDesk_NodeId)
                        {
                            item.Status = EnumITStatus.NotExecuted.ToString();
                        }
                    }
                }
                else if (item.Status != "Rejected" && item.Status != "ForwardToITGov")
                {
                    item.Status = ((EnumITStatus)int.Parse(item.Status)).ToString();
                }

                item.UpdatedBy = dto.Requester.Username;
                item.RequestID = dto.DomainModel.Id;
                var tobeAdded = Mapper.Map <SoftwareRequestItems>(item);
                itSoftwareRequestItems.Add(tobeAdded);
            }

            return(itSoftwareRequestItems);
        }
        public async Task <SoftwareDTO> SaveRequestData(SoftwareDTO dto)
        {
            Mapper.Map(dto.ITSoftwareRequestItems, dto.DomainModel.ITSoftwareRequestItems);

            dto.DomainModel.RDate = DateTime.Now;
            await AddNewRequest(dto.DomainModel);

            logger.LogDebug($"SessionId {dto.SessionId} , process ID {AppConfiguaraton.ITSoftwareProcessID} , DomainModel.Id {dto.DomainModel.Id} ");

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

            logger.LogDebug($"Create Job ID fired {dto.DomainModel.JobId}");
            await UpdateKtaJobID(dto.DomainModel.Id, dto.DomainModel.JobId);

            logger.LogDebug($"Create Job ID fired {dto.DomainModel.JobId}");
            return(dto);
        }