using System; using System.Collections.Generic; using System.Data.SqlClient; using Tanshu.Accounts.Contracts; using Tanshu.Data.DAO; using Tanshu.Accounts.Entities; using Tanshu.Accounts.SqlDAO; using NHibernate.Criterion; using Tanshu.Accounts.Entities.Auth; using NHibernate; namespace Tanshu.Accounts.Repository { public static class SaleVoucherBI { static public BillInventory GetDefaultSaleBillItem(int productID) { Product product; using (var session = SessionManager.Session) { product = session.Get(productID); return new BillInventory() { ProductID = product.ProductID, Name = product.Units == string.Empty ? product.Name : product.Name + " (" + product.Units + ")", Price = product.SalePrice, Tax = product.Tax.Rate, ServiceCharge = product.ServiceCharge, Discount = 0, Printed = 0, Quantity = 1, }; } } static public decimal GetProductDiscountLimit(int productID) { using (var session = SessionManager.Session) { return session.Get(productID).ProductGroup.DiscountLimit; } } static public bool IsBillPrinted(int voucherID) { using (var session = SessionManager.Session) { return session.Get(voucherID).Printed; } } static public bool Insert(SaleVoucher saleVoucher, IList inventory) { using (var session = SessionManager.Session) { using (var trans = session.BeginTransaction()) { DateTime dt = DbValues.Date; saleVoucher.CreationDate = dt; saleVoucher.LastEditDate = dt; saleVoucher.Date = dt; saleVoucher.KotID = DbValues.KotID; if (saleVoucher.Printed) saleVoucher.BillID = DbValues.BillID; else saleVoucher.BillID = saleVoucher.KotID; session.Save(saleVoucher); foreach (var item in inventory) { item.Voucher = saleVoucher; IList list = new List(); foreach (var mod in item.InventoryModifier) list.Add(mod.Modifier); item.InventoryModifier = new List(); session.Save(item); foreach (var mod in list) session.Save(new InventoryModifier() { Inventory = item, Modifier = mod }); } trans.Commit(); return true; } } } static public bool Update(SaleVoucher saleVoucher, IList inventory) { using (var session = SessionManager.Session) { using (var trans = session.BeginTransaction()) { DateTime dt = DbValues.Date; saleVoucher.LastEditDate = dt; saleVoucher.Inventories = inventory; if (saleVoucher.Date == null) { saleVoucher.Date = dt; saleVoucher.BillID = DbValues.BillID; } if (!saleVoucher.Printed) saleVoucher.Date = dt; foreach (var item in inventory) { item.Voucher = saleVoucher; IList list = new List(); foreach (var mod in item.InventoryModifier) list.Add(mod.Modifier); item.InventoryModifier = new List(); session.Save(item); foreach (var mod in list) session.Save(new InventoryModifier() { Inventory = item, Modifier = mod }); } session.Merge(saleVoucher); trans.Commit(); return true; } } } static public bool GetSaleVoucher(int voucherID, out SaleVoucher saleVoucher, out IList iList) { using (var session = SessionManager.Session) { saleVoucher = session.Get(voucherID); foreach (var item in saleVoucher.Inventories) { NHibernateUtil.Initialize(item); foreach (var inmod in item.InventoryModifier) NHibernateUtil.Initialize(inmod.Modifier); } iList = saleVoucher.Inventories; NHibernateUtil.Initialize(saleVoucher.Customer); NHibernateUtil.Initialize(saleVoucher.Waiter); NHibernateUtil.Initialize(saleVoucher.User); return true; } } //public List GetPendingBills(PendingType list) //{ // GetFactory factory = GetFactory.GetDAOFactory(Database.GetFactoryType); // using (IConnectionDAO connection = factory.Connection) // { // using (ISaleVoucherMixDAO dao = factory.GetSaleVoucherMixDAO(connection)) // { // return dao.GetPendingBills(list); // } // } //} static public SaleVoucher GetPendingVoucherID(string tableID) { using (var session = SessionManager.Session) { return (from v in session.QueryOver() where v.Void == false && v.TableID == tableID && v.Settled.SettleOptionID == SettleOptionFactory.Unsettled select v).SingleOrDefault(); } } static public string GetTableStatus(string tableID) { using (var session = SessionManager.Session) { var s = (from v in session.QueryOver() where v.Void == false && v.TableID == tableID && v.Settled.SettleOptionID == SettleOptionFactory.Unsettled select v).SingleOrDefault(); if (s == null) return "default"; else if (s.Printed == true) return "printed"; else return "running"; } } //public List SaleInventory(Dictionary.ValueCollection list, Guid? voucherID) //{ // GetFactory factory = GetFactory.GetDAOFactory(Database.GetFactoryType); // using (IConnectionDAO connection = factory.Connection) // { // using (ISaleVoucherMixDAO dao = factory.GetSaleVoucherMixDAO(connection)) // { // return dao.SaleInventory(list, voucherID); // } // } //} //public void GetComplexBillInformation(Guid voucherID, Guid complexProductID, ref decimal rate, ref decimal quantity, ref string name) //{ // GetFactory factory = GetFactory.GetDAOFactory(Database.GetFactoryType); // using (IConnectionDAO connection = factory.Connection) // { // using (ISaleVoucherMixDAO dao = factory.GetSaleVoucherMixDAO(connection)) // { // dao.GetComplexBillInformation(voucherID, complexProductID, ref rate, ref quantity, ref name); // } // } //} //public void SetAlarm(Guid voucherID, DateTime? alarmTime) //{ // GetFactory factory = GetFactory.GetDAOFactory(Database.GetFactoryType); // using (IConnectionDAO connection = factory.Connection) // { // using (ISaleVoucherDAO dao = factory.GetSaleVoucherDAO(connection)) // { // dao.SetAlarm(voucherID, alarmTime); // } // } //} static public void VoidBill(int voucherID, string reason) { using (var session = SessionManager.Session) { using (var trans = session.BeginTransaction()) { var saleVoucher = session.Get(voucherID); saleVoucher.Void = true; saleVoucher.VoidReason = reason; session.Save(saleVoucher); trans.Commit(); } } } static public void SettleVoucher(User user, int voucherID, int settleOption) { using (var session = SessionManager.Session) { using (var trans = session.BeginTransaction()) { var saleVoucher = session.Get(voucherID); saleVoucher.Settled = SettleOptionBI.GetSettleOption(settleOption); saleVoucher.User = user; saleVoucher.LastEditDate = DbValues.Date; session.Merge(saleVoucher); trans.Commit(); } } } } }