81 lines
3.1 KiB
C#
81 lines
3.1 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Tanshu.Accounts.Entities;
|
|
|
|
namespace Tanshu.Accounts.Repository
|
|
{
|
|
public class ModifierBI : UnitOfWork<Modifier>
|
|
{
|
|
public IList<ProductGroup> ProductGroupList()
|
|
{
|
|
return _session.QueryOver<ProductGroup>()
|
|
.OrderBy(x => x.SortOrder).Asc
|
|
.List();
|
|
}
|
|
public void Insert(Modifier modifier, bool showForAll, IEnumerable<ProductGroup> selectedGroups)
|
|
{
|
|
if (showForAll)
|
|
selectedGroups = null;
|
|
SetGroups(modifier, selectedGroups);
|
|
_session.Save(modifier);
|
|
}
|
|
|
|
public void Update(Modifier modifier, bool showForAll, IEnumerable<ProductGroup> selectedGroups)
|
|
{
|
|
if (showForAll)
|
|
selectedGroups = null;
|
|
SetGroups(modifier, selectedGroups);
|
|
_session.Update(modifier);
|
|
}
|
|
private void SetGroups(Modifier modifier, IEnumerable<ProductGroup> selectedGroups)
|
|
{
|
|
if (selectedGroups == null)
|
|
{
|
|
var ug = modifier.ProductGroupModifiers.SingleOrDefault(x => x.ProductGroup == null);
|
|
var others = modifier.ProductGroupModifiers.Where(x => x.ProductGroup != null).ToList();
|
|
for (var i = others.Count() -1; i >= 0; i--)
|
|
{
|
|
var item = others[i];
|
|
modifier.ProductGroupModifiers.Remove(item);
|
|
_session.Delete(item);
|
|
}
|
|
if (ug == null)
|
|
{
|
|
var pgm = new ProductGroupModifier() { Modifier = modifier, ProductGroup = null, ShowAutomatically = false };
|
|
_session.Save(pgm);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var groups = new Dictionary<ProductGroup, bool>();
|
|
foreach (var item in ProductGroupList())
|
|
{
|
|
groups.Add(item, selectedGroups.Any(x => x.ProductGroupID == item.ProductGroupID));
|
|
}
|
|
foreach (var item in groups)
|
|
{
|
|
var id = item.Key.ProductGroupID;
|
|
var ug = modifier.ProductGroupModifiers.SingleOrDefault(x =>x.ProductGroup != null && x.ProductGroup.ProductGroupID == id);
|
|
if (item.Value && ug == null)
|
|
{
|
|
var pgm = new ProductGroupModifier() { Modifier = modifier, ProductGroup = item.Key, ShowAutomatically = false };
|
|
_session.Save(pgm);
|
|
}
|
|
else if (!item.Value && ug != null)
|
|
{
|
|
modifier.ProductGroupModifiers.Remove(ug);
|
|
_session.Delete(ug);
|
|
}
|
|
}
|
|
var blank = modifier.ProductGroupModifiers.SingleOrDefault(x => x.ProductGroup == null);
|
|
if (blank != null)
|
|
{
|
|
modifier.ProductGroupModifiers.Remove(blank);
|
|
_session.Delete(blank);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|