Merge branch '14.0-mig-agreement_repair' of github.com:ursais/contract into 14.0-mig-agreement_repair

This commit is contained in:
Vimal Patel
2021-12-03 15:31:34 +05:30
157 changed files with 8586 additions and 3929 deletions

View File

@@ -17,15 +17,18 @@ TODO: add repo description.
Available addons
----------------
addon | version | summary
--- | --- | ---
[agreement](agreement/) | 14.0.1.0.0 | Adds an agreement object
[agreement_legal](agreement_legal/) | 14.0.1.0.1 | Manage Agreements, LOI and Contracts
[agreement_sale](agreement_sale/) | 14.0.1.0.0 | Agreement on sales
[agreement_serviceprofile](agreement_serviceprofile/) | 14.0.1.0.0 | Adds an Agreement Service Profile object
[contract](contract/) | 14.0.1.2.1 | Recurring - Contracts Management
[contract_payment_mode](contract_payment_mode/) | 14.0.1.0.0 | Payment mode in contracts and their invoices
[contract_sale](contract_sale/) | 14.0.1.0.0 | Contract from Sale
addon | version | maintainers | summary
--- | --- | --- | ---
[agreement](agreement/) | 14.0.1.0.0 | [![ygol](https://github.com/ygol.png?size=30px)](https://github.com/ygol) [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Adds an agreement object
[agreement_legal](agreement_legal/) | 14.0.2.0.0 | [![max3903](https://github.com/max3903.png?size=30px)](https://github.com/max3903) [![ygol](https://github.com/ygol.png?size=30px)](https://github.com/ygol) | Manage Agreements, LOI and Contracts
[agreement_project](agreement_project/) | 14.0.1.0.0 | [![smangukiya](https://github.com/smangukiya.png?size=30px)](https://github.com/smangukiya) [![ygol](https://github.com/ygol.png?size=30px)](https://github.com/ygol) [![max3903](https://github.com/max3903.png?size=30px)](https://github.com/max3903) | Link projects to an agreement
[agreement_sale](agreement_sale/) | 14.0.1.0.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) [![bealdav](https://github.com/bealdav.png?size=30px)](https://github.com/bealdav) | Agreement on sales
[agreement_serviceprofile](agreement_serviceprofile/) | 14.0.1.0.0 | [![max3903](https://github.com/max3903.png?size=30px)](https://github.com/max3903) | Adds an Agreement Service Profile object
[agreement_stock](agreement_stock/) | 14.0.1.0.1 | [![smangukiya](https://github.com/smangukiya.png?size=30px)](https://github.com/smangukiya) [![max3903](https://github.com/max3903.png?size=30px)](https://github.com/max3903) | Link picking to an agreement
[contract](contract/) | 14.0.1.2.3 | | Recurring - Contracts Management
[contract_mandate](contract_mandate/) | 14.0.1.0.0 | | Mandate in contracts and their invoices
[contract_payment_mode](contract_payment_mode/) | 14.0.1.0.0 | | Payment mode in contracts and their invoices
[contract_sale](contract_sale/) | 14.0.1.0.0 | | Contract from Sale
[//]: # (end addons)

View File

@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2021-01-05 13:44+0000\n"
"Last-Translator: Dept. Técnico <tecnico@extrememicro.es>\n"
"PO-Revision-Date: 2021-09-14 02:33+0000\n"
"Last-Translator: pere-aquarian <pere@aquarian.tech>\n"
"Language-Team: none\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
@@ -25,51 +25,51 @@ msgstr "%s (copiar)"
#. module: agreement
#: model:ir.model.fields,field_description:agreement.field_agreement__message_needaction
msgid "Action Needed"
msgstr ""
msgstr "Acció necessària"
#. module: agreement
#: model:ir.model.fields,field_description:agreement.field_agreement__active
#: model:ir.model.fields,field_description:agreement.field_agreement_type__active
msgid "Active"
msgstr ""
msgstr "Actiu"
#. module: agreement
#: model:ir.model.fields,field_description:agreement.field_agreement__activity_ids
msgid "Activities"
msgstr ""
msgstr "Activitats"
#. module: agreement
#: model:ir.model.fields,field_description:agreement.field_agreement__activity_exception_decoration
msgid "Activity Exception Decoration"
msgstr ""
msgstr "Decorador de l'excepció d'activitat"
#. module: agreement
#: model:ir.model.fields,field_description:agreement.field_agreement__activity_state
msgid "Activity State"
msgstr ""
msgstr "Estat de l'activitat"
#. module: agreement
#: model:ir.model.fields,field_description:agreement.field_agreement__activity_type_icon
msgid "Activity Type Icon"
msgstr ""
msgstr "Icona del tipus d'activitat"
#. module: agreement
#: model:ir.model,name:agreement.model_agreement
#: model_terms:ir.ui.view,arch_db:agreement.agreement_form
msgid "Agreement"
msgstr ""
msgstr "Acord"
#. module: agreement
#: model_terms:ir.ui.view,arch_db:agreement.agreement_form
msgid "Agreement Name"
msgstr ""
msgstr "Nom de l'acord"
#. module: agreement
#: model:ir.model.fields,field_description:agreement.field_agreement__agreement_type_id
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_form_view
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_search
msgid "Agreement Type"
msgstr ""
msgstr "Tipus d'acord"
#. module: agreement
#: model:ir.actions.act_window,name:agreement.agreement_type_action
@@ -77,7 +77,7 @@ msgstr ""
#: model:ir.ui.menu,name:agreement.agreement_type_menu
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_list_view
msgid "Agreement Types"
msgstr ""
msgstr "Tipus d'acord"
#. module: agreement
#: model:ir.actions.act_window,name:agreement.agreement_action
@@ -85,7 +85,7 @@ msgstr ""
#: model:ir.ui.menu,name:agreement.agreement_menu_root
#: model_terms:ir.ui.view,arch_db:agreement.agreement_tree
msgid "Agreements"
msgstr ""
msgstr "Acords"
#. module: agreement
#: model_terms:ir.ui.view,arch_db:agreement.agreement_form
@@ -93,40 +93,40 @@ msgstr ""
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_form_view
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_search
msgid "Archived"
msgstr ""
msgstr "Arxivat"
#. module: agreement
#: model:ir.model.fields,field_description:agreement.field_agreement__message_attachment_count
msgid "Attachment Count"
msgstr ""
msgstr "Nombre d'annexes"
#. module: agreement
#: model:ir.model.fields,field_description:agreement.field_agreement__company_id
msgid "Company"
msgstr ""
msgstr "Companyia"
#. module: agreement
#: model_terms:ir.ui.view,arch_db:agreement.agreement_form
msgid "Configuration"
msgstr ""
msgstr "Configuració"
#. module: agreement
#: model:ir.model.fields,field_description:agreement.field_agreement__create_uid
#: model:ir.model.fields,field_description:agreement.field_agreement_type__create_uid
msgid "Created by"
msgstr ""
msgstr "Creat per"
#. module: agreement
#: model:ir.model.fields,field_description:agreement.field_agreement__create_date
#: model:ir.model.fields,field_description:agreement.field_agreement_type__create_date
msgid "Created on"
msgstr ""
msgstr "Creat el"
#. module: agreement
#: model:ir.model.fields,field_description:agreement.field_agreement__display_name
#: model:ir.model.fields,field_description:agreement.field_agreement_type__display_name
msgid "Display Name"
msgstr ""
msgstr "Nom a mostrar"
#. module: agreement
#: model:ir.model.fields,field_description:agreement.field_agreement__domain
@@ -134,38 +134,38 @@ msgstr ""
#: model_terms:ir.ui.view,arch_db:agreement.agreement_search
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_search
msgid "Domain"
msgstr ""
msgstr "Domini"
#. module: agreement
#: model:ir.model.fields,field_description:agreement.field_agreement__end_date
msgid "End Date"
msgstr ""
msgstr "Data de fi"
#. module: agreement
#: model:ir.model.fields,field_description:agreement.field_agreement__message_follower_ids
msgid "Followers"
msgstr ""
msgstr "Seguidors/res"
#. module: agreement
#: model:ir.model.fields,field_description:agreement.field_agreement__message_channel_ids
msgid "Followers (Channels)"
msgstr ""
msgstr "Seguidors/res (canals)"
#. module: agreement
#: model:ir.model.fields,field_description:agreement.field_agreement__message_partner_ids
msgid "Followers (Partners)"
msgstr ""
msgstr "Seguidors/res (Empreses)"
#. module: agreement
#: model:ir.model.fields,help:agreement.field_agreement__activity_type_icon
msgid "Font awesome icon e.g. fa-tasks"
msgstr ""
msgstr "Icona Font awesome p.e. fa-tasks"
#. module: agreement
#: model:ir.model.fields,field_description:agreement.field_agreement__id
#: model:ir.model.fields,field_description:agreement.field_agreement_type__id
msgid "ID"
msgstr ""
msgstr "ID"
#. module: agreement
#: model:ir.model.fields,help:agreement.field_agreement__code

View File

@@ -97,6 +97,7 @@ Contributors
* Maxime Chambreuil <mchambreuil@opensourceintegrators.com>
* Sandip Mangukiya <smangukiya@opensourceintegrators.com>
* Yves Goldberg <yves@ygol.com>
* Tharathip Chaweewongphan <tharathipc@ecosoft.co.th>
Other credits
~~~~~~~~~~~~~

View File

@@ -2,3 +2,4 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from . import models
from . import wizards

View File

@@ -11,11 +11,10 @@
"website": "https://github.com/OCA/contract",
"category": "Partner",
"license": "AGPL-3",
"version": "14.0.1.0.1",
"version": "14.0.2.0.0",
"depends": ["contacts", "agreement", "product"],
"data": [
"data/ir_sequence.xml",
"data/module_category.xml",
"data/agreement_stage.xml",
"data/agreement_type.xml",
"security/res_groups.xml",
@@ -29,13 +28,14 @@
"views/agreement_stages.xml",
"views/agreement_type.xml",
"views/agreement_subtype.xml",
"views/agreement_renewaltype.xml",
"views/agreement_increasetype.xml",
"views/res_partner.xml",
"views/agreement.xml",
"views/menu.xml",
"views/assets.xml",
"wizards/create_agreement_wizard.xml",
],
"demo": ["demo/demo.xml"],
"qweb": ["static/src/xml/agreement.xml"],
"application": True,
"development_status": "Beta",
"maintainers": ["max3903", "ygol"],

View File

@@ -48,6 +48,13 @@
<field name="stage_type">agreement</field>
</record>
<record id="agreement_stage_terminated" model="agreement.stage">
<field name="name">Terminated</field>
<field name="sequence">90</field>
<field name="fold">True</field>
<field name="stage_type">agreement</field>
</record>
<record id="agreement_stage_cancelled" model="agreement.stage">
<field name="name">Cancelled</field>
<field name="sequence">100</field>

View File

@@ -1,8 +0,0 @@
<odoo>
<record id="agreement" model="ir.module.category">
<field name="name">Agreement</field>
<field name="sequence">80</field>
</record>
</odoo>

View File

@@ -13,13 +13,6 @@ msgstr ""
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: agreement_legal
#. openerp-web
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#, python-format
msgid "# Code editor"
msgstr ""
#. module: agreement_legal
#: model_terms:ir.ui.view,arch_db:agreement_legal.view_project_agreement_kanban
msgid "<span class=\"fa fa-ellipsis-v\" aria-hidden=\"true\" title=\"Icon\"/>"
@@ -31,49 +24,12 @@ msgstr ""
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_clause__active
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_recital__active
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_section__active
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_stage__active
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_subtype__active
#: model:ir.model.fields.selection,name:agreement_legal.selection__agreement__state__active
msgid "Active"
msgstr ""
#. module: agreement_legal
#. openerp-web
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#, python-format
msgid "Add branch"
msgstr ""
#. module: agreement_legal
#. openerp-web
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#, python-format
msgid "Add filter"
msgstr ""
#. module: agreement_legal
#. openerp-web
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#, python-format
msgid "Add new value"
msgstr ""
#. module: agreement_legal
#. openerp-web
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#, python-format
msgid "Add node"
msgstr ""
#. module: agreement_legal
#. openerp-web
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#, python-format
msgid "Add tag"
msgstr ""
#. module: agreement_legal
#: model_terms:ir.ui.view,arch_db:agreement_legal.partner_agreement_form_view
msgid "Administration"
@@ -93,7 +49,6 @@ msgstr ""
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_recital__agreement_id
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_section__agreement_id
#: model:ir.model.fields.selection,name:agreement_legal.selection__agreement_stage__stage_type__agreement
#: model:ir.module.category,name:agreement_legal.agreement
#: model:ir.module.category,name:agreement_legal.module_agreement_legal_category
#: model_terms:ir.ui.view,arch_db:agreement_legal.partner_agreement_form_view
#: model_terms:ir.ui.view,arch_db:agreement_legal.report_agreement_document
@@ -110,12 +65,6 @@ msgstr ""
msgid "Agreement Clauses"
msgstr ""
#. module: agreement_legal
#: model:ir.actions.act_window,name:agreement_legal.partner_agreement_action_increasetype
#: model:ir.model,name:agreement_legal.model_agreement_increasetype
msgid "Agreement Increase Type"
msgstr ""
#. module: agreement_legal
#: model:ir.model,name:agreement_legal.model_agreement_line
msgid "Agreement Lines"
@@ -136,12 +85,6 @@ msgstr ""
msgid "Agreement Recitals"
msgstr ""
#. module: agreement_legal
#: model:ir.actions.act_window,name:agreement_legal.partner_agreement_action_renewaltype
#: model:ir.model,name:agreement_legal.model_agreement_renewaltype
msgid "Agreement Renewal Type"
msgstr ""
#. module: agreement_legal
#: model_terms:ir.ui.view,arch_db:agreement_legal.partner_agreement_search_view
msgid "Agreement Search"
@@ -171,6 +114,7 @@ msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,field_description:agreement_legal.field_agreement__agreement_subtype_id
#: model_terms:ir.ui.view,arch_db:agreement_legal.partner_agreement_search_view
msgid "Agreement Sub-type"
msgstr ""
@@ -182,7 +126,8 @@ msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,field_description:agreement_legal.field_agreement__agreement_type_id
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_subtype__agreement_type_id
#: model_terms:ir.ui.view,arch_db:agreement_legal.partner_agreement_subtype_list_view
#: model_terms:ir.ui.view,arch_db:agreement_legal.partner_agreement_search_view
#: model_terms:ir.ui.view,arch_db:agreement_legal.partner_agreement_subtype_search_view
msgid "Agreement Type"
msgstr ""
@@ -196,8 +141,6 @@ msgstr ""
#: model:ir.actions.act_window,name:agreement_legal.action_agreement_report_order
#: model:ir.actions.act_window,name:agreement_legal.agreement_dashboard_agreement
#: model:ir.actions.act_window,name:agreement_legal.agreement_operations_agreement
#: model:ir.model.fields,field_description:agreement_legal.field_product_product__agreements_ids
#: model:ir.model.fields,field_description:agreement_legal.field_product_template__agreements_ids
#: model:ir.model.fields,field_description:agreement_legal.field_res_partner__agreement_ids
#: model:ir.model.fields,field_description:agreement_legal.field_res_users__agreement_ids
#: model:ir.ui.menu,name:agreement_legal.agreement_agreement_reporting
@@ -218,9 +161,13 @@ msgid "Agreements Stage Form"
msgstr ""
#. module: agreement_legal
#: model_terms:ir.ui.view,arch_db:agreement_legal.partner_agreement_increasetype_form_view
#: model_terms:ir.ui.view,arch_db:agreement_legal.partner_agreement_renewaltype_form_view
msgid "Agreements Type Form"
#: model_terms:ir.ui.view,arch_db:agreement_legal.partner_agreement_stage_search_view
msgid "Agreements Stage Search"
msgstr ""
#. module: agreement_legal
#: model_terms:ir.ui.view,arch_db:agreement_legal.partner_agreement_subtype_search_view
msgid "Agreements Sub-Types Search"
msgstr ""
#. module: agreement_legal
@@ -266,6 +213,10 @@ msgstr ""
#: model_terms:ir.ui.view,arch_db:agreement_legal.partner_agreement_clause_form_view
#: model_terms:ir.ui.view,arch_db:agreement_legal.partner_agreement_search_view
#: model_terms:ir.ui.view,arch_db:agreement_legal.partner_agreement_section_form_view
#: model_terms:ir.ui.view,arch_db:agreement_legal.partner_agreement_stage_form_view
#: model_terms:ir.ui.view,arch_db:agreement_legal.partner_agreement_stage_search_view
#: model_terms:ir.ui.view,arch_db:agreement_legal.partner_agreement_subtype_form_view
#: model_terms:ir.ui.view,arch_db:agreement_legal.partner_agreement_subtype_search_view
msgid "Archived"
msgstr ""
@@ -279,6 +230,11 @@ msgstr ""
msgid "By:"
msgstr ""
#. module: agreement_legal
#: model_terms:ir.ui.view,arch_db:agreement_legal.create_agreement_from_template_form_view
msgid "Cancel"
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,field_description:agreement_legal.field_agreement__change_notice
msgid "Change Notice (Days)"
@@ -312,14 +268,6 @@ msgstr ""
msgid "Clauses"
msgstr ""
#. module: agreement_legal
#. openerp-web
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#, python-format
msgid "Close"
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,field_description:agreement_legal.field_agreement__color
msgid "Color"
@@ -408,6 +356,25 @@ msgid ""
"terms"
msgstr ""
#. module: agreement_legal
#: model_terms:ir.ui.view,arch_db:agreement_legal.create_agreement_from_template_form_view
msgid "Create Agreement"
msgstr ""
#. module: agreement_legal
#: model:ir.model,name:agreement_legal.model_create_agreement_wizard
msgid "Create Agreement Wizard"
msgstr ""
#. module: agreement_legal
#. openerp-web
#: code:addons/agreement_legal/static/src/xml/agreement.xml:0
#: code:addons/agreement_legal/static/src/xml/agreement.xml:0
#: model:ir.actions.act_window,name:agreement_legal.create_agreement_from_template_action
#, python-format
msgid "Create From Template"
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,field_description:agreement_legal.field_res_config_settings__module_agreement_sale
msgid "Create an agreement when the sale order is confirmed."
@@ -418,37 +385,40 @@ msgstr ""
msgid "Create an agreement when the sales order is confirmed"
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,field_description:agreement_legal.field_agreement__created_by
msgid "Created By"
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,field_description:agreement_legal.field_agreement__date_created
msgid "Created On"
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_appendix__create_uid
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_clause__create_uid
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_increasetype__create_uid
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_line__create_uid
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_recital__create_uid
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_renewaltype__create_uid
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_section__create_uid
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_stage__create_uid
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_subtype__create_uid
#: model:ir.model.fields,field_description:agreement_legal.field_create_agreement_wizard__create_uid
msgid "Created by"
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_appendix__create_date
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_clause__create_date
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_increasetype__create_date
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_line__create_date
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_recital__create_date
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_renewaltype__create_date
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_section__create_date
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_stage__create_date
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_subtype__create_date
#: model:ir.model.fields,field_description:agreement_legal.field_create_agreement_wizard__create_date
msgid "Created on"
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,field_description:agreement_legal.field_agreement__currency_id
msgid "Currency"
msgstr ""
#. module: agreement_legal
#: model:ir.ui.menu,name:agreement_legal.agreement_dashboard
msgid "Dashboard"
@@ -474,6 +444,11 @@ msgstr ""
msgid "Date the contract was signed by the Partner."
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,help:agreement_legal.field_agreement__date_created
msgid "Date which create the agreement."
msgstr ""
#. module: agreement_legal
#: model_terms:ir.ui.view,arch_db:agreement_legal.report_agreement_document
msgid "Date:"
@@ -488,28 +463,10 @@ msgstr ""
msgid "Default Value"
msgstr ""
#. module: agreement_legal
#. openerp-web
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#, python-format
msgid "Delete node"
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,help:agreement_legal.field_agreement__renewal_type_id
msgid "Describes what happens after the contract expires."
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,field_description:agreement_legal.field_agreement__description
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_increasetype__description
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_line__name
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_renewaltype__description
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_stage__description
#: model_terms:ir.ui.view,arch_db:agreement_legal.partner_agreement_form_view
#: model_terms:ir.ui.view,arch_db:agreement_legal.partner_agreement_increasetype_form_view
#: model_terms:ir.ui.view,arch_db:agreement_legal.partner_agreement_renewaltype_form_view
msgid "Description"
msgstr ""
@@ -518,46 +475,22 @@ msgstr ""
msgid "Description of the agreement"
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,help:agreement_legal.field_agreement_increasetype__description
#: model:ir.model.fields,help:agreement_legal.field_agreement_renewaltype__description
msgid "Description of the renewal type."
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,field_description:agreement_legal.field_agreement__display_name
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_appendix__display_name
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_clause__display_name
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_increasetype__display_name
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_line__display_name
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_recital__display_name
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_renewaltype__display_name
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_section__display_name
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_stage__display_name
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_subtype__display_name
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_type__display_name
#: model:ir.model.fields,field_description:agreement_legal.field_product_template__display_name
#: model:ir.model.fields,field_description:agreement_legal.field_create_agreement_wizard__display_name
#: model:ir.model.fields,field_description:agreement_legal.field_res_config_settings__display_name
#: model:ir.model.fields,field_description:agreement_legal.field_res_partner__display_name
msgid "Display Name"
msgstr ""
#. module: agreement_legal
#. openerp-web
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#, python-format
msgid "Domain"
msgstr ""
#. module: agreement_legal
#. openerp-web
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#, python-format
msgid "Domain node"
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields.selection,name:agreement_legal.selection__agreement__state__draft
msgid "Draft"
@@ -591,13 +524,6 @@ msgstr ""
msgid "Edit"
msgstr ""
#. module: agreement_legal
#. openerp-web
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#, python-format
msgid "Edit Domain"
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,field_description:agreement_legal.field_agreement__company_contact_email
msgid "Email"
@@ -666,15 +592,13 @@ msgstr ""
#: model:ir.model.fields,field_description:agreement_legal.field_agreement__id
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_appendix__id
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_clause__id
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_increasetype__id
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_line__id
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_recital__id
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_renewaltype__id
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_section__id
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_stage__id
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_subtype__id
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_type__id
#: model:ir.model.fields,field_description:agreement_legal.field_product_template__id
#: model:ir.model.fields,field_description:agreement_legal.field_create_agreement_wizard__id
#: model:ir.model.fields,field_description:agreement_legal.field_res_config_settings__id
#: model:ir.model.fields,field_description:agreement_legal.field_res_partner__id
msgid "ID"
@@ -710,42 +634,6 @@ msgstr ""
msgid "Inactive"
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_increasetype__increase_percent
msgid "Increase Percentage"
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,field_description:agreement_legal.field_agreement__increase_type_id
msgid "Increase Type"
msgstr ""
#. module: agreement_legal
#: model:ir.ui.menu,name:agreement_legal.agreement_increamenttypes
msgid "Increase Types"
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,help:agreement_legal.field_agreement_increasetype__name
msgid ""
"Increase types describe any increases that may happen during the contract."
msgstr ""
#. module: agreement_legal
#. openerp-web
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#, python-format
msgid "Invalid domain"
msgstr ""
#. module: agreement_legal
#. openerp-web
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#, python-format
msgid "Invalid field chain"
msgstr ""
#. module: agreement_legal
#: model_terms:ir.ui.view,arch_db:agreement_legal.res_config_settings_view_form
msgid "Inventory"
@@ -760,15 +648,13 @@ msgstr ""
#: model:ir.model.fields,field_description:agreement_legal.field_agreement____last_update
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_appendix____last_update
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_clause____last_update
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_increasetype____last_update
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_line____last_update
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_recital____last_update
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_renewaltype____last_update
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_section____last_update
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_stage____last_update
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_subtype____last_update
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_type____last_update
#: model:ir.model.fields,field_description:agreement_legal.field_product_template____last_update
#: model:ir.model.fields,field_description:agreement_legal.field_create_agreement_wizard____last_update
#: model:ir.model.fields,field_description:agreement_legal.field_res_config_settings____last_update
#: model:ir.model.fields,field_description:agreement_legal.field_res_partner____last_update
msgid "Last Modified on"
@@ -777,26 +663,24 @@ msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_appendix__write_uid
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_clause__write_uid
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_increasetype__write_uid
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_line__write_uid
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_recital__write_uid
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_renewaltype__write_uid
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_section__write_uid
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_stage__write_uid
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_subtype__write_uid
#: model:ir.model.fields,field_description:agreement_legal.field_create_agreement_wizard__write_uid
msgid "Last Updated by"
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_appendix__write_date
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_clause__write_date
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_increasetype__write_date
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_line__write_date
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_recital__write_date
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_renewaltype__write_date
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_section__write_date
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_stage__write_date
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_subtype__write_date
#: model:ir.model.fields,field_description:agreement_legal.field_create_agreement_wizard__write_date
msgid "Last Updated on"
msgstr ""
@@ -918,33 +802,11 @@ msgstr ""
msgid "Master Data"
msgstr ""
#. module: agreement_legal
#. openerp-web
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#, python-format
msgid "Match"
msgstr ""
#. module: agreement_legal
#. openerp-web
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#, python-format
msgid "Match records with"
msgstr ""
#. module: agreement_legal
#. openerp-web
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#, python-format
msgid "Match records with the following rule:"
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_appendix__name
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_clause__name
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_recital__name
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_section__name
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_subtype__name
msgid "Name"
msgstr ""
@@ -958,6 +820,7 @@ msgstr ""
#: code:addons/agreement_legal/models/agreement.py:0
#: code:addons/agreement_legal/models/agreement.py:0
#: code:addons/agreement_legal/models/agreement.py:0
#: code:addons/agreement_legal/models/agreement.py:0
#, python-format
msgid "New"
msgstr ""
@@ -992,12 +855,6 @@ msgstr ""
msgid "Number of Days to be notified before changes."
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,help:agreement_legal.field_agreement__term
msgid ""
"Number of months this agreement/contract is in effect with the partner."
msgstr ""
#. module: agreement_legal
#: model:ir.ui.menu,name:agreement_legal.agreement_operations
#: model_terms:ir.ui.view,arch_db:agreement_legal.res_config_settings_view_form
@@ -1067,11 +924,6 @@ msgstr ""
msgid "Partners"
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,help:agreement_legal.field_agreement_increasetype__increase_percent
msgid "Percentage that the amount will increase."
msgstr ""
#. module: agreement_legal
#: model_terms:ir.ui.view,arch_db:agreement_legal.partner_agreement_form_view
msgid "Performance"
@@ -1096,26 +948,11 @@ msgstr ""
msgid "Placeholder Expression"
msgstr ""
#. module: agreement_legal
#. openerp-web
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#, python-format
msgid "Please navigate below and select field:"
msgstr ""
#. module: agreement_legal
#: model_terms:ir.ui.view,arch_db:agreement_legal.partner_agreement_form_view
msgid "Preview"
msgstr ""
#. module: agreement_legal
#. openerp-web
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#, python-format
msgid "Previous"
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,field_description:agreement_legal.field_agreement__previous_version_agreements_ids
msgid "Previous Versions"
@@ -1141,21 +978,11 @@ msgstr ""
msgid "Product"
msgstr ""
#. module: agreement_legal
#: model:ir.model,name:agreement_legal.model_product_template
msgid "Product Template"
msgstr ""
#. module: agreement_legal
#: model:ir.ui.menu,name:agreement_legal.agreement_products
msgid "Products"
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,field_description:agreement_legal.field_agreement__product_ids
msgid "Products & Services"
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,field_description:agreement_legal.field_agreement__line_ids
#: model_terms:ir.ui.view,arch_db:agreement_legal.partner_agreement_form_view
@@ -1177,6 +1004,12 @@ msgstr ""
msgid "Read-Only Users"
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,field_description:agreement_legal.field_agreement__readonly
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_stage__readonly
msgid "Readonly"
msgstr ""
#. module: agreement_legal
#: model_terms:ir.ui.view,arch_db:agreement_legal.agreement_recital_form
msgid "Recital"
@@ -1203,30 +1036,6 @@ msgstr ""
msgid "Reference"
msgstr ""
#. module: agreement_legal
#. openerp-web
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#, python-format
msgid "Remove tag"
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,field_description:agreement_legal.field_agreement__renewal_type_id
msgid "Renewal Type"
msgstr ""
#. module: agreement_legal
#: model:ir.ui.menu,name:agreement_legal.agreement_renewaltype
msgid "Renewal Types"
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,help:agreement_legal.field_agreement_renewaltype__name
msgid ""
"Renewal types describe what happens after the agreement/contract expires."
msgstr ""
#. module: agreement_legal
#: model_terms:ir.ui.view,arch_db:agreement_legal.res_config_settings_view_form
msgid "Repair"
@@ -1272,20 +1081,6 @@ msgstr ""
msgid "Revisions"
msgstr ""
#. module: agreement_legal
#. openerp-web
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#, python-format
msgid "SMatch"
msgstr ""
#. module: agreement_legal
#. openerp-web
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#, python-format
msgid "SSMatch records with"
msgstr ""
#. module: agreement_legal
#: model_terms:ir.ui.view,arch_db:agreement_legal.res_config_settings_view_form
msgid "Sale Subscriptions"
@@ -1316,13 +1111,6 @@ msgstr ""
msgid "Sections"
msgstr ""
#. module: agreement_legal
#. openerp-web
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#, python-format
msgid "Select a model to add a filter."
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,help:agreement_legal.field_agreement__field_id
#: model:ir.model.fields,help:agreement_legal.field_agreement_appendix__field_id
@@ -1456,8 +1244,6 @@ msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_stage__name
#: model_terms:ir.ui.view,arch_db:agreement_legal.partner_agreement_stage_form_view
#: model_terms:ir.ui.view,arch_db:agreement_legal.partner_agreement_stage_list_view
msgid "Stage Name"
msgstr ""
@@ -1487,13 +1273,13 @@ msgid "Structure"
msgstr ""
#. module: agreement_legal
#: model_terms:ir.ui.view,arch_db:agreement_legal.partner_agreement_subtype_list_view
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_subtype__name
msgid "Sub-Type Name"
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_type__agreement_subtypes_ids
#: model:ir.ui.menu,name:agreement_legal.agreement_subtypes
#: model_terms:ir.ui.view,arch_db:agreement_legal.partner_agreement_type_list_view
msgid "Sub-Types"
msgstr ""
@@ -1516,8 +1302,15 @@ msgid "Sub-model"
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_type__agreement_subtypes_ids
msgid "Subtypes"
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_clause__temp_agreement_id
msgid "Temp Agreement"
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,field_description:agreement_legal.field_agreement__template_id
#: model:ir.model.fields,field_description:agreement_legal.field_create_agreement_wizard__template_id
#: model_terms:ir.ui.view,arch_db:agreement_legal.partner_agreement_form_view
msgid "Template"
msgstr ""
#. module: agreement_legal
@@ -1527,11 +1320,6 @@ msgstr ""
msgid "Templates"
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,field_description:agreement_legal.field_agreement__term
msgid "Term (Months)"
msgstr ""
#. module: agreement_legal
#: model_terms:ir.ui.view,arch_db:agreement_legal.partner_agreement_form_view
msgid "Term Dates"
@@ -1555,8 +1343,9 @@ msgid ""
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,help:agreement_legal.field_agreement__increase_type_id
msgid "The amount that certain rates may increase."
#: model:ir.model.fields,help:agreement_legal.field_agreement__readonly
#: model:ir.model.fields,help:agreement_legal.field_agreement_stage__readonly
msgid "The agreement can not edit if set Readonly = True."
msgstr ""
#. module: agreement_legal
@@ -1582,15 +1371,11 @@ msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,help:agreement_legal.field_agreement_appendix__title
#: model:ir.model.fields,help:agreement_legal.field_agreement_clause__title
#: model:ir.model.fields,help:agreement_legal.field_agreement_recital__title
#: model:ir.model.fields,help:agreement_legal.field_agreement_section__title
msgid "The title is displayed on the PDF. The name is not."
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,help:agreement_legal.field_agreement_recital__title
msgid "The title is displayed on the PDF.The name is not."
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,help:agreement_legal.field_agreement__company_signed_user_id
msgid ""
@@ -1604,6 +1389,11 @@ msgid ""
"versions can be referenced."
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,help:agreement_legal.field_agreement_clause__temp_agreement_id
msgid "This field help to filter section."
msgstr ""
#. module: agreement_legal
#: model_terms:ir.ui.view,arch_db:agreement_legal.agreement_appendix_form
#: model_terms:ir.ui.view,arch_db:agreement_legal.agreement_recital_form
@@ -1644,10 +1434,9 @@ msgstr ""
#: model:ir.model.fields,field_description:agreement_legal.field_agreement__name
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_appendix__title
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_clause__title
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_increasetype__name
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_recital__title
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_renewaltype__name
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_section__title
#: model:ir.model.fields,field_description:agreement_legal.field_create_agreement_wizard__name
msgid "Title"
msgstr ""
@@ -1658,6 +1447,7 @@ msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,field_description:agreement_legal.field_agreement_stage__stage_type
#: model_terms:ir.ui.view,arch_db:agreement_legal.partner_agreement_stage_search_view
msgid "Type"
msgstr ""
@@ -1696,6 +1486,11 @@ msgstr ""
msgid "User"
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,help:agreement_legal.field_agreement__created_by
msgid "User which create the agreement."
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,field_description:agreement_legal.field_agreement__version
msgid "Version"
@@ -1706,14 +1501,6 @@ msgstr ""
msgid "Version:"
msgstr ""
#. module: agreement_legal
#. openerp-web
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#, python-format
msgid "Warning"
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,help:agreement_legal.field_agreement__sub_model_object_field_id
#: model:ir.model.fields,help:agreement_legal.field_agreement_appendix__sub_model_object_field_id
@@ -1747,14 +1534,6 @@ msgstr ""
msgid "When the agreement starts."
msgstr ""
#. module: agreement_legal
#. openerp-web
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#, python-format
msgid "all records"
msgstr ""
#. module: agreement_legal
#: model:ir.model.fields,help:agreement_legal.field_agreement_appendix__dynamic_content
#: model:ir.model.fields,help:agreement_legal.field_agreement_clause__dynamic_content
@@ -1763,59 +1542,16 @@ msgstr ""
msgid "compute dynamic Content"
msgstr ""
#. module: agreement_legal
#. openerp-web
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#, python-format
msgid "is"
msgstr ""
#. module: agreement_legal
#. openerp-web
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#, python-format
msgid "not"
msgstr ""
#. module: agreement_legal
#: model_terms:ir.ui.view,arch_db:agreement_legal.view_project_agreement_kanban
msgid "oe_kanban_text_red"
msgstr ""
#. module: agreement_legal
#. openerp-web
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#, python-format
msgid "of the following rules:"
msgstr ""
#. module: agreement_legal
#: model_terms:ir.ui.view,arch_db:agreement_legal.partner_agreement_form_view
msgid "on"
msgstr ""
#. module: agreement_legal
#. openerp-web
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#, python-format
msgid "or"
msgstr ""
#. module: agreement_legal
#. openerp-web
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#, python-format
msgid "record(s)"
msgstr ""
#. module: agreement_legal
#. openerp-web
#: code:addons/agreement_legal/static/src/xml/domain_widget_view.xml:0
#, python-format
msgid "set"
msgstr ""
#. module: agreement_legal
#: model_terms:ir.ui.view,arch_db:agreement_legal.view_project_agreement_kanban
msgid "user & picture"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -12,7 +12,4 @@ from . import (
agreement_type,
agreement_subtype,
res_partner,
product_template,
agreement_renewaltype,
agreement_increasetype,
)

View File

@@ -1,6 +1,11 @@
# Copyright (C) 2018 - TODAY, Pavlov Media
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import ast
import json as simplejson
from lxml import etree
from odoo import _, api, fields, models
@@ -52,12 +57,6 @@ class Agreement(models.Model):
tracking=True,
help="Date the contract was signed by the Partner.",
)
term = fields.Integer(
string="Term (Months)",
tracking=True,
help="Number of months this agreement/contract is in effect with the "
"partner.",
)
expiration_notice = fields.Integer(
string="Exp. Notice (Days)",
tracking=True,
@@ -87,12 +86,6 @@ class Agreement(models.Model):
copy=False,
help="ID used for internal contract tracking.",
)
increase_type_id = fields.Many2one(
"agreement.increasetype",
string="Increase Type",
tracking=True,
help="The amount that certain rates may increase.",
)
termination_requested = fields.Date(
string="Termination Requested Date",
tracking=True,
@@ -107,7 +100,6 @@ class Agreement(models.Model):
reviewed_user_id = fields.Many2one("res.users", string="Reviewed By", tracking=True)
approved_date = fields.Date(string="Approved Date", tracking=True)
approved_user_id = fields.Many2one("res.users", string="Approved By", tracking=True)
currency_id = fields.Many2one("res.currency", string="Currency")
partner_id = fields.Many2one(
"res.partner",
string="Partner",
@@ -192,7 +184,6 @@ class Agreement(models.Model):
help="Select the sub-type of this agreement. Sub-Types are related to "
"agreement types.",
)
product_ids = fields.Many2many("product.template", string="Products & Services")
assigned_user_id = fields.Many2one(
"res.users",
string="Assigned To",
@@ -219,12 +210,6 @@ class Agreement(models.Model):
"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",
tracking=True,
help="Describes what happens after the contract expires.",
)
recital_ids = fields.One2many(
"agreement.recital", "agreement_id", string="Recitals", copy=True
)
@@ -241,6 +226,7 @@ class Agreement(models.Model):
string="Previous Versions",
copy=False,
domain=[("active", "=", False)],
context={"active_test": False},
)
child_agreements_ids = fields.One2many(
"agreement",
@@ -294,19 +280,37 @@ class Agreement(models.Model):
help="""Final placeholder expression, to be copy-pasted in the desired
template field.""",
)
created_by = fields.Many2one(
"res.users",
string="Created By",
copy=False,
default=lambda self: self.env.user,
help="User which create the agreement.",
)
date_created = fields.Datetime(
string="Created On",
copy=False,
default=lambda self: fields.Datetime.now(),
help="Date which create the agreement.",
)
template_id = fields.Many2one(
"agreement",
string="Template",
domain=[("is_template", "=", True)],
)
readonly = fields.Boolean(
related="stage_id.readonly",
)
# compute the dynamic content for mako expression
# compute the dynamic content for jinja expression
def _compute_dynamic_description(self):
MailTemplates = self.env["mail.template"]
for agreement in self:
lang = agreement.partner_id.lang or "en_US"
description = MailTemplates.with_context(lang=lang)._render_template(
agreement.description, "agreement", [agreement.id]
)
des = ""
for i in description:
des += description[i]
agreement.dynamic_description = des
)[agreement.id]
agreement.dynamic_description = description
def _compute_dynamic_parties(self):
MailTemplates = self.env["mail.template"]
@@ -314,7 +318,7 @@ class Agreement(models.Model):
lang = agreement.partner_id.lang or "en_US"
parties = MailTemplates.with_context(lang=lang)._render_template(
agreement.parties, "agreement", [agreement.id]
)
)[agreement.id]
agreement.dynamic_parties = parties
def _compute_dynamic_special_terms(self):
@@ -323,14 +327,13 @@ class Agreement(models.Model):
lang = agreement.partner_id.lang or "en_US"
special_terms = MailTemplates.with_context(lang=lang)._render_template(
agreement.special_terms, "agreement", [agreement.id]
)
)[agreement.id]
agreement.dynamic_special_terms = special_terms
@api.onchange("field_id", "sub_model_object_field_id", "default_value")
def onchange_copyvalue(self):
self.sub_object_id = False
self.copyvalue = False
self.sub_object_id = False
if self.field_id and not self.field_id.relation:
self.copyvalue = "${{object.{} or {}}}".format(
self.field_id.name, self.default_value or "''"
@@ -360,29 +363,55 @@ class Agreement(models.Model):
string="Stage",
group_expand="_read_group_stage_ids",
help="Select the current stage of the agreement.",
default=lambda self: self._get_default_stage_id(),
tracking=True,
index=True,
copy=False,
)
@api.model
def _get_default_stage_id(self):
try:
stage_id = self.env.ref("agreement_legal.agreement_stage_new").id
except ValueError:
stage_id = False
return stage_id
def _get_old_version_default_vals(self):
self.ensure_one()
default_vals = {
"name": "{} - OLD VERSION".format(self.name),
"active": False,
"parent_agreement_id": self.id,
"version": self.version,
"revision": self.revision,
"created_by": self.created_by.id,
"date_created": self.date_created,
"code": "{}-V{}".format(self.code, str(self.version)),
"stage_id": self.stage_id.id,
}
return default_vals
# Create New Version Button
def create_new_version(self):
for rec in self:
if not rec.state == "draft":
# Make sure status is draft
rec.state = "draft"
default_vals = {
"name": "{} - OLD VERSION".format(rec.name),
"active": False,
"parent_agreement_id": rec.id,
"version": rec.version,
"code": rec.code + "-V" + str(rec.version),
}
# Make a current copy and mark it as old
rec.copy(default=default_vals)
# Increment the Version
rec.version = rec.version + 1
rec.copy(default=rec._get_old_version_default_vals())
# Update version, created by and created on
rec.update(
{
"version": rec.version + 1,
"created_by": self.env.user.id,
"date_created": fields.Datetime.now(),
}
)
# Reset revision to 0 since it's a new version
rec.revision = 0
def create_new_agreement(self):
def _get_new_agreement_default_vals(self):
self.ensure_one()
default_vals = {
"name": "New",
@@ -390,10 +419,13 @@ class Agreement(models.Model):
"version": 1,
"revision": 0,
"state": "draft",
"stage_id": self.env.ref("agreement_legal.agreement_stage_new").id,
"is_template": False,
}
res = self.copy(default=default_vals)
res.sections_ids.mapped("clauses_ids").write({"agreement_id": res.id})
return default_vals
def create_new_agreement(self):
self.ensure_one()
res = self.copy(default=self._get_new_agreement_default_vals())
return {
"res_model": "agreement",
"type": "ir.actions.act_window",
@@ -407,10 +439,72 @@ class Agreement(models.Model):
if vals.get("code", _("New")) == _("New"):
vals["code"] = self.env["ir.sequence"].next_by_code("agreement") or _("New")
if not vals.get("stage_id"):
vals["stage_id"] = self.env.ref("agreement_legal.agreement_stage_new").id
vals["stage_id"] = self._get_default_stage_id()
return super().create(vals)
# Increments the revision on each save action
def write(self, vals):
vals["revision"] = self.revision + 1
return super().write(vals)
res = True
for rec in self:
has_revision = False
if "revision" not in vals:
vals["revision"] = rec.revision + 1
has_revision = True
res = super(Agreement, rec).write(vals)
if has_revision:
vals.pop("revision")
return res
def copy(self, default=None):
"""Assign a value for code is New"""
default = dict(default or {})
if not default.get("code", False):
default.setdefault("code", _("New"))
res = super().copy(default)
res.sections_ids.mapped("clauses_ids").write({"agreement_id": res.id})
return res
def _exclude_readonly_field(self):
return ["stage_id"]
@api.model
def fields_view_get(
self, view_id=None, view_type=False, toolbar=False, submenu=False
):
res = super().fields_view_get(
view_id=view_id, view_type=view_type, toolbar=toolbar, submenu=submenu
)
# Readonly fields
doc = etree.XML(res["arch"])
if view_type == "form":
for node in doc.xpath("//field"):
if node.attrib.get("name") in self._exclude_readonly_field():
continue
attrs = ast.literal_eval(node.attrib.get("attrs", "{}"))
if attrs:
if attrs.get("readonly"):
attrs["readonly"] = ["|", ("readonly", "=", True)] + attrs[
"readonly"
]
else:
attrs["readonly"] = [("readonly", "=", True)]
else:
attrs["readonly"] = [("readonly", "=", True)]
node.set("attrs", simplejson.dumps(attrs))
modifiers = ast.literal_eval(
node.attrib.get("modifiers", "{}")
.replace("true", "True")
.replace("false", "False")
)
readonly = modifiers.get("readonly")
invisible = modifiers.get("invisible")
required = modifiers.get("required")
if isinstance(readonly, bool) and readonly:
attrs["readonly"] = readonly
if isinstance(invisible, bool) and invisible:
attrs["invisible"] = invisible
if isinstance(required, bool) and required:
attrs["required"] = required
node.set("modifiers", simplejson.dumps(attrs))
res["arch"] = etree.tostring(doc)
return res

View File

@@ -65,7 +65,6 @@ class AgreementAppendix(models.Model):
def onchange_copyvalue(self):
self.sub_object_id = False
self.copyvalue = False
self.sub_object_id = False
if self.field_id and not self.field_id.relation:
self.copyvalue = "${{object.{} or {}}}".format(
self.field_id.name,
@@ -83,7 +82,7 @@ class AgreementAppendix(models.Model):
self.default_value or "''",
)
# compute the dynamic content for mako expression
# compute the dynamic content for jinja expression
def _compute_dynamic_content(self):
MailTemplates = self.env["mail.template"]
for appendix in self:
@@ -94,5 +93,5 @@ class AgreementAppendix(models.Model):
)
content = MailTemplates.with_context(lang=lang)._render_template(
appendix.content, "agreement.appendix", [appendix.id]
)
)[appendix.id]
appendix.dynamic_content = content

View File

@@ -15,6 +15,9 @@ class AgreementClause(models.Model):
)
sequence = fields.Integer(string="Sequence")
agreement_id = fields.Many2one("agreement", string="Agreement", ondelete="cascade")
temp_agreement_id = fields.Many2one(
"agreement", string="Temp Agreement", help="This field help to filter section."
)
section_id = fields.Many2one(
"agreement.section", string="Section", ondelete="cascade"
)
@@ -66,7 +69,6 @@ class AgreementClause(models.Model):
def onchange_copyvalue(self):
self.sub_object_id = False
self.copyvalue = False
self.sub_object_id = False
if self.field_id and not self.field_id.relation:
self.copyvalue = "${{object.{} or {}}}".format(
self.field_id.name,
@@ -84,7 +86,7 @@ class AgreementClause(models.Model):
self.default_value or "''",
)
# compute the dynamic content for mako expression
# compute the dynamic content for jinja expression
def _compute_dynamic_content(self):
MailTemplates = self.env["mail.template"]
for clause in self:
@@ -93,5 +95,5 @@ class AgreementClause(models.Model):
)
content = MailTemplates.with_context(lang=lang)._render_template(
clause.content, "agreement.clause", [clause.id]
)
)[clause.id]
clause.dynamic_content = content

View File

@@ -1,24 +0,0 @@
# Copyright (C) 2018 - TODAY, Pavlov Media
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import fields, models
# Main Agreement Increase Type Records Model
class AgreementIncreaseType(models.Model):
_name = "agreement.increasetype"
_description = "Agreement Increase Type"
# 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."
)

View File

@@ -12,7 +12,7 @@ class AgreementRecital(models.Model):
name = fields.Char(string="Name", required=True)
title = fields.Char(
string="Title",
help="The title is displayed on the PDF." "The name is not.",
help="The title is displayed on the PDF. The name is not.",
)
sequence = fields.Integer(string="Sequence", default=10)
content = fields.Html(string="Content")
@@ -64,7 +64,6 @@ class AgreementRecital(models.Model):
def onchange_copyvalue(self):
self.sub_object_id = False
self.copyvalue = False
self.sub_object_id = False
if self.field_id and not self.field_id.relation:
self.copyvalue = "${{object.{} or {}}}".format(
self.field_id.name, self.default_value or "''"
@@ -81,7 +80,7 @@ class AgreementRecital(models.Model):
self.default_value or "''",
)
# compute the dynamic content for mako expression
# compute the dynamic content for jinja expression
def _compute_dynamic_content(self):
MailTemplates = self.env["mail.template"]
for recital in self:
@@ -90,5 +89,5 @@ class AgreementRecital(models.Model):
)
content = MailTemplates.with_context(lang=lang)._render_template(
recital.content, "agreement.recital", [recital.id]
)
)[recital.id]
recital.dynamic_content = content

View File

@@ -1,21 +0,0 @@
# Copyright (C) 2018 - TODAY, Pavlov Media
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import fields, models
# Main Agreement Section Records Model
class AgreementRenewalType(models.Model):
_name = "agreement.renewaltype"
_description = "Agreement 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."
)

