mrp_work_hierachical: pre-commit execution

This commit is contained in:
David Beal
2020-10-17 19:02:26 +02:00
parent 70213101cb
commit ccaddbd3ec
11 changed files with 175 additions and 173 deletions

View File

@@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# © 2016 Akretion (http://www.akretion.com) # © 2016 Akretion (http://www.akretion.com)
# David BEAL <david.beal@akretion.com> # David BEAL <david.beal@akretion.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

View File

@@ -0,0 +1,23 @@
# © 2016 Akretion (http://www.akretion.com)
# David BEAL <david.beal@akretion.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
"name": "MRP Workcenter Hierarchical",
"version": "14.0.0.0.0",
"author": "Akretion,Odoo Community Association (OCA)",
"summary": "Organise Workcenters by section",
"category": "Manufacturing",
"depends": [
"mrp",
],
"website": "https://github.com/OCA/manufacture",
"data": [
"views/workcenter_view.xml",
],
"demo": [
"data/mrp_demo.xml",
],
"license": "AGPL-3",
"installable": True,
}

View File

@@ -1,26 +0,0 @@
# -*- coding: utf-8 -*-
# © 2016 Akretion (http://www.akretion.com)
# David BEAL <david.beal@akretion.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
'name': 'MRP Workcenter Hierarchical',
'version': '9.0.1.0.0',
'author': 'Akretion,Odoo Community Association (OCA)',
'summary': "Organise Workcenters by section",
'category': 'Manufacturing',
'depends': [
'mrp_operations',
],
'website': 'https://github.com/OCA/manufacture',
'data': [
'views/workcenter_view.xml',
],
'demo': [
'data/mrp_demo.xml',
],
'license': 'AGPL-3',
'installable': True,
'auto_install': False,
'application': False,
}

View File

