88INVENTORY_PAGE_LIMIT = 100 # Limit for scalability
99
1010class MyController (http .Controller ):
11- < << << << HEAD
1211 """
1312 Controller for managing inventory-related HTTP requests.
1413 """
1514
16- def _get_partner_inventory (self , partner ):
17- """
18- Fetch inventory items associated with the given partner.
19- Args:
20- partner: res.partner record.
21- Returns:
22- Recordset of stock.quant matching the criteria.
23- """
24- serials = http .request .env ['stock.production.lot' ].search ([(CUSTOMER_FIELD , '=' , partner .id )])
25- return http .request .env ['stock.quant' ].search ([
26- ('lot_id' , 'in' , serials .ids ),
27- ('location_id.usage' , '=' , INTERNAL_USAGE )
28- ])
29- == == == =
3015 def _get_current_user (self ):
3116 """
3217 Helper to get the current Odoo user.
@@ -66,12 +51,6 @@ def _get_partner_inventory(self, partner, limit=INVENTORY_PAGE_LIMIT):
6651 limit (int): Max number of records to return.
6752 Returns:
6853 stock.quant recordset.
69- Example:
70- >>> self._get_partner_inventory(partner)
71- stock.quant(1, 2, 3)
72- Edge Cases:
73- - Partner has no inventory: returns empty recordset.
74- - Large inventory: returns only up to 'limit' records.
7554 """
7655 try :
7756 serials = http .request .env ['stock.production.lot' ].search ([(CUSTOMER_FIELD , '=' , partner .id )])
@@ -95,13 +74,6 @@ def _parse_item_ids(self, form):
9574 form: werkzeug.form object.
9675 Returns:
9776 List of item_ids as integers, or None if parsing fails.
98- Example:
99- >>> self._parse_item_ids(form)
100- [1, 2, 3]
101- Edge Cases:
102- - No item_ids: returns None.
103- - Non-integer values: returns None.
104- - Duplicates: returns unique integers.
10577 """
10678 item_ids = form .getlist ('item_ids' )
10779 if not item_ids :
@@ -121,41 +93,10 @@ def _parse_item_ids(self, form):
12193 except Exception as e :
12294 _logger .error ("Error parsing item_ids: %s. Data: %s" , e , item_ids )
12395 return None
124- >> >> >> > 46620 db (Update : latest changes )
125-
126- def _parse_item_ids (self , form ):
127- """
128- Helper to safely parse item_ids from form data.
129- Args:
130- form: werkzeug.form object.
131- Returns:
132- List of item_ids as integers, or None if parsing fails.
133- """
134- try :
135- return [int (id ) for id in form .getlist ('item_ids' )]
136- except (ValueError , TypeError ):
137- return None
13896
13997 @http .route ('/my/inventory/request_pickup' , type = 'http' , auth = 'user' , methods = ['POST' ], csrf = True )
14098 def request_pickup (self , ** kw ):
14199 """
142- <<<<<<< HEAD
143- Handle inventory pickup requests for logged-in users.
144- """
145- user = http .request .env .user
146- partner = user .partner_id
147- _logger .info ('Inventory accessed by partner ID %s' , partner .id )
148-
149- item_ids = self ._parse_item_ids (http .request .httprequest .form )
150- if not item_ids :
151- _logger .warning ("User ID: %s provided invalid item_ids: %s" , user .id , http .request .httprequest .form .getlist ('item_ids' ))
152- # Redirect with error and user friendly message
153- return http .request .redirect ('/my/inventory?error=invalid_item_ids&message=Please+provide+valid+item+IDs.' )
154-
155- _logger .info ('Pickup requested for items %s by partner ID %s' , item_ids , partner .id )
156- # ...existing pickup processing code should be placed here...
157- return http .request .redirect ('/my/inventory?success=pickup_requested' )
158- == == == =
159100 Handle pickup requests for inventory items.
160101 Enhanced logging, error handling, and user feedback.
161102 """
@@ -164,49 +105,20 @@ def request_pickup(self, **kw):
164105 _logger .info ('Pickup request initiated by user %s (ID: %s), partner %s' , user .login , user .id , partner .id )
165106 item_ids = self ._parse_item_ids (http .request .httprequest .form )
166107 if item_ids is None :
167- error_msg = (
168- "Invalid item selection. Please select valid inventory items. "
169- "If the problem persists, contact support."
170- )
171108 _logger .warning ("User %s (ID: %s) provided invalid item_ids: %s" , user .login , user .id , http .request .httprequest .form .getlist ('item_ids' ))
172109 return http .request .redirect ('/my/inventory?error=invalid_item_ids' )
173110 try :
174111 # ...existing code for processing pickup...
175112 _logger .info ('Pickup requested for items %s by partner %s' , item_ids , partner .id )
176113 # On success:
177- success_msg = "Pickup request submitted successfully for selected items."
178114 return http .request .redirect ('/my/inventory?success=pickup_requested' )
179115 except Exception as e :
180116 _logger .error ("Error processing pickup request for user %s: %s" , user .login , e )
181- error_msg = (
182- "An error occurred while processing your pickup request. "
183- "Please try again later or contact support."
184- )
185117 return http .request .redirect ('/my/inventory?error=pickup_failed' )
186- >>>>>>> 46620db (Update: latest changes)
187118
188119 @http .route ('/my/inventory' , type = 'http' , auth = 'user' , website = True , methods = ['GET' ], csrf = True )
189120 def my_inventory (self , ** kw ):
190121 """
191- << << < << HEAD
192- Display inventory relevant to the logged - in user .
193- """
194- user = http.request.env.user
195- partner = user.partner_id
196- quants = self._get_partner_inventory(partner)
197-
198- # Show error message from query parameters if present
199- error = http.request.params.get('error')
200- message = http.request.params.get('message', '')
201- success = http.request.params.get('success')
202- if error:
203- message = message or 'There was a problem with your request.'
204- elif not quants:
205- message = 'No inventory items found. Please contact support if this issue persists.'
206- elif success:
207- message = 'Your pickup request has been submitted.'
208-
209- =======
210122 Render the inventory page for the current user.
211123 Enhanced with pagination, user-friendly messages, and tooltips.
212124 """
@@ -224,23 +136,17 @@ def my_inventory(self, **kw):
224136 if not quants :
225137 message_ctx ['message' ] = 'No inventory items found. If you believe this is an error, please contact support.'
226138 message_ctx ['message_type' ] = 'info'
227- # Add tooltips/explanations for inventory actions
228139 inventory_tooltips = {
229140 'pickup' : 'Request pickup for selected inventory items. Only available for items in internal locations.'
230141 }
231- >> >> > >> 46620 db (Update : latest changes )
232142 return http .request .render (
233143 'records_management.inventory_template' ,
234144 {
235145 'quants' : quants ,
236- << << << < HEAD
237- 'message' : message
238- == == == =
239146 'message' : message_ctx ['message' ],
240147 'message_type' : message_ctx ['message_type' ],
241148 'tooltips' : inventory_tooltips ,
242149 'page_limit' : INVENTORY_PAGE_LIMIT ,
243- >> >> >> > 46620 db (Update : latest changes )
244150 }
245151 )
246152
0 commit comments