Add CE request/payment deadlines to events#1870
Conversation
| if complete | ||
| return unless amount_cents.positive? | ||
| return "#{amount} due" | ||
| return "#{amount} due" if registration.paid_in_full? || event.ce_payment_due_deadline.blank? |
There was a problem hiding this comment.
🤖 From Claude: The deadline suffix is suppressed once paid_in_full?. CE payment isn't tracked separately from the event fee, so this reuses the same signal callouts/ce already uses to show CE "Paid".
| shown in the confirmation and reminder emails. Mirrors the CE callout's | ||
| deadline copy. Locals: event (decorated), registration. The deadlines are | ||
| plain dates, so no time zone is applied. %> | ||
| <% if registration.ce_credit_requested? && (event.ce_hours_request_deadline || event.ce_payment_due_deadline) %> |
There was a problem hiding this comment.
🤖 From Claude: Gated on ce_credit_requested? so only CE registrants see deadlines, and on at least one deadline being set so events without them are unchanged. Same partial backs both confirmation and reminder (html + text) to keep the four templates in sync.
| shown in the confirmation and reminder emails. Mirrors the CE callout's | ||
| deadline copy. Locals: event (decorated), registration. The deadlines are | ||
| plain dates, so no time zone is applied. %> | ||
| <% if registration.ce_credit_requested? && (event.ce_hours_request_deadline || event.ce_payment_due_deadline) %> |
There was a problem hiding this comment.
🤖 From Claude: Gated on ce_credit_requested? so only CE registrants see deadlines, and on at least one deadline being set so events without them are unchanged. One partial backs both confirmation and reminder (html + text) to keep the four templates in sync.
ef34e0b to
ef38f5f
Compare
Admins set per-event CE deadlines so registrants know when to request hours and pay; the CE callout, its detail page, and the public CE page show them dynamically based on what the registrant still owes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Registrants who requested CE credit now see the request/payment deadlines in their confirmation and reminder emails — email is where a deadline actually nudges. Shared _ce_deadlines partial keeps the four templates in sync. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
ef38f5f to
2b46c9b
Compare
| the event offering CE, not on this registrant having requested it yet (the | ||
| confirmation fires before anyone opts in). Locals: event (decorated). The | ||
| deadlines are plain dates, so no time zone is applied. %> | ||
| <% if event.ce_eligible? && (event.ce_hours_request_deadline || event.ce_payment_due_deadline) %> |
There was a problem hiding this comment.
🤖 From Claude: Gated on event.ce_eligible?, not registration.ce_registered? — the confirmation email fires at registration time, before anyone opts into CE, so registrant-level gating would hide the deadline from exactly the people it should nudge. Event-level shows it to everyone at a CE-eligible event.
card_for preserves the app's live badge when a built-in CE callout is materialized into an editable row, so the deadline still shows. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The deadlines belonged with hours-offered/cost, not buried in the ticket callout card. Extract a shared _ce_config_fields partial rendering all four as label-above-input cells so they read as distinct fields. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Tint the CE settings box teal (its domain colour) instead of grey, with white inputs so each field reads clearly. - Make the "Enable continuing education" text a real label for the checkbox. - Match the deadline date inputs to the event start/end date input style. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Registrants filling out the form see the request/payment cutoffs right by the CE questions. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The public form only asked for a license number; the ticket callout already captures both type and number. Add a license-type question to the continuing_education section and thread its answer into the ProfessionalLicense kind so both are recorded at signup. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Capture issuing state (US-states dropdown via the _state suffix) and expiry (date input) on the continuing_education section, threaded into the ProfessionalLicense. - Note on the form that license details are optional and can be added later from the ticket. - Make the CE interest question required and always persist its answer (Yes or No) as a form answer, not just on Yes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
jmilljr24
left a comment
There was a problem hiding this comment.
We just need to add the new questions on the existing portal form.
Also I'm assuming if admin want to make an exception to the deadline, they would just create the ce record manually and the deadline wouldn't block payment etc.?
🤖 PR, suggested 👤 review level: 🔬 Inspect — reworked onto main's CE cutover (new continuing_education_registrations model); logic + copy changes across card, callout, page, and emails
What is the goal of this PR and why is this important?
How did you approach the change?
datecolumnsce_hours_request_deadline/ce_payment_due_deadlineonevents; permitted inEventPolicy, edited in the CE callout section of the event form.MagicTicketCallouts): payment deadline appended to the amount-due badge untilce_paid_in_full?($150 due by Aug 15); request deadline appended to the license-needed badge (License number needed by Jul 1).ce_hours): deadline panel._ce_deadlinespartial, gated onevent.ce_eligible?(not the individual registrant — the confirmation fires before anyone opts into CE, so event-level is the correct nudge audience).Anything else to add?
ce_hours_offered), not registrant-requested, so "request your hours by" became "request CE credit by" (the outstanding registrant step is now the professional license). Column names kept as-is.