Shipment Management (Consignment)

stock_shipment_management
REPOSITORY
REPOSITORYOCA/stock-logistics-transport
GIT
GIThttps://github.com/OCA/stock-logistics-transport.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/stock-logistics-transport/tree/10.0/stock_shipment_management
VERSION
VERSION 1.0.2
CATEGORY
CATEGORYTransportation
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Camptocamp
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Camptocamp
COMMITTERS
COMMITTERSPedro M. Baeza, Stéphane Bidoul (ACSONE)
WEBSITE
WEBSITEhttp://www.camptocamp.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:20:02
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/stock-logistics-transport:
    - stock_route_transit
    - transport_information
    - sale_transport_multi_address
    - stock_transport_multi_address
    - purchase_transport_multi_address
odoo/odoo:
    - delivery
    - sale_stock
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web_kanban
    - web
    - bus
    - web_tour
    - account
    - product
    - decimal_precision
    - report
    - analytic
    - web_planner
    - procurement
    - stock_account
    - stock
    - barcodes
    - stock_dropshipping
    - purchase
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (15)
XML IDNameModelTypeStatus
purchase_order_form_2_in_transit_moves purchase.order.form purchase.order xpath Inherits purchase.purchase_order_2_stock_picking
view_create_shipment_plan shipment_plan_create_form shipment.plan.creator form New
view_move_transit_pipeline_search stock.move.transit.pipeline.search stock.move search New
view_move_transit_pipline_tree Stock Moves stock.move tree New
view_order_form sale.order.form sale.order h1 Inherits sale.view_order_form
view_shipment_carrier_setter Change Shipment Carrier shipment.carrier.setter form New
view_shipment_carrier_tracking_ref_setter Change Shipment Tracking Ref. shipment.carrier_tracking_ref.setter form New
view_shipment_consignee_setter Change Shipment Consignee shipment.consignee.setter form New
view_shipment_eta_setter Change Shipment ETA shipment.eta.setter form New
view_shipment_etd_setter Change Shipment ETD shipment.etd.setter form New
view_shipment_plan_filter shipment.plan.list.select shipment.plan search New
view_shipment_plan_form shipment.plan.form shipment.plan form New
view_shipment_plan_tree shipment.plan.tree shipment.plan tree New
view_shipment_to_address_setter Change Shipment To Address shipment.to_address.setter form New
view_shipment_transit_confirm Shipment Transit shipment.transit.confirm form New
Models touched (13)

New fields (1)
  • to_transit_moves_count Integer
    compute='_count_to_transit_moves'
Public methods (1)
  • action_open_to_transit_moves(self)
    @api.multi
    Open move list view of to transit moves

New fields (1)
  • to_transit_moves_count Integer
    compute='_count_to_transit_moves'
Public methods (1)
  • action_open_to_transit_moves(self)
    @api.multi
    Open move list view of to transit moves

New fields (1)
  • carrier_id Many2one → delivery.carrier
    help='Shipment carrier' args: 'delivery.carrier', 'Carrier'
Public methods (1)
  • set_value(self)
    @api.multi
    Changes the Shipment Carrier and update departure and arrival pickings

New fields (1)
  • carrier_tracking_ref Char
    args: 'Tracking Ref.'
Public methods (1)
  • set_value(self)
    @api.multi
    Changes the Shipment ETA and update arrival moves

New fields (1)
  • consignee_id Many2one → res.partner
    domain=[('is_consignee', '=', True)] help='Shipment consignee' args: 'res.partner', 'Consignee'
Public methods (1)
  • set_value(self)
    @api.multi
    Changes the Shipment Consignee and update departure and arrival pickings

New fields (1)
  • eta Datetime
    help='Up to date Estimated Time of Arrival' args: 'ETA'
Public methods (1)
  • set_value(self)
    @api.multi
    Changes the Shipment ETA and update arrival moves

New fields (1)
  • etd Datetime
    help='Up to date Estimated Time of Departure' args: 'ETD'
Public methods (1)
  • set_value(self)
    @api.multi
    Changes the Shipment ETD and update departure moves

