示例#1
0
 def post(self, request, *args, **kwargs):
     self.organization = self.get_object()
     if not self.request.user.is_authenticated:
         return redirect(self.organization)
     is_member = self.organization.has_member(self.request.user)
     if request.POST.get("action") == "join" and not is_member:
         self.organization.invitations.create(email=request.user.email,
                                              user=request.user,
                                              request=True)
         messages.success(request,
                          _("Request to join the organization sent!"))
         send_mail(
             subject=_(
                 f"{request.user} has requested to join {self.organization}"
             ),
             template="organizations/email/join_request.html",
             organization=self.organization,
             organization_to=ORG_TO_ADMINS,
             extra_context={"joiner": request.user},
         )
     elif request.POST.get("action") == "leave" and is_member:
         self.request.user.memberships.filter(
             organization=self.organization).delete()
         messages.success(request, _("You have left the organization"))
         mixpanel_event(
             request,
             "Left Organization",
             {
                 "Name": self.organization.name,
                 "UUID": str(self.organization.uuid)
             },
         )
     return redirect(self.organization)
示例#2
0
 def form_valid(self, form):
     """The organization creator is automatically a member and admin of the
     organization"""
     free_plan = Plan.objects.get(slug="free")
     organization = form.save(commit=False)
     organization.plan = free_plan
     organization.next_plan = free_plan
     organization.save()
     organization.add_creator(self.request.user)
     organization.change_logs.create(
         reason=OrganizationChangeLog.CREATED,
         user=self.request.user,
         to_plan=organization.plan,
         to_next_plan=organization.next_plan,
         to_max_users=organization.max_users,
     )
     mixpanel_event(
         self.request,
         "Create Organization",
         {
             "Name": organization.name,
             "UUID": str(organization.uuid),
             "Plan": organization.plan.name,
             "Max Users": organization.max_users,
             "Sign Up": False,
         },
     )
     return redirect(organization)
示例#3
0
 def form_valid(self, form):
     organization = self.object
     old_plan = organization.plan
     old_users = organization.max_users
     try:
         organization.set_subscription(
             token=form.cleaned_data["stripe_token"],
             plan=form.cleaned_data["plan"],
             max_users=form.cleaned_data.get("max_users"),
             user=self.request.user,
         )
     except stripe.error.StripeError as exc:
         messages.error(self.request,
                        "Payment error: {}".format(exc.user_message))
     else:
         organization.set_receipt_emails(
             form.cleaned_data["receipt_emails"])
         messages.success(
             self.request,
             _("Plan Updated")
             if organization.individual else _("Organization Updated"),
         )
         mixpanel_event(
             self.request,
             "Organization Subscription Changed",
             {
                 "Name": organization.name,
                 "UUID": str(organization.uuid),
                 "Old Plan": old_plan.name,
                 "New Plan": form.cleaned_data["plan"].name,
                 "Old Users": old_users,
                 "New Users": form.cleaned_data.get("max_users", 1),
             },
         )
     return redirect(organization)
示例#4
0
    def save(self, request):

        user_data = {
            "source": request.GET.get("intent",
                                      "squarelet").lower().strip()[:11]
        }
        user_data.update(self.cleaned_data)

        user, group_organization, error = User.objects.register_user(user_data)

        setup_user_email(request, user, [])
        mixpanel_event(request,
                       "Sign Up", {"Source": f"Squarelet: {user.source}"},
                       signup=True)

        if group_organization is not None:
            mixpanel_event(
                request,
                "Create Organization",
                {
                    "Name": group_organization.name,
                    "UUID": str(group_organization.uuid),
                    "Plan": group_organization.plan.name,
                    "Max Users": group_organization.max_users,
                    "Sign Up": True,
                },
            )
        if error:
            messages.error(request, error)

        return user
示例#5
0
 def remove_user(membership):
     membership.delete()
     mixpanel_event(
         request,
         "User Removed",
         {
             "Organization Name": membership.organization.name,
             "Organization UUID": str(membership.organization.uuid),
             "User UUID": str(membership.user.uuid),
             "User Username": membership.user.username,
             "User Name": membership.user.name,
             "User Email": membership.user.email,
         },
     )
示例#6
0
 def accept_invite(invite):
     invite.accept()
     mixpanel_event(
         request,
         "Invitation Accepted by Admin",
         {
             "Organization Name": invite.organization.name,
             "Organization UUID": str(invite.organization.uuid),
             "User UUID": str(invite.user.uuid),
             "User Username": invite.user.username,
             "User Name": invite.user.name,
             "User Email": invite.user.email,
         },
     )
示例#7
0
 def post(self, request, *args, **kwargs):
     self.organization = self.get_object()
     if not self.request.user.is_authenticated:
         return redirect(self.organization)
     is_member = self.organization.has_member(self.request.user)
     if request.POST.get("action") == "join" and not is_member:
         invitation = self.organization.invitations.create(
             email=request.user.email, user=request.user, request=True
         )
         messages.success(request, _("Request to join the organization sent!"))
         invitation.send()
     elif request.POST.get("action") == "leave" and is_member:
         self.request.user.memberships.filter(
             organization=self.organization
         ).delete()
         messages.success(request, _("You have left the organization"))
         mixpanel_event(
             request,
             "Left Organization",
             {"Name": self.organization.name, "UUID": str(self.organization.uuid)},
         )
     return redirect(self.organization)
示例#8
0
 def post(self, request, *args, **kwargs):
     """Accept the invitation"""
     invitation = self.get_object()
     action = request.POST.get("action")
     if action == "accept":
         invitation.accept(self.request.user)
         messages.success(self.request, "Invitation accepted")
         mixpanel_event(
             request,
             "Invitation Accepted",
             {
                 "Name": invitation.organization.name,
                 "UUID": str(invitation.organization.uuid),
             },
         )
         return redirect(invitation.organization)
     elif action == "reject":
         invitation.reject()
         messages.warning(self.request, "Invitation rejected")
         return redirect(request.user)
     else:
         messages.error(self.request, "Invalid choice")
         return redirect(request.user)
示例#9
0
 def form_valid(self, form):
     """The organization creator is automatically a member and admin of the
     organization"""
     organization = form.save()
     organization.add_creator(self.request.user)
     organization.change_logs.create(
         reason=ChangeLogReason.created,
         user=self.request.user,
         to_plan=organization.plan,
         to_max_users=organization.max_users,
     )
     mixpanel_event(
         self.request,
         "Create Organization",
         {
             "Name": organization.name,
             "UUID": str(organization.uuid),
             "Plan": organization.plan.name if organization.plan else "Free",
             "Max Users": organization.max_users,
             "Sign Up": False,
         },
     )
     return redirect(organization)