Commit Graph

18 Commits

Author SHA1 Message Date
Hugo Peixoto 76df4d41b7 Redo notification system
Previously, saucy generated each member's future notification every day
(marked as scheduled). And every day saucy would deliver every unsent
notification scheduled for that day.

This means that each member with expiration date in the future had ~6
notifications scheduled for them in the database.

This was troublesome because if the cron job that delivers notification
was down or the server was down for more than 24h, notifications were
silently skipped and we had no easy way of detecting it: we had to check
every member for missing sent notifications.

It also had the disadvantage that we were deleting and recreating
hundreds of database entries for no good reason.

To fix this, the new system no longer stores future scheduled
notifications. Instead, it now only stores sent notifications and
notifications currently being delivered. Every day, the deliver task
checks every member if there's a notification that needs to be sent in
that day, by checking if we're past the date of sending a particular
notification type and checking if in that window of time no
notifications of that type have been sent.

Let's suppose we send 6 notifications, one per month starting 60 days
before the membership expires until 90 days after:

  -60d   -30d    t=0    30d    60d    90d
----|------|------|------|------|------|------
    A      B      C      D      E      F

If we're on day t=-60d, we need to deliver a notification of type A. But
first we check if no notifications of type A have been sent to that
member on that day.

From days t=-59d to t=-31d, we check if in the time range t=[-60d, -31d]
any notification of type A was sent to that member. If not, we need to
deliver it.

If we're on days t=[-30d, -1d], we do the same but for notification of
type B.
2024-03-23 15:31:32 +00:00
Hugo Peixoto dcc6d1a991 Improve branding mechanisms 2023-09-20 14:19:35 +01:00
Hugo Peixoto dccad36474 Add payment confirmation notifications 2023-08-07 13:50:50 +01:00
Hugo Peixoto 9058ed98f7 Adds payment page
Instead of sending all the payment details by email, we're now sending
only a link to a page on this platform. This is to help reduce questions
of whether the emails are from scammers or real.
2023-07-12 19:13:08 +01:00
Hugo Peixoto f3a1def396 Fixes ransack upgrade to 4.0 2023-04-19 22:52:31 +01:00
Hugo Peixoto 3fa1ac101c Try to address the concurrency problem 2023-04-05 23:04:48 +01:00
Hugo Peixoto ee0dc75889 Add legal name and pronouns to members 2023-03-31 02:24:16 +01:00
Hugo Peixoto f956a65100 Adds dues to navigation and fixes amount calculation 2023-03-23 18:15:45 +00:00
Hugo Peixoto 1f8a04ec5a Show member number even when excluded 2023-03-19 18:56:26 +00:00
Hugo Peixoto 318b7878d8 Add contributions CSV export 2023-03-19 17:49:31 +00:00
Hugo Peixoto da34afc882 Parameterize Member#regenerate_notifications 2023-01-24 23:06:12 +00:00
Hugo Peixoto b3bc4bc411 Avoid sending duplicate notifications 2023-01-24 18:26:10 +00:00
Hugo Peixoto f30859f991 Fix 60 days warning which was scheduled for 90 days instead 2022-10-18 11:29:15 +01:00
Hugo Peixoto 2e7b03e9ef Add papertrail 2022-06-26 12:57:00 +01:00
Hugo Peixoto 4f190f67f0 Add account management 2022-06-25 23:45:47 +01:00
Hugo Peixoto 882d0a51ed Add contribution actions and member deletion 2022-06-25 21:27:02 +01:00
Hugo Peixoto 57e976ef96 Add first iteration 2022-06-25 13:48:46 +01:00
Hugo Peixoto 46881d72bf rails new
rails new \
  --skip-action-cable \
  --skip-hotwire \
  --skip-jbuilder \
  --skip-system-test \
  -a propshaft \
  --database=postgresql .
2022-06-20 20:48:08 +01:00