New fields (25)
  • arrival_move_ids One2many → stock.move
    copy=False readonly=True args: 'stock.move', 'arrival_shipment_id', 'Arrival Moves'
  • arrival_picking_count Integer
    compute='_arrival_picking_count'
  • arrival_picking_ids One2many → stock.picking
    comodel_name='stock.picking' compute='_get_arrival_picking_ids' copy=False readonly=True string='Arrival Pickings'
  • carrier_id Many2one → delivery.carrier
    readonly=True track_visibility='onchange' args: 'delivery.carrier', 'Carrier'
  • carrier_tracking_ref Char
    readonly=True track_visibility='onchange' args: 'Tracking Ref.'
  • consignee_id Many2one → res.partner
    domain=[('is_consignee', '=', True)] readonly=True track_visibility='onchange' args: 'res.partner', 'Consignee'
  • departure_move_ids One2many → stock.move
    copy=False readonly=True args: 'stock.move', 'departure_shipment_id', 'Departure Moves'
  • departure_picking_count Integer
    compute='_departure_picking_count'
  • departure_picking_ids One2many → stock.picking
    comodel_name='stock.picking' compute='_get_departure_picking_ids' copy=False readonly=True string='Departure Pickings'
  • eta Datetime
    help='Up to date Estimated Time of Arrival' readonly=True track_visibility='onchange' args: 'ETA'
  • etd Datetime
    help='Up to date Estimated Time of Departure' readonly=True track_visibility='onchange' args: 'ETD'
  • from_address_id Many2one → res.partner
    readonly=True required=True args: 'res.partner', 'From Address'
  • initial_eta Datetime
    help='Initial Estimated Time of Arrival' readonly=True states={'draft': [('readonly', False)]} args: 'Initial ETA'
  • initial_etd Datetime
    help='Initial Estimated Time of Departure' readonly=True states={'draft': [('readonly', False)]} args: 'Initial ETD'
  • name Char
    copy=False default='/' readonly=True required=True args: 'Reference'
  • note Text
    readonly=True states={'draft': [('readonly', False)]} args: 'Description / Remarks'
  • po_state Selection
    related='purchase_id.state' selection=purchase.purchase_order.STATE_SELECTION string='PO State'
  • purchase_id Many2one → purchase.order
    readonly=True states={'draft': [('readonly', False)]} args: 'purchase.order', 'Purchase Order'
  • state Selection
    copy=False default='draft' required=True track_visibility='onchange' args: [('draft', 'Draft'), ('confirmed', 'Confirmed'), ('in_transit', 'In Transit'), ('done', 'Done'), ('cancel', 'Cancel')]
  • to_address_id Many2one → res.partner
    readonly=True required=True track_visibility='onchange' args: 'res.partner', 'To Address'
  • transport_mode_id Many2one → transport.mode
    readonly=True states={'draft': [('readonly', False)]} string='Transport by' args: 'transport.mode'
  • user_id Many2one → res.users
    default=<expr> readonly=True states={'draft': [('readonly', False)]} args: 'res.users', 'Responsible'
  • volume Float
    compute='_compute_volume' readonly=True store=True
  • weight Float
    compute='_compute_weights' readonly=True store=True
  • weight_net Float
    compute='_compute_weights' readonly=True
Public methods (12)
  • action_cancel(self)
    @api.multi
  • action_cancel_draft(self)
    @api.multi
  • action_confirm(self)
    @api.multi
  • action_done(self)
    @api.multi
  • action_transit(self)
    @api.multi
  • action_view_arrival_picking(self)
    @api.multi
  • action_view_departure_picking(self)
    @api.multi
  • button_action_transit(self)
    @api.multi
  • create(self, values)
    @api.model
  • has_done_moves(self)
    @api.multi
    Check if at least one departure move is done
  • is_departed(self)
    @api.multi
    Check if all departure moves are done
  • is_transit_done(self)
    @api.multi

New fields (8)
  • carrier_tracking_ref Char
    args: 'Tracking Ref.'
  • consignee_id Many2one → res.partner
    args: 'res.partner', 'Consignee'
  • from_address_id Many2one → res.partner
    readonly=True args: 'res.partner', 'From Address'
  • initial_eta Datetime
    help='Initial Estimated Time of Arrival' args: 'Initial ETA'
  • initial_etd Datetime
    help='Initial Estimated Time of Departure' args: 'Initial ETD'
  • move_ids One2many → stock.move
    comodel_name='stock.move' compute=<expr> string='Selected Moves'
  • shipment_id Many2one → shipment.plan
    domain="[('state', '=', 'draft'), ('from_address_id', '=', from_address_id), ('to_address_id', '=', to_address_id)]" help='Shipment to which moves will be added.\nOnly shipment in draft can be extended.' args: 'shipment.plan', 'Shipment'
  • to_address_id Many2one → res.partner
    readonly=True args: 'res.partner', 'To Address'
