Skip to content

Commit 2186dc5

Browse files
committed
[IMP] fieldservice_sale: black, isort, prettier
1 parent 96da739 commit 2186dc5

21 files changed

+2061
-1824
lines changed

fieldservice_recurring/static/description/index.html

+781-465
Large diffs are not rendered by default.

fieldservice_sale/__manifest__.py

+19-27
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,24 @@
11
# Copyright (C) 2018 Open Source Integrators
22
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
33
{
4-
'name': 'Field Service - Sales',
5-
'version': '12.0.2.5.1',
6-
'summary': 'Sell field services.',
7-
'category': 'Field Service',
8-
'author': 'Open Source Integrators, Odoo Community Association (OCA)',
9-
'website': 'https://github.com/OCA/field-service',
10-
'depends': [
11-
'fieldservice',
12-
'sale_management',
13-
'fieldservice_account',
4+
"name": "Field Service - Sales",
5+
"version": "12.0.2.5.1",
6+
"summary": "Sell field services.",
7+
"category": "Field Service",
8+
"author": "Open Source Integrators, Odoo Community Association (OCA)",
9+
"website": "https://github.com/OCA/field-service",
10+
"depends": ["fieldservice", "sale_management", "fieldservice_account"],
11+
"data": [
12+
"security/ir.model.access.csv",
13+
"views/fsm_branch.xml",
14+
"views/fsm_location.xml",
15+
"views/fsm_order.xml",
16+
"views/product_template.xml",
17+
"views/sale_order.xml",
18+
"views/res_config_settings.xml",
1419
],
15-
'data': [
16-
'security/ir.model.access.csv',
17-
'views/fsm_branch.xml',
18-
'views/fsm_location.xml',
19-
'views/fsm_order.xml',
20-
'views/product_template.xml',
21-
'views/sale_order.xml',
22-
'views/res_config_settings.xml',
23-
],
24-
'license': 'AGPL-3',
25-
'development_status': 'Beta',
26-
'maintainers': [
27-
'wolfhall',
28-
'max3903',
29-
'brian10048',
30-
],
31-
'installable': True,
20+
"license": "AGPL-3",
21+
"development_status": "Beta",
22+
"maintainers": ["wolfhall", "max3903", "brian10048"],
23+
"installable": True,
3224
}

fieldservice_sale/migrations/12.0.2.0.0/pre-migration.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,7 @@ def migrate(env, version):
66
if not version:
77
return
88

9-
env.execute("UPDATE product_template SET field_service_tracking = 'sale' "
10-
"WHERE field_service_tracking = 'order';")
9+
env.execute(
10+
"UPDATE product_template SET field_service_tracking = 'sale' "
11+
"WHERE field_service_tracking = 'order';"
12+
)

fieldservice_sale/models/fsm_branch.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44

55

66
class FSMBranch(models.Model):
7-
_inherit = 'fsm.branch'
7+
_inherit = "fsm.branch"
88

99
pricelist_id = fields.Many2one(
10-
'product.pricelist', string='Default Pricelist',
11-
help="Default pricelist for new customers of this branch.")
10+
"product.pricelist",
11+
string="Default Pricelist",
12+
help="Default pricelist for new customers of this branch.",
13+
)
+2-4
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
# Copyright (C) 2018 Open Source Integrators
22
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
3-
43
from odoo import fields, models
54

65

76
class FSMLocation(models.Model):
8-
_inherit = 'fsm.location'
7+
_inherit = "fsm.location"
98

10-
sales_territory_id = fields.Many2one('fsm.territory',
11-
string='Sales Territory')
9+
sales_territory_id = fields.Many2one("fsm.territory", string="Sales Territory")

fieldservice_sale/models/fsm_order.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
# Copyright (C) 2019 Brian McMaster
22
# Copyright (C) 2019 Open Source Integrators
33
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
4-
from odoo import fields, models, _
4+
from odoo import _, fields, models
55

66

77
class FSMOrder(models.Model):
8-
_inherit = 'fsm.order'
8+
_inherit = "fsm.order"
99

10-
sale_id = fields.Many2one('sale.order')
11-
sale_line_id = fields.Many2one('sale.order.line')
10+
sale_id = fields.Many2one("sale.order")
11+
sale_line_id = fields.Many2one("sale.order.line")
1212

1313
def action_view_sales(self):
1414
self.ensure_one()
+18-15
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,34 @@
11
# Copyright (C) 2019 Brian McMaster
22
# Copyright (C) 2019 Open Source Integrators
33
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
4-
54
from odoo import api, fields, models
65

76

87
class ProductTemplate(models.Model):
9-
_inherit = 'product.template'
8+
_inherit = "product.template"
109

