/// <summary>
        /// Lists the asynchronous.
        /// </summary>
        /// <param name="filter">The filter.</param>
        /// <returns>
        /// List of Alerts
        /// </returns>
        public async Task<ListResult<Entities.AlertType>> ListAsync(AlertListRequestSearchParameters filter)
        {
            string task;
            if (filter.TypeIds == "0")
            {
                filter.TypeIds = string.Empty;
            }

            if (filter.IsMessage.HasValue && filter.IsMessage.Value && !filter.IsTemplate && filter.IsAlert.HasValue && !filter.IsAlert.Value)
            {
                task = await this.messageClient.GetListAsync(
                    messageIds: filter.AlertTypeIds,
                    personIds: filter.PersonIds,
                    addedDate: filter.AddedDate,
                    pageNumber: 1,
                    maxResults: int.MaxValue,
                    orderBy: filter.OrderBy);
                return !string.IsNullOrEmpty(task) ? MapMessageDataListFromService(JsonConvert.DeserializeObject<ListResult<Message>>(task)) : default(ListResult<Entities.AlertType>);
            }

            if (filter.IsMessage.HasValue && filter.IsMessage.Value && filter.IsTemplate)
            {
                task = await this.messageTemplateClient.GetListAsync(
                    messageTemplateIds: filter.AlertTypeIds,
                    pageNumber: 1,
                    maxResults: int.MaxValue,
                    orderBy: filter.OrderBy);
                return !string.IsNullOrEmpty(task) ? MapMessageTemplateDataListFromService(JsonConvert.DeserializeObject<ListResult<MessageTemplate>>(task)) : default(ListResult<Entities.AlertType>);
            }

            if (filter.IsTemplate)
            {
                task = await this.alertTemplateClient.ListAsync(
                    alertTemplateIds: filter.AlertTypeIds,
                    alertTypeIds: filter.TypeIds,
                    orderBy: filter.OrderBy,
                    pageNumber: 1,
                    maxResults: int.MaxValue);
                return !string.IsNullOrEmpty(task) ? MapAlertTemplateDataListFromService(JsonConvert.DeserializeObject<ListResult<AlertTemplate>>(task)) : default(ListResult<Entities.AlertType>);
            }

            ListResult<Entities.AlertType> alerts;

            task = await this.alertClient.GetListAsync(
                alertIds: filter.AlertTypeIds,
                personIds: filter.PersonIds,
                alertTypeIds: filter.TypeIds,
                addedDate: filter.AddedDate,
                pageNumber: 1,
                maxResults: int.MaxValue);

            alerts = !string.IsNullOrEmpty(task) ? MapAlertDataListFromService(JsonConvert.DeserializeObject<ListResult<Entities.PersonNotification.Alert>>(task)) : default(ListResult<Entities.AlertType>);

            if (filter.IsMessage.HasValue && filter.IsMessage.Value)
            {
                task = await this.messageClient.GetListAsync(
                    messageIds: filter.AlertTypeIds,
                    personIds: filter.PersonIds,
                    addedDate: filter.AddedDate,
                    pageNumber: 1,
                    maxResults: int.MaxValue);

                ListResult<Entities.AlertType> messages = !string.IsNullOrEmpty(task) ? MapMessageDataList(JsonConvert.DeserializeObject<ListResult<Message>>(task), alerts) : default(ListResult<Entities.AlertType>);

                if (messages != null && messages.Items.Count > 0)
                {
                    return messages;
                }
            }

            return alerts;
        }
        /// <summary>
        /// Setups the search request.
        /// </summary>
        private void SetupSearchRequest()
        {
            filter = new AlertListRequestSearchParameters
            {
                AlertTypeIds = "1",
                ApplicationId = "1",
                DenyAshore = false,
                DenyBoarding = false,
                IsAlert = false,
                IsExpiredAlert = false,
                IsMessage = true,
                IsRecentAlert = true,
                IsTemplate = false,
                MaxResults = 50,
                OrderBy = null,
                PageNumber = 1,
                PersonIds = "1",
                ShipId = "5",
                ShipTime = DateTime.Now,
                TypeIds = "1"
            };

            var alertType = new Entities.AlertType
            {
                AddedBy = "Ryan",
                AddedDate = DateTime.Now,
                AlertTypeId = "1",
                AllowCheckIn = true,
                ApplicationId = "2",
                DepartmentId = "2",
                Description = "agree",
                DueDate = DateTime.Now,
                ExpiryDate = DateTime.Now,
                IsDenyAshore = true,
                IsDenyBoarding = true,
                IsMessage = true,
                IsOverride = true,
                IsSoundEnable = true,
                IsTemplate = false,
                MessageFrom = "trott",
                ModifiedBy = "jhone",
                OrderCode = "33",
                TemplateName = "edd",
                TypeId = "3"
            };
            alertType.Alerts.Add(new Entities.Alert { PersonId = "1" });
            alertTypes = new Entities.AlertTypeCollection
            {
                alertType
            };
        }
        /// <summary>
        /// Retrieves the person alerts.
        /// </summary>
        /// <param name="personSearchParameter">The person search parameter.</param>
        /// <param name="personIds">The person ids.</param>
        /// <returns>
        /// The alerts.
        /// </returns>
        private async Task<ListResult<Entities.AlertType>> RetrievePersonAlerts(PersonSearchParameter personSearchParameter, string personIds)
        {
            var isMessage = false;
            var isAlert = false;

            if (personSearchParameter.IsMessageCount != null && Convert.ToBoolean(personSearchParameter.IsMessageCount, CultureInfo.CurrentCulture))
            {
                isMessage = true;
            }

            if (personSearchParameter.IsAlertCount != null && Convert.ToBoolean(personSearchParameter.IsAlertCount, CultureInfo.CurrentCulture))
            {
                isAlert = true;
            }

            var alertSearchParameter = new AlertListRequestSearchParameters
            {
                ApplicationId = Convert.ToString(this.applicationSettings.ApplicationId, CultureInfo.CurrentCulture),
                PersonIds = personIds,
                IsMessage = isMessage,
                IsAlert = isAlert,
                IsExpiredAlert = false
            };
            if (string.IsNullOrWhiteSpace(personSearchParameter.ShipTime))
            {
                var shipTimeTask = await this.shipTimeRepository.GetByIdAsync(this.applicationSettings.ShipId, null);
                alertSearchParameter.ShipTime = string.IsNullOrWhiteSpace(shipTimeTask) ? DateTime.Now : DateTime.UtcNow.AddMinutes(Convert.ToDouble(shipTimeTask));
            }
            else
            {
                alertSearchParameter.ShipTime = DateTime.Parse(personSearchParameter.ShipTime, CultureInfo.InvariantCulture);
            }

            var result = new ListResult<Entities.AlertType>();
            var alertTemplate = new Entities.AlertTypeCollection();
            var alertDetails = await this.RetrieveAlertDetails(alertSearchParameter);

            foreach (var alert in alertDetails.Items)
            {
                if ((alert.ExpiryDate.HasValue && alert.ExpiryDate.Value > alertSearchParameter.ShipTime) || !alert.ExpiryDate.HasValue)
                {
                    var active = alert.Alerts.Any(personAlert => personAlert.StatusId == "1");
                    if (active)
                    {
                        alertTemplate.Add(alert);
                    }
                }
            }

            result.AssignItems(alertTemplate);
            return result;
        }
        /// <summary>
        /// Retrieves the alert details.
        /// </summary>
        /// <param name="alertSearchParameter">The alert search parameter.</param>
        /// <returns>The alert details.</returns>
        private async Task<ListResult<Entities.AlertType>> RetrieveAlertDetails(AlertListRequestSearchParameters alertSearchParameter)
        {
            var batchSize = 20;
            var personIdsArray = !string.IsNullOrEmpty(alertSearchParameter.PersonIds) ? alertSearchParameter.PersonIds.Split(',') : null;
            if (personIdsArray != null && personIdsArray.Length > batchSize)
            {
                int counter = 0;
                var alertDetails = new ListResult<Entities.AlertType>();
                string[] currentBatch = new string[(personIdsArray.Length / batchSize) + ((personIdsArray.Length % batchSize) > 0 ? 1 : 0)];
                int batchCounter = 0;
                foreach (var id in personIdsArray)
                {
                    if (counter == batchSize)
                    {
                        batchCounter++;
                        counter = 0;
                    }

                    counter++;
                    currentBatch[batchCounter] += id + ",";
                }

                var tasks = currentBatch.Select(personBatch => { alertSearchParameter.PersonIds = personBatch; return this.alertClientRepository.ListAsync(alertSearchParameter); }).ToList();
                await Task.WhenAll(tasks);
                foreach (var task in tasks)
                {
                    var partialalerts = task.Result;
                    foreach (var item in partialalerts.Items)
                    {
                        alertDetails.Items.Add(item);
                    }
                }

                alertDetails.TotalResults = alertDetails.Items.Count;
                return alertDetails;
            }

            return await this.alertClientRepository.ListAsync(alertSearchParameter);
        }
