mirror of
https://github.com/stokebob/bnhtrade.git
synced 2026-03-19 22:47:15 +00:00
wip
This commit is contained in:
@@ -18,187 +18,30 @@ namespace bnhtrade.Core.Logic.Inventory
|
||||
private int WIP_StockInsert(int accountJournalType, int stockJournalType, string currencyCode, decimal amount,
|
||||
int quantity, int productId, int conditionId, int accountTaxCodeId, DateTime entryDate, int debitStatusId)
|
||||
{
|
||||
using (TransactionScope scope = new TransactionScope())
|
||||
using (SqlConnection conn = new SqlConnection(sqlConnectionString))
|
||||
return WithUnitOfWork(uow =>
|
||||
{
|
||||
conn.Open();
|
||||
|
||||
// add account journal entry
|
||||
int accountJournalId = new Logic.Account.JournalService().JournalInsert(accountJournalType, entryDate, currencyCode, amount);
|
||||
int accountJournalId = new Logic.Account.JournalService(uow).JournalInsert(accountJournalType, entryDate, currencyCode, amount);
|
||||
|
||||
// make the stock insert
|
||||
int stockId = WIP_StockInsertSub(sqlConnectionString, productId, conditionId, accountTaxCodeId,
|
||||
int stockId = uow.StockRepository.WIP_StockInsertSub(productId, conditionId, accountTaxCodeId,
|
||||
accountJournalId, stockJournalType, entryDate, quantity, debitStatusId);
|
||||
|
||||
scope.Complete();
|
||||
CommitIfOwned(uow);
|
||||
|
||||
return stockId;
|
||||
}
|
||||
}
|
||||
|
||||
private int WIP_StockInsertSub(int productId, int conditionId, int accountTaxCodeId,
|
||||
int accountJournalId, int stockJournalTypeId, DateTime stockJournalEntryDate, int quantity, int statusDebitId)
|
||||
{
|
||||
stockJournalEntryDate = DateTime.SpecifyKind(stockJournalEntryDate, DateTimeKind.Utc);
|
||||
|
||||
// ensure account journal id hasn't already been added to stock table
|
||||
int count = 0;
|
||||
|
||||
using (SqlCommand cmd = new SqlCommand(@"
|
||||
SELECT Count(tblStock.StockID) AS CountOfID
|
||||
FROM tblStock
|
||||
WHERE (((tblStock.AccountJournalID)=@accountJouranlId));
|
||||
", conn))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("@accountJouranlId", accountJournalId);
|
||||
|
||||
count = (int)cmd.ExecuteScalar();
|
||||
}
|
||||
|
||||
if (count == 1)
|
||||
{
|
||||
throw new Exception("Add account journal entry already assigned to stock line.");
|
||||
}
|
||||
else if (count > 1)
|
||||
{
|
||||
throw new Exception("Houston we have a problem! An account journal entry is assigned to " + count + " stock lines.");
|
||||
}
|
||||
|
||||
// ensure the debit for the account journal transaction is to an 'Asset' account type
|
||||
using (SqlCommand cmd = new SqlCommand(@"
|
||||
SELECT
|
||||
Count(tblAccountJournalPost.AccountJournalPostID) AS CountOfAccountJournalPostID
|
||||
FROM
|
||||
(tblAccountJournalPost
|
||||
INNER JOIN tblAccountChartOf
|
||||
ON tblAccountJournalPost.AccountChartOfID = tblAccountChartOf.AccountChartOfID)
|
||||
INNER JOIN tblAccountChartOfType
|
||||
ON tblAccountChartOf.AccountChartOfTypeID = tblAccountChartOfType.AccountChartOfTypeID
|
||||
WHERE
|
||||
tblAccountJournalPost.AmountGbp>=0
|
||||
AND tblAccountChartOfType.BasicType='Asset'
|
||||
AND tblAccountJournalPost.AccountJournalID=@accountJournalId;
|
||||
", conn))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("@accountJournalId", accountJournalId);
|
||||
|
||||
if ((int)cmd.ExecuteScalar() < 1)
|
||||
{
|
||||
throw new Exception("Supplied AccountJournal entry must debit an 'Asset' account type.");
|
||||
}
|
||||
}
|
||||
|
||||
// get statusCreditId for stock journal type
|
||||
int statusCreditId;
|
||||
using (SqlCommand cmd = new SqlCommand(@"
|
||||
SELECT
|
||||
tblStockJournalType.StockStatusID_Credit
|
||||
FROM
|
||||
tblStockJournalType
|
||||
WHERE
|
||||
tblStockJournalType.StockJournalTypeID=@stockJournalTypeId
|
||||
AND tblStockJournalType.StockStatusID_Credit Is Not Null;
|
||||
", conn))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("@stockJournalTypeId", stockJournalTypeId);
|
||||
|
||||
object obj = cmd.ExecuteScalar();
|
||||
|
||||
if (obj == null)
|
||||
{
|
||||
throw new Exception("Default credit status not set for StockJournalTypeID=" + stockJournalTypeId);
|
||||
}
|
||||
else
|
||||
{
|
||||
statusCreditId = (int)obj;
|
||||
}
|
||||
}
|
||||
|
||||
// get/set an skuId
|
||||
int skuId = new Logic.Inventory.SkuService().GetSkuId(productId, conditionId, accountTaxCodeId, true);
|
||||
|
||||
// add the entry to the stock table (minus stockJournalId)
|
||||
int stockId = 0;
|
||||
using (SqlCommand cmd = new SqlCommand(@"
|
||||
INSERT INTO tblStock
|
||||
(SkuID, AccountJournalID)
|
||||
OUTPUT INSERTED.StockID
|
||||
VALUES
|
||||
(@skuId, @accountJournalId);
|
||||
", conn))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("@skuId", skuId);
|
||||
cmd.Parameters.AddWithValue("@accountJournalId", accountJournalId);
|
||||
|
||||
stockId = (int)cmd.ExecuteScalar();
|
||||
}
|
||||
|
||||
// insert stock journal entry
|
||||
var journalPosts = new List<(int statusId, int quantity)>();
|
||||
journalPosts.Add((statusDebitId, quantity));
|
||||
journalPosts.Add((statusCreditId, (quantity * -1)));
|
||||
int stockJournalId = Stock.StockJournal.StockJournalInsert(sqlConnectionString, stockJournalTypeId, stockId, journalPosts, stockJournalEntryDate, true);
|
||||
|
||||
// update the stock table
|
||||
using (SqlCommand cmd = new SqlCommand(@"
|
||||
UPDATE tblStock
|
||||
SET StockJournalID=@stockJournalId
|
||||
WHERE StockID=@stockId;
|
||||
", conn))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("@stockJournalId", stockJournalId);
|
||||
cmd.Parameters.AddWithValue("@stockId", stockId);
|
||||
|
||||
count = cmd.ExecuteNonQuery();
|
||||
|
||||
if (count < 1)
|
||||
{
|
||||
throw new Exception("New stock insert cancelled, failed to update StockJournalID");
|
||||
}
|
||||
}
|
||||
|
||||
scope.Complete();
|
||||
return stockId;
|
||||
});
|
||||
}
|
||||
|
||||
private void WIP_StockDelete(int stockId)
|
||||
{
|
||||
int accountJournalType = 0;
|
||||
int stockJournalType = 0;
|
||||
|
||||
// get stock and account types
|
||||
using (TransactionScope scope = new TransactionScope())
|
||||
using (SqlConnection conn = new SqlConnection(sqlConnectionString))
|
||||
WithUnitOfWork(uow =>
|
||||
{
|
||||
conn.Open();
|
||||
|
||||
// ensure stockId is owner-introduced
|
||||
using (SqlCommand cmd = new SqlCommand(@"
|
||||
SELECT
|
||||
tblStockJournal.StockJournalTypeID, tblAccountJournal.AccountJournalTypeID
|
||||
FROM
|
||||
(tblStock INNER JOIN tblAccountJournal
|
||||
ON tblStock.AccountJournalID = tblAccountJournal.AccountJournalID)
|
||||
INNER JOIN tblStockJournal
|
||||
ON tblStock.StockJournalID = tblStockJournal.StockJournalID
|
||||
WHERE
|
||||
(((tblStock.StockID)=@stockId));
|
||||
", conn))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("@stockId", stockId);
|
||||
|
||||
using (var reader = cmd.ExecuteReader())
|
||||
{
|
||||
if (reader.Read())
|
||||
{
|
||||
accountJournalType = reader.GetInt32(1);
|
||||
stockJournalType = reader.GetInt32(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Exception("Integrity check failed, cancelling StockDeleteOwnerIntroduced");
|
||||
}
|
||||
}
|
||||
}
|
||||
stockJournalType = uow.StockJournalRepository.ReadJournalTypeIdByStockId(stockId);
|
||||
|
||||
// check stock journal type is not restricted
|
||||
// owner inventory introduced
|
||||
@@ -211,21 +54,12 @@ namespace bnhtrade.Core.Logic.Inventory
|
||||
throw new Exception("Manual delete of this stock type is not supported, use the method that created it!");
|
||||
}
|
||||
|
||||
// check there is only one stock journal entry for stock item
|
||||
using (SqlCommand cmd = new SqlCommand(@"
|
||||
SELECT Count(tblStockJournal.StockJournalID) AS CountOfStockJournalID
|
||||
FROM tblStockJournal
|
||||
WHERE (((tblStockJournal.StockID)=@stockId));
|
||||
", conn))
|
||||
// check there is only one stock journal entry for stock item (i.e. the source entry)
|
||||
int count = uow.StockJournalRepository.ReadJournalEntryCountByStockId(stockId);
|
||||
|
||||
if (count > 1)
|
||||
{
|
||||
cmd.Parameters.AddWithValue("@stockId", stockId);
|
||||
|
||||
int count = (int)cmd.ExecuteScalar();
|
||||
|
||||
if (count > 1)
|
||||
{
|
||||
throw new Exception("Delete " + count + " stock journal entries (other than source entry), before peforming this operation.");
|
||||
}
|
||||
throw new Exception("Delete " + count + " stock journal entries (other than source entry), before peforming this operation.");
|
||||
}
|
||||
|
||||
// remove account journal entry
|
||||
@@ -235,7 +69,23 @@ namespace bnhtrade.Core.Logic.Inventory
|
||||
WIP_StockDeleteSub(sqlConnectionString, stockId);
|
||||
|
||||
scope.Complete();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
private void WIP_StockDeleteSub(int stockId)
|
||||
@@ -312,7 +162,7 @@ namespace bnhtrade.Core.Logic.Inventory
|
||||
}
|
||||
|
||||
// delete stock journal entry
|
||||
Core.Stock.StockJournal.StockJournalDelete(sqlConnectionString, stockJournalId);
|
||||
new Core.Logic.Inventory.StockJournalService().StockJournalDelete(stockJournalId);
|
||||
|
||||
// delete stock table entry
|
||||
using (SqlCommand cmd = new SqlCommand(@"
|
||||
@@ -401,23 +251,14 @@ namespace bnhtrade.Core.Logic.Inventory
|
||||
DateTime stockJournalEntryDate;
|
||||
int stockJournalTypeId = 1;
|
||||
|
||||
using (SqlConnection conn = new SqlConnection(sqlConnectionString))
|
||||
return WithUnitOfWork(uow =>
|
||||
{
|
||||
conn.Open();
|
||||
|
||||
// retrive info from purchase invoice line/transaction
|
||||
using (SqlCommand cmd = new SqlCommand(@"
|
||||
SELECT tblAccountJournal.EntryDate
|
||||
FROM tblAccountJournal
|
||||
WHERE (((tblAccountJournal.AccountJournalID)=@accountJournalId));
|
||||
", conn))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("@accountJournalId", accountJournalId);
|
||||
|
||||
stockJournalEntryDate = DateTime.SpecifyKind((DateTime)cmd.ExecuteScalar(), DateTimeKind.Utc);
|
||||
}
|
||||
}
|
||||
return WIP_StockInsertSub(productId, conditionId, accountTaxCodeId, accountJournalId, stockJournalTypeId, stockJournalEntryDate, quantity, statusDebitId);
|
||||
stockJournalEntryDate = uow.JournalRepository.ReadJournalEntryDate(accountJournalId);
|
||||
int result = uow.StockRepository.WIP_StockInsertSub(
|
||||
productId, conditionId, accountTaxCodeId, accountJournalId, stockJournalTypeId, stockJournalEntryDate, quantity, statusDebitId);
|
||||
CommitIfOwned(uow);
|
||||
return result;
|
||||
});
|
||||
}
|
||||
|
||||
public int WIP_StockInsertOwnerIntroduced(decimal amount, int quantity, int productId, int conditionId, int accountTaxCodeId, DateTime entryDate, int debitStatusId)
|
||||
|
||||
Reference in New Issue
Block a user