public void RecordAverageCostAndSellingPrice(int userID) { MyGeneration.dOOdads.TransactionMgr transaction = MyGeneration.dOOdads.TransactionMgr.ThreadTransactionMgr(); try { transaction.BeginTransaction(); DataTable ReceiveDocDetails; IList <CostElement> costElements = new List <CostElement>(); foreach (DataRowView drv in GRVSoundDetail.DefaultView as DataView) { double NewUnitCost, NewSellingPrice; if (drv["AverageCost"] != DBNull.Value && drv["SellingPrice"] != DBNull.Value) { CostElement costElement = new CostElement(); costElement.ItemID = Convert.ToInt32(drv["ItemID"]); costElement.ItemUnitID = Convert.ToInt32(drv["ItemUnitID"]); costElement.MovingAverageID = Convert.ToInt32(drv["MovingAverageID"]); costElement.ManufacturerID = Convert.ToInt32(drv["ManufacturerID"]); costElement.AverageCost = costElement.SellingPrice = Math.Round(Convert.ToDouble(drv["SellingPrice"]), Settings.NoOfDigitsAfterTheDecimalPoint); costElement.Margin = drv["Margin"] != DBNull.Value ? Convert.ToDouble(drv["Margin"]) : 0; ReceiveDocDetails = ReceiveDoc.GetRelatedReceiveForUnitCostAndSellingPrice(ReceiptID, costElement); foreach (DataRowView Cursor in ReceiveDocDetails.AsDataView()) { int ID = Convert.ToInt32(Cursor["ID"]); ReceiveDoc.SetAverageCostByReceiveDoc(ID, costElement.AverageCost, userID); ReceiveDoc.SetSellingPriceByReceiveDoc(ID, costElement.SellingPrice, userID); } costElements.Add(costElement); } } try { CostingService.SavePriceChange(costElements.AsEnumerable(), userID, ChangeMode.Recieve, ReceiptID.ToString()); } catch (Exception) { //Until Cost Tier Implementation } transaction.CommitTransaction(); } catch (Exception ex) { transaction.RollbackTransaction(); throw ex; } }