示例#5
0
        /// <summary>
        /// Retrieves the alerts.
        /// </summary>
        /// <param name="filter">The filter.</param>
        /// <returns>
        /// Alert task
        /// </returns>
        public async Task<ListResult<Alert>> ListAsync(AlertSearchParameters filter)
        {
            var alertSearch = new AlertListRequestSearchParameters
            {
                PageNumber = filter.PageNumber.RetrievePageNumber(),
                MaxResults = filter.MaxResults.RetrieveMaxResults(),
                AlertTypeIds = filter.AlertTypeIds,
                ApplicationId = string.IsNullOrWhiteSpace(filter.ApplicationId) ? Convert.ToString(this.applicationSettings.ApplicationId, CultureInfo.CurrentCulture) : filter.ApplicationId,
                OrderBy = filter.OrderBy,
                ShipId = filter.ShipId,
                PersonIds = filter.PersonIds,
                IsTemplate = !string.IsNullOrEmpty(filter.IsTemplate) ? Convert.ToBoolean(filter.IsTemplate, CultureInfo.CurrentCulture) : false,
                TypeIds = !string.IsNullOrEmpty(filter.TypeId) ? filter.TypeId : null,
                IsAlert = !string.IsNullOrEmpty(filter.IsAlert) ? Convert.ToBoolean(filter.IsAlert, CultureInfo.CurrentCulture) : (bool?)null,
                IsRecentAlert = !string.IsNullOrEmpty(filter.IsRecentAlert) ? Convert.ToBoolean(filter.IsRecentAlert, CultureInfo.CurrentCulture) : (bool?)null,
                IsMessage = !string.IsNullOrWhiteSpace(filter.IsMessage) ? Convert.ToBoolean(filter.IsMessage, CultureInfo.CurrentCulture) : (bool?)null,
                IsExpiredAlert = !string.IsNullOrWhiteSpace(filter.IsExpiredAlert) ? Convert.ToBoolean(filter.IsExpiredAlert, CultureInfo.CurrentCulture) : (bool?)null,
                AddedDate = filter.AddedDate
            };

            if (string.IsNullOrWhiteSpace(filter.ShipTime))
            {
                var shipTimeTask = await this.shipTimeRepository.GetByIdAsync(this.applicationSettings.ShipId, null);
                alertSearch.ShipTime = string.IsNullOrWhiteSpace(shipTimeTask) ? DateTime.Now : DateTime.UtcNow.AddMinutes(Convert.ToDouble(shipTimeTask));
            }
            else
            {
                alertSearch.ShipTime = DateTime.Parse(filter.ShipTime, CultureInfo.InvariantCulture);
            }

            var alertData = await this.alertRepository.ListAsync(alertSearch);

            var result = new ListResult<Alert>();
            var alerts = new AlertCollection();

            foreach (var alertType in alertData.Items)
            {
                alerts.Add(MapAlertData(alertType, alertSearch.ShipTime));
            }

            if (!alertSearch.IsExpiredAlert.GetValueOrDefault(false) && !alertSearch.IsTemplate)
            {
                var filteredAlerts = alerts.Where(alert => alert.IsActive).ToList();
                result.AssignItems(filteredAlerts);
                result.TotalResults = filteredAlerts.Count;
            }
            else
            {
                result.AssignItems(alerts);
                result.TotalResults = alerts.Count;
            }

            return result;
        }