@@ -1,96 +1,96 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8" ?>
<openerp> <openerp>
<data noupdate="0"> <data noupdate="0">
<record id="mrp_workcenter_top" model="mrp.workcenter"> <record id="mrp_workcenter_top" model="mrp.workcenter">
<field name="name">Assembly 1</field> <field name="name">Assembly 1</field>
<field name="calendar_id" ref="resource.timesheet_group1"/> <field name="calendar_id" ref="resource.timesheet_group1" />
<field name="capacity_per_cycle">5</field> <field name="capacity_per_cycle">5</field>
<field name="time_cycle">1</field> <field name="time_cycle">1</field>
<field name="time_start">0.1</field> <field name="time_start">0.1</field>
<field name="time_stop">0.1</field> <field name="time_stop">0.1</field>
<field name="time_efficiency">0.87</field> <field name="time_efficiency">0.87</field>
<field name="product_id" ref="product.product_assembly"/> <field name="product_id" ref="product.product_assembly" />
<field name="costs_hour">0.1</field> <field name="costs_hour">0.1</field>
<field name="costs_hour_account_id" ref="mrp.account_assembly_hours"/> <field name="costs_hour_account_id" ref="mrp.account_assembly_hours" />
<field name="costs_cycle">0.05</field> <field name="costs_cycle">0.05</field>
<field name="costs_cycle_account_id" ref="mrp.account_assembly_cycle"/> <field name="costs_cycle_account_id" ref="mrp.account_assembly_cycle" />
</record> </record>
<record id="mrp_workcenter_2" model="mrp.workcenter"> <record id="mrp_workcenter_2" model="mrp.workcenter">
<field name="name">Assembly workshop 2</field> <field name="name">Assembly workshop 2</field>
<field name="calendar_id" ref="resource.timesheet_group1"/> <field name="calendar_id" ref="resource.timesheet_group1" />
<field name="capacity_per_cycle">5</field> <field name="capacity_per_cycle">5</field>
<field name="time_cycle">1</field> <field name="time_cycle">1</field>
<field name="time_start">0.1</field> <field name="time_start">0.1</field>
<field name="time_stop">0.1</field> <field name="time_stop">0.1</field>
<field name="time_efficiency">0.87</field> <field name="time_efficiency">0.87</field>
<field name="product_id" ref="product.product_assembly"/> <field name="product_id" ref="product.product_assembly" />
<field name="costs_hour">0.1</field> <field name="costs_hour">0.1</field>
<field name="costs_hour_account_id" ref="mrp.account_assembly_hours"/> <field name="costs_hour_account_id" ref="mrp.account_assembly_hours" />
<field name="costs_cycle">0.05</field> <field name="costs_cycle">0.05</field>
<field name="costs_cycle_account_id" ref="mrp.account_assembly_cycle"/> <field name="costs_cycle_account_id" ref="mrp.account_assembly_cycle" />
<field name="parent_id" ref="mrp_workcenter_top"/> <field name="parent_id" ref="mrp_workcenter_top" />
</record> </record>
<record id="mrp_workcenter_A" model="mrp.workcenter"> <record id="mrp_workcenter_A" model="mrp.workcenter">
<field name="name">Assembly A</field> <field name="name">Assembly A</field>
<field name="calendar_id" ref="resource.timesheet_group1"/> <field name="calendar_id" ref="resource.timesheet_group1" />
<field name="capacity_per_cycle">5</field> <field name="capacity_per_cycle">5</field>
<field name="time_cycle">1</field> <field name="time_cycle">1</field>
<field name="time_start">0.1</field> <field name="time_start">0.1</field>
<field name="time_stop">0.1</field> <field name="time_stop">0.1</field>
<field name="time_efficiency">0.87</field> <field name="time_efficiency">0.87</field>
<field name="product_id" ref="product.product_assembly"/> <field name="product_id" ref="product.product_assembly" />
<field name="costs_hour">0.1</field> <field name="costs_hour">0.1</field>
<field name="costs_hour_account_id" ref="mrp.account_assembly_hours"/> <field name="costs_hour_account_id" ref="mrp.account_assembly_hours" />
<field name="costs_cycle">0.05</field> <field name="costs_cycle">0.05</field>
<field name="costs_cycle_account_id" ref="mrp.account_assembly_cycle"/> <field name="costs_cycle_account_id" ref="mrp.account_assembly_cycle" />
<field name="parent_id" ref="mrp_workcenter_2"/> <field name="parent_id" ref="mrp_workcenter_2" />
</record> </record>
<record id="mrp_workcenter_B" model="mrp.workcenter"> <record id="mrp_workcenter_B" model="mrp.workcenter">
<field name="name">Assembly B</field> <field name="name">Assembly B</field>
<field name="calendar_id" ref="resource.timesheet_group1"/> <field name="calendar_id" ref="resource.timesheet_group1" />
<field name="capacity_per_cycle">5</field> <field name="capacity_per_cycle">5</field>
<field name="time_cycle">1</field> <field name="time_cycle">1</field>
<field name="time_start">0.1</field> <field name="time_start">0.1</field>
<field name="time_stop">0.1</field> <field name="time_stop">0.1</field>
<field name="time_efficiency">0.87</field> <field name="time_efficiency">0.87</field>
<field name="product_id" ref="product.product_assembly"/> <field name="product_id" ref="product.product_assembly" />
<field name="costs_hour">0.1</field> <field name="costs_hour">0.1</field>
<field name="costs_hour_account_id" ref="mrp.account_assembly_hours"/> <field name="costs_hour_account_id" ref="mrp.account_assembly_hours" />
<field name="costs_cycle">0.05</field> <field name="costs_cycle">0.05</field>
<field name="costs_cycle_account_id" ref="mrp.account_assembly_cycle"/> <field name="costs_cycle_account_id" ref="mrp.account_assembly_cycle" />
<field name="parent_id" ref="mrp_workcenter_2"/> <field name="parent_id" ref="mrp_workcenter_2" />
</record> </record>
<record id="mrp_workcenter_C" model="mrp.workcenter"> <record id="mrp_workcenter_C" model="mrp.workcenter">
<field name="name">Assembly C</field> <field name="name">Assembly C</field>
<field name="calendar_id" ref="resource.timesheet_group1"/> <field name="calendar_id" ref="resource.timesheet_group1" />
<field name="capacity_per_cycle">5</field> <field name="capacity_per_cycle">5</field>
<field name="time_cycle">1</field> <field name="time_cycle">1</field>
<field name="time_start">0.1</field> <field name="time_start">0.1</field>
<field name="time_stop">0.1</field> <field name="time_stop">0.1</field>
<field name="time_efficiency">0.87</field> <field name="time_efficiency">0.87</field>
<field name="product_id" ref="product.product_assembly"/> <field name="product_id" ref="product.product_assembly" />
<field name="costs_hour">0.1</field> <field name="costs_hour">0.1</field>
<field name="costs_hour_account_id" ref="mrp.account_assembly_hours"/> <field name="costs_hour_account_id" ref="mrp.account_assembly_hours" />
<field name="costs_cycle">0.05</field> <field name="costs_cycle">0.05</field>
<field name="costs_cycle_account_id" ref="mrp.account_assembly_cycle"/> <field name="costs_cycle_account_id" ref="mrp.account_assembly_cycle" />
<field name="parent_id" ref="mrp.mrp_workcenter_0"/> <field name="parent_id" ref="mrp.mrp_workcenter_0" />
</record> </record>
<record id="mrp_workcenter_E" model="mrp.workcenter"> <record id="mrp_workcenter_E" model="mrp.workcenter">
<field name="name">Assembly E</field> <field name="name">Assembly E</field>
<field name="calendar_id" ref="resource.timesheet_group1"/> <field name="calendar_id" ref="resource.timesheet_group1" />
<field name="capacity_per_cycle">5</field> <field name="capacity_per_cycle">5</field>
<field name="time_cycle">1</field> <field name="time_cycle">1</field>
<field name="time_start">0.1</field> <field name="time_start">0.1</field>
<field name="time_stop">0.1</field> <field name="time_stop">0.1</field>
<field name="time_efficiency">0.87</field> <field name="time_efficiency">0.87</field>
<field name="product_id" ref="product.product_assembly"/> <field name="product_id" ref="product.product_assembly" />
<field name="costs_hour">0.1</field> <field name="costs_hour">0.1</field>
<field name="costs_hour_account_id" ref="mrp.account_assembly_hours"/> <field name="costs_hour_account_id" ref="mrp.account_assembly_hours" />
<field name="costs_cycle">0.05</field> <field name="costs_cycle">0.05</field>
<field name="costs_cycle_account_id" ref="mrp.account_assembly_cycle"/> <field name="costs_cycle_account_id" ref="mrp.account_assembly_cycle" />
</record> </record>
<record id="mrp.mrp_workcenter_0" model="mrp.workcenter"> <record id="mrp.mrp_workcenter_0" model="mrp.workcenter">
<field name="parent_id" ref="mrp_workcenter_top"/> <field name="parent_id" ref="mrp_workcenter_top" />
</record> </record>
</data> </data>
</openerp> </openerp>

