/// <summary>
        /// Gets the reference data list asynchronous.
        /// </summary>
        /// <returns>reference data as a task</returns>
        public async Task<ReferenceData> ListAsync()
        {
            var referenceData = new ReferenceData();
            var countries = this.referenceDataRepository.RetrieveCountryListAsync(null, null);
            var states = this.referenceDataRepository.RetrieveStateListAsync();
            var ports = this.referenceDataRepository.RetrievePortListAsync();
            var brands = this.referenceDataRepository.RetrieveBrandListAsync();
            var personTypes = this.referenceDataRepository.RetrievePersonTypeListAsync();
            var loyaltyLevelTypes = this.referenceDataRepository.RetrieveLoyaltyLevelTypeListAsync();
            var documentTypes = this.referenceDataRepository.RetrieveDocumentTypeListAsync();
            await Task.WhenAll(countries, states, ports, brands, personTypes, loyaltyLevelTypes, documentTypes);

            await MapBrandPortIds(brands.Result);

            referenceData.AssignCountries(countries.Result.Items);
            referenceData.AssignStates(states.Result.Items);
            referenceData.AssignPorts(ports.Result.Items);
            referenceData.AssignBrands(brands.Result.Items);
            referenceData.AssignPersonTypes(personTypes.Result.Items);
            referenceData.AssignLoyaltyLevelTypes(loyaltyLevelTypes.Result.Items);
            referenceData.AssignDocumentTypes(documentTypes.Result.Items);

            return referenceData;
        }
        /// <summary>
        /// Maps the reference data.
        /// </summary>
        /// <param name="dataReader">The data reader.</param>
        /// <returns>Reference data.</returns>
        internal static async Task<ReferenceData> MapReferenceData(SqlDataReader dataReader)
        {
            var referenceData = new ReferenceData();

            if (dataReader != null)
            {
                referenceData.AssignBrands(await MapBrands(dataReader));

                await dataReader.NextResultAsync();
                var dictionaryPortBrand = await MapBrandPorts(dataReader);
                MapBrandPortIds(referenceData.Brands, dictionaryPortBrand);

                await dataReader.NextResultAsync();
                referenceData.AssignCountries(await MapCountries(dataReader));

                await dataReader.NextResultAsync();
                referenceData.AssignLoyaltyLevelTypes(await MapLoyaltyLevelTypes(dataReader));

                await dataReader.NextResultAsync();
                referenceData.AssignPersonTypes(await MapPersonTypes(dataReader));

                await dataReader.NextResultAsync();
                referenceData.AssignPorts(await MapPorts(dataReader));

                await dataReader.NextResultAsync();
                referenceData.AssignStates(await MapStates(dataReader));

                await dataReader.NextResultAsync();
                referenceData.AssignDocumentTypes(await MapDocumentTypes(dataReader));

                if (!dataReader.IsClosed)
                {
                    dataReader.Close();
                }
            }

            return await Task.FromResult(referenceData);
        }