View File

@@ -66,7 +66,6 @@ class AgreementSection(models.Model):
def onchange_copyvalue(self):
self.sub_object_id = False
self.copyvalue = False
self.sub_object_id = False
if self.field_id and not self.field_id.relation:
self.copyvalue = "${{object.{} or {}}}".format(
self.field_id.name, self.default_value or "''"
@@ -83,7 +82,7 @@ class AgreementSection(models.Model):
self.default_value or "''",
)
# compute the dynamic content for mako expression
# compute the dynamic content for jinja expression
def _compute_dynamic_content(self):
MailTemplates = self.env["mail.template"]
for section in self:
@@ -92,5 +91,5 @@ class AgreementSection(models.Model):
)
content = MailTemplates.with_context(lang=lang)._render_template(
section.content, "agreement.section", [section.id]
)
)[section.id]
section.dynamic_content = content

View File

@@ -4,7 +4,7 @@
from odoo import fields, models
# Main Agreement Section Records Model
# Main Stage on the Agreement
class AgreementStage(models.Model):
_name = "agreement.stage"
_description = "Agreement Stages"
@@ -12,7 +12,6 @@ class AgreementStage(models.Model):
# 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",
@@ -22,3 +21,9 @@ class AgreementStage(models.Model):
stage_type = fields.Selection(
[("agreement", "Agreement")], string="Type", required=True
)
active = fields.Boolean(string="Active", default=True)
readonly = fields.Boolean(
string="Readonly",
default=False,
help="The agreement can not edit if set Readonly = True.",
)

