From 0abb509f52e58d5979c90ca1b79024ec963d5488 Mon Sep 17 00:00:00 2001 From: Alexandre Fayolle Date: Fri, 27 Sep 2019 09:41:19 +0200 Subject: [PATCH] [IMP] move some notions from agreement_legal to agreement we move the is_template field definition and the agreement.type model from the agreement_legal module to the agreement module. The fields are not displayed by default, unless the feature is enabled through a technical feature group, this is configurable in the agreement_sale module (because agreement in itself has no UI, and agreement_legal enables the feature by default) --- agreement/__manifest__.py | 1 + agreement/models/__init__.py | 1 + agreement/models/agreement.py | 14 ++++- agreement/models/agreement_type.py | 12 +++++ agreement/readme/CONTRIBUTORS.rst | 1 + agreement/readme/DESCRIPTION.rst | 6 +++ agreement/security/agreement_security.xml | 9 ++++ agreement/views/agreement.xml | 6 ++- agreement/views/agreement_type.xml | 54 ++++++++++++++++++++ agreement_legal/models/agreement.py | 9 +--- agreement_legal/models/agreement_type.py | 3 +- agreement_legal/security/res_groups.xml | 2 +- agreement_legal/views/agreement_type.xml | 31 +++++------ agreement_legal_sale/views/sale_order.xml | 9 ++-- agreement_sale/__manifest__.py | 2 + agreement_sale/models/__init__.py | 1 + agreement_sale/models/res_config_settings.py | 14 +++++ agreement_sale/models/sale.py | 6 +++ agreement_sale/security/ir.model.access.csv | 2 + agreement_sale/views/agreement.xml | 4 +- agreement_sale/views/res_config_settings.xml | 48 +++++++++++++++++ agreement_sale/views/sale_order.xml | 19 +++++++ 22 files changed, 217 insertions(+), 37 deletions(-) create mode 100644 agreement/models/agreement_type.py create mode 100644 agreement/views/agreement_type.xml create mode 100644 agreement_sale/models/res_config_settings.py create mode 100644 agreement_sale/views/res_config_settings.xml create mode 100644 agreement_sale/views/sale_order.xml diff --git a/agreement/__manifest__.py b/agreement/__manifest__.py index 96638f92..f340688f 100644 --- a/agreement/__manifest__.py +++ b/agreement/__manifest__.py @@ -16,6 +16,7 @@ 'security/ir.model.access.csv', 'security/agreement_security.xml', 'views/agreement.xml', + 'views/agreement_type.xml', ], 'demo': ['demo/demo.xml'], 'development_status': 'Beta', diff --git a/agreement/models/__init__.py b/agreement/models/__init__.py index 51f4021f..8fc631aa 100644 --- a/agreement/models/__init__.py +++ b/agreement/models/__init__.py @@ -1 +1,2 @@ from . import agreement +from . import agreement_type diff --git a/agreement/models/agreement.py b/agreement/models/agreement.py index b09b4dbc..68bb8e17 100644 --- a/agreement/models/agreement.py +++ b/agreement/models/agreement.py @@ -12,11 +12,23 @@ class Agreement(models.Model): code = fields.Char(required=True, copy=False) name = fields.Char(required=True) partner_id = fields.Many2one( - 'res.partner', string='Partner', ondelete='restrict', required=True, + 'res.partner', string='Partner', ondelete='restrict', domain=[('parent_id', '=', False)]) company_id = fields.Many2one( 'res.company', string='Company', default=lambda self: self.env['res.company']._company_default_get()) + is_template = fields.Boolean( + string="Is a Template?", + default=False, + copy=False, + help="Set if the agreement is a template. " + "Template agreements don't require a partner." + ) + agreement_type_id = fields.Many2one( + 'agreement.type', + string="Agreement Type", + help="Select the type of agreement", + ) active = fields.Boolean(default=True) signature_date = fields.Date() start_date = fields.Date() diff --git a/agreement/models/agreement_type.py b/agreement/models/agreement_type.py new file mode 100644 index 00000000..a35a6482 --- /dev/null +++ b/agreement/models/agreement_type.py @@ -0,0 +1,12 @@ +# Copyright (C) 2018 - TODAY, Pavlov Media +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class AgreementType(models.Model): + _name = "agreement.type" + _description = "Agreement Types" + + name = fields.Char(string="Name", required=True) + active = fields.Boolean(default=True) diff --git a/agreement/readme/CONTRIBUTORS.rst b/agreement/readme/CONTRIBUTORS.rst index bc3bbf22..05342b33 100644 --- a/agreement/readme/CONTRIBUTORS.rst +++ b/agreement/readme/CONTRIBUTORS.rst @@ -1,2 +1,3 @@ * Alexis de Lattre * Yves Goldberg +* Alexandre Fayolle diff --git a/agreement/readme/DESCRIPTION.rst b/agreement/readme/DESCRIPTION.rst index c58e0465..24b6ee5a 100644 --- a/agreement/readme/DESCRIPTION.rst +++ b/agreement/readme/DESCRIPTION.rst @@ -6,3 +6,9 @@ This module adds an *Agreement* object with the following properties: * signature date. * start date. * end date. + +Optionally, you can also enable using: +* agreement types +* a flag to set an agreement as a template agreement + +(Install agreement_sale to get the configuration settings for these). diff --git a/agreement/security/agreement_security.xml b/agreement/security/agreement_security.xml index d645ef6d..9784e6b7 100644 --- a/agreement/security/agreement_security.xml +++ b/agreement/security/agreement_security.xml @@ -13,5 +13,14 @@ ['|', ('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id])] + + Use agreement type + + + + + Use agreement template + + diff --git a/agreement/views/agreement.xml b/agreement/views/agreement.xml index 15f284ce..8754247c 100644 --- a/agreement/views/agreement.xml +++ b/agreement/views/agreement.xml @@ -21,7 +21,11 @@ - + + + diff --git a/agreement/views/agreement_type.xml b/agreement/views/agreement_type.xml new file mode 100644 index 00000000..1ca06a47 --- /dev/null +++ b/agreement/views/agreement_type.xml @@ -0,0 +1,54 @@ + + + + + Agreement Type List + agreement.type + + + + + + + + + + Agreement Type Form + agreement.type + +
+
+ +
+ +
+
+
+
+
+
+ + + agreement.type.search + agreement.type + + + + + + + + + + + Agreement Types + agreement.type + tree,form + +
diff --git a/agreement_legal/models/agreement.py b/agreement_legal/models/agreement.py index 9421dafe..d5376669 100644 --- a/agreement_legal/models/agreement.py +++ b/agreement_legal/models/agreement.py @@ -10,11 +10,6 @@ class Agreement(models.Model): # General name = fields.Char(string="Title", required=True) - is_template = fields.Boolean( - string="Is a Template?", - default=False, - copy=False, - help="Make this agreement a template.") version = fields.Integer( string="Version", default=1, @@ -170,10 +165,8 @@ class Agreement(models.Model): string="Dynamic Parties", help="Compute dynamic parties") agreement_type_id = fields.Many2one( - "agreement.type", - string="Agreement Type", track_visibility="onchange", - help="Select the type of agreement.") + ) agreement_subtype_id = fields.Many2one( "agreement.subtype", string="Agreement Sub-type", diff --git a/agreement_legal/models/agreement_type.py b/agreement_legal/models/agreement_type.py index 3422ec93..13fc862a 100644 --- a/agreement_legal/models/agreement_type.py +++ b/agreement_legal/models/agreement_type.py @@ -5,10 +5,9 @@ from odoo import fields, models class AgreementType(models.Model): - _name = "agreement.type" + _inherit = "agreement.type" _description = "Agreement Types" - name = fields.Char(string="Name", required=True) agreement_subtypes_ids = fields.One2many( "agreement.subtype", "agreement_type_id", diff --git a/agreement_legal/security/res_groups.xml b/agreement_legal/security/res_groups.xml index 8cef3746..83003e64 100644 --- a/agreement_legal/security/res_groups.xml +++ b/agreement_legal/security/res_groups.xml @@ -9,7 +9,7 @@ Read-Only Users - + diff --git a/agreement_legal/views/agreement_type.xml b/agreement_legal/views/agreement_type.xml index 1d86cab5..6d15cc29 100644 --- a/agreement_legal/views/agreement_type.xml +++ b/agreement_legal/views/agreement_type.xml @@ -5,33 +5,28 @@ Agreement Type List agreement.type + - - + - - + + Agreement Type Form agreement.type + -
- -
-
- - - - - -
-
+ + + + + + +
diff --git a/agreement_legal_sale/views/sale_order.xml b/agreement_legal_sale/views/sale_order.xml index 8b607a89..8a077c3d 100644 --- a/agreement_legal_sale/views/sale_order.xml +++ b/agreement_legal_sale/views/sale_order.xml @@ -7,12 +7,11 @@ sale.order.agreement.form.view sale.order - + - - + + + {'invisible': [('agreement_id', '=', False)]} diff --git a/agreement_sale/__manifest__.py b/agreement_sale/__manifest__.py index 29ef5bc1..80c8c166 100644 --- a/agreement_sale/__manifest__.py +++ b/agreement_sale/__manifest__.py @@ -17,6 +17,8 @@ 'data': [ 'security/ir.model.access.csv', 'views/agreement.xml', + 'views/sale_order.xml', + 'views/res_config_settings.xml', ], 'development_status': 'Beta', 'maintainers': [ diff --git a/agreement_sale/models/__init__.py b/agreement_sale/models/__init__.py index 8a0dc04e..534c392d 100644 --- a/agreement_sale/models/__init__.py +++ b/agreement_sale/models/__init__.py @@ -1 +1,2 @@ from . import sale +from . import res_config_settings diff --git a/agreement_sale/models/res_config_settings.py b/agreement_sale/models/res_config_settings.py new file mode 100644 index 00000000..167bc9c4 --- /dev/null +++ b/agreement_sale/models/res_config_settings.py @@ -0,0 +1,14 @@ +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = 'res.config.settings' + + group_use_agreement_type = fields.Boolean( + 'Use agreement types', + implied_group='agreement.group_use_agreement_type' + ) + group_use_agreement_template = fields.Boolean( + 'Use agreement template', + implied_group='agreement.group_use_agreement_template' + ) diff --git a/agreement_sale/models/sale.py b/agreement_sale/models/sale.py index 556db2f7..bf97d9de 100644 --- a/agreement_sale/models/sale.py +++ b/agreement_sale/models/sale.py @@ -12,3 +12,9 @@ class SaleOrder(models.Model): comodel_name='agreement', string='Agreement', ondelete='restrict', track_visibility='onchange', readonly=True, copy=False, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}) + + agreement_type_id = fields.Many2one( + comodel_name="agreement.type", string="Agreement Type", + ondelete="restrict", + track_visibility='onchange', readonly=True, copy=True, + states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}) diff --git a/agreement_sale/security/ir.model.access.csv b/agreement_sale/security/ir.model.access.csv index 4b3915cf..f6e188f4 100644 --- a/agreement_sale/security/ir.model.access.csv +++ b/agreement_sale/security/ir.model.access.csv @@ -1,2 +1,4 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink agreement.access_agreement_full,Full access on agreement grp,agreement.model_agreement,sales_team.group_sale_manager,1,1,1,1 +agreement_sale.access_agreement_type_full,Full access on agreement type grp,agreement.model_agreement_type,sales_team.group_sale_manager,1,1,1,1 +agreement_sale.access_agreement_type_read,Read access on agreement grp,agreement.model_agreement_type,base.group_user,1,0,0,0 diff --git a/agreement_sale/views/agreement.xml b/agreement_sale/views/agreement.xml index 43a2ea5d..cc30d5ce 100644 --- a/agreement_sale/views/agreement.xml +++ b/agreement_sale/views/agreement.xml @@ -2,7 +2,9 @@ - + diff --git a/agreement_sale/views/res_config_settings.xml b/agreement_sale/views/res_config_settings.xml new file mode 100644 index 00000000..1a24962c --- /dev/null +++ b/agreement_sale/views/res_config_settings.xml @@ -0,0 +1,48 @@ + + + + + res.config.settings.view.form.inherit.agreement + res.config.settings + + + + +

Agreements

+
+
+
+ +
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
diff --git a/agreement_sale/views/sale_order.xml b/agreement_sale/views/sale_order.xml new file mode 100644 index 00000000..e7e5b5ea --- /dev/null +++ b/agreement_sale/views/sale_order.xml @@ -0,0 +1,19 @@ + + + + sale.order.agreement.form.view + sale.order + + + + + + + + + + + +