Skip to content

Commit de6d0db

Browse files
Update HTTP Controller
1 parent 986fc39 commit de6d0db

File tree

1 file changed

+54
-12
lines changed

1 file changed

+54
-12
lines changed

HTTP Controller

Lines changed: 54 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,41 +6,83 @@ _logger = logging.getLogger(__name__)
66
CUSTOMER_FIELD = 'customer_id'
77
INTERNAL_USAGE = 'internal'
88

9-
109
class MyController(http.Controller):
10+
"""
11+
Controller for managing inventory-related HTTP requests.
12+
"""
1113

1214
def _get_partner_inventory(self, partner):
15+
"""
16+
Fetch inventory items associated with the given partner.
17+
Args:
18+
partner: res.partner record.
19+
Returns:
20+
Recordset of stock.quant matching the criteria.
21+
"""
1322
serials = http.request.env['stock.production.lot'].search([(CUSTOMER_FIELD, '=', partner.id)])
1423
return http.request.env['stock.quant'].search([
1524
('lot_id', 'in', serials.ids),
1625
('location_id.usage', '=', INTERNAL_USAGE)
1726
])
1827

28+
def _parse_item_ids(self, form):
29+
"""
30+
Helper to safely parse item_ids from form data.
31+
Args:
32+
form: werkzeug.form object.
33+
Returns:
34+
List of item_ids as integers, or None if parsing fails.
35+
"""
36+
try:
37+
return [int(id) for id in form.getlist('item_ids')]
38+
except (ValueError, TypeError):
39+
return None
40+
1941
@http.route('/my/inventory/request_pickup', type='http', auth='user', methods=['POST'], csrf=True)
2042
def request_pickup(self, **kw):
43+
"""
44+
Handle inventory pickup requests for logged-in users.
45+
"""
2146
user = http.request.env.user
2247
partner = user.partner_id
23-
_logger.info('Inventory accessed by partner %s', partner.id)
24-
try:
25-
item_ids = [int(id) for id in http.request.httprequest.form.getlist('item_ids')]
26-
except ValueError:
27-
_logger.warning("User %s (ID: %s) provided invalid item_ids: %s", user.login, user.id, http.request.httprequest.form.getlist('item_ids'))
28-
return http.request.redirect('/my/inventory?error=invalid_item_ids')
29-
_logger.info('Pickup requested for items %s by partner %s', item_ids, partner.id)
30-
# ...existing code...
48+
_logger.info('Inventory accessed by partner ID %s', partner.id)
49+
50+
item_ids = self._parse_item_ids(http.request.httprequest.form)
51+
if not item_ids:
52+
_logger.warning("User ID: %s provided invalid item_ids: %s", user.id, http.request.httprequest.form.getlist('item_ids'))
53+
# Redirect with error and user friendly message
54+
return http.request.redirect('/my/inventory?error=invalid_item_ids&message=Please+provide+valid+item+IDs.')
55+
56+
_logger.info('Pickup requested for items %s by partner ID %s', item_ids, partner.id)
57+
# ...existing pickup processing code should be placed here...
58+
return http.request.redirect('/my/inventory?success=pickup_requested')
3159

3260
@http.route('/my/inventory', type='http', auth='user', website=True, methods=['GET'], csrf=True)
3361
def my_inventory(self, **kw):
62+
"""
63+
Display inventory relevant to the logged-in user.
64+
"""
3465
user = http.request.env.user
3566
partner = user.partner_id
3667
quants = self._get_partner_inventory(partner)
68+
69+
# Show error message from query parameters if present
70+
error = http.request.params.get('error')
71+
message = http.request.params.get('message', '')
72+
success = http.request.params.get('success')
73+
if error:
74+
message = message or 'There was a problem with your request.'
75+
elif not quants:
76+
message = 'No inventory items found. Please contact support if this issue persists.'
77+
elif success:
78+
message = 'Your pickup request has been submitted.'
79+
3780
return http.request.render(
3881
'records_management.inventory_template',
3982
{
4083
'quants': quants,
41-
'message': 'No inventory items found.' if not quants else ''
84+
'message': message
4285
}
4386
)
4487

45-
# ...existing code...
46-
88+
# ...other controller logic can be added here...

0 commit comments

Comments
 (0)