using System; using System.Collections.Generic; using Tanshu.Accounts.Contracts; using System.Data.SqlClient; using Tanshu.Data.DAO; namespace Tanshu.Accounts.SqlDAO { public class SaleVoucherMixDAO : BaseDAO { public SaleVoucherMixDAO(IConnectionDAO connection) : base(connection) { } public SalesBillItemBO GetDefaultSaleBillItem(Guid productID) { const string query = @" SELECT p.ProductID, p.Name + ' (' + p.Units +')', p.SalePrice, tv.Rate, ts.Rate, p.ProductGroupID FROM Products p INNER JOIN Tax tv ON p.VatID = tv.TaxID INNER JOIN Tax ts ON p.ServiceTaxID = ts.TaxID WHERE p.ProductID = @ProductID "; using (var cmd = new SqlCommand(query)) { cmd.Parameters.AddWithValue("@ProductID", productID); using (var dr = connection.ExecuteReader(cmd)) { dr.Read(); var mySale = new SalesBillItemBO { productID = dr.GetGuid(0), Name = dr.GetString(1), Price = dr.GetDecimal(2), Vat = dr.GetDecimal(3), ServiceTax = dr.GetDecimal(4), Discount = 0, location = "", Printed = 0, Quantity = 1 }; return mySale; } } } public decimal GetProductDiscountLimit(Guid productID) { const string query = @"SELECT t.DiscountLimit FROM ProductGroups t INNER JOIN Products p ON t.ProductGroupID = p.ProductGroupID WHERE p.ProductID = @ProductID"; decimal discountLimit; using (var cmd = new SqlCommand(query)) { cmd.Parameters.AddWithValue("@ProductID", productID); discountLimit = (decimal)connection.ExecuteScalar(cmd); } return discountLimit; } public bool IsBillPrinted(Guid voucherID) { const string query = @"SELECT Printed FROM SaleVoucher WHERE VoucherID = @VoucherID"; using (var cmd = new SqlCommand(query)) { cmd.Parameters.AddWithValue("@VoucherID", voucherID); return (bool)connection.ExecuteScalar(cmd); } } public List GetPendingBills(PendingType list, int floor) { var query = @" SELECT t.VoucherID, s.Alarm AS Alarm, s.TableID AS TableID, (SELECT SUM(Amount) FROM Inventory WHERE VoucherID = t.VoucherID) AS Amount, s.BillID, t.CreationDate, u.Name, CAST(0 AS bit), s.KotID, t.LastEditDate, s.Printed, s.AdvanceID FROM Vouchers t INNER JOIN SaleVoucher s ON t.VoucherID = s.VoucherID AND s.PaidStatus = @PaidStatus INNER JOIN Users u ON t.UserID = u.UserID "; if (list == PendingType.Alarms) query += "WHERE s.Alarm IS NOT NULL "; else query += "WHERE s.Alarm IS NULL "; if (floor != 0) query += "AND s.Floor = @Floor "; if (list == PendingType.Today) query += string.Format("AND t.LastEditDate >= '{0:dd-MMM-yyyy} 00:00:00' ", DateTime.Now); else if (list == PendingType.Week) query += string.Format("AND t.LastEditDate >= '{0:dd-MMM-yyyy} 00:00:00' ", DateTime.Now.AddDays(-7)); query += "ORDER BY t.CreationDate "; using (var cmd = new SqlCommand(query)) { cmd.Parameters.AddWithValue("@PaidStatus", (int)PaidStatus.Pending); if (floor != 0) cmd.Parameters.AddWithValue("@Floor", floor); using (var dr = connection.ExecuteReader(cmd)) { var outList = new List(); while (dr.Read()) { var local = new PendingBillsBO(); local.voucherID = dr.GetGuid(0); local.Alarm = !dr.IsDBNull(1); if (local.Alarm) local.AlarmTime = dr.GetDateTime(1); local.TableID = dr.GetString(2); if (!dr.IsDBNull(3)) local.Amount = dr.GetDecimal(3); local.BillNo = dr.GetString(4); local.BookingTime = dr.GetDateTime(5); local.Cashier = dr.GetString(6); local.Important = dr.GetBoolean(7); local.Kot = dr.GetString(8); local.LastEdited = dr.GetDateTime(9); local.Printed = dr.GetBoolean(10); if (!dr.IsDBNull(11)) local.AdvanceID = dr.GetGuid(11); outList.Add(local); } return outList; } } } public Guid? GetPendingVoucherID(string tableID, int floor) { var query = "SELECT VoucherID FROM SaleVoucher where TableID = @TableID and PaidStatus = @PaidStatus"; if (floor != 0) query += " AND Floor = @Floor "; using (var cmd = new SqlCommand(query)) { cmd.Parameters.AddWithValue("@TableID", tableID); cmd.Parameters.AddWithValue("@PaidStatus", (int)PaidStatus.Pending); if (floor != 0) cmd.Parameters.AddWithValue("@Floor", floor); using (var dr = connection.ExecuteReader(cmd)) { if (dr.Read()) { return dr.GetGuid(0); } return null; } } } public List SaleInventory(Dictionary.ValueCollection list, Guid? voucherID) { var localList = new Dictionary(); foreach (var item in list) { var temp = new InventoryBO(); if (localList.ContainsKey(item.productID)) { temp = localList[item.productID]; temp.Quantity += item.Quantity; } else { if (voucherID.HasValue) temp.VoucherID = voucherID.Value; temp.InventoryID = Guid.NewGuid(); temp.Discount = item.Discount; temp.ProductID = item.productID; temp.Quantity = item.Quantity; temp.Rate = item.Price; temp.Vat = item.Vat; temp.ServiceTax = item.ServiceTax; localList.Add(item.productID, temp); } } var outList = new List(); foreach (var item in localList) outList.Add(item.Value); return outList; } private class BillPaidClass { public Guid VoucherID { get; set; } public string KotID { get; set; } public bool Printed { get; set; } } public void DeclareBillsPaid(Guid userID, List billList, PaidStatus paidStatus) { var removeItems = new List(); var query = "SELECT VoucherID, KotID, Printed FROM SaleVoucher WHERE VoucherID IN ("; foreach (var voucherID in billList) { query += string.Format("'{0}', ", voucherID); } query = query.Substring(0, query.Length - 2) + ")"; var pbc = new List(); using (var cmd = new SqlCommand(query)) { using (var dr = connection.ExecuteReader(cmd)) { while (dr.Read()) { pbc.Add(new BillPaidClass { VoucherID = dr.GetGuid(0), KotID = dr.GetString(1), Printed = dr.GetBoolean(2) }); } } } foreach (var item in pbc) { //if ((item.Printed != false) || (MessageBox.Show("Pay unprinted bill No.: " + item.KotID + " ?", "Pay unprinted bill", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)) if (!item.Printed) continue; using (var cmd = new SqlCommand("UPDATE SaleVoucher SET PaidStatus = @PaidStatus WHERE VoucherID = @VoucherID; UPDATE Vouchers SET UserID = @UserID, LastEditDate = GETDATE() WHERE VoucherID = @VoucherID")) { cmd.Parameters.AddWithValue("@VoucherID", item.VoucherID); cmd.Parameters.AddWithValue("@UserID", userID); cmd.Parameters.AddWithValue("@PaidStatus", (int)paidStatus); connection.ExecuteNonQuery(cmd); } removeItems.Add(item.VoucherID); } foreach (var item in removeItems) billList.Remove(item); } #region ISaleVoucherMixDAO Members public decimal Amount(Guid voucherID) { decimal amount; using (var cmd = new SqlCommand("SELECT SUM(Amount) FROM Inventory WHERE VoucherID = @VoucherID")) { cmd.Parameters.AddWithValue("@VoucherID", voucherID); amount = (decimal)connection.ExecuteScalar(cmd); } object advanceID; using (var cmd = new SqlCommand("SELECT AdvanceID FROM SaleVoucher WHERE VoucherID = @VoucherID")) { cmd.Parameters.AddWithValue("@VoucherID", voucherID); advanceID = connection.ExecuteScalar(cmd); if (advanceID == DBNull.Value) return amount; } using (var cmd = new SqlCommand("SELECT Amount FROM Advances WHERE AdvanceID = @AdvanceID")) { cmd.Parameters.AddWithValue("@AdvanceID", (Guid)advanceID); return amount - (decimal)connection.ExecuteScalar(cmd); } } #endregion } }