示例#1
0
        public void ChangeFixture_Test(string cultureName, DateTime?origPlannedStart, long?origVenue)
        {
            var m = new ChangeFixtureModel
            {
                Username = "******",
                Fixture  = new TournamentManager.DAL.TypedViewClasses.PlannedMatchRow
                {
                    Id = 9876, ChangeSerial = 2,
                    RoundDescription      = "Round descr.", HomeTeamNameForRound = "Home Team Name",
                    GuestTeamNameForRound = "Guest Team Name", PlannedStart = new DateTime(2021, 03, 01, 19, 00, 00),
                    OrigPlannedStart      = origPlannedStart,
                    OrigVenueId           = origVenue, VenueName = "Venue", OrigVenueName = "Orig-Venue"
                }
            };

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

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

                Assert.That(text.Contains(L("Season fixture date", cultureName)));
                if (origPlannedStart.HasValue)
                {
                    Assert.That(text.Contains(L("Replacement fixture date", cultureName)));
                }
                else
                {
                    Assert.IsFalse(text.Contains(L("Replacement fixture date", cultureName)));
                }
                Assert.That(text.Contains(L("Season fixture venue", cultureName)));
                if (origVenue.HasValue)
                {
                    Assert.That(text.Contains(L("Replacement venue", cultureName)));
                }
                else
                {
                    Assert.IsFalse(text.Contains(L("Replacement venue", cultureName)));
                }
            });
        }
示例#2
0
        public async IAsyncEnumerable <MailMergeMessage> GetMailMergeMessages(ITenantContext tenantContext, ITemplateRenderer renderer, IMailMergeService mailMergeService, IStringLocalizer <EmailResource> localizer, [EnumeratorCancellation] CancellationToken cancellationToken)
        {
            var model = new ChangeFixtureModel
            {
                Fixture = (await tenantContext.DbContext.AppDb.MatchRepository.GetPlannedMatchesAsync(
                               new PredicateExpression(PlannedMatchFields.Id == Parameters.MatchId), cancellationToken))
                          .FirstOrDefault()
            };

            if (model.Fixture is null)
            {
                throw new Exception($"No fixture found for match id '{Parameters.MatchId}'");
            }
            ;

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

            model.Username = teamUserRoundInfos.First(tur => tur.UserId == Parameters.ChangedByUserId).CompleteName;

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

            var recipientGroups = new[]
            {
                teamUserRoundInfos.Where(tur => tur.TeamId == model.Fixture.HomeTeamId), // home team users
                teamUserRoundInfos.Where(tur => tur.TeamId == model.Fixture.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["Fixture change for team '{0}'", tur.TeamNameForRound].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);
            }
        }