Public methods (3)
  • action_create_shipment(self)
    @api.multi
    Create the shipment
  • default_get(self, fields_list)
    @api.model
    Take the pricelist of the lrs by default. Show the available choice for the user.
  • onchange_shipment(self)
    @api.onchange('shipment_id')

New fields (1)
  • to_address_id Many2one → res.partner
    help='Shipment To Address' args: 'res.partner', 'To Address'
Public methods (1)
  • set_value(self)
    @api.multi
    Changes the Shipment To Address and update departure and arrival pickings

New fields (2)
  • shipment_id Many2one → shipment.plan
    default=<expr> args: 'shipment.plan', 'Shipment'
  • undone_move_ids One2many → stock.move
    comodel_name='stock.move' compute='_get_undone_move_ids' string='Selected Moves'
Public methods (2)
  • action_confirm(self)
    @api.multi
    Remove undone move from shipment when confirmed by the user
  • action_open_window(self)
    @api.multi

New fields (1)
  • shipment_id Many2one → shipment.plan
    default=<expr> args: 'shipment.plan', 'Shipment'
Public methods (0)

No public methods.

New fields (13)
  • arrival_shipment_id Many2one → shipment.plan
    readonly=True args: 'shipment.plan', 'Arrival shipment'
  • departure_shipment_id Many2one → shipment.plan
    readonly=True args: 'shipment.plan', 'Departure shipment'
  • product_volume Float
    readonly=True related='product_id.volume' store=True
  • ship_carrier_id Many2one
    readonly=True related='departure_shipment_id.carrier_id' store=True
  • ship_carrier_tracking_ref Char
    readonly=True related='departure_shipment_id.carrier_tracking_ref' string='Tracking Ref.'
  • ship_consignee_id Many2one
    readonly=True related='picking_id.consignee_id' store=True string='Consignee'
  • ship_eta Datetime
    related='move_dest_id.date_expected' store=True string='ETA'
  • ship_etd Datetime
    related='date_expected' store=True string='ETD'
  • ship_from_address_id Many2one
    readonly=True related='picking_id.origin_address_id' store=True string='From Address'
  • ship_partner_id Many2one → res.partner
    comodel_name='res.partner' compute='_get_ship_partner_id' readonly=True store=True string='Partner'
  • ship_state Selection
    related='departure_shipment_id.state' store=True
  • ship_to_address_id Many2one
    related='picking_id.delivery_address_id' store=True string='To Address'
  • ship_transport_mode_id Many2one
    readonly=True related='departure_shipment_id.transport_mode_id' string='Transport by'
Public methods (4)
  • action_remove_from_shipment(self)
    @api.multi
  • copy(self, default=None)
    @api.multi
    Ensure an arrival move from Transit is not assigned to same picking when source move is split
  • split(self, move, qty, restrict_lot_id=False, restrict_partner_id=False)
    @api.model
    Propagate the splitting of a departure transit move to its arrival transit move Here, we remove picking_id to force arrival move to trigger _picking_assign for new move
  • write(self, values)
    @api.multi
REPOSITORY
REPOSITORYOCA/stock-logistics-transport
GIT
GIThttps://github.com/OCA/stock-logistics-transport.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/stock-logistics-transport/tree/9.0/stock_shipment_management
VERSION
VERSION 1.0.2
CATEGORY
CATEGORYTransportation
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Camptocamp
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Camptocamp
COMMITTERS
COMMITTERSPedro M. Baeza, Stéphane Bidoul (ACSONE)
WEBSITE
WEBSITEhttp://www.camptocamp.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:15:24
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/stock-logistics-transport:
    - stock_route_transit
    - transport_information
    - sale_transport_multi_address
    - stock_transport_multi_address
    - purchase_transport_multi_address
odoo/odoo:
    - delivery
    - sale_stock
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web_kanban
    - web
    - bus
    - account
    - product
    - decimal_precision
    - report
    - analytic
    - web_tip
    - web_planner
    - procurement
    - stock_account
    - stock
    - barcodes
    - stock_dropshipping
    - purchase
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (15)
XML IDNameModelTypeStatus
purchase_order_form_2_in_transit_moves purchase.order.form purchase.order xpath Inherits purchase.purchase_order_2_stock_picking
view_create_shipment_plan shipment_plan_create_form shipment.plan.creator form New
view_move_transit_pipeline_search stock.move.transit.pipeline.search stock.move search New
view_move_transit_pipline_tree Stock Moves stock.move tree New
view_order_form sale.order.form sale.order h1 Inherits sale.view_order_form
view_shipment_carrier_setter Change Shipment Carrier shipment.carrier.setter form New
view_shipment_carrier_tracking_ref_setter Change Shipment Tracking Ref. shipment.carrier_tracking_ref.setter form New
view_shipment_consignee_setter Change Shipment Consignee shipment.consignee.setter form New
view_shipment_eta_setter Change Shipment ETA shipment.eta.setter form New
view_shipment_etd_setter Change Shipment ETD shipment.etd.setter form New
view_shipment_plan_filter shipment.plan.list.select shipment.plan search New
view_shipment_plan_form shipment.plan.form shipment.plan form New
view_shipment_plan_tree shipment.plan.tree shipment.plan tree New
view_shipment_to_address_setter Change Shipment To Address shipment.to_address.setter form New
view_shipment_transit_confirm Shipment Transit shipment.transit.confirm form New
Models touched (13)