View File

@@ -1,12 +0,0 @@
# Copyright (C) 2018 - TODAY, Pavlov Media
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import fields, models
# Main Agreement Status Records Model
class AgreementStatus(models.Model):
_name = "agreement.type"
# General
name = fields.Char(string="Title", required=True)

View File

@@ -8,5 +8,6 @@ class AgreementSubtype(models.Model):
_name = "agreement.subtype"
_description = "Agreement Subtypes"
name = fields.Char(string="Name", required=True)
name = fields.Char(string="Sub-Type Name", required=True)
agreement_type_id = fields.Many2one("agreement.type", string="Agreement Type")
active = fields.Boolean(string="Active", default=True)

View File

@@ -9,5 +9,5 @@ class AgreementType(models.Model):
_description = "Agreement Types"
agreement_subtypes_ids = fields.One2many(
"agreement.subtype", "agreement_type_id", string="Subtypes"
"agreement.subtype", "agreement_type_id", string="Sub-Types"
)

View File

@@ -1,10 +0,0 @@
# Copyright (C) 2018 - TODAY, Pavlov Media
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import fields, models
class Product(models.Model):
_inherit = "product.template"
agreements_ids = fields.Many2many("agreement", string="Agreements")

View File

@@ -4,3 +4,4 @@
* Maxime Chambreuil <mchambreuil@opensourceintegrators.com>
* Sandip Mangukiya <smangukiya@opensourceintegrators.com>
* Yves Goldberg <yves@ygol.com>
* Tharathip Chaweewongphan <tharathipc@ecosoft.co.th>

View File

@@ -3,17 +3,21 @@
<record id="partner_agreement_contract_document" model="ir.actions.report">
<field name="name">Agreement</field>
<field name="model">agreement</field>
<field name="binding_model_id" ref="model_agreement" />
<field name="report_type">qweb-pdf</field>
<field name="report_name">agreement_legal.report_agreement_document</field>
<field name="report_file">agreement_legal.report_agreement_document</field>
<field name="binding_view_types">list,form</field>
</record>
<record id="partner_agreement_contract_document_preview" model="ir.actions.report">
<field name="name">Agreement Preview</field>
<field name="model">agreement</field>
<field name="binding_model_id" ref="model_agreement" />
<field name="report_type">qweb-html</field>
<field name="report_name">agreement_legal.report_agreement_document</field>
<field name="report_file">agreement_legal.report_agreement_document</field>
<field name="binding_view_types">list,form</field>
</record>
<template id="report_agreement_document">

View File

@@ -3,19 +3,19 @@ access_agreement_readonly,agreement readonly,model_agreement,group_agreement_rea
access_agreement_allusers,agreement all users,model_agreement,group_agreement_user,1,1,1,0
access_agreement_manager,agreement manager,model_agreement,group_agreement_manager,1,1,1,1
access_agreement_recital_readonly,recital readonly,model_agreement_recital,group_agreement_readonly,1,0,0,0
access_agreement_recital_allusers,recital all users,model_agreement_recital,group_agreement_user,1,1,1,0
access_agreement_recital_allusers,recital all users,model_agreement_recital,group_agreement_user,1,1,1,1
access_agreement_recital_manager,recital manager,model_agreement_recital,group_agreement_manager,1,1,1,1
access_agreement_section_readonly,section readonly,model_agreement_section,group_agreement_readonly,1,0,0,0
access_agreement_section_allusers,section all users,model_agreement_section,group_agreement_user,1,1,1,0
access_agreement_section_allusers,section all users,model_agreement_section,group_agreement_user,1,1,1,1
access_agreement_section_manager,section manager,model_agreement_section,group_agreement_manager,1,1,1,1
access_agreement_clause_readonly,clause readonly,model_agreement_clause,group_agreement_readonly,1,0,0,0
access_agreement_clause_allusers,clause all users,model_agreement_clause,group_agreement_user,1,1,1,0
access_agreement_clause_allusers,clause all users,model_agreement_clause,group_agreement_user,1,1,1,1
access_agreement_clause_manager,clause manager,model_agreement_clause,group_agreement_manager,1,1,1,1
access_agreement_appendix_readonly,appendix readonly,model_agreement_appendix,group_agreement_readonly,1,0,0,0
access_agreement_appendix_allusers,appendix all users,model_agreement_appendix,group_agreement_user,1,1,1,0
access_agreement_appendix_allusers,appendix all users,model_agreement_appendix,group_agreement_user,1,1,1,1
access_agreement_appendix_manager,appendix manager,model_agreement_appendix,group_agreement_manager,1,1,1,1
access_agreement_line_readonly,agreement line readonly,model_agreement_line,group_agreement_readonly,1,0,0,0
access_agreement_line_allusers,agreement line all users,model_agreement_line,group_agreement_user,1,1,1,0
access_agreement_line_allusers,agreement line all users,model_agreement_line,group_agreement_user,1,1,1,1
access_agreement_line_manager,agreement line manager,model_agreement_line,group_agreement_manager,1,1,1,1
access_agreement_stage_readonly,stage readonly,model_agreement_stage,group_agreement_readonly,1,0,0,0
access_agreement_stage_manager,stage manager,model_agreement_stage,group_agreement_manager,1,1,1,1
@@ -23,7 +23,4 @@ access_agreement_type_readonly,type readonly,model_agreement_type,group_agreemen
access_agreement_type_manager,type manager,model_agreement_type,group_agreement_manager,1,1,1,1
access_agreement_subtype_readonly,subtype readonly,model_agreement_subtype,group_agreement_readonly,1,0,0,0
access_agreement_subtype_manager,subtype manager,model_agreement_subtype,group_agreement_manager,1,1,1,1
access_agreement_renewaltype_readonly,renewaltype readonly,model_agreement_renewaltype,group_agreement_readonly,1,0,0,0
access_agreement_renewaltype_manager,renewaltype manager,model_agreement_renewaltype,group_agreement_manager,1,1,1,1
access_agreement_increasetype_readonly,increasetype readonly,model_agreement_increasetype,group_agreement_readonly,1,0,0,0
access_agreement_increasetype_manager,increasetype manager,model_agreement_increasetype,group_agreement_manager,1,1,1,1
access_create_agreement_wizard_allusers,create agreement wizard users,model_create_agreement_wizard,group_agreement_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
3 access_agreement_allusers agreement all users model_agreement group_agreement_user 1 1 1 0
4 access_agreement_manager agreement manager model_agreement group_agreement_manager 1 1 1 1
5 access_agreement_recital_readonly recital readonly model_agreement_recital group_agreement_readonly 1 0 0 0
6 access_agreement_recital_allusers recital all users model_agreement_recital group_agreement_user 1 1 1 0 1
7 access_agreement_recital_manager recital manager model_agreement_recital group_agreement_manager 1 1 1 1
8 access_agreement_section_readonly section readonly model_agreement_section group_agreement_readonly 1 0 0 0
9 access_agreement_section_allusers section all users model_agreement_section group_agreement_user 1 1 1 0 1
10 access_agreement_section_manager section manager model_agreement_section group_agreement_manager 1 1 1 1
11 access_agreement_clause_readonly clause readonly model_agreement_clause group_agreement_readonly 1 0 0 0
12 access_agreement_clause_allusers clause all users model_agreement_clause group_agreement_user 1 1 1 0 1
13 access_agreement_clause_manager clause manager model_agreement_clause group_agreement_manager 1 1 1 1
14 access_agreement_appendix_readonly appendix readonly model_agreement_appendix group_agreement_readonly 1 0 0 0
15 access_agreement_appendix_allusers appendix all users model_agreement_appendix group_agreement_user 1 1 1 0 1
16 access_agreement_appendix_manager appendix manager model_agreement_appendix group_agreement_manager 1 1 1 1
17 access_agreement_line_readonly agreement line readonly model_agreement_line group_agreement_readonly 1 0 0 0
18 access_agreement_line_allusers agreement line all users model_agreement_line group_agreement_user 1 1 1 0 1
19 access_agreement_line_manager agreement line manager model_agreement_line group_agreement_manager 1 1 1 1
20 access_agreement_stage_readonly stage readonly model_agreement_stage group_agreement_readonly 1 0 0 0
21 access_agreement_stage_manager stage manager model_agreement_stage group_agreement_manager 1 1 1 1
23 access_agreement_type_manager type manager model_agreement_type group_agreement_manager 1 1 1 1
24 access_agreement_subtype_readonly subtype readonly model_agreement_subtype group_agreement_readonly 1 0 0 0
25 access_agreement_subtype_manager subtype manager model_agreement_subtype group_agreement_manager 1 1 1 1
26 access_agreement_renewaltype_readonly access_create_agreement_wizard_allusers renewaltype readonly create agreement wizard users model_agreement_renewaltype model_create_agreement_wizard group_agreement_readonly group_agreement_user 1 0 1 0 1 0 1
access_agreement_renewaltype_manager renewaltype manager model_agreement_renewaltype group_agreement_manager 1 1 1 1
access_agreement_increasetype_readonly increasetype readonly model_agreement_increasetype group_agreement_readonly 1 0 0 0
access_agreement_increasetype_manager increasetype manager model_agreement_increasetype group_agreement_manager 1 1 1 1

View File

