public int ProcessSale(ABCSale sale) { SqlConnection connection = new SqlConnection(); SqlTransaction transaction = null; try { connection.ConnectionString = _connectionString; connection.Open(); transaction = connection.BeginTransaction(); var saleNumber = CreateSale(sale, connection, transaction); foreach (var saleItem in sale.SaleItems) { var exists = CheckSaleItemExists(saleItem.ItemCode, saleNumber, connection, transaction); if (exists == true) { throw new Exception("SaleItem already Exists for this Sale"); } else { CreateSaleItem(saleNumber, saleItem, connection, transaction); UpdateInventory(saleItem.ItemCode, saleItem.Quantity.Value, connection, transaction); } } transaction.Commit(); return(saleNumber); } catch (Exception ex) { transaction?.Rollback(); return(0); } finally { connection?.Close(); } }
public int ProcessSale(ABCSalePoco sale) { ABCSale newSale = new ABCSale(); newSale.CustomerId = sale.CustomerId; newSale.SaleDate = DateTime.Now; newSale.SalePerson = sale.SalePerson; newSale.SaleItems = sale.SaleItems.Where(i => !string.IsNullOrEmpty(i.ItemCode)).ToList(); foreach (var item in newSale.SaleItems) { if (string.IsNullOrEmpty(item.ItemCode)) { newSale.SubTotal = 0; newSale.SubTotal += (item.UnitPrice * item.Quantity.Value); } } newSale.Gst = (newSale.SubTotal * (decimal)0.05); newSale.SaleTotal = (newSale.SubTotal + newSale.Gst); return(_SalesManager.ProcessSale(newSale)); }
private int CreateSale(ABCSale sale, SqlConnection connection, SqlTransaction transaction) { SqlCommand command = null; SqlParameter parameter; try { command = new SqlCommand("CreateSale", connection, transaction) { CommandType = CommandType.StoredProcedure }; parameter = new SqlParameter { ParameterName = "@SaleDate", SqlDbType = SqlDbType.DateTime, Direction = ParameterDirection.Input, SqlValue = sale.SaleDate }; command.Parameters.Add(parameter); parameter = new SqlParameter { ParameterName = "@SubTotal", SqlDbType = SqlDbType.Money, Direction = ParameterDirection.Input, SqlValue = sale.SubTotal }; command.Parameters.Add(parameter); parameter = new SqlParameter { ParameterName = "@Gst", SqlDbType = SqlDbType.Money, Direction = ParameterDirection.Input, SqlValue = sale.Gst }; command.Parameters.Add(parameter); parameter = new SqlParameter { ParameterName = "@SaleTotal", SqlDbType = SqlDbType.Money, Direction = ParameterDirection.Input, SqlValue = sale.SaleTotal }; command.Parameters.Add(parameter); parameter = new SqlParameter { ParameterName = "@SalePerson", SqlDbType = SqlDbType.VarChar, Direction = ParameterDirection.Input, SqlValue = sale.SalePerson }; command.Parameters.Add(parameter); parameter = new SqlParameter { ParameterName = "@CustomerId", SqlDbType = SqlDbType.Int, Direction = ParameterDirection.Input, SqlValue = sale.CustomerId }; command.Parameters.Add(parameter); return((int)command.ExecuteScalar()); } catch (Exception ex) { throw new Exception("Create Sale Failed", ex); } finally { command?.Dispose(); } }