Repository
OCA/vertical-association · module folder · Try on Runboat
Module version
1.1.0
Category
Membership
Folder size
1.17 MB
License
AGPL-3
Application
No
Auto-installable
No
Website
https://github.com/OCA/vertical-association
Last tracking update
2026-08-07 08:43:01
Authors
Odoo Community Association (OCA), Onestein, Tecnativa
Maintainers
Odoo Community Association (OCA), Onestein, Tecnativa
Committers
Jairo Llopis, Weblate, OCA-git-bot, oca-ci, Bhavesh Heliconia
Odoo dependencies
Python dependencies
None
System dependencies
None
Required by
membership_variable_period, membership_withdrawal, oca_all, oca_membership, oca_sponsor
Description
This module extends Odoo's membership management with the following
features:

- 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.

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
membership_category_tree_view Membership Categories membership.membership_category list New
membership_product_search_form_view Add membership category field product.template form Inherits membership.membership_product_search_form_view
membership_products_form Add membership category field product.template form Inherits membership.membership_products_form
membership_products_tree Membership extension product.template tree Inherits membership.membership_products_tree
view_partner_form Membership extension res.partner form Inherits membership.view_partner_form
view_res_partner_member_filter Membership extension filters res.partner Inherits membership.view_res_partner_member_filter
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (7)

New fields (0)

No new fields.

Public methods (3)
  • action_post(self)
    Handle validated refunds for cancelling membership lines
  • button_cancel(self)
    Cancel membership for customer invoices and restore previous membership state for customer refunds. Harmless on supplier ones.
  • button_draft(self)

New fields (1)
  • membership_lines One2many → membership.membership_line
    comodel_name='membership.membership_line' inverse_name='account_invoice_line'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)

New fields (2)
  • company_id Many2one → res.company
    args: 'res.company'
  • name Char
    required=True translate=True
Public methods (0)

No public methods.

New fields (6)
  • category_id Many2one → membership.membership_category
    comodel_name='membership.membership_category' related='membership_id.membership_category_id'
  • date_from Date
    readonly=False
  • date_to Date
    readonly=False
  • member_price Float
    compute='_compute_member_price' readonly=False store=True
  • partner Many2one
    ondelete='restrict'
  • state Selection
    compute='_compute_state' readonly=False
Public methods (1)
  • unlink(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • membership_category_id Many2one → membership.membership_category
    comodel_name='membership.membership_category' compute='_compute_membership_category_id' readonly=False store=True string='Membership category'
Public methods (0)

No public methods.

New fields (9)
  • associate_member Many2one
    index=True
  • is_adhered_member Boolean
    compute='_compute_is_adhered_member' help='A member who is associated to another one, but whose membership are independent.' readonly=False store=True
  • membership_cancel Date
    compute='_compute_membership_date' help='Date on which membership has been cancelled.' readonly=True recursive=True store=True string='Cancel Membership Date'
  • membership_category_ids Many2many → membership.membership_category
    comodel_name='membership.membership_category' compute='_compute_membership_state' readonly=True recursive=True store=True string='Membership Categories'
  • membership_last_start Date
    compute='_compute_membership_date' help='Date when the partner became a member for the last time.' readonly=True recursive=True store=True string='Membership Last Start Date'
  • membership_start Date
    compute='_compute_membership_date' help='Earliest historical date this partner ever became a member.' readonly=True recursive=True store=True string='Membership Start Date'
  • membership_start_adhered Date
    default=fields.Date.today() help='Date from which partner is adhered.' string='Membership Adhered Start Date'
  • membership_state Selection
    compute='_compute_membership_state' index=True recursive=True selection=STATE store=True
  • membership_stop Date
    compute='_compute_membership_date' help="Date when the latest partner's membership ends." readonly=True recursive=True store=True string='Membership End Date'
Public methods (2)
  • check_membership_all(self)
    @api.model
    Force a recalculation on partners with member lines
  • check_membership_expiry(self)
    @api.model
    Force a recalculation on expired members

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…