@@ -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" ,
@@ -30,13 +36,18 @@ class StockReceptionScreen(models.Model):
30
36
store = True ,
31
37
)
32
38
33
- @api .depends ("product_packaging_id" , "product_packaging_id.measuring_device_id" )
39
+ @api .depends (
40
+ "current_move_product_id.packaging_ids.measuring_device_id" ,
41
+ )
34
42
def _compute_scan_requested (self ):
35
43
for record in self :
36
- record .scan_requested = (
37
- record .product_packaging_id
38
- and record .product_packaging_id .measuring_device_id
39
- )
44
+ # TODO
45
+ all_product_packagings = record .current_move_product_id .packaging_ids
46
+ record .scan_requested = False
47
+ for packaging in all_product_packagings :
48
+ if packaging .measuring_device_id :
49
+ record .scan_requested = True
50
+ break
40
51
41
52
@api .depends (
42
53
"product_packaging_id.packaging_length" ,
@@ -54,6 +65,20 @@ def _compute_package_dimensions(self):
54
65
else :
55
66
record .display_package_dimensions = False
56
67
68
+ @api .depends (
69
+ "product_packaging_id" ,
70
+ "product_packaging_id.qty" ,
71
+ "current_move_product_id.packaging_ids.max_weight" ,
72
+ "current_move_product_id.packaging_ids.packaging_length" ,
73
+ "current_move_product_id.packaging_ids.width" ,
74
+ "current_move_product_id.packaging_ids.height" ,
75
+ )
76
+ def _compute_smaller_package_has_missing_dimensions (self ):
77
+ for record in self :
78
+ record .smaller_package_has_missing_dimensions = bool (
79
+ record ._get_smaller_package_without_dimensions ()
80
+ )
81
+
57
82
@api .depends (
58
83
"product_packaging_id.max_weight" ,
59
84
"product_packaging_id.packaging_length" ,
@@ -71,29 +96,63 @@ def _compute_package_has_missing_dimensions(self):
71
96
else :
72
97
record .package_has_missing_dimensions = False
73
98
74
- def measure_current_packaging ( self ):
75
- self . ensure_one ()
99
+ @ api . model
100
+ def _measure_packaging ( self , packaging ):
76
101
device = self .env ["measuring.device" ].search (
77
102
[("is_default" , "=" , True )], limit = 1
78
103
)
79
104
if not device :
80
105
error_msg = _ ("No default device set, please configure one." )
81
106
_logger .error (error_msg )
82
107
self ._notify (error_msg )
83
- return UserError (error_msg )
108
+ raise UserError (error_msg )
84
109
if device ._is_being_used ():
85
110
error_msg = _ ("Measurement machine already in use." )
86
111
_logger .error (error_msg )
87
112
self ._notify (error_msg )
88
- return UserError (error_msg )
113
+ raise UserError (error_msg )
89
114
90
- self . product_packaging_id ._measuring_device_assign (device )
115
+ packaging ._measuring_device_assign (device )
91
116
return True
92
117
118
+ def measure_current_packaging (self ):
119
+ self .ensure_one ()
120
+ return self ._measure_packaging (self .product_packaging_id )
121
+
122
+ def _get_smaller_package_without_dimensions_domain (self ):
123
+ self .ensure_one ()
124
+ # TODO ordered package
125
+ return [
126
+ ("product_id" , "=" , self .current_move_product_id .id ),
127
+ ("qty" , "<" , self .product_packaging_id .qty ),
128
+ "|" ,
129
+ "|" ,
130
+ "|" ,
131
+ ("packaging_length" , "=" , 0.0 ),
132
+ ("width" , "=" , 0.0 ),
133
+ ("height" , "=" , 0.0 ),
134
+ ("max_weight" , "=" , 0.0 ),
135
+ ]
136
+
137
+ def _get_smaller_package_without_dimensions (self ):
138
+ self .ensure_one ()
139
+ domain = self ._get_smaller_package_without_dimensions_domain ()
140
+ return self .env ["product.packaging" ].search (domain , order = "qty desc" , limit = 1 )
141
+
142
+ def measure_smaller_packaging (self ):
143
+ self .ensure_one ()
144
+ pack_without_dimensions = self ._get_smaller_package_without_dimensions ()
145
+ if not pack_without_dimensions :
146
+ error_msg = _ ("No available packaging without measurements." )
147
+ raise UserError (error_msg )
148
+ return self ._measure_packaging (pack_without_dimensions )
149
+
93
150
def cancel_measure_current_packaging (self ):
94
151
self .ensure_one ()
95
- self .product_packaging_id ._measuring_device_release ()
96
- return True
152
+ assigned_packaging = self .current_move_product_id .packaging_ids .filtered (
153
+ lambda p : p .measuring_device_id
154
+ )
155
+ assigned_packaging ._measuring_device_release ()
97
156
98
157
def _notify (self , message ):
99
158
"""Show a gentle notification on the wizard"""
0 commit comments