mirror of
https://github.com/stokebob/bnhtrade.git
synced 2026-03-19 06:27:15 +00:00
194 lines
7.9 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|