From 7d40232093406d228a1c386791ef117cd434a030 Mon Sep 17 00:00:00 2001 From: Bhavesh Odedra Date: Tue, 16 Oct 2018 17:20:33 +0530 Subject: [PATCH] [ENH] OCA Standards --- agreement/README.md | 1 + agreement/__init__.py | 4 +- agreement/__manifest__.py | 53 +- agreement/controllers/__init__.py | 3 - agreement/controllers/controllers.py | 2 - agreement/demo/demo.xml | 30 -- agreement/models/__init__.py | 2 + agreement/models/agreement_clause.py | 90 +++- agreement/models/agreement_increasetype.py | 28 +- agreement/models/agreement_renewaltype.py | 23 +- agreement/models/agreement_section.py | 91 +++- agreement/models/agreement_stage.py | 36 +- agreement/models/agreement_status.py | 15 +- agreement/models/agreement_subtype.py | 20 +- agreement/models/agreement_type.py | 21 +- agreement/models/partner_agreement.py | 528 ++++++++++++++---- agreement/models/product_template.py | 12 +- agreement/models/res_partner.py | 13 +- agreement/security/ir.model.access.csv | 16 +- agreement/security/security.xml | 4 - agreement/views/agreement.xml | 587 ++++++++++----------- agreement/views/agreement_clause.xml | 141 +++-- agreement/views/agreement_increasetype.xml | 74 ++- agreement/views/agreement_renewaltype.xml | 68 ++- agreement/views/agreement_section.xml | 147 +++--- agreement/views/agreement_stages.xml | 70 ++- agreement/views/agreement_subtype.xml | 68 ++- agreement/views/agreement_type.xml | 68 ++- agreement/views/reports.xml | 69 +-- agreement/views/res_partner.xml | 30 +- 30 files changed, 1383 insertions(+), 931 deletions(-) delete mode 100644 agreement/controllers/__init__.py delete mode 100644 agreement/controllers/controllers.py delete mode 100644 agreement/demo/demo.xml delete mode 100644 agreement/security/security.xml diff --git a/agreement/README.md b/agreement/README.md index fe016e1a..b467cfb2 100644 --- a/agreement/README.md +++ b/agreement/README.md @@ -24,6 +24,7 @@ Images Contributors * Patrick Wilson +* Bhavesh Odedra Do not contact contributors directly about support or help with technical issues. diff --git a/agreement/__init__.py b/agreement/__init__.py index aa4d0fd6..073035d1 100644 --- a/agreement/__init__.py +++ b/agreement/__init__.py @@ -1,4 +1,4 @@ -# -*- coding: utf-8 -*- +# Copyright (C) 2018 - TODAY, Pavlov Media +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from . import controllers from . import models diff --git a/agreement/__manifest__.py b/agreement/__manifest__.py index 899c540f..89a4cb90 100644 --- a/agreement/__manifest__.py +++ b/agreement/__manifest__.py @@ -1,31 +1,30 @@ -# -*- coding: utf-8 -*- +# Copyright (C) 2018 - TODAY, Pavlov Media +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + { - 'name': "Agreements", - 'summary': "Manage Agreements, LOI and Contracts", - 'author': "Pavlov Media", - 'website': "https://github.com/OCA/contract", - 'category': 'Partner', - 'version': '11.0.0.0.1', - 'depends': [ - 'mail', - 'sale_management' + "name": "Agreements", + "summary": "Manage Agreements, LOI and Contracts", + "author": "Pavlov Media, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/contract", + "category": "Partner", + "license": "AGPL-3", + "version": "11.0.0.0.1", + "depends": [ + "mail", + "sale_management" ], - 'data': [ - 'views/reports.xml', - 'views/agreement.xml', - 'views/agreement_clause.xml', - 'views/agreement_section.xml', - 'views/agreement_stages.xml', - 'views/agreement_type.xml', - 'views/agreement_subtype.xml', - 'views/agreement_renewaltype.xml', - 'views/agreement_increasetype.xml', - 'views/res_partner.xml', - 'security/security.xml', - 'security/ir.model.access.csv', + "data": [ + "views/reports.xml", + "views/agreement.xml", + "views/agreement_clause.xml", + "views/agreement_section.xml", + "views/agreement_stages.xml", + "views/agreement_type.xml", + "views/agreement_subtype.xml", + "views/agreement_renewaltype.xml", + "views/agreement_increasetype.xml", + "views/res_partner.xml", + "security/ir.model.access.csv", ], - 'demo': [ - 'demo/demo.xml', - ], - 'application': True, + "application": True, } diff --git a/agreement/controllers/__init__.py b/agreement/controllers/__init__.py deleted file mode 100644 index b0f26a9a..00000000 --- a/agreement/controllers/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# -*- coding: utf-8 -*- - -from . import controllers diff --git a/agreement/controllers/controllers.py b/agreement/controllers/controllers.py deleted file mode 100644 index b97fd18c..00000000 --- a/agreement/controllers/controllers.py +++ /dev/null @@ -1,2 +0,0 @@ -# -*- coding: utf-8 -*- -from odoo import http diff --git a/agreement/demo/demo.xml b/agreement/demo/demo.xml deleted file mode 100644 index b2d1b70c..00000000 --- a/agreement/demo/demo.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/agreement/models/__init__.py b/agreement/models/__init__.py index 25f33f61..253dd9d6 100644 --- a/agreement/models/__init__.py +++ b/agreement/models/__init__.py @@ -1,3 +1,5 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + from . import partner_agreement from . import agreement_clause from . import agreement_section diff --git a/agreement/models/agreement_clause.py b/agreement/models/agreement_clause.py index 553faa75..765d951f 100644 --- a/agreement/models/agreement_clause.py +++ b/agreement/models/agreement_clause.py @@ -1,28 +1,80 @@ +# Copyright (C) 2018 - TODAY, Pavlov Media +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + from odoo import models, fields, api -#Main Agreement clause Records Model + +# Main Agreement clause Records Model class AgreementClause(models.Model): - _name = 'partner_agreement.clause' - _order = 'clause_sequence' + _name = 'agreement.clause' + _order = 'clause_sequence' -#General - name = fields.Char(string="Title", required=True) - clause_sequence = fields.Integer(string="Sequence") - agreement = fields.Many2one('partner_agreement.agreement', string="Agreement", ondelete="cascade") - section = fields.Many2one('partner_agreement.section', string="Section", ondelete="cascade") - content = fields.Html(string="Clause Content") - active = fields.Boolean(string="Active", default=True, help="If unchecked, it will allow you to hide the agreement without removing it.") + # General + name = fields.Char( + string="Title", + required=True + ) + clause_sequence = fields.Integer( + string="Sequence" + ) + agreement_id = fields.Many2one( + 'agreement', + string="Agreement", + ondelete="cascade" + ) + section_id = fields.Many2one( + 'agreement.section', + string="Section", + ondelete="cascade" + ) + content = fields.Html( + string="Clause Content" + ) + active = fields.Boolean( + string="Active", + default=True, + help="If unchecked, it will allow you to hide the agreement without " + "removing it." + ) -#Placeholder fields - model_id = fields.Many2one('ir.model', string="Applies to", help="The type of document this template can be used with.") - model_object_field = fields.Many2one('ir.model.fields', string="Field", help="Select target field from the related document model. If it is a relationship field you will be able to select a target field at the destination of the relationship.") - sub_object = fields.Many2one('ir.model', string="Sub-model", help="When a relationship field is selected as first field, this field shows the document model the relationship goes to.") - sub_model_object_field = fields.Many2one('ir.model.fields', string="Sub-field", help="When a relationship field is selected as first field, this field lets you select the target field within the destination document model (sub-model).") - null_value = fields.Char(string="Default Value", help="Optional value to use if the target field is empty.") - copyvalue = fields.Char(string="Placeholder Expression", help="Final placeholder expression, to be copy-pasted in the desired template field.") + # Placeholder fields + model_id = fields.Many2one( + 'ir.model', + string="Applies to", + help="The type of document this template can be used with." + ) + model_object_field_id = fields.Many2one( + 'ir.model.fields', + string="Field", + help="Select target field from the related document model. If it is a " + "relationship field you will be able to select a target field at " + "the destination of the relationship." + ) + sub_object_id = fields.Many2one( + 'ir.model', + string="Sub-model", + help="When a relationship field is selected as first field, this " + "field shows the document model the relationship goes to." + ) + sub_model_object_field_id = fields.Many2one( + 'ir.model.fields', + string="Sub-field", + help="When a relationship field is selected as first field, this " + "field lets you select the target field within the destination " + "document model (sub-model)." + ) + null_value = fields.Char( + string="Default Value", + help="Optional value to use if the target field is empty." + ) + copyvalue = fields.Char( + string="Placeholder Expression", + help="Final placeholder expression, to be copy-pasted in the desired " + "template field." + ) - @api.model - def create(self, vals): + @api.model + def create(self, vals): seq = self.env['ir.sequence'].next_by_code('agreement.clause') or '/' vals['clause_sequence'] = seq return super(AgreementClause, self).create(vals) diff --git a/agreement/models/agreement_increasetype.py b/agreement/models/agreement_increasetype.py index b83a85a7..1988112b 100644 --- a/agreement/models/agreement_increasetype.py +++ b/agreement/models/agreement_increasetype.py @@ -1,10 +1,26 @@ +# Copyright (C) 2018 - TODAY, Pavlov Media +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + from odoo import models, fields -#Main Agreement Increase Type Records Model + +# Main Agreement Increase Type Records Model class AgreementIncreaseType(models.Model): - _name = 'partner_agreement.increasetype' + _name = 'agreement.increasetype' -#General - name = fields.Char(string="Title", required=True, help="Increase types describe any increases that may happen during the contract.") - description = fields.Text(string="Description", required=True, help="Description of the renewal type.") - increase_percent = fields.Integer(string="Increase Percentage", help="Percentage that the amount will increase.") + # General + name = fields.Char( + string="Title", + required=True, + help="Increase types describe any increases that may happen during " + "the contract." + ) + description = fields.Text( + string="Description", + required=True, + help="Description of the renewal type." + ) + increase_percent = fields.Integer( + string="Increase Percentage", + help="Percentage that the amount will increase." + ) diff --git a/agreement/models/agreement_renewaltype.py b/agreement/models/agreement_renewaltype.py index b46d89e7..f8dfc00a 100644 --- a/agreement/models/agreement_renewaltype.py +++ b/agreement/models/agreement_renewaltype.py @@ -1,9 +1,22 @@ +# Copyright (C) 2018 - TODAY, Pavlov Media +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + from odoo import models, fields -#Main Agreement Section Records Model + +# Main Agreement Section Records Model class AgreementRenewalType(models.Model): - _name = 'partner_agreement.renewaltype' + _name = 'agreement.renewaltype' -#General - name = fields.Char(string="Title", required=True, help="Renewal types describe what happens after the agreement/contract expires.") - description = fields.Text(string="Description", required=True, help="Description of the renewal type.") + # General + name = fields.Char( + string="Title", + required=True, + help="Renewal types describe what happens after the " + "agreement/contract expires." + ) + description = fields.Text( + string="Description", + required=True, + help="Description of the renewal type." + ) diff --git a/agreement/models/agreement_section.py b/agreement/models/agreement_section.py index 87af1308..09c9acdd 100644 --- a/agreement/models/agreement_section.py +++ b/agreement/models/agreement_section.py @@ -1,27 +1,80 @@ +# Copyright (C) 2018 - TODAY, Pavlov Media +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + from odoo import models, fields, api -#Main Agreement Section Records Model + +# Main Agreement Section Records Model class AgreementSection(models.Model): - _name = 'partner_agreement.section' - _order = 'section_sequence' + _name = 'agreement.section' + _order = 'section_sequence' + + # General + name = fields.Char( + string="Title", + required=True + ) + section_sequence = fields.Integer( + string="Sequence" + ) + agreement_id = fields.Many2one( + 'agreement', + string="Agreement", + ondelete="cascade" + ) + clauses_ids = fields.One2many( + 'agreement.clause', + 'section_id', + string="Clauses" + ) + content = fields.Html( + string="Section Content" + ) + active = fields.Boolean( + string="Active", + default=True, + help="If unchecked, it will allow you to hide the agreement without " + "removing it." + ) -#General - name = fields.Char(string="Title", required=True) - section_sequence = fields.Integer(string="Sequence") - agreement = fields.Many2one('partner_agreement.agreement', string="Agreement", ondelete="cascade") - clauses = fields.One2many('partner_agreement.clause', 'section', string="Clauses") - content = fields.Html(string="Section Content") - active = fields.Boolean(string="Active", default=True, help="If unchecked, it will allow you to hide the agreement without removing it.") -#Placeholder fields - model_id = fields.Many2one('ir.model', string="Applies to", help="The type of document this template can be used with.") - model_object_field = fields.Many2one('ir.model.fields', string="Field", help="Select target field from the related document model. If it is a relationship field you will be able to select a target field at the destination of the relationship.") - sub_object = fields.Many2one('ir.model', string="Sub-model", help="When a relationship field is selected as first field, this field shows the document model the relationship goes to.") - sub_model_object_field = fields.Many2one('ir.model.fields', string="Sub-field", help="When a relationship field is selected as first field, this field lets you select the target field within the destination document model (sub-model).") - null_value = fields.Char(string="Default Value", help="Optional value to use if the target field is empty.") - copyvalue = fields.Char(string="Placeholder Expression", help="Final placeholder expression, to be copy-pasted in the desired template field.") + # Placeholder fields + model_id = fields.Many2one( + 'ir.model', + string="Applies to", + help="The type of document this template can be used with." + ) + model_object_field_id = fields.Many2one( + 'ir.model.fields', + string="Field", + help="Select target field from the related document model. If it is a " + "relationship field you will be able to select a target field at " + "the destination of the relationship." + ) + sub_object_id = fields.Many2one( + 'ir.model', + string="Sub-model", + help="When a relationship field is selected as first field, this " + "field shows the document model the relationship goes to." + ) + sub_model_object_field_id = fields.Many2one( + 'ir.model.fields', + string="Sub-field", + help="When a relationship field is selected as first field, this " + "field lets you select the target field within the destination " + "document model (sub-model)." + ) + null_value = fields.Char( + string="Default Value", + help="Optional value to use if the target field is empty." + ) + copyvalue = fields.Char( + string="Placeholder Expression", + help="Final placeholder expression, to be copy-pasted in the desired " + "template field." + ) - @api.model - def create(self, vals): + @api.model + def create(self, vals): seq = self.env['ir.sequence'].next_by_code('agreement.section') or '/' vals['section_sequence'] = seq return super(AgreementSection, self).create(vals) diff --git a/agreement/models/agreement_stage.py b/agreement/models/agreement_stage.py index 1d967448..beb8dd43 100644 --- a/agreement/models/agreement_stage.py +++ b/agreement/models/agreement_stage.py @@ -1,12 +1,30 @@ +# Copyright (C) 2018 - TODAY, Pavlov Media +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + from odoo import models, fields -#Main Agreement Section Records Model + +# Main Agreement Section Records Model class AgreementStage(models.Model): - _name = 'partner_agreement.stage' - _order = 'sequence' - -#General - name = fields.Char(string="Stage Name", required=True) - description = fields.Text(string="Description", required=False) - sequence = fields.Integer(string="Sequence", default="1", required=False) - fold = fields.Boolean(string="Is Folded", required=False, help="This stage is folded in the kanban view by deafault.") + _name = 'agreement.stage' + _order = 'sequence' + + # General + name = fields.Char( + string="Stage Name", + required=True + ) + description = fields.Text( + string="Description", + required=False + ) + sequence = fields.Integer( + string="Sequence", + default="1", + required=False + ) + fold = fields.Boolean( + string="Is Folded", + required=False, + help="This stage is folded in the kanban view by deafault." + ) diff --git a/agreement/models/agreement_status.py b/agreement/models/agreement_status.py index e5d95cda..6d6a190c 100644 --- a/agreement/models/agreement_status.py +++ b/agreement/models/agreement_status.py @@ -1,8 +1,15 @@ +# Copyright (C) 2018 - TODAY, Pavlov Media +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + from odoo import models, fields -#Main Agreement Status Records Model + +# Main Agreement Status Records Model class AgreementStatus(models.Model): - _name = 'partner_agreement.type' + _name = 'agreement.type' -#General - name = fields.Char(string="Title", required=True) + # General + name = fields.Char( + string="Title", + required=True + ) diff --git a/agreement/models/agreement_subtype.py b/agreement/models/agreement_subtype.py index fe95cfe3..1959e02a 100644 --- a/agreement/models/agreement_subtype.py +++ b/agreement/models/agreement_subtype.py @@ -1,9 +1,19 @@ +# Copyright (C) 2018 - TODAY, Pavlov Media +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + from odoo import models, fields -#Main Agreement Section Records Model + +# Main Agreement Section Records Model class AgreementSubtype(models.Model): - _name = 'partner_agreement.subtype' + _name = 'agreement.subtype' -#General - name = fields.Char(string="Title", required=True) - agreement_type = fields.Many2one('partner_agreement.type', string="Agreement Type") + # General + name = fields.Char( + string="Title", + required=True + ) + agreement_type_id = fields.Many2one( + 'agreement.type', + string="Agreement Type" + ) diff --git a/agreement/models/agreement_type.py b/agreement/models/agreement_type.py index c492a3a7..b87cc489 100644 --- a/agreement/models/agreement_type.py +++ b/agreement/models/agreement_type.py @@ -1,9 +1,20 @@ +# Copyright (C) 2018 - TODAY, Pavlov Media +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + from odoo import models, fields -#Main Agreement Section Records Model + +# Main Agreement Section Records Model class AgreementType(models.Model): - _name = 'partner_agreement.type' + _name = 'agreement.type' -#General - name = fields.Char(string="Title", required=True) - agreement_subtypes = fields.One2many('partner_agreement.subtype', 'agreement_type', string="Agreement") + # General + name = fields.Char( + string="Title", + required=True + ) + agreement_subtypes_ids = fields.One2many( + 'agreement.subtype', + 'agreement_type_id', + string="Agreement" + ) diff --git a/agreement/models/partner_agreement.py b/agreement/models/partner_agreement.py index 5a62aed0..a9b3eb24 100644 --- a/agreement/models/partner_agreement.py +++ b/agreement/models/partner_agreement.py @@ -1,123 +1,435 @@ +# Copyright (C) 2018 - TODAY, Pavlov Media +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + from odoo import models, fields, api -#Main Agreement Records Model + +# Main Agreement Records Model class Agreement(models.Model): - _name = 'partner_agreement.agreement' - _inherit = ['mail.thread'] + _name = 'agreement' + _inherit = ['mail.thread'] -#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, help="The versions are used to keep track of document history and previous versions can be referenced.", copy=False) - revision = fields.Integer(string="Revision", default=0, help="The revision will increase with every save event.", copy=False) - description = fields.Text(string="Description", help="Description of the agreement", track_visibility='onchange') - start_date = fields.Date(string="Start Date", help="When the agreement starts.", track_visibility='onchange') - end_date = fields.Date(string="End Date", help="When the agreement ends.", track_visibility='onchange') - color = fields.Integer() - active = fields.Boolean(string="Active", default=True, help="If unchecked, it will allow you to hide the agreement without removing it.") - company_signed_date = fields.Date(string="Company Signed Date", help="Date the contract was signed by Company.", track_visibility='onchange') - customer_signed_date = fields.Date(string="Customer Signed Date", help="Date the contract was signed by Customer.", track_visibility='onchange') - customer_term = fields.Integer(string="Customer Term (Months)", help="Number of months this agreement/contract is in effect with customer.", track_visibility='onchange') - vendor_term = fields.Integer(string="Vendor Term (Months)", help="Number of months this agreement/contract is in effect with vendor.", track_visibility='onchange') - expiration_notice = fields.Integer(string="Exp. Notice (Days)", help="Number of Days before expiration to be notified.", track_visibility='onchange') - change_notice = fields.Integer(string="Change Notice (Days)", help="Number of Days to be notified before changes.", track_visibility='onchange') - special_terms = fields.Text(string="Special Terms", help="Any terms that you have agreed to and want to track on the agreement/contract.", track_visibility='onchange') - contract_value = fields.Monetary(compute='_compute_contract_value', string="Contract Value", help="Total value of the contract over ther entire term.", store=True) - contract_id = fields.Char(string="ID", help="ID used for internal contract tracking.", track_visibility='onchange') - total_company_mrc = fields.Monetary('Company MRC', currency_field='currency_id', help="Total company monthly recurring costs.")#, compute='_compute_company_mrc') - total_customer_mrc = fields.Monetary('Customer MRC', currency_field='currency_id', help="Total custemer monthly recurring costs.") - total_company_nrc = fields.Monetary('Company NRC', currency_field='currency_id', help="Total company non-recurring costs.") - total_customer_nrc = fields.Monetary('Customer NRC', currency_field='currency_id', help="Total custemer non-monthly recurring costs.") - increase_type = fields.Many2one('partner_agreement.increasetype', string="Increase Type", help="The amount that certain rates may increase.", track_visibility='onchange') - termination_requested = fields.Date(string="Termination Requested Date", help="Date that a request for termination was received.", track_visibility='onchange') - termination_date = fields.Date(string="Termination Date", help="Date that the contract was terminated.", track_visibility='onchange') - customer_address = fields.Char(related='customer.contact_address', string="Address") - customer_street = fields.Char(related='customer.street', string="Street") - customer_street2 = fields.Char(related='customer.street2', string="Street 2") - customer_city = fields.Char(related='customer.city', string="City") - customer_state = fields.Many2one(related='customer.state_id', string="State") - customer_zip = fields.Char(related='customer.zip', string="Zip") - vendor_address = fields.Char(related='vendor.contact_address', string="Address") - vendor_street = fields.Char(related='vendor.street', string="Street") - vendor_street2 = fields.Char(related='vendor.street2', string="Street 2") - vendor_city = fields.Char(related='vendor.city', string="City") - vendor_state = fields.Many2one(related='vendor.state_id', string="State") - vendor_zip = fields.Char(related='vendor.zip', string="Zip") - reviewed_date = fields.Date(string="Reviewed Date", track_visibility='onchange') - reviewed_by = fields.Many2one('res.users', string="Reviewed By", track_visibility='onchange') - approved_date = fields.Date(string="Approved Date", track_visibility='onchange') - approved_by = fields.Many2one('res.users', string="Approved By", track_visibility='onchange') + # 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, + copy=False, + help="The versions are used to keep track of document history and " + "previous versions can be referenced." + ) + revision = fields.Integer( + string="Revision", + default=0, + copy=False, + help="The revision will increase with every save event." + ) + description = fields.Text( + string="Description", + track_visibility='onchange', + help="Description of the agreement" + ) + start_date = fields.Date( + string="Start Date", + track_visibility='onchange', + help="When the agreement starts." + ) + end_date = fields.Date( + string="End Date", + track_visibility='onchange', + help="When the agreement ends." + ) + color = fields.Integer() + active = fields.Boolean( + string="Active", + default=True, + help="If unchecked, it will allow you to hide the agreement without " + "removing it." + ) + company_signed_date = fields.Date( + string="Company Signed Date", + track_visibility='onchange', + help="Date the contract was signed by Company." + ) + customer_signed_date = fields.Date( + string="Customer Signed Date", + track_visibility='onchange', + help="Date the contract was signed by Customer." + ) + customer_term = fields.Integer( + string="Customer Term (Months)", + track_visibility='onchange', + help="Number of months this agreement/contract is in effect with " + "customer." + ) + vendor_term = fields.Integer( + string="Vendor Term (Months)", + track_visibility='onchange', + help="Number of months this agreement/contract is in effect with " + "vendor." + ) + expiration_notice = fields.Integer( + string="Exp. Notice (Days)", + track_visibility='onchange', + help="Number of Days before expiration to be notified." + ) + change_notice = fields.Integer( + string="Change Notice (Days)", + track_visibility='onchange', + help="Number of Days to be notified before changes." + ) + special_terms = fields.Text( + string="Special Terms", + track_visibility='onchange', + help="Any terms that you have agreed to and want to track on the " + "agreement/contract." + ) + contract_value = fields.Monetary( + compute='_compute_contract_value', + string="Contract Value", + help="Total value of the contract over ther entire term.", + store=True + ) + contract_id = fields.Char( + string="ID", + track_visibility='onchange', + help="ID used for internal contract tracking.") + total_company_mrc = fields.Monetary( + 'Company MRC', + currency_field='currency_id', + help="Total company monthly recurring costs." + ) + total_customer_mrc = fields.Monetary( + 'Customer MRC', + currency_field='currency_id', + help="Total custemer monthly recurring costs." + ) + total_company_nrc = fields.Monetary( + 'Company NRC', + currency_field='currency_id', + help="Total company non-recurring costs." + ) + total_customer_nrc = fields.Monetary( + 'Customer NRC', + currency_field='currency_id', + help="Total custemer non-monthly recurring costs." + ) + increase_type_id = fields.Many2one( + 'agreement.increasetype', + string="Increase Type", + track_visibility='onchange', + help="The amount that certain rates may increase." + ) + termination_requested = fields.Date( + string="Termination Requested Date", + track_visibility='onchange', + help="Date that a request for termination was received." + ) + termination_date = fields.Date( + string="Termination Date", + track_visibility='onchange', + help="Date that the contract was terminated." + ) + customer_address = fields.Char( + related='customer_id.contact_address', + string="Address" + ) + customer_street = fields.Char( + related='customer_id.street', + string="Street" + ) + customer_street2 = fields.Char( + related='customer_id.street2', + string="Street 2" + ) + customer_city = fields.Char( + related='customer_id.city', + string="City" + ) + customer_state_id = fields.Many2one( + related='customer_id.state_id', + string="State" + ) + customer_zip = fields.Char( + related='customer_id.zip', + string="Zip" + ) + vendor_address = fields.Char( + related='vendor_id.contact_address', + string="Address" + ) + vendor_street = fields.Char( + related='vendor_id.street', + string="Street" + ) + vendor_street2 = fields.Char( + related='vendor_id.street2', + string="Street 2" + ) + vendor_city = fields.Char( + related='vendor_id.city', + string="City" + ) + vendor_state_id = fields.Many2one( + related='vendor_id.state_id', + string="State" + ) + vendor_zip = fields.Char( + related='vendor_id.zip', + string="Zip" + ) + reviewed_date = fields.Date( + string="Reviewed Date", + track_visibility='onchange' + ) + reviewed_user_id = fields.Many2one( + 'res.users', + string="Reviewed By", + track_visibility='onchange' + ) + approved_date = fields.Date( + string="Approved Date", + track_visibility='onchange' + ) + approved_user_id = fields.Many2one( + 'res.users', + string="Approved By", + track_visibility='onchange' + ) - currency_id = fields.Many2one('res.currency', string='Currency') - customer = fields.Many2one('res.partner', string="Customer", copy=True, help="The customer this agreement is related to (If Applicable).") - vendor = fields.Many2one('res.partner', string="Vendor", copy=True, help="The vendor this agreement is related to (If Applicable).") - customer_contact = fields.Many2one('res.partner', string="Customer Contact", copy=True, help="The primary customer contact (If Applicable).") - customer_contact_phone = fields.Char(related='customer_contact.phone', string="Phone") - customer_contact_email = fields.Char(related='customer_contact.email', string="Email") + currency_id = fields.Many2one( + 'res.currency', + string='Currency' + ) + customer_id = fields.Many2one( + 'res.partner', + string="Customer", + copy=True, + help="The customer this agreement is related to (If Applicable)." + ) + vendor_id = fields.Many2one( + 'res.partner', + string="Vendor", + copy=True, + help="The vendor this agreement is related to (If Applicable)." + ) + customer_contact_id = fields.Many2one( + 'res.partner', + string="Customer Contact", + copy=True, + help="The primary customer contact (If Applicable)." + ) + customer_contact_phone = fields.Char( + related='customer_contact_id.phone', + string="Phone" + ) + customer_contact_email = fields.Char( + related='customer_contact_id.email', + string="Email" + ) - vendor_contact = fields.Many2one('res.partner', string="Vendor Contact", copy=True, help="The primary vendor contact (If Applicable).") - vendor_contact_phone = fields.Char(related='vendor_contact.phone', string="Phone") - vendor_contact_email = fields.Char(related='vendor_contact.email', string="Email") - type = fields.Many2one('partner_agreement.type', string="Agreement Type", help="Select the type of agreement.", track_visibility='onchange') - subtype = fields.Many2one('partner_agreement.subtype', string="Agreement Sub-type", help="Select the sub-type of this agreement. Sub-Types are related to agreement types.", track_visibility='onchange') - sale_order = fields.Many2one('sale.order', string="Sales Order", help="Select the Sales Order that this agreement is related to.", copy=False, track_visibility='onchange') - payment_term = fields.Many2one('account.payment.term', string="Payment Term", help="Terms of payments.", track_visibility='onchange') - assigned_to = fields.Many2one('res.users', string="Assigned To", help="Select the user who manages this agreement.", track_visibility='onchange') - company_signed_by = fields.Many2one('res.users', string="Company Signed By", help="The user at our company who authorized/signed the agreement or contract.", track_visibility='onchange') - customer_signed_by = fields.Many2one('res.partner', string="Customer Signed By", help="Contact on the account that signed the agreement/contract.", track_visibility='onchange') - parent_agreement = fields.Many2one('partner_agreement.agreement', string="Parent Agreement", help="Link this agreement to a parent agreement. For example if this agreement is an amendment to another agreement. This list will only show other agreements related to the same account.") - renewal_type = fields.Many2one('partner_agreement.renewaltype', string="Renewal Type", help="Describes what happens after the contract expires.", track_visibility='onchange') + vendor_contact_id = fields.Many2one( + 'res.partner', + string="Vendor Contact", + copy=True, + help="The primary vendor contact (If Applicable)." + ) + vendor_contact_phone = fields.Char( + related='vendor_contact_id.phone', + string="Phone" + ) + vendor_contact_email = fields.Char( + related='vendor_contact_id.email', + string="Email" + ) + 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", + track_visibility='onchange', + help="Select the sub-type of this agreement. Sub-Types are related to " + "agreement types." + ) + sale_order_id = fields.Many2one( + 'sale.order', + string="Sales Order", + track_visibility='onchange', + copy=False, + help="Select the Sales Order that this agreement is related to." + ) + payment_term_id = fields.Many2one( + 'account.payment.term', + string="Payment Term", + track_visibility='onchange', + help="Terms of payments." + ) + assigned_user_id = fields.Many2one( + 'res.users', + string="Assigned To", + track_visibility='onchange', + help="Select the user who manages this agreement." + ) + company_signed_user_id = fields.Many2one( + 'res.users', + string="Company Signed By", + track_visibility='onchange', + help="The user at our company who authorized/signed the agreement or " + "contract." + ) + customer_signed_user_id = fields.Many2one( + 'res.partner', + string="Customer Signed By", + track_visibility='onchange', + help="Contact on the account that signed the agreement/contract." + ) + parent_agreement_id = fields.Many2one( + 'agreement', + string="Parent Agreement", + help="Link this agreement to a parent agreement. For example if this " + "agreement is an amendment to another agreement. This list will " + "only show other agreements related to the same account." + ) + renewal_type_id = fields.Many2one( + 'agreement.renewaltype', + string="Renewal Type", + track_visibility='onchange', + help="Describes what happens after the contract expires." + ) - order_lines_services = fields.One2many(related='sale_order.order_line', string="Service Order Lines", copy=False) -# order_lines_nonservices = fields.One2many(related='sale_order.order_line', string="Non Service Order Lines", copy=False, store=False) - sections = fields.One2many('partner_agreement.section', 'agreement', string="Sections", copy=True) - clauses = fields.One2many('partner_agreement.clause', 'agreement', string="Clauses", copy=True) - previous_version_agreements = fields.One2many('partner_agreement.agreement', 'parent_agreement', string="Child Agreements", copy=False, domain=[('active', '=', False)]) - child_agreements = fields.One2many('partner_agreement.agreement', 'parent_agreement', string="Child Agreements", copy=False, domain=[('active', '=', True)]) - products = fields.Many2many('product.template', string="Products", copy=False) - state = fields.Selection([('draft', 'Draft'),('active', 'Active'),('inactive', 'Inactive')], default='draft', track_visibility='always') - notification_address = fields.Many2one('res.partner', string="Notification Address", help="The address to send notificaitons to, if different from customer address.(Address Type = Other)") - signed_contract_filename = fields.Char(string="Filename") - signed_contract = fields.Binary(string="Signed Document", track_visibility='always') + order_lines_services_ids = fields.One2many( + related='sale_order_id.order_line', + string="Service Order Lines", + copy=False + ) + sections_ids = fields.One2many( + 'agreement.section', + 'agreement_id', + string="Sections", + copy=True + ) + clauses_ids = fields.One2many( + 'agreement.clause', + 'agreement_id', + string="Clauses", + copy=True + ) + previous_version_agreements_ids = fields.One2many( + 'agreement', + 'parent_agreement_id', + string="Child Agreements", + copy=False, + domain=[('active', '=', False)] + ) + child_agreements_ids = fields.One2many( + 'agreement', + 'parent_agreement_id', + string="Child Agreements", + copy=False, + domain=[('active', '=', True)] + ) + products_ids = fields.Many2many( + 'product.template', + string="Products", + copy=False + ) + state = fields.Selection([ + ('draft', 'Draft'), + ('active', 'Active'), + ('inactive', 'Inactive')], + default='draft', + track_visibility='always' + ) + notification_address_id = fields.Many2one( + 'res.partner', + string="Notification Address", + help="The address to send notificaitons to, if different from " + "customer address.(Address Type = Other)" + ) + signed_contract_filename = fields.Char( + string="Filename" + ) + signed_contract = fields.Binary( + string="Signed Document", + track_visibility='always' + ) - #compute contract_value field - @api.depends('total_customer_mrc','total_customer_nrc','customer_term') - def _compute_contract_value (self): - for record in self: - record.contract_value = (record.total_customer_mrc * record.customer_term) + record.total_customer_nrc + # compute contract_value field + @api.depends('total_customer_mrc', 'total_customer_nrc', 'customer_term') + def _compute_contract_value(self): + for record in self: + record.contract_value =\ + (record.total_customer_mrc * record.customer_term) +\ + record.total_customer_nrc - #compute total_company_mrc field - #@api.multi - @api.depends('order_lines_services','sale_order') - def _compute_company_mrc(self): - order_lines = self.env['sale.order.line'].search([('is_service', '=', True)]) - amount_total = sum(order_lines.mapped('purchase_price')) - for record in self: + # compute total_company_mrc field + @api.depends('order_lines_services_ids', 'sale_order_id') + def _compute_company_mrc(self): + order_lines = self.env['sale.order.line'].search( + [('is_service', '=', True)]) + amount_total = sum(order_lines.mapped('purchase_price')) + for record in self: record.total_company_mrc = amount_total - #Used for Kanban grouped_by view - @api.model - def _read_group_stage_ids(self,stages,domain,order): - stage_ids = self.env['partner_agreement.stage'].search([]) - return stage_ids + # Used for Kanban grouped_by view + @api.model + def _read_group_stage_ids(self, stages, domain, order): + stage_ids = self.env['agreement.stage'].search([]) + return stage_ids - stage = fields.Many2one('partner_agreement.stage', string="Stage", group_expand='_read_group_stage_ids', help="Select the current stage of the agreement.") + stage_id = fields.Many2one( + 'agreement.stage', + string="Stage", + group_expand='_read_group_stage_ids', + help="Select the current stage of the agreement." + ) - #Create New Version Button - @api.multi - def create_new_version(self, vals): - self.write({'state': 'draft'}) #Make sure status is draft - self.copy(default={'name': self.name + ' - OLD VERSION', 'active': False, 'parent_agreement': self.id}) #Make a current copy and mark it as old - self.write({'version': self.version + 1}) #Increment the Version - #Reset revision to 0 since it's a new version - vals['revision'] = 0 - return super(Agreement, self).write(vals) + # Create New Version Button + @api.multi + def create_new_version(self, vals): + for rec in self: + if not rec.state == 'draft': + # Make sure status is draft + rec.state = 'draft' + default_vals = {'name': '{0} - OLD VERSION'.format(rec.name), + 'active': False, + 'parent_agreement_id': rec.id} + # Make a current copy and mark it as old + rec.copy(default=default_vals) + # Increment the Version + rec.version = rec.version + 1 + # Reset revision to 0 since it's a new version + vals['revision'] = 0 + return super(Agreement, self).write(vals) - def create_new_agreement(self): - res = self.copy(default={'name': 'NEW', 'active': True, 'version': 1, 'revision': 0, 'state': 'draft', 'start_date': "", 'end_date':""}) - return {'res_model': 'partner_agreement.agreement', 'type': 'ir.actions.act_window', 'view_mode': 'form', 'view_type': 'form', 'res_id': res.id} + def create_new_agreement(self): + default_vals = {'name': 'NEW', + 'active': True, + 'version': 1, + 'revision': 0, + 'state': 'draft'} + res = self.copy(default=default_vals) + return {'res_model': 'agreement', + 'type': 'ir.actions.act_window', + 'view_mode': 'form', + 'view_type': 'form', + 'res_id': res.id} - #Increments the revision on each save action - def write(self, vals): - vals['revision'] = self.revision + 1 - return super(Agreement, self).write(vals) + # Increments the revision on each save action + @api.multi + def write(self, vals): + vals['revision'] = self.revision + 1 + return super(Agreement, self).write(vals) diff --git a/agreement/models/product_template.py b/agreement/models/product_template.py index 1b93eb49..cfd3516b 100644 --- a/agreement/models/product_template.py +++ b/agreement/models/product_template.py @@ -1,7 +1,13 @@ -from odoo import models, fields, api +# Copyright (C) 2018 - TODAY, Pavlov Media +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import models, fields -class Product(models.Model): +class Product(models.Model): _inherit = 'product.template' - agreements = fields.Many2many('partner_agreement.agreement', string="Agreements") + agreements_ids = fields.Many2many( + 'agreement', + string="Agreements" + ) diff --git a/agreement/models/res_partner.py b/agreement/models/res_partner.py index a451e455..61c30d0c 100644 --- a/agreement/models/res_partner.py +++ b/agreement/models/res_partner.py @@ -1,7 +1,14 @@ -from odoo import models, fields, api +# Copyright (C) 2018 - TODAY, Pavlov Media +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import models, fields -class Partner(models.Model): +class Partner(models.Model): _inherit = 'res.partner' - agreements = fields.One2many('partner_agreement.agreement', 'name', string="Agreements") + agreements_ids = fields.One2many( + 'agreement', + 'name', + string="Agreements" + ) diff --git a/agreement/security/ir.model.access.csv b/agreement/security/ir.model.access.csv index 670e99a4..996aeba7 100644 --- a/agreement/security/ir.model.access.csv +++ b/agreement/security/ir.model.access.csv @@ -1,9 +1,9 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_agreement_allusers,agreement all users,model_partner_agreement_agreement,,1,1,1,1 -access_agreement_section_allusers,section all users,model_partner_agreement_section,,1,1,1,1 -access_agreement_clause_allusers,clause all users,model_partner_agreement_clause,,1,1,1,1 -access_agreement_stage_allusers,stage all users,model_partner_agreement_stage,,1,1,1,1 -access_agreement_type_allusers,type all users,model_partner_agreement_type,,1,1,1,1 -access_agreement_subtype_allusers,subtype all users,model_partner_agreement_subtype,,1,1,1,1 -access_agreement_renewaltype_allusers,renewaltype all users,model_partner_agreement_renewaltype,,1,1,1,1 -access_agreement_increasetype_allusers,increasetype all users,model_partner_agreement_increasetype,,1,1,1,1 +access_agreement_allusers,agreement all users,model_agreement,,1,1,1,1 +access_agreement_section_allusers,section all users,model_agreement_section,,1,1,1,1 +access_agreement_clause_allusers,clause all users,model_agreement_clause,,1,1,1,1 +access_agreement_stage_allusers,stage all users,model_agreement_stage,,1,1,1,1 +access_agreement_type_allusers,type all users,model_agreement_type,,1,1,1,1 +access_agreement_subtype_allusers,subtype all users,model_agreement_subtype,,1,1,1,1 +access_agreement_renewaltype_allusers,renewaltype all users,model_agreement_renewaltype,,1,1,1,1 +access_agreement_increasetype_allusers,increasetype all users,model_agreement_increasetype,,1,1,1,1 diff --git a/agreement/security/security.xml b/agreement/security/security.xml deleted file mode 100644 index c9817ed2..00000000 --- a/agreement/security/security.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/agreement/views/agreement.xml b/agreement/views/agreement.xml index b86878d1..f05b3b5a 100644 --- a/agreement/views/agreement.xml +++ b/agreement/views/agreement.xml @@ -1,331 +1,328 @@ + - - - Agreement List - partner_agreement.agreement - - - - - - - - - - - + Agreement List + agreement + + + + + + + + + + + - Agreement Form - partner_agreement.agreement - -
-
-
- -
-
- - - - - - - - - - - - - - - -
- - - - - - -
-
- -
- - - - - - -
-
- - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - -
-
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

