public void DisplayOperatingLocation(int id, bool newLine = false, int tabIndents = 0)
        {
            string indentation = new string(' ', tabIndents * 2);

            // Get the store and address id from the operating location's data
            (int storeId, int addressId) = new Func <Tuple <int, int> >(() => {
                var tempData = StoreManagerApplication.GetData <OperatingLocation>(id) as OperatingLocationData;
                return(new Tuple <int, int>(tempData.StoreId, tempData.AddressId));
            }).Invoke();
            // Get the name of the store
            string storeName = StoreManagerApplication.GetName <Store>(storeId);

            // Get the address as a string
            Console.Write($"{(newLine ? "\n" : "")}{indentation}{storeName} - ");
            DisplayAddress(addressId);
        }
        private void DisplayCustomerOrderHistory()
        {
            // get the customer they're looking for
            int customerId = PromptForId <Customer>();
            // get the orders of the customer they're looking for
            var customerOrders = StoreManagerApplication.GetOrderIdsByCustomerId(customerId);

            if (customerOrders.Any())
            {
                // display all of the order details
                customerOrders.ForEach(co => DisplayOrder(co, true));
            }
            else
            {
                Console.WriteLine($"No orders for '{StoreManagerApplication.GetName<Customer>(customerId)}'");
            }
        }
        public void DisplayOrder(int orderId, bool newLine = false, int tabIndents = 0)
        {
            var    data         = StoreManagerApplication.GetData <Order>(orderId) as OrderData;
            string customerName = StoreManagerApplication.GetName <Customer>(data.CustomerId);
            // Get the addressId and storeId from the operating location
            int storeId = (StoreManagerApplication.GetData <OperatingLocation>(data.OperatingLocationId) as OperatingLocationData).StoreId;
            // get the store that owns the operating location
            string storeName = StoreManagerApplication.GetName <Store>(storeId);

            // Display the order id and display the Customer name
            Console.Write($"Order Details for Order#{orderId} from {storeName}:\n{new string(' ', (tabIndents + 1) * 2)}Customer: {customerName}");
            // Display the Operating Location
            DisplayOperatingLocation(data.OperatingLocationId, true, tabIndents + 1);
            // Display the products requested
            Console.Write($"{new string(' ', (tabIndents + 1) * 2)}Products Requested:");
            foreach (var kv in data.ProductsRequested)
            {
                DisplayProduct(kv.Key, kv.Value, true, tabIndents + 2);
            }
        }
        protected string[] CustomerDataToStringArray(CustomerData data)
        {
            var address = (StoreManagerApplication.GetData <Address>(data.AddressId) as AddressData).ToString();
            var items   = new List <string>
            {
                //   Name
                data.Name,
                //   Email
                data.Email,
                //   PhoneNumber
                data.PhoneNumber,
                //   AddressId -> Address
                address,
                //   BirthDate
                data.BirthDate.ToString()
            };
            var defaultStoreLocation = StoreManagerApplication.GetData <OperatingLocation>(data.DefaultStoreLocationId.Value) as OperatingLocationData;
            var dslStoreName         = StoreManagerApplication.GetName <Store>(defaultStoreLocation.StoreId);
            var dslAddress           = (StoreManagerApplication.GetData <Address>(defaultStoreLocation.AddressId) as AddressData).ToString();

            items.Add($"{dslStoreName} - {dslAddress}");

            return(items.ToArray());
        }