コード例 #1
0
        private async Task SendReportWithGroupingAsync(ReportsExportEmailView emailData, ReportTotalView groupedList)
        {
            var fileByte = await CreateFileOfBytesReportsGridAsync(emailData, groupedList);

            #region Create and send message with file Attachment.

            // Create builder for message body
            var builder = new BodyBuilder
            {
                TextBody = emailData.Comment ?? string.Empty,
            };

            // Add file to message body
            builder.Attachments.Add(FileName, fileByte);

            var multipart = builder.ToMessageBody();

            var emailSender = new EmailSender(_configuration);

            emailSender.CreateSimpleMessage(emailData.ToEmail, multipart, emailData.Subject ?? FileName, emailData.CcEmails, emailData.BccEmails);

            await emailSender.SendMessageAsync();

            #endregion
        }
コード例 #2
0
        public async Task <object> ExportEmailGroupedByType(ReportsExportEmailView reportsExportEmailView)
        {
            var groupByProjects = _reportService.GetReportsGrid(reportsExportEmailView);

            await SendReportWithGroupingAsync(reportsExportEmailView, groupByProjects);

            return(await Task.FromResult <object>(new object()));
        }
コード例 #3
0
        public async Task <IActionResult> ReportsExportEmail([FromBody] ReportsExportEmailView reportsExportEmailView)
        {
            var result = await _service.ExportEmailGroupedByType(reportsExportEmailView);

            if (result == null)
            {
                return(BadRequest());
            }

            return(Ok());
        }
コード例 #4
0
        public async Task <IActionResult> ReportsExportEmail([FromBody] ReportsExportEmailView reportsGridData)
        {
            try
            {
                var userName = this.GetUserNameWithImpersonation();

                switch (reportsGridData.CurrentQuery.GroupById)
                {
                case (int)ReportsGroupBy.Project:
                {
                    await _service.ExportEmailGroupByProjects(userName, reportsGridData);

                    break;
                }

                case (int)ReportsGroupBy.User:
                {
                    await _service.ExportEmailGroupByUsers(userName, reportsGridData);

                    break;
                }

                case (int)ReportsGroupBy.Date:
                {
                    await _service.ExportEmailGroupByDates(userName, reportsGridData);

                    break;
                }

                case (int)ReportsGroupBy.Client:
                {
                    await _service.ExportEmailGroupByClients(userName, reportsGridData);

                    break;
                }

                default:
                {
                    await _service.ExportEmailGroupByNone(userName, reportsGridData);

                    break;
                }
                }

                return(Ok());
            }

            catch (Exception e)
            {
                _logger.LogWarning($"ReportsExportEmail method with parameters ({reportsGridData});\n {e}");
                var errors = ExceptionsChecker.CheckProjectsException(e);
                return(BadRequest(errors));
            }
        }
コード例 #5
0
        public async Task ExportEmailGroupByClients(string userName, ReportsExportEmailView emailData)
        {
            var groupByClients = _reportService.ReportsGridGroupByClients(userName, emailData);

            await SendReportWithGroupingAsync(emailData, groupByClients);
        }
