Skip to content

Commit

Permalink
Merge 4872f60 into 3a6aa2f
Browse files Browse the repository at this point in the history
  • Loading branch information
nikul-serpentcs committed Dec 24, 2019
2 parents 3a6aa2f + 4872f60 commit c1f279d
Show file tree
Hide file tree
Showing 13 changed files with 168 additions and 0 deletions.
2 changes: 2 additions & 0 deletions fieldservice_operating_unit/__init__.py
@@ -0,0 +1,2 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from . import models
28 changes: 28 additions & 0 deletions fieldservice_operating_unit/__manifest__.py
@@ -0,0 +1,28 @@
# Copyright (C) 2019 Open Source Integrators
# Copyright (C) 2019 Serpent Consulting Services
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{
"name": 'Field Service with Operating Units',
"summary": """
This module adds operating unit information to Field Service orders.""",
"version": "12.0.1.0.0",
"author": "Open Source Integrators, "
"Serpent Consulting Services Pvt. Ltd.,"
"Odoo Community Association (OCA)",
"website": "https://github.com/OCA/operating-unit",
"category": "Field Service",
"depends": [
'operating_unit',
'fieldservice'
],
"license": "AGPL-3",
"data": [
'security/fieldservice_security.xml',
'views/fsm_order.xml',
],
'installable': True,
'development_status': 'Beta',
'maintainers': [
'max3903',
],
}
2 changes: 2 additions & 0 deletions fieldservice_operating_unit/models/__init__.py
@@ -0,0 +1,2 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from . import fsm_order
15 changes: 15 additions & 0 deletions fieldservice_operating_unit/models/fsm_order.py
@@ -0,0 +1,15 @@
# Copyright (C) 2019 Open Source Integrators
# Copyright (C) 2019 Serpent Consulting Services
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import fields, models


class FSMOrder(models.Model):
_inherit = 'fsm.order'

operating_unit_id = fields.Many2one(
comodel_name='operating.unit',
string='Operating Unit',
default=lambda self: self.env['res.users'].operating_unit_default_get(
self._uid)
)
2 changes: 2 additions & 0 deletions fieldservice_operating_unit/readme/CONTRIBUTORS.rst
@@ -0,0 +1,2 @@
* Nikul Chaudhary <nikul.chaudhary.serpentcs@gmail.com>
* Maxime Chambreuil <mchambreuil@opensourceintegrators.com>
2 changes: 2 additions & 0 deletions fieldservice_operating_unit/readme/CREDITS.rst
@@ -0,0 +1,2 @@
* Open Source Integrators
* Serpent Consulting Services Pvt. Ltd.
1 change: 1 addition & 0 deletions fieldservice_operating_unit/readme/DESCRIPTION.rst
@@ -0,0 +1 @@
This module adds operating unit information to Field Service orders.
3 changes: 3 additions & 0 deletions fieldservice_operating_unit/readme/USAGE.rst
@@ -0,0 +1,3 @@
* Go to Field Service
* You only see the FSM orders of your operating units
* Create an order. It is assigned to your default operating unit.
19 changes: 19 additions & 0 deletions fieldservice_operating_unit/security/fieldservice_security.xml
@@ -0,0 +1,19 @@
<odoo>

<!-- Copyright (C) 2019 Open Source Integrators
Copyright (C) 2019 Serpent Consulting Services
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->

<record id="ir_rule_fieldservice_operating_unit" model="ir.rule">
<field name="model_id" ref="fieldservice.model_fsm_order"/>
<field name="domain_force">['|', ('operating_unit_id','=',False), ('operating_unit_id','in',user.operating_unit_ids.ids)]
</field>
<field name="name">Field Service Operating Unit</field>
<field name="global" eval="True"/>
<field eval="0" name="perm_unlink"/>
<field eval="0" name="perm_write"/>
<field eval="1" name="perm_read"/>
<field eval="0" name="perm_create"/>
</record>

