示例#1
0
        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();
            }
        }
示例#2
0
        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));
        }
示例#3
0
        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();
            }
        }