View File

@@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# © 2016 Akretion (http://www.akretion.com) # © 2016 Akretion (http://www.akretion.com)
# David BEAL <david.beal@akretion.com> # David BEAL <david.beal@akretion.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

View File

@@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# © 2016 Akretion (http://www.akretion.com) # © 2016 Akretion (http://www.akretion.com)
# David BEAL <david.beal@akretion.com> # David BEAL <david.beal@akretion.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
@@ -7,30 +6,30 @@ from openerp import api, fields, models
class MrpWorkcenter(models.Model): class MrpWorkcenter(models.Model):
_inherit = 'mrp.workcenter' _inherit = "mrp.workcenter"
_order = 'parent_left' _order = "parent_left"
_parent_store = True _parent_store = True
parent_id = fields.Many2one('mrp.workcenter', string='Parent') parent_id = fields.Many2one("mrp.workcenter", string="Parent")
child_ids = fields.One2many( child_ids = fields.One2many("mrp.workcenter", "parent_id", string="Children")
'mrp.workcenter',
'parent_id',
string='Children')
parent_level_1_id = fields.Many2one( parent_level_1_id = fields.Many2one(
'mrp.workcenter', "mrp.workcenter",
compute='_compute_parent_level', compute="_compute_parent_level",
string='Parent Level 1', string="Parent Level 1",
store=True) store=True,
)
parent_level_2_id = fields.Many2one( parent_level_2_id = fields.Many2one(
'mrp.workcenter', "mrp.workcenter",
compute='_compute_parent_level', compute="_compute_parent_level",
string='Parent Level 2', string="Parent Level 2",
store=True) store=True,
)
parent_level_3_id = fields.Many2one( parent_level_3_id = fields.Many2one(
'mrp.workcenter', "mrp.workcenter",
compute='_compute_parent_level', compute="_compute_parent_level",
string='Parent Level 3', string="Parent Level 3",
store=True) store=True,
)
parent_left = fields.Integer(select=True) parent_left = fields.Integer(select=True)
parent_right = fields.Integer(select=True) parent_right = fields.Integer(select=True)
@@ -45,18 +44,17 @@ class MrpWorkcenter(models.Model):
return ids return ids
@api.multi @api.multi
@api.depends('parent_id.parent_id.parent_id', 'child_ids') @api.depends("parent_id.parent_id.parent_id", "child_ids")
def _compute_parent_level(self): def _compute_parent_level(self):
def get_next_level(parent_ids, workcenter): def get_next_level(parent_ids, workcenter):
return parent_ids and parent_ids.pop(0) or ( return (
workcenter.child_ids and workcenter.id parent_ids
or workcenter.parent_id.id) and parent_ids.pop(0)
or (workcenter.child_ids and workcenter.id or workcenter.parent_id.id)
)
for workcenter in self: for workcenter in self:
parent_ids = workcenter._get_parent_ids() parent_ids = workcenter._get_parent_ids()
workcenter.parent_level_1_id = get_next_level( workcenter.parent_level_1_id = get_next_level(parent_ids, workcenter)
parent_ids, workcenter) workcenter.parent_level_2_id = get_next_level(parent_ids, workcenter)
workcenter.parent_level_2_id = get_next_level( workcenter.parent_level_3_id = get_next_level(parent_ids, workcenter)
parent_ids, workcenter)
workcenter.parent_level_3_id = get_next_level(
parent_ids, workcenter)

