From cecbcbc8a89f43b3bac726df333a9c416ad3ccf7 Mon Sep 17 00:00:00 2001 From: Nick Misasi Date: Thu, 16 Jun 2022 15:58:07 -0400 Subject: [PATCH] [MM-44887] Consistency in "next billing date" (#20423) * if there is no trial end date, use the current date for the upgrade confirmation email * changes Co-authored-by: Mattermod --- app/cloud.go | 14 ++++++++------ app/email/email.go | 4 ++-- i18n/en.json | 2 +- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/app/cloud.go b/app/cloud.go index e84ca3531e..20114d4962 100644 --- a/app/cloud.go +++ b/app/cloud.go @@ -48,6 +48,12 @@ func (a *App) AdjustInProductLimits(limits *model.ProductLimits, subscription *m return nil } +func getNextBillingDateString() string { + now := time.Now() + t := time.Date(now.Year(), now.Month()+1, 1, 0, 0, 0, 0, time.UTC) + return fmt.Sprintf("%s %d, %d", t.Month(), t.Day(), t.Year()) +} + func (a *App) SendUpgradeConfirmationEmail() *model.AppError { sysAdmins, e := a.getSysAdminsEmailRecipients() if e != nil { @@ -63,11 +69,7 @@ func (a *App) SendUpgradeConfirmationEmail() *model.AppError { return model.NewAppError("app.SendCloudUpgradeConfirmationEmail", "app.user.send_emails.app_error", nil, "", http.StatusInternalServerError) } - // Build readable trial end date - // Trial end is passed as unix timestamp in ms - endTimeStamp := subscription.TrialEndAt / 1000 - t := time.Unix(endTimeStamp, 0) - trialEndDate := fmt.Sprintf("%s %d, %d", t.Month(), t.Day(), t.Year()) + billingDate := getNextBillingDateString() // we want to at least have one email sent out to an admin countNotOks := 0 @@ -78,7 +80,7 @@ func (a *App) SendUpgradeConfirmationEmail() *model.AppError { name = admin.Username } - err := a.Srv().EmailService.SendCloudUpgradeConfirmationEmail(admin.Email, name, trialEndDate, admin.Locale, *a.Config().ServiceSettings.SiteURL, subscription.GetWorkSpaceNameFromDNS()) + err := a.Srv().EmailService.SendCloudUpgradeConfirmationEmail(admin.Email, name, billingDate, admin.Locale, *a.Config().ServiceSettings.SiteURL, subscription.GetWorkSpaceNameFromDNS()) if err != nil { a.Log().Error("Error sending trial ended email to", mlog.String("email", admin.Email), mlog.Err(err)) countNotOks++ diff --git a/app/email/email.go b/app/email/email.go index 3fef37aff9..8c21dcf1b2 100644 --- a/app/email/email.go +++ b/app/email/email.go @@ -230,13 +230,13 @@ func (es *Service) SendWelcomeEmail(userID string, email string, verified bool, return nil } -func (es *Service) SendCloudUpgradeConfirmationEmail(userEmail, name, trialEndDate, locale, siteURL, workspaceName string) error { +func (es *Service) SendCloudUpgradeConfirmationEmail(userEmail, name, date, locale, siteURL, workspaceName string) error { T := i18n.GetUserTranslations(locale) subject := T("api.templates.cloud_upgrade_confirmation.subject") data := es.NewEmailTemplateData(locale) data.Props["Title"] = T("api.templates.cloud_upgrade_confirmation.title") - data.Props["SubTitle"] = T("api.templates.cloud_upgrade_confirmation.subtitle", map[string]interface{}{"WorkspaceName": workspaceName, "TrialEnd": trialEndDate}) + data.Props["SubTitle"] = T("api.templates.cloud_upgrade_confirmation.subtitle", map[string]interface{}{"WorkspaceName": workspaceName, "Date": date}) data.Props["SiteURL"] = siteURL data.Props["ButtonURL"] = siteURL data.Props["Button"] = T("api.templates.cloud_welcome_email.button") diff --git a/i18n/en.json b/i18n/en.json index 75c21c1011..f167d9bff5 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -3173,7 +3173,7 @@ }, { "id": "api.templates.cloud_upgrade_confirmation.subtitle", - "translation": "Your {{.WorkspaceName}} workspace has now been upgraded. You will be billed starting {{.TrialEnd}}" + "translation": "Your {{.WorkspaceName}} workspace has now been upgraded. You'll be billed from {{.Date}}" }, { "id": "api.templates.cloud_upgrade_confirmation.title",