/// <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>
 /// 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 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 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 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 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>
        /// 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>
        /// 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 history.
 /// </summary>
 /// <param name="dataReader">The data reader.</param>
 /// <returns>gangway history Object.</returns>
 private static GangwayHistory MapHistory(SqlDataReader dataReader)
 {
     return new GangwayHistory
     {
         PersonId = dataReader.StringField(PersonID),
         PersonTypeId = dataReader.ByteNullableField(PersonTypeID).HasValue ? dataReader.ByteNullableField(PersonTypeID).Value.ToString(CultureInfo.CurrentCulture) : null,
         FirstName = dataReader.StringField(FirstName),
         LastName = dataReader.StringField(LastName),
         GangwayEventTypeId = dataReader.Int16NullableField(EventTypeId).HasValue ? dataReader.Int16NullableField(EventTypeId).Value.ToString(CultureInfo.CurrentCulture) : null,
         EventDateTime = dataReader.DateTimeNullableField(EventDate),
         EventDetails = !string.IsNullOrWhiteSpace(dataReader.StringField(EventDetail)) ? dataReader.StringField(EventDetail).DeserializeXml<EventDetail>() : null,
         GangwayLocation = dataReader.StringField(Location),
         MachineName = dataReader.StringField(MachineName),
         PortCode = dataReader.StringField(Port),
         UserName = dataReader.StringField(AddedBy)
     };
 }
 /// <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)
     };
 }