@@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="module_agreement_legal_category" model="ir.module.category">
<field name="name">Agreement</field>
@@ -32,5 +31,4 @@
eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"
/>
</record>
</odoo>

View File

@@ -447,6 +447,7 @@ If you spotted it first, help us smashing it by providing a detailed and welcome
<li>Maxime Chambreuil &lt;<a class="reference external" href="mailto:mchambreuil&#64;opensourceintegrators.com">mchambreuil&#64;opensourceintegrators.com</a>&gt;</li>
<li>Sandip Mangukiya &lt;<a class="reference external" href="mailto:smangukiya&#64;opensourceintegrators.com">smangukiya&#64;opensourceintegrators.com</a>&gt;</li>
<li>Yves Goldberg &lt;<a class="reference external" href="mailto:yves&#64;ygol.com">yves&#64;ygol.com</a>&gt;</li>
<li>Tharathip Chaweewongphan &lt;<a class="reference external" href="mailto:tharathipc&#64;ecosoft.co.th">tharathipc&#64;ecosoft.co.th</a>&gt;</li>
</ul>
</div>
<div class="section" id="other-credits">

View File

@@ -0,0 +1,40 @@
odoo.define("agreement_legal.agreement", function (require) {
"use strict";
var KanbanController = require("web.KanbanController");
var ListController = require("web.ListController");
var FormController = require("web.FormController");
var includeDict = {
renderButtons: function () {
this._super.apply(this, arguments);
if (this.modelName === "agreement" && this.$buttons) {
var self = this;
var data = this.model.get(this.handle);
if (data.context.default_is_template === true) {
// Hide create from template
this.$buttons.find(".create_agreement_from_template").hide();
} else {
// Hide create button
this.$buttons.find(".o-kanban-button-new").hide();
this.$buttons.find(".o_list_button_add").hide();
this.$buttons.find(".o_form_button_create").hide();
}
this.$buttons
.find(".create_agreement_from_template")
.on("click", function () {
self.do_action(
"agreement_legal.create_agreement_from_template_action",
{
additional_context: {},
}
);
});
}
},
};
KanbanController.include(includeDict);
ListController.include(includeDict);
FormController.include(includeDict);
});

View File

@@ -1,85 +0,0 @@
odoo.define("agreement_legal.domain_widget_ext", function (require) {
"use strict";
var basic_fields = require("web.basic_fields");
var DomainSelector = require("web.DomainSelector");
var session = require("web.session");
var core = require("web.core");
var qweb = core.qweb;
basic_fields.FieldDomain.include({
/**
* Init
*/
init: function () {
this._super.apply(this, arguments);
// Add Additional options
this.partialUse = this.nodeOptions.partial_use || false;
},
// ----------------------------------------------------------------------
// Private
// ----------------------------------------------------------------------
/**
* @private
* @override _render from AbstractField
* @returns {Deferred}
*/
_render: function () {
// If there is no model, only change the non-domain-selector content
if (!this._domainModel) {
this._replaceContent();
return $.when();
}
// Convert char value to array value
var value = this.value || "[]";
// Create the domain selector or change the value of the current
// one...
var def = null;
if (this.domainSelector) {
def = this.domainSelector.setDomain(value);
} else {
this.domainSelector = new DomainSelector(
this,
this._domainModel,
value,
{
readonly: this.mode === "readonly" || this.inDialog,
filters: this.fsFilters,
debugMode: session.debug,
partialUse: this.partialUse || false,
}
);
def = this.domainSelector.prependTo(this.$el);
}
// ... then replace the other content (matched records, etc)
return def.then(this._replaceContent.bind(this));
},
/**
* Render the field DOM except for the domain selector part. The full
* field DOM is composed of a DIV which contains the domain selector
* widget, followed by other content. This other content is handled by
* this method.
*
* @private
*/
_replaceContent: function () {
if (this._$content) {
this._$content.remove();
}
this._$content = $(
qweb.render("FieldDomain.content", {
hasModel: Boolean(this._domainModel),
isValid: Boolean(this._isValidForModel),
nbRecords: this.record.specialData[this.name].nbRecords || 0,
inDialogEdit: this.inDialog && this.mode === "edit",
partialUse: this.partialUse || false,
})
);
this._$content.appendTo(this.$el);
},
});
});

View File

@@ -0,0 +1,22 @@
<templates>
<t t-extend="ListView.buttons">
<t t-jquery="button.o_list_button_add" t-operation="after">
<button
type="button"
t-if="widget and widget.modelName and widget.modelName == 'agreement'"
class="create_agreement_from_template btn btn-primary"
>Create From Template
</button>
</t>
</t>
<t t-extend="KanbanView.buttons">
<t t-jquery="button" t-operation="after">
<button
type="button"
t-if="widget and widget.modelName and widget.modelName == 'agreement'"
class="create_agreement_from_template btn btn-primary"
>Create From Template
</button>
</t>
</t>
</templates>

View File

@@ -1,298 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<templates id="template" xml:space="preserve">
<t t-name="FieldDomain.content">
<t t-if="partialUse">
<div t-if="hasModel" class="o_field_domain_panel">
</div>
</t>
<t t-if="!partialUse">
<div t-if="hasModel" class="o_field_domain_panel">
<i
class="fa fa-arrow-right"
role="img"
aria-label="Domain"
title="Domain"
/>
<button
t-if="isValid"
class="btn btn-sm btn-secondary o_domain_show_selection_button"
type="button"
>
<t t-esc="nbRecords" /> record(s)
</button>
<span t-else="" class="text-warning" role="alert"><i
class="fa fa-exclamation-triangle"
role="img"
aria-label="Warning"
title="Warning"
/> Invalid domain</span>
<button
t-if="inDialogEdit"
class="btn btn-sm btn-primary o_field_domain_dialog_button"
>Edit Domain</button>
</div>
<div t-else="">Select a model to add a filter.</div>
</t>
</t>
<div
aria-atomic="true"
t-name="DomainSelector"
t-attf-class="o_domain_node o_domain_tree o_domain_selector #{widget.readonly ? 'o_read_mode' : 'o_edit_mode'}"
>
<t t-if="widget.options.partialUse">
<t t-if="widget.children.length === 0">
<span>SMatch <strong>all records</strong></span>
<button
t-if="!widget.readonly"
class="btn btn-sm btn-primary o_domain_add_first_node_button"
><i class="fa fa-plus" /> Add filter</button>
</t>
<t t-else="">
<div class="o_domain_tree_header">
<t
t-if="widget.children.length === 1"
>Please navigate below and select field:</t>
<t t-else="">
<span>SSMatch records with</span>
<t t-call="DomainTree.OperatorSelector" />
<span>of the following rules:</span>
</t>
</div>
<div class="o_domain_node_children_container" />
</t>
</t>
<t t-if="!widget.options.partialUse">
<t t-if="widget.children.length === 0">
<span>Match <strong>all records</strong></span>
<button
t-if="!widget.readonly"
class="btn btn-sm btn-primary o_domain_add_first_node_button"
><i class="fa fa-plus" /> Add filter</button>
</t>
<t t-else="">
<div class="o_domain_tree_header">
<t
t-if="widget.children.length === 1"
>Match records with the following rule:</t>
<t t-else="">
<span>Match records with</span>
<t t-call="DomainTree.OperatorSelector" />
<span>of the following rules:</span>
</t>
</div>
<div class="o_domain_node_children_container" />
</t>
<label
t-if="widget.debug &amp;&amp; !widget.readonly"
class="o_domain_debug_container"
>
<span class="small"># Code editor</span>
<input type="text" class="o_domain_debug_input" />
</label>
</t>
</div>
<t t-name="DomainNode.ControlPanel">
<t t-if="widget.options.partialUse">
<div
t-if="!widget.readonly &amp;&amp; !widget.noControlPanel"
class="o_domain_node_control_panel"
role="toolbar"
aria-label="Domain node"
>
</div>
</t>
<t t-if="!widget.options.partialUse">
<div
t-if="!widget.readonly &amp;&amp; !widget.noControlPanel"
class="o_domain_node_control_panel"
role="toolbar"
aria-label="Domain node"
>
<button
class="btn o_domain_delete_node_button"
title="Delete node"
aria-label="Delete node"
><i class="fa fa-times" /></button>
<button
class="btn o_domain_add_node_button"
title="Add node"
aria-label="Add node"
><i class="fa fa-plus-circle" /></button>
<button
class="btn o_domain_add_node_button"
title="Add branch"
aria-label="Add branch"
data-branch="1"
><i class="fa fa-ellipsis-h" /></button>
</div>
</t>
</t>
<div
t-name="DomainLeaf"
t-attf-class="o_domain_node o_domain_leaf o_domain_selector_row #{widget.readonly ? 'o_read_mode' : 'o_edit_mode'}"
>
<t t-call="DomainNode.ControlPanel" />
<div t-if="!widget.readonly" class="o_domain_leaf_edition">
<!-- field selector will be instantiated here -->
<t t-if="!widget.options.partialUse">
<div> <!-- used for flex stretching -->
<select class="o_domain_leaf_operator_select o_input">
<option
t-foreach="widget.operators"
t-as="key"
t-att-value="key"
t-att-selected="widget.displayOperator === key ? 'selected' : None"
>
<t t-esc="key_value" />
</option>
</select>
</div>
<div
t-attf-class="o_ds_value_cell#{_.contains(['set', 'not set'], widget.displayOperator) ? ' d-none' : ''}"
>
<t t-if="widget.selectionChoices !== null">
<select class="o_domain_leaf_value_input o_input">
<option
t-foreach="widget.selectionChoices"
t-as="val"
t-att-value="val[0]"
t-att-selected="_.contains(val, widget.displayValue) ? 'selected' : None"
>
<t t-esc="val[1]" />
</option>
</select>
</t>
<t t-else="">
<t t-if="_.contains(['in', 'not in'], widget.operator)">
<div class="o_domain_leaf_value_input">
<span
class="badge badge-pill"
t-foreach="widget.displayValue"
t-as="val"
>
<t t-esc="val" /> <i
class="o_domain_leaf_value_remove_tag_button fa fa-times"
t-att-data-value="val"
role="img"
aria-label="Remove tag"
title="Remove tag"
/>
</span>
</div>
<div class="o_domain_leaf_value_tags">
<input
placeholder="Add new value"
type="text"
class="o_input"
/>
<button
class="btn btn-sm btn-primary fa fa-plus o_domain_leaf_value_add_tag_button"
aria-label="Add tag"
title="Add tag"
/>
</div>
</t>
<t t-else="">
<input
class="o_domain_leaf_value_input o_input"
type="text"
t-att-value="widget.displayValue"
/>
</t>
</t>
</div>
</t>
</div>
<div t-else="" class="o_domain_leaf_info">
<!-- field selector will be instantiated here -->
<t t-if="_.isString(widget.value)">
<span class="o_domain_leaf_operator"><t
t-esc="widget.operator_mapping[widget.operator]"
/></span>
<span class="o_domain_leaf_value text-primary">"<t
t-esc="widget.value"
/>"</span>
</t>
<t t-if="_.isArray(widget.value)">
<span class="o_domain_leaf_operator"><t
t-esc="widget.operator_mapping[widget.operator]"
/></span>
<t t-foreach="widget.value" t-as="v">
<span class="o_domain_leaf_value text-primary">"<t
t-esc="v"
/>"</span>
<t t-if="!v_last"> or </t>
</t>
</t>
<t t-if="_.isNumber(widget.value)">
<span class="o_domain_leaf_operator"><t
t-esc="widget.operator_mapping[widget.operator]"
/></span>
<span class="o_domain_leaf_value text-primary"><t
t-esc="widget.value"
/></span>
</t>
<t t-if="_.isBoolean(widget.value)">
is
<t
t-if="widget.operator === '=' &amp;&amp; widget.value === false || widget.operator === '!=' &amp;&amp; widget.value === true"
>not</t>
set
</t>
</div>
</div>
<div
aria-atomic="true"
t-name="ModelFieldSelector"
t-attf-class="o_field_selector#{!widget.options.readonly ? ' o_edit_mode o_input' : ''}"
>
<div class="o_field_selector_value" tabindex="0" />
<t t-if="!widget.options.partialUse">
<div class="o_field_selector_controls" tabindex="0">
<i
role="alert"
class="fa fa-exclamation-triangle o_field_selector_warning d-none"
title="Invalid field chain"
aria-label="Invalid field chain"
/>
</div>
</t>
<div
t-if="!widget.options.readonly"
class="o_field_selector_popover d-none"
tabindex="0"
>
<div class="o_field_selector_popover_header text-center">
<i
class="fa fa-arrow-left o_field_selector_popover_option o_field_selector_prev_page"
title="Previous"
role="img"
aria-label="Previous"
/>
<div class="o_field_selector_title" />
<i
class="fa fa-times o_field_selector_popover_option o_field_selector_close"
title="Close"
role="img"
aria-label="Close"
/>
</div>
<div class="o_field_selector_popover_body">
<ul class="o_field_selector_page" />
</div>
<div
t-if="widget.options.debugMode"
class="o_field_selector_popover_footer"
>
<input type="text" class="o_input" />
</div>
</div>
</div>
</templates>

View File

@@ -6,3 +6,4 @@ from . import test_agreement_clause
from . import test_agreement_line
from . import test_agreement_recital
from . import test_agreement_section
from . import test_create_agreement_wizard

View File

@@ -2,6 +2,8 @@
from datetime import timedelta
from lxml import etree
from odoo import fields
from odoo.tests.common import TransactionCase
@@ -107,7 +109,7 @@ class TestAgreement(TransactionCase):
agreement_01.parties = "${object.name}"
self.assertEqual(
agreement_01.dynamic_parties,
"<p>{" + str(agreement_01.id) + ": '</p><p>TestAgreement</p>'}",
"<p>TestAgreement</p>",
)
# TEST 07: Test Special Terms Dynamic Field
@@ -116,7 +118,7 @@ class TestAgreement(TransactionCase):
agreement_01.special_terms = "${object.name}"
self.assertEqual(
agreement_01.dynamic_special_terms,
"{" + str(agreement_01.id) + ": 'TestAgreement'}",
"TestAgreement",
)
# TEST 02: Check Read Stages
@@ -129,3 +131,15 @@ class TestAgreement(TransactionCase):
order="id",
),
)
# Test fields_view_get
def test_agreement_fields_view_get(self):
res = self.env["agreement"].fields_view_get(
view_id=self.ref("agreement_legal.partner_agreement_form_view"),
view_type="form",
)
doc = etree.XML(res["arch"])
field = doc.xpath("//field[@name='partner_contact_id']")
self.assertEqual(
field[0].get("modifiers", ""), '{"readonly": [["readonly", "=", true]]}'
)

View File

@@ -77,5 +77,5 @@ class TestAgreementAppendices(TransactionCase):
appendix_01.content = "${object.name}"
self.assertEqual(
appendix_01.dynamic_content,
"<p>{" + str(appendix_01.id) + ": '</p><p>TestAppendices</p>'}",
"<p>TestAppendices</p>",
)

View File

@@ -77,5 +77,5 @@ class TestAgreementClauses(TransactionCase):
clause_01.content = "${object.name}"
self.assertEqual(
clause_01.dynamic_content,
"<p>{" + str(clause_01.id) + ": '</p><p>TestClause</p>'}",
"<p>TestClause</p>",
)

View File

@@ -77,5 +77,5 @@ class TestAgreementRectical(TransactionCase):
recital_01.content = "${object.name}"
self.assertEqual(
recital_01.dynamic_content,
"<p>{" + str(recital_01.id) + ": '</p><p>TestRecital</p>'}",
"<p>TestRecital</p>",
)

View File

@@ -77,5 +77,5 @@ class TestAgreementSection(TransactionCase):
section_01.content = "${object.name}"
self.assertEqual(
section_01.dynamic_content,
"<p>{" + str(section_01.id) + ": '</p><p>TestSection</p>'}",
"<p>TestSection</p>",
)

View File

@@ -0,0 +1,80 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html)
from odoo.tests.common import TransactionCase
class TestCreateAgreementWizard(TransactionCase):
def setUp(self):
super().setUp()
self.agreement_type = self.env["agreement.type"].create(
{
"name": "Test Agreement Type",
"domain": "sale",
}
)
# Create Agreement Template
self.agreement_template = self.env["agreement"].create(
{
"name": "Test Agreement Template",
"description": "Test",
"state": "active",
"agreement_type_id": self.agreement_type.id,
"is_template": True,
}
)
# Create Recital
self.env["agreement.recital"].create(
{
"name": "Test Recital",
"title": "Test",
"content": "Test",
"agreement_id": self.agreement_template.id,
}
)
# Create Section
self.section = self.env["agreement.section"].create(
{
"name": "Test Section",
"title": "Test",
"content": "Test",
"agreement_id": self.agreement_template.id,
}
)
# Create Clause
self.env["agreement.clause"].create(
{
"name": "Test Clause",
"title": "Test",
"content": "Test",
"agreement_id": self.agreement_template.id,
"section_id": self.section.id,
}
)
# Create Appendix
self.env["agreement.appendix"].create(
{
"name": "Test Appendices",
"title": "Test",
"content": "Test",
"agreement_id": self.agreement_template.id,
}
)
# Test create agreement from template
def test_create_agreement(self):
template = self.agreement_template
wizard = self.env["create.agreement.wizard"].create(
{
"template_id": self.agreement_template.id,
"name": "Test Agreement",
}
)
res = wizard.create_agreement()
agreement = self.env[res["res_model"]].browse(res["res_id"])
self.assertEqual(agreement.template_id, template)
self.assertEqual(agreement.is_template, False)
self.assertEqual(agreement.recital_ids.name, template.recital_ids.name)
self.assertEqual(agreement.sections_ids.name, template.sections_ids.name)
self.assertEqual(agreement.clauses_ids.name, template.clauses_ids.name)
self.assertEqual(agreement.clauses_ids.section_id, agreement.sections_ids)
self.assertEqual(agreement.appendix_ids.name, template.appendix_ids.name)

View File

