/// <summary>
        /// Maps the person ids.
        /// </summary>
        /// <param name="dataReader">The data reader.</param>
        /// <returns>returns personIds</returns>
        internal static async Task<string> MapPersonIds(SqlDataReader dataReader)
        {
            var personIdList = string.Empty;

            if (dataReader != null)
            {
                while (await dataReader.ReadAsync())
                {
                    var personId = dataReader.Int32Field(PersonId);
                    personIdList = string.Concat(personIdList, personId, CommaSeparator);
                }

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

            return personIdList;
        }
        /// <summary>
        /// Maps the specified data reader.
        /// </summary>
        /// <param name="dataReader">The data reader.</param>
        /// <returns>Media Item Address</returns>
        internal static async Task<string> MapMediaItemAddress(SqlDataReader dataReader)
        {
            var mediaItemAddress = string.Empty;

            if (dataReader != null)
            {
                while (await dataReader.ReadAsync())
                {
                    var mediaItemId = dataReader.Int32Field(MediaItemId).ToString();
                    var baseAddress = dataReader.StringField(Mediapath);
                    mediaItemAddress = string.Concat(mediaItemId, CommonConstants.Comma, baseAddress);
                }

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

            return await Task.FromResult(mediaItemAddress);
        }
        /// <summary>
        /// Maps the loyalty level types.
        /// </summary>
        /// <param name="dataReader">The data reader.</param>
        /// <returns>Loyalty level types</returns>
        private static async Task<LoyaltyLevelTypeCollection> MapLoyaltyLevelTypes(SqlDataReader dataReader)
        {
            var loyaltyLevelTypeCollection = new LoyaltyLevelTypeCollection();
            if (dataReader != null)
            {
                while (await dataReader.ReadAsync())
                {
                    var loyaltyLevelType = new LoyaltyLevelType
                    {
                        LoyaltyLevelTypeId = dataReader.Int32Field(LoyaltyLevelTypeId).ToString(),
                        NoOfCruiseNights = dataReader.Int32Field(NoOfCruiseNights),
                        Name = dataReader.StringField(Name),
                        LogoImageAddress = dataReader.StringField(LogoImageAddress),
                        BrandId = dataReader.Int16Field(BrandId).ToString()
                    };

                    byte[] bytes = await loyaltyLevelType.LogoImageAddress.ImageAddressToByteArray();
                    loyaltyLevelType.LoyaltyIcon = bytes.ToBitmapSource();
                    loyaltyLevelTypeCollection.Add(loyaltyLevelType);
                }
            }

            return loyaltyLevelTypeCollection;
        }
 /// <summary>
 /// Maps the alerts.
 /// </summary>
 /// <param name="dataReader">The data reader.</param>
 /// <returns>Alert object.</returns>
 private static Alert MapAlert(SqlDataReader dataReader)
 {
     return new Alert
     {
         AlertId = dataReader.Int32Field(AlertId).ToString(CultureInfo.CurrentCulture),
         AlertType = dataReader.StringField(AlertType),
         IsDenyAshore = dataReader.BooleanField(IsDenyAshore),
         IsDenyOnboard = dataReader.BooleanField(IsDenyOnboard),
         IsOverride = dataReader.BooleanField(IsOverride),
         IsSoundEnable = dataReader.BooleanField(IsSoundEnable),
         AddedDateTime = dataReader.DateTimeField(AddedDate)
     };
 }
        /// <summary>
        /// Maps the person status.
        /// </summary>
        /// <param name="dataReader">The data reader.</param>
        /// <returns>Person Status List.</returns>
        internal static async Task<List<PersonStatus>> MapPersonStatus(SqlDataReader dataReader)
        {
            var personStatusList = new List<PersonStatus>();

            if (dataReader != null)
            {
                while (await dataReader.ReadAsync())
                {
                    var personStatus = new PersonStatus();
                    personStatus.PersonId = dataReader.Int32Field(PersonId);
                    personStatus.Status = dataReader.StringField(Status);
                    personStatus.StatusChangedDate = dataReader.DateTimeNullableField(StatusChangedDate);
                    personStatusList.Add(personStatus);
                }

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

            return personStatusList;
        }
        /// <summary>
        /// Maps the crew personal detail.
        /// </summary>
        /// <param name="dataReader">The data reader.</param>
        /// <returns>The crew member</returns>
        private static async Task<CrewmemberCollection> RetrieveCrewmemberPersonalDetail(SqlDataReader dataReader)
        {
            var crewmembers = new CrewmemberCollection();

            if (dataReader != null)
            {
                while (await dataReader.ReadAsync())
                {
                    var crewmember = new Crewmember();
                    crewmember.CrewmemberId = dataReader.Int32Field(CrewMemberId).ToString();
                    crewmember.PersonalDetail = new PersonalDetail();
                    crewmember.PersonalDetail.Age = dataReader.Int16NullableField(Age);
                    crewmember.PersonalDetail.AnniversaryDate = dataReader.DateTimeNullableField(AnniversaryDate);
                    crewmember.PersonalDetail.BirthCountryId = dataReader.Int32NullableField(BirthCountryId).ToString();
                    crewmember.PersonalDetail.Birthdate = dataReader.DateTimeNullableField(BirthDate);
                    crewmember.PersonalDetail.CitizenshipCountryId = dataReader.Int32NullableField(CitizenshipCountryId).ToString();
                    crewmember.PersonalDetail.FirstName = dataReader.StringField(FirstName);
                    crewmember.PersonalDetail.Gender = dataReader.StringField(Gender);
                    crewmember.PersonalDetail.LastName = dataReader.StringField(LastName);
                    crewmember.PersonalDetail.MaritalStatus = dataReader.StringField(MaritalStatus);
                    crewmember.PersonalDetail.MiddleName = dataReader.StringField(MiddleName);
                    crewmember.PersonalDetail.Nickname = dataReader.StringField(NickName);
                    crewmember.PersonalDetail.Occupation = dataReader.StringField(Occupation);
                    crewmember.PersonalDetail.DocumentNumber = dataReader.StringField(DocumentNumber);
                    crewmember.PersonalDetail.Suffix = dataReader.StringField(Suffix);
                    crewmember.PersonalDetail.Title = dataReader.StringField(Title);
                    crewmember.PersonalDetail.PreferredName = dataReader.StringField(PreferredName);
                    crewmember.BoardingInfo.OnboardDate = dataReader.DateTimeNullableField(OnboardDate);
                    crewmember.BoardingInfo.AshoreDate = dataReader.DateTimeNullableField(AshoreDate);                    

                    crewmembers.Add(crewmember);
                }
            }

            return crewmembers;
        }
        /// <summary>
        /// Maps the visitors.
        /// </summary>
        /// <param name="dataReader">The data reader.</param>
        /// <returns>The visitor collection</returns>
        private static async Task<VisitorCollection> MapVisitors(SqlDataReader dataReader)
        {
            var visitors = new VisitorCollection();
            if (dataReader != null)
            {
                while (await dataReader.ReadAsync())
                {
                    var visitor = new Visitor
                    {
                        HasAlert = dataReader.BooleanNullableField(HasAlert).HasValue ? dataReader.BooleanNullableField(HasAlert).Value : false,
                        HasMessage = dataReader.BooleanNullableField(HasMessage).HasValue ? dataReader.BooleanNullableField(HasMessage).Value : false,
                        LastDateTime = dataReader.DateTimeNullableField(LastDateTime),
                        LastEvent = dataReader.StringField(LastEvent),
                        SecurityPhotoAddress = dataReader.StringField(SecurityPhotoAddress),
                        VisitorId = dataReader.Int32Field(VisitorId).ToString(),
                        VisitorTypeId = dataReader.ByteField(VisitorTypeId).ToString(),
                        VisitorType = dataReader.StringField(VisitorType),
                        VisitPurpose = dataReader.StringField(VisitPurpose)
                    };

                    byte[] bytes = await visitor.SecurityPhotoAddress.ImageAddressToByteArray();
                    visitor.Photo = bytes.ToBitmapSource();
                    visitor.AssignPhotoByteArray(new Collection<byte>(bytes));
                    visitors.Add(visitor);
                }
            }

            return visitors;
        }
        /// <summary>
        /// Maps the guest personal detail.
        /// </summary>
        /// <param name="dataReader">The data reader.</param>
        /// <returns>Guest Collection.</returns>
        private static async Task<GuestCollection> MapGuests(SqlDataReader dataReader)
        {
            var guestCollection = new GuestCollection();
            if (dataReader != null)
            {
                while (await dataReader.ReadAsync())
                {
                    var guest = new Guest();

                    guest.GuestId = dataReader.Int32Field(GuestId).ToString();
                    var hasAlert = dataReader.BooleanNullableField(HasAlert);
                    guest.HasAlert = hasAlert.HasValue ? hasAlert.Value : false;
                    var hasMessage = dataReader.BooleanNullableField(HasMessage);
                    guest.HasMessage = hasMessage.HasValue ? hasMessage.Value : false;
                    guest.LastDateTime = dataReader.DateTimeNullableField(LastDateTime);
                    guest.LastEvent = dataReader.StringField(LastEvent);
                    guest.SecurityPhotoAddress = dataReader.StringField(SecurityPhotoMediaItemAddress);

                    byte[] bytes = await guest.SecurityPhotoAddress.ImageAddressToByteArray();
                    guest.Photo = bytes.ToBitmapSource();
                    guest.AssignPhotoByteArray(new Collection<byte>(bytes));
                    guestCollection.Add(guest);
                }
            }

            return guestCollection;
        }
        /// <summary>
        /// Retrieves the guest personal detail.
        /// </summary>
        /// <param name="dataReader">The data reader.</param>
        /// <returns>Guest Collection.</returns>
        private static async Task<GuestCollection> RetrieveGuestPersonalDetail(SqlDataReader dataReader)
        {
            var guestCollection = new GuestCollection();
            if (dataReader != null)
            {
                while (await dataReader.ReadAsync())
                {
                    var guest = new Guest();

                    guest.GuestId = dataReader.Int32Field(GuestId).ToString();
                    guest.PersonalDetail = new PersonalDetail();
                    guest.PersonalDetail.Title = dataReader.StringField(Title);
                    guest.PersonalDetail.FirstName = dataReader.StringField(FirstName);
                    guest.PersonalDetail.MiddleName = dataReader.StringField(MiddleName);
                    guest.PersonalDetail.LastName = dataReader.StringField(LastName);
                    guest.PersonalDetail.Nickname = dataReader.StringField(NickName);
                    guest.PersonalDetail.PreferredName = dataReader.StringField(PreferredName);
                    guest.PersonalDetail.Suffix = dataReader.StringField(Suffix);
                    guest.PersonalDetail.Birthdate = dataReader.DateTimeNullableField(BirthDate);
                    guest.PersonalDetail.BirthCountryId = dataReader.Int32NullableField(BirthCountryId).HasValue ? dataReader.Int32NullableField("BirthCountryID").Value.ToString() : null;
                    guest.PersonalDetail.CitizenshipCountryId = dataReader.Int32NullableField(CitizenshipCountryId).HasValue ? dataReader.Int32NullableField("BirthCountryID").Value.ToString() : null;
                    guest.PersonalDetail.Gender = dataReader.StringField(Gender);
                    guest.PersonalDetail.MaritalStatus = dataReader.StringField(MaritalStatus);
                    guest.PersonalDetail.Occupation = dataReader.StringField(Occupation);
                    guest.PersonalDetail.AnniversaryDate = dataReader.DateTimeNullableField(AnniversaryDate);
                    guest.PersonalDetail.DocumentNumber = dataReader.StringField(DocumentNumber);
                    guest.PersonalDetail.Age = dataReader.Int16Field(Age);
                    guest.PersonalDetail.SourceId = dataReader.StringField(SourceId);

                    guestCollection.Add(guest);
                }
            }

            return guestCollection;
        }
 /// <summary>
 /// Maps the voyage itinerary.
 /// </summary>
 /// <param name="dataReader">The data reader.</param>
 /// <returns>Voyage Itinerary</returns>
 private static Itinerary MapVoyageItinerary(SqlDataReader dataReader)
 {
     return new Itinerary
     {
         VoyageItineraryId = dataReader.Int32Field(VoyageItineraryId).ToString(CultureInfo.CurrentCulture),
         PortId = dataReader.Int32Field(PortId).ToString(CultureInfo.CurrentCulture),
         ArrivalTime = dataReader.DateTimeNullableField(ArrivalTime),
         GangwayClosingTime = dataReader.DateTimeNullableField(GangwayClosingTime),
         GangwayOpeningTime = dataReader.DateTimeNullableField(GangwayOpeningTime),
         DepartureTime = dataReader.DateTimeNullableField(DepartureTime),
         Day = dataReader.ByteField(Day),
         IsSeaDay = dataReader.BooleanField(IsSeaDay)
     };
 }
        /// <summary>
        /// Maps the voyages.
        /// </summary>
        /// <param name="dataReader">The data reader.</param>
        /// <returns>The Collection of voyages</returns>
        private static async Task<ICollection<Voyage>> MapVoyages(SqlDataReader dataReader)
        {
            var voyages = new Collection<Voyage>();
            IDictionary<string, ICollection<Itinerary>> itineraries = new Dictionary<string, ICollection<Itinerary>>();
            if (dataReader != null)
            {
                while (await dataReader.ReadAsync())
                {
                    var voyage = new Voyage
                    {
                        VoyageId = dataReader.Int32Field(VoyageId).ToString(),
                        ShipId = dataReader.ByteField(ShipId).ToString(),
                        Number = dataReader.StringField(Number),
                        Name = dataReader.StringField(Name),
                        EmbarkDate = dataReader.DateTimeField(EmbarkDate),
                        DebarkDate = dataReader.DateTimeField(DebarkDate),
                        EmbarkPortId = dataReader.Int32Field(EmbarkPortId).ToString(),
                        DebarkPortId = dataReader.Int32Field(DebarkPortId).ToString(),
                        Nights = dataReader.ByteField(Nights),
                        DestinationId = dataReader.StringField(DestinationName),
                        IsActive = dataReader.BooleanField(IsActive),
                        MediaItemAddress = dataReader.StringField(MediaItemAddress)
                    };

                    byte[] bytes = await voyage.MediaItemAddress.ImageAddressToByteArray();
                    voyage.ItineraryGraphImage = bytes.ToBitmapSource();
                    voyages.Add(voyage);
                }
            }

            return voyages;
        }
        /// <summary>
        /// Maps the gangway locations.
        /// </summary>
        /// <param name="dataReader">The data reader.</param>
        /// <returns>The collection of gangway location</returns>
        private static async Task<ICollection<GangwayLocation>> MapGangwayLocations(SqlDataReader dataReader)
        {
            var gangwayLocations = new Collection<GangwayLocation>();
            if (dataReader != null)
            {
                while (await dataReader.ReadAsync())
                {
                    var gangwayLocation = new GangwayLocation
                    {
                        LocationId = dataReader.Int32Field(LocationId).ToString(),
                        LocationTypeId = dataReader.ByteField(LocationTypeId).ToString(),
                        Name = dataReader.StringField(Name)
                    };

                    gangwayLocations.Add(gangwayLocation);
                }
            }

            return gangwayLocations.OrderBy(a => a.Name).ToList();
        }
        /// <summary>
        /// Maps the brand ports.
        /// </summary>
        /// <param name="dataReader">The data reader.</param>
        /// <returns>brand and Port dictionary.</returns>
        private static async Task<IDictionary<int, Collection<int>>> MapBrandPorts(SqlDataReader dataReader)
        {
            var dictionary = new Dictionary<int, Collection<int>>();
            if (dataReader != null)
            {
                while (await dataReader.ReadAsync())
                {
                    var brandId = dataReader.ByteField(BrandId);
                    var portId = dataReader.Int32Field(PortId);

                    if (!dictionary.ContainsKey(brandId))
                    {
                        var strTest = new Collection<int>();
                        if (portId != default(int))
                        {
                            strTest.Add(portId);
                        }

                        dictionary.Add(brandId, strTest);
                    }
                    else
                    {
                        var val = dictionary[brandId];
                        if (portId != default(int))
                        {
                            val.Add(portId);
                        }
                    }
                }
            }

            return dictionary;
        }
        /// <summary>
        /// Maps the states.
        /// </summary>
        /// <param name="dataReader">The data reader.</param>
        /// <returns>State collection.</returns>
        private static async Task<StateCollection> MapStates(SqlDataReader dataReader)
        {
            var stateCollection = new StateCollection();
            if (dataReader != null)
            {
                while (await dataReader.ReadAsync())
                {
                    var state = new State
                    {
                        CountryId = dataReader.Int32Field(CountryId).ToString(),
                        StateId = dataReader.Int32Field(StateId).ToString(),
                        Name = dataReader.StringField(Name)
                    };

                    stateCollection.Add(state);
                }
            }

            return stateCollection;
        }
        /// <summary>
        /// Maps the ports.
        /// </summary>
        /// <param name="dataReader">The data reader.</param>
        /// <returns>port collection.</returns>
        private static async Task<PortCollection> MapPorts(SqlDataReader dataReader)
        {
            var portCollection = new PortCollection();
            if (dataReader != null)
            {
                while (await dataReader.ReadAsync())
                {
                    var port = new Port
                    {
                        PortId = dataReader.Int32Field(PortId).ToString(),
                        CountryId = dataReader.Int32Field(CountryId).ToString(),
                        Code = dataReader.StringField(Code),
                        City = dataReader.StringField(City),
                        State = dataReader.StringField(State),
                        StateId = dataReader.Int32NullableField(StateId).ToString(),
                        Description = dataReader.StringField(Description),
                        Name = dataReader.StringField(Name)
                    };

                    portCollection.Add(port);
                }
            }

            return portCollection;
        }
        /// <summary>
        /// Maps the person types.
        /// </summary>
        /// <param name="dataReader">The data reader.</param>
        /// <returns>Person types.</returns>
        private static async Task<PersonTypeEntityCollection> MapPersonTypes(SqlDataReader dataReader)
        {
            var personTypeEntityCollection = new PersonTypeEntityCollection();
            if (dataReader != null)
            {
                while (await dataReader.ReadAsync())
                {
                    var personTypeEntity = new PersonTypeEntity
                    {
                        PersonTypeId = dataReader.Int32Field(PersonTypeId).ToString(),
                        Name = dataReader.StringField(Name)
                    };

                    personTypeEntityCollection.Add(personTypeEntity);
                }
            }

            return personTypeEntityCollection;
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="dataReader"></param>
        /// <returns></returns>
        public static async Task<Crewmember> MapUserDetails(SqlDataReader dataReader)
        {
            var crew = new Crewmember();
            if (dataReader != null)
            {
                while (await dataReader.ReadAsync())
                {
                    crew.CrewmemberId = dataReader.Int32Field(CrewMemberId).ToString();
                    crew.PersonalDetail = new PersonalDetail();
                    crew.PersonalDetail.Title = dataReader.StringField(Title);
                    crew.PersonalDetail.FirstName = dataReader.StringField(FirstName);
                    crew.PersonalDetail.MiddleName = dataReader.StringField(MiddleName);
                    crew.PersonalDetail.LastName = dataReader.StringField(LastName);
                    crew.PersonalDetail.Nickname = dataReader.StringField(NickName);
                    crew.PersonalDetail.PreferredName = dataReader.StringField(PreferredName);
                    crew.PersonalDetail.Suffix = dataReader.StringField(Suffix);
                    crew.PersonalDetail.Gender = dataReader.StringField(Gender);
                    crew.PersonalDetail.Age = dataReader.Int32Field(Age);
                    crew.SecurityPhotoAddress = dataReader.StringField(SecurityPhotoAddress);
                    byte[] bytes = await crew.SecurityPhotoAddress.ImageAddressToByteArray();
                    crew.Photo = bytes.ToBitmapSource();
                    crew.AssignPhotoByteArray(new Collection<byte>(bytes));
                }
            }

            return crew;
        }
        /// <summary>
        /// Maps the pending changes count.
        /// </summary>
        /// <param name="dataReader">The data reader.</param>
        /// <returns></returns>
        internal static async Task<int> MapPendingChangesCount(SqlDataReader dataReader)
        {
            int count = 0;
            if (dataReader != null)
            {
                if (await dataReader.ReadAsync())
                {
                    count = dataReader.Int32Field(SyncPendingCount);
                }
            }

            return count;
        }
        /// <summary>
        /// Maps the guest reservation detail.
        /// </summary>
        /// <param name="dataReader">The data reader.</param>
        /// <returns>Guest collection</returns>
        private static async Task<GuestCollection> RetrieveGuestReservationDetail(SqlDataReader dataReader)
        {
            var guestCollection = new GuestCollection();
            if (dataReader != null)
            {
                while (await dataReader.ReadAsync())
                {
                    var guest = new Guest();

                    guest.GuestId = dataReader.Int32Field(GuestId).ToString();
                    guest.CruiseDetail = new GuestCruiseDetail();
                    guest.CruiseDetail.ReservationId = dataReader.Int32Field(ReservationId).ToString();
                    guest.CruiseDetail.ReservationNumber = dataReader.StringField(ReservationNumber);
                    guest.CruiseDetail.IsVip = dataReader.BooleanField(VIPFlag);
                    guest.CruiseDetail.IsPrimary = dataReader.BooleanField(IsPrimary);
                    guest.CruiseDetail.Stateroom = dataReader.StringField(Stateroom);
                    guest.CruiseDetail.EmbarkDate = dataReader.DateTimeField(EmbarkDate);
                    guest.CruiseDetail.DebarkDate = dataReader.DateTimeField(DebarkDate);
                    guest.CruiseDetail.ReservationStatusId = dataReader.ByteField(ReservationStatusId).ToString();
                    guest.CruiseDetail.VoyageId = dataReader.Int32Field(VoyageId).ToString();
                    var loyaltyLevelTypeId = dataReader.Int32NullableField(LoyaltyLevelTypeId);
                    guest.CruiseDetail.LoyaltyLevelTypeId = loyaltyLevelTypeId.HasValue ? loyaltyLevelTypeId.Value.ToString() : null;
                    var beaconId = dataReader.Int32NullableField(BeaconId);
                    guest.CruiseDetail.BeaconId = beaconId.HasValue ? beaconId.Value.ToString() : null;
                    ////guest.CruiseDetail.HasRecovery = dataReader.BooleanField(HasRecovery);
                    guest.CruiseDetail.HasTravelWith = dataReader.BooleanField(HasTravelWith);
                    guest.CruiseDetail.IsFolioAtRisk = dataReader.BooleanField(IsFolioAtRisk);
                    guest.CruiseDetail.CanDebarkAlone = dataReader.BooleanField(CanDebarkAlone);
                    guest.CruiseDetail.StateroomOccupancy = dataReader.ByteField(StateroomOccupancy).ToString();
                    guest.CruiseDetail.DiningDetail = dataReader.StringField(DiningDetail);
                    guest.CruiseDetail.IsCheckedIn = dataReader.BooleanField(IsCheckedIn);
                    guest.CruiseDetail.IsConciergeStatus = dataReader.BooleanField(IsConciergeStatus);
                    guest.CruiseDetail.IsBackToBack = dataReader.BooleanField(IsBackToBack);

                    var stateroomCategoryTypeId = dataReader.Int16NullableField(StateroomCategoryTypeID);
                    guest.CruiseDetail.StateroomCategoryTypeId = stateroomCategoryTypeId.HasValue ? stateroomCategoryTypeId.Value.ToString() : null;
                    guest.CruiseDetail.StateroomCategoryType = dataReader.StringField(Category);

                    guestCollection.Add(guest);
                }
            }

            return guestCollection;
        }
        /// <summary>
        /// Function to map BoardingEmbarkStats.
        /// </summary>
        /// <param name="dataReader">Instance of SqlDataReader</param>
        /// <returns>MBoardingEmbarkStats Collection</returns>
        private static async Task<BoardingEmbarkStatsCollection> MapBoardingEmbarkStats(SqlDataReader dataReader)
        {
            var boardingEmbarkStatsCollection = new BoardingEmbarkStatsCollection();
            if (dataReader != null)
            {
                while (await dataReader.ReadAsync())
                {
                    var boardingEmbarkStats = new BoardingEmbarkStats
                    {
                        BoardingNumber = dataReader.Int32Field(BoardingNumber),
                        BoardingExpectedCount = dataReader.Int32Field(BoardingExpected),
                        BoardingCheckedInCount = dataReader.Int32Field(BoardingCheckedIn),
                        BoardingOnboardCount = dataReader.Int32Field(BoardingOnboard)
                    };

                    boardingEmbarkStatsCollection.Add(boardingEmbarkStats);
                }
            }

            return boardingEmbarkStatsCollection;
        }
        /// <summary>
        /// Maps the crew.
        /// </summary>
        /// <param name="dataReader">The data reader.</param>
        /// <returns>Crew member collection</returns>
        private static async Task<CrewmemberCollection> MapCrew(SqlDataReader dataReader)
        {
            var crewmemberCollection = new CrewmemberCollection();
            if (dataReader != null)
            {
                while (await dataReader.ReadAsync())
                {
                    var crew = new Crewmember();

                    crew.CrewmemberId = dataReader.Int32Field(CrewMemberId).ToString();
                    crew.CrewmemberTypeId = dataReader.ByteField(CrewMemberTypeId).ToString();
                    crew.EmployeeNo = dataReader.StringField(EmployeeNo);
                    var hasAlert = dataReader.BooleanNullableField(HasAlert);
                    var hasMessage = dataReader.BooleanNullableField(HasMessage);
                    crew.HasAlert = hasAlert.HasValue ? hasAlert.Value : false;
                    crew.HasMessage = hasMessage.HasValue ? hasMessage.Value : false;
                    crew.Position = dataReader.StringField(Position);
                    crew.LastDateTime = dataReader.DateTimeNullableField(LastDateTime);
                    crew.LastEvent = dataReader.StringField(LastEvent);
                    crew.SafetyNumber = dataReader.StringField(SafetyNumber);
                    crew.SecurityPhotoAddress = dataReader.StringField(SecurityPhotoAddress);
                    crew.Stateroom = dataReader.StringField(Stateroom);
                    crew.StateroomOccupancy = dataReader.ByteField(StateroomOccupancy).ToString();
                    crew.Department = dataReader.StringField(Department);
                    crew.PortAssignedDate = dataReader.DateTimeNullableField(PortAssignedDate);

                    byte[] bytes = await crew.SecurityPhotoAddress.ImageAddressToByteArray();
                    crew.Photo = bytes.ToBitmapSource();
                    crew.AssignPhotoByteArray(new Collection<byte>(bytes));
                    crewmemberCollection.Add(crew);
                }
            }

            return crewmemberCollection;
        }
        /// <summary>
        /// Function to map BoardingEmbarkStats.
        /// </summary>
        /// <param name="dataReader">Instance of SqlDataReader</param>
        /// <returns>MBoardingEmbarkStats Collection</returns>
        private static async Task<int> MapCurrentBoardingNumber(SqlDataReader dataReader)
        {
            int currentBoardingCount = 0;
            if (dataReader != null)
            {
                while (await dataReader.ReadAsync())
                {
                    currentBoardingCount = dataReader.Int32Field(CurrentBoardingNumber);
                }
            }

            return currentBoardingCount;
        }
        /// <summary>
        /// Maps the visitor personal detail.
        /// </summary>
        /// <param name="dataReader">The data reader.</param>
        /// <returns>Visitor collection</returns>
        private static async Task<VisitorCollection> RetrieveVisitorPersonalDetail(SqlDataReader dataReader)
        {
            var visitors = new VisitorCollection();

            if (dataReader != null)
            {
                while (await dataReader.ReadAsync())
                {
                    var visitor = new Visitor();
                    visitor.VisitorId = dataReader.Int32Field(VisitorId).ToString();
                    visitor.PersonalDetail = new PersonalDetail();
                    visitor.VisitorInfo = new VisitorInfo();
                    visitor.PersonalDetail.Age = dataReader.Int16NullableField(Age);
                    visitor.PersonalDetail.AnniversaryDate = dataReader.DateTimeNullableField(AnniversaryDate);
                    visitor.PersonalDetail.BirthCountryId = dataReader.Int32NullableField(BirthCountryId).ToString();
                    visitor.PersonalDetail.Birthdate = dataReader.DateTimeNullableField(BirthDate);
                    visitor.PersonalDetail.CitizenshipCountryId = dataReader.Int32NullableField(CitizenshipCountryId).ToString();
                    visitor.PersonalDetail.FirstName = dataReader.StringField(FirstName);
                    visitor.PersonalDetail.Gender = dataReader.StringField(Gender);
                    visitor.PersonalDetail.LastName = dataReader.StringField(LastName);
                    visitor.PersonalDetail.MaritalStatus = dataReader.StringField(MaritalStatus);
                    visitor.PersonalDetail.MiddleName = dataReader.StringField(MiddleName);
                    visitor.PersonalDetail.Nickname = dataReader.StringField(NickName);
                    visitor.PersonalDetail.Occupation = dataReader.StringField(Occupation);
                    visitor.PersonalDetail.DocumentNumber = dataReader.StringField(DocumentNumber);
                    visitor.PersonalDetail.Suffix = dataReader.StringField(Suffix);
                    visitor.PersonalDetail.Title = dataReader.StringField(Title);
                    visitor.PersonalDetail.DepartmentName = dataReader.StringField(Department);
                    visitor.PersonalDetail.DepartmentPOC = dataReader.StringField(Contact);
                    visitor.VisitorInfo.CompanyName = dataReader.StringField(Company);
                    visitor.PersonalDetail.DocumentNumber = dataReader.StringField(DocumentNumber);
                    visitor.PersonalDetail.DocumentType = dataReader.StringField(DocumentType);
                    ////visitor.VisitorInfo.ContactNumber = dataReader.StringField(ContactPhoneNumber);
                    visitor.VisitorInfo.CompanyContactNumber = dataReader.StringField(ContactPhoneNumber);
                    visitor.PersonalDetail.DocumentTypeId = dataReader.Int16Field(DocumentTypeId).ToString();
                    visitors.Add(visitor);
                }
            }

            return visitors;
        }
        /// <summary>
        /// Function to map GuestEmbarkStats.
        /// </summary>
        /// <param name="dataReader">Instance of SqlDataReader</param>
        /// <returns>Instance of GuestEmbarkStats</returns>
        private static async Task<GuestEmbarkStats> MapGuestEmbarkStatistics(SqlDataReader dataReader)
        {
            var guestEmbarkStats = new GuestEmbarkStats();

            if (dataReader != null)
            {
                while (await dataReader.ReadAsync())
                {
                    guestEmbarkStats = new GuestEmbarkStats
                    {
                        Ashore = dataReader.Int32Field(Ashore),
                        CheckedIn = dataReader.Int32Field(CheckedIn),
                        DebarkingToday = dataReader.Int32Field(DebarkingTodayField),
                        ExpectedToday = dataReader.Int32Field(ExpectedToday),
                        NotCheckedIn = dataReader.Int32Field(NotCheckedIn),
                        Onboard = dataReader.Int32Field(Onboard),
                        TotalOccupancy = dataReader.Int32Field(TotalOccupancy)
                    };
                }
            }

            return guestEmbarkStats;
        }
        /// <summary>
        /// Function to map CrewEmbarkStats.
        /// </summary>
        /// <param name="dataReader">Instance of SqlDataReader</param>
        /// <returns>Instance of CrewEmbarkStats</returns>
        private static async Task<CrewEmbarkStats> MapCrewEmbarkStatistics(SqlDataReader dataReader)
        {
            var crewEmbarkStats = new CrewEmbarkStats();

            if (dataReader != null)
            {
                while (await dataReader.ReadAsync())
                {
                    crewEmbarkStats = new CrewEmbarkStats
                    {
                        Ashore = dataReader.Int32Field(Ashore),
                        SignIn = dataReader.Int32Field(SignIn),
                        DebarkingToday = dataReader.Int32Field(DebarkingTodayField),
                        ExpectedToday = dataReader.Int32Field(ExpectedToday),
                        Onboard = dataReader.Int32Field(Onboard),
                        TotalOccupancy = dataReader.Int32Field(TotalOccupancy)
                    };
                }
            }

            return crewEmbarkStats;
        }
        /// <summary>
        /// Function to map Country Embark Statistics.
        /// </summary>
        /// <param name="dataReader">Instance of SqlDataReader</param>
        /// <returns>country embark statistics</returns>
        private static async Task<ICollection<int>> MapCountryEmbarkStatistics(SqlDataReader dataReader)
        {
            var countryEmbarkStats = new Collection<int>();

            if (dataReader != null)
            {
                while (await dataReader.ReadAsync())
                {
                    var countryId = dataReader.Int32Field(CountryId);
                    countryEmbarkStats.Add(countryId);
                }
            }

            return countryEmbarkStats;
        }
 /// <summary>
 /// Maps the alerts.
 /// </summary>
 /// <param name="dataReader">The data reader.</param>
 /// <returns>Alert object.</returns>
 private static AccessCard MapAccessCard(SqlDataReader dataReader)
 {
     return new AccessCard
     {
         AccessCardId = dataReader.Int32Field(AccessCardId).ToString(CultureInfo.CurrentCulture),
         AccessCardNumber = dataReader.StringField(AccessCardNumber),
         ExpiryDate = dataReader.DateTimeNullableField(ExpiryDate),
         AddedDate = dataReader.DateTimeField(AddedDate)
     };
 }
        /// <summary>
        /// Function to map VisitorEmbarkStats.
        /// </summary>
        /// <param name="dataReader">Instance of SqlDataReader</param>
        /// <returns>Instance of VisitorEmbarkStats</returns>
        private static async Task<VisitorEmbarkStats> MapVisitorEmbarkStatistics(SqlDataReader dataReader)
        {
            var visitorEmbarkStats = new VisitorEmbarkStats();

            if (dataReader != null)
            {
                while (await dataReader.ReadAsync())
                {
                    visitorEmbarkStats = new VisitorEmbarkStats
                    {
                        ExpectedToday = dataReader.Int32Field(ExpectedToday),
                        Onboard = dataReader.Int32Field(Onboard),
                        Ashore = dataReader.Int32Field(Ashore)
                    };
                }
            }

            return visitorEmbarkStats;
        }
 /// <summary>
 /// Maps the person message.
 /// </summary>
 /// <param name="dataReader">The data reader.</param>
 /// <returns>filled person message.</returns>
 private static PersonMessage MapPersonMessage(SqlDataReader dataReader)
 {
     return new PersonMessage
     {
         AlertId = dataReader.Int32Field(AlertId).ToString(CultureInfo.CurrentCulture),
         StatusId = dataReader.ByteField(StatusID).ToString(CultureInfo.CurrentCulture),
         AddedBy = dataReader.StringField(AddedBy),
         IsSoundEnable = dataReader.BooleanField(IsSoundEnable),
         AddedDateTime = dataReader.DateTimeNullableField(AddedDateTime)
     };
 }
        /// <summary>
        /// Maps the countries.
        /// </summary>
        /// <param name="dataReader">The data reader.</param>
        /// <returns>Country collection</returns>
        private static async Task<CountryCollection> MapCountries(SqlDataReader dataReader)
        {
            var countryCollection = new CountryCollection();
            if (dataReader != null)
            {
                while (await dataReader.ReadAsync())
                {
                    var country = new Country
                    {
                        CountryId = dataReader.Int32Field(CountryId).ToString(),
                        Code = dataReader.StringField(Code),
                        Name = dataReader.StringField(Name),
                        CountryFlagAddress = dataReader.StringField(CountryFlagAddress)
                    };

                    byte[] bytes = await country.CountryFlagAddress.ImageAddressToByteArray();
                    country.CountryIcon = bytes.ToBitmapSource();
                    countryCollection.Add(country);
                }
            }

            return countryCollection;
        }