208 lines
8.0 KiB
C#
208 lines
8.0 KiB
C#
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<FrameworkUser>
|
|
{
|
|
[Display(Name = "_Admin.Role")]
|
|
public List<string> SelectedRolesCodes { get; set; }
|
|
[Display(Name = "_Admin.Project")]
|
|
public List<string> SelectedProjectCodes { get; set; }
|
|
[Display(Name = "_Admin.Area")]
|
|
public List<string> SelectedAreaCodes { get; set; }
|
|
public FrameworkUserVM()
|
|
{
|
|
SetInclude(x => x.Group);
|
|
}
|
|
public override DuplicatedInfo<FrameworkUser> SetDuplicatedCheck()
|
|
{
|
|
var rv = CreateFieldsInfo(SimpleField(x => x.ITCode));
|
|
return rv;
|
|
}
|
|
protected override void InitVM()
|
|
{
|
|
SelectedRolesCodes = DC.Set<FrameworkUserRole>().Where(x => x.UserCode == Entity.ITCode).Select(x => x.RoleCode).ToList();
|
|
SelectedProjectCodes = DC.Set<WTM_USER_PROJECT>().Where(x => x.UserCode == Entity.ITCode).Select(x => x.ProjectCode).ToList();
|
|
SelectedAreaCodes = DC.Set<WTM_USER_AREA>().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<Guid> todelete = new List<Guid>();
|
|
todelete.AddRange(DC.Set<FrameworkUserRole>().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<Guid> todelete = new List<Guid>();
|
|
todelete.AddRange(DC.Set<WTM_USER_PROJECT>().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<Guid> todelete = new List<Guid>();
|
|
todelete.AddRange(DC.Set<WTM_USER_AREA>().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<FrameworkUserRole>().Where(x => x.UserCode == Entity.ITCode);
|
|
DC.Set<FrameworkUserRole>().RemoveRange(ur);
|
|
var up = DC.Set<WTM_USER_PROJECT>().Where(x => x.UserCode == Entity.ITCode);
|
|
DC.Set<WTM_USER_PROJECT>().RemoveRange(up);
|
|
var ua = DC.Set<WTM_USER_AREA>().Where(x => x.UserCode == Entity.ITCode);
|
|
DC.Set<WTM_USER_AREA>().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();
|
|
}
|
|
}
|
|
}
|