/// <summary>
        /// Retrieve Business-Model location object from database via location id
        /// </summary>
        /// <param name="id">Location id</param>
        /// <returns>Business-Model location object</returns>
        public Library.Models.Location GetLocationById(int id)
        {
            var dbLocation = _dbContext.Locations
                             .Include(l => l.LocationInventories)
                             .ThenInclude(li => li.Product)
                             .First(l => l.Id == id);

            Dictionary <Library.Models.Product, int>     stock  = new Dictionary <Library.Models.Product, int>();
            Dictionary <Library.Models.Product, decimal> prices = new Dictionary <Library.Models.Product, decimal>();

            foreach (LocationInventory li in dbLocation.LocationInventories)
            {
                Library.Models.Product product = new Library.Models.Product()
                {
                    Id = li.ProductId, DisplayName = li.Product.Name
                };
                stock.Add(product, li.Stock);
                prices.Add(product, li.Price);
            }

            return(new Library.Models.Location(
                       dbLocation.Name,
                       dbLocation.Address,
                       dbLocation.City,
                       dbLocation.State,
                       dbLocation.Country,
                       dbLocation.PostalCode,
                       dbLocation.Phone
                       )
            {
                Id = dbLocation.Id, Stock = stock, Prices = prices
            });
        }
 public static Product MapLibProduct(Library.Models.Product product)
 {
     return(new Product()
     {
         ProductId = product.ProductId,
         ProductName = product.Name,
         Price = product.Price,
         Inventory = product.Inventory.Select(LibInventoryMap).ToList(),
         OrderLine = product.OrderLine.Select(LibOrderLinesMap).ToList()
     });
 }
        /// <summary>
        /// Add a new product to the database
        /// </summary>
        /// <param name="product">Business-Model product object</param>
        public void AddProduct(Library.Models.Product product)
        {
            if (product.Id != 0)   // IDs are assigned by database, so it already exists if not 0
            {
                throw new ArgumentException("Product already exists.");
            }

            var dbProduct = new Product()
            {
                Name = product.DisplayName
            };

            _dbContext.Products.Add(dbProduct);
        }
        /// <summary>
        /// Retrieve Business-Model order object from database via order id
        /// </summary>
        /// <param name="id">Order id</param>
        /// <returns>Business-Model order object</returns>
        public Library.Models.Order GetOrderById(int id)
        {
            var dbOrder = _dbContext.Orders
                          .Include(o => o.Location)
                          .Include(o => o.Customer)
                          .Include(o => o.OrderContents)
                          .ThenInclude(oc => oc.Product)
                          .First(o => o.Id == id);

            var location = new Library.Models.Location(
                dbOrder.Location.Name,
                dbOrder.Location.Address,
                dbOrder.Location.City,
                dbOrder.Location.State,
                dbOrder.Location.Country,
                dbOrder.Location.PostalCode,
                dbOrder.Location.Phone
                )
            {
                Id = dbOrder.LocationId
            };
            var customer = new Library.Models.Customer()
            {
                Id        = dbOrder.CustomerId,
                FirstName = dbOrder.Customer.FirstName,
                LastName  = dbOrder.Customer.LastName,
                Email     = dbOrder.Customer.Email
            };

            Dictionary <Library.Models.Product, int>     products = new Dictionary <Library.Models.Product, int>();
            Dictionary <Library.Models.Product, decimal> prices   = new Dictionary <Library.Models.Product, decimal>();

            foreach (OrderContent oc in dbOrder.OrderContents)
            {
                Library.Models.Product product = new Library.Models.Product()
                {
                    Id = oc.ProductId, DisplayName = oc.Product.Name
                };
                products.Add(product, oc.Quantity);
                prices.Add(product, oc.Price);
            }

            return(new Library.Models.Order()
            {
                Id = dbOrder.Id, Products = products, PricePaid = prices, Customer = customer, Location = location, Time = dbOrder.Date
            });
        }
        //
        // Update Methods
        //

        /// <summary>
        /// Update the amount of some product that a particular location has in stock
        /// </summary>
        /// <param name="location">Business-Model location object</param>
        /// <param name="product">Business-Model product object</param>
        /// <param name="qty">integer number of items to add</param>
        public void UpdateLocationStock(Library.Models.Location location, Library.Models.Product product)
        {
            LocationInventory dbLocationInventory;

            try {
                dbLocationInventory       = _dbContext.LocationInventories.First(x => x.LocationId == location.Id && x.ProductId == product.Id);
                dbLocationInventory.Stock = location.Stock[product];
            } catch (InvalidOperationException) {
                var dbLocation = _dbContext.Locations.First(l => l.Id == location.Id);
                var dbProduct  = _dbContext.Products.First(p => p.Id == product.Id);
                dbLocationInventory = new LocationInventory()
                {
                    Location = dbLocation,
                    Product  = dbProduct,
                    Stock    = location.Stock[product],
                    Price    = location.Prices[product]
                };
                _dbContext.LocationInventories.Add(dbLocationInventory);
            }
        }
Exemple #6
0
 public static Entities.Product Map(Library.Models.Product product) => new Entities.Product
 {
     ProductId = product.Id,
     Name      = product.Name,
     Price     = (decimal)product.Price
 };
 public void UpdateProduct(Library.Models.Product product)
 {
     throw new NotImplementedException();
 }