Pick Management Documentation¶
Overview¶
The Pick Management module (pick.management) manages warehouse picking operations by organizing products to be picked from various locations. It supports multiple picking strategies including single item picking, agency-based picking, product brand grouping, courier-based sorting, and warehouse zone organization.
Model Information¶
Model Name: pick.management
Display Name: Pick Management
Key Fields: N/A
Features¶
- ❌ Audit logging enabled (
_audit_log) - ❌ Multi-company support (
company_id) - ❌ Full-text content search (
_content_search) - ❌ Unique key constraint
Picking Types¶
| Type | Code | Description |
|---|---|---|
| Single | single |
Individual item picking for single orders |
| Agency | agency |
Group picking by agency or distribution partner |
| Product Brand | product_brand |
Group picking by brand categories |
| Courier | courier |
Sort picking by courier service provider |
| Product Categories | product_categories |
Group picking by product category |
| WH Zone | wh_zone |
Organize picking by warehouse zone/area |
Key Fields Reference¶
Header Fields¶
| Field | Type | Required | Description |
|---|---|---|---|
picking_list_number |
Char | ❌ | Unique identifier for the picking list |
picking_type |
Selection | ❌ | Strategy for organizing the picking (see Picking Types table) |
order_date |
Date | ❌ | Date when orders were placed |
doc_date |
Date | ❌ | Document creation date |
pick_date |
Date | ❌ | Scheduled or actual picking date |
pick_slot |
Char | ❌ | Time slot assigned for picking |
picker_name |
Many2One | ❌ | Employee assigned to perform the picking (hr.employee) |
Relationship Fields¶
| Field | Type | Description |
|---|---|---|
lines |
One2Many | Picking line items (pick.management.line) |
API Methods¶
1. Create Pick Management Record¶
Method: create(vals, context)
Creates a new pick management record.
Parameters:
vals = {
"picking_list_number": "PKL-001", # Optional: Picking list identifier
"picking_type": "single", # Optional: One of the picking types
"order_date": "2025-10-15", # Optional: Order date
"doc_date": "2025-10-27", # Optional: Document date
"pick_date": "2025-10-28", # Optional: Scheduled pick date
"pick_slot": "09:00-11:00", # Optional: Time slot
"picker_name": 123, # Optional: Employee ID
"lines": [ # Optional: Line items
("create", {
"product_code": 456,
"qty": 10,
"location": 789,
"tracking_no": "TRK001"
})
]
}
Returns: int - New record ID
Example:
# Create a single-item picking list
pick_id = get_model("pick.management").create({
"picking_list_number": "PKL-2025-001",
"picking_type": "single",
"pick_date": "2025-10-28",
"picker_name": 42,
"lines": [
("create", {
"product_code": 101,
"qty": 5,
"location": 201
})
]
})
Search Functions¶
Search by Picker¶
# Find all picking lists assigned to a specific picker
condition = [["picker_name", "=", employee_id]]
picks = get_model("pick.management").search(condition)
Search by Picking Type¶
# Find all agency-based picking lists
condition = [["picking_type", "=", "agency"]]
picks = get_model("pick.management").search(condition)
Search by Date¶
# Find picking lists for a specific date
condition = [["pick_date", "=", "2025-10-28"]]
picks = get_model("pick.management").search(condition)
Related Models¶
| Model | Relationship | Description |
|---|---|---|
pick.management.line |
One2Many | Line items for this picking list |
hr.employee |
Many2One | Employee assigned to pick items |
Common Use Cases¶
Use Case 1: Create Single-Item Picking List¶
# Create a picking list for a single order
pick_id = get_model("pick.management").create({
"picking_list_number": "PKL-001",
"picking_type": "single",
"pick_date": "2025-10-28",
"pick_slot": "09:00-11:00",
"picker_name": employee_id,
"lines": [
("create", {
"product_code": product_id,
"qty": 5,
"location": warehouse_location_id,
"central_ord_no": order_id,
"tracking_no": "TRK12345"
})
]
})
Use Case 2: Create Zone-Based Batch Picking¶
# Create a picking list organized by warehouse zone
pick_id = get_model("pick.management").create({
"picking_list_number": "PKL-ZONE-A-001",
"picking_type": "wh_zone",
"pick_date": "2025-10-28",
"picker_name": employee_id,
"lines": [
("create", {
"product_code": prod1_id,
"qty": 10,
"location": zone_a_location_id
}),
("create", {
"product_code": prod2_id,
"qty": 5,
"location": zone_a_location_id
})
]
})
Best Practices¶
1. Organize by Picking Strategy¶
# Choose the appropriate picking type based on your workflow
# For single orders:
"picking_type": "single"
# For batch picking by courier:
"picking_type": "courier"
# For zone-based picking (more efficient):
"picking_type": "wh_zone"
2. Use Meaningful Picking List Numbers¶
# Good: Descriptive numbering
"picking_list_number": "PKL-ZONE-A-2025-001" # ✅ Clear structure
# Bad: Generic numbering
"picking_list_number": "001" # ❌ Not descriptive
Performance Tips¶
1. Batch Create Lines¶
- Create all picking lines in a single transaction when possible
- Use
("create", vals_dict)within the parent create operation
2. Index on Search Fields¶
- The
picker_namefield is indexed withsearch=True - Use these fields in queries for better performance
3. Group by Location¶
# Efficient: Group items by location for batch picking
picks_by_zone = {}
for line in pick_lines:
zone = line.location.zone
picks_by_zone.setdefault(zone, []).append(line)
Integration Points¶
Internal Modules¶
- HR Module: Links to employee records for picker assignment
- Pick Management Line: Line items containing pick details
Version History¶
Last Updated: 2025-10-27
Model Version: pick_management.py
Framework: Netforce
Additional Resources¶
- Pick Management Line Documentation:
pick.management.line - Employee Management:
hr.employee
This documentation is generated for developer onboarding and reference purposes.