using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; using Dapper; namespace bnhtrade.Core.Data.Database.Stock { public class ReadStatusTransaction : Connection { public ReadStatusTransaction() { } /// /// Returns a list with balance of stock avaiable by individual StockId /// /// SKU Number /// Stock Status Database PK /// public List<(string SkuNumber, int StockNumber, int Balance)> BySkuNumber(string skuNumber, int stockStatusId) { var returnList = new List<(string SkuNumber, int StockNumber, int Balance)>(); if (string.IsNullOrWhiteSpace(skuNumber)) { return returnList; } string strSQL = @" SELECT tblSku.skuSkuNumber ,tblStock.StockNumber ,SUM(tblStockJournalPost.Quantity) AS Balance FROM tblStockJournal INNER JOIN tblStock ON tblStockJournal.StockID = tblStock.StockID INNER JOIN tblStockJournalPost ON tblStockJournal.StockJournalID = tblStockJournalPost.StockJournalID INNER JOIN tblSku ON tblStock.SkuID = tblSku.skuSkuID WHERE (tblStockJournalPost.StockStatusID = @stockStatusId) AND (tblSku.skuSkuNumber = @skuNumber) GROUP BY tblSku.skuSkuNumber ,tblStock.StockNumber "; using (SqlConnection conn = new SqlConnection(SqlConnectionString)) { conn.Open(); using (SqlCommand cmd = new SqlCommand(strSQL, conn)) { // add parameters cmd.Parameters.AddWithValue("@skuNumber", skuNumber); cmd.Parameters.AddWithValue("@stockStatusId", stockStatusId); using (SqlDataReader reader = cmd.ExecuteReader()) { if (reader.HasRows) { while (reader.Read()) { returnList.Add(( SkuNumber: reader.GetString(0), StockNumber: reader.GetInt32(1), Balance: reader.GetInt32(2))); } } } } } return returnList; } /// /// Gets list of stock status debits and credits. Includes stock numbers with balance greater than or less than zero. /// /// Required, filters results /// Required, filters results /// Tuple list is assending order public Model.Stock.StatusTransaction ByStockNumber(int stockStatusId, int stockNumber) { var result = new Model.Stock.StatusTransaction(); result.StockStatusId = stockStatusId; string strSQL = @" SELECT a.StockNumber a.skuSkuNumber AS SkuNumber FROM ( SELECT tblSku.skuSkuNumber, tblStock.StockNumber, SUM(tblStockJournalPost.Quantity) AS Balance FROM tblStockJournal INNER JOIN tblStock ON tblStockJournal.StockID = tblStock.StockID INNER JOIN tblStockJournalPost ON tblStockJournal.StockJournalID = tblStockJournalPost.StockJournalID INNER JOIN tblSku ON tblStock.SkuID = tblSku.skuSkuID WHERE (tblStockJournalPost.StockStatusID = @stockStatusId) AND (tblSku.skuSkuNumber IN @stockNumberList) GROUP BY tblSku.skuSkuNumber, tblStock.StockNumber ) a WHERE a.Balance <> 0 "; using (SqlConnection conn = new SqlConnection(SqlConnectionString)) { conn.Open(); using (SqlCommand cmd = new SqlCommand(strSQL, conn)) { var param = new Dapper.DynamicParameters(); param.Add("@stockStatusId", stockStatusId); param.Add("@stockNumberList", stockNumber); var dbresults = conn.Query(strSQL, param); foreach (var item in dbresults) { result.SkuNumber = item.SkuNumber; result.AddBalanceTransaction(item.EntryDate, item.StockNumber, item.Quantity); } } } return result; } /// /// Gets list of stock status debits and credits. Includes stock numbers with balance greater than or less than zero. /// /// Required, filters results by stock status Id /// Required, filters results by sku number /// Tuple list is assending order public Model.Stock.StatusTransaction BySku(int stockStatusId, string skuNumber) { var result = new Model.Stock.StatusTransaction(); result.SkuNumber = skuNumber; result.StockStatusId = stockStatusId; if (string.IsNullOrWhiteSpace(skuNumber)) { return result; } string strSQL = @" SELECT tblStockJournal.EntryDate ,tblStockJournalPost.StockStatusID ,tblStock.StockNumber ,tblStockJournalPost.Quantity FROM tblStockJournalPost INNER JOIN tblStockJournal ON tblStockJournalPost.StockJournalID = tblStockJournal.StockJournalID INNER JOIN tblStock ON tblStockJournal.StockID = tblStock.StockID WHERE (tblStockJournalPost.StockStatusID = @stockStatusId) AND ( tblStock.StockNumber IN ( SELECT a.StockNumber FROM ( SELECT tblStock.StockNumber ,SUM(tblStockJournalPost.Quantity) AS Balance FROM tblStockJournal INNER JOIN tblStock ON tblStockJournal.StockID = tblStock.StockID INNER JOIN tblStockJournalPost ON tblStockJournal.StockJournalID = tblStockJournalPost.StockJournalID INNER JOIN tblSku ON tblStock.SkuID = tblSku.skuSkuID WHERE (tblStockJournalPost.StockStatusID = @stockStatusId) AND (tblSku.skuSkuNumber = @sku) GROUP BY tblSku.skuSkuNumber ,tblStock.StockNumber ) a WHERE a.Balance <> 0 ) ) ORDER BY tblStockJournal.EntryDate "; using (SqlConnection conn = new SqlConnection(SqlConnectionString)) { conn.Open(); using (SqlCommand cmd = new SqlCommand(strSQL, conn)) { var param = new Dapper.DynamicParameters(); param.Add("@stockStatusId", stockStatusId); param.Add("@sku", skuNumber); var dbList = conn.Query(strSQL, param); foreach (var item in dbList) { result.AddBalanceTransaction(item.EntryDate, item.StockNumber, item.Quantity); } } } return result; } } }