コード例 #6
0
        public async Task ExportEmailGroupByDates(ReportsExportEmailView emailData)
        {
            var groupByDates = _reportService.ReportsGridGroupByDates(emailData);

            await SendReportWithGroupingAsync(emailData, groupByDates);
        }
        public async Task SendWeeklyTimeEntryUpdatesAsync(string baseUrl)
        {
            var todayDate = DateTime.Now;

            if (IsDayOfWeekStart(todayDate))
            {
                var currentHour = todayDate.TimeOfDay.Hours;

                if (currentHour == 1)
                {
                    CommonHelpers.SetRangeOfLastWorkWeekByDate(out var lastWorkWeekFirstDay, out var lastWorkWeekLastDay, todayDate);
                    var diffDates         = (lastWorkWeekLastDay - lastWorkWeekFirstDay).TotalDays;
                    var editionPeriodDays = GetRangeNotificationDaysForLastWeek(lastWorkWeekFirstDay, diffDates);

                    var memberStartDayOfWeekStartByTodayDate = GetMemberStartDayOfWeekStartByTodayDate(todayDate);

                    var members = Uow.MemberRepository.LinkedCacheGetList()
                                  .Where(member => member.IsWeeklyTimeEntryUpdatesSend && member.WeekStart == memberStartDayOfWeekStartByTodayDate)
                                  .Select(member => new
                    {
                        MemberId           = member.Id,
                        MemberFullName     = member.FullName,
                        MemberDateFormatId = member.DateFormatId,
                        MemberEmail        = member.User.Email,

                        Project = member.MemberProjectRoles.Select(project => new
                        {
                            Id   = project.Project.Id,
                            Name = project.Project.Name,
                        })
                    }).ToList();

                    foreach (var member in members)
                    {
                        var memberWithProjectsNotifications = new MemberWithProjecsNotifications
                        {
                            MemberId           = member.MemberId,
                            MemberFullName     = member.MemberFullName,
                            MemberDateFormatId = member.MemberDateFormatId,
                            MemberEmail        = member.MemberEmail
                        };

                        var isNotFillTimeEntries = false;
                        var isAnyFillTimeEntries = false;

                        foreach (var project in member.Project)
                        {
                            var dateTimeEntryByNotificationRange = Uow.TimeEntryRepository.GetQueryWithIncludes()
                                                                   .Where(tEntry => tEntry.ProjectId == project.Id && tEntry.MemberId == member.MemberId)
                                                                   .Where(tEntry => tEntry.Date.Date >= lastWorkWeekFirstDay && tEntry.Date.Date <= lastWorkWeekLastDay)
                                                                   .Select(tEntry => tEntry.Date.Date)
                                                                   .ToList();

                            var datesWithoutTimeEntries = editionPeriodDays.Except(dateTimeEntryByNotificationRange).ToArray();

                            var hasNotTimeEntries = dateTimeEntryByNotificationRange.Count == 0;
                            var hasAnyTimeEntries = dateTimeEntryByNotificationRange.Any() && datesWithoutTimeEntries.Any();
                            //var hasAllTimeEntries = datesWithoutTimeEntries.Length == 0;

                            if (hasNotTimeEntries)
                            {
                                if (!isAnyFillTimeEntries)
                                {
                                    isNotFillTimeEntries = true;
                                }
                            }

                            if (hasAnyTimeEntries)
                            {
                                isNotFillTimeEntries = false;
                                isAnyFillTimeEntries = true;
                            }
                        }

                        if (isNotFillTimeEntries || isAnyFillTimeEntries)
                        {
                            var subjectNotFilledTimeEnttries = CreateEmailSubjectWeeklyTimeEntryUpdates(memberWithProjectsNotifications.MemberEmail);

                            var emailText = CreateEmailTextWeeklyNotifications(baseUrl, memberWithProjectsNotifications, isNotFillTimeEntries, isAnyFillTimeEntries);

                            Uow.MemberImpersonated = Uow.MemberRepository.GetQueryByMemberId(memberWithProjectsNotifications.MemberId);

                            var reportsExportEmailView = new ReportsExportEmailView
                            {
                                Comment      = emailText,
                                DateFormatId = memberWithProjectsNotifications.MemberDateFormatId,
                                FileTypeId   = (int)Constants.FileType.Excel,
                                Subject      = subjectNotFilledTimeEnttries,
                                ToEmail      = memberWithProjectsNotifications.MemberEmail,
                                CurrentQuery = new ReportsSettingsView
                                {
                                    DateFrom      = lastWorkWeekFirstDay,
                                    DateTo        = lastWorkWeekLastDay,
                                    GroupById     = (int)Constants.ReportsGroupByIds.Project,
                                    ShowColumnIds = new[] { 1, 2, 3, 4 }
                                }
                            };

                            await _reportExportService.ExportEmailGroupedByType(reportsExportEmailView);
                        }
                    }
                }
            }
        }