diff --git a/__manifest__.py b/__manifest__.py
index bbc2493..7400045 100644
--- a/__manifest__.py
+++ b/__manifest__.py
@@ -44,6 +44,7 @@
'views/res_partner.xml',
'views/menus.xml',
'views/task_views.xml',
+ 'views/sale_order_views.xml',
],
'assets': {
'web.assets_tests': [
diff --git a/models/equipment.py b/models/equipment.py
index 6ea99d6..bdc2e0b 100644
--- a/models/equipment.py
+++ b/models/equipment.py
@@ -41,13 +41,16 @@ class Equipment(models.Model):
partner_id = fields.Many2one('res.partner',
string="Owner",
compute="_compute_partner",
- search="_search_partner", )
+ search="_search_partner",)
+
description = fields.Text(string="Description",
tracking=True)
partner_location_id = fields.Many2one('res.partner',
string="Physical Address",
- tracking=True, )
+ tracking=True,
+ required=True,
+ ondelete='cascade')
location_notes = fields.Text(string="Physical Location Notes",
tracking=True)
diff --git a/models/sale_order.py b/models/sale_order.py
index 10b166b..8a1f792 100644
--- a/models/sale_order.py
+++ b/models/sale_order.py
@@ -18,6 +18,12 @@ class SaleOrder(models.Model):
string='Work Order Recipients',
store=True)
+ equipment_ids = fields.Many2many(comodel_name='bemade_fsm.equipment',
+ compute='_compute_equipment',
+ inverse='_inverse_equipment',
+ string='Equipment to Service',
+ store=True)
+
@api.depends('partner_id')
def _compute_default_contacts(self):
for rec in self:
@@ -27,6 +33,14 @@ class SaleOrder(models.Model):
def _inverse_default_contacts(self):
pass
+ @api.depends('partner_id')
+ def _compute_equipment(self):
+ for rec in self:
+ rec.equipment_ids = self.partner_id.equipment_ids if len(self.partner_id.equipment_ids) <= 1 else False
+
+ def _inverse_equipment(self):
+ pass
+
class SaleOrderLine(models.Model):
_inherit = 'sale.order.line'
diff --git a/static/tests/tours/task_equipment_tour.js b/static/tests/tours/task_equipment_tour.js
index 4599fb5..c196d7b 100644
--- a/static/tests/tours/task_equipment_tour.js
+++ b/static/tests/tours/task_equipment_tour.js
@@ -1,10 +1,11 @@
/** @odoo-module **/
import tour from 'web_tour.tour';
+
const TEST_COMPANY = "Test Partner Company";
const TEST_EQPT1 = "Test Equipment 1";
const TEST_EQPT2 = "Test Equipment 2";
-tour.register('task_equipment_tour', {
+tour.register('equipment_base_tour', {
test: true,
url: '/web',
}, /* Create a new "Test Equipment" and link it to "Test Partner Company" */
@@ -66,10 +67,40 @@ tour.register('task_equipment_tour', {
content: 'Make sure we have a first test equipment',
/*trigger: `div[name="equipment_ids"]:has(td:contains(${TEST_EQPT1}))`,*/
trigger: `td:contains(${TEST_EQPT1})`,
- run: function() {},
+ run: function () {
+ },
}, {
content: 'Make sure we have a second test equipment',
trigger: `div[name="equipment_ids"]:has(td:contains(${TEST_EQPT2}))`,
- run: function() {},
+ run: function () {
+ },
}
- ])
\ No newline at end of file
+ ]);
+
+tour.register('equipment_sale_order_tour', {
+ test: true,
+ url: '/web',
+}, [tour.stepUtils.showAppsMenuItem(), {
+ content: 'Navigate to the Sales menu',
+ trigger: '.o_app[data-menu-xmlid="sale.sale_menu_root"]',
+}, {
+ content: 'Create an order',
+ trigger: 'button.o_list_button_add',
+}, {
+ content: 'Select the test partner',
+ trigger: 'div[name="partner_id"] input',
+ run: `text ${TEST_COMPANY}`,
+}, {
+ content: 'Click the partner in the dropdown',
+ trigger: `li a.dropdown-item:contains(${TEST_COMPANY})`,
+}, {
+ content: 'Save',
+ trigger: 'button.o_form_button_save',
+}, {
+ content: 'Navigate to the Field Service tab.',
+ trigger: 'a.nav-link[role="tab"]:contains(Field Service)'
+}, {
+ content: 'Check that default equipment shows up.',
+ trigger: `tr:has(label.o_form_label:contains(Site Equipment)) td.o_field_cell:contains(${TEST_EQPT1})`
+},
+]);
\ No newline at end of file
diff --git a/tests/test_equipment.py b/tests/test_equipment.py
index 197938c..2f05a42 100644
--- a/tests/test_equipment.py
+++ b/tests/test_equipment.py
@@ -1,5 +1,7 @@
from odoo.tests.common import HttpCase, tagged
from .test_bemade_fsm_common import FSMManagerUserTransactionCase
+from odoo import Command
+from odoo.exceptions import MissingError
@tagged("-at_install", "post_install")
@@ -32,8 +34,24 @@ class TestEquipmentCommon(FSMManagerUserTransactionCase):
@tagged('-at_install', 'post_install')
-class TestEquipmentTour(HttpCase, TestEquipmentCommon):
+class TestEquipmentBase(TestEquipmentCommon):
- def test_equipment_tour(self):
- self.start_tour('/web', 'task_equipment_tour',
+ def test_crd(self):
+ # Just make sure the basic ORM stuff is OK
+ self.assertTrue(self.equipment in self.partner_company.equipment_ids)
+ self.assertTrue(len(self.partner_company.equipment_ids) == 1)
+ self.partner_company.write({'equipment_ids': [Command.set([])]})
+ # Delete should cascade
+ with self.assertRaises(MissingError):
+ self.equipment.name
+
+
+@tagged('-at_install', 'post_install')
+class TestEquipmentTours(HttpCase, TestEquipmentCommon):
+
+ def test_equipment_base_tour(self):
+ self.start_tour('/web', 'equipment_base_tour',
login=self.user.login, )
+
+ def test_equipment_sale_order_tour(self):
+ self.start_tour('/web', 'equipment_sale_order_tour', login=self.user.login)
\ No newline at end of file
diff --git a/views/res_partner.xml b/views/res_partner.xml
index d451cb9..6e14a42 100644
--- a/views/res_partner.xml
+++ b/views/res_partner.xml
@@ -25,10 +25,18 @@
+
+
+
+
+
+
+
+
-
+