View File

@@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# © 2016 Akretion (http://www.akretion.com) # © 2016 Akretion (http://www.akretion.com)
# David BEAL <david.beal@akretion.com> # David BEAL <david.beal@akretion.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

View File

@@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# © 2016 Akretion (http://www.akretion.com) # © 2016 Akretion (http://www.akretion.com)
# David BEAL <david.beal@akretion.com> # David BEAL <david.beal@akretion.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
@@ -8,71 +7,68 @@ from openerp.tests.common import TransactionCase
class ComputeParentLevel(TransactionCase): class ComputeParentLevel(TransactionCase):
def test_compute_parent_level0(self): def test_compute_parent_level0(self):
workcenter = self.env['mrp.workcenter'].create({ workcenter = self.env["mrp.workcenter"].create(
'name': 'New Assembly', {
'calendar_id': self.env.ref('resource.timesheet_group1').id, "name": "New Assembly",
'capacity_per_cycle': 5, "calendar_id": self.env.ref("resource.timesheet_group1").id,
'time_cycle': 1, "capacity_per_cycle": 5,
'time_start': 0.1, "time_cycle": 1,
'time_stop': 0.1, "time_start": 0.1,
'time_efficiency': 0.87, "time_stop": 0.1,
'product_id': self.env.ref('product.product_assembly').id, "time_efficiency": 0.87,
'costs_hour': 0, "product_id": self.env.ref("product.product_assembly").id,
'costs_hour_account_id': self.env.ref( "costs_hour": 0,
'mrp.account_assembly_hours').id, "costs_hour_account_id": self.env.ref("mrp.account_assembly_hours").id,
'costs_cycle': 0.05, "costs_cycle": 0.05,
'costs_cycle_account_id': self.env.ref( "costs_cycle_account_id": self.env.ref("mrp.account_assembly_cycle").id,
'mrp.account_assembly_cycle').id, }
}) )
workcenter_child = self.env.ref( workcenter_child = self.env.ref("mrp_workcenter_hierarchical.mrp_workcenter_A")
'mrp_workcenter_hierarchical.mrp_workcenter_A') workcenter_child.write({"parent_id": workcenter.id})
workcenter_child.write({'parent_id': workcenter.id})
self.assertEqual(workcenter.parent_level_1_id, workcenter) self.assertEqual(workcenter.parent_level_1_id, workcenter)
def test_compute_parent_level1(self): def test_compute_parent_level1(self):
workcenter_child = self.env.ref( workcenter_child = self.env.ref("mrp_workcenter_hierarchical.mrp_workcenter_E")
'mrp_workcenter_hierarchical.mrp_workcenter_E')
workcenter_parent = self.env.ref( workcenter_parent = self.env.ref(
'mrp_workcenter_hierarchical.mrp_workcenter_top') "mrp_workcenter_hierarchical.mrp_workcenter_top"
workcenter_child.write({'parent_id': workcenter_parent.id}) )
workcenter_child.write({"parent_id": workcenter_parent.id})
self.assertEqual(workcenter_child.parent_level_1_id, workcenter_parent) self.assertEqual(workcenter_child.parent_level_1_id, workcenter_parent)
def test_compute_parent_level2(self): def test_compute_parent_level2(self):
workcenter_child = self.env.ref( workcenter_child = self.env.ref("mrp_workcenter_hierarchical.mrp_workcenter_A")
'mrp_workcenter_hierarchical.mrp_workcenter_A')
workcenter_parent1 = self.env.ref( workcenter_parent1 = self.env.ref(
'mrp_workcenter_hierarchical.mrp_workcenter_top') "mrp_workcenter_hierarchical.mrp_workcenter_top"
workcenter_parent2 = self.env.ref('mrp.mrp_workcenter_0') )
workcenter_child.write({'parent_id': workcenter_parent2.id}) workcenter_parent2 = self.env.ref("mrp.mrp_workcenter_0")
self.assertEqual( workcenter_child.write({"parent_id": workcenter_parent2.id})
workcenter_child.parent_level_2_id, workcenter_parent2) self.assertEqual(workcenter_child.parent_level_2_id, workcenter_parent2)
self.assertEqual( self.assertEqual(workcenter_child.parent_level_1_id, workcenter_parent1)
workcenter_child.parent_level_1_id, workcenter_parent1)
def test_compute_parent_level3(self): def test_compute_parent_level3(self):
workcenter_child = self.env.ref( workcenter_child = self.env.ref("mrp_workcenter_hierarchical.mrp_workcenter_B")
'mrp_workcenter_hierarchical.mrp_workcenter_B')
workcenter_parent1 = self.env.ref( workcenter_parent1 = self.env.ref(
'mrp_workcenter_hierarchical.mrp_workcenter_top') "mrp_workcenter_hierarchical.mrp_workcenter_top"
)
workcenter_parent2 = self.env.ref( workcenter_parent2 = self.env.ref(
'mrp_workcenter_hierarchical.mrp_workcenter_2') "mrp_workcenter_hierarchical.mrp_workcenter_2"
)
workcenter_parent3 = self.env.ref( workcenter_parent3 = self.env.ref(
'mrp_workcenter_hierarchical.mrp_workcenter_A') "mrp_workcenter_hierarchical.mrp_workcenter_A"
workcenter_child.write({'parent_id': workcenter_parent3.id}) )
self.assertEqual( workcenter_child.write({"parent_id": workcenter_parent3.id})
workcenter_child.parent_level_3_id, workcenter_parent3) self.assertEqual(workcenter_child.parent_level_3_id, workcenter_parent3)
self.assertEqual( self.assertEqual(workcenter_child.parent_level_2_id, workcenter_parent2)
workcenter_child.parent_level_2_id, workcenter_parent2) self.assertEqual(workcenter_child.parent_level_1_id, workcenter_parent1)
self.assertEqual(
workcenter_child.parent_level_1_id, workcenter_parent1)
def test_compute_parent_level3_bis(self): def test_compute_parent_level3_bis(self):
workcenter_child = self.env.ref( workcenter_child = self.env.ref("mrp_workcenter_hierarchical.mrp_workcenter_C")
'mrp_workcenter_hierarchical.mrp_workcenter_C')
workcenter_parent3 = self.env.ref( workcenter_parent3 = self.env.ref(
'mrp_workcenter_hierarchical.mrp_workcenter_A') "mrp_workcenter_hierarchical.mrp_workcenter_A"
)
workcenter_parent4 = self.env.ref( workcenter_parent4 = self.env.ref(
'mrp_workcenter_hierarchical.mrp_workcenter_B') "mrp_workcenter_hierarchical.mrp_workcenter_B"
workcenter_parent4.write({'parent_id': workcenter_parent3.id}) )
workcenter_child.write({'parent_id': workcenter_parent4.id}) workcenter_parent4.write({"parent_id": workcenter_parent3.id})
workcenter_child.write({"parent_id": workcenter_parent4.id})
self.assertEqual(workcenter_child.parent_id, workcenter_parent4) self.assertEqual(workcenter_child.parent_id, workcenter_parent4)

