using System; using System.Collections.Generic; using System.Linq.Expressions; using Tanshu.Accounts.Contracts; using Tanshu.Accounts.Entities; using NHibernate; namespace Tanshu.Accounts.Repository { public class ProductBI : UnitOfWork { public Product Get(string nameAndUnits) { return Get(x => x.Name + " (" + x.Units + ")" == nameAndUnits); } public new IList List(Expression> query) { var list = _session.QueryOver() .Where(query) .OrderBy(x => x.SortOrder).Asc .ThenBy(x => x.Name).Asc .List(); foreach (var item in list) { NHibernateUtil.Initialize(item.ProductGroup); NHibernateUtil.Initialize(item.ServiceTax); NHibernateUtil.Initialize(item.Vat); } return list; } public new IList List() { var list = _session.QueryOver() .OrderBy(x => x.ProductGroup).Asc .ThenBy(x => x.SortOrder).Asc .ThenBy(x => x.Name).Asc .List(); foreach (var item in list) { NHibernateUtil.Initialize(item.ProductGroup); NHibernateUtil.Initialize(item.ServiceTax); NHibernateUtil.Initialize(item.Vat); } return list; } public static IList List(Guid productGroupID) { using (var session = SessionManager.Session) { return (from product in session.QueryOver() where product.ProductGroup.ProductGroupID == productGroupID select product).List(); } } public void UpdateSortOrder(IList list) { int order = 0; Guid lastGroup = Guid.Empty; for (int i = 0; i < list.Count; i++) { var item = list[i]; if (lastGroup != item.ProductGroup.ProductGroupID) { order = 0; lastGroup = item.ProductGroup.ProductGroupID; } else { order += 5; } var product = _session.Get(item.ProductID); product.SortOrder = order; _session.Update(product); } } } }