@@ -5,13 +5,15 @@
<field name="name">Agreement List</field>
<field name="model">agreement</field>
<field name="arch" type="xml">
<tree string="Agreements" default_order='name'>
<tree string="Agreements" default_order="code desc, name">
<field name="code" />
<field name="name" />
<field name="partner_id" />
<field name="company_id" />
<field name="parent_agreement_id" />
<field name="agreement_type_id" />
<field name="agreement_subtype_id" />
<field name="stage_id" />
<field name="active" invisible="1" />
</tree>
</field>
@@ -43,12 +45,18 @@
name="stage_id"
widget="statusbar"
clickable="True"
options="{'fold_field': 'fold'}"
options="{'clickable': 1, 'fold_field': 'fold'}"
domain="[('stage_type', '=', 'agreement')]"
/>
</header>
<sheet>
<div class="oe_button_box" name="button_box" />
<widget
name="web_ribbon"
title="Template"
bg_color="bg-info"
attrs="{'invisible': [('is_template', '=', False)]}"
/>
<div class="oe_title">
<label
for="name"
@@ -66,7 +74,11 @@
name="parent_agreement_id"
domain="[('partner_id', '=', partner_id)]"
/>
<field name="is_template" />
<field name="is_template" invisible="1" />
<field
name="template_id"
attrs="{'invisible': [('is_template', '=', True)]}"
/>
</group>
<group>
<field
@@ -85,6 +97,7 @@
/>
<field name="active" invisible="1" />
<field name="state" invisible="1" />
<field name="readonly" invisible="1" />
</group>
</group>
<group string="Description">
@@ -138,7 +151,7 @@
<field
name="partner_id"
context="{'show_address': 1}"
options="{&quot;always_reload&quot;: True}"
options="{'always_reload': True}"
/>
</div>
</group>
@@ -148,7 +161,7 @@
name="company_id"
readonly="1"
context="{'show_address': 1}"
options="{&quot;always_reload&quot;: True}"
options="{'always_reload': True}"
/>
</div>
<field name="company_partner_id" invisible="1" />
@@ -201,6 +214,10 @@
</group>
<group name="term_information">
<group name="termdates_left" string="Term Dates">
<field
name="signature_date"
attrs="{'invisible': [('is_template', '=', True)]}"
/>
<field
name="start_date"
attrs="{'required': [('is_template', '=', False)], 'invisible': [('is_template', '=', True)]}"
@@ -241,30 +258,26 @@
<separator string="Recitals" />
<field
name="recital_ids"
default_order="sequence"
nolabel="1"
context="{'default_agreement': active_id}"
context="{'tree_view_ref': 'agreement_legal.agreement_recital_tree2', 'form_view_ref': 'agreement_legal.agreement_recital_form2'}"
/>
<separator string="Sections" />
<field
name="sections_ids"
default_order='sequence'
nolabel="1"
context="{'default_agreement': active_id}"
context="{'tree_view_ref': 'agreement_legal.partner_agreement_section_list_view2', 'form_view_ref': 'agreement_legal.partner_agreement_section_form_view2'}"
/>
<separator string="Clauses" />
<field
name="clauses_ids"
default_order='clause_id, sequence'
nolabel="1"
context="{'default_agreement': active_id}"
context="{'tree_view_ref': 'agreement_legal.partner_agreement_clause_list_view2', 'form_view_ref': 'agreement_legal.partner_agreement_clause_form_view2', 'default_temp_agreement_id': active_id}"
/>
<separator string="Appendices" />
<field
name="appendix_ids"
default_order='sequence'
nolabel="1"
context="{'default_agreement': active_id}"
context="{'tree_view_ref': 'agreement_legal.agreement_appendix_tree2', 'form_view_ref': 'agreement_legal.agreement_appendix_form2'}"
/>
</page>
<page name="signature" string="Signatures">
@@ -302,7 +315,7 @@
</page>
<page name="child_agreements" string="Child Agreements">
<field name="child_agreements_ids">
<tree default_order='version desc'>
<tree default_order="version desc">
<field name="name" />
<field name="version" />
<field name="revision" />
@@ -313,8 +326,9 @@
<field
name="previous_version_agreements_ids"
string="Previouse Versions"
readonly="1"
>
<tree default_order='version desc'>
<tree default_order="version desc">
<field name="name" />
<field name="version" />
<field name="revision" />
@@ -345,14 +359,14 @@
/>.</p>
</div>
</group>
<footer>
<p name="footer">
Version: <field name="version" readonly="True" />.<field
name="revision"
readonly="True"
/>
| Created By: <field name="create_uid" readonly="True" />
| Created On: <field name="create_date" readonly="True" />
</footer>
| Created By: <field name="created_by" readonly="True" />
| Created On: <field name="date_created" readonly="True" />
</p>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers" />
@@ -467,6 +481,7 @@
<field name="model">agreement</field>
<field name="arch" type="xml">
<search string="Agreement Search">
<field name="code" />
<field name="name" />
<field name="partner_id" />
<field name="agreement_type_id" />
@@ -492,11 +507,23 @@
icon="terp-partner"
context="{'group_by':'partner_id'}"
/>
<filter
name="group_agreement_type_id"
string="Agreement Type"
icon="terp-partner"
context="{'group_by':'agreement_type_id'}"
/>
<filter
name="group_agreement_subtype_id"
string="Agreement Sub-type"
icon="terp-partner"
context="{'group_by':'agreement_subtype_id'}"
/>
<filter
name="group_status"
string="Status"
icon="terp-partner"
context="{'group_by':'state'}"
context="{'group_by':'stage_id'}"
/>
</search>
</field>
@@ -535,6 +562,7 @@
<field name="name">Agreements</field>
<field name="res_model">agreement</field>
<field name="domain">[('is_template', '=', False)]</field>
<field name="context">{'default_is_template': False}</field>
<field name="view_mode">kanban,tree,form</field>
</record>
@@ -542,6 +570,7 @@
<field name="name">Agreements</field>
<field name="res_model">agreement</field>
<field name="domain">[('is_template', '=', False)]</field>
<field name="context">{'default_is_template': False}</field>
<field name="view_mode">tree,form</field>
</record>
@@ -549,7 +578,7 @@
<field name="name">Templates</field>
<field name="res_model">agreement</field>
<field name="domain">[('is_template', '=', True)]</field>
<!-- <field name="context">[('is_template', '=', True)]</field> -->
<field name="context">{'default_is_template': True}</field>
<field name="view_mode">tree,kanban,form</field>
</record>

View File

@@ -5,7 +5,7 @@
<field name="name">Agreement Appendix Tree</field>
<field name="model">agreement.appendix</field>
<field name="arch" type="xml">
<tree string="Appendices" default_order='agreement_id, sequence'>
<tree string="Appendices" default_order="agreement_id, sequence">
<field name="sequence" widget="handle" />
<field name="name" />
<field name="title" />
@@ -103,4 +103,35 @@
<field name="view_mode">tree,form</field>
</record>
<!-- Agreement Appendix List View 2 (Call this view from agreement)-->
<record model="ir.ui.view" id="agreement_appendix_tree2">
<field name="name">Agreement Appendix Tree2</field>
<field name="model">agreement.appendix</field>
<field name="inherit_id" ref="agreement_appendix_tree" />
<field name="mode">primary</field>
<field name="priority">999</field>
<field name="arch" type="xml">
<tree position="attributes">
<attribute name="default_order">sequence</attribute>
</tree>
<field name="agreement_id" position="attributes">
<attribute name="invisible">1</attribute>
</field>
</field>
</record>
<!-- Agreement Appendix Form View 2 (Call this view from agreement)-->
<record model="ir.ui.view" id="agreement_appendix_form2">
<field name="name">Agreement Appendix Form2</field>
<field name="model">agreement.appendix</field>
<field name="inherit_id" ref="agreement_appendix_form" />
<field name="mode">primary</field>
<field name="priority">999</field>
<field name="arch" type="xml">
<field name="agreement_id" position="attributes">
<attribute name="invisible">1</attribute>
</field>
</field>
</record>
</odoo>

View File

@@ -5,7 +5,7 @@
<field name="name">Agreement Clause List</field>
<field name="model">agreement.clause</field>
<field name="arch" type="xml">
<tree string="Clauses" default_order='agreement_id, sequence'>
<tree string="Clauses" default_order="agreement_id, sequence">
<field name="sequence" widget="handle" />
<field name="name" />
<field name="title" />
@@ -113,4 +113,43 @@
<field name="view_mode">tree,form</field>
</record>
<!-- Agreement Clause List View 2 (Call this view from agreement)-->
<record model="ir.ui.view" id="partner_agreement_clause_list_view2">
<field name="name">Agreement Clause List2</field>
<field name="model">agreement.clause</field>
<field name="inherit_id" ref="partner_agreement_clause_list_view" />
<field name="mode">primary</field>
<field name="priority">999</field>
<field name="arch" type="xml">
<tree position="attributes">
<attribute name="default_order">sequence</attribute>
</tree>
<field name="agreement_id" position="attributes">
<attribute name="invisible">1</attribute>
</field>
</field>
</record>
<!-- Agreement Clause Form View 2 (Call this view from agreement)-->
<record model="ir.ui.view" id="partner_agreement_clause_form_view2">
<field name="name">Agreement Clause Form2</field>
<field name="model">agreement.clause</field>
<field name="inherit_id" ref="partner_agreement_clause_form_view" />
<field name="mode">primary</field>
<field name="priority">999</field>
<field name="arch" type="xml">
<field name="agreement_id" position="after">
<field name="temp_agreement_id" invisible="1" />
</field>
<field name="agreement_id" position="attributes">
<attribute name="invisible">1</attribute>
</field>
<field name="section_id" position="attributes">
<attribute
name="domain"
>[('agreement_id', '=', temp_agreement_id)]</attribute>
</field>
</field>
</record>
</odoo>

View File

@@ -1,44 +0,0 @@
<odoo>
<!-- Agreement Increase Type List View-->
<record model="ir.ui.view" id="partner_agreement_increasetype_list_view">
<field name="name">Agreement Increase Type List</field>
<field name="model">agreement.increasetype</field>
<field name="arch" type="xml">
<tree default_order='name'>
<field name="name" />
<field name="description" />
<field name="increase_percent" />
</tree>
</field>
</record>
<!-- Agreement Increase Type Form View -->
<record model="ir.ui.view" id="partner_agreement_increasetype_form_view">
<field name="name">Agreement Increase Type Form</field>
<field name="model">agreement.increasetype</field>
<field name="arch" type="xml">
<form string="Agreements Type Form">
<sheet>
<group>
<field name="name" />
</group>
<group>
<field name="increase_percent" />
</group>
<group string="Description">
<field name="description" nolabel="1" />
</group>
</sheet>
</form>
</field>
</record>
<!-- Actions opening views on models -->
<record model="ir.actions.act_window" id="partner_agreement_action_increasetype">
<field name="name">Agreement Increase Type</field>
<field name="res_model">agreement.increasetype</field>
<field name="view_mode">tree,form</field>
</record>
</odoo>

View File

@@ -5,7 +5,7 @@
<field name="name">Agreement Recital Tree</field>
<field name="model">agreement.recital</field>
<field name="arch" type="xml">
<tree string="Recitals" default_order='agreement_id, sequence'>
<tree string="Recitals" default_order="agreement_id, sequence">
<field name="sequence" widget="handle" />
<field name="name" />
<field name="title" />
@@ -103,4 +103,35 @@
<field name="view_mode">tree,form</field>
</record>
<!-- Agreement Recital List View 2 (Call this view from agreement)-->
<record model="ir.ui.view" id="agreement_recital_tree2">
<field name="name">Agreement Recital Tree2</field>
<field name="model">agreement.recital</field>
<field name="inherit_id" ref="agreement_recital_tree" />
<field name="mode">primary</field>
<field name="priority">999</field>
<field name="arch" type="xml">
<tree position="attributes">
<attribute name="default_order">sequence</attribute>
</tree>
<field name="agreement_id" position="attributes">
<attribute name="invisible">1</attribute>
</field>
</field>
</record>
<!-- Agreement Recital Form View 2 (Call this view from agreement)-->
<record model="ir.ui.view" id="agreement_recital_form2">
<field name="name">Agreement Recital Form2</field>
<field name="model">agreement.recital</field>
<field name="inherit_id" ref="agreement_recital_form" />
<field name="mode">primary</field>
<field name="priority">999</field>
<field name="arch" type="xml">
<field name="agreement_id" position="attributes">
<attribute name="invisible">1</attribute>
</field>
</field>
</record>
</odoo>

View File

@@ -1,40 +0,0 @@
<odoo>
<!-- Agreement Renewal Type List View-->
<record model="ir.ui.view" id="partner_agreement_renewaltype_list_view">
<field name="name">Agreement Renewal Type List</field>
<field name="model">agreement.renewaltype</field>
<field name="arch" type="xml">
<tree default_order='name'>
<field name="name" />
<field name="description" />
</tree>
</field>
</record>
<!-- Agreement Renewal Type Form View -->
<record model="ir.ui.view" id="partner_agreement_renewaltype_form_view">
<field name="name">Agreement Renewal Type Form</field>
<field name="model">agreement.renewaltype</field>
<field name="arch" type="xml">
<form string="Agreements Type Form">
<sheet>
<group>
<field name="name" />
</group>
<group string="Description">
<field name="description" nolabel="1" />
</group>
</sheet>
</form>
</field>
</record>
<!-- Actions opening views on models -->
<record model="ir.actions.act_window" id="partner_agreement_action_renewaltype">
<field name="name">Agreement Renewal Type</field>
<field name="res_model">agreement.renewaltype</field>
<field name="view_mode">tree,form</field>
</record>
</odoo>

View File

@@ -5,7 +5,7 @@
<field name="name">Agreement Section List</field>
<field name="model">agreement.section</field>
<field name="arch" type="xml">
<tree string="Sections" default_order='agreement_id, sequence'>
<tree string="Sections" default_order="agreement_id, sequence">
<field name="sequence" widget="handle" />
<field name="name" />
<field name="title" />
@@ -122,4 +122,35 @@
<field name="view_mode">tree,form</field>
</record>
<!-- Agreement Sections List View 2 (Call this view from agreement)-->
<record model="ir.ui.view" id="partner_agreement_section_list_view2">
<field name="name">Agreement Section List2</field>
<field name="model">agreement.section</field>
<field name="inherit_id" ref="partner_agreement_section_list_view" />
<field name="mode">primary</field>
<field name="priority">999</field>
<field name="arch" type="xml">
<tree position="attributes">
<attribute name="default_order">sequence</attribute>
</tree>
<field name="agreement_id" position="attributes">
<attribute name="invisible">1</attribute>
</field>
</field>
</record>
<!-- Agreement Sections Form View 2 (Call this view from agreement)-->
<record model="ir.ui.view" id="partner_agreement_section_form_view2">
<field name="name">Agreement Section Form2</field>
<field name="model">agreement.section</field>
<field name="inherit_id" ref="partner_agreement_section_form_view" />
<field name="mode">primary</field>
<field name="priority">999</field>
<field name="arch" type="xml">
<field name="agreement_id" position="attributes">
<attribute name="invisible">1</attribute>
</field>
</field>
</record>
</odoo>

View File

@@ -5,10 +5,11 @@
<field name="name">Agreement Stage List</field>
<field name="model">agreement.stage</field>
<field name="arch" type="xml">
<tree default_order='sequence, name'>
<tree default_order="sequence, name">
<field name="sequence" widget="handle" />
<field name="name" string="Stage Name" />
<field name="name" />
<field name="stage_type" />
<field name="active" widget="boolean_toggle" />
</tree>
</field>
</record>
@@ -20,20 +21,52 @@
<field name="arch" type="xml">
<form string="Agreements Stage Form">
<sheet>
<widget
name="web_ribbon"
title="Archived"
bg_color="bg-danger"
attrs="{'invisible': [('active', '=', True)]}"
/>
<div class="oe_title">
<label for="name" class="oe_edit_only" string="Stage Name" />
<h1><field name="name" string="Stage Name" /></h1>
<label for="name" class="oe_edit_only" />
<h1><field name="name" /></h1>
</div>
<group>
<field name="sequence" />
<field name="stage_type" />
<field name="fold" />
<field name="readonly" />
<field name="active" invisible="1" />
</group>
</sheet>
</form>
</field>
</record>
<!-- Agreement Stage Search View -->
<record model="ir.ui.view" id="partner_agreement_stage_search_view">
<field name="name">Agreement Stage Search</field>
<field name="model">agreement.stage</field>
<field name="arch" type="xml">
<search string="Agreements Stage Search">
<field name="name" />
<separator />
<filter
name="archived"
string="Archived"
domain="[('active', '=', False)]"
/>
<group name="groupby">
<filter
name="type_groupby"
string="Type"
context="{'group_by': 'stage_type'}"
/>
</group>
</search>
</field>
</record>
<!-- Actions opening views on models -->
<record model="ir.actions.act_window" id="partner_agreement_action_stage">
<field name="name">Agreement Stage</field>

View File

@@ -5,9 +5,10 @@
<field name="name">Agreement Subtype List</field>
<field name="model">agreement.subtype</field>
<field name="arch" type="xml">
<tree default_order='name'>
<field name="name" string="Sub-Type Name" />
<field name="agreement_type_id" string="Agreement Type" />
<tree default_order="name">
<field name="name" />
<field name="agreement_type_id" />
<field name="active" widget="boolean_toggle" />
</tree>
</field>
</record>
@@ -19,14 +20,21 @@
<field name="arch" type="xml">
<form string="Agreement Sub-Types">
<sheet>
<widget
name="web_ribbon"
title="Archived"
bg_color="bg-danger"
attrs="{'invisible': [('active', '=', True)]}"
/>
<div class="oe_title">
<label for="name" class="oe_edit_only" />
<h1><field name="name" /></h1>
</div>
<group>
<group>
<field name="agreement_type_id" />
</group>
<field name="agreement_type_id" />
<field name="active" invisible="1" />
</group>
<group />
</group>
</sheet>
@@ -34,6 +42,31 @@
</field>
</record>
<!-- Agreement Sub Type Search View -->
<record model="ir.ui.view" id="partner_agreement_subtype_search_view">
<field name="name">Agreement Sub Type Search</field>
<field name="model">agreement.subtype</field>
<field name="arch" type="xml">
<search string="Agreements Sub-Types Search">
<field name="name" />
<field name="agreement_type_id" />
<separator />
<filter
name="archived"
string="Archived"
domain="[('active', '=', False)]"
/>
<group name="groupby">
<filter
name="agreement_type_groupby"
string="Agreement Type"
context="{'group_by': 'agreement_type_id'}"
/>
</group>
</search>
</field>
</record>
<!-- Actions opening views on models -->
<record model="ir.actions.act_window" id="partner_agreement_action_subtype">
<field name="name">Agreement Sub-Types</field>

View File

@@ -7,7 +7,7 @@
<field name="inherit_id" ref="agreement.agreement_type_list_view" />
<field name="arch" type="xml">
<field name="name" position="after">
<field name="agreement_subtypes_ids" string="Sub-Types" />
<field name="agreement_subtypes_ids" widget="many2many_tags" />
</field>
</field>
</record>

View File

@@ -0,0 +1,14 @@
<odoo>
<template
id="assets_backend"
name="agreement_legal assets"
inherit_id="web.assets_backend"
>
<xpath expr="." position="inside">
<script
type="text/javascript"
src="/agreement_legal/static/src/js/agreement.js"
/>
</xpath>
</template>
</odoo>

View File

@@ -129,39 +129,25 @@
sequence="20"
action="partner_agreement_agreement_templates"
/>
<menuitem
name="Renewal Types"
id="agreement_renewaltype"
parent="agreement_configuration"
sequence="30"
action="partner_agreement_action_renewaltype"
/>
<menuitem
name="Increase Types"
id="agreement_increamenttypes"
parent="agreement_configuration"
sequence="31"
action="partner_agreement_action_increasetype"
/>
<menuitem
name="Stages"
id="agreement_stages"
parent="agreement_configuration"
sequence="40"
sequence="30"
action="partner_agreement_action_stage"
/>
<menuitem
name="Types"
id="agreement_types"
parent="agreement_configuration"
sequence="50"
sequence="40"
action="partner_agreement_action_type"
/>
<menuitem
name="Sub-Types"
id="agreement_subtypes"
parent="agreement_configuration"
sequence="60"
sequence="50"
action="partner_agreement_action_subtype"
/>
</odoo>

View File

@@ -0,0 +1,3 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from . import create_agreement_wizard

View File

@@ -0,0 +1,31 @@
# Copyright 2021 Ecosoft Co., Ltd (http://ecosoft.co.th)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import fields, models
class CreateAgreementWizard(models.TransientModel):
_name = "create.agreement.wizard"
_description = "Create Agreement Wizard"
template_id = fields.Many2one(
"agreement",
string="Template",
required=True,
domain=[("is_template", "=", True)],
)
name = fields.Char(string="Title", required=True)
def create_agreement(self):
self.ensure_one()
res = self.template_id.create_new_agreement()
agreement = self.env[res["res_model"]].browse(res["res_id"])
agreement.write(
{
"name": self.name,
"description": self.name,
"template_id": self.template_id.id,
"revision": 0,
}
)
return res

View File

@@ -0,0 +1,34 @@
<odoo>
<record id="create_agreement_from_template_form_view" model="ir.ui.view">
<field name="name">Create Agreement From Template</field>
<field name="model">create.agreement.wizard</field>
<field name="arch" type="xml">
<form>
<group>
<group>
<field name="template_id" />
</group>
<group>
<field name="name" />
</group>
</group>
<footer>
<button
name="create_agreement"
string="Create Agreement"
class="btn-primary"
type="object"
/>
<button string="Cancel" class="btn-default" special="cancel" />
</footer>
</form>
</field>
</record>
<record id="create_agreement_from_template_action" model="ir.actions.act_window">
<field name="name">Create From Template</field>
<field name="res_model">create.agreement.wizard</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
</odoo>

