public async Task <IActionResult> Edit(long id, [Bind("SystemId,SystemName,SystemType,SystemDescription,SystemServer,SystemAuthType,SystemUserName,SystemSecretName,SystemKeyVaultBaseUrl,SystemJson,ActiveYn")] SourceAndTargetSystems sourceAndTargetSystems)
        {
            if (id != sourceAndTargetSystems.SystemId)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(sourceAndTargetSystems);

                    if (!await CanPerformCurrentActionOnRecord(sourceAndTargetSystems))
                    {
                        return(new ForbidResult());
                    }

                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!SourceAndTargetSystemsExists(sourceAndTargetSystems.SystemId))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(IndexDataTable)));
            }
            return(View(sourceAndTargetSystems));
        }
        // GET: SourceAndTargetSystems/Create
        public IActionResult Create()
        {
            SourceAndTargetSystems sourceAndTargetSystems = new SourceAndTargetSystems();

            sourceAndTargetSystems.ActiveYn = true;
            return(View(sourceAndTargetSystems));
        }
        public async Task <IActionResult> Create([Bind("SystemId,SystemName,SystemType,SystemDescription,SystemServer,SystemAuthType,SystemUserName,SystemSecretName,SystemKeyVaultBaseUrl,SystemJson,ActiveYn")] SourceAndTargetSystems sourceAndTargetSystems)
        {
            if (ModelState.IsValid)
            {
                _context.Add(sourceAndTargetSystems);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(IndexDataTable)));
            }
            return(View(sourceAndTargetSystems));
        }
        public async Task <IActionResult> FindMapping()
        {
            Int64 TaskTypeId = System.Convert.ToInt64(Request.Form["TaskTypeId"]);


            List <TaskTypeMapping> taskTypeMappings = new List <TaskTypeMapping>();

            if (Request.Form.ContainsKey("SourceSystemId"))
            {
                Int64 SourceSystemId = System.Convert.ToInt64(Request.Form["SourceSystemId"]);
                SourceAndTargetSystems SourceSystem = _context.SourceAndTargetSystems.FirstOrDefault(m => m.SystemId == SourceSystemId);
                if (Request.Form.ContainsKey("TargetSystemId")) //We Have Both Source And Target Systems
                {
                    JObject TaskJsonObject = JObject.Parse(Request.Form["TaskMasterJson"]);
                    Int64   TargetSystemId = System.Convert.ToInt64(Request.Form["TargetSystemId"]);
                    SourceAndTargetSystems TargetSystem = _context.SourceAndTargetSystems.FirstOrDefault(m => m.SystemId == TargetSystemId);

                    string TaskMasterJsonSource     = TaskJsonObject["Source"].ToString();
                    string TaskMasterJsonTarget     = TaskJsonObject["Target"].ToString();
                    string TaskMasterJsonSourceType = "*";
                    string TaskMasterJsonTargetType = "*";

                    if (TaskMasterJsonSource != null && TaskMasterJsonSource != "")
                    {
                        TaskMasterJsonSourceType = JObject.Parse(TaskMasterJsonSource)["Type"].ToString();
                    }

                    if (TaskMasterJsonTarget != null || TaskMasterJsonTarget != "")
                    {
                        TaskMasterJsonTargetType = JObject.Parse(TaskMasterJsonTarget)["Type"].ToString();
                    }

                    taskTypeMappings = _context.TaskTypeMapping
                                       .Where(m => m.TaskTypeId == TaskTypeId &&
                                              m.SourceSystemType == SourceSystem.SystemType &&
                                              m.TargetSystemType == TargetSystem.SystemType &&
                                              m.SourceType == TaskMasterJsonSourceType &&
                                              m.TargetType == TaskMasterJsonTargetType
                                              ).ToList();
                    goto RetVal;
                }
                else //We Only Have Source System And Dont Have Target
                {
                    taskTypeMappings = _context.TaskTypeMapping
                                       .Where(m => m.TaskTypeId == TaskTypeId &&
                                              m.SourceSystemType == SourceSystem.SystemType
                                              ).ToList();
                    goto RetVal;
                }
            }
            else
            {
                if (Request.Form.ContainsKey("TargetSystemId")) //We Only have Target System
                {
                    Int64 TargetSystemId = System.Convert.ToInt64(Request.Form["TargetSystemId"]);
                    SourceAndTargetSystems TargetSystem = _context.SourceAndTargetSystems.FirstOrDefault(m => m.SystemId == TargetSystemId);
                    taskTypeMappings = _context.TaskTypeMapping
                                       .Where(m => m.TaskTypeId == TaskTypeId &&
                                              m.TargetSystemType == TargetSystem.SystemType
                                              ).ToList();
                    goto RetVal;
                }
                else
                {
                    taskTypeMappings = _context.TaskTypeMapping
                                       .Where(m => m.TaskTypeId == TaskTypeId
                                              ).ToList();
                    goto RetVal;
                }
            }


RetVal:
            if (taskTypeMappings.Count == 0)
            {
                return(NotFound());
            }

            var SourceTypes = taskTypeMappings.Select(d => d.SourceSystemType).Distinct();
            var TargetTypes = taskTypeMappings.Select(d => d.TargetSystemType).Distinct();

            var ValidSourceSystems = _context.SourceAndTargetSystems.Where(s => SourceTypes.Contains(s.SystemType));
            var ValidTargetSystems = _context.SourceAndTargetSystems.Where(s => TargetTypes.Contains(s.SystemType));

            return(new OkObjectResult(JsonConvert.SerializeObject(new { ValidSourceSystems = ValidSourceSystems, ValidTargetSystems = ValidTargetSystems, TaskTypeMappings = taskTypeMappings })));
        }