89 lines
3.0 KiB
C#
89 lines
3.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data.Entity;
|
|
using System.Linq;
|
|
using System.Web;
|
|
using EnVisage.Models;
|
|
|
|
namespace EnVisage.Code.BLL
|
|
{
|
|
public class ClientManager : ManagerBase<Client, ClientModel>
|
|
{
|
|
public ClientManager(EnVisageEntities dbContext)
|
|
: base(dbContext)
|
|
{
|
|
}
|
|
|
|
protected override Client InitInstance()
|
|
{
|
|
return new Client { Id = Guid.NewGuid() };
|
|
}
|
|
|
|
protected override Client RetrieveReadOnlyById(Guid key)
|
|
{
|
|
return DataTable.AsNoTracking().FirstOrDefault(t => t.Id == key);
|
|
}
|
|
|
|
public override DbSet<Client> DataTable
|
|
{
|
|
get
|
|
{
|
|
return DbContext.Clients;
|
|
}
|
|
}
|
|
|
|
public ClientModel LoadWithChildCollections(Guid? value, bool isReadOnly = true)
|
|
{
|
|
ClientModel result = (ClientModel)base.Load(value, isReadOnly);
|
|
if(value.HasValue)
|
|
{
|
|
var companies=DbContext.Company2Client.Where(x => x.ClientId == value.Value).ToList();
|
|
result.CompanyId = companies.Select(x => x.CompanyId).ToList();
|
|
result.Company = companies.Select(x => x.Company.Name).ToList();
|
|
}
|
|
return result;
|
|
}
|
|
|
|
public override Client Save(ClientModel model)
|
|
{
|
|
Client client = null;
|
|
if (Guid.Empty.Equals(model.Id))
|
|
{
|
|
client = base.Save(model);
|
|
|
|
if (model.CompanyId != null)
|
|
{
|
|
foreach (var companyId in model.CompanyId)
|
|
{
|
|
var company2Client = DbContext.Company2Client.Create();
|
|
company2Client.Id = Guid.NewGuid();
|
|
company2Client.ClientId = client.Id;
|
|
company2Client.CompanyId = companyId;
|
|
DbContext.Company2Client.Add(company2Client);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
client = base.Save(model);
|
|
|
|
var currentCompany2Clients = DbContext.Company2Client.Where(x => x.ClientId == model.Id).ToList();
|
|
currentCompany2Clients.Where(x => model.CompanyId == null || !model.CompanyId.Contains(x.CompanyId)).ToList().
|
|
ForEach(x => DbContext.Entry(x).State = EntityState.Deleted);
|
|
|
|
if (model.CompanyId != null)
|
|
{
|
|
foreach (var companyId in model.CompanyId.Where(c => currentCompany2Clients.All(x => x.CompanyId != c)))
|
|
{
|
|
var company2Client = DbContext.Company2Client.Create();
|
|
company2Client.Id = Guid.NewGuid();
|
|
company2Client.ClientId = client.Id;
|
|
company2Client.CompanyId = companyId;
|
|
DbContext.Company2Client.Add(company2Client);
|
|
}
|
|
}
|
|
}
|
|
return client;
|
|
}
|
|
}
|
|
} |