community_membership: - Tiers get a fixed-term period (term_years), minimum age, a proof-document flag, a family-member flag and a signup description. - Members get first/last name (composing the contact name), month and year of birth with computed age, board approval state with approve/reject buttons, terms acceptance, a proof-of-eligibility upload and an inline family members list. Birth date and proof document are restricted to Membership Managers. - Constraints: plausible birth year; a tier's minimum age is enforced when the birth year is known. - Fix pre-existing tests that collided with deployment-seeded tier codes and member ID format. tncsc_deployment: - Five Yes/No eligibility questions from the tncsc.com registration form (manager-only), shown in an Eligibility section of the member form. - Tiers now match tncsc.com/membership-registration: Annual/Family $30, Long-Term (10 yr) $250, Life $500, Senior Annual (65+) $15, Senior Life (60+) $250, Student Annual $10 (CAD). - 19.0.1.1.0 post-migrate rewrites existing tiers (noupdate data) and archives the unused Individual tier. scripts/migrate_wp_members.py maps WordPress levels to the new LONG and SENLIFE tiers. .mcp.json (holds credentials) is now gitignored. Verified on the local Docker stack: -u on tncsc_site ran the migration cleanly, and a fresh install with --test-enable passed 32/32 tests for community_membership and tncsc_deployment. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
======================
Community OS Membership
======================
Generic membership engine: configurable tiers, family grouping, member IDs,
renewal automation, self-service portal, and a QR membership card.
Installation
============
Install as any Odoo module.
Configuration
=============
Settings > Members > Membership Settings.
Usage
=====
* Define tiers under **Members > Configuration > Tiers** (name, code, price,
period). Each tier auto-creates its membership product.
* A partner's ``membership_member_id`` is generated on activation using the
format string configured in Membership Settings (default
``MEM-{year}-{seq}``).
* A daily cron moves members to ``renewal_due`` at the configured reminder
offsets and to ``expired`` on expiry, sending the matching email template
and creating a draft renewal invoice for review.
* Members self-serve at ``/my/membership`` (status, tier, expiry, renew,
download card) and can be verified publicly, without exposing personal
data, at ``/membership/verify/<member_id>``.
* The QR membership card is a QWeb PDF report (85mm x 54mm) whose QR code
encodes the verification URL.
Credits
=======
Authors
-------
* Metatroncube Software Solutions LLP