View File

@@ -0,0 +1,118 @@
===================
Agreement - Project
===================
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |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%2Fcontract-lightgray.png?logo=github
:target: https://github.com/OCA/contract/tree/14.0/agreement_project
:alt: OCA/contract
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/contract-14-0/contract-14-0-agreement_project
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
:target: https://runbot.odoo-community.org/runbot/110/14.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
Odoo Agreement App does not provide an easy way to access project tasks related to an agreement.
Some organizations needs to have a quick access to project tasks to track the performance of an agreement.
This module allows you to link a project task to an agreement and
adds a smart button on the agreement to look at the list of related project tasks.
**Table of contents**
.. contents::
:local:
Usage
=====
To use this module, you need to:
* Go to Project > Configuration > Projects
* Select or create a project and set the agreement
* Go to Agreement > Agreements
* Open the previous agreement
* Click on the smart button "Tasks" to see the list of related project tasks
Known issues / Roadmap
======================
The roadmap of the Agreement application is documented on
`Github <https://github.com/OCA/contract/issues>`_.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/contract/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
`feedback <https://github.com/OCA/contract/issues/new?body=module:%20agreement_project%0Aversion:%2014.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
~~~~~~~
* Open Source Integrators
* Yves Goldberg (Ygol Internetwork)
Contributors
~~~~~~~~~~~~
* Sandip Mangukiya <smangukiya@opensourceintegrators.com>
* Yves Goldberg <yves@ygol.com>
* Helly kapatel <helly.kapatel@initos.com>
Other credits
~~~~~~~~~~~~~
The development of this module has been financially supported by:
* Open Source Integrators <https://opensourceintegrators.com>
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.
.. |maintainer-smangukiya| image:: https://github.com/smangukiya.png?size=40px
:target: https://github.com/smangukiya
:alt: smangukiya
.. |maintainer-ygol| image:: https://github.com/ygol.png?size=40px
:target: https://github.com/ygol
:alt: ygol
.. |maintainer-max3903| image:: https://github.com/max3903.png?size=40px
:target: https://github.com/max3903
:alt: max3903
Current `maintainers <https://odoo-community.org/page/maintainer-role>`__:
|maintainer-smangukiya| |maintainer-ygol| |maintainer-max3903|
This module is part of the `OCA/contract <https://github.com/OCA/contract/tree/14.0/agreement_project>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View File

@@ -0,0 +1,4 @@
# Copyright (C) 2018 - TODAY, Open Source Integrators
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from . import models

View File

@@ -0,0 +1,26 @@
# Copyright (C) 2018 - TODAY, Open Source Integrators
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
"name": "Agreement - Project",
"summary": "Link projects to an agreement",
"version": "14.0.1.0.0",
"category": "Contract",
"author": "Open Source Integrators, "
"Yves Goldberg (Ygol Internetwork), "
"Odoo Community Association (OCA)",
"website": "https://github.com/OCA/contract",
"depends": ["agreement_legal", "project"],
"data": [
"views/agreement_view.xml",
"views/project_view.xml",
],
"installable": True,
"license": "AGPL-3",
"development_status": "Beta",
"maintainers": [
"smangukiya",
"ygol",
"max3903",
],
}

View File

@@ -0,0 +1,72 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * agreement_project
#
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: agreement_project
#: model:ir.model.fields,field_description:agreement_project.field_agreement__task_count
msgid "# Tasks"
msgstr ""
#. module: agreement_project
#: model_terms:ir.ui.view,arch_db:agreement_project.partner_agreement_form_view_task
msgid "<span class=\"o_stat_text\">Tasks</span>"
msgstr ""
#. module: agreement_project
#: model:ir.model,name:agreement_project.model_agreement
#: model:ir.model.fields,field_description:agreement_project.field_project_project__agreement_id
#: model:ir.model.fields,field_description:agreement_project.field_project_task__agreement_id
msgid "Agreement"
msgstr ""
#. module: agreement_project
#: model_terms:ir.actions.act_window,help:agreement_project.action_project_task_agreement_specific
msgid "Create Tasks"
msgstr ""
#. module: agreement_project
#: model:ir.model.fields,field_description:agreement_project.field_agreement__display_name
#: model:ir.model.fields,field_description:agreement_project.field_project_project__display_name
#: model:ir.model.fields,field_description:agreement_project.field_project_task__display_name
msgid "Display Name"
msgstr ""
#. module: agreement_project
#: model:ir.model.fields,field_description:agreement_project.field_agreement__id
#: model:ir.model.fields,field_description:agreement_project.field_project_project__id
#: model:ir.model.fields,field_description:agreement_project.field_project_task__id
msgid "ID"
msgstr ""
#. module: agreement_project
#: model:ir.model.fields,field_description:agreement_project.field_agreement____last_update
#: model:ir.model.fields,field_description:agreement_project.field_project_project____last_update
#: model:ir.model.fields,field_description:agreement_project.field_project_task____last_update
msgid "Last Modified on"
msgstr ""
#. module: agreement_project
#: model:ir.model,name:agreement_project.model_project_project
msgid "Project"
msgstr ""
#. module: agreement_project
#: model:ir.model,name:agreement_project.model_project_task
msgid "Task"
msgstr ""
#. module: agreement_project
#: model:ir.actions.act_window,name:agreement_project.action_project_task_agreement_specific
msgid "Tasks"
msgstr ""

View File

@@ -0,0 +1,60 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * agreement_project
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2019-01-11 17:41+0000\n"
"Last-Translator: Maria Sparenberg <maria.sparenberg@gmx.net>\n"
"Language-Team: none\n"
"Language: de\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"
"X-Generator: Weblate 3.3\n"
#. module: agreement_project
#: model:ir.model.fields,field_description:agreement_project.field_agreement__task_count
msgid "# Tasks"
msgstr "# Aufgaben"
#. module: agreement_project
#: model_terms:ir.ui.view,arch_db:agreement_project.partner_agreement_form_view_task
msgid "<span class=\"o_stat_text\">Tasks</span>"
msgstr "<span class=\"o_stat_text\">Aufgaben</span>"
#. module: agreement_project
#: model:ir.model,name:agreement_project.model_agreement
#: model:ir.model.fields,field_description:agreement_project.field_project_project__agreement_id
#: model:ir.model.fields,field_description:agreement_project.field_project_task__agreement_id
msgid "Agreement"
msgstr "Vereinbarung"
#. module: agreement_project
#: model_terms:ir.actions.act_window,help:agreement_project.action_project_task_agreement_specific
msgid "Create Tasks"
msgstr "Aufgaben anlegen"
#. module: agreement_project
#: model:ir.model,name:agreement_project.model_project_project
msgid "Project"
msgstr "Projekt"
#. module: agreement_project
#: model:ir.model,name:agreement_project.model_project_task
msgid "Task"
msgstr "Aufgabe"
#. module: agreement_project
#: model:ir.actions.act_window,name:agreement_project.action_project_task_agreement_specific
msgid "Tasks"
msgstr "Aufgaben"
#~ msgid "Service Profile"
#~ msgstr "Dienstleistungsprofil"
#~ msgid "agreement"
#~ msgstr "Vereinbarung"

View File

@@ -0,0 +1,54 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * agreement_project
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2020-03-08 15:14+0000\n"
"Last-Translator: Antonio Pérez Ruth <antonio.perez@makrin.es>\n"
"Language-Team: none\n"
"Language: es\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"
"X-Generator: Weblate 3.10\n"
#. module: agreement_project
#: model:ir.model.fields,field_description:agreement_project.field_agreement__task_count
msgid "# Tasks"
msgstr "# Tareas"
#. module: agreement_project
#: model_terms:ir.ui.view,arch_db:agreement_project.partner_agreement_form_view_task
msgid "<span class=\"o_stat_text\">Tasks</span>"
msgstr "<span class=\"o_stat_text\">Tareas</span>"
#. module: agreement_project
#: model:ir.model,name:agreement_project.model_agreement
#: model:ir.model.fields,field_description:agreement_project.field_project_project__agreement_id
#: model:ir.model.fields,field_description:agreement_project.field_project_task__agreement_id
msgid "Agreement"
msgstr "Acuerdos"
#. module: agreement_project
#: model_terms:ir.actions.act_window,help:agreement_project.action_project_task_agreement_specific
msgid "Create Tasks"
msgstr "Crear tareas"
#. module: agreement_project
#: model:ir.model,name:agreement_project.model_project_project
msgid "Project"
msgstr "Proyecto"
#. module: agreement_project
#: model:ir.model,name:agreement_project.model_project_task
msgid "Task"
msgstr "Tarea"
#. module: agreement_project
#: model:ir.actions.act_window,name:agreement_project.action_project_task_agreement_specific
msgid "Tasks"
msgstr "Tareas"

View File

@@ -0,0 +1,60 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * agreement_project
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2019-03-18 22:14+0000\n"
"Last-Translator: Yves Goldberg <admin@ygol.com>\n"
"Language-Team: none\n"
"Language: fr\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"
"X-Generator: Weblate 3.5.1\n"
#. module: agreement_project
#: model:ir.model.fields,field_description:agreement_project.field_agreement__task_count
msgid "# Tasks"
msgstr "# Tâches"
#. module: agreement_project
#: model_terms:ir.ui.view,arch_db:agreement_project.partner_agreement_form_view_task
msgid "<span class=\"o_stat_text\">Tasks</span>"
msgstr "<span class=\"o_stat_text\">Tâches</span>"
#. module: agreement_project
#: model:ir.model,name:agreement_project.model_agreement
#: model:ir.model.fields,field_description:agreement_project.field_project_project__agreement_id
#: model:ir.model.fields,field_description:agreement_project.field_project_task__agreement_id
msgid "Agreement"
msgstr "Accord"
#. module: agreement_project
#: model_terms:ir.actions.act_window,help:agreement_project.action_project_task_agreement_specific
msgid "Create Tasks"
msgstr "Créer des tâches"
#. module: agreement_project
#: model:ir.model,name:agreement_project.model_project_project
msgid "Project"
msgstr "Projet"
#. module: agreement_project
#: model:ir.model,name:agreement_project.model_project_task
msgid "Task"
msgstr "Tâche"
#. module: agreement_project
#: model:ir.actions.act_window,name:agreement_project.action_project_task_agreement_specific
msgid "Tasks"
msgstr "Tâches"
#~ msgid "Service Profile"
#~ msgstr "Profil de service"
#~ msgid "agreement"
#~ msgstr "accord"

View File

@@ -0,0 +1,54 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * agreement_project
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2020-02-17 19:13+0000\n"
"Last-Translator: Pedro Castro Silva <pedrocs@exo.pt>\n"
"Language-Team: none\n"
"Language: pt\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"
"X-Generator: Weblate 3.10\n"
#. module: agreement_project
#: model:ir.model.fields,field_description:agreement_project.field_agreement__task_count
msgid "# Tasks"
msgstr "# Tarefas"
#. module: agreement_project
#: model_terms:ir.ui.view,arch_db:agreement_project.partner_agreement_form_view_task
msgid "<span class=\"o_stat_text\">Tasks</span>"
msgstr "<span class=\"o_stat_text\">Tarefas</span>"
#. module: agreement_project
#: model:ir.model,name:agreement_project.model_agreement
#: model:ir.model.fields,field_description:agreement_project.field_project_project__agreement_id
#: model:ir.model.fields,field_description:agreement_project.field_project_task__agreement_id
msgid "Agreement"
msgstr "Acordo"
#. module: agreement_project
#: model_terms:ir.actions.act_window,help:agreement_project.action_project_task_agreement_specific
msgid "Create Tasks"
msgstr "Criar Tarefas"
#. module: agreement_project
#: model:ir.model,name:agreement_project.model_project_project
msgid "Project"
msgstr "Projeto"
#. module: agreement_project
#: model:ir.model,name:agreement_project.model_project_task
msgid "Task"
msgstr "Tarefa"
#. module: agreement_project
#: model:ir.actions.act_window,name:agreement_project.action_project_task_agreement_specific
msgid "Tasks"
msgstr "Tarefas"

View File

@@ -0,0 +1,54 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * agreement_project
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2020-02-12 05:03+0000\n"
"Last-Translator: Marcel Savegnago <marcel.savegnago@gmail.com>\n"
"Language-Team: none\n"
"Language: pt_BR\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"
"X-Generator: Weblate 3.10\n"
#. module: agreement_project
#: model:ir.model.fields,field_description:agreement_project.field_agreement__task_count
msgid "# Tasks"
msgstr "# Tarefas"
#. module: agreement_project
#: model_terms:ir.ui.view,arch_db:agreement_project.partner_agreement_form_view_task
msgid "<span class=\"o_stat_text\">Tasks</span>"
msgstr "<span class=\"o_stat_text\">Tarefas</span>"
#. module: agreement_project
#: model:ir.model,name:agreement_project.model_agreement
#: model:ir.model.fields,field_description:agreement_project.field_project_project__agreement_id
#: model:ir.model.fields,field_description:agreement_project.field_project_task__agreement_id
msgid "Agreement"
msgstr "Acordo"
#. module: agreement_project
#: model_terms:ir.actions.act_window,help:agreement_project.action_project_task_agreement_specific
msgid "Create Tasks"
msgstr "Criar Tarefas"
#. module: agreement_project
#: model:ir.model,name:agreement_project.model_project_project
msgid "Project"
msgstr "Projeto"
#. module: agreement_project
#: model:ir.model,name:agreement_project.model_project_task
msgid "Task"
msgstr "Tarefa"
#. module: agreement_project
#: model:ir.actions.act_window,name:agreement_project.action_project_task_agreement_specific
msgid "Tasks"
msgstr "Tarefas"

View File

@@ -0,0 +1,54 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * agreement_project
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2019-09-04 18:23+0000\n"
"Last-Translator: 黎伟杰 <674416404@qq.com>\n"
"Language-Team: none\n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 3.8\n"
#. module: agreement_project
#: model:ir.model.fields,field_description:agreement_project.field_agreement__task_count
msgid "# Tasks"
msgstr "# 任务"
#. module: agreement_project
#: model_terms:ir.ui.view,arch_db:agreement_project.partner_agreement_form_view_task
msgid "<span class=\"o_stat_text\">Tasks</span>"
msgstr "<span class=\"o_stat_text\">任务</span>"
#. module: agreement_project
#: model:ir.model,name:agreement_project.model_agreement
#: model:ir.model.fields,field_description:agreement_project.field_project_project__agreement_id
#: model:ir.model.fields,field_description:agreement_project.field_project_task__agreement_id
msgid "Agreement"
msgstr "协议"
#. module: agreement_project
#: model_terms:ir.actions.act_window,help:agreement_project.action_project_task_agreement_specific
msgid "Create Tasks"
msgstr "创建任务"
#. module: agreement_project
#: model:ir.model,name:agreement_project.model_project_project
msgid "Project"
msgstr "项目"
#. module: agreement_project
#: model:ir.model,name:agreement_project.model_project_task
msgid "Task"
msgstr "任务"
#. module: agreement_project
#: model:ir.actions.act_window,name:agreement_project.action_project_task_agreement_specific
msgid "Tasks"
msgstr "任务"

View File

@@ -0,0 +1,7 @@
# Copyright (C) 2018 - TODAY, Open Source Integrators
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from . import (
project,
agreement,
)

View File

@@ -0,0 +1,17 @@
# Copyright (C) 2018 - TODAY, Open Source Integrators
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import fields, models
class Agreement(models.Model):
_inherit = "agreement"
task_count = fields.Integer("# Tasks", compute="_compute_task_count")
def _compute_task_count(self):
for ag in self:
count = self.env["project.task"].search_count(
[("agreement_id", "=", ag.id)]
)
ag.task_count = count

View File

@@ -0,0 +1,18 @@
# Copyright (C) 2018 - TODAY, Open Source Integrators
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import fields, models
class ProjectProject(models.Model):
_inherit = "project.project"
agreement_id = fields.Many2one("agreement", "Agreement")
class ProjectTask(models.Model):
_inherit = "project.task"
agreement_id = fields.Many2one(
"agreement", related="project_id.agreement_id", string="Agreement", store=True
)

View File

@@ -0,0 +1,3 @@
* Sandip Mangukiya <smangukiya@opensourceintegrators.com>
* Yves Goldberg <yves@ygol.com>
* Helly kapatel <helly.kapatel@initos.com>

View File

@@ -0,0 +1,3 @@
The development of this module has been financially supported by:
* Open Source Integrators <https://opensourceintegrators.com>

View File

@@ -0,0 +1,5 @@
Odoo Agreement App does not provide an easy way to access project tasks related to an agreement.
Some organizations needs to have a quick access to project tasks to track the performance of an agreement.
This module allows you to link a project task to an agreement and
adds a smart button on the agreement to look at the list of related project tasks.

View File

@@ -0,0 +1,2 @@
The roadmap of the Agreement application is documented on
`Github <https://github.com/OCA/contract/issues>`_.

View File

@@ -0,0 +1,7 @@
To use this module, you need to:
* Go to Project > Configuration > Projects
* Select or create a project and set the agreement
* Go to Agreement > Agreements
* Open the previous agreement
* Click on the smart button "Tasks" to see the list of related project tasks

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -0,0 +1,453 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.15.1: http://docutils.sourceforge.net/" />
<title>Agreement - Project</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: grey; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="agreement-project">
<h1 class="title">Agreement - Project</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/contract/tree/14.0/agreement_project"><img alt="OCA/contract" src="https://img.shields.io/badge/github-OCA%2Fcontract-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/contract-14-0/contract-14-0-agreement_project"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/110/14.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
<p>Odoo Agreement App does not provide an easy way to access project tasks related to an agreement.
Some organizations needs to have a quick access to project tasks to track the performance of an agreement.</p>
<p>This module allows you to link a project task to an agreement and
adds a smart button on the agreement to look at the list of related project tasks.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#usage" id="id1">Usage</a></li>
<li><a class="reference internal" href="#known-issues-roadmap" id="id2">Known issues / Roadmap</a></li>
<li><a class="reference internal" href="#bug-tracker" id="id3">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="id4">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="id5">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="id6">Contributors</a></li>
<li><a class="reference internal" href="#other-credits" id="id7">Other credits</a></li>
<li><a class="reference internal" href="#maintainers" id="id8">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#id1">Usage</a></h1>
<p>To use this module, you need to:</p>
<ul class="simple">
<li>Go to Project &gt; Configuration &gt; Projects</li>
<li>Select or create a project and set the agreement</li>
<li>Go to Agreement &gt; Agreements</li>
<li>Open the previous agreement</li>
<li>Click on the smart button “Tasks” to see the list of related project tasks</li>
</ul>
</div>
<div class="section" id="known-issues-roadmap">
<h1><a class="toc-backref" href="#id2">Known issues / Roadmap</a></h1>
<p>The roadmap of the Agreement application is documented on
<a class="reference external" href="https://github.com/OCA/contract/issues">Github</a>.</p>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#id3">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/contract/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/contract/issues/new?body=module:%20agreement_project%0Aversion:%2014.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#id4">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#id5">Authors</a></h2>
<ul class="simple">
<li>Open Source Integrators</li>
<li>Yves Goldberg (Ygol Internetwork)</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#id6">Contributors</a></h2>
<ul class="simple">
<li>Sandip Mangukiya &lt;<a class="reference external" href="mailto:smangukiya&#64;opensourceintegrators.com">smangukiya&#64;opensourceintegrators.com</a>&gt;</li>
<li>Yves Goldberg &lt;<a class="reference external" href="mailto:yves&#64;ygol.com">yves&#64;ygol.com</a>&gt;</li>
<li>Helly kapatel &lt;<a class="reference external" href="mailto:helly.kapatel&#64;initos.com">helly.kapatel&#64;initos.com</a>&gt;</li>
</ul>
</div>
<div class="section" id="other-credits">
<h2><a class="toc-backref" href="#id7">Other credits</a></h2>
<p>The development of this module has been financially supported by:</p>
<ul class="simple">
<li>Open Source Integrators &lt;<a class="reference external" href="https://opensourceintegrators.com">https://opensourceintegrators.com</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#id8">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
<p>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.</p>
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainers</a>:</p>
<p><a class="reference external" href="https://github.com/smangukiya"><img alt="smangukiya" src="https://github.com/smangukiya.png?size=40px" /></a> <a class="reference external" href="https://github.com/ygol"><img alt="ygol" src="https://github.com/ygol.png?size=40px" /></a> <a class="reference external" href="https://github.com/max3903"><img alt="max3903" src="https://github.com/max3903.png?size=40px" /></a></p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/contract/tree/14.0/agreement_project">OCA/contract</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1 @@
odoo14-addon-contract @git+https://github.com/ecosoft-odoo/contract@14.0-mig-agreement_legal#subdirectory=setup/agreement_legal