New fields (1)
  • to_transit_moves_count Integer
    compute='_count_to_transit_moves'
Public methods (1)
  • action_open_to_transit_moves(self)
    @api.multi
    Open move list view of to transit moves

New fields (1)
  • to_transit_moves_count Integer
    compute='_count_to_transit_moves'
Public methods (1)
  • action_open_to_transit_moves(self)
    @api.multi
    Open move list view of to transit moves

New fields (1)
  • carrier_id Many2one → delivery.carrier
    help='Shipment carrier' args: 'delivery.carrier', 'Carrier'
Public methods (1)
  • set_value(self)
    @api.multi
    Changes the Shipment Carrier and update departure and arrival pickings

New fields (1)
  • carrier_tracking_ref Char
    args: 'Tracking Ref.'
Public methods (1)
  • set_value(self)
    @api.multi
    Changes the Shipment ETA and update arrival moves

New fields (1)
  • consignee_id Many2one → res.partner
    domain=[('is_consignee', '=', True)] help='Shipment consignee' args: 'res.partner', 'Consignee'
Public methods (1)
  • set_value(self)
    @api.multi
    Changes the Shipment Consignee and update departure and arrival pickings

New fields (1)
  • eta Datetime
    help='Up to date Estimated Time of Arrival' args: 'ETA'
Public methods (1)
  • set_value(self)
    @api.multi
    Changes the Shipment ETA and update arrival moves

New fields (1)
  • etd Datetime
    help='Up to date Estimated Time of Departure' args: 'ETD'
Public methods (1)
  • set_value(self)
    @api.multi
    Changes the Shipment ETD and update departure moves

New fields (25)
  • arrival_move_ids One2many → stock.move
    copy=False readonly=True args: 'stock.move', 'arrival_shipment_id', 'Arrival Moves'
  • arrival_picking_count Integer
    compute='_arrival_picking_count'
  • arrival_picking_ids One2many → stock.picking
    comodel_name='stock.picking' compute='_get_arrival_picking_ids' copy=False readonly=True string='Arrival Pickings'
  • carrier_id Many2one → delivery.carrier
    readonly=True track_visibility='onchange' args: 'delivery.carrier', 'Carrier'
  • carrier_tracking_ref Char
    readonly=True track_visibility='onchange' args: 'Tracking Ref.'
  • consignee_id Many2one → res.partner
    domain=[('is_consignee', '=', True)] readonly=True track_visibility='onchange' args: 'res.partner', 'Consignee'
  • departure_move_ids One2many → stock.move
    copy=False readonly=True args: 'stock.move', 'departure_shipment_id', 'Departure Moves'
  • departure_picking_count Integer
    compute='_departure_picking_count'
  • departure_picking_ids One2many → stock.picking
    comodel_name='stock.picking' compute='_get_departure_picking_ids' copy=False readonly=True string='Departure Pickings'
  • eta Datetime
    help='Up to date Estimated Time of Arrival' readonly=True track_visibility='onchange' args: 'ETA'
  • etd Datetime
    help='Up to date Estimated Time of Departure' readonly=True track_visibility='onchange' args: 'ETD'
  • from_address_id Many2one → res.partner
    readonly=True required=True args: 'res.partner', 'From Address'
  • initial_eta Datetime
    help='Initial Estimated Time of Arrival' readonly=True states={'draft': [('readonly', False)]} args: 'Initial ETA'
  • initial_etd Datetime
    help='Initial Estimated Time of Departure' readonly=True states={'draft': [('readonly', False)]} args: 'Initial ETD'
  • name Char
    copy=False default='/' readonly=True required=True args: 'Reference'
  • note Text
    readonly=True states={'draft': [('readonly', False)]} args: 'Description / Remarks'
  • po_state Selection
    related='purchase_id.state' selection=purchase.purchase_order.STATE_SELECTION string='PO State'
  • purchase_id Many2one → purchase.order
    readonly=True states={'draft': [('readonly', False)]} args: 'purchase.order', 'Purchase Order'
  • state Selection
    copy=False default='draft' required=True track_visibility='onchange' args: [('draft', 'Draft'), ('confirmed', 'Confirmed'), ('in_transit', 'In Transit'), ('done', 'Done'), ('cancel', 'Cancel')]
  • to_address_id Many2one → res.partner
    readonly=True required=True track_visibility='onchange' args: 'res.partner', 'To Address'
  • transport_mode_id Many2one → transport.mode
    readonly=True states={'draft': [('readonly', False)]} string='Transport by' args: 'transport.mode'
  • user_id Many2one → res.users
    default=<expr> readonly=True states={'draft': [('readonly', False)]} args: 'res.users', 'Responsible'
  • volume Float
    compute='_compute_volume' readonly=True store=True
  • weight Float
    compute='_compute_weights' readonly=True store=True
  • weight_net Float
    compute='_compute_weights' readonly=True
