public async Task<ActionResult> UpdateVisitor(string visitorId, string updateType, VisitorPresenter presenter)
        {
            ModelState.Clear();
            if (presenter != null && !string.IsNullOrEmpty(visitorId))
            {
                if (string.IsNullOrEmpty(updateType))
                {
                    await this.UploadVisitorImage(presenter);
                }

                var visitor = InsertVisitorData(presenter, updateType);
                var visitorDetail = await this.visitorManager.UpdateVisitorAsync(visitor, visitorId);
                return visitorDetail != null ? this.Json(visitorId) : this.Json(false);
            }

            return this.Json(false);
        }
        /// <summary>
        /// Views the visitor.
        /// </summary>
        /// <param name="presenter">The presenter.</param>
        /// <param name="visitorId">The visitor identifier.</param>
        /// <param name="type">The type.</param>
        /// <returns>
        /// View Visitor view
        /// </returns>
        public async Task<ActionResult> ViewVisitor(VisitorPresenter presenter, string visitorId, string type)
        {
            ModelState.Clear();
            if (presenter != null && !string.IsNullOrEmpty(visitorId))
            {
                presenter.VisitorDetail = await this.visitorManager.GetVisitorsByIdAsync(visitorId);

                SessionData.Instance.PersonItemListResult.Clear();
                var personItemList = new List<Person>();
                var person = new Person { PersonId = presenter.VisitorDetail.VisitorId, PersonalDetail = presenter.VisitorDetail.PersonalDetail, PersonTypeId = ThreeConst };
                personItemList.Add(person);

                SessionData.Instance.AssignPersonSearchResult(personItemList);

                var alerts = await this.alertManager.ListAlertsAsync(ApplicationIds, visitorId, type);

                foreach (var alert in alerts.Items)
                {
                    var addedDate = Convert.ToDateTime(alert.AddedDate, CultureInfo.InvariantCulture);
                    alert.AddedDate = Convert.ToString(BaseController.GenerateLocalDateTime(addedDate), CultureInfo.InvariantCulture);
                }

                this.SetPagedRecordsForAlert(presenter, alerts);

                if (SessionData.Instance.MasterData != null && SessionData.Instance.MasterData.Ship != null && !string.IsNullOrEmpty(SessionData.Instance.MasterData.Ship.Name))
                {
                    presenter.ShipName = SessionData.Instance.MasterData.Ship.Name;
                }
            }

            return this.View(presenter);
        }
        /// <summary>
        /// Edits the visitor.
        /// </summary>
        /// <param name="visitorId">The visitor identifier.</param>
        /// <param name="type">The type.</param>
        /// <returns>
        /// Edit Visitor View
        /// </returns>
        public async Task<ActionResult> EditVisitor(string visitorId, string type)
        {
            var presenter = new VisitorPresenter();
            if (!string.IsNullOrEmpty(visitorId))
            {
                presenter = InsertDummyPersonalData(presenter);
                var saveUtcNow = BaseController.GenerateLocalDateTime(DateTime.UtcNow);
                ViewBag.dob = saveUtcNow.ToString(ShortDateTimeFormat, CultureInfo.InvariantCulture);
                ViewBag.startDate = saveUtcNow.ToString(this.ApplicationSettings.ShipDateTimeFormat, CultureInfo.InvariantCulture);
                ViewBag.expireDate = saveUtcNow.AddHours(1).ToString(this.ApplicationSettings.ShipDateTimeFormat, CultureInfo.InvariantCulture);
                presenter.VisitorDetail = await this.visitorManager.GetVisitorsByIdAsync(visitorId);
                var alerts = await this.alertManager.ListAlertsAsync(ApplicationIds, visitorId, type);
                this.SetPagedRecordsForAlert(presenter, alerts);

                if (SessionData.Instance.MasterData != null && SessionData.Instance.MasterData.Ship != null && !string.IsNullOrEmpty(SessionData.Instance.MasterData.Ship.Name))
                {
                    presenter.ShipName = SessionData.Instance.MasterData.Ship.Name;
                }
            }

            return this.View(presenter);
        }
 /// <summary>
 /// Extracts the first paged records.
 /// </summary>
 /// <param name="presenter">The presenter.</param>
 private void ExtractOnLoadPagedRecords(VisitorPresenter presenter)
 {
     var maxPaging = DefaultPageSize > SessionData.Instance.VisitorItemListResult.Items.Count ? SessionData.Instance.VisitorItemListResult.Items.Count : DefaultPageSize;
     var pagingResult = SessionData.Instance.VisitorItemListResult.Items.Skip(0).Take(maxPaging - 0).ToList();
     if (pagingResult.Count > 0)
     {
         var pagingItems = new ListResult<Visitor>();
         pagingItems.AssignItems(pagingResult);
         presenter.AssignVisitorSearchResult(pagingItems);
     }
 }
        /// <summary>
        /// Searches the visitor list.
        /// </summary>
        /// <param name="presenter">The presenter.</param>
        /// <param name="searchType">Type of the search.</param>
        /// <returns>
        /// The Action Result.
        /// </returns>
        public async Task<ActionResult> SearchVisitorList(VisitorPresenter presenter, string searchType)
        {
            if (presenter != null)
            {
                var searchFilter = new SearchFilters();
                SetSearchFilterByType(presenter, searchType, searchFilter);

                searchFilter.StartDate = presenter.StartDate;
                searchFilter.EndDate = presenter.EndDate;
                var visitorType = SessionData.Instance.MasterData.VisitorTypes.FirstOrDefault(item => item.VisitorTypeId.Equals(presenter.VisitorTypeId, StringComparison.InvariantCultureIgnoreCase));
                var visitorPurpose = SessionData.Instance.MasterData.VisitPurposes.FirstOrDefault(item => item.VisitPurposeId.Equals(presenter.Visit.VisitPurposeId, StringComparison.InvariantCultureIgnoreCase));
                searchFilter.Citizenship = presenter.PersonalDetail.CitizenshipCountryId;
                searchFilter.VisitPurpose = !string.IsNullOrEmpty(presenter.Visit.VisitPurposeId) && visitorPurpose != null ? visitorPurpose.VisitPurposeId : string.Empty;
                searchFilter.VisitorType = !string.IsNullOrEmpty(presenter.VisitorTypeId) && visitorType != null ? visitorType.VisitorTypeId : string.Empty;
                searchFilter.PageNumber = 1;
                searchFilter.MaxResult = this.ApplicationSettings.MaxPageSize;

                var visitors = new ListResult<Visitor>();

                if (!string.IsNullOrEmpty(presenter.PersonalDetail.CitizenshipCountryId))
                {
                    var selectedCitizenShip = presenter.PersonalDetail.CitizenshipCountryId.Split(CommaSeparatorChar).ToList();
                    searchFilter.Citizenship = selectedCitizenShip.Count != 0 && selectedCitizenShip.Count == SessionData.Instance.MasterData.Countries.Count ? string.Empty : presenter.PersonalDetail.CitizenshipCountryId;
                    visitors = await this.visitorManager.GetVisitorsAsync(searchFilter);
                }

                if (visitors != null && visitors.Items != null && visitors.Items.Count > 0)
                {
                    SessionData.Instance.AssignVisitorSearchResult(visitors);
                    this.ExtractOnLoadPagedRecords(presenter);
                }
            }

            return this.PartialView("_ListVisitor", presenter);
        }
        /// <summary>
        /// Sets the type of the search filter by.
        /// </summary>
        /// <param name="presenter">The presenter.</param>
        /// <param name="searchType">Type of the search.</param>
        /// <param name="searchFilter">The search filter.</param>
        private static void SetSearchFilterByType(VisitorPresenter presenter, string searchType, SearchFilters searchFilter)
        {
            if (!string.IsNullOrEmpty(searchType))
            {
                switch (searchType)
                {
                    case PassportNo:
                        searchFilter.DocumentNumber = presenter.SearchText;
                        searchFilter.DocumentTypeId = OneConst;
                        break;

                    case LastName:
                        searchFilter.LastNameContains = presenter.SearchText;
                        break;

                    case Birthdate:
                        searchFilter.Birthdate = presenter.SearchText;
                        break;

                    default:
                        searchFilter.LastNameContains = presenter.SearchText;
                        break;
                }
            }
        }
        /// <summary>
        /// Inserts the visitor data.
        /// </summary>
        /// <param name="presenter">The presenter.</param>
        /// <param name="updateType">Type of the update.</param>
        /// <returns>
        /// Visitor data
        /// </returns>
        private static Visitor InsertVisitorData(VisitorPresenter presenter, string updateType)
        {
            if (presenter != null)
            {
                string shipId = string.Empty;
                if (SessionData.Instance.MasterData != null && SessionData.Instance.MasterData.Ship != null && !string.IsNullOrEmpty(SessionData.Instance.MasterData.Ship.ShipId))
                {
                    shipId = SessionData.Instance.MasterData.Ship.ShipId;
                }

                var visits = new VisitsCollection();
                visits.Add(new Visit { ShipId = shipId, EndDate = presenter.Visit.EndDate, StartDate = presenter.Visit.StartDate, VisitPurposeId = presenter.Visit.VisitPurposeId, VisitId = presenter.Visit.VisitId });

                var identifications = new IdentificationCollection();

                if (string.IsNullOrEmpty(presenter.Identification.DocumentTypeId) && string.IsNullOrEmpty(presenter.Identification.Number))
                {
                    identifications = null;
                }
                else
                {
                    identifications.Add(new Identification { DocumentTypeId = presenter.Identification.DocumentTypeId, Number = !string.IsNullOrEmpty(presenter.Identification.Number) ? presenter.Identification.Number : string.Empty, IdentificationId = presenter.Identification.IdentificationId });
                }

                var visitor = new Visitor
                {
                    PersonalDetail = new PersonalDetail
                    {
                        Title = presenter.PersonalDetail.Title,
                        FirstName = presenter.PersonalDetail.FirstName,
                        LastName = presenter.PersonalDetail.LastName,
                        Gender = presenter.PersonalDetail.Gender,
                        MaritalStatus = presenter.PersonalDetail.MaritalStatus,
                        Birthdate = presenter.PersonalDetail.Birthdate,
                        CitizenshipCountryId = presenter.PersonalDetail.CitizenshipCountryId,
                        DepartmentId = presenter.PersonalDetail.DepartmentId,
                        DepartmentPOC = presenter.PersonalDetail.DepartmentPOC,
                        Note = presenter.PersonalDetail.Note
                    },

                    Visits = visits,
                    Identifications = identifications,
                    VisitorTypeId = presenter.VisitorTypeId,
                    CompanyContactNumber = presenter.CompanyContactNumber,
                    CompanyName = presenter.CompanyName
                };
                if (!string.IsNullOrEmpty(updateType) && updateType.Equals(DeletePhoto, StringComparison.OrdinalIgnoreCase))
                {
                    visitor.SecurityPhotoAddress = string.Empty;
                }
                else
                {
                    visitor.SecurityPhotoAddress = presenter.SecurityPhotoAddress;
                }

                return visitor;
            }

            return null;
        }
        /// <summary>
        /// Search Todays the visitor.
        /// </summary>
        /// <param name="presenter">The presenter.</param>
        /// <param name="searchType">Type of the search.</param>
        /// <returns>Todays Visits List </returns>
        public async Task<ActionResult> SearchTodaysVisitor(VisitorPresenter presenter, string searchType)
        {
            if (presenter != null)
            {
                var searchFilter = new SearchFilters();
                SetSearchFilterByType(presenter, searchType, searchFilter);

                var visitors = new ListResult<Visitor>();
                var visitorPurpose = SessionData.Instance.MasterData.VisitPurposes.FirstOrDefault(item => item.VisitPurposeId.Equals(presenter.Visit.VisitPurposeId, StringComparison.InvariantCultureIgnoreCase));
                var vistorType = SessionData.Instance.MasterData.VisitorTypes.FirstOrDefault(item => item.VisitorTypeId.Equals(presenter.VisitorTypeId, StringComparison.InvariantCultureIgnoreCase));
                searchFilter.ShipTime = Convert.ToString(BaseController.GenerateLocalDateTime(DateTime.UtcNow), CultureInfo.InvariantCulture);

                searchFilter.VisitPurpose = presenter.Visit != null && !string.IsNullOrEmpty(presenter.Visit.VisitPurposeId) && visitorPurpose != null ? visitorPurpose.VisitPurposeId : string.Empty;
                searchFilter.VisitorType = !string.IsNullOrEmpty(presenter.VisitorTypeId) && vistorType != null ? vistorType.VisitorTypeId : string.Empty;
                searchFilter.Status = !string.IsNullOrEmpty(presenter.VisitorStatus.VisitorStatusId) ? presenter.VisitorStatus.VisitorStatusId.Equals(OnboardVisitorStatusValue) ? true : presenter.VisitorStatus.VisitorStatusId.Equals(OffboardVisitorStatusValue) ? false : default(bool?) : default(bool?);

                searchFilter.PageNumber = 1;

                searchFilter.MaxResult = searchFilter.Status.HasValue ? int.MaxValue : this.ApplicationSettings.MaxPageSize;

                if (presenter.VisitorStatus.VisitorStatusId.Equals(OnboardVisitorStatusValue))
                {
                    SessionData.Instance.VisitorStatus = OnboardVisitorStatus;
                }
                else if (presenter.VisitorStatus.VisitorStatusId.Equals(OffboardVisitorStatusValue))
                {
                    SessionData.Instance.VisitorStatus = OffboardVisitorStatus;
                }
                else
                {
                    SessionData.Instance.VisitorStatus = ExpectedVisitorStatus;
                }

                if (!string.IsNullOrEmpty(presenter.PersonalDetail.CitizenshipCountryId))
                {
                    var selectedCitizenShip = presenter.PersonalDetail.CitizenshipCountryId.Split(CommaSeparatorChar).ToList();
                    searchFilter.Citizenship = selectedCitizenShip.Count != 0 && selectedCitizenShip.Count == SessionData.Instance.MasterData.Countries.Count ? string.Empty : presenter.PersonalDetail.CitizenshipCountryId;
                    visitors = await this.visitorManager.GetVisitorsAsync(searchFilter);
                }

                if (visitors != null && visitors.Items != null && visitors.Items.Count > 0)
                {
                    SessionData.Instance.VisitorItemListResult.Items.Clear();
                    SessionData.Instance.AssignVisitorSearchResult(visitors);
                    this.ExtractOnLoadPagedRecords(presenter);
                }
            }

            return this.PartialView(TodaysVisitListPartial, presenter);
        }
        /// <summary>
        /// Adds the visitor.
        /// </summary>
        /// <returns>
        /// Add Visitor View
        /// </returns>
        public async Task<ActionResult> AddVisitor()
        {
            var visitorPresenter = new VisitorPresenter();
            BaseController.GetAboutUsInformation(visitorPresenter);
            visitorPresenter = InsertDummyPersonalData(visitorPresenter);
            var saveUtcNow = BaseController.GenerateLocalDateTime(DateTime.UtcNow);
            ViewBag.dob = saveUtcNow.ToString(ShortDateTimeFormat, CultureInfo.InvariantCulture);
            ViewBag.startDate = saveUtcNow.ToString(this.ApplicationSettings.DateFormat, CultureInfo.InvariantCulture);
            ViewBag.expireDate = saveUtcNow.AddHours(1).ToString(this.ApplicationSettings.DateFormat, CultureInfo.InvariantCulture);

            if (SessionData.Instance.MasterData != null && SessionData.Instance.MasterData.Ship != null && !string.IsNullOrEmpty(SessionData.Instance.MasterData.Ship.Name))
            {
                visitorPresenter.ShipName = SessionData.Instance.MasterData.Ship.Name;
            }

            securityPhotoUploadAddress = await this.visitorManager.RetrieveVisitorUploadUrlAsync();
            return this.View(visitorPresenter);
        }
        /// <summary>
        /// Retrieves the message or alert view.
        /// </summary>
        /// <param name="presenter">The presenter.</param>
        /// <param name="pagingListResult">The paging list result.</param>
        /// <param name="pagingResult">The paging result.</param>
        /// <param name="isMessage">if set to <c>true</c> [is message].</param>
        /// <returns>The Message or Alert View.</returns>
        private ActionResult RetrieveMessageOrAlertView(VisitorPresenter presenter, out ListResult<Alert> pagingListResult, List<Alert> pagingResult, bool isMessage)
        {
            pagingListResult = new ListResult<Alert>();
            pagingListResult.AssignItems(pagingResult);
            if (isMessage)
            {
                presenter.AssignMessageResult(pagingListResult);
                return this.PartialView(VisitorMessages, presenter);
            }

            presenter.AssignAlertsResult(pagingListResult);
            return this.PartialView(VisitorAlerts, presenter);
        }
        /// <summary>
        /// Indexes this instance.
        /// </summary>
        /// <param name="status">The status.</param>
        /// <returns>
        /// The view
        /// </returns>
        public async Task<ActionResult> Index(string status)
        {
            var presenter = new VisitorPresenter();
            BaseController.GetAboutUsInformation(presenter);
            var shipTime = BaseController.GenerateLocalDateTime(DateTime.UtcNow);

            var searchFilter = new SearchFilters();
            searchFilter.ShipTime = shipTime.ToString(CultureInfo.InvariantCulture);

            searchFilter.PageNumber = 1;

            if (!string.IsNullOrWhiteSpace(status))
            {
                ViewBag.VisitorStatus = status;

                SessionData.Instance.VisitorStatus = status;

                if (status.Equals(OnboardVisitorStatus))
                {
                    searchFilter.Status = true;
                    searchFilter.MaxResult = int.MaxValue;
                }
                else if (status.Equals(OffboardVisitorStatus))
                {
                    searchFilter.Status = false;
                    searchFilter.MaxResult = int.MaxValue;
                }
                else
                {
                    searchFilter.MaxResult = this.ApplicationSettings.MaxPageSize;
                }
            }
            else
            {
                ViewBag.VisitorStatus = ExpectedVisitorStatus;

                SessionData.Instance.VisitorStatus = ExpectedVisitorStatus;
                searchFilter.MaxResult = this.ApplicationSettings.MaxPageSize;
            }

            var todaysVisitors = await this.visitorManager.GetVisitorsAsync(searchFilter);
            if (todaysVisitors != null)
            {
                SessionData.Instance.VisitorItemListResult.Items.Clear();
                SessionData.Instance.AssignVisitorSearchResult(todaysVisitors);
                this.ExtractOnLoadPagedRecords(presenter);
            }

            securityPhotoUploadAddress = await this.visitorManager.RetrieveVisitorUploadUrlAsync();

            presenter = InsertDummyPersonalData(presenter);

            return this.View(presenter);
        }
        /// <summary>
        /// Uploads the visitor image.
        /// </summary>
        /// <param name="presenter">The presenter.</param>
        /// <returns>Visitor Presenter</returns>
        private async Task<VisitorPresenter> UploadVisitorImage(VisitorPresenter presenter)
        {
            if (!string.IsNullOrEmpty(presenter.SecurityPhotoData))
            {
                var url = securityPhotoUploadAddress.VisitorSecurityPhotoUploadAddress;
                byte[] data = Convert.FromBase64String(presenter.SecurityPhotoData);

                var address = await this.visitorManager.RetrieveSecurityPhotoAddressUrlAsync(url, data, presenter.SecurityPhotoFile);
                if (!string.IsNullOrEmpty(address))
                {
                    presenter.SecurityPhotoAddress = address;
                }
            }

            return presenter;
        }
        /// <summary>
        /// Sets the paged records for alert.
        /// </summary>
        /// <param name="presenter">The presenter.</param>
        /// <param name="alerts">The alerts.</param>
        private void SetPagedRecordsForAlert(VisitorPresenter presenter, ListResult<Alert> alerts)
        {
            var visitorAlerts = alerts.Items.Where(alert => !alert.IsMessage).ToList();
            var visitorAlertsResult = new ListResult<Alert>();
            visitorAlertsResult.AssignItems(visitorAlerts);
            SessionData.Instance.AssignAlertSearchResult(visitorAlertsResult);
            this.ExtractAlertPagedRecords(presenter);

            var visitorMessages = alerts.Items.Where(alert => alert.IsMessage).ToList();
            var visitorMessagesResult = new ListResult<Alert>();
            visitorMessagesResult.AssignItems(visitorMessages);
            SessionData.Instance.AssignMessageSearchResult(visitorMessagesResult);
            this.ExtractMessagePagedRecords(presenter);
        }
 /// <summary>
 /// Extracts the message paged records.
 /// </summary>
 /// <param name="presenter">The presenter.</param>
 private void ExtractMessagePagedRecords(VisitorPresenter presenter)
 {
     var maxPaging = DefaultPageSize > SessionData.Instance.MessageItems.Items.Count ? SessionData.Instance.MessageItems.Items.Count : DefaultPageSize;
     var pagingResult = SessionData.Instance.MessageItems.Items.Skip(0).Take(maxPaging - 0).ToList();
     if (pagingResult.Count > 0)
     {
         var pagingItems = new ListResult<Alert>();
         pagingItems.AssignItems(pagingResult);
         presenter.AssignMessageResult(pagingItems);
     }
 }
        /// <summary>
        /// Deletes the visitor message and alert.
        /// </summary>
        /// <param name="alertId">The alert identifier.</param>
        /// <param name="personId">The person identifier.</param>
        /// <param name="type">The type.</param>
        /// <param name="presenter">The presenter.</param>
        /// <returns>
        /// The Action Result.
        /// </returns>
        public async Task<ActionResult> DeleteVisitorMessageAndAlert(string alertId, string personId, string type, VisitorPresenter presenter)
        {
            try
            {
                await this.visitorManager.DeleteVisitorMessageAndAlertAsync(alertId, personId, type);
                if (presenter.VisitorDetail != null)
                {
                    var alerts = await this.alertManager.ListAlertsAsync(ApplicationIds, presenter.VisitorDetail.VisitorId, type);
                    this.SetPagedRecordsForAlert(presenter, alerts);
                    if (type == OneConst)
                    {
                        return this.PartialView(VisitorAlerts, presenter);
                    }

                    if (type == TwoConst)
                    {
                        return this.PartialView(VisitorMessages, presenter);
                    }
                }

                return this.Json(true);
            }
            catch (Exception ex)
            {
                LogManager.Write(ex);
                return this.Json(false);
            }
        }
        public async Task<ActionResult> AddVisitor(VisitorPresenter presenter)
        {
            if (presenter != null)
            {
                var visitorPresenter = await this.UploadVisitorImage(presenter);
                var visitor = InsertVisitorData(visitorPresenter, string.Empty);
                var visitorDetail = await this.visitorManager.CreateVisitorAsync(visitor);
                return visitorDetail != null ? this.Json(true) : this.Json(false);
            }

            return this.Json(false);
        }
        public async Task<ActionResult> ImportVisitor(HttpPostedFileBase uploadFile)
        {
            IExcelDataReader excelReader = null;
            var visitorPresenter = new VisitorPresenter();
            var visitorImportDetail = new Collection<VisitorImport>();
            if (uploadFile != null && uploadFile.ContentLength > 0)
            {
                ImportDetails importedFileData = DataFormattingAndValidations(uploadFile, ref excelReader, visitorPresenter);
                try
                {
                    visitorImportDetail = await this.visitorManager.ImportVisitors(importedFileData);
                }
                catch (Exception ex)
                {
                    if (!string.IsNullOrEmpty(ex.Message))
                    {
                        visitorPresenter.IsImportFailed = true;
                        if (string.IsNullOrEmpty(importedFileData.RejectedReason))
                        {
                            visitorPresenter.ImportException = string.Format(CultureInfo.CurrentCulture, "{0}.{1}.", Resource.VisitorImportFailed, Resource.TryAgain);
                        }
                        else
                        {
                            visitorPresenter.ImportException = importedFileData.RejectedReason;
                        }
                    }
                }

                visitorPresenter.AssignImportedVisitors(visitorImportDetail);
            }

            return this.View(visitorPresenter);
        }
        /// <summary>
        /// Visitors the list.
        /// </summary>
        /// <param name="presenter">The presenter.</param>
        /// <returns>
        /// Visitor List view
        /// </returns>
        public async Task<ActionResult> VisitorList(VisitorPresenter presenter)
        {
            ModelState.Clear();
            var searchFilter = new SearchFilters();
            searchFilter.PageNumber = 1;
            searchFilter.MaxResult = this.ApplicationSettings.MaxPageSize;
            var visitorList = await this.visitorManager.GetVisitorsAsync(searchFilter);
            if (visitorList != null)
            {
                SessionData.Instance.AssignVisitorSearchResult(visitorList);
                this.ExtractOnLoadPagedRecords(presenter);
            }

            return this.View(presenter);
        }
        /// <summary>
        /// Data the formatting and validations.
        /// </summary>
        /// <param name="uploadFile">The upload file.</param>
        /// <param name="excelReader">The excel reader.</param>
        /// <param name="visitorPresenter">The visitor presenter.</param>
        /// <returns>
        /// Import Details for Data provided.
        /// </returns>
        private static ImportDetails DataFormattingAndValidations(HttpPostedFileBase uploadFile, ref IExcelDataReader excelReader, VisitorPresenter visitorPresenter)
        {
            var importedFileData = new ImportDetails
            {
                FileName = uploadFile.FileName,
                FileModifiedDate = BaseController.GenerateLocalDateTime(DateTime.UtcNow)
            };

            try
            {
                if (uploadFile.FileName.EndsWith(ExcelLatestExtension, StringComparison.OrdinalIgnoreCase))
                {
                    excelReader = ExcelReaderFactory.CreateOpenXmlReader(uploadFile.InputStream);
                }
                else if (uploadFile.FileName.EndsWith(ExcelNormalExtension, StringComparison.OrdinalIgnoreCase))
                {
                    excelReader = ExcelReaderFactory.CreateBinaryReader(uploadFile.InputStream);
                }

                using (var result = excelReader.AsDataSet())
                {
                    result.Locale = CultureInfo.CurrentCulture;
                    importedFileData = ConvertToCSV(result, importedFileData);
                    excelReader.Close();
                }

                if (string.IsNullOrEmpty(importedFileData.VisitorDetail))
                {
                    visitorPresenter.IsImportFailed = true;
                    visitorPresenter.ImportException = string.Format(CultureInfo.CurrentCulture, "{0}{1}.", Resource.ShipNameNotCorrect, SessionData.Instance.MasterData.Ship.Name);
                }
            }
            catch (Exception ex)
            {
                if (!string.IsNullOrEmpty(ex.Message))
                {
                    visitorPresenter.IsImportFailed = true;
                    visitorPresenter.ImportException = Resource.VisitorImportException;
                }
            }

            importedFileData.RejectedReason = visitorPresenter.ImportException;
            return importedFileData;
        }
        /// <summary>
        /// Paging the specified presenter.
        /// </summary>
        /// <param name="presenter">The presenter.</param>
        /// <param name="pageNumber">The page number.</param>
        /// <param name="partialView">The partial view.</param>
        /// <param name="searchType">Type of the search.</param>
        /// <returns>
        /// The Action Result.
        /// </returns>
        public async Task<ActionResult> Paging(VisitorPresenter presenter, string pageNumber, string partialView, string searchType)
        {
            if (presenter != null && !string.IsNullOrEmpty(pageNumber) && !pageNumber.Equals(UndefinedConst) && !string.IsNullOrEmpty(partialView))
            {
                var searchFilter = new SearchFilters();

                var pagingListResult = new ListResult<Alert>();

                if (!string.IsNullOrEmpty(partialView) && string.Equals(partialView, VisitorMessages, StringComparison.OrdinalIgnoreCase))
                {
                    var messages = SessionData.Instance.MessageItems.Items.ToList();
                    var pagingResultMessages = GetPagedResult(pageNumber, messages);
                    if (pagingResultMessages != null && pagingResultMessages.Count > 0)
                    {
                        return this.RetrieveMessageOrAlertView(presenter, out pagingListResult, pagingResultMessages, true);
                    }
                }
                else if (!string.IsNullOrEmpty(partialView) && string.Equals(partialView, VisitorAlerts, StringComparison.OrdinalIgnoreCase))
                {
                    var alerts = SessionData.Instance.AlertItems.Items.ToList();
                    var pagingResultAlerts = GetPagedResult(pageNumber, alerts);
                    if (pagingResultAlerts != null && pagingResultAlerts.Count > 0)
                    {
                        return this.RetrieveMessageOrAlertView(presenter, out pagingListResult, pagingResultAlerts, false);
                    }
                }
                else
                {
                    if (!partialView.Equals(TodaysVisitPartialView, StringComparison.InvariantCultureIgnoreCase) && (presenter.VisitorStatus.VisitorStatusId.Equals(OnboardVisitorStatusValue) || presenter.VisitorStatus.VisitorStatusId.Equals(OffboardVisitorStatusValue)))
                    {
                        var visitorList = SessionData.Instance.VisitorItemListResult.Items.ToList();
                        var pagingResult = GetPagedResult(Convert.ToString(pageNumber), visitorList);
                        if (pagingResult != null && pagingResult.Count > 0)
                        {
                            var visitorListResult = new ListResult<Visitor>();
                            visitorListResult.AssignItems(pagingResult);
                            presenter.AssignVisitorSearchResult(visitorListResult);
                        }
                    }
                    else
                    {
                        if (!partialView.Equals(TodaysVisitPartialView, StringComparison.InvariantCultureIgnoreCase))
                        {
                            searchFilter.ShipTime = BaseController.GenerateLocalDateTime(DateTime.UtcNow).ToString("yyyy-MM-ddTHH:mm:ss");
                        }

                        var pagingPageNumber = Convert.ToInt32(pageNumber) > 0 ? Convert.ToInt32(pageNumber) / ApplicationSettings.MaxPageSize : 1;
                        SetSearchFilterByType(presenter, searchType, searchFilter);
                        var visitorPurpose = SessionData.Instance.MasterData.VisitPurposes.FirstOrDefault(item => item.VisitPurposeId.Equals(presenter.Visit.VisitPurposeId, StringComparison.InvariantCultureIgnoreCase));
                        var vistorType = SessionData.Instance.MasterData.VisitorTypes.FirstOrDefault(item => item.VisitorTypeId.Equals(presenter.VisitorTypeId, StringComparison.InvariantCultureIgnoreCase));

                        if (!string.IsNullOrEmpty(presenter.PersonalDetail.CitizenshipCountryId))
                        {
                            var selectedCitizenShip = presenter.PersonalDetail.CitizenshipCountryId.Split(CommaSeparatorChar).ToList();
                            searchFilter.Citizenship = selectedCitizenShip.Count != 0 && selectedCitizenShip.Count == SessionData.Instance.MasterData.Countries.Count ? string.Empty : presenter.PersonalDetail.CitizenshipCountryId;
                        }

                        searchFilter.VisitPurpose = presenter.Visit != null && !string.IsNullOrEmpty(presenter.Visit.VisitPurposeId) && visitorPurpose != null ? visitorPurpose.VisitPurposeId : string.Empty;
                        searchFilter.VisitorType = !string.IsNullOrEmpty(presenter.VisitorTypeId) && vistorType != null ? vistorType.VisitorTypeId : string.Empty;

                        searchFilter.MaxResult = ApplicationSettings.MaxPageSize;
                        searchFilter.PageNumber = pagingPageNumber > 0 ? pagingPageNumber : 1;

                        var visitors = await this.visitorManager.GetVisitorsAsync(searchFilter);
                        presenter.AssignVisitorSearchResult(visitors);
                    }
                }
            }

            return this.PartialView(partialView, presenter);
        }
        /// <summary>
        /// Inserts the dummy personal data.
        /// </summary>
        /// <param name="presenter">The presenter.</param>
        /// <returns>
        /// The Visitor Presenter
        /// </returns>
        private static VisitorPresenter InsertDummyPersonalData(VisitorPresenter presenter)
        {
            presenter.Gender = new List<Gender> { new Gender { Id = "M", Name = "Male" }, new Gender { Id = "F", Name = "Female" } };
            presenter.MaritalStatus = new List<string> { "Married", "Single" };
            presenter.Title = new List<string> { "Mr.", "Ms.", "Mrs.", "Dr." };
            presenter.VisitorStatuses = new List<VisitorStatus> { new VisitorStatus { VisitorStatusId = "0", VisitorStatusName = "All" }, new VisitorStatus { VisitorStatusId = OneConst, VisitorStatusName = "Onboard" }, new VisitorStatus { VisitorStatusId = TwoConst, VisitorStatusName = "Ashore" } };

            return presenter;
        }
        /// <summary>
        /// Sets up visitor presenter data.
        /// </summary>
        /// <returns>The visitor Presenter</returns>
        private static VisitorPresenter SetUpVisitorPresenterData()
        {
            var visitorPresenter = new VisitorPresenter
            {
                PersonalDetail = new PersonalDetail
                {
                    Gender = "M",
                    Title = "Mr.",
                    FirstName = string.Empty,
                    LastName = string.Empty,
                    MaritalStatus = "Married",
                    CitizenshipCountryId = "232",
                    DepartmentId = "4",
                    DepartmentPOC = null,
                    VisitorCardId = null,
                    Note = null,
                    PassportNo = null
                },
                VisitorTypeId = "1",
                SecurityPhotoAddress = null,
                Visit = new Visit
                {
                    ShipId = "5",
                    StartDate = DateTime.Now.Date,
                    EndDate = DateTime.Now.AddDays(2).Date,
                    LastOnboardDate = null,
                    LastOffBoardDate = null,
                    VisitPurposeId = "1",
                    VisitId = null
                },
                Identification = new Identification
                {
                    DocumentTypeId = "119",
                    Number = null,
                    IdentificationId = null
                },
                VisitorStatus = new VisitorStatus
                {
                    VisitorStatusId = "0",
                    VisitorStatusName = "All"
                }
            };

            return visitorPresenter;
        }