Skip to content

Transport Consolidation Core Logic

kitler edited this page Jan 31, 2026 · 1 revision

1. Core validation logic

The validate() method runs these checks in order:

A. validate_consolidation_rules() (Lines 71-127)

Validates consolidation eligibility:

Source: Transport Job doctype

  • Requires at least one Transport Job in transport_jobs child table
  • All Transport Jobs must be submitted (docstatus = 1)
  • All jobs must have the same load_type (from Transport Job)
  • All jobs must belong to the same company (from Transport Job)
  • Warns if jobs have different vehicle_type values

Source: Load Type doctype

  • Checks can_be_consolidated (Load Type field)
  • Enforces max_consolidation_jobs if set (Load Type field)

B. determine_consolidation_type() (Lines 19-69)

Auto-determines consolidation type from Transport Leg addresses:

Source: Transport Leg doctype

  • Reads pick_address and drop_address from all Transport Legs linked to Transport Jobs
  • Logic:
    • Both: 1 pick address, 1 drop address → "Both"
    • Pick: 1 pick address, multiple drop addresses → "Pick"
    • Drop: Multiple pick addresses, 1 drop address → "Drop"
    • Route: Multiple pick and drop addresses → "Route"

C. calculate_totals() (Lines 157-176)

Calculates aggregated weight and volume:

Source: Transport Job Package child table

  • Iterates through all packages in each Transport Job
  • Sums weight and volume from each package
  • Sets total_weight and total_volume on the consolidation

D. validate_capacity_limits() (Lines 129-155)

Validates against Load Type capacity limits:

Source: Load Type doctype

  • Compares total_weight against max_weight (if set)
  • Compares total_volume against max_volume (if set)
  • Throws error if limits are exceeded

E. validate_accounts() (Lines 178-238)

Validates accounting fields:

Source: Company, Cost Center, Profit Center, Branch doctypes

  • Ensures company is set (required)
  • Validates cost_center belongs to the company (if Cost Center has company field)
  • Validates profit_center belongs to the company (if Profit Center has company field)
  • Validates branch belongs to the company (if Branch has company field)

2. Related doctypes and field relationships

Transport Consolidation → Transport Consolidation Job (Child Table)

  • Field: transport_jobs (Table)
  • Contains: transport_job (Link to Transport Job), customer, weight, volume, pick_address, drop_address

Transport Consolidation → Transport Job

  • Relationship: One-to-many via child table
  • Fields used:
    • load_type → validates consolidation eligibility
    • company → must match across all jobs
    • vehicle_type → warning if different
    • docstatus → must be 1 (submitted)
    • packages → for weight/volume calculation

Transport Consolidation → Transport Leg

  • Relationship: Indirect (via Transport Job)
  • Fields used:
    • pick_address → determines consolidation type
    • drop_address → determines consolidation type
    • pick_consolidated / drop_consolidated → set when creating Run Sheet

Transport Consolidation → Load Type

  • Relationship: Via Transport Job's load_type
  • Fields used:
    • can_be_consolidated (Check) → must be True
    • max_consolidation_jobs (Integer, optional) → max jobs allowed
    • max_weight (Float, optional) → weight capacity limit
    • max_volume (Float, optional) → volume capacity limit

Transport Consolidation → Transport Job Package

  • Relationship: Via Transport Job's packages child table
  • Fields used:
    • weight → summed for total_weight
    • volume → summed for total_volume

Transport Consolidation → Run Sheet

  • Relationship: One-to-one via run_sheet field
  • Created by: create_run_sheet_from_consolidation() function

3. Additional functions

create_run_sheet_from_consolidation() (Lines 241-458)

Creates a Run Sheet from the consolidation:

  • Validates consolidation has jobs
  • Checks if Run Sheet already exists
  • Collects all Transport Legs from all Transport Jobs
  • Determines consolidation pattern (Pick/Drop/Both/Route)
  • Creates Run Sheet with appropriate leg routing
  • Sets pick_consolidated/drop_consolidated flags on Transport Legs
  • Links Run Sheet back to consolidation

get_consolidatable_jobs() (Lines 461-648)

Finds jobs eligible for consolidation:

  • Filters by docstatus = 1 (submitted)
  • Filters by company (if provided)
  • Checks Load Type's can_be_consolidated flag
  • Groups jobs by pick/drop addresses
  • Returns jobs with consolidation type suggestions

add_jobs_to_consolidation() (Lines 651-741)

Adds selected jobs to an existing consolidation:

  • Validates each job is submitted
  • Checks job has Transport Legs
  • Prevents duplicate jobs
  • Adds jobs to transport_jobs child table

4. Frontend logic (JavaScript)

transport_consolidation.js

  • refresh(): Adds "Fetch Jobs" and "Create Run Sheet" buttons
  • fetch_consolidatable_jobs(): Calls backend API to get eligible jobs
  • show_jobs_dialog(): Displays dialog with selectable jobs
  • add_jobs_to_consolidation(): Adds selected jobs via API
  • create_run_sheet_from_consolidation(): Creates Run Sheet via API

5. Data flow summary

Transport Job (submitted)
    ↓
Transport Leg (pick_address, drop_address)
    ↓
Transport Consolidation (validates & groups)
    ↓
Load Type (validates can_be_consolidated, max limits)
    ↓
Transport Job Package (weight, volume)
    ↓
Run Sheet (created with routing logic)

6. Key validation rules summary

Validation Source Doctype Field/Logic Error Type
At least 1 job Transport Consolidation transport_jobs table Required
Jobs must be submitted Transport Job docstatus = 1 Error
Same load type Transport Job load_type Error
Same company Transport Job company Error
Load type allows consolidation Load Type can_be_consolidated = True Error
Max jobs limit Load Type max_consolidation_jobs Error
Weight capacity Load Type max_weight vs total_weight Error
Volume capacity Load Type max_volume vs total_volume Error
Company required Transport Consolidation company field Error
Account fields belong to company Cost/Profit Center, Branch company field Error

This structure ensures consolidations are valid, respect capacity limits, and maintain data integrity across related doctypes.

Getting Started

Setup and Settings

Sea Freight

Air Freight

Transport

Customs

Warehousing

Pricing Center

Job Management

Sustainability

Intercompany

Special Projects

Pages

Features

Reports

Glossary

Clone this wiki locally