Repository
odoo/odoo · module folder
Module version
1.1
Category
Supply Chain/Inventory
Folder size
2.17 MB
License
LGPL-3
Application
No
Auto-installable
No
Website
None
Last tracking update
2026-08-20 10:12:45
Authors
Odoo S.A.
Maintainers
Odoo S.A.
Committers
Raphael Collet, Thibault Delavallée, Odoo Translation Bot, Arnold Moyaux, Julien Castiaux, Victor Feyens, William Henrotin, svs-odoo, Tiffany Chang (tic), Gorash, william-andre, David (dafr), John Laterre (jol), Ruben Gomes, Mathieu Walravens, Renaud Thiry, Louis Wicket (wil), Victor Piryns (pivi), Djamel Touati, Pieter Claeys (clpi), clesgow, Dylan Kiss (dyki), Arnaud Sibille, lase@odoo.com, Ethan Vincent, kcv-odoo, Louis Gobert, nihp-odoo, Harsh Shah, Arthur Nanson, Mohammad Abdulmoneim (abdu), djameltouati, Michaël Mattiello, MaximeNoirhomme, chha-odoo, plha-odoo, Krzysztof Magusiak (krma), rare-odoo, Ayush Modi, MohsinAli Masi, Merlin Guillaume, saurabh, Zachary (zavan), lase
Odoo dependencies
Python dependencies
None
System dependencies
None
Required by
l10n_mx_cfdi_comex, l10n_ro_stock_account_landed_cost, l10n_ro_stock_price_difference, mrp_landed_costs, mrp_subcontracting_landed_costs, project_stock_landed_costs
Description
Landed Costs Management
=======================
This module allows you to easily add extra costs on pickings and decide the split of these costs among their stock moves in order to take them into account in your stock valuation.
    

Code Analysis

Views touched (8)
XML IDNameModelTypeStatus
account_view_move_form_inherited account.view.move.form.inherited account.move form Inherits account.view_move_form
res_config_settings_view_form res.config.settings.view.form.inherit.stock.landed.costs res.config.settings form Inherits stock.res_config_settings_view_form
stock_landed_cost_view_kanban stock.landed.cost.kanban stock.landed.cost kanban New
view_product_landed_cost_form product.template.landed.cost.form product.template form Inherits account.product_template_form_view
view_stock_landed_cost_form stock.landed.cost.form stock.landed.cost form New
view_stock_landed_cost_search stock.landed.cost.search stock.landed.cost search New
view_stock_landed_cost_tree stock.landed.cost.list stock.landed.cost list New
view_stock_landed_cost_tree2 stock.landed.cost.list stock.landed.cost list New
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (10)

New fields (2)
  • landed_costs_ids One2many → stock.landed.cost
    string='Landed Costs' args: 'stock.landed.cost', 'vendor_bill_id'
  • landed_costs_visible Boolean
    compute='_compute_landed_costs_visible'
Public methods (2)
  • action_view_landed_costs(self)
  • button_create_landed_costs(self)
    Create a `stock.landed.cost` record associated to the account move of `self`, each `stock.landed.costs` lines mirroring the current `account.move.line` of self.

New fields (2)
  • is_landed_costs_line Boolean
  • product_type Selection
    readonly=True related='product_id.type'
Public methods (0)

No public methods.

New fields (2)
  • landed_cost_ok Boolean
    help='Indicates whether the product is a landed cost: when receiving a vendor bill, you can allocate this cost on preceding receipts.' args: 'Is a Landed Cost'
  • split_method_landed_cost Selection
    help='Default Split Method when used for Landed Cost' string='Default Split Method' args: SPLIT_METHOD
Public methods (1)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • lc_journal_id Many2one → account.journal
    args: 'account.journal'
Public methods (0)

No public methods.

New fields (1)
  • lc_journal_id Many2one → account.journal
    readonly=False related='company_id.lc_journal_id' string='Default Journal' args: 'account.journal'
Public methods (0)

No public methods.

