Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
121 changes: 121 additions & 0 deletions membership_delegated_partner_line/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
=================================
Membership Delegated Partner Line
=================================

..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:922c1a32a7f488a16381a4f206b3863d06148d3429a5ab01e10130c16584ad3f
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fvertical--association-lightgray.png?logo=github
:target: https://github.com/OCA/vertical-association/tree/18.0/membership_delegated_partner_line
:alt: OCA/vertical-association
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/vertical-association-18-0/vertical-association-18-0-membership_delegated_partner_line
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/vertical-association&target_branch=18.0
:alt: Try me on Runboat

|badge1| |badge2| |badge3| |badge4| |badge5|

This module allows to delegate a membership line to a partner
independently of the invoicing partner. This is done at the invoice line
level.

It will also update the description on the invoice line to include the
member's name.

If a delegated partner is not provided, the membership will assign to
the invoice partner.

**Table of contents**

.. contents::
:local:

Configuration
=============

This module is incompatible with membership_delegated_partner and any
module that depends on it. Prior to installing this module, if you use
membership_delegated_partner:

1. Prior to uninstalling membership_delegated_partner and installing
this one, run replace_membership_delegated_partner.sql.
2. Uninstall membership_delegated_partner.
3. Install this module.

Usage
=====

1. In an invoice with membership lines, choose a delegated partner for
each line.
2. The membership line will go to the delegated partner.

Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/OCA/vertical-association/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/vertical-association/issues/new?body=module:%20membership_delegated_partner_line%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Do not contact contributors directly about support or help with technical issues.

Credits
=======

Authors
-------

* Graeme Gellatly

Contributors
------------

