private void SendReminding(IEntity sysUserEntity, FileConversionTask fileConversionTask, ReportGenerationTask reportGenerationTask)
        {
            var contactId = sysUserEntity.GetTypedColumnValue <Guid>("ContactId");

            contactId.CheckDependencyNull(nameof(contactId));
            var systemUserConnection  = _appConnection.SystemUserConnection;
            var sysModuleReportEntity = systemUserConnection.EntitySchemaManager.FindInstanceByName("SysModuleReport");

            sysModuleReportEntity.CheckDependencyNull(nameof(sysModuleReportEntity));
            var config = new RemindingConfig(sysModuleReportEntity.UId)
            {
                AuthorId    = contactId,
                SourceId    = RemindingConsts.RemindingSourceAuthorId,
                ContactId   = contactId,
                SubjectId   = Guid.Empty,
                Description = string.Empty,
                RemindTime  = DateTime.UtcNow,
                Config      = new Dictionary <string, object> {
                    { "serviceName", nameof(PdfAsyncReportGenerationController) },
                    { "methodName", nameof(PdfAsyncReportGenerationController.GetReportFile) },
                    { "success", fileConversionTask.Status == TaskStatus.Successed },
                    { "reportName", reportGenerationTask.ReportName },
                    { "taskId", reportGenerationTask.TaskId }
                }
            };

            _remindingUtilities.CreateReminding(systemUserConnection, config);
        }
 /// <summary>
 /// Sends a message about completion of report generation. Sends the message to the next sender if can’t send it yourself.
 /// </summary>
 /// <param name="fileConversionTask">The remote task of file conversion.</param>
 /// <param name="reportGenerationTask">The local task of a report generation.</param>
 /// <returns>True if message about completion of report generation sent; otherwise false.</returns>
 public bool SendMessage(FileConversionTask fileConversionTask, UserReportGenerationTask reportGenerationTask)
 {
     if (SendMessageInternal(fileConversionTask, reportGenerationTask))
     {
         return(true);
     }
     return(_successor != null && _successor.SendMessage(fileConversionTask, reportGenerationTask));
 }
 /// <summary>
 /// Gets the body of a notification message.
 /// </summary>
 /// <param name="fileConversionTask">The remote task of file conversion.</param>
 /// <param name="reportGenerationTask">The local task of a report generation.</param>
 /// <returns>The message body of notification by the <paramref name="fileConversionTask"/> and <paramref name="reportGenerationTask"/>.</returns>
 protected virtual object GetNotificationBody(FileConversionTask fileConversionTask, UserReportGenerationTask reportGenerationTask)
 {
     return(new {
         taskId = reportGenerationTask.TaskId,
         reportName = reportGenerationTask.ReportName,
         success = fileConversionTask.Status == TaskStatus.Successed,
         methodName = nameof(IAsyncReportGenerationController.GetReportFile),
         serviceName = nameof(PdfAsyncReportGenerationController),
     });
 }
        public virtual void Notify(FileConversionTask conversionTask)
        {
            conversionTask.CheckArgumentNull(nameof(conversionTask));
            var fileconversionTaskId     = conversionTask.Id;
            var userReportGenerationTask = GetCachedReportGenerationTask(fileconversionTaskId);

            if (!ReportCompletionSender.SendMessage(conversionTask, userReportGenerationTask))
            {
                Log.Error($"The notification about report generation completion by task ID = {fileconversionTaskId} has not been sent.");
            }
        }
        private void SendNotification(
            IMsgChannel channel,
            FileConversionTask fileConversionTask,
            UserReportGenerationTask reportGenerationTask)
        {
            var simpleMessage = new SimpleMessage {
                Id   = Guid.NewGuid(),
                Body = GetNotificationBody(fileConversionTask, reportGenerationTask),
            };

            simpleMessage.Header.Sender = NotifySender;
            channel.PostMessage(simpleMessage);
        }
        /// <inheritdoc cref="ReportGenerationCompletionSender.SendMessageInternal"/>
        protected override bool SendMessageInternal(FileConversionTask fileConversionTask, UserReportGenerationTask reportGenerationTask)
        {
            var taskId        = reportGenerationTask.TaskId;
            var userId        = reportGenerationTask.UserId;
            var sysUserEntity = CreateSysUserEntity();

            if (!sysUserEntity.FetchFromDB(userId))
            {
                return(false);
            }
            SendReminding(sysUserEntity, fileConversionTask, reportGenerationTask);
            Log.Info($"The reminder about report generation completion for the task ID = {taskId} has been sent.");
            return(true);
        }
        /// <inheritdoc cref="ReportGenerationCompletionSender.SendMessageInternal"/>
        protected override bool SendMessageInternal(FileConversionTask fileConversionTask, UserReportGenerationTask reportGenerationTask)
        {
            var taskId  = reportGenerationTask.TaskId;
            var userId  = reportGenerationTask.UserId;
            var channel = MsgChannelManager.Instance.FindItemByUId(userId);

            if (channel == null)
            {
                return(false);
            }
            SendNotification(channel, fileConversionTask, reportGenerationTask);
            Log.Info($"The notification about report generation completion for the task ID = {taskId} has been sent.");
            return(true);
        }
 /// <summary>
 /// Sends a message about completion of report generation.
 /// </summary>
 /// <param name="fileConversionTask">The remote task of file conversion.</param>
 /// <param name="reportGenerationTask">The local task of a report generation.</param>
 /// <returns>True if message about completion of report generation sent; otherwise false.</returns>
 protected abstract bool SendMessageInternal(FileConversionTask fileConversionTask, UserReportGenerationTask reportGenerationTask);