예제 #1
0
        public void PostSale(SaleModel sale, string cashierId)
        {
            List <SaleDetailDataModel> saleDetails = new List <SaleDetailDataModel>();
            ProductData productData = new ProductData();
            var         taxRate     = ConfigHelper.GetTaxRate();

            foreach (var item in sale.SaleDetails)
            {
                var details = new SaleDetailDataModel
                {
                    ProductId = item.ProductId,
                    Quantity  = item.Quantity
                };
                var productInfo = productData.GetProductById(item.ProductId);
                if (productInfo == null)
                {
                    throw new Exception($"The product WHERE id = {item.ProductId} is null");
                }
                details.PurchasePrice = productInfo.RetailPrice * details.Quantity;
                if (productInfo.isTaxable)
                {
                    details.Tax = details.PurchasePrice * taxRate;
                }
                saleDetails.Add(details);
            }


            SaleDataModel saleData = new SaleDataModel
            {
                SubTotal  = saleDetails.Sum(x => x.PurchasePrice),
                Tax       = saleDetails.Sum(x => x.Tax),
                CashierId = cashierId,
            };

            saleData.Total = saleData.SubTotal + saleData.Tax;

            using (SqlDataAccess sql = new SqlDataAccess())
            {
                try
                {
                    sql.StartTransaction("RMData");
                    sql.SaveDataInTransaction("dbo.spSaleInsert", saleData);
                    saleData.Id = sql.LoadDataInTransaction <int, dynamic>("dbo.spSaleLookup", new { saleData.CashierId, saleData.SaleDate }, "RMData").FirstOrDefault();
                    foreach (var item in saleDetails)
                    {
                        item.SaleId = saleData.Id;
                        sql.SaveDataInTransaction("dbo.spSaleDetailInsert", item);
                    }
                }
                catch
                {
                    sql.RollBackTransaction();
                    throw;
                }
            }
        }
예제 #2
0
        public void SaveSale(SaleModel saleInfo, string cashierId)
        {
            List <SaleDetailDBModel> details = new List <SaleDetailDBModel>();
            ProductData products             = new ProductData();
            var         taxRate = ConfigHelper.GetTaxRate() / 100;

            foreach (var item in saleInfo.SaleDetails)
            {
                var detail = new SaleDetailDBModel
                {
                    ProductId = item.ProductId,
                    Quantity  = item.Quantity,
                };
                var productInfo = products.GetProductById(item.ProductId);

                if (productInfo == null)
                {
                    throw new Exception($"The product Id of {item.ProductId} could not be found in the database");
                }

                detail.PurchasePrice = (productInfo.RetailPrice * detail.Quantity);
                if (productInfo.IsTaxable)
                {
                    detail.Tax = (detail.PurchasePrice * taxRate);
                }

                details.Add(detail);
            }

            SaleDBModel sale = new SaleDBModel
            {
                SubTotal  = details.Sum(x => x.PurchasePrice),
                Tax       = details.Sum(x => x.Tax),
                CashierId = cashierId
            };

            sale.Total = sale.SubTotal + sale.Tax;

            using (SqlDataAccess sql = new SqlDataAccess())
            {
                try
                {
                    sql.StartTransaction("RMData");

                    sql.SaveDataInTransaction("dbo.spSale_Insert", sale);

                    sale.Id = sql.LoadDataInTransaction <int, dynamic>("spSale_Lookup", new { sale.CashierId, sale.SaleDate }).FirstOrDefault();

                    foreach (var item in details)
                    {
                        item.SaleId = sale.Id;

                        sql.SaveDataInTransaction("dbo.spSaleDetail_Insert", item);
                    }

                    sql.CommitTransaction();
                }
                catch
                {
                    sql.RollBackTransaction();
                    throw;
                }
            }
        }
예제 #3
0
        public void SaveSale(SaleModel saleInfo, string userId)
        {
            // TODO:: Make this SOLID/DRY/BETTER

            List <SaleDetailDBModel> details = new List <SaleDetailDBModel>();
            ProductData product = new ProductData();
            var         taxRate = ConfigHelper.GetTaxRate() / 100;

            foreach (var item in saleInfo.SaleDetails)
            {
                var detail = new SaleDetailDBModel()
                {
                    ProductId = item.ProductId,
                    Quantity  = item.Quantity
                };

                //Get information about this product
                var productInfo = product.GetProductById(detail.ProductId);
                if (productInfo == null)
                {
                    throw new Exception($"The product id of  {detail.ProductId} could not be found in the database");
                }

                detail.PurchasePrice = (productInfo.RetailPrice * detail.Quantity);
                if (productInfo.IsTaxable)
                {
                    detail.Tax = (detail.PurchasePrice * taxRate);
                }
                details.Add(detail);
            }

            // Create the Sale model

            SaleDbModel sale = new SaleDbModel()
            {
                SubTotal  = details.Sum(x => x.PurchasePrice),
                Tax       = details.Sum(x => x.Tax),
                CashierId = userId
            };

            sale.Total = sale.SubTotal + sale.Tax;

            using (SqlDataAccess sql = new SqlDataAccess())
            {
                try
                {
                    sql.StartTransaction("RMData");

                    // Save the sale model
                    sql.SaveDataInTransaction("dbo.spSale_Insert", sale);

                    // Get the ID from the sale mode
                    sale.Id = sql.LoadDataInTransaction <int, dynamic>(
                        "dbo.spSale_Lookup",
                        new
                    {
                        sale.CashierId,
                        sale.SaleDate
                    }).FirstOrDefault();

                    // Finish filling int the sale detail models
                    foreach (var item in details)
                    {
                        item.SaleId = sale.Id;

                        // Save the sale detail model
                        sql.SaveDataInTransaction("dbo.spSaleDetail_Insert", item);
                    }

                    sql.CommitTransaction();
                }
                catch (Exception)
                {
                    sql.RollBackTransaction();
                    throw;
                }
            }
        }