Public methods (12)
  • action_cancel(self)
    @api.multi
  • action_cancel_draft(self)
    @api.multi
  • action_confirm(self)
    @api.multi
  • action_done(self)
    @api.multi
  • action_transit(self)
    @api.multi
  • action_view_arrival_picking(self)
    @api.multi
  • action_view_departure_picking(self)
    @api.multi
  • button_action_transit(self)
    @api.multi
  • create(self, values)
    @api.model
  • has_done_moves(self)
    @api.multi
    Check if at least one departure move is done
  • is_departed(self)
    @api.multi
    Check if all departure moves are done
  • is_transit_done(self)
    @api.multi

New fields (8)
  • carrier_tracking_ref Char
    args: 'Tracking Ref.'
  • consignee_id Many2one → res.partner
    args: 'res.partner', 'Consignee'
  • from_address_id Many2one → res.partner
    readonly=True args: 'res.partner', 'From Address'
  • initial_eta Datetime
    help='Initial Estimated Time of Arrival' args: 'Initial ETA'
  • initial_etd Datetime
    help='Initial Estimated Time of Departure' args: 'Initial ETD'
  • move_ids One2many → stock.move
    comodel_name='stock.move' compute=<expr> string='Selected Moves'
  • shipment_id Many2one → shipment.plan
    domain="[('state', '=', 'draft'), ('from_address_id', '=', from_address_id), ('to_address_id', '=', to_address_id)]" help='Shipment to which moves will be added.\nOnly shipment in draft can be extended.' args: 'shipment.plan', 'Shipment'
  • to_address_id Many2one → res.partner
    readonly=True args: 'res.partner', 'To Address'
Public methods (3)
  • action_create_shipment(self)
    @api.multi
    Create the shipment
  • default_get(self, fields_list)
    @api.model
    Take the pricelist of the lrs by default. Show the available choice for the user.
  • onchange_shipment(self)
    @api.onchange('shipment_id')

New fields (1)
  • to_address_id Many2one → res.partner
    help='Shipment To Address' args: 'res.partner', 'To Address'
Public methods (1)
  • set_value(self)
    @api.multi
    Changes the Shipment To Address and update departure and arrival pickings

New fields (2)
  • shipment_id Many2one → shipment.plan
    default=<expr> args: 'shipment.plan', 'Shipment'
  • undone_move_ids One2many → stock.move
    comodel_name='stock.move' compute='_get_undone_move_ids' string='Selected Moves'
Public methods (2)
  • action_confirm(self)
    @api.multi
    Remove undone move from shipment when confirmed by the user
  • action_open_window(self)
    @api.multi

New fields (1)
  • shipment_id Many2one → shipment.plan
    default=<expr> args: 'shipment.plan', 'Shipment'
Public methods (0)

No public methods.

