def send_expiration_sms_reminder(sp_subscription_pk):
    try:
        sp_subscription = SystemPaySubscription.objects.select_related(
            "subscription__person", "alias"
        ).get(pk=sp_subscription_pk)
    except SystemPaySubscription.DoesNotExist:
        return

    recipient = sp_subscription.subscription.person

    if (
        not recipient.contact_phone
        or not is_french_number(recipient.contact_phone)
        or not is_mobile_number(recipient.contact_phone)
    ):
        return

    connection_params = generate_token_params(recipient)

    url = shorten_url(
        add_params_to_urls(front_url("view_payments"), connection_params), secret=True
    )

    send_sms(
        f"Votre carte bleue arrive à expiration. Pour continuer votre don régulier à la France insoumise, "
        f"mettez là à jour : {url}\n"
        f"Merci encore de votre soutien !",
        recipient.contact_phone,
    )
Exemple #2
0
    def __init__(self, data=None, *args, **kwargs):
        super().__init__(data=data, *args, **kwargs)

        if (
            not self.is_bound
            and self.instance.contact_phone
            and not (
                is_french_number(self.instance.contact_phone)
                and is_mobile_number(self.instance.contact_phone)
            )
        ):
            self.initial["contact_phone"] = ""
            self.fields["contact_phone"].help_text = _(
                "Seul un numéro de téléphone mobile français (outremer inclus) peut être utilisé pour la validation."
            )

        self.fields["contact_phone"].required = True
        self.fields["contact_phone"].error_messages["required"] = _(
            "Vous devez indiquer le numéro de mobile qui vous servira à valider votre compte."
        )

        fields = [
            Row(
                HalfCol(
                    FieldWithButtons(
                        "contact_phone", Submit("submit", "Recevoir mon code")
                    )
                )
            )
        ]
        self.helper = FormHelper()
        self.helper.form_method = "POST"
        self.helper.layout = Layout(*fields)
Exemple #3
0
    def clean_contact_phone(self):
        phone_number = normalize_overseas_numbers(self.cleaned_data["contact_phone"])

        if not is_french_number(phone_number):
            raise ValidationError(self.error_messages["french_only"], "french_only")

        if not is_mobile_number(phone_number):
            raise ValidationError(self.error_messages["mobile_only"], "mobile_only")

        return phone_number
Exemple #4
0
    def test_is_french(self):
        self.assertTrue(is_french_number(p("06 38 68 98 45")))

        self.assertTrue(is_french_number(p("01 48 68 98 45")))

        self.assertTrue(is_french_number(p("04 84 65 98 78")))

        self.assertTrue(is_french_number(p("05 90 56 45 12")))  # Guadeloupe, en +33

        self.assertTrue(is_french_number(p("+262 2 60 45 78 45")))  # Réunion, en +262

        self.assertFalse(is_french_number(p("+44 7554 456245")))