New fields (14)
  • account_journal_id Many2one → account.journal
    default=<expr> required=True args: 'account.journal', 'Account Journal'
  • account_move_id Many2one → account.move
    copy=False index='btree_not_null' readonly=True args: 'account.move', 'Journal Entry'
  • amount_total Monetary
    compute='_compute_total_amount' store=True tracking=True args: 'Total'
  • company_id Many2one → res.company
    default=<expr> required=True string='Company' args: 'res.company'
  • cost_lines One2many → stock.landed.cost.lines
    copy=True args: 'stock.landed.cost.lines', 'cost_id', 'Cost Lines'
  • currency_id Many2one → res.currency
    related='company_id.currency_id' args: 'res.currency'
  • date Date
    copy=False default=fields.Date.context_today required=True tracking=True args: 'Date'
  • description Text
    args: 'Item Description'
  • name Char
    copy=False default=<expr> readonly=True tracking=True args: 'Name'
  • picking_ids Many2many → stock.picking
    copy=False string='Transfers' args: 'stock.picking'
  • state Selection
    copy=False default='draft' readonly=True tracking=True args: [('draft', 'Draft'), ('done', 'Posted'), ('cancel', 'Cancelled')], 'State'
  • target_model Selection
    copy=False default='picking' required=True string='Apply On' args: [('picking', 'Transfers')]
  • valuation_adjustment_lines One2many → stock.valuation.adjustment.lines
    args: 'stock.valuation.adjustment.lines', 'cost_id', 'Valuation Adjustments'
  • vendor_bill_id Many2one → account.move
    copy=False domain=[('move_type', '=', 'in_invoice')] index='btree_not_null' args: 'account.move', 'Vendor Bill'
Public methods (6)
  • button_cancel(self)
  • button_validate(self)
  • compute_landed_cost(self)
  • create(self, vals_list)
    @api.model_create_multi
  • get_valuation_lines(self)
  • unlink(self)

New fields (7)
  • account_id Many2one → account.account
    args: 'account.account', 'Account'
  • cost_id Many2one → stock.landed.cost
    index=True ondelete='cascade' required=True args: 'stock.landed.cost', 'Landed Cost'
  • currency_id Many2one → res.currency
    related='cost_id.currency_id' args: 'res.currency'
  • name Char
    args: 'Description'
  • price_unit Monetary
    required=True args: 'Cost'
  • product_id Many2one → product.product
    required=True args: 'product.product', 'Product'
  • split_method Selection
    help="Equal: Cost will be equally divided.\nBy Quantity: Cost will be divided according to product's quantity.\nBy Current cost: Cost will be divided according to product's current cost.\nBy Weight: Cost will be divided depending on its weight.\nBy Volume: Cost will be divided depending on its volume." required=True string='Split Method' args: SPLIT_METHOD
Public methods (1)
  • onchange_product_id(self)
    @api.onchange('product_id')

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (12)
  • additional_landed_cost Monetary
    args: 'Additional Landed Cost'
  • cost_id Many2one → stock.landed.cost
    index=True ondelete='cascade' required=True args: 'stock.landed.cost', 'Landed Cost'
  • cost_line_id Many2one → stock.landed.cost.lines
    readonly=True args: 'stock.landed.cost.lines', 'Cost Line'
  • currency_id Many2one → res.currency
    related='cost_id.company_id.currency_id' args: 'res.currency'
  • final_cost Monetary
    compute='_compute_final_cost' store=True args: 'New Value'
  • former_cost Monetary
    args: 'Original Value'
  • move_id Many2one → stock.move
    readonly=True args: 'stock.move', 'Stock Move'
  • name Char
    compute='_compute_name' store=True args: 'Description'
  • product_id Many2one → product.product
    required=True args: 'product.product', 'Product'
  • quantity Float
    default=1.0 digits=0 required=True args: 'Quantity'
  • volume Float
    default=1.0 digits='Volume' args: 'Volume'
  • weight Float
    default=1.0 digits='Stock Weight' args: 'Weight'
Public methods (0)

No public methods.

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…