support: Add form for sales support queries.

This commit is contained in:
Aman Agrawal
2024-11-03 20:21:04 +05:30
committed by Tim Abbott
parent 4681c6154d
commit d86f0172e1
10 changed files with 188 additions and 2 deletions

View File

@@ -22,7 +22,11 @@ from pydantic import AfterValidator, Json, NonNegativeInt
from confirmation.models import Confirmation, confirmation_url
from confirmation.settings import STATUS_USED
from corporate.lib.activity import format_optional_datetime, remote_installation_stats_link
from corporate.lib.activity import (
format_optional_datetime,
realm_support_link,
remote_installation_stats_link,
)
from corporate.lib.billing_types import BillingModality
from corporate.models import CustomerPlan
from zerver.actions.create_realm import do_change_realm_subdomain
@@ -95,6 +99,13 @@ class DemoRequestForm(forms.Form):
message = forms.CharField(widget=forms.Textarea)
class SalesRequestForm(forms.Form):
MAX_INPUT_LENGTH = 50
organization_website = forms.URLField(required=True, assume_scheme="https")
expected_user_count = forms.CharField(max_length=MAX_INPUT_LENGTH)
message = forms.CharField(widget=forms.Textarea)
@zulip_login_required
@typed_endpoint_without_parameters
def support_request(request: HttpRequest) -> HttpResponse:
@@ -186,6 +197,59 @@ def demo_request(request: HttpRequest) -> HttpResponse:
return response
@zulip_login_required
@typed_endpoint_without_parameters
def sales_support_request(request: HttpRequest) -> HttpResponse:
from corporate.lib.stripe import BILLING_SUPPORT_EMAIL
assert request.user.is_authenticated
if not request.user.is_realm_admin:
return render(request, "404.html", status=404)
context = {
"MAX_INPUT_LENGTH": SalesRequestForm.MAX_INPUT_LENGTH,
"user_email": request.user.delivery_email,
"user_full_name": request.user.full_name,
}
if request.POST:
post_data = request.POST.copy()
form = SalesRequestForm(post_data)
if form.is_valid():
rate_limit_request_by_ip(request, domain="sends_email_by_ip")
email_context = {
"full_name": request.user.full_name,
"email": request.user.delivery_email,
"role": UserProfile.ROLE_ID_TO_API_NAME[request.user.role],
"organization_name": request.user.realm.name,
"organization_type": get_org_type_display_name(request.user.realm.org_type),
"organization_website": form.cleaned_data["organization_website"],
"expected_user_count": form.cleaned_data["expected_user_count"],
"message": form.cleaned_data["message"],
"support_link": realm_support_link(request.user.realm.string_id),
}
send_email(
"zerver/emails/sales_support_request",
to_emails=[BILLING_SUPPORT_EMAIL],
from_name="Sales support request",
from_address=FromAddress.tokenized_no_reply_address(),
reply_to_email=email_context["email"],
context=email_context,
)
response = render(
request, "corporate/support/support_request_thanks.html", context=context
)
return response
response = render(request, "corporate/support/sales_support_request.html", context=context)
return response
def get_plan_type_string(plan_type: int) -> str:
return {
Realm.PLAN_TYPE_SELF_HOSTED: "Self-hosted",