From 18e6753655be41de5643d5278b3671664f9e6e50 Mon Sep 17 00:00:00 2001 From: Victor Martin Date: Fri, 7 Jun 2019 13:21:32 +0200 Subject: [PATCH 1/3] [ADD] business_requirement_deliverable_sale: New module in 11.0 --- business_requirement_sale/README.rst | 79 ++++ business_requirement_sale/__init__.py | 5 + business_requirement_sale/__manifest__.py | 26 ++ business_requirement_sale/models/__init__.py | 5 + business_requirement_sale/models/business.py | 104 +++++ .../models/sale_order.py | 39 ++ .../readme/CONTRIBUTORS.rst | 5 + .../readme/DESCRIPTION.rst | 3 + .../security/ir.model.access.csv | 3 + .../static/description/index.html | 426 ++++++++++++++++++ .../views/business_requirement_views.xml | 43 ++ .../views/sale_order_views.xml | 44 ++ business_requirement_sale/wizard/__init__.py | 4 + .../wizard/convert_requirement_sale.py | 159 +++++++ .../wizard/convert_requirement_sale.xml | 34 ++ 15 files changed, 979 insertions(+) create mode 100644 business_requirement_sale/README.rst create mode 100644 business_requirement_sale/__init__.py create mode 100644 business_requirement_sale/__manifest__.py create mode 100644 business_requirement_sale/models/__init__.py create mode 100644 business_requirement_sale/models/business.py create mode 100644 business_requirement_sale/models/sale_order.py create mode 100644 business_requirement_sale/readme/CONTRIBUTORS.rst create mode 100644 business_requirement_sale/readme/DESCRIPTION.rst create mode 100644 business_requirement_sale/security/ir.model.access.csv create mode 100644 business_requirement_sale/static/description/index.html create mode 100644 business_requirement_sale/views/business_requirement_views.xml create mode 100644 business_requirement_sale/views/sale_order_views.xml create mode 100644 business_requirement_sale/wizard/__init__.py create mode 100644 business_requirement_sale/wizard/convert_requirement_sale.py create mode 100644 business_requirement_sale/wizard/convert_requirement_sale.xml diff --git a/business_requirement_sale/README.rst b/business_requirement_sale/README.rst new file mode 100644 index 000000000..4d208999b --- /dev/null +++ b/business_requirement_sale/README.rst @@ -0,0 +1,79 @@ +========================= +Business Requirement Sale +========================= + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png + :target: https://odoo-community.org/page/development-status + :alt: Alpha +.. |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%2Fbusiness--requirement-lightgray.png?logo=github + :target: https://github.com/OCA/business-requirement/tree/11.0/business_requirement_sale + :alt: OCA/business-requirement +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/business-requirement-11-0/business-requirement-11-0-business_requirement_sale + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/222/11.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module extends the functionality of Business Requirement +and to allow you to convert into new Sale Orders. +Deliverables if selected will be Order Lines on the new Order created. + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub 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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Tecnativa + +Contributors +~~~~~~~~~~~~ + +* `Tecnativa `_: + + * Alexandre Diaz + * Pedro M. Baeza + * Victor M.M. Torres + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/business-requirement `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/business_requirement_sale/__init__.py b/business_requirement_sale/__init__.py new file mode 100644 index 000000000..27cd3b4a5 --- /dev/null +++ b/business_requirement_sale/__init__.py @@ -0,0 +1,5 @@ +# Copyright 2019 Tecnativa Victor M.M. Torres> +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import models +from . import wizard diff --git a/business_requirement_sale/__manifest__.py b/business_requirement_sale/__manifest__.py new file mode 100644 index 000000000..97cf961bb --- /dev/null +++ b/business_requirement_sale/__manifest__.py @@ -0,0 +1,26 @@ +# Copyright 2019 Tecnativa Victor M.M. Torres> +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + "name": "Business Requirement Sale", + 'category': 'Business Requirements Management', + 'summary': 'Convert Business Requirement into \ + Sale Orders', + "version": "11.0.1.0.0", + "development_status": "Alpha", + "website": "https://github.com/OCA/business-requirement", + "author": "Tecnativa, " + "Odoo Community Association (OCA)", + "license": "AGPL-3", + "application": False, + "installable": True, + "depends": [ + "business_requirement_deliverable", + "sale_management", + ], + "data": [ + 'security/ir.model.access.csv', + 'wizard/convert_requirement_sale.xml', + 'views/sale_order_views.xml', + 'views/business_requirement_views.xml', + ], +} diff --git a/business_requirement_sale/models/__init__.py b/business_requirement_sale/models/__init__.py new file mode 100644 index 000000000..0a8d265a4 --- /dev/null +++ b/business_requirement_sale/models/__init__.py @@ -0,0 +1,5 @@ +# Copyright 2019 Tecnativa Victor M.M. Torres> +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import business +from . import sale_order diff --git a/business_requirement_sale/models/business.py b/business_requirement_sale/models/business.py new file mode 100644 index 000000000..25b9f94b9 --- /dev/null +++ b/business_requirement_sale/models/business.py @@ -0,0 +1,104 @@ +# Copyright 2019 Tecnativa Victor M.M. Torres> +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models, _ +from odoo.tools.misc import formatLang + + +class BusinessRequirement(models.Model): + _inherit = 'business.requirement' + + sale_order_ids = fields.One2many( + comodel_name='sale.order', + inverse_name='business_requirement_id', + string='Orders', + ) + order_count = fields.Integer( + string='Count', + compute='_compute_order_count', + ) + detailed_order = fields.Boolean( + help='Check this if need generated a detailed order' + ) + + @api.multi + @api.depends('sale_order_ids') + def _compute_order_count(self): + aux_count = 0 + fetch_data = self.env['sale.order'].read_group( + domain=[('business_requirement_id', 'in', self.ids)], + fields=['business_requirement_id'], + groupby=['business_requirement_id'], + ) + if fetch_data: + aux_count = fetch_data[0].get( + 'business_requirement_id_count', 0) + for rec in self: + rec.order_count = aux_count + + @api.multi + def convert_requirement_sale(self): + vals = { + 'br_id': self.id, + 'brd_ids': [(6, 0, self.deliverable_lines.ids)] + } + wizard_obj = self.env['business.convert.requirement.sale'] + wizard = wizard_obj.create(vals) + action = wizard.wizard_view() + return action + + @api.multi + def launch_convert_wizard(self): + vals = { + 'br_id': self.id, + 'brd_ids': [(6, 0, self.deliverable_lines.ids)], + } + wizard_obj = self.env['business.convert.requirement.sale'] + wizard = wizard_obj.create(vals) + action = wizard.wizard_view() + return action + + @api.multi + def open_orders(self): + for self in self: + domain = [('business_requirement_id', '=', self.id)] + br_id = 0 + if self.state in ('draft', 'confirmed'): + br_id = self.id + return { + 'name': _('Sale Orders'), + 'type': 'ir.actions.act_window', + 'view_type': 'form', + 'view_mode': 'tree,form,graph', + 'res_model': 'sale.order', + 'target': 'current', + 'domain': domain, + 'context': { + 'tree_view_ref': 'sale_order.' + + 'view_sale_order_tree', + 'form_view_ref': 'sale_order.' + + 'view_sale_order_form', + 'default_sale_order_id': br_id + }} + + +class BusinessRequirementDeliverable(models.Model): + _inherit = 'business.requirement.deliverable' + + sale_order_line_id = fields.Many2one( + comodel_name='sale.order.line', + string='Order Line', + track_visibility='onchange',) + + @api.multi + def name_get(self): + result = [] + for rec in self: + name = rec.name + name = '{} - {} '.format(rec.sequence, rec.name,) + name += ' - (' + formatLang( + self.env, rec.price_total, + currency_obj=rec.currency_id) + name += ')' + result.append((rec.id, name)) + return result diff --git a/business_requirement_sale/models/sale_order.py b/business_requirement_sale/models/sale_order.py new file mode 100644 index 000000000..fd968d17b --- /dev/null +++ b/business_requirement_sale/models/sale_order.py @@ -0,0 +1,39 @@ +# Copyright 2019 Tecnativa Victor M.M. Torres> +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class SaleOrder(models.Model): + _inherit = 'sale.order' + + business_requirement_id = fields.Many2one( + comodel_name='business.requirement', + string='Business requirement', + ) + + +class SaleOrderLineSection(models.Model): + _name = 'sale.order.line.section' + _description = 'Sale Order Line Section' + + name = fields.Char('Name', required=True) + + +class SaleOrderLine(models.Model): + _inherit = 'sale.order.line' + + line_section_id = fields.Many2one( + comodel_name='sale.order.line.section', + string='Section') + business_requirement_deliverable_id = fields.Many2one( + comodel_name='business.requirement.deliverable', + string='Deliverable') + + @api.multi + def _totaled_method(self): + for rec in self: + rec.write({ + 'product_uom_qty': 1, + 'price_unit': rec.price_total, + }) diff --git a/business_requirement_sale/readme/CONTRIBUTORS.rst b/business_requirement_sale/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..c993696bb --- /dev/null +++ b/business_requirement_sale/readme/CONTRIBUTORS.rst @@ -0,0 +1,5 @@ +* `Tecnativa `_: + + * Alexandre Diaz + * Pedro M. Baeza + * Victor M.M. Torres diff --git a/business_requirement_sale/readme/DESCRIPTION.rst b/business_requirement_sale/readme/DESCRIPTION.rst new file mode 100644 index 000000000..a65f91877 --- /dev/null +++ b/business_requirement_sale/readme/DESCRIPTION.rst @@ -0,0 +1,3 @@ +This module extends the functionality of Business Requirement +and to allow you to convert into new Sale Orders. +Deliverables if selected will be Order Lines on the new Order created. diff --git a/business_requirement_sale/security/ir.model.access.csv b/business_requirement_sale/security/ir.model.access.csv new file mode 100644 index 000000000..886a9d05c --- /dev/null +++ b/business_requirement_sale/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_sale_order_line_section_user,business.requirement.deliverable.section.user,model_sale_order_line_section,business_requirement.group_business_requirement_user,1,0,0,0 +access_sale_order_line_section_manager,business.requirement.deliverable.section.manager,model_sale_order_line_section,business_requirement.group_business_requirement_manager,1,1,1,1 diff --git a/business_requirement_sale/static/description/index.html b/business_requirement_sale/static/description/index.html new file mode 100644 index 000000000..7b7401da1 --- /dev/null +++ b/business_requirement_sale/static/description/index.html @@ -0,0 +1,426 @@ + + + + + + +Business Requirement Sale + + + +
+

Business Requirement Sale

+ + +

Alpha License: AGPL-3 OCA/business-requirement Translate me on Weblate Try me on Runbot

+

This module extends the functionality of Business Requirement +and to allow you to convert into new Sale Orders. +Deliverables if selected will be Order Lines on the new Order created.

+

Table of contents

+ +
+

Bug Tracker

+

Bugs are tracked on GitHub 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.

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • Tecnativa
  • +
+
+
+

Contributors

+
    +
  • Tecnativa:
      +
    • Alexandre Diaz
    • +
    • Pedro M. Baeza
    • +
    • Victor M.M. Torres
    • +
    +
  • +
+
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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

+

This module is part of the OCA/business-requirement project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/business_requirement_sale/views/business_requirement_views.xml b/business_requirement_sale/views/business_requirement_views.xml new file mode 100644 index 000000000..f987e6df8 --- /dev/null +++ b/business_requirement_sale/views/business_requirement_views.xml @@ -0,0 +1,43 @@ + + + + + business.requirement.form + business.requirement + + + + +
+
+ +