/// <summary> /// Retrieves the history by person status asynchronous. /// </summary> /// <param name="shipId">The ship identifier.</param> /// <param name="voyageIds">The voyage ids.</param> /// <param name="statusType">Type of the status.</param> /// <param name="personTypeId">The person type identifier.</param> /// <param name="startDate">The start date.</param> /// <param name="pageNumber">The page number.</param> /// <param name="pageSize">Size of the page.</param> /// <returns> /// List Result of person status. /// </returns> public async Task<ListResult<PersonStatusHistory>> RetrieveHistoryByPersonStatusAsync(string shipId, string voyageIds, string statusType, string personTypeId, string startDate, int? pageNumber, int? pageSize) { var statusTypeId = RetrieveStatusTypeId(statusType); var personIds = string.Empty; var personStatus = new List<PersonStatus>(); var personTypeList = new List<PersonType>(); personTypeList.Add(personTypeId.RetrievePersonType()); var personData = new Person(); long totalResults = 0; if (statusType.Equals(ExpectedToday, StringComparison.OrdinalIgnoreCase) && personTypeId == CommonConstants.VisitorTypeId) { personData = await this.personDataAdaptor.RetrievePersonsBySearchText(shipId, personIds, personTypeList, SearchType.VisitorExpectedToday, pageNumber: pageNumber, maxResults: pageSize, folioNumber: null); return PersonStatusHistoryMapper.MapPersonInformation(personData, personTypeId, personStatus); } else if (statusType.Equals(LeavingToday, StringComparison.OrdinalIgnoreCase) && personTypeId == CommonConstants.GuestTypeId) { var dbCommand = this.Database.GetStoredProcCommand(RetrieveGuestDashboardStatisticsDetail) .AddParameter(StatsDate, DbType.DateTime, startDate) .AddParameter(ShipId, DbType.String, shipId) .AddParameter(PageNumber, DbType.Int32, pageNumber != null && pageNumber.Value != default(int) ? pageNumber : OfflineConstants.DefaultPageNumber) .AddParameter(PageSize, DbType.Int32, pageSize != null && pageSize.Value != default(int) ? pageSize : OfflineConstants.DefaultPageSize) .AddParameter(RecordCount, ParameterDirection.Output, DbType.Int64, 0); if (!string.IsNullOrWhiteSpace(voyageIds)) { dbCommand.AddParameter(VoyageIDs, DbType.String, voyageIds); } personIds = await this.ExecuteReaderAsync(dbCommand, PersonStatusHistoryMapper.MapPersonIds); totalResults = RetrieveRecordCountValue(dbCommand); } else { var command = this.Database.GetStoredProcCommand(RetrieveDashboardStatisticsDetail) .AddParameter(StatisticsType, DbType.Int16, Convert.ToInt16(statusTypeId)) .AddParameter(PersonTypeID, DbType.Byte, personTypeId) .AddParameter(StatsDate, DbType.DateTime, startDate) .AddParameter(ShipId, DbType.String, shipId) .AddParameter(PageNumber, DbType.Int32, pageNumber != null && pageNumber.Value != default(int) ? pageNumber : OfflineConstants.DefaultPageNumber) .AddParameter(PageSize, DbType.Int32, pageSize != null && pageSize.Value != default(int) ? pageSize : OfflineConstants.DefaultPageSize) .AddParameter(RecordCount, ParameterDirection.Output, DbType.Int64, 0); if (!string.IsNullOrWhiteSpace(voyageIds)) { command.AddParameter(VoyageIDs, DbType.String, voyageIds); } personStatus = await this.ExecuteReaderAsync(command, PersonStatusHistoryMapper.MapPersonStatus); personStatus.Iterate(a => { personIds = string.Concat(personIds, a.PersonId, CommaSeparator); }); totalResults = RetrieveRecordCountValue(command); } personData = await this.personDataAdaptor.RetrievePersonsBySearchText(shipId, personIds, personTypeList, SearchType.PersonId, pageNumber: OfflineConstants.DefaultPageNumber, maxResults: pageSize, personId: personIds, folioNumber: null); var personHistoryList = PersonStatusHistoryMapper.MapPersonInformation(personData, personTypeId, personStatus); personHistoryList.TotalResults = totalResults; return personHistoryList; }