Skip to content

Commit 68b7e01

Browse files
committed
Describe your changes
1 parent 851de67 commit 68b7e01

File tree

4 files changed

+69
-1
lines changed

4 files changed

+69
-1
lines changed

HTTP Controller

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,47 @@
1+
from odoo import http
2+
from odoo.http import request
3+
import logging
4+
5+
_logger = logging.getLogger(__name__)
6+
7+
CUSTOMER_FIELD = 'customer_id'
8+
INTERNAL_USAGE = 'internal'
9+
10+
11+
class MyController(http.Controller):
12+
13+
def _get_partner_inventory(self, partner):
14+
serials = request.env['stock.production.lot'].search([(CUSTOMER_FIELD, '=', partner.id)])
15+
return request.env['stock.quant'].search([
16+
('lot_id', 'in', serials.ids),
17+
('location_id.usage', '=', INTERNAL_USAGE)
18+
])
19+
20+
@http.route('/my/inventory/request_pickup', type='http', auth='user', methods=['POST'], csrf=True)
21+
def request_pickup(self, **kw):
22+
user = request.env.user
23+
partner = user.partner_id
24+
_logger.info('Inventory accessed by partner %s', partner.id)
25+
try:
26+
item_ids = [int(id) for id in request.httprequest.form.getlist('item_ids')]
27+
except ValueError:
28+
_logger.warning("User %s (ID: %s) provided invalid item_ids: %s", user.login, user.id, request.httprequest.form.getlist('item_ids'))
29+
return request.redirect('/my/inventory?error=invalid_item_ids')
30+
_logger.info('Pickup requested for items %s by partner %s', item_ids, partner.id)
31+
# ...existing code...
32+
33+
@http.route('/my/inventory', type='http', auth='user', website=True, methods=['GET'], csrf=True)
34+
def my_inventory(self, **kw):
35+
user = request.env.user
36+
partner = user.partner_id
37+
quants = self._get_partner_inventory(partner)
38+
return request.render(
39+
'records_management.inventory_template',
40+
{
41+
'quants': quants,
42+
'message': 'No inventory items found.' if not quants else ''
43+
}
44+
)
45+
46+
# ...existing code...
147

models

Lines changed: 0 additions & 1 deletion
This file was deleted.

records_management/controllers/portal.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,12 @@
44
class InventoryPortal(http.Controller):
55
@http.route('/my/inventory', type='http', auth='user', website=True)
66
def inventory(self, **kw):
7+
# Authorization check
8+
if not request.env.user.has_group('records_management.group_inventory_access'):
9+
return request.redirect('/web/login?error=access_denied')
710
partner = request.env.user.partner_id
11+
if not partner:
12+
return request.redirect('/my/inventory?error=partner_not_found')
813
serials = request.env['stock.production.lot'].search([('customer_id', '=', partner.id)])
914
quants = request.env['stock.quant'].search([
1015
('lot_id', 'in', serials.ids),
@@ -14,8 +19,15 @@ def inventory(self, **kw):
1419

1520
@http.route('/my/request_pickup', type='http', auth='user', website=True, methods=['POST'])
1621
def request_pickup(self, **post):
22+
# Authorization check
23+
if not request.env.user.has_group('records_management.group_inventory_access'):
24+
return request.redirect('/web/login?error=access_denied')
1725
partner = request.env.user.partner_id
26+
if not partner:
27+
return request.redirect('/my/inventory?error=partner_not_found')
1828
item_ids = [int(id) for id in request.httprequest.form.getlist('item_ids')]
29+
if not item_ids:
30+
return request.redirect('/my/inventory?error=no_items_selected')
1931
items = request.env['stock.production.lot'].search([
2032
('id', 'in', item_ids),
2133
('customer_id', '=', partner.id)

records_management/models/stock_production_lot.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,14 @@ class StockProductionLot(models.Model):
88
string='Customer',
99
help='Tracks ownership. Customer-owned items (boxes, files) have a customer_id; company-owned bins may leave it empty or use it for assignment.'
1010
)
11+
12+
# Developer Note:
13+
# To optimize database queries, prefer using search_read or read_group instead of multiple .search() calls.
14+
# Example:
15+
# serials = request.env['stock.production.lot'].search_read(
16+
# [('customer_id', '=', partner.id)], ['id']
17+
# )
18+
# quants = request.env['stock.quant'].search_read(
19+
# [('lot_id', 'in', [s['id'] for s in serials]), ('location_id.usage', '=', 'internal')],
20+
# ['id', 'lot_id', 'location_id']
21+
# )

0 commit comments

Comments
 (0)