using Infrastructure.Application; using Infrastructure.Data; using Infrastructure.Extensions; using Infrastructure.Web.Mvc; using IoT.Shared.Areas.Admin.Controlls; using IoTCenter.Application.Domain; using IoTCenter.Application.Models; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using System.Linq; namespace IoTCenter.Areas.Admin.Controllers { [Authorize] [Area(nameof(Admin))] public class OrganController : CrudController, EditOrganModel, EditOrganModel> { private readonly AjaxController _ajax; public OrganController(IRepository repo, AjaxController ajax) : base(repo) { this._ajax = ajax; } public override IQueryable Include(IQueryable query) { return query.Include(o => o.OrganNodes).ThenInclude(o => o.Node); } public override void ToDisplayModel(Organ entity, EditOrganModel model) { model.Nodes = entity.OrganNodes.Select(o => o.NodeId).ToList(); entity.OrganNodes.ForEach(o => ViewData.Add(o.NodeId, o.Node.Name)); } public override void ToEditModel(Organ entity, EditOrganModel model) { if (entity != null) { model.Nodes = entity.OrganNodes.Select(o => o.NodeId).ToList(); } this.ViewData.MultiSelectList(o => model.Nodes, () => this._ajax.GetNodeMultiSelectList(model.Nodes)); } public override void ToEntity(EditOrganModel model, Organ entity) { foreach (var id in entity.OrganNodes.Select(o => o.NodeId).ToList()) { if (!model.Nodes.Any(o => o == id)) { entity.OrganNodes.RemoveAll(o => o.NodeId == id); } } foreach (var id in model.Nodes) { if (!entity.OrganNodes.Any(o => o.NodeId == id)) { entity.OrganNodes.Add(new OrganNode { NodeId = id }); } } } } }