Files
bnhtrade/src/bnhtrade.Core/Data/Database/Stock/ReadStatusTransaction.cs
2024-05-10 11:16:32 +01:00

194 lines
7.9 KiB
C#

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()
{
}
/// <summary>
/// Returns a list with balance of stock avaiable by individual StockId
/// </summary>
/// <param name="skuNumber">SKU Number</param>
/// <param name="stockStatusId">Stock Status Database PK</param>
/// <returns></returns>
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;
}
/// <summary>
/// Gets list of stock status debits and credits. Includes stock numbers with balance greater than or less than zero.
/// </summary>
/// <param name="stockStatusId">Required, filters results</param>
/// <param name="stockNumber">Required, filters results</param>
/// <returns>Tuple list is assending order</returns>
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;
}
/// <summary>
/// Gets list of stock status debits and credits. Includes stock numbers with balance greater than or less than zero.
/// </summary>
/// <param name="stockStatusId">Required, filters results by stock status Id</param>
/// <param name="skuNumber">Required, filters results by sku number</param>
/// <returns>Tuple list is assending order</returns>
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;
}
}
}