/// <summary> /// Gets the top sellers. /// </summary> /// <param name="sessionID">The sessionID of the current session</param> /// <param name="start">The start date and time </param> /// <param name="end">The end date and time</param> /// <param name="numberOfItems">The number of items.</param> /// <returns></returns> public List<ItemSalesSummery> GetTopSellers(string sessionID, DateTime start, DateTime end, int numberOfItems) { BillItemsTableAdapter bia = new BillItemsTableAdapter(); CustomerTransactionsTableAdapter cta = new CustomerTransactionsTableAdapter(); var transactions = cta.GetDataByTimeFrame(start, end); List<CRySTALDataConnections.CRySTALDataSet.BillItemsRow> bit = new List<CRySTALDataConnections.CRySTALDataSet.BillItemsRow>(); foreach (var trans in transactions) { var billsItems = bia.GetDataByWorkflowID(trans.WorkflowInstID).ToList(); bit.AddRange(billsItems); } List<string> itemNames = (from p in bit select p.Name).Distinct().ToList(); List<ItemSalesSummery> iss = new List<ItemSalesSummery>(); foreach (string itemName in itemNames) { ItemSalesSummery sum = new ItemSalesSummery(); sum.itemName = itemName; sum.totalAmountSold = (from p in bit where p.Name == itemName select p).Count(); sum.cost = (from p in bit where p.Name == itemName select p.Price).FirstOrDefault(); sum.totalAmount = sum.totalAmountSold * sum.cost; iss.Add(sum); } return (from p in iss orderby p.totalAmountSold descending select p).Take(numberOfItems).ToList(); }
/// <summary> /// Gets the transactions over a time frame. /// </summary> /// <param name="sessionID">The sessionID of the current session</param> /// <param name="startTime">The start time.</param> /// <param name="endTime">The end time.</param> /// <returns></returns> public List<Transaction> GetTransactions(string sessionID, DateTime startTime, DateTime endTime) { CustomerTransactionsTableAdapter cta = new CustomerTransactionsTableAdapter(); var rows = cta.GetDataByTimeFrame(startTime, endTime); List<Transaction> re = new List<Transaction>(); foreach (var row in rows) { Transaction trans = new Transaction(); trans.Bill = GetBillFromDB(row.WorkflowInstID); trans.AssignedTo = row.AssignedTo; trans.StartTime = row.StartTime; if (row.IsEndTimeNull()) trans.EndTime = null; else trans.EndTime = row.EndTime; trans.ID = row.Id; trans.IsActive = row.IsActive; trans.NotPaied = row.NotPaied; trans.TableNumber = row.TableNumber; trans.WorkflowInstID = row.WorkflowInstID; re.Add(trans); } return re; }
/// <summary> /// Gets the statistics. /// </summary> /// <param name="sessionID">The sessionID of the current session</param> /// <param name="stat">The stat.</param> /// <param name="typeOfStat">The type of stat.</param> /// <param name="productID">The product ID.</param> /// <param name="start">The start date and time </param> /// <param name="end">The end date and time</param> /// <returns></returns> public List<double> GetStatistics(string sessionID, StatObject stat, StatType typeOfStat, int productID, DateTime start, DateTime end) { if (stat == StatObject.Income) { if (typeOfStat == StatType.ForEachDay) { BillItemsTableAdapter bia = new BillItemsTableAdapter(); CustomerTransactionsTableAdapter cta = new CustomerTransactionsTableAdapter(); var transactions = cta.GetDataByTimeFrame(start, end); int numOfDays = (int)(end.Date.Subtract(start.Date).TotalDays); double[] re = new double[numOfDays+1]; foreach (var trans in transactions) { if (!trans.IsEndTimeNull()) { int dayVal = (int)(trans.EndTime.Date.Subtract(start.Date).TotalDays); var bills = bia.GetDataByWorkflowID(trans.WorkflowInstID); re[dayVal] += (double)(from p in bills select p.Price).Sum(); } } return re.ToList(); } } else if (stat == StatObject.PayroleExpence) { if (typeOfStat == StatType.ForEachDay) { WorkerShiftsTableAdapter wta = new WorkerShiftsTableAdapter(); var shifts = wta.GetDataByTimeFrame(start, end); int numOfDays = (int)(end.Date.Subtract(start.Date).TotalDays); RolePayrateTableAdapter rta = new RolePayrateTableAdapter(); var payoutTable = rta.GetData(); List<double> re = new List<double>(); DateTime i_start = start.Date; DateTime i_end = i_start.Add(new TimeSpan(1, 0, 0, 0)); for (int i = 0; i < numOfDays; i++) { decimal v = (from p in shifts where p.StartTime > i_start && p.StartTime < i_end && p.IsEndTimeNull() == false select (from q in payoutTable where q.Role == p.Role select q.PayPerHour).FirstOrDefault() * (decimal)(p.EndTime.Subtract(p.StartTime).TotalHours)).Sum(); re.Add((double)v); i_start = i_end; i_end = i_start.Add(new TimeSpan(1, 0, 0, 0)); } return re; } } return null; }