New fields (13)
  • arrival_shipment_id Many2one → shipment.plan
    readonly=True args: 'shipment.plan', 'Arrival shipment'
  • departure_shipment_id Many2one → shipment.plan
    readonly=True args: 'shipment.plan', 'Departure shipment'
  • product_volume Float
    readonly=True related='product_id.volume' store=True
  • ship_carrier_id Many2one
    readonly=True related='departure_shipment_id.carrier_id' store=True
  • ship_carrier_tracking_ref Char
    readonly=True related='departure_shipment_id.carrier_tracking_ref' string='Tracking Ref.'
  • ship_consignee_id Many2one
    readonly=True related='picking_id.consignee_id' store=True string='Consignee'
  • ship_eta Datetime
    related='move_dest_id.date_expected' store=True string='ETA'
  • ship_etd Datetime
    related='date_expected' store=True string='ETD'
  • ship_from_address_id Many2one
    readonly=True related='picking_id.origin_address_id' store=True string='From Address'
  • ship_partner_id Many2one → res.partner
    comodel_name='res.partner' compute='_get_ship_partner_id' readonly=True store=True string='Partner'
  • ship_state Selection
    related='departure_shipment_id.state' store=True
  • ship_to_address_id Many2one
    related='picking_id.delivery_address_id' store=True string='To Address'
  • ship_transport_mode_id Many2one
    readonly=True related='departure_shipment_id.transport_mode_id' string='Transport by'
Public methods (4)
  • action_remove_from_shipment(self)
    @api.multi
  • copy(self, default=None)
    @api.multi
    Ensure an arrival move from Transit is not assigned to same picking when source move is split
  • split(self, move, qty, restrict_lot_id=False, restrict_partner_id=False)
    @api.model
    Propagate the splitting of a departure transit move to its arrival transit move Here, we remove picking_id to force arrival move to trigger _picking_assign for new move
  • write(self, values)
    @api.multi
REPOSITORY
REPOSITORYOCA/stock-logistics-transport
GIT
GIThttps://github.com/OCA/stock-logistics-transport.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/stock-logistics-transport/tree/8.0/stock_shipment_management
VERSION
VERSION 1.0.2
CATEGORY
CATEGORYTransportation
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Camptocamp
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Camptocamp
COMMITTERS
COMMITTERSYannick Vaucher, Alexandre Fayolle, Joël Grand-Guillaume, Stéphane Bidoul (ACSONE), Alexandre MOREAU
WEBSITE
WEBSITEhttp://www.camptocamp.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:11:26
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/stock-logistics-transport:
    - stock_route_transit
    - transport_information
    - sale_transport_multi_address
    - stock_transport_multi_address
    - purchase_transport_multi_address
odoo/odoo:
    - delivery
    - sale_stock
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web_kanban
    - web
    - web_kanban_sparkline
    - account_voucher
    - account
    - product
    - decimal_precision
    - report
    - analytic
    - board
    - edi
    - email_template
    - procurement
    - stock_account
    - stock
    - web_kanban_gauge
    - stock_dropshipping
    - purchase
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (15)
XML IDNameModelTypeStatus
purchase_order_form_2_in_transit_moves purchase.order.form purchase.order xpath Inherits purchase.purchase_order_2_stock_picking
view_create_shipment_plan shipment_plan_create_form shipment.plan.creator form New
view_move_transit_pipeline_search stock.move.transit.pipeline.search stock.move search New
view_move_transit_pipline_tree Stock Moves stock.move tree New
view_order_form sale.order.form sale.order h1 Inherits sale.view_order_form
view_shipment_carrier_setter Change Shipment Carrier shipment.carrier.setter form New
view_shipment_carrier_tracking_ref_setter Change Shipment Tracking Ref. shipment.carrier_tracking_ref.setter form New
view_shipment_consignee_setter Change Shipment Consignee shipment.consignee.setter form New
view_shipment_eta_setter Change Shipment ETA shipment.eta.setter form New
view_shipment_etd_setter Change Shipment ETD shipment.etd.setter form New
view_shipment_plan_filter shipment.plan.list.select shipment.plan search New
view_shipment_plan_form shipment.plan.form shipment.plan form New
view_shipment_plan_tree shipment.plan.tree shipment.plan tree New
view_shipment_to_address_setter Change Shipment To Address shipment.to_address.setter form New
view_shipment_transit_confirm Shipment Transit shipment.transit.confirm form New
Models touched (13)

New fields (1)
  • to_transit_moves_count Integer
    compute='_count_to_transit_moves'
Public methods (1)
  • action_open_to_transit_moves(self)
    @api.multi
    Open move list view of to transit moves

New fields (1)
  • to_transit_moves_count Integer
    compute='_count_to_transit_moves'
Public methods (1)
  • action_open_to_transit_moves(self)
    @api.multi
    Open move list view of to transit moves

New fields (1)
  • carrier_id Many2one → delivery.carrier
    help='Shipment carrier' args: 'delivery.carrier', 'Carrier'
Public methods (1)
  • set_value(self)
    @api.multi
    Changes the Shipment Carrier and update departure and arrival pickings

