EnVisageOnline/Main-RMO/Source/EnVisage/Code/BLL/ClientManager.cs

106 lines
3.6 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)
{
var client = base.Save(model);
if (Guid.Empty.Equals(model.Id))
{
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
{
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;
}
// SA. ENV-1171
public IEnumerable<ClientListModel> GetListReadOnly()
{
IEnumerable<ClientListModel> query = (
from c in DbContext.Clients
join ac in DbContext.GLAccounts on c.GLAccountId equals ac.Id into lnks
from lnk in lnks.DefaultIfEmpty()
select new ClientListModel()
{
Id = c.Id,
Name = c.Name,
ClientNumber = c.ClientNumber ?? string.Empty,
ProjectsCount = c.Projects.Count(),
GlAccount = (lnk == null) ? string.Empty : lnk.Name,
Companies = c.Company2Client.Select(x => x.Company.Name).ToList()
}).AsNoTracking();
return query;
}
}
}