- Graeme Gellatly <[email protected]> (https://o4sb.com)

Other credits
-------------

The development of this module was heavily based on
membership_delegated_partner:

Thanks to all the below for their prior work on this module

- `Tecnativa <https://www.tecnativa.com>`__:

- Pedro M. Baeza
- Rafael Blasco
- David Vidal

- `Onestein <https://onestein.eu>`__:

- Andrea Stirpe

Maintainers
-----------

This module is maintained by the OCA.

.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org

OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.

This module is part of the `OCA/vertical-association <https://github.com/OCA/vertical-association/tree/18.0/membership_delegated_partner_line>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
1 change: 1 addition & 0 deletions membership_delegated_partner_line/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models
18 changes: 18 additions & 0 deletions membership_delegated_partner_line/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Copyright 2023 Graeme Gellatly
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

{
"name": "Membership Delegated Partner Line",
"summary": """
Adds ability to specify member at invoice line level""",
"version": "18.0.1.0.0",
"license": "AGPL-3",
"author": "Graeme Gellatly,Odoo Community Association (OCA)",
"website": "https://github.com/OCA/vertical-association",
"depends": [
"membership",
],
"data": [
"views/account_move.xml",
],
}
78 changes: 78 additions & 0 deletions membership_delegated_partner_line/i18n/it.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * membership_delegated_partner_line
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"

#. module: membership_delegated_partner_line
#: model:ir.model.fields,help:membership_delegated_partner_line.field_account_move_line__is_membership
msgid "Check if the product is eligible for membership."
msgstr ""

#. module: membership_delegated_partner_line
#: model:ir.model.fields,field_description:membership_delegated_partner_line.field_account_move_line__delegated_member_id
msgid "Delegated Member"
msgstr ""

#. module: membership_delegated_partner_line
#: model:ir.model.fields,field_description:membership_delegated_partner_line.field_account_move__display_name
#: model:ir.model.fields,field_description:membership_delegated_partner_line.field_account_move_line__display_name
#: model:ir.model.fields,field_description:membership_delegated_partner_line.field_membership_membership_line__display_name
msgid "Display Name"
msgstr ""

#. module: membership_delegated_partner_line
#: model:ir.model.fields,field_description:membership_delegated_partner_line.field_account_move__id
#: model:ir.model.fields,field_description:membership_delegated_partner_line.field_account_move_line__id
#: model:ir.model.fields,field_description:membership_delegated_partner_line.field_membership_membership_line__id
msgid "ID"
msgstr ""

#. module: membership_delegated_partner_line
#: model:ir.model.fields,field_description:membership_delegated_partner_line.field_account_bank_statement_line__is_membership_invoice
#: model:ir.model.fields,field_description:membership_delegated_partner_line.field_account_move__is_membership_invoice
#: model:ir.model.fields,field_description:membership_delegated_partner_line.field_account_payment__is_membership_invoice
msgid "Is Membership Invoice"
msgstr ""

#. module: membership_delegated_partner_line
#: model:ir.model,name:membership_delegated_partner_line.model_account_move
msgid "Journal Entry"
msgstr ""

#. module: membership_delegated_partner_line
#: model:ir.model,name:membership_delegated_partner_line.model_account_move_line
msgid "Journal Item"
msgstr ""

#. module: membership_delegated_partner_line
#: model:ir.model.fields,field_description:membership_delegated_partner_line.field_account_move____last_update
#: model:ir.model.fields,field_description:membership_delegated_partner_line.field_account_move_line____last_update
#: model:ir.model.fields,field_description:membership_delegated_partner_line.field_membership_membership_line____last_update
msgid "Last Modified on"
msgstr ""

#. module: membership_delegated_partner_line
#: model:ir.model.fields,field_description:membership_delegated_partner_line.field_account_move_line__is_membership
msgid "Membership"
msgstr ""

#. module: membership_delegated_partner_line
#: model:ir.model,name:membership_delegated_partner_line.model_membership_membership_line
msgid "Membership Line"
msgstr ""

#. module: membership_delegated_partner_line
#: model:ir.model.fields,field_description:membership_delegated_partner_line.field_membership_membership_line__partner
msgid "Partner"
msgstr ""
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * membership_delegated_partner_line
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"

#. module: membership_delegated_partner_line
#: model:ir.model.fields,help:membership_delegated_partner_line.field_account_move_line__is_membership
msgid "Check if the product is eligible for membership."
msgstr ""

#. module: membership_delegated_partner_line
#: model:ir.model.fields,field_description:membership_delegated_partner_line.field_account_move_line__delegated_member_id
msgid "Delegated Member"
msgstr ""

#. module: membership_delegated_partner_line
#: model:ir.model.fields,field_description:membership_delegated_partner_line.field_account_move__display_name
#: model:ir.model.fields,field_description:membership_delegated_partner_line.field_account_move_line__display_name
#: model:ir.model.fields,field_description:membership_delegated_partner_line.field_membership_membership_line__display_name
msgid "Display Name"
msgstr ""

#. module: membership_delegated_partner_line
#: model:ir.model.fields,field_description:membership_delegated_partner_line.field_account_move__id
#: model:ir.model.fields,field_description:membership_delegated_partner_line.field_account_move_line__id
#: model:ir.model.fields,field_description:membership_delegated_partner_line.field_membership_membership_line__id
msgid "ID"
msgstr ""

#. module: membership_delegated_partner_line
#: model:ir.model.fields,field_description:membership_delegated_partner_line.field_account_bank_statement_line__is_membership_invoice
#: model:ir.model.fields,field_description:membership_delegated_partner_line.field_account_move__is_membership_invoice
#: model:ir.model.fields,field_description:membership_delegated_partner_line.field_account_payment__is_membership_invoice
msgid "Is Membership Invoice"
msgstr ""

#. module: membership_delegated_partner_line
#: model:ir.model,name:membership_delegated_partner_line.model_account_move
msgid "Journal Entry"
msgstr ""

#. module: membership_delegated_partner_line
#: model:ir.model,name:membership_delegated_partner_line.model_account_move_line
msgid "Journal Item"
msgstr ""

#. module: membership_delegated_partner_line
#: model:ir.model.fields,field_description:membership_delegated_partner_line.field_account_move____last_update
#: model:ir.model.fields,field_description:membership_delegated_partner_line.field_account_move_line____last_update
#: model:ir.model.fields,field_description:membership_delegated_partner_line.field_membership_membership_line____last_update
msgid "Last Modified on"
msgstr ""

#. module: membership_delegated_partner_line
#: model:ir.model.fields,field_description:membership_delegated_partner_line.field_account_move_line__is_membership
msgid "Membership"
msgstr ""

#. module: membership_delegated_partner_line
#: model:ir.model,name:membership_delegated_partner_line.model_membership_membership_line
msgid "Membership Line"
msgstr ""

#. module: membership_delegated_partner_line
#: model:ir.model.fields,field_description:membership_delegated_partner_line.field_membership_membership_line__partner
msgid "Partner"
msgstr ""
3 changes: 3 additions & 0 deletions membership_delegated_partner_line/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from . import account_move_line
from . import account_move
from . import membership_line
21 changes: 21 additions & 0 deletions membership_delegated_partner_line/models/account_move.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Copyright 2023 Graeme Gellatly
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from odoo import api, fields, models


class AccountMove(models.Model):
_inherit = "account.move"

is_membership_invoice = fields.Boolean(compute="_compute_is_membership_invoice")

@api.depends("invoice_line_ids", "line_ids", "move_type", "line_ids.product_id")
@api.onchange("invoice_line_ids", "line_ids", "move_type")
def _compute_is_membership_invoice(self):
for rec in self:
is_membership_invoice = False
for line in rec.line_ids:
if line.product_id.membership:
is_membership_invoice = True
break
rec.is_membership_invoice = is_membership_invoice
35 changes: 35 additions & 0 deletions membership_delegated_partner_line/models/account_move_line.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Copyright 2023 Graeme Gellatly
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from odoo import api, fields, models


class AccountMoveLine(models.Model):
_inherit = "account.move.line"

delegated_member_id = fields.Many2one(comodel_name="res.partner")
is_membership = fields.Boolean(related="product_id.membership")

def _get_partner_for_membership(self):
"""Auxiliary method for getting the correct membership partner for
certain operations like initial fee check.
"""
self.ensure_one()
return self.delegated_member_id or self.move_id.partner_id

@api.onchange("product_id")
def _onchange_product_id_membership(self):
"""Drop delegated member if not a membership line."""
if not self.product_id.membership:
self.delegated_member_id = False

@api.onchange("delegated_member_id")
def _onchange_delegated_member_id(self):
"""Set description on delegated member change."""
self.name = self._get_computed_name()

def _get_computed_name(self):
name = self.move_id.partner_id.name
if self.delegated_member_id:
name += f" ({self.delegated_member_id.name})"
return name
Loading