Example #1
0
        public void ResultEntered_Test(string cultureName, bool isOrigStartSet, bool withRemarks)
        {
            var realStart = new DateTime(2021, 12, 24, 20, 00, 00);

            var m = new ResultEnteredModel
            {
                Username         = "******",
                RoundDescription = "Round description",
                HomeTeamName     = "Home Team",
                GuestTeamName    = "Guest Team",
                Match            = new TournamentManager.DAL.EntityClasses.MatchEntity
                {
                    Id               = 12345,
                    PlannedStart     = new DateTime(2020, 12, 24, 20, 00, 00),
                    OrigPlannedStart = isOrigStartSet ? realStart.AddDays(-60) : (DateTime?)null,
                    RealStart        = realStart,
                    RealEnd          = realStart.AddHours(2),
                    HomePoints       = 2, GuestPoints = 0,
                    Remarks          = withRemarks ? "Some remarks" : null,
                    ChangeSerial     = 7
                }
            };

            m.Match.Sets.AddRange(new []
            {
                new TournamentManager.DAL.EntityClasses.SetEntity {
                    HomeBallPoints = 25, GuestBallPoints = 1, HomeSetPoints = 1, GuestSetPoints = 0
                },
                new TournamentManager.DAL.EntityClasses.SetEntity {
                    HomeBallPoints = 25, GuestBallPoints = 2, HomeSetPoints = 1, GuestSetPoints = 0
                },
                new TournamentManager.DAL.EntityClasses.SetEntity {
                    HomeBallPoints = 25, GuestBallPoints = 3, HomeSetPoints = 1, GuestSetPoints = 0
                }
            });

            string text = string.Empty, html = string.Empty;

            Assert.Multiple(() =>
            {
                Assert.DoesNotThrowAsync(async() =>
                {
                    text = await _renderer.RenderAsync(TemplateName.ResultEnteredTxt, m, cultureName);
                    Console.WriteLine($"*** {TemplateName.ResultEnteredTxt} ***");
                    Console.WriteLine(text);
                });

                Assert.That(text.Contains(L("Result", cultureName)));
                if (withRemarks)
                {
                    Assert.That(text.Contains(m.Match.Remarks));
                }
                if (isOrigStartSet)
                {
                    Assert.That(text.Contains(m.Match.OrigPlannedStart?.ToString("d", new CultureInfo(cultureName))));
                }
            });
        }
Example #2
0
        public async IAsyncEnumerable <MailMergeMessage> GetMailMergeMessages(ITenantContext tenantContext, ITemplateRenderer renderer, IMailMergeService mailMergeService, IStringLocalizer <EmailResource> localizer, [EnumeratorCancellation] CancellationToken cancellationToken)
        {
            if (Parameters.Match is null)
            {
                throw new Exception($"Input parameter {nameof(ResultEnteredModel.Match)} must not be null");
            }
            ;

            var teamUserRoundInfos = await tenantContext.DbContext.AppDb.TeamRepository.GetTeamUserRoundInfosAsync(
                new PredicateExpression((TeamUserRoundFields.TeamId == Parameters.Match.HomeTeamId |
                                         TeamUserRoundFields.TeamId == Parameters.Match.GuestTeamId)
                                        .And(TeamUserRoundFields.TournamentId == tenantContext.TournamentContext.MatchResultTournamentId)),
                cancellationToken);

            var model = new ResultEnteredModel
            {
                Match            = Parameters.Match,
                RoundDescription = teamUserRoundInfos.First(tur => tur.RoundId == Parameters.Match.RoundId).RoundDescription,
                Username         = teamUserRoundInfos.First(tur => tur.UserId == Parameters.ChangedByUserId).CompleteName,
                HomeTeamName     = teamUserRoundInfos.First(tur => tur.TeamId == Parameters.Match.HomeTeamId).TeamNameForRound,
                GuestTeamName    = teamUserRoundInfos.First(tur => tur.TeamId == Parameters.Match.GuestTeamId).TeamNameForRound
            };

            var plainTextContent = await renderer.RenderAsync(Templates.Email.TemplateName.ResultEnteredTxt, model,
                                                              Parameters.CultureInfo.TwoLetterISOLanguageName);

            var recipientGroups = new[]
            {
                teamUserRoundInfos.Where(tur => tur.TeamId == model.Match.HomeTeamId), // home team users
                teamUserRoundInfos.Where(tur => tur.TeamId == model.Match.GuestTeamId) // guest team users
            };

            // each recipient group will get the same email text
            foreach (var recipients in recipientGroups)
            {
                var mailMergeMessage = mailMergeService.CreateStandardMessage();
                mailMergeMessage.EnableFormatter = false;
                mailMergeMessage.MailMergeAddresses.Add(new MailMergeAddress(MailAddressType.From, tenantContext.SiteContext.Email.GeneralFrom.DisplayName, tenantContext.SiteContext.Email.GeneralFrom.Address));

                foreach (var tur in recipients)
                {
                    if (string.IsNullOrWhiteSpace(mailMergeMessage.Subject))
                    {
                        using (new CultureSwitcher(Parameters.CultureInfo, Parameters.CultureInfo))
                        {
                            mailMergeMessage.Subject = localizer["Match result '{0}' vs. '{1}'", model.HomeTeamName, model.GuestTeamName].Value;
                        }
                    }

                    mailMergeMessage.MailMergeAddresses.Add(new MailMergeAddress(MailAddressType.To,
                                                                                 $"{tur.CompleteName}", tur.Email));

                    if (!string.IsNullOrEmpty(tur.Email2))
                    {
                        mailMergeMessage.MailMergeAddresses.Add(new MailMergeAddress(MailAddressType.CC,
                                                                                     $"{tur.CompleteName}", tur.Email2));
                    }
                }

                // Send registration info also to league administration
                mailMergeMessage.MailMergeAddresses.Add(new MailMergeAddress(MailAddressType.Bcc,
                                                                             tenantContext.SiteContext.Email.GeneralBcc.DisplayName,
                                                                             tenantContext.SiteContext.Email.GeneralBcc.Address));

                mailMergeMessage.PlainText = plainTextContent;

                yield return(mailMergeMessage);
            }
        }