/// <summary>
 /// Maps the debark authorization details.
 /// </summary>
 /// <param name="person">The person.</param>
 /// <param name="debarkPersonalDetails">The debark personal details.</param>
 private static void MapDebarkAuthorizationDetails(Person person, DebarkPersonDetailCollection debarkPersonalDetails)
 {
     var debarkAuthorizations = new DefaultDebarkAuthorizationManager(new DefaultDebarkAuthorizationSettings(), debarkPersonalDetails).RetrieveDefaultAuthorizations();
     foreach (var item in person.Guests)
     {
         var portAuthorization = debarkAuthorizations.FirstOrDefault(a => a.PersonId == item.GuestId);
         if (portAuthorization != null)
         {
             item.AssignPortAuthorizations(portAuthorization.PortDebarkAuthorizations);
         }
     }
 }
        /// <summary>
        /// Maps the guest cruise details.
        /// </summary>
        /// <param name="guests">The guests.</param>
        /// <param name="personStatus">The person status.</param>
        /// <param name="shipId">The ship identifier.</param>
        /// <param name="personTypeId">The person type identifier.</param>
        /// <param name="guestReservationDetails">The guest reservation details.</param>
        /// <param name="staterooms">The staterooms.</param>
        /// <returns>
        /// Return nothing.
        /// </returns>
        internal async Task<ICollection<Guest>> MapGuestDetails(IEnumerable<Guest> guests, ListResult<PersonStatus> personStatus, string shipId, string personTypeId, IDictionary<string, DataAccess.Entities.GuestReservationDetail> guestReservationDetails, ListResult<DataAccess.Entities.Stateroom> staterooms)
        {
            var guestCollection = new Collection<Guest>();
            var debarkPersonalDetails = new DebarkPersonDetailCollection();
            var stateroomCategories = await DIContainer.Instance.Resolve<ShipClientRepository>().RetrieveStateroomCategoryListAsync(shipId);
            foreach (var guest in guests)
            {
                this.MapGuestCruiseDetails(staterooms, stateroomCategories, guest, guestReservationDetails, personStatus);

                if (guest.CruiseDetail.Stateroom != null)
                {
                    var debarkPersonalDetail = new DebarkPersonDetail { Age = guest.PersonalDetail.Age, PersonId = guest.GuestId, PersonTypeId = personTypeId, ReservationId = guest.CruiseDetail.ReservationId, StateroomNumber = guest.CruiseDetail.Stateroom };
                    debarkPersonalDetails.Add(debarkPersonalDetail);
                }

                MapPersonStatus(personStatus, guest);

                guestCollection.Add(guest);
            }

            MapDebarkAuthorizationDetails(guestCollection, debarkPersonalDetails);

            return guestCollection;
        }
        /// <summary>
        /// Maps the guest detail.
        /// </summary>
        /// <param name="person">The person.</param>
        /// <param name="guestPersonDetailList">The guest person detail list.</param>
        /// <param name="guestReservationDetailList">The guest reservation detail list.</param>
        /// <param name="guestAlerts">The guest alerts.</param>
        /// <param name="guestAlertMessages">The guest alert messages.</param>
        /// <param name="guestPersonMessages">The guest person messages.</param>
        /// <param name="guestMessages">The guest messages.</param>
        private static void MapGuestDetail(Person person, GuestCollection guestPersonDetailList, GuestCollection guestReservationDetailList, IDictionary<string, AlertCollection> guestAlerts, IDictionary<string, Collection<Message>> guestAlertMessages, IDictionary<string, PersonMessageCollection> guestPersonMessages, IDictionary<string, Collection<Message>> guestMessages, IDictionary<string, FolioCollection> folioList)
        {
            var debarkPersonalDetails = new DebarkPersonDetailCollection();
            person.Guests.Iterate(a =>
            {
                var guestReservationDetail = guestReservationDetailList.Where(b => a.GuestId.Equals(b.GuestId)).FirstOrDefault();
                var guestPersonalDetail = guestPersonDetailList.Where(c => a.GuestId.Equals(c.GuestId)).FirstOrDefault();
                if (guestReservationDetail != null)
                {
                    a.CruiseDetail = guestReservationDetail.CruiseDetail;
                }

                if (guestPersonalDetail != null)
                {
                    a.PersonalDetail = guestPersonalDetail.PersonalDetail;
                }

                var guestAlertCollection = guestAlerts.ContainsKey(a.GuestId) ? guestAlerts[a.GuestId] : null;
                guestAlertCollection.Iterate(b => b.Message = guestAlertMessages.ContainsKey(b.AlertId) ? guestAlertMessages[b.AlertId].FirstOrDefault() : null);
                if (guestAlertCollection != null)
                {
                    a.AssignAlerts(guestAlertCollection);
                }

                var messageCollection = guestPersonMessages.ContainsKey(a.GuestId) ? guestPersonMessages[a.GuestId] : null;
                messageCollection.Iterate(b => b.Message = guestMessages.ContainsKey(b.AlertId) ? guestMessages[b.AlertId].FirstOrDefault() : null);
                if (messageCollection != null)
                {
                    a.AssignMessages(messageCollection);
                }

                var folioCollection = folioList.ContainsKey(a.GuestId) ? folioList[a.GuestId] : null;
                if (folioCollection != null)
                {
                    a.AssignFolios(folioCollection);
                }

                if (a.CruiseDetail.Stateroom != null)
                {
                    var debarkPersonalDetail = new DebarkPersonDetail { Age = a.PersonalDetail.Age, PersonId = a.GuestId, PersonTypeId = CommonConstants.GuestTypeId, ReservationId = a.CruiseDetail.ReservationId, StateroomNumber = a.CruiseDetail.Stateroom };
                    debarkPersonalDetails.Add(debarkPersonalDetail);
                }
            });

            MapDebarkAuthorizationDetails(person, debarkPersonalDetails);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="DefaultDebarkAuthorizationManager"/> class.
 /// </summary>
 /// <param name="settings">The settings.</param>
 /// <param name="debarkPersonDetails">The debark person details.</param>
 public DefaultDebarkAuthorizationManager(DefaultDebarkAuthorizationSettings settings, DebarkPersonDetailCollection debarkPersonDetails)
 {
     this.debarkPersonDetails = debarkPersonDetails;
     this.settings = settings;
 }