Membership and mailing list
This commit is contained in:
@@ -24,4 +24,4 @@ class Migration(migrations.Migration):
|
||||
("created_at", models.DateTimeField(auto_now_add=True)),
|
||||
("account", models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to="members.account")),
|
||||
], options={"constraints": [models.UniqueConstraint(condition=models.Q(credited_at__isnull=True), fields=("account",), name="one_uncredited_crypto_invoice")]}),
|
||||
]
|
||||
]
|
||||
|
||||
@@ -149,4 +149,4 @@ def prepare_invoice(account_id, invoice_id):
|
||||
with transaction.atomic():
|
||||
account = Account.objects.select_for_update().get(pk=account_id)
|
||||
invoice = CryptoInvoice.objects.get(pk=invoice_id, account=account)
|
||||
ensure_created(invoice)
|
||||
ensure_created(invoice)
|
||||
|
||||
@@ -258,4 +258,4 @@ class SHKeeperTransportTests(SimpleTestCase):
|
||||
def test_calendar_month_handles_leap_year_and_december(self):
|
||||
january = datetime(2028, 1, 31, tzinfo=dt_timezone.utc)
|
||||
self.assertEqual(shkeeper.add_month(january), datetime(2028, 2, 29, tzinfo=dt_timezone.utc))
|
||||
self.assertEqual(shkeeper.add_month(datetime(2027, 12, 15, tzinfo=dt_timezone.utc)), datetime(2028, 1, 15, tzinfo=dt_timezone.utc))
|
||||
self.assertEqual(shkeeper.add_month(datetime(2027, 12, 15, tzinfo=dt_timezone.utc)), datetime(2028, 1, 15, tzinfo=dt_timezone.utc))
|
||||
|
||||
@@ -20,4 +20,4 @@
|
||||
</main>
|
||||
<footer class="member-footer">Payment questions? <a href="mailto:eric@eom.dev">Contact the administrator</a>.</footer>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
||||
@@ -11,4 +11,4 @@
|
||||
<button class="button button-primary" type="submit">Create payment invoice</button>
|
||||
</form>
|
||||
<p class="member-small">Only one unfinished crypto invoice is allowed per account. Repeated requests reopen it rather than create another deposit address. Stripe subscriptions must end before switching to crypto.</p>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
|
||||
@@ -21,4 +21,4 @@
|
||||
{% endif %}
|
||||
<p><a class="button button-secondary" href="{% url 'members:crypto_invoice' invoice.id %}">Refresh payment status</a></p>
|
||||
<p class="member-small">Refreshing this page only reads stored status. The worker checks SHKeeper automatically. Crypto payments are irreversible; do not reuse a paid address for renewal. Overpayments do not automatically buy extra months.</p>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
|
||||
Reference in New Issue
Block a user