11-
service_type = fields.Selection(selection_add=[
12-
('field', 'Field Service Orders'),
13-
])
14-
field_service_tracking = fields.Selection([
15-
('no', 'Don\'t create FSM order'),
16-
('sale', 'Create one FSM order per sale order'),
17-
('line', 'Create one FSM order per sale order line'),
18-
], string='Field Service Tracking', default='no',
10+
service_type = fields.Selection(selection_add=[("field", "Field Service Orders")])
11+
field_service_tracking = fields.Selection(
12+
[
13+
("no", "Don't create FSM order"),
14+
("sale", "Create one FSM order per sale order"),
15+
("line", "Create one FSM order per sale order line"),
16+
],
17+
string="Field Service Tracking",
18+
default="no",
1919
help="""Determines what happens upon sale order confirmation:
2020
- None: nothing additional, default behavior.
2121
- Per Sale Order: One FSM Order will be created for the sale.
2222
- Per Sale Order Line: One FSM Order for each sale order line
23-
will be created.""")
23+
will be created.""",
24+
)
2425
fsm_order_template_id = fields.Many2one(
25-
'fsm.template', 'Field Service Order Template',
26-
help="Select the field service order template to be created")
26+
"fsm.template",
27+
"Field Service Order Template",
28+
help="Select the field service order template to be created",
29+
)
2730

28-
@api.onchange('field_service_tracking')
31+
@api.onchange("field_service_tracking")
2932
def _onchange_field_service_tracking(self):
30-
if self.field_service_tracking == 'no':
33+
if self.field_service_tracking == "no":
3134
self.fsm_order_template_id = False

fieldservice_sale/models/sale_order.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Copyright (C) 2019 Brian McMaster
22
# Copyright (C) 2019 Open Source Integrators
33
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
4-
from odoo import api, fields, models, _
4+
from odoo import _, api, fields, models
55
from odoo.exceptions import ValidationError
66

77

+51-44
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,46 @@
11
# Copyright (C) 2019 Brian McMaster
22
# Copyright (C) 2019 Open Source Integrators
33
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
4-
from odoo import api, fields, models, _
4+
from odoo import _, api, fields, models
55

66

77
class SaleOrderLine(models.Model):
88
_inherit = "sale.order.line"
99

1010
qty_delivered_method = fields.Selection(
11-
selection_add=[('field_service', 'Field Service Order')])
11+
selection_add=[("field_service", "Field Service Order")]
12+
)
1213
fsm_order_id = fields.Many2one(
13-
'fsm.order', 'Order', index=True,
14-
help="Field Service Order generated by the sales order item")
14+
"fsm.order",
15+
"Order",
16+
index=True,
17+
help="Field Service Order generated by the sales order item",
18+
)
1519

16-
@api.depends('product_id.type')
20+
@api.depends("product_id.type")
1721
def _compute_product_updatable(self):
1822
for line in self:
19-
if line.product_id.type == 'service' and line.state == 'sale':
23+
if line.product_id.type == "service" and line.state == "sale":
2024
line.product_updatable = False
2125
else:
2226
super(SaleOrderLine, line)._compute_product_updatable()
2327

2428
@api.multi
25-
@api.depends('product_id')
29+
@api.depends("product_id")
2630
def _compute_qty_delivered_method(self):
2731
super(SaleOrderLine, self)._compute_qty_delivered_method()
2832
for line in self:
29-
if not line.is_expense and \
30-
line.product_id.field_service_tracking == 'line':
31-
line.qty_delivered_method = 'field_service'
33+
if not line.is_expense and line.product_id.field_service_tracking == "line":
34+
line.qty_delivered_method = "field_service"
3235

3336
@api.multi
34-
@api.depends('fsm_order_id.stage_id')
37+
@api.depends("fsm_order_id.stage_id")
3538
def _compute_qty_delivered(self):
3639
super(SaleOrderLine, self)._compute_qty_delivered()
3740
lines_by_fsm = self.filtered(
38-
lambda sol:
39-
sol.qty_delivered_method == 'field_service'
41+
lambda sol: sol.qty_delivered_method == "field_service"
4042
)
41-
complete = self.env.ref('fieldservice.fsm_stage_completed')
43+
complete = self.env.ref("fieldservice.fsm_stage_completed")
4244
for line in lines_by_fsm:
4345
qty = 0
4446
if line.fsm_order_id.stage_id == complete:
@@ -48,27 +50,27 @@ def _compute_qty_delivered(self):
4850
@api.model
4951
def create(self, values):
5052
line = super(SaleOrderLine, self).create(values)
51-
if line.state == 'sale':
53+
if line.state == "sale":
5254
line._field_service_generation()
5355
return line
5456

5557
def _field_create_fsm_order_prepare_values(self):
5658
self.ensure_one()
5759
categories = self.product_id.fsm_order_template_id.category_ids
5860
return {
59-
'customer_id': self.order_id.partner_id.id,
60-
'location_id': self.order_id.fsm_location_id.id,
61-
'location_directions': self.order_id.fsm_location_id.direction,
62-
'request_early': self.order_id.expected_date,
63-
'scheduled_date_start': self.order_id.expected_date,
64-
'description': self.name,
65-
'template_id': self.product_id.fsm_order_template_id.id,
66-
'todo': self.product_id.fsm_order_template_id.instructions,
67-
'category_ids': [(6, 0, categories.ids)],
68-
'scheduled_duration': self.product_id.fsm_order_template_id.hours,
69-
'sale_id': self.order_id.id,
70-
'sale_line_id': self.id,
71-
'company_id': self.company_id.id,
61+
"customer_id": self.order_id.partner_id.id,
62+
"location_id": self.order_id.fsm_location_id.id,
63+
"location_directions": self.order_id.fsm_location_id.direction,
64+
"request_early": self.order_id.expected_date,
65+
"scheduled_date_start": self.order_id.expected_date,
66+
"description": self.name,
67+
"template_id": self.product_id.fsm_order_template_id.id,
68+
"todo": self.product_id.fsm_order_template_id.instructions,
69+
"category_ids": [(6, 0, categories.ids)],
70+
"scheduled_duration": self.product_id.fsm_order_template_id.hours,
71+
"sale_id": self.order_id.id,
72+
"sale_line_id": self.id,
73+
"company_id": self.company_id.id,
7274
}
7375

7476
@api.multi
@@ -81,20 +83,27 @@ def _field_create_fsm_order(self):
8183
for so_line in self:
8284
# create fsm_order
8385
values = so_line._field_create_fsm_order_prepare_values()
84-
fsm_order = self.env['fsm.order'].sudo().create(values)
86+
fsm_order = self.env["fsm.order"].sudo().create(values)
8587
so_line.fsm_order_id = fsm_order.id
8688
# post message on SO
87-
msg_body = _(
88-
"""Field Service Order Created (%s): <a href=
89+
msg_body = (
90+
_(
91+
"""Field Service Order Created (%s): <a href=
8992
# data-oe-model=fsm.order data-oe-id=%d>%s</a>
90-
""") % (so_line.product_id.name, fsm_order.id, fsm_order.name)
93+
"""
94+
)
95+
% (so_line.product_id.name, fsm_order.id, fsm_order.name)
96+
)
9197
so_line.order_id.message_post(body=msg_body)
9298
# post message on fsm_order
93-
fsm_order_msg = _(
94-
"""This order has been created from: <a href=
99+
fsm_order_msg = (
100+
_(
101+
"""This order has been created from: <a href=
95102
# data-oe-model=sale.order data-oe-id=%d>%s</a> (%s)
96-
""") % (so_line.order_id.id, so_line.order_id.name,
97-
so_line.product_id.name)
103+
"""
104+
)
105+
% (so_line.order_id.id, so_line.order_id.name, so_line.product_id.name)
106+
)
98107
fsm_order.message_post(body=fsm_order_msg)
99108
result[so_line.id] = fsm_order
100109
return result
@@ -108,10 +117,10 @@ def _field_find_fsm_order(self):
108117
"""
109118
for rec in self:
110119
# one search for all so lines
111-
fsm_orders = self.env['fsm.order'].search([
112-
('sale_line_id', 'in', rec.ids)])
120+
fsm_orders = self.env["fsm.order"].search([("sale_line_id", "in", rec.ids)])
113121
fsm_order_sol_mapping = {
114-
fsm_order.sale_line_id.id: fsm_order for fsm_order in fsm_orders}
122+
fsm_order.sale_line_id.id: fsm_order for fsm_order in fsm_orders
123+
}
115124
res = {}
116125
for so_line in rec:
117126
# If the SO was confirmed, cancelled, set to draft then confirmed,
@@ -129,17 +138,15 @@ def _field_service_generation(self):
129138
exists, it simply links the existing one to the line.
130139
"""
131140
for rec in self:
132-
if rec.product_id.field_service_tracking == 'sale':
141+
if rec.product_id.field_service_tracking == "sale":
133142
sale = rec.order_id
134143
so_fo_mapping = sale._field_find_fsm_order()
135144
rec.fsm_order_id = so_fo_mapping[rec.order_id.id].id
136-
if rec.product_id.field_service_tracking == 'line':
145+
if rec.product_id.field_service_tracking == "line":
137146
rec._field_find_fsm_order()
138147

139148
@api.multi
140149
def _prepare_invoice_line(self, qty):
141150
res = super()._prepare_invoice_line(qty)
142-
res.update({
143-
'fsm_order_id': self.fsm_order_id.id,
144-
})
151+
res.update({"fsm_order_id": self.fsm_order_id.id})
145152
return res
Binary file not shown.

0 commit comments

Comments
 (0)