/// <summary>
        /// Called when the user wants to add a new sale
        /// </summary>
        /// <param name="sender">Event owner</param>
        /// <param name="e">Event args</param>
        private void View_Add(object sender, EventArgs e)
        {
            if (!OpenSession())
                return;

            // Create a new sale object and assign values
            // values should be validated before getting here
            var sale = new Sale();
            sale.StoreId = _view.StoreId;
            sale.ProductId = _view.ProductId;
            sale.SaleTime = DateFormatter.GetDateWithoutMilliseconds(DateTime.Now);

            try
            {
                // Save new sale
                _saleRepository.Save(sale);
                _saleRepository.Commit();

                UpdateStatus("New sale created with ID of " + sale.Id);
            }
            catch (Exception ex)
            {
                OperationFailed(ex, "Could not add Sale\n");
            }
        }
        /// <summary>
        /// Called when the user wants to find one or more sales
        /// using a specfied criteria
        /// </summary>
        /// <param name="sender">Event owner</param>
        /// <param name="e">Event args</param>
        private void View_Get(object sender, EventArgs e)
        {
            if (!OpenSession())
                return;

            // Search by ID if we have one
            if (_view.Id != 0)
            {
                var sale = new Sale();
                try
                {
                    // Search by ID
                    sale = _saleRepository.Get(_view.Id);
                }
                catch (Exception ex)
                {
                    OperationFailed(ex, "Could not retrieve Sale by ID\n");
                    return;
                }

                // Nothing found inform the user
                if (sale == null)
                {
                    UpdateStatus("Could not find Sale with an ID of " + _view.Id);
                    return;
                }

                UpdateStatus("ID: " + sale.Id +
                             "\nStore ID: " + sale.StoreId +
                             "\nProduct ID: " + sale.ProductId +
                             "\nTimestamp: " + sale.SaleTime);

                return; // Prevent further searching

            }

            IList<Sale> sales = new List<Sale>();
            try
            {
                // Determine which search to perform
                if (_view.StoreId != 0)
                {
                    // Search by store ID
                    sales = _saleRepository.GetWithStoreId(_view.StoreId);
                } else if (_view.ProductId != 0)
                {
                    // Search by product ID
                    sales = _saleRepository.GetWithProductId(_view.ProductId);
                }
            }
            catch (Exception ex)
            {
                OperationFailed(ex, "Could not retrieve Sale by Store ID\n");
                return;
            }

            // None found inform the user
            if (sales.Count == 0)
            {
                UpdateStatus("No Sales found with the Store ID of " + _view.StoreId);
                return;
            }

            // Return the list of sales back to the view
            OnObjectGetAllReturned?.Invoke(this, new ObjectGetAllReturnedArgs<IList<Sale>>(sales));
        }