New fields (1)
  • carrier_tracking_ref Char
    args: 'Tracking Ref.'
Public methods (1)
  • set_value(self)
    @api.multi
    Changes the Shipment ETA and update arrival moves

New fields (1)
  • consignee_id Many2one → res.partner
    domain=[('is_consignee', '=', True)] help='Shipment consignee' args: 'res.partner', 'Consignee'
Public methods (1)
  • set_value(self)
    @api.multi
    Changes the Shipment Consignee and update departure and arrival pickings

New fields (1)
  • eta Datetime
    help='Up to date Estimated Time of Arrival' args: 'ETA'
Public methods (1)
  • set_value(self)
    @api.multi
    Changes the Shipment ETA and update arrival moves

New fields (1)
  • etd Datetime
    help='Up to date Estimated Time of Departure' args: 'ETD'
Public methods (1)
  • set_value(self)
    @api.multi
    Changes the Shipment ETD and update departure moves

New fields (25)
  • arrival_move_ids One2many → stock.move
    copy=False readonly=True args: 'stock.move', 'arrival_shipment_id', 'Arrival Moves'
  • arrival_picking_count Integer
    compute='_arrival_picking_count'
  • arrival_picking_ids One2many → stock.picking
    comodel_name='stock.picking' compute='_get_arrival_picking_ids' copy=False readonly=True string='Arrival Pickings'
  • carrier_id Many2one → delivery.carrier
    readonly=True track_visibility='onchange' args: 'delivery.carrier', 'Carrier'
  • carrier_tracking_ref Char
    readonly=True track_visibility='onchange' args: 'Tracking Ref.'
  • consignee_id Many2one → res.partner
    domain=[('is_consignee', '=', True)] readonly=True track_visibility='onchange' args: 'res.partner', 'Consignee'
  • departure_move_ids One2many → stock.move
    copy=False readonly=True args: 'stock.move', 'departure_shipment_id', 'Departure Moves'
  • departure_picking_count Integer
    compute='_departure_picking_count'
  • departure_picking_ids One2many → stock.picking
    comodel_name='stock.picking' compute='_get_departure_picking_ids' copy=False readonly=True string='Departure Pickings'
  • eta Datetime
    help='Up to date Estimated Time of Arrival' readonly=True track_visibility='onchange' args: 'ETA'
  • etd Datetime
    help='Up to date Estimated Time of Departure' readonly=True track_visibility='onchange' args: 'ETD'
  • from_address_id Many2one → res.partner
    readonly=True required=True args: 'res.partner', 'From Address'
  • initial_eta Datetime
    help='Initial Estimated Time of Arrival' readonly=True states={'draft': [('readonly', False)]} args: 'Initial ETA'
  • initial_etd Datetime
    help='Initial Estimated Time of Departure' readonly=True states={'draft': [('readonly', False)]} args: 'Initial ETD'
  • name Char
    copy=False default='/' readonly=True required=True args: 'Reference'
  • note Text
    readonly=True states={'draft': [('readonly', False)]} args: 'Description / Remarks'
  • po_state Selection
    related='purchase_id.state' selection=purchase.purchase_order.STATE_SELECTION string='PO State'
  • purchase_id Many2one → purchase.order
    readonly=True states={'draft': [('readonly', False)]} args: 'purchase.order', 'Purchase Order'
  • state Selection
    copy=False default='draft' required=True track_visibility='onchange' args: [('draft', 'Draft'), ('confirmed', 'Confirmed'), ('in_transit', 'In Transit'), ('done', 'Done'), ('cancel', 'Cancel')]
  • to_address_id Many2one → res.partner
    readonly=True required=True track_visibility='onchange' args: 'res.partner', 'To Address'
  • transport_mode_id Many2one → transport.mode
    readonly=True states={'draft': [('readonly', False)]} string='Transport by' args: 'transport.mode'
  • user_id Many2one → res.users
    default=<expr> readonly=True states={'draft': [('readonly', False)]} args: 'res.users', 'Responsible'
  • volume Float
    compute='_compute_volume' readonly=True store=True
  • weight Float
    compute='_compute_weights' readonly=True store=True
  • weight_net Float
    compute='_compute_weights' readonly=True
Public methods (12)
  • action_cancel(self)
    @api.multi
  • action_cancel_draft(self)
    @api.multi
  • action_confirm(self)
    @api.multi
  • action_done(self)
    @api.multi
  • action_transit(self)
    @api.multi
  • action_view_arrival_picking(self)
    @api.multi
  • action_view_departure_picking(self)
    @api.multi
  • button_action_transit(self)
    @api.multi
  • create(self, values)
    @api.model
  • has_done_moves(self)
    @api.multi
    Check if at least one departure move is done
  • is_departed(self)
    @api.multi
    Check if all departure moves are done
  • is_transit_done(self)
    @api.multi

