Skip to content

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)

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_name field is indexed with search=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.