View File

@@ -0,0 +1 @@
from . import test_agreement

View File

@@ -0,0 +1,12 @@
from odoo.tests.common import SavepointCase
class TestAgreement(SavepointCase):
def test_agreement(self):
self = self.env["agreement"].search([])
for ag in self:
ag._compute_task_count()
count = self.env["project.task"].search_count(
[("agreement_id", "=", ag.id)]
)
ag.task_count = count

View File

@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record model="ir.actions.act_window" id="action_project_task_agreement_specific">
<field name="name">Tasks</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">project.task</field>
<field name="view_mode">tree,form</field>
<field name="domain">[('agreement_id', '=', active_id)]</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Create Tasks
</p>
</field>
</record>
<record id="partner_agreement_form_view_task" model="ir.ui.view">
<field name="name">agreement.form.task</field>
<field name="model">agreement</field>
<field name="inherit_id" ref="agreement_legal.partner_agreement_form_view" />
<field name="arch" type="xml">
<xpath expr="//div[@name='button_box']" position="inside">
<button
name="%(action_project_task_agreement_specific)d"
type="action"
class="oe_stat_button"
icon="fa-tasks"
>
<div class="o_field_widget o_stat_info">
<span class="o_stat_value">
<field name="task_count" widget="statinfo" nolabel="1" />
</span>
<span class="o_stat_text">Tasks</span>
</div>
</button>
</xpath>
</field>
</record>
</odoo>

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="edit_project_agreement" model="ir.ui.view">
<field name="name">project.project.form.agreement</field>
<field name="model">project.project</field>
<field name="inherit_id" ref="project.edit_project" />
<field name="arch" type="xml">
<field name="allowed_portal_user_ids" position="after">
<field name="agreement_id" domain="[('partner_id', '=', partner_id)]" />
</field>
</field>
</record>
<record id="view_task_form2_agreement" model="ir.ui.view">
<field name="name">project.task.form.agreement</field>
<field name="model">project.task</field>
<field name="inherit_id" ref="project.view_task_form2" />
<field name="arch" type="xml">
<xpath expr="//field[@name='user_id']" position="after">
<field name="agreement_id" readonly="1" />
</xpath>
</field>
</record>
</odoo>

116
agreement_stock/README.rst Normal file
View File

