using System; using System.Collections.Generic; using System.Linq; using Tanshu.Accounts.Entities; using Tanshu.Accounts.Entities.Auth; using NHibernate.Criterion; using Tanshu.Accounts.Contracts; using Tanshu.Common.Helpers; using NHibernate; using NHibernate.Transform; namespace Tanshu.Accounts.Repository { public class CheckoutBI { #region Properties public Dictionary amounts = new Dictionary(); public Dictionary info = new Dictionary(); public string Cashiers { get; private set; } public User Cashier { get; private set; } public DateTime StartDate { get; private set; } public DateTime FinishDate { get; private set; } public string Manager { get { return Session.User.Name; } } #endregion protected readonly ISession _session; public CheckoutBI(Guid cashier, DateTime startDate, DateTime finishDate) { _session = SessionManager.Session; StartDate = startDate.Date.AddHours(6); FinishDate = finishDate.Date.AddDays(1).AddHours(5); Cashier = _session.QueryOver() .Where(x => x.UserID == cashier) .SingleOrDefault(); Cashiers = GetActiveCashiers(); GetBillDetails(); } public void GetBillDetails() { if (FinishDate <= StartDate) return; Voucher vAlias = null; VoucherSettlement vsAlias = null; var list = _session.QueryOver(() => vAlias) .Left.JoinAlias(x => x.Settlements, () => vsAlias) .Where(x => x.Date >= StartDate && x.Date <= FinishDate && x.User == Cashier) .OrderBy(x => x.VoucherType).Asc .ThenBy(x => x.BillID).Asc .TransformUsing(Transformers.DistinctRootEntity) .List(); //voidInfo = "\n\r--- Void Bills ---------------------------"; foreach (var item in list) { if (item.Void) { if (!amounts.ContainsKey(SettleOption.Void)) { amounts.Add(SettleOption.Void, 0); info.Add(SettleOption.Void, string.Format("\n\r--- {0} ", SettleOption.Void.Display()).PadRight(44, '-')); } var amount = (int)(item.Settlements.Single(x => x.Settled == SettleOption.Amount).Amount * -1); amounts[SettleOption.Void] += amount; info[SettleOption.Void] += string.Format("\n\r{0:dd-MMM-yyyy HH:mm:ss} {1} {2}", item.Date, item.FullBillID, item.Customer.Name); info[SettleOption.Void] += string.Format("\n\rAmount: {0:#0.00}", amount); info[SettleOption.Void] += "\n\r------------------------------------------"; } else { foreach (var so in item.Settlements.Where(x => x.Settled.Visible())) { if (!amounts.ContainsKey(so.Settled)) { amounts.Add(so.Settled, 0); info.Add(so.Settled, string.Format("\n\r--- {0} ", so.Settled.Display()).PadRight(44, '-')); } var amount = (int)so.Amount; amounts[so.Settled] += amount; info[so.Settled] += string.Format("\n\r{0:dd-MMM-yyyy HH:mm:ss} {1} {2}", item.Date, item.FullBillID, item.Customer.Name); info[so.Settled] += string.Format("\n\rAmount: {0:#0.00}", amount); info[so.Settled] += "\n\r------------------------------------------"; } } } } private string GetActiveCashiers() { var cashiers = ""; const string query = @" select distinct(u.Name) from Voucher v inner join v.User u where v.Date >= :startDate and v.Date <= :finishDate"; var list = _session.CreateQuery(query) .SetParameter("startDate", StartDate) .SetParameter("finishDate", FinishDate) .List(); foreach (var item in list) cashiers += item + ", "; return cashiers; } } }