New fields (8)
  • carrier_tracking_ref Char
    args: 'Tracking Ref.'
  • consignee_id Many2one → res.partner
    args: 'res.partner', 'Consignee'
  • from_address_id Many2one → res.partner
    readonly=True args: 'res.partner', 'From Address'
  • initial_eta Datetime
    help='Initial Estimated Time of Arrival' args: 'Initial ETA'
  • initial_etd Datetime
    help='Initial Estimated Time of Departure' args: 'Initial ETD'
  • move_ids One2many → stock.move
    comodel_name='stock.move' compute=<expr> string='Selected Moves'
  • shipment_id Many2one → shipment.plan
    domain="[('state', '=', 'draft'), ('from_address_id', '=', from_address_id), ('to_address_id', '=', to_address_id)]" help='Shipment to which moves will be added.\nOnly shipment in draft can be extended.' args: 'shipment.plan', 'Shipment'
  • to_address_id Many2one → res.partner
    readonly=True args: 'res.partner', 'To Address'
Public methods (3)
  • action_create_shipment(self)
    @api.multi
    Create the shipment
  • default_get(self, fields_list)
    @api.model
    Take the pricelist of the lrs by default. Show the available choice for the user.
  • onchange_shipment(self)
    @api.onchange('shipment_id')

New fields (1)
  • to_address_id Many2one → res.partner
    help='Shipment To Address' args: 'res.partner', 'To Address'
Public methods (1)
  • set_value(self)
    @api.multi
    Changes the Shipment To Address and update departure and arrival pickings

New fields (2)
  • shipment_id Many2one → shipment.plan
    default=<expr> args: 'shipment.plan', 'Shipment'
  • undone_move_ids One2many → stock.move
    comodel_name='stock.move' compute='_get_undone_move_ids' string='Selected Moves'
Public methods (2)
  • action_confirm(self)
    @api.multi
    Remove undone move from shipment when confirmed by the user
  • action_open_window(self)
    @api.multi

New fields (1)
  • shipment_id Many2one → shipment.plan
    default=<expr> args: 'shipment.plan', 'Shipment'
Public methods (0)

No public methods.

New fields (13)
  • arrival_shipment_id Many2one → shipment.plan
    readonly=True args: 'shipment.plan', 'Arrival shipment'
  • departure_shipment_id Many2one → shipment.plan
    readonly=True args: 'shipment.plan', 'Departure shipment'
  • product_volume Float
    readonly=True related='product_id.volume' store=True
  • ship_carrier_id Many2one
    readonly=True related='departure_shipment_id.carrier_id' store=True
  • ship_carrier_tracking_ref Char
    readonly=True related='departure_shipment_id.carrier_tracking_ref' string='Tracking Ref.'
  • ship_consignee_id Many2one
    readonly=True related='picking_id.consignee_id' store=True string='Consignee'
  • ship_eta Datetime
    related='move_dest_id.date_expected' store=True string='ETA'
  • ship_etd Datetime
    related='date_expected' store=True string='ETD'
  • ship_from_address_id Many2one
    readonly=True related='picking_id.origin_address_id' store=True string='From Address'
  • ship_partner_id Many2one → res.partner
    comodel_name='res.partner' compute='_get_ship_partner_id' readonly=True store=True string='Partner'
  • ship_state Selection
    related='departure_shipment_id.state' store=True
  • ship_to_address_id Many2one
    related='picking_id.delivery_address_id' store=True string='To Address'
  • ship_transport_mode_id Many2one
    readonly=True related='departure_shipment_id.transport_mode_id' string='Transport by'
Public methods (5)
  • action_cancel(self)
    @api.multi
    Forbid to cancel a shipment arrival move if it's departure move is not canceled. As dest_move are canceled before origin moves, we check that
  • action_remove_from_shipment(self)
    @api.multi
  • copy(self, default=None)
    @api.multi
    Ensure an arrival move from Transit is not assigned to same picking when source move is split
  • split(self, move, qty, restrict_lot_id=False, restrict_partner_id=False)
    @api.model
    Propagate the splitting of a departure transit move to its arrival transit move Here, we remove picking_id to force arrival move to trigger _picking_assign for new move
  • write(self, values)
    @api.multi