TIP: You can type at any time to perform a new search.
Members
membership · OCA/vertical-association
- Repository
- OCA/vertical-association · module folder · Try on Runboat
- Module version
- 1.1.0
- Category
- Membership
- Folder size
- 2.07 MB
- License
- LGPL-3
- Application
- No
- Auto-installable
- No
- Website
- https://github.com/OCA/vertical-association
- Last tracking update
- 2026-08-11 17:30:53
- Authors
- Odoo, Odoo Community Association (OCA)
- Maintainers
- Odoo, Odoo Community Association (OCA)
- Committers
- Carlos Lopez, Víctor Martínez, Weblate, OCA-git-bot, oca-ci
- Odoo dependencies
- Python dependencies
- None
- System dependencies
- None
- Required by
- membership_delegated_partner, membership_variable_period, website_event_membership_restriction, website_membership
- Description
This module allows you to manage all operations for managing memberships. - Membership category - Membership lines editable - Do not calculate membership state from invoice status - Start date of last membership period - Partner's with member lines can't be deleted. - When a partner has an associated member there is the option to make member start date independent from the associated member one so joining dates can be tracked for those members. - Adds a category for Membership management security group so a user with only that permission can access to the membership menu. It supports different kind of members: * Free member * Associated member (e.g.: a group subscribes to a membership for all subsidiaries) * Paid members * Special member prices It is integrated with sales and accounting to allow you to automatically invoice and send propositions for membership renewal. This module is a backport from Odoo SA and as such, it is not included in the OCA CLA. That means we do not have a copy of the copyright on it like all other OCA modules.
Code Analysis ⓘ
Views touched (13)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
membership_category_tree_view |
Membership Categories | membership.membership_category | list | New |
membership_members_tree |
Members | res.partner | list | New |
membership_product_search_form_view |
membership.product.search | product.template | search | New |
membership_products_form |
Membership Products | product.template | form | New |
membership_products_kanban |
product.template.kanban | product.template | kanban | New |
membership_products_tree |
Membership products | product.template | list | New |
report_membership_view_tree |
report.membership.view.list | report.membership | list | New |
view_membership_invoice_view |
membership.invoice.view.form | membership.invoice | form | New |
view_partner_form |
res.partner.form.inherit | res.partner | form | Inherits base.view_partner_form |
view_report_membership_graph1 |
report.membership.graph1 | report.membership | graph | New |
view_report_membership_pivot |
report.membership.pivot | report.membership | pivot | New |
view_report_membership_search |
report.membership.search | report.membership | search | New |
view_res_partner_member_filter |
res.partner.select | res.partner | search | New |
HTTP endpoints (0)
No HTTP endpoints found for this module.
Models touched (9)
New fields (0)
No new fields.
Public methods (4)-
action_post(self) -
button_cancel(self) -
button_draft(self) -
write(self, vals)
New fields (1)
-
membership_line_idsOne2many → membership.membership_linestring='Membership lines' args: 'membership.membership_line', 'account_invoice_line_id'
-
create(self, vals_list)@api.model_create_multi -
unlink(self) -
write(self, vals)
New fields (2)
-
member_priceFloatmin_display_digits='Product Price'required=True -
product_idMany2one → product.productrequired=Truestring='Membership' args: 'product.product'
-
membership_invoice(self)
New fields (2)
-
company_idMany2one → res.companyargs: 'res.company' -
nameCharrequired=Truetranslate=True
No public methods.
New fields (12)
-
account_invoice_idMany2one → account.movereadonly=Truerelated='account_invoice_line_id.move_id'string='Invoice' args: 'account.move' -
account_invoice_line_idMany2one → account.move.lineondelete='cascade'readonly=Truestring='Account Invoice line' args: 'account.move.line' -
category_idMany2one → membership.membership_categorycomodel_name='membership.membership_category'related='membership_id.membership_category_id' -
company_idMany2one → res.companyreadonly=Truerelated='account_invoice_line_id.move_id.company_id'store=Truestring='Company' args: 'res.company' -
dateDatehelp='Date on which member has joined the membership'string='Join Date' -
date_cancelDatestring='Cancel date' -
date_fromDatereadonly=Falsestring='From' -
date_toDatereadonly=Falsestring='To' -
member_priceFloatcompute='_compute_member_price'help='Amount for the membership'min_display_digits='Product Price'readonly=Falserequired=Truestore=Truestring='Membership Fee' -
membership_idMany2one → product.productrequired=Truestring='Membership' args: 'product.product' -
partner_idMany2one → res.partnerindex=Trueondelete='restrict'string='Partner' args: 'res.partner' -
stateSelectioncompute='_compute_state'help='It indicates the membership status.\n-Non Member: A member who has not applied for any membership.\n-Cancelled Member: A member who has cancelled his membership.\n-Old Member: A member whose membership date has expired.\n-Waiting Member: A member who has applied for the membership and whose invoice is going to be created.\n-Invoiced Member: A member whose invoice has been created.\n-Paid Member: A member who has paid the membership amount.'readonly=Falseselection=[('none', 'Non Member'), ('canceled', 'Cancelled Member'), ('old', 'Old Member'), ('waiting', 'Waiting Member'), ('invoiced', 'Invoiced Member'), ('free', 'Free Member'), ('paid', 'Paid Member')]store=Truestring='Membership Status'
No public methods.
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (4)
-
membershipBooleanhelp='Check if the product is eligible for membership.' -
membership_category_idMany2one → membership.membership_categorycomodel_name='membership.membership_category'compute='_compute_membership_category_id'readonly=Falsestore=Truestring='Membership category' -
membership_date_fromDatehelp='Date from which membership becomes active.'string='Membership Start Date' -
membership_date_toDatehelp='Date until which membership remains active.'string='Membership End Date'
No public methods.
New fields (14)
-
associate_member_idMany2one → res.partnerreadonly=Truestring='Associate Member' args: 'res.partner' -
company_idMany2one → res.companyreadonly=Truestring='Company' args: 'res.company' -
date_toDatereadonly=Truestring='End Date' -
membership_idMany2one → product.productreadonly=Truestring='Membership Product' args: 'product.product' -
membership_stateSelectionreadonly=Trueselection=<expr>string='Current Membership State' -
num_invoicedIntegerreadonly=Truestring='# Invoiced' -
num_paidIntegerreadonly=Truestring='# Paid' -
num_waitingIntegerreadonly=Truestring='# Waiting' -
partner_idMany2one → res.partnerreadonly=Truestring='Member' args: 'res.partner' -
quantityIntegerreadonly=True -
start_dateDatereadonly=True -
tot_earnedFloatdigits=0readonly=Truestring='Earned Amount' -
tot_pendingFloatdigits=0readonly=Truestring='Pending Amount' -
user_idMany2one → res.usersreadonly=Truestring='Salesperson' args: 'res.users'
-
init(self)Create the view
New fields (12)
-
associate_member_idMany2one → res.partnerhelp='A member with whom you want to associate your membership.It will consider the membership state of the associated member.'index=True args: 'res.partner' -
free_memberBooleanhelp='Select if you want to give free membership.' -
is_adhered_memberBooleancompute='_compute_is_adhered_member'help='A member who is associated to another one, but whose membership are independent.'readonly=Falsestore=True -
member_line_idsOne2many → membership.membership_linestring='Membership' args: 'membership.membership_line', 'partner_id' -
membership_amountFloatdigits=(16, 2)help='The price negotiated by the partner' -
membership_cancelDatecompute='_compute_membership_date'help='Date on which membership has been cancelled.'readonly=Truerecursive=Truestore=Truestring='Cancel Membership Date' -
membership_category_idsMany2many → membership.membership_categorycomodel_name='membership.membership_category'compute='_compute_membership_state'readonly=Truerecursive=Truestore=Truestring='Membership Categories' -
membership_last_startDatecompute='_compute_membership_date'help='Date when the partner became a member for the last time.'readonly=Truerecursive=Truestore=Truestring='Membership Last Start Date' -
membership_startDatecompute='_compute_membership_date'help='Earliest historical date this partner ever became a member.'readonly=Truerecursive=Truestore=Truestring='Membership Start Date' -
membership_start_adheredDatedefault=<expr>help='Date from which partner is adhered.'string='Membership Adhered Start Date' -
membership_stateSelectioncompute='_compute_membership_state'help='It indicates the membership state.\n-Non Member: A partner who has not applied for any membership.\n-Cancelled Member: A member who has cancelled his membership.\n-Old Member: A member whose membership date has expired.\n-Waiting Member: A member who has applied for the membership and whose invoice is going to be created.\n-Invoiced Member: A member whose invoice has been created.\n-Paying member: A member who has paid the membership fee.'index=Truerecursive=Trueselection=<expr>store=Truestring='Current Membership Status' -
membership_stopDatecompute='_compute_membership_date'help="Date when the latest partner's membership ends."readonly=Truerecursive=Truestore=Truestring='Membership End Date'
-
check_membership_expiry(self)@api.modelForce a recalculation on expired members -
create_membership_invoice(self, product, amount)Create Customer Invoice of Membership for partners.