@@ -18,6 +18,12 @@ class StockReceptionScreen(models.Model):
18
18
store = True ,
19
19
help = "Indicates if the package have any measurement missing." ,
20
20
)
21
+ smaller_package_has_missing_dimensions = fields .Boolean (
22
+ "Smaller Package Requires Measures?" ,
23
+ compute = "_compute_smaller_package_has_missing_dimensions" ,
24
+ store = True ,
25
+ help = "Indicates if any smaller package have any measurement missing." ,
26
+ )
21
27
display_package_dimensions = fields .Char (
22
28
string = "Dimensions (lxhxw)" ,
23
29
compute = "_compute_package_dimensions" ,
@@ -27,16 +33,19 @@ class StockReceptionScreen(models.Model):
27
33
help = "A scan from the measuring device was requested" ,
28
34
default = False ,
29
35
compute = "_compute_scan_requested" ,
30
- store = True ,
31
36
)
32
37
33
- @api .depends ("product_packaging_id" , "product_packaging_id.measuring_device_id" )
38
+ @api .depends (
39
+ "current_move_product_id.packaging_ids.measuring_device_id" ,
40
+ )
34
41
def _compute_scan_requested (self ):
35
42
for record in self :
36
- record .scan_requested = (
37
- record .product_packaging_id
38
- and record .product_packaging_id .measuring_device_id
39
- )
43
+ all_product_packagings = record .current_move_product_id .packaging_ids
44
+ record .scan_requested = False
45
+ for packaging in all_product_packagings :
46
+ if packaging .measuring_device_id :
47
+ record .scan_requested = True
48
+ break
40
49
41
50
@api .depends (
42
51
"product_packaging_id.packaging_length" ,
@@ -54,6 +63,20 @@ def _compute_package_dimensions(self):
54
63
else :
55
64
record .display_package_dimensions = False
56
65
66
+ @api .depends (
67
+ "product_packaging_id" ,
68
+ "product_packaging_id.qty" ,
69
+ "current_move_product_id.packaging_ids.max_weight" ,
70
+ "current_move_product_id.packaging_ids.packaging_length" ,
71
+ "current_move_product_id.packaging_ids.width" ,
72
+ "current_move_product_id.packaging_ids.height" ,
73
+ )
74
+ def _compute_smaller_package_has_missing_dimensions (self ):
75
+ for record in self :
76
+ record .smaller_package_has_missing_dimensions = bool (
77
+ record ._get_smaller_package_without_dimensions ()
78
+ )
79
+
57
80
@api .depends (
58
81
"product_packaging_id.max_weight" ,
59
82
"product_packaging_id.packaging_length" ,
@@ -71,35 +94,78 @@ def _compute_package_has_missing_dimensions(self):
71
94
else :
72
95
record .package_has_missing_dimensions = False
73
96
74
- def measure_current_packaging ( self ):
75
- self . ensure_one ()
97
+ @ api . model
98
+ def _measure_packaging ( self , packaging ):
76
99
device = self .env ["measuring.device" ].search (
77
100
[("is_default" , "=" , True )], limit = 1
78
101
)
79
102
if not device :
80
103
error_msg = _ ("No default device set, please configure one." )
81
104
_logger .error (error_msg )
82
- self ._notify (error_msg )
83
- return UserError (error_msg )
105
+ self ._notify_warning (error_msg )
106
+ raise UserError (error_msg )
84
107
if device ._is_being_used ():
85
108
error_msg = _ ("Measurement machine already in use." )
86
109
_logger .error (error_msg )
87
- self ._notify (error_msg )
88
- return UserError (error_msg )
110
+ self ._notify_warning (error_msg )
111
+ raise UserError (error_msg )
89
112
90
- self .product_packaging_id ._measuring_device_assign (device )
113
+ packaging ._measuring_device_assign (device )
114
+ message = "MEASURE {}" .format (packaging .packaging_type_id .display_name )
115
+ # Letting the info on the screen, so the user knows which packaging to
116
+ # needs to be measured
117
+ self ._notify_info (message , sticky = True )
91
118
return True
92
119
120
+ def measure_current_packaging (self ):
121
+ self .ensure_one ()
122
+ return self ._measure_packaging (self .product_packaging_id )
123
+
124
+ def _get_smaller_package_without_dimensions_domain (self ):
125
+ self .ensure_one ()
126
+ return [
127
+ ("product_id" , "=" , self .current_move_product_id .id ),
128
+ ("qty" , "<" , self .product_packaging_id .qty ),
129
+ "|" ,
130
+ "|" ,
131
+ "|" ,
132
+ ("packaging_length" , "=" , 0 ),
133
+ ("width" , "=" , 0 ),
134
+ ("height" , "=" , 0 ),
135
+ ("max_weight" , "=" , 0 ),
136
+ ]
137
+
138
+ def _get_smaller_package_without_dimensions (self ):
139
+ self .ensure_one ()
140
+ domain = self ._get_smaller_package_without_dimensions_domain ()
141
+ return self .env ["product.packaging" ].search (domain , order = "qty desc" , limit = 1 )
142
+
143
+ def measure_smaller_packaging (self ):
144
+ self .ensure_one ()
145
+ pack_without_dimensions = self ._get_smaller_package_without_dimensions ()
146
+ if not pack_without_dimensions :
147
+ error_msg = _ ("No available packaging without measurements." )
148
+ raise UserError (error_msg )
149
+ return self ._measure_packaging (pack_without_dimensions )
150
+
93
151
def cancel_measure_current_packaging (self ):
94
152
self .ensure_one ()
95
- self .product_packaging_id ._measuring_device_release ()
96
- return True
153
+ assigned_packaging = self .current_move_product_id .packaging_ids .filtered (
154
+ lambda p : p .measuring_device_id
155
+ )
156
+ assigned_packaging ._measuring_device_release ()
97
157
98
- def _notify (self , message ):
158
+ def _notify_warning (self , message ):
99
159
"""Show a gentle notification on the wizard"""
100
160
self .ensure_one ()
101
161
self .create_uid .with_user (self .create_uid .id ).notify_warning (message = message )
102
162
163
+ def _notify_info (self , message , ** kwargs ):
164
+ self .ensure_one ()
165
+ self .create_uid .with_user (self .create_uid .id ).notify_info (
166
+ message = message , ** kwargs
167
+ )
168
+
103
169
def reload (self ):
104
170
self .cancel_measure_current_packaging ()
105
171
return {
0 commit comments