using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.ComponentModel.DataAnnotations; using WalkingTec.Mvvm.Core; using WalkingTec.Mvvm.Core.Extensions; using wtmProject.Model; using Microsoft.EntityFrameworkCore; namespace wtmProject.ViewModel._Admin.FrameworkUserVMs { public partial class FrameworkUserVM : BaseCRUDVM { [Display(Name = "_Admin.Role")] public List SelectedRolesCodes { get; set; } [Display(Name = "_Admin.Project")] public List SelectedProjectCodes { get; set; } [Display(Name = "_Admin.Area")] public List SelectedAreaCodes { get; set; } public FrameworkUserVM() { SetInclude(x => x.Group); } public override DuplicatedInfo SetDuplicatedCheck() { var rv = CreateFieldsInfo(SimpleField(x => x.ITCode)); return rv; } protected override void InitVM() { SelectedRolesCodes = DC.Set().Where(x => x.UserCode == Entity.ITCode).Select(x => x.RoleCode).ToList(); SelectedProjectCodes = DC.Set().Where(x => x.UserCode == Entity.ITCode).Select(x => x.ProjectCode).ToList(); SelectedAreaCodes = DC.Set().Where(x => x.UserCode == Entity.ITCode).Select(x => x.AreaCode).ToList(); } public override async Task DoAddAsync() { using (var trans = DC.BeginTransaction()) { if (SelectedRolesCodes != null) { foreach (var rolecode in SelectedRolesCodes) { FrameworkUserRole r = new FrameworkUserRole { RoleCode = rolecode, UserCode = Entity.ITCode, TenantCode = LoginUserInfo.CurrentTenant }; DC.AddEntity(r); } } if (SelectedProjectCodes != null) { foreach (var projectcode in SelectedProjectCodes) { WTM_USER_PROJECT g = new WTM_USER_PROJECT { ProjectCode = projectcode, UserCode = Entity.ITCode, TenantCode = LoginUserInfo.CurrentTenant }; DC.AddEntity(g); } } if (SelectedAreaCodes != null) { foreach (var areacode in SelectedAreaCodes) { WTM_USER_AREA g = new WTM_USER_AREA { AreaCode = areacode, UserCode = Entity.ITCode, TenantCode = LoginUserInfo.CurrentTenant }; DC.AddEntity(g); } } Entity.IsValid = true; Entity.Password = Utils.GetMD5String(Entity.Password); await base.DoAddAsync(); if (MSD.IsValid) { trans.Commit(); } else { trans.Rollback(); } } } public override async Task DoEditAsync(bool updateAllFields = false) { using (var trans = DC.BeginTransaction()) { if (SelectedRolesCodes != null) { List todelete = new List(); todelete.AddRange(DC.Set().AsNoTracking().Where(x => x.UserCode == Entity.ITCode).Select(x => x.ID)); foreach (var item in todelete) { DC.DeleteEntity(new FrameworkUserRole { ID = item }); } } if (SelectedProjectCodes != null) { List todelete = new List(); todelete.AddRange(DC.Set().AsNoTracking().Where(x => x.UserCode == Entity.ITCode).Select(x => x.ID)); foreach (var item in todelete) { DC.DeleteEntity(new WTM_USER_PROJECT { ID = item }); } } if (SelectedAreaCodes != null) { List todelete = new List(); todelete.AddRange(DC.Set().AsNoTracking().Where(x => x.UserCode == Entity.ITCode).Select(x => x.ID)); foreach (var item in todelete) { DC.DeleteEntity(new WTM_USER_AREA { ID = item }); } } if (SelectedRolesCodes != null) { foreach (var rolecode in SelectedRolesCodes) { FrameworkUserRole r = new FrameworkUserRole { RoleCode = rolecode, UserCode = Entity.ITCode, TenantCode = LoginUserInfo.CurrentTenant }; DC.AddEntity(r); } } if (SelectedProjectCodes != null) { foreach (var projectcode in SelectedProjectCodes) { WTM_USER_PROJECT g = new WTM_USER_PROJECT { ProjectCode = projectcode, UserCode = Entity.ITCode, TenantCode = LoginUserInfo.CurrentTenant }; DC.AddEntity(g); } } if (SelectedAreaCodes != null) { foreach (var areacode in SelectedAreaCodes) { WTM_USER_AREA g = new WTM_USER_AREA { AreaCode = areacode, UserCode = Entity.ITCode, TenantCode = LoginUserInfo.CurrentTenant }; DC.AddEntity(g); } } await base.DoEditAsync(updateAllFields); if (MSD.IsValid) { trans.Commit(); await Wtm.RemoveUserCache(Entity.ITCode); } else { trans.Rollback(); } } } public override async Task DoDeleteAsync() { using (var tran = DC.BeginTransaction()) { try { await base.DoDeleteAsync(); var ur = DC.Set().Where(x => x.UserCode == Entity.ITCode); DC.Set().RemoveRange(ur); var up = DC.Set().Where(x => x.UserCode == Entity.ITCode); DC.Set().RemoveRange(up); var ua = DC.Set().Where(x => x.UserCode == Entity.ITCode); DC.Set().RemoveRange(ua); DC.SaveChanges(); tran.Commit(); } catch { tran.Rollback(); } } await Wtm.RemoveUserCache(Entity.ITCode); } public void ChangePassword() { Entity.Password = Utils.GetMD5String(Entity.Password); DC.UpdateProperty(Entity, x => x.Password); DC.SaveChanges(); } } }