View File

@@ -1,37 +1,44 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8" ?>
<openerp> <openerp>
<data> <data>
<!--Workcenters-->
<!--Workcenters--> <record id="view_mrp_workcenter_search" model="ir.ui.view">
<record id="view_mrp_workcenter_search" model="ir.ui.view">
<field name="model">mrp.workcenter</field> <field name="model">mrp.workcenter</field>
<field name="inherit_id" ref="mrp.view_mrp_workcenter_search"/> <field name="inherit_id" ref="mrp.view_mrp_workcenter_search" />
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//group/filter" position="before"> <xpath expr="//group/filter" position="before">
<filter string="Parent Level 1" domain="[]" name="group_by_level_1" <filter
context="{'group_by':'parent_level_1_id'}"/> string="Parent Level 1"
<filter string="Parent Level 2" domain="[]" name="group_by_level_2" domain="[]"
context="{'group_by':'parent_level_2_id'}"/> name="group_by_level_1"
<filter string="Parent Level 3" domain="[]" name="group_by_level_3" context="{'group_by':'parent_level_1_id'}"
context="{'group_by':'parent_level_3_id'}"/> />
<filter
string="Parent Level 2"
domain="[]"
name="group_by_level_2"
context="{'group_by':'parent_level_2_id'}"
/>
<filter
string="Parent Level 3"
domain="[]"
name="group_by_level_3"
context="{'group_by':'parent_level_3_id'}"
/>
</xpath> </xpath>
</field> </field>
</record> </record>
<record id="mrp_workcenter_view" model="ir.ui.view">
<record id="mrp_workcenter_view" model="ir.ui.view">
<field name="model">mrp.workcenter</field> <field name="model">mrp.workcenter</field>
<field name="inherit_id" ref="mrp.mrp_workcenter_view"/> <field name="inherit_id" ref="mrp.mrp_workcenter_view" />
<field name="arch" type="xml"> <field name="arch" type="xml">
<field name="active" position="after"> <field name="active" position="after">
<field name="parent_id"/> <field name="parent_id" />
</field> </field>
</field> </field>
</record> </record>
<record id="mrp.mrp_workcenter_action" model="ir.actions.act_window">
<record id="mrp.mrp_workcenter_action" model="ir.actions.act_window">
<field name="context">{'search_default_group_by_level_1': 1}</field> <field name="context">{'search_default_group_by_level_1': 1}</field>
</record> </record>
</data> </data>
</openerp> </openerp>

View File

@@ -0,0 +1 @@
../../../../mrp_workcenter_hierarchical

View File

@@ -0,0 +1,6 @@
import setuptools
setuptools.setup(
setup_requires=['setuptools-odoo'],
odoo_addon=True,
)