This section is a place where finincial records will show the current performance of this agreement.

+

Perhaps include invoices with total vs costs?

+
+
+ + + + + + + +
+ Version: . + | Created By: + | Created On: +
+
+
+ +
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

This section is a place where finincial records will show the current performance of this agreement.

-

Perhaps include invoices with total vs costs?

-
- - - - - - - - -
- Version: . - | Created By: - | Created On: -
- -
- - -
-
-
+ +
- Agreement Kanban - partner_agreement.agreement - - - - - - -
-
-
-
-
-
- - oe_kanban_text_red -
-
-
- - -
- -
- - -
- -
-
- V: -
-
- -
-
-
-
-
- - - - + Agreement Kanban + agreement + + + + + + +
+
+
+
+ + +
+
+ + oe_kanban_text_red +
+ +
+
+
+ +
+
+ - +
+
+
+ V: +
+
+ +
+
+
+
+
+ + + + - Agreement Search - partner_agreement.agreement - - - - - - - - - + Agreement Search + agreement + + + + + + + + + - Order Lines Search - sale.order.line - search - - - - - - + Order Lines Search + sale.order.line + search + + + + + + - Agreements - partner_agreement.agreement - {"search_default_filter_non_template":1} - kanban,tree,form + Agreements + agreement + {"search_default_filter_non_template":1} + kanban,tree,form - Agreements - partner_agreement.agreement - {"search_default_filter_templates":1} - tree,kanban,form + Agreements + agreement + {"search_default_filter_templates":1} + tree,kanban,form - + - + - + - - - - + + + \ No newline at end of file diff --git a/agreement/views/agreement_clause.xml b/agreement/views/agreement_clause.xml index fb1a7203..90082b43 100644 --- a/agreement/views/agreement_clause.xml +++ b/agreement/views/agreement_clause.xml @@ -1,103 +1,102 @@ + - + - agreement_clause_sequencer - agreement.clause - 0 - 1 + agreement_clause_sequencer + agreement.clause + 0 + 1 - Agreement Clause List - partner_agreement.clause - - - - - - - - - - + Agreement Clause List + agreement.clause + + + + + + + + + + - Agreement clause Form - partner_agreement.clause - -
- -
-
- - - - - - - - - THIS IS UNDER DEVELOPEMENT: The purpose of this section is to be able to create dynamic fields inside your content. - - - - - - - - - - - Sequence # -
-
-
+ Agreement clause Form + agreement.clause + +
+ +
+
+ + + + + + + + THIS IS UNDER DEVELOPEMENT: The purpose of this section is to be able to create dynamic fields inside your content. + + + + + + + + + + + Sequence # +
+
+
- Agreement Clause Search - partner_agreement.clause - - - - - - + Agreement Clause Search + agreement.clause + + + + + + - Agreement Clause Pivot - partner_agreement.clause - - - - - - - + Agreement Clause Pivot + agreement.clause + + + + + + + Agreement Clauses - partner_agreement.clause + agreement.clause tree,pivot,form - + -
-
+ \ No newline at end of file diff --git a/agreement/views/agreement_increasetype.xml b/agreement/views/agreement_increasetype.xml index ede75d6d..7620ae19 100644 --- a/agreement/views/agreement_increasetype.xml +++ b/agreement/views/agreement_increasetype.xml @@ -1,53 +1,51 @@ + - - - Agreement Increase Type List - partner_agreement.increasetype - - - - - - - + Agreement Increase Type List + agreement.increasetype + + + + + + + - - Agreement Increase Type Form - partner_agreement.increasetype - -
- -
-
- - - - -
-
-
+ + Agreement Increase Type Form + agreement.increasetype + +
+ +
+
+ + + + +
+
+
- Agreement Increase Type - partner_agreement.increasetype - tree,form + Agreement Increase Type + agreement.increasetype + tree,form -
-
+ name="Increase Types" + id="partner_agreement_increasetype_menu_1" + parent="agreement.partner_agreement_menu_3" + sequence="45" + action="partner_agreement_action_increasetype"/> + \ No newline at end of file diff --git a/agreement/views/agreement_renewaltype.xml b/agreement/views/agreement_renewaltype.xml index 5950d0b3..df762c9a 100644 --- a/agreement/views/agreement_renewaltype.xml +++ b/agreement/views/agreement_renewaltype.xml @@ -1,51 +1,49 @@ + - - - Agreement Renewal Type List - partner_agreement.renewaltype - - - - - - + Agreement Renewal Type List + agreement.renewaltype + + + + + + - Agreement Renewal Type Form - partner_agreement.renewaltype - -
- -
-
- - - -
-
-
+ Agreement Renewal Type Form + agreement.renewaltype + +
+ +
+
+ + + +
+
+
- Agreement Renewal Type - partner_agreement.renewaltype - tree,form + Agreement Renewal Type + agreement.renewaltype + tree,form -
-
+ name="Renewal Types" + id="partner_agreement_renewaltype_menu_1" + parent="agreement.partner_agreement_menu_3" + sequence="44" + action="partner_agreement_action_renewaltype"/> + \ No newline at end of file diff --git a/agreement/views/agreement_section.xml b/agreement/views/agreement_section.xml index b747ef47..7d7cb290 100644 --- a/agreement/views/agreement_section.xml +++ b/agreement/views/agreement_section.xml @@ -1,97 +1,96 @@ + - + - agreement_section_sequencer - agreement.section - 0 - 1 + agreement_section_sequencer + agreement.section + 0 + 1 - Agreement Section List - partner_agreement.section - - - - - - - - + Agreement Section List + agreement.section + + + + + + + + - Agreement Section Form - partner_agreement.section - -
- -
-
- - - - - - - - - - - - - - - - - - THIS IS UNDER DEVELOPEMENT: The purpose of this section is to be able to create dynamic fields inside your content. - - - - - - - - - - - Sequence # -
-
-
+ Agreement Section Form + agreement.section + +
+ +
+
+ + + + + + + + + + + + + + + + + + THIS IS UNDER DEVELOPEMENT: The purpose of this section is to be able to create dynamic fields inside your content. + + + + + + + + + + + Sequence # +
+
+
- Agreement Section Search - partner_agreement.section - - - - - + Agreement Section Search + agreement.section + + + + + - Agreement Sections - partner_agreement.section - tree,form + Agreement Sections + agreement.section + tree,form - -
-
+ name="Sections" + id="partner_agreement_sections_menu_1" + parent="agreement.partner_agreement_menu_2" + sequence="31" + action="partner_agreement_action_section"/> + \ No newline at end of file diff --git a/agreement/views/agreement_stages.xml b/agreement/views/agreement_stages.xml index e2d83fd3..11e15b8d 100644 --- a/agreement/views/agreement_stages.xml +++ b/agreement/views/agreement_stages.xml @@ -1,52 +1,50 @@ + - - - Agreement Stage List - partner_agreement.stage - - - - - - + Agreement Stage List + agreement.stage + + + + + + - Agreement Stage Form - partner_agreement.stage - -
- -
-
- - - - -
-
-
+ Agreement Stage Form + agreement.stage + +
+ +
+
+ + + + +
+
+
- Agreement Stage - partner_agreement.stage - tree,form + Agreement Stage + agreement.stage + tree,form -
-
+ name="Stages" + id="partner_agreement_stage_menu_1" + parent="agreement.partner_agreement_menu_3" + sequence="41" + action="partner_agreement_action_stage"/> + \ No newline at end of file diff --git a/agreement/views/agreement_subtype.xml b/agreement/views/agreement_subtype.xml index 59bbbbe3..0024b91a 100644 --- a/agreement/views/agreement_subtype.xml +++ b/agreement/views/agreement_subtype.xml @@ -1,51 +1,49 @@ + - - - Agreement Subtype List - partner_agreement.subtype - - - - - - + Agreement Subtype List + agreement.subtype + + + + + + - Agreement Sub Type Form - partner_agreement.subtype - -
- -
-
- - - -
-
-
+ Agreement Sub Type Form + agreement.subtype + +
+ +
+
+ + + +
+
+
- Agreement Sub Type - partner_agreement.subtype - tree,form + Agreement Sub Type + agreement.subtype + tree,form -
-
+ name="Sub-Types" + id="partner_agreement_subtype_menu_1" + parent="agreement.partner_agreement_menu_3" + sequence="43" + action="partner_agreement_action_subtype"/> + \ No newline at end of file diff --git a/agreement/views/agreement_type.xml b/agreement/views/agreement_type.xml index 88608924..21aeb5a4 100644 --- a/agreement/views/agreement_type.xml +++ b/agreement/views/agreement_type.xml @@ -1,51 +1,49 @@ + - - - Agreement Type List - partner_agreement.type - - - - - - + Agreement Type List + agreement.type + + + + + + - Agreement Type Form - partner_agreement.type - -
- -
-
- - - -
-
-
+ Agreement Type Form + agreement.type + +
+ +
+
+ + + +
+
+
- Agreement Type - partner_agreement.type - tree,form + Agreement Type + agreement.type + tree,form -
-
+ name="Types" + id="partner_agreement_type_menu_1" + parent="agreement.partner_agreement_menu_3" + sequence="42" + action="partner_agreement_action_type"/> + \ No newline at end of file diff --git a/agreement/views/reports.xml b/agreement/views/reports.xml index 98ba467a..46de46b0 100644 --- a/agreement/views/reports.xml +++ b/agreement/views/reports.xml @@ -1,48 +1,49 @@ + + - + \ No newline at end of file diff --git a/agreement/views/res_partner.xml b/agreement/views/res_partner.xml index 39d034e4..9c3d08ec 100644 --- a/agreement/views/res_partner.xml +++ b/agreement/views/res_partner.xml @@ -1,19 +1,17 @@ + - - res.partner - - - - - - - - - - - - - - + + res.partner + + + + + + + + + + +