community_classifieds: a member-gated classifieds board. community.classified (title/category/description/up-to-3-images via a child .image model/contact info/state) with a public board at /classifieds, detail pages that track view_count, portal posting at /classifieds/new (soft-detects community_membership - blocks non-active-members only if that module is installed, otherwise anyone logged in can post), a "my listings" portal page with self-service renew, and an admin moderation queue (publish/reject). Daily crons expire past-due listings and send a 7-day expiry warning; a new-submission notice goes out to the Classifieds Moderator group. Listing duration is configurable (Settings), never hardcoded. community_benefits: community.benefit.partner (benefit centres) offer community.benefit entitlements scoped to specific community_membership tiers via tier_ids. community.benefit.redemption logs a redemption but its create() is guarded by a constraint that re-checks the same active-membership condition the membership QR verification page uses (membership_state in active/renewal_due) plus tier entitlement, refusing the redemption otherwise. Public directory at /benefits, portal page at /my/benefits listing only benefits the member's tier actually entitles them to. Two more real Odoo 19 API changes hit here: search-view <group> elements for "Group By" sections no longer accept a `string` attribute (must use `name` only - same fix as community_membership's partner search view, applied here to a fresh module), and res.groups.users was renamed to user_ids. Verified against a live Odoo 19 + Postgres 16 container: 7+4 automated tests pass, plus a full manual live run covering the Phase 4 gate exactly - confirmed a non-member is blocked from /classifieds/new, activated a real membership, posted a classified (pending_review), published it via the moderator action, confirmed it appears on the public board and detail page with view_count incrementing, entitled a tier to a benefit, logged a redemption for the active member, confirmed it shows on /my/benefits, and confirmed redemption creation is refused for a non-member. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
42 lines
1.3 KiB
Python
42 lines
1.3 KiB
Python
{
|
|
'name': 'Community OS - Classifieds',
|
|
'version': '19.0.1.0.0',
|
|
'category': 'Website/Website',
|
|
'summary': 'Member-gated classifieds board with moderation queue and auto-expiry',
|
|
'description': """
|
|
Community OS - Classifieds
|
|
============================
|
|
|
|
A member-gated classifieds board:
|
|
|
|
* Public listing with search/filter, private posting for logged-in portal
|
|
users (requires active membership if Community OS Membership is installed)
|
|
* Admin moderation queue (publish / reject)
|
|
* Configurable auto-expiry, expiry-warning, and new-submission notifications
|
|
|
|
Soft-detects Community OS Membership; runs standalone without it.
|
|
""",
|
|
'author': 'Metatroncube Software Solutions LLP',
|
|
'website': 'https://www.metatroncube.com',
|
|
'license': 'LGPL-3',
|
|
'price': 0.00,
|
|
'currency': 'USD',
|
|
'depends': [
|
|
'website',
|
|
'portal',
|
|
],
|
|
'data': [
|
|
'security/classifieds_security.xml',
|
|
'security/ir.model.access.csv',
|
|
'data/mail_templates.xml',
|
|
'data/ir_cron.xml',
|
|
'views/classified_views.xml',
|
|
'views/res_config_settings_views.xml',
|
|
'views/classifieds_templates.xml',
|
|
],
|
|
'demo': [],
|
|
'images': ['static/description/banner.png'],
|
|
'application': False,
|
|
'installable': True,
|
|
}
|