/// <summary>
        /// Map ships information.
        /// </summary>
        /// <param name="dataReader">The data reader.</param>
        /// <returns>ship information</returns>
        internal static async Task<ShipInfo> MapShipInfo(SqlDataReader dataReader)
        {
            var shipInfo = new ShipInfo();
            if (dataReader != null)
            {
                shipInfo.AssignGangwayLocations(await MapGangwayLocations(dataReader));

                await dataReader.NextResultAsync();
                shipInfo.AssignStateroomCategories(await MapStateroomCategories(dataReader));

                await dataReader.NextResultAsync();
                shipInfo.AssignVoyageCollection(await MapVoyages(dataReader));

                await dataReader.NextResultAsync();

                var itineraries = await MapDictionaryAsync(dataReader);
                shipInfo.Voyages.AsParallel().Select(itinerary =>
                {
                    itinerary.MapMasterChildRelations(itineraries, master => master.VoyageId, (master, childs) => master.AssignItineraries(childs));
                    return true;
                }).ToList();
            }

            return shipInfo;
        }
        /// <summary>
        /// retrieves ship info
        /// </summary>
        /// <param name="shipId">shipIds attribute</param>
        /// <param name="isFullInfo">if set to <c>true</c> [is full information].</param>
        /// <returns>
        /// returns ship info
        /// </returns>
        public async Task<ShipInfo> RetrieveShipInfo(string shipId, bool isFullInfo)
        {
            var shipInfo = new ShipInfo();
            var voyageCollection = await DIContainer.Instance.Resolve<VoyageClientRepository>().RetrieveVoyageListAsync(shipId);

            shipInfo.AssignVoyageCollection(voyageCollection.Items.Where(a => a.IsActive).ToList());
            if (isFullInfo)
            {
                var gangwayLocations = await this.referenceDataRepository.RetrieveGangwayLocationListAsync(shipId);
                shipInfo.AssignGangwayLocations(gangwayLocations);
                var stateroomCategories = await this.referenceDataRepository.RetrieveStateroomCategoryListAsync(shipId);
                shipInfo.AssignStateroomCategoryCollection(stateroomCategories.Items);
            }

            shipInfo.ShipId = shipId;
            return shipInfo;
        }