1
1
# Copyright (C) 2019 Brian McMaster
2
2
# Copyright (C) 2019 Open Source Integrators
3
3
# 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
5
5
6
6
7
7
class SaleOrderLine (models .Model ):
8
8
_inherit = "sale.order.line"
9
9
10
10
qty_delivered_method = fields .Selection (
11
- selection_add = [('field_service' , 'Field Service Order' )])
11
+ selection_add = [("field_service" , "Field Service Order" )]
12
+ )
12
13
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
+ )
15
19
16
- @api .depends (' product_id.type' )
20
+ @api .depends (" product_id.type" )
17
21
def _compute_product_updatable (self ):
18
22
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" :
20
24
line .product_updatable = False
21
25
else :
22
26
super (SaleOrderLine , line )._compute_product_updatable ()
23
27
24
28
@api .multi
25
- @api .depends (' product_id' )
29
+ @api .depends (" product_id" )
26
30
def _compute_qty_delivered_method (self ):
27
31
super (SaleOrderLine , self )._compute_qty_delivered_method ()
28
32
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"
32
35
33
36
@api .multi
34
- @api .depends (' fsm_order_id.stage_id' )
37
+ @api .depends (" fsm_order_id.stage_id" )
35
38
def _compute_qty_delivered (self ):
36
39
super (SaleOrderLine , self )._compute_qty_delivered ()
37
40
lines_by_fsm = self .filtered (
38
- lambda sol :
39
- sol .qty_delivered_method == 'field_service'
41
+ lambda sol : sol .qty_delivered_method == "field_service"
40
42
)
41
- complete = self .env .ref (' fieldservice.fsm_stage_completed' )
43
+ complete = self .env .ref (" fieldservice.fsm_stage_completed" )
42
44
for line in lines_by_fsm :
43
45
qty = 0
44
46
if line .fsm_order_id .stage_id == complete :
@@ -48,27 +50,27 @@ def _compute_qty_delivered(self):
48
50
@api .model
49
51
def create (self , values ):
50
52
line = super (SaleOrderLine , self ).create (values )
51
- if line .state == ' sale' :
53
+ if line .state == " sale" :
52
54
line ._field_service_generation ()
53
55
return line
54
56
55
57
def _field_create_fsm_order_prepare_values (self ):
56
58
self .ensure_one ()
57
59
categories = self .product_id .fsm_order_template_id .category_ids
58
60
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 ,
72
74
}
73
75
74
76
@api .multi
@@ -81,20 +83,27 @@ def _field_create_fsm_order(self):
81
83
for so_line in self :
82
84
# create fsm_order
83
85
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 )
85
87
so_line .fsm_order_id = fsm_order .id
86
88
# 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=
89
92
# 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
+ )
91
97
so_line .order_id .message_post (body = msg_body )
92
98
# 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=
95
102
# 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
+ )
98
107
fsm_order .message_post (body = fsm_order_msg )
99
108
result [so_line .id ] = fsm_order
100
109
return result
@@ -108,10 +117,10 @@ def _field_find_fsm_order(self):
108
117
"""
109
118
for rec in self :
110
119
# 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 )])
113
121
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
+ }
115
124
res = {}
116
125
for so_line in rec :
117
126
# If the SO was confirmed, cancelled, set to draft then confirmed,
@@ -129,17 +138,15 @@ def _field_service_generation(self):
129
138
exists, it simply links the existing one to the line.
130
139
"""
131
140
for rec in self :
132
- if rec .product_id .field_service_tracking == ' sale' :
141
+ if rec .product_id .field_service_tracking == " sale" :
133
142
sale = rec .order_id
134
143
so_fo_mapping = sale ._field_find_fsm_order ()
135
144
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" :
137
146
rec ._field_find_fsm_order ()
138
147
139
148
@api .multi
140
149
def _prepare_invoice_line (self , qty ):
141
150
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 })
145
152
return res
0 commit comments