@@ -0,0 +1,116 @@
=================
Agreement - Stock
=================
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |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%2Fcontract-lightgray.png?logo=github
:target: https://github.com/OCA/contract/tree/14.0/agreement_stock
:alt: OCA/contract
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/contract-14-0/contract-14-0-agreement_stock
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
:target: https://runbot.odoo-community.org/runbot/110/14.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
Odoo Agreement App does not provide an easy way to access stock transfers related to an agreement.
Some organizations needs to have a quick access to stock transfers to track the performance of an agreement.
This module allows you to link a transfer to an agreement and
adds a smart button on the agreement to look at the list of related transfers.
**Table of contents**
.. contents::
:local:
Usage
=====
To use this module, you need to:
* Go to Inventory > Transfers
* Select or create a transfer and set the agreement
* Select or create a lot/serial number and set the agreement
* Go to Agreement > Agreements
* Open the previous agreement
* Click on the smart button "Transfers" to see the list of related transfers
* Click on the smart button "Stock Moves" to see the list of related stock moves
* Click on the smart button "Lot/SN #" to see the list of related lot/serial numbers
Known issues / Roadmap
======================
The roadmap of the Agreement application is documented on
`Github <https://github.com/OCA/contract/issues>`_.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/contract/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
`feedback <https://github.com/OCA/contract/issues/new?body=module:%20agreement_stock%0Aversion:%2014.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
~~~~~~~
* Open Source Integrators
Contributors
~~~~~~~~~~~~
* Sandip Mangukiya <smangukiya@opensourceintegrators.com>
* Serpent Consulting Services Pvt. Ltd. <support@serpentcs.com>
Other credits
~~~~~~~~~~~~~
The development of this module has been financially supported by:
* Open Source Integrators <https://opensourceintegrators.com>
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.
.. |maintainer-smangukiya| image:: https://github.com/smangukiya.png?size=40px
:target: https://github.com/smangukiya
:alt: smangukiya
.. |maintainer-max3903| image:: https://github.com/max3903.png?size=40px
:target: https://github.com/max3903
:alt: max3903
Current `maintainers <https://odoo-community.org/page/maintainer-role>`__:
|maintainer-smangukiya| |maintainer-max3903|
This module is part of the `OCA/contract <https://github.com/OCA/contract/tree/14.0/agreement_stock>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View File

@@ -0,0 +1,4 @@
# Copyright (C) 2021 - TODAY, Open Source Integrators
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from . import models

View File

@@ -0,0 +1,17 @@
# Copyright (C) 2021 - TODAY, Open Source Integrators
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
"name": "Agreement - Stock",
"summary": "Link picking to an agreement",
"version": "14.0.1.0.1",
"category": "Contract",
"author": "Open Source Integrators, " "Odoo Community Association (OCA)",
"website": "https://github.com/OCA/contract",
"depends": ["agreement_serviceprofile", "stock"],
"data": ["views/agreement_view.xml", "views/stock_view.xml"],
"installable": True,
"license": "AGPL-3",
"development_status": "Beta",
"maintainers": ["smangukiya", "max3903"],
}

View File

@@ -0,0 +1,127 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * agreement_stock
#
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: agreement_stock
#: model:ir.model.fields,field_description:agreement_stock.field_agreement__lot_count
msgid "# Lots/Serials"
msgstr ""
#. module: agreement_stock
#: model:ir.model.fields,field_description:agreement_stock.field_agreement__move_count
msgid "# Moves"
msgstr ""
#. module: agreement_stock
#: model:ir.model.fields,field_description:agreement_stock.field_agreement__picking_count
msgid "# Pickings"
msgstr ""
#. module: agreement_stock
#: model_terms:ir.ui.view,arch_db:agreement_stock.partner_agreement_form_view_stock
msgid "<span class=\"o_stat_text\">Lots/Serials</span>"
msgstr ""
#. module: agreement_stock
#: model_terms:ir.ui.view,arch_db:agreement_stock.partner_agreement_form_view_stock
msgid "<span class=\"o_stat_text\">Moves</span>"
msgstr ""
#. module: agreement_stock
#: model_terms:ir.ui.view,arch_db:agreement_stock.partner_agreement_form_view_stock
msgid "<span class=\"o_stat_text\">Pickings</span>"
msgstr ""
#. module: agreement_stock
#: model:ir.model,name:agreement_stock.model_agreement
#: model:ir.model.fields,field_description:agreement_stock.field_stock_move__agreement_id
#: model:ir.model.fields,field_description:agreement_stock.field_stock_picking__agreement_id
#: model:ir.model.fields,field_description:agreement_stock.field_stock_production_lot__agreement_id
msgid "Agreement"
msgstr ""
#. module: agreement_stock
#: model_terms:ir.actions.act_window,help:agreement_stock.action_stock_production_lot_agreement_specific
msgid "Create Lot/Serial"
msgstr ""
#. module: agreement_stock
#: model_terms:ir.actions.act_window,help:agreement_stock.action_stock_move_agreement_specific
msgid "Create Moves"
msgstr ""
#. module: agreement_stock
#: model_terms:ir.actions.act_window,help:agreement_stock.action_stock_picking_agreement_specific
msgid "Create Pickings"
msgstr ""
#. module: agreement_stock
#: model:ir.model.fields,field_description:agreement_stock.field_agreement__display_name
#: model:ir.model.fields,field_description:agreement_stock.field_stock_move__display_name
#: model:ir.model.fields,field_description:agreement_stock.field_stock_picking__display_name
#: model:ir.model.fields,field_description:agreement_stock.field_stock_production_lot__display_name
msgid "Display Name"
msgstr ""
#. module: agreement_stock
#: model:ir.model.fields,field_description:agreement_stock.field_agreement__id
#: model:ir.model.fields,field_description:agreement_stock.field_stock_move__id
#: model:ir.model.fields,field_description:agreement_stock.field_stock_picking__id
#: model:ir.model.fields,field_description:agreement_stock.field_stock_production_lot__id
msgid "ID"
msgstr ""
#. module: agreement_stock
#: model:ir.model.fields,field_description:agreement_stock.field_agreement____last_update
#: model:ir.model.fields,field_description:agreement_stock.field_stock_move____last_update
#: model:ir.model.fields,field_description:agreement_stock.field_stock_picking____last_update
#: model:ir.model.fields,field_description:agreement_stock.field_stock_production_lot____last_update
msgid "Last Modified on"
msgstr ""
#. module: agreement_stock
#: model:ir.model,name:agreement_stock.model_stock_production_lot
msgid "Lot/Serial"
msgstr ""
#. module: agreement_stock
#: model:ir.actions.act_window,name:agreement_stock.action_stock_production_lot_agreement_specific
msgid "Lots/Serials"
msgstr ""
#. module: agreement_stock
#: model:ir.actions.act_window,name:agreement_stock.action_stock_move_agreement_specific
msgid "Moves"
msgstr ""
#. module: agreement_stock
#: model:ir.actions.act_window,name:agreement_stock.action_stock_picking_agreement_specific
msgid "Pickings"
msgstr ""
#. module: agreement_stock
#: model:ir.model.fields,field_description:agreement_stock.field_stock_production_lot__serviceprofile_id
#: model_terms:ir.ui.view,arch_db:agreement_stock.search_product_lot_filter_agreement
msgid "Service Profile"
msgstr ""
#. module: agreement_stock
#: model:ir.model,name:agreement_stock.model_stock_move
msgid "Stock Move"
msgstr ""
#. module: agreement_stock
#: model:ir.model,name:agreement_stock.model_stock_picking
msgid "Transfer"
msgstr ""

109
agreement_stock/i18n/de.po Normal file
View File

@@ -0,0 +1,109 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * agreement_stock
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2019-01-11 17:41+0000\n"
"Last-Translator: Maria Sparenberg <maria.sparenberg@gmx.net>\n"
"Language-Team: none\n"
"Language: de\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"
"X-Generator: Weblate 3.3\n"
#. module: agreement_stock
#: model:ir.model.fields,field_description:agreement_stock.field_agreement__lot_count
msgid "# Lots/Serials"
msgstr "# Chargen / Seriennummern"
#. module: agreement_stock
#: model:ir.model.fields,field_description:agreement_stock.field_agreement__move_count
msgid "# Moves"
msgstr "# Lagerbewegungen"
#. module: agreement_stock
#: model:ir.model.fields,field_description:agreement_stock.field_agreement__picking_count
msgid "# Pickings"
msgstr "# Lieferscheine"
#. module: agreement_stock
#: model_terms:ir.ui.view,arch_db:agreement_stock.partner_agreement_form_view_stock
msgid "<span class=\"o_stat_text\">Lots/Serials</span>"
msgstr "<span class=\"o_stat_text\">Chargen / Seriennummern</span>"
#. module: agreement_stock
#: model_terms:ir.ui.view,arch_db:agreement_stock.partner_agreement_form_view_stock
msgid "<span class=\"o_stat_text\">Moves</span>"
msgstr "<span class=\"o_stat_text\">Lagerbewegungen</span>"
#. module: agreement_stock
#: model_terms:ir.ui.view,arch_db:agreement_stock.partner_agreement_form_view_stock
msgid "<span class=\"o_stat_text\">Pickings</span>"
msgstr "<span class=\"o_stat_text\">Lieferscheine</span>"
#. module: agreement_stock
#: model:ir.model,name:agreement_stock.model_agreement
#: model:ir.model.fields,field_description:agreement_stock.field_stock_move__agreement_id
#: model:ir.model.fields,field_description:agreement_stock.field_stock_picking__agreement_id
#: model:ir.model.fields,field_description:agreement_stock.field_stock_production_lot__agreement_id
msgid "Agreement"
msgstr "Vereinbarung"
#. module: agreement_stock
#: model_terms:ir.actions.act_window,help:agreement_stock.action_stock_production_lot_agreement_specific
msgid "Create Lot/Serial"
msgstr "Chargen / Seriennummern anlegen"
#. module: agreement_stock
#: model_terms:ir.actions.act_window,help:agreement_stock.action_stock_move_agreement_specific
msgid "Create Moves"
msgstr "Lagerbewegungen anlegen"
#. module: agreement_stock
#: model_terms:ir.actions.act_window,help:agreement_stock.action_stock_picking_agreement_specific
msgid "Create Pickings"
msgstr "Lieferscheine anlegen"
#. module: agreement_stock
#: model:ir.model,name:agreement_stock.model_stock_production_lot
msgid "Lot/Serial"
msgstr "Charge / Seriennummer"
#. module: agreement_stock
#: model:ir.actions.act_window,name:agreement_stock.action_stock_production_lot_agreement_specific
msgid "Lots/Serials"
msgstr "Chargen / Seriennummern"
#. module: agreement_stock
#: model:ir.actions.act_window,name:agreement_stock.action_stock_move_agreement_specific
msgid "Moves"
msgstr "Lagerbewegungen"
#. module: agreement_stock
#: model:ir.actions.act_window,name:agreement_stock.action_stock_picking_agreement_specific
msgid "Pickings"
msgstr "Lieferscheine"
#. module: agreement_stock
#: model:ir.model.fields,field_description:agreement_stock.field_stock_production_lot__serviceprofile_id
#: model_terms:ir.ui.view,arch_db:agreement_stock.search_product_lot_filter_agreement
msgid "Service Profile"
msgstr "Dienstleistungsprofil"
#. module: agreement_stock
#: model:ir.model,name:agreement_stock.model_stock_move
msgid "Stock Move"
msgstr "Lagerbewegung"
#. module: agreement_stock
#: model:ir.model,name:agreement_stock.model_stock_picking
msgid "Transfer"
msgstr "Liefern"
#~ msgid "agreement"
#~ msgstr "Vereinbarung"

104
agreement_stock/i18n/es.po Normal file
View File

@@ -0,0 +1,104 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * agreement_stock
#
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: es\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: agreement_stock
#: model:ir.model.fields,field_description:agreement_stock.field_agreement__lot_count
msgid "# Lots/Serials"
msgstr ""
#. module: agreement_stock
#: model:ir.model.fields,field_description:agreement_stock.field_agreement__move_count
msgid "# Moves"
msgstr ""
#. module: agreement_stock
#: model:ir.model.fields,field_description:agreement_stock.field_agreement__picking_count
msgid "# Pickings"
msgstr ""
#. module: agreement_stock
#: model_terms:ir.ui.view,arch_db:agreement_stock.partner_agreement_form_view_stock
msgid "<span class=\"o_stat_text\">Lots/Serials</span>"
msgstr ""
#. module: agreement_stock
#: model_terms:ir.ui.view,arch_db:agreement_stock.partner_agreement_form_view_stock
msgid "<span class=\"o_stat_text\">Moves</span>"
msgstr ""
#. module: agreement_stock
#: model_terms:ir.ui.view,arch_db:agreement_stock.partner_agreement_form_view_stock
msgid "<span class=\"o_stat_text\">Pickings</span>"
msgstr ""
#. module: agreement_stock
#: model:ir.model,name:agreement_stock.model_agreement
#: model:ir.model.fields,field_description:agreement_stock.field_stock_move__agreement_id
#: model:ir.model.fields,field_description:agreement_stock.field_stock_picking__agreement_id
#: model:ir.model.fields,field_description:agreement_stock.field_stock_production_lot__agreement_id
msgid "Agreement"
msgstr ""
#. module: agreement_stock
#: model_terms:ir.actions.act_window,help:agreement_stock.action_stock_production_lot_agreement_specific
msgid "Create Lot/Serial"
msgstr ""
#. module: agreement_stock
#: model_terms:ir.actions.act_window,help:agreement_stock.action_stock_move_agreement_specific
msgid "Create Moves"
msgstr ""
#. module: agreement_stock
#: model_terms:ir.actions.act_window,help:agreement_stock.action_stock_picking_agreement_specific
msgid "Create Pickings"
msgstr ""
#. module: agreement_stock
#: model:ir.model,name:agreement_stock.model_stock_production_lot
msgid "Lot/Serial"
msgstr ""
#. module: agreement_stock
#: model:ir.actions.act_window,name:agreement_stock.action_stock_production_lot_agreement_specific
msgid "Lots/Serials"
msgstr ""
#. module: agreement_stock
#: model:ir.actions.act_window,name:agreement_stock.action_stock_move_agreement_specific
msgid "Moves"
msgstr ""
#. module: agreement_stock
#: model:ir.actions.act_window,name:agreement_stock.action_stock_picking_agreement_specific
msgid "Pickings"
msgstr ""
#. module: agreement_stock
#: model:ir.model.fields,field_description:agreement_stock.field_stock_production_lot__serviceprofile_id
#: model_terms:ir.ui.view,arch_db:agreement_stock.search_product_lot_filter_agreement
msgid "Service Profile"
msgstr ""
#. module: agreement_stock
#: model:ir.model,name:agreement_stock.model_stock_move
msgid "Stock Move"
msgstr ""
#. module: agreement_stock
#: model:ir.model,name:agreement_stock.model_stock_picking
msgid "Transfer"
msgstr ""

106
agreement_stock/i18n/fr.po Normal file
View File

@@ -0,0 +1,106 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * agreement_stock
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2021-01-04 11:44+0000\n"
"Last-Translator: Rémi <remi@le-filament.com>\n"
"Language-Team: none\n"
"Language: fr\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"
"X-Generator: Weblate 4.3.2\n"
#. module: agreement_stock
#: model:ir.model.fields,field_description:agreement_stock.field_agreement__lot_count
msgid "# Lots/Serials"
msgstr "# Numéros de Série / Lots"
#. module: agreement_stock
#: model:ir.model.fields,field_description:agreement_stock.field_agreement__move_count
msgid "# Moves"
msgstr "# Mouvements"
#. module: agreement_stock
#: model:ir.model.fields,field_description:agreement_stock.field_agreement__picking_count
msgid "# Pickings"
msgstr "# Préparations"
#. module: agreement_stock
#: model_terms:ir.ui.view,arch_db:agreement_stock.partner_agreement_form_view_stock
msgid "<span class=\"o_stat_text\">Lots/Serials</span>"
msgstr "<span class=\"o_stat_text\">Numéros de Série / Lots</span>"
#. module: agreement_stock
#: model_terms:ir.ui.view,arch_db:agreement_stock.partner_agreement_form_view_stock
msgid "<span class=\"o_stat_text\">Moves</span>"
msgstr "<span class=\"o_stat_text\">Mouvements</span>"
#. module: agreement_stock
#: model_terms:ir.ui.view,arch_db:agreement_stock.partner_agreement_form_view_stock
msgid "<span class=\"o_stat_text\">Pickings</span>"
msgstr "<span class=\"o_stat_text\">Préparations</span>"
#. module: agreement_stock
#: model:ir.model,name:agreement_stock.model_agreement
#: model:ir.model.fields,field_description:agreement_stock.field_stock_move__agreement_id
#: model:ir.model.fields,field_description:agreement_stock.field_stock_picking__agreement_id
#: model:ir.model.fields,field_description:agreement_stock.field_stock_production_lot__agreement_id
msgid "Agreement"
msgstr "Accord"
#. module: agreement_stock
#: model_terms:ir.actions.act_window,help:agreement_stock.action_stock_production_lot_agreement_specific
msgid "Create Lot/Serial"
msgstr "Créer Numéro de Série / Lot"
#. module: agreement_stock
#: model_terms:ir.actions.act_window,help:agreement_stock.action_stock_move_agreement_specific
msgid "Create Moves"
msgstr "Créer Mouvements"
#. module: agreement_stock
#: model_terms:ir.actions.act_window,help:agreement_stock.action_stock_picking_agreement_specific
msgid "Create Pickings"
msgstr "Créer Préparations"
#. module: agreement_stock
#: model:ir.model,name:agreement_stock.model_stock_production_lot
msgid "Lot/Serial"
msgstr "Numéro de Série / Lot"
#. module: agreement_stock
#: model:ir.actions.act_window,name:agreement_stock.action_stock_production_lot_agreement_specific
msgid "Lots/Serials"
msgstr "Numéros de Série / Lots"
#. module: agreement_stock
#: model:ir.actions.act_window,name:agreement_stock.action_stock_move_agreement_specific
msgid "Moves"
msgstr "Mouvements"
#. module: agreement_stock
#: model:ir.actions.act_window,name:agreement_stock.action_stock_picking_agreement_specific
msgid "Pickings"
msgstr "Préparations"
#. module: agreement_stock
#: model:ir.model.fields,field_description:agreement_stock.field_stock_production_lot__serviceprofile_id
#: model_terms:ir.ui.view,arch_db:agreement_stock.search_product_lot_filter_agreement
msgid "Service Profile"
msgstr "Profil de service"
#. module: agreement_stock
#: model:ir.model,name:agreement_stock.model_stock_move
msgid "Stock Move"
msgstr "Mouvement de Stock"
#. module: agreement_stock
#: model:ir.model,name:agreement_stock.model_stock_picking
msgid "Transfer"
msgstr "Transfert"

104
agreement_stock/i18n/it.po Normal file
View File

@@ -0,0 +1,104 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * agreement_stock
#
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: agreement_stock
#: model:ir.model.fields,field_description:agreement_stock.field_agreement__lot_count
msgid "# Lots/Serials"
msgstr ""
#. module: agreement_stock
#: model:ir.model.fields,field_description:agreement_stock.field_agreement__move_count
msgid "# Moves"
msgstr ""
#. module: agreement_stock
#: model:ir.model.fields,field_description:agreement_stock.field_agreement__picking_count
msgid "# Pickings"
msgstr ""
#. module: agreement_stock
#: model_terms:ir.ui.view,arch_db:agreement_stock.partner_agreement_form_view_stock
msgid "<span class=\"o_stat_text\">Lots/Serials</span>"
msgstr ""
#. module: agreement_stock
#: model_terms:ir.ui.view,arch_db:agreement_stock.partner_agreement_form_view_stock
msgid "<span class=\"o_stat_text\">Moves</span>"
msgstr ""
#. module: agreement_stock
#: model_terms:ir.ui.view,arch_db:agreement_stock.partner_agreement_form_view_stock
msgid "<span class=\"o_stat_text\">Pickings</span>"
msgstr ""
#. module: agreement_stock
#: model:ir.model,name:agreement_stock.model_agreement
#: model:ir.model.fields,field_description:agreement_stock.field_stock_move__agreement_id
#: model:ir.model.fields,field_description:agreement_stock.field_stock_picking__agreement_id
#: model:ir.model.fields,field_description:agreement_stock.field_stock_production_lot__agreement_id
msgid "Agreement"
msgstr ""
#. module: agreement_stock
#: model_terms:ir.actions.act_window,help:agreement_stock.action_stock_production_lot_agreement_specific
msgid "Create Lot/Serial"
msgstr ""
#. module: agreement_stock
#: model_terms:ir.actions.act_window,help:agreement_stock.action_stock_move_agreement_specific
msgid "Create Moves"
msgstr ""
#. module: agreement_stock
#: model_terms:ir.actions.act_window,help:agreement_stock.action_stock_picking_agreement_specific
msgid "Create Pickings"
msgstr ""
#. module: agreement_stock
#: model:ir.model,name:agreement_stock.model_stock_production_lot
msgid "Lot/Serial"
msgstr ""
#. module: agreement_stock
#: model:ir.actions.act_window,name:agreement_stock.action_stock_production_lot_agreement_specific
msgid "Lots/Serials"
msgstr ""
#. module: agreement_stock
#: model:ir.actions.act_window,name:agreement_stock.action_stock_move_agreement_specific
msgid "Moves"
msgstr ""
#. module: agreement_stock
#: model:ir.actions.act_window,name:agreement_stock.action_stock_picking_agreement_specific
msgid "Pickings"
msgstr ""
#. module: agreement_stock
#: model:ir.model.fields,field_description:agreement_stock.field_stock_production_lot__serviceprofile_id
#: model_terms:ir.ui.view,arch_db:agreement_stock.search_product_lot_filter_agreement
msgid "Service Profile"
msgstr ""
#. module: agreement_stock
#: model:ir.model,name:agreement_stock.model_stock_move
msgid "Stock Move"
msgstr ""
#. module: agreement_stock
#: model:ir.model,name:agreement_stock.model_stock_picking
msgid "Transfer"
msgstr ""

106
agreement_stock/i18n/pt.po Normal file
View File

@@ -0,0 +1,106 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * agreement_stock
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2020-02-18 01:13+0000\n"
"Last-Translator: Pedro Castro Silva <pedrocs@exo.pt>\n"
"Language-Team: none\n"
"Language: pt\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"
"X-Generator: Weblate 3.10\n"
#. module: agreement_stock
#: model:ir.model.fields,field_description:agreement_stock.field_agreement__lot_count
msgid "# Lots/Serials"
msgstr "# Lotes/Séries"
#. module: agreement_stock
#: model:ir.model.fields,field_description:agreement_stock.field_agreement__move_count
msgid "# Moves"
msgstr "# Movimentos"
#. module: agreement_stock
#: model:ir.model.fields,field_description:agreement_stock.field_agreement__picking_count
msgid "# Pickings"
msgstr "# Operações de Stock"
#. module: agreement_stock
#: model_terms:ir.ui.view,arch_db:agreement_stock.partner_agreement_form_view_stock
msgid "<span class=\"o_stat_text\">Lots/Serials</span>"
msgstr "<span class=\"o_stat_text\">Lotes/Séries</span>"
#. module: agreement_stock
#: model_terms:ir.ui.view,arch_db:agreement_stock.partner_agreement_form_view_stock
msgid "<span class=\"o_stat_text\">Moves</span>"
msgstr "<span class=\"o_stat_text\">Movimentos</span>"
#. module: agreement_stock
#: model_terms:ir.ui.view,arch_db:agreement_stock.partner_agreement_form_view_stock
msgid "<span class=\"o_stat_text\">Pickings</span>"
msgstr "<span class=\"o_stat_text\">Operações de Stock</span>"
#. module: agreement_stock
#: model:ir.model,name:agreement_stock.model_agreement
#: model:ir.model.fields,field_description:agreement_stock.field_stock_move__agreement_id
#: model:ir.model.fields,field_description:agreement_stock.field_stock_picking__agreement_id
#: model:ir.model.fields,field_description:agreement_stock.field_stock_production_lot__agreement_id
msgid "Agreement"
msgstr "Acordo"
#. module: agreement_stock
#: model_terms:ir.actions.act_window,help:agreement_stock.action_stock_production_lot_agreement_specific
msgid "Create Lot/Serial"
msgstr "Criar Lote/Nº Série"
#. module: agreement_stock
#: model_terms:ir.actions.act_window,help:agreement_stock.action_stock_move_agreement_specific
msgid "Create Moves"
msgstr "Criar Movimentos"
#. module: agreement_stock
#: model_terms:ir.actions.act_window,help:agreement_stock.action_stock_picking_agreement_specific
msgid "Create Pickings"
msgstr "Criar Operações de Stock"
#. module: agreement_stock
#: model:ir.model,name:agreement_stock.model_stock_production_lot
msgid "Lot/Serial"
msgstr "Lote/Série"
#. module: agreement_stock
#: model:ir.actions.act_window,name:agreement_stock.action_stock_production_lot_agreement_specific
msgid "Lots/Serials"
msgstr "Lotes/Séries"
#. module: agreement_stock
#: model:ir.actions.act_window,name:agreement_stock.action_stock_move_agreement_specific
msgid "Moves"
msgstr "Movimentos"
#. module: agreement_stock
#: model:ir.actions.act_window,name:agreement_stock.action_stock_picking_agreement_specific
msgid "Pickings"
msgstr "Operações de Stock"
#. module: agreement_stock
#: model:ir.model.fields,field_description:agreement_stock.field_stock_production_lot__serviceprofile_id
#: model_terms:ir.ui.view,arch_db:agreement_stock.search_product_lot_filter_agreement
msgid "Service Profile"
msgstr "Perfil do Serviço"
#. module: agreement_stock
#: model:ir.model,name:agreement_stock.model_stock_move
msgid "Stock Move"
msgstr "Movimento de Stock"
#. module: agreement_stock
#: model:ir.model,name:agreement_stock.model_stock_picking
msgid "Transfer"
msgstr "Transferência"

View File

@@ -0,0 +1,106 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * agreement_stock
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2020-06-16 22:19+0000\n"
"Last-Translator: Fernando Colus <fcolus1@gmail.com>\n"
"Language-Team: none\n"
"Language: pt_BR\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"
"X-Generator: Weblate 3.10\n"
#. module: agreement_stock
#: model:ir.model.fields,field_description:agreement_stock.field_agreement__lot_count
msgid "# Lots/Serials"
msgstr "# Lotes/Séries"
#. module: agreement_stock
#: model:ir.model.fields,field_description:agreement_stock.field_agreement__move_count
msgid "# Moves"
msgstr "# Movimentos"
#. module: agreement_stock
#: model:ir.model.fields,field_description:agreement_stock.field_agreement__picking_count
msgid "# Pickings"
msgstr "# Coletas"
#. module: agreement_stock
#: model_terms:ir.ui.view,arch_db:agreement_stock.partner_agreement_form_view_stock
msgid "<span class=\"o_stat_text\">Lots/Serials</span>"
msgstr "<span class=\"o_stat_text\">Lotes/Séries</span>"
#. module: agreement_stock
#: model_terms:ir.ui.view,arch_db:agreement_stock.partner_agreement_form_view_stock
msgid "<span class=\"o_stat_text\">Moves</span>"
msgstr "<span class=\"o_stat_text\">Movimentos</span>"
#. module: agreement_stock
#: model_terms:ir.ui.view,arch_db:agreement_stock.partner_agreement_form_view_stock
msgid "<span class=\"o_stat_text\">Pickings</span>"
msgstr "<span class=\"o_stat_text\">Coletas</span>"
#. module: agreement_stock
#: model:ir.model,name:agreement_stock.model_agreement
#: model:ir.model.fields,field_description:agreement_stock.field_stock_move__agreement_id
#: model:ir.model.fields,field_description:agreement_stock.field_stock_picking__agreement_id
#: model:ir.model.fields,field_description:agreement_stock.field_stock_production_lot__agreement_id
msgid "Agreement"
msgstr "Acordo"
#. module: agreement_stock
#: model_terms:ir.actions.act_window,help:agreement_stock.action_stock_production_lot_agreement_specific
msgid "Create Lot/Serial"
msgstr "Criar Lote/Série"
#. module: agreement_stock
#: model_terms:ir.actions.act_window,help:agreement_stock.action_stock_move_agreement_specific
msgid "Create Moves"
msgstr "Criar Movimentos"
#. module: agreement_stock
#: model_terms:ir.actions.act_window,help:agreement_stock.action_stock_picking_agreement_specific
msgid "Create Pickings"
msgstr "Criar Coletas"
#. module: agreement_stock
#: model:ir.model,name:agreement_stock.model_stock_production_lot
msgid "Lot/Serial"
msgstr "Lote/Série"
#. module: agreement_stock
#: model:ir.actions.act_window,name:agreement_stock.action_stock_production_lot_agreement_specific
msgid "Lots/Serials"
msgstr "Lotes/Séries"
#. module: agreement_stock
#: model:ir.actions.act_window,name:agreement_stock.action_stock_move_agreement_specific
msgid "Moves"
msgstr "Movimentos"
#. module: agreement_stock
#: model:ir.actions.act_window,name:agreement_stock.action_stock_picking_agreement_specific
msgid "Pickings"
msgstr "Coletas"
#. module: agreement_stock
#: model:ir.model.fields,field_description:agreement_stock.field_stock_production_lot__serviceprofile_id
#: model_terms:ir.ui.view,arch_db:agreement_stock.search_product_lot_filter_agreement
msgid "Service Profile"
msgstr "Perfil de Serviço"
#. module: agreement_stock
#: model:ir.model,name:agreement_stock.model_stock_move
msgid "Stock Move"
msgstr "Movimento de Estoque"
#. module: agreement_stock
#: model:ir.model,name:agreement_stock.model_stock_picking
msgid "Transfer"
msgstr "Transferir"

View File

@@ -0,0 +1,106 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * agreement_stock
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2019-09-04 18:23+0000\n"
"Last-Translator: 黎伟杰 <674416404@qq.com>\n"
"Language-Team: none\n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 3.8\n"
#. module: agreement_stock
#: model:ir.model.fields,field_description:agreement_stock.field_agreement__lot_count
msgid "# Lots/Serials"
msgstr "# 批次/序列"
#. module: agreement_stock
#: model:ir.model.fields,field_description:agreement_stock.field_agreement__move_count
msgid "# Moves"
msgstr "# 移动"
#. module: agreement_stock
#: model:ir.model.fields,field_description:agreement_stock.field_agreement__picking_count
msgid "# Pickings"
msgstr "# 拣货"
#. module: agreement_stock
#: model_terms:ir.ui.view,arch_db:agreement_stock.partner_agreement_form_view_stock
msgid "<span class=\"o_stat_text\">Lots/Serials</span>"
msgstr "<span class=\"o_stat_text\">批次/序列</span>"
#. module: agreement_stock
#: model_terms:ir.ui.view,arch_db:agreement_stock.partner_agreement_form_view_stock
msgid "<span class=\"o_stat_text\">Moves</span>"
msgstr "<span class=\"o_stat_text\">移动</span>"
#. module: agreement_stock
#: model_terms:ir.ui.view,arch_db:agreement_stock.partner_agreement_form_view_stock
msgid "<span class=\"o_stat_text\">Pickings</span>"
msgstr "<span class=\"o_stat_text\">拣货</span>"
#. module: agreement_stock
#: model:ir.model,name:agreement_stock.model_agreement
#: model:ir.model.fields,field_description:agreement_stock.field_stock_move__agreement_id
#: model:ir.model.fields,field_description:agreement_stock.field_stock_picking__agreement_id
#: model:ir.model.fields,field_description:agreement_stock.field_stock_production_lot__agreement_id
msgid "Agreement"
msgstr "协议"
#. module: agreement_stock
#: model_terms:ir.actions.act_window,help:agreement_stock.action_stock_production_lot_agreement_specific
msgid "Create Lot/Serial"
msgstr "Create 批次/序列"
#. module: agreement_stock
#: model_terms:ir.actions.act_window,help:agreement_stock.action_stock_move_agreement_specific
msgid "Create Moves"
msgstr "创建移动"
#. module: agreement_stock
#: model_terms:ir.actions.act_window,help:agreement_stock.action_stock_picking_agreement_specific
msgid "Create Pickings"
msgstr "创建拣货"
#. module: agreement_stock
#: model:ir.model,name:agreement_stock.model_stock_production_lot
msgid "Lot/Serial"
msgstr "批次/序列"
#. module: agreement_stock
#: model:ir.actions.act_window,name:agreement_stock.action_stock_production_lot_agreement_specific
msgid "Lots/Serials"
msgstr "批次/序列"
#. module: agreement_stock
#: model:ir.actions.act_window,name:agreement_stock.action_stock_move_agreement_specific
msgid "Moves"
msgstr "移动"
#. module: agreement_stock
#: model:ir.actions.act_window,name:agreement_stock.action_stock_picking_agreement_specific
msgid "Pickings"
msgstr "拣货"
#. module: agreement_stock
#: model:ir.model.fields,field_description:agreement_stock.field_stock_production_lot__serviceprofile_id
#: model_terms:ir.ui.view,arch_db:agreement_stock.search_product_lot_filter_agreement
msgid "Service Profile"
msgstr "服务资料"
#. module: agreement_stock
#: model:ir.model,name:agreement_stock.model_stock_move
msgid "Stock Move"
msgstr "库存移动"
#. module: agreement_stock
#: model:ir.model,name:agreement_stock.model_stock_picking
msgid "Transfer"
msgstr "调拨"

View File

@@ -0,0 +1,5 @@
# Copyright (C) 2021 - TODAY, Open Source Integrators
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from . import stock
from . import agreement

View File

@@ -0,0 +1,30 @@
# Copyright (C) 2021 - TODAY, Open Source Integrators
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import fields, models
class Agreement(models.Model):
_inherit = "agreement"
picking_count = fields.Integer("# Pickings", compute="_compute_picking_count")
move_count = fields.Integer("# Moves", compute="_compute_move_count")
lot_count = fields.Integer("# Lots/Serials", compute="_compute_lot_count")
def _compute_picking_count(self):
for ag_rec in self:
ag_rec.picking_count = self.env["stock.picking"].search_count(
[("agreement_id", "in", ag_rec.ids)]
)
def _compute_move_count(self):
for ag_rec in self:
ag_rec.move_count = self.env["stock.move"].search_count(
[("agreement_id", "in", ag_rec.ids)]
)
def _compute_lot_count(self):
for ag_rec in self:
ag_rec.lot_count = self.env["stock.production.lot"].search_count(
[("agreement_id", "in", ag_rec.ids)]
)

View File

@@ -0,0 +1,25 @@
# Copyright (C) 2021 - TODAY, Open Source Integrators
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import fields, models
class StockPicking(models.Model):
_inherit = "stock.picking"
agreement_id = fields.Many2one("agreement", "Agreement")
class StockMove(models.Model):
_inherit = "stock.move"
agreement_id = fields.Many2one(
"agreement", related="picking_id.agreement_id", string="Agreement", store=True
)
class StockProductionLot(models.Model):
_inherit = "stock.production.lot"
agreement_id = fields.Many2one("agreement", "Agreement")
serviceprofile_id = fields.Many2one("agreement.serviceprofile", "Service Profile")

View File

@@ -0,0 +1,2 @@
* Sandip Mangukiya <smangukiya@opensourceintegrators.com>
* Serpent Consulting Services Pvt. Ltd. <support@serpentcs.com>

View File

@@ -0,0 +1,3 @@
The development of this module has been financially supported by:
* Open Source Integrators <https://opensourceintegrators.com>

View File

@@ -0,0 +1,5 @@
Odoo Agreement App does not provide an easy way to access stock transfers related to an agreement.
Some organizations needs to have a quick access to stock transfers to track the performance of an agreement.
This module allows you to link a transfer to an agreement and
adds a smart button on the agreement to look at the list of related transfers.

Some files were not shown because too many files have changed in this diff Show More