</odoo>
2 changes: 2 additions & 0 deletions fieldservice_operating_unit/tests/__init__.py
@@ -0,0 +1,2 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from . import test_fieldservice_operating_unit
@@ -0,0 +1,73 @@
# Copyright (C) 2019 Open Source Integrators
# Copyright (C) 2019 Serpent Consulting Services
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo.tests import common
from datetime import timedelta
from odoo import fields


class TestFSMOrder(common.TransactionCase):

def setUp(self):
super(TestFSMOrder, self).setUp()
self.fsm_order_obj = self.env['fsm.order']
self.res_users_model = self.env['res.users']
self.test_location = self.env.ref('fieldservice.test_location')

# Groups
self.grp_fieldservice_mngr =\
self.env.ref('fieldservice.group_fsm_manager')
self.grp_user = self.env.ref('base.group_user')
# Company
self.company = self.env.ref('base.main_company')
# Main Operating Unit
self.main_OU = self.env.ref('operating_unit.main_operating_unit')
# B2C Operating Unit
self.b2c_OU = self.env.ref('operating_unit.b2c_operating_unit')
# Create User 1 with Main OU
self.user1 = self._create_user('user_1', [self.grp_fieldservice_mngr,
self.grp_user],
self.company, [self.main_OU])
# Create User 2 with B2C OU
self.user2 = self._create_user('user_2', [self.grp_fieldservice_mngr,
self.grp_user],
self.company, [self.b2c_OU])

self.fsm_order1 = self._create_fsm_order(self.user1, self.main_OU)
self.fsm_order2 = self._create_fsm_order(self.user2, self.b2c_OU)

def _create_user(self, login, groups, company, operating_units):
""" Create a user. """
group_ids = [group.id for group in groups]
user = self.res_users_model.create({
'name': login,
'login': login,
'password': 'demo',
'email': 'test@yourcompany.com',
'company_id': company.id,
'company_ids': [(4, company.id)],
'operating_unit_ids': [(4, ou.id) for ou in operating_units],
'groups_id': [(6, 0, group_ids)]
})
return user

def _create_fsm_order(self, uid, operating_unit):
fsm_order = self.fsm_order_obj.sudo(uid).create({
'location_id': self.test_location.id,
'operating_unit_id': operating_unit.id,
'date_start': fields.Datetime.today(),
'date_end': fields.Datetime.today() + timedelta(hours=100),
'request_early': fields.Datetime.today()
})
return fsm_order

def test_fsm_order(self):
# User 2 is only assigned to B2C Operating Unit, and cannot
# access FSM Orders for Main Operating Unit.
fsm_orders = self.fsm_order_obj.sudo(self.user2.id).search(
[('id', '=', self.fsm_order2.id),
('operating_unit_id', '=', self.main_OU.id)])
self.assertEqual(fsm_orders.ids, [], 'User 2 should not have access to '
'%s' % self.main_OU.name)

self.assertEqual(self.fsm_order1.operating_unit_id.id, self.main_OU.id)
18 changes: 18 additions & 0 deletions fieldservice_operating_unit/views/fsm_order.xml
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Copyright (C) 2019 Open Source Integrators
Copyright (C) 2019 Serpent Consulting Services
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->

<record id="view_fsm_order_form_inherit" model="ir.ui.view">
<field name="name">fsm.order.form</field>
<field name="model">fsm.order</field>
<field name="inherit_id" ref="fieldservice.fsm_order_form"/>
<field name="arch" type="xml">
<field name="type" position="after">
<field name="operating_unit_id"/>
</field>
</field>
</record>

</odoo>
1 change: 1 addition & 0 deletions oca_dependencies.txt
@@ -1,3 +1,4 @@
# list the OCA project dependencies, one per line
# add a github url if you need a forked version
purchase-workflow
field-service

0 comments on commit c1f279d

Please sign in to comment.