Project Stock

project_stock
REPOSITORY
REPOSITORYOCA/project
GIT
GIThttps://github.com/OCA/project.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/project/tree/16.0/project_stock
VERSION
VERSION 2.0.3
CATEGORY
CATEGORYProject Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSGitHub, Víctor Martínez, Weblate, OCA-git-bot, oca-ci, RabbitJon-S73, sygel
WEBSITE
WEBSITEhttps://github.com/OCA/project
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:49
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - project
    - analytic
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - rating
    - resource
    - digest
    - stock
    - product
    - barcodes_gs1_nomenclature
    - barcodes
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (4)
XML IDNameModelTypeStatus
edit_project project.project.form project.project xpath Inherits project.edit_project
task_type_edit project.task.type.form project.task.type field Inherits project.task_type_edit
view_stock_move_raw_tree stock.move.raw.tree stock.move tree New
view_task_form2 project.task.form project.task xpath Inherits project.view_task_form2
Models touched (7)

New fields (2)
  • stock_move_id Many2one → stock.move
    comodel_name='stock.move' copy=False ondelete='cascade' string='Stock Move'
  • stock_task_id Many2one → project.task
    comodel_name='project.task' ondelete='cascade' string='Project Task'
Public methods (0)

No public methods.

New fields (4)
  • location_dest_id Many2one → stock.location
    check_company=True comodel_name='stock.location' help='Default location to which materials are consumed.' index=True readonly=False string='Destination Location'
  • location_id Many2one → stock.location
    check_company=True comodel_name='stock.location' help='Default location from which materials are consumed.' index=True readonly=False string='Source Location'
  • picking_type_id Many2one → stock.picking.type
    check_company=True comodel_name='stock.picking.type' domain="[('company_id', '=', company_id)]" index=True readonly=False string='Operation Type'
  • stock_analytic_date Date
    string='Analytic date'
Public methods (1)
  • write(self, vals)
    Update location information on pending moves when changed.

New fields (18)
  • allow_moves_action_assign Boolean
    compute='_compute_allow_moves_action_assign'
  • allow_moves_action_confirm Boolean
    compute='_compute_allow_moves_action_confirm'
  • done_stock_moves Boolean
    related='stage_id.done_stock_moves'
  • group_id Many2one → procurement.group
    comodel_name='procurement.group'
  • location_dest_id Many2one → stock.location
    check_company=True comodel_name='stock.location' index=True readonly=False string='Destination Location'
  • location_id Many2one → stock.location
    check_company=True comodel_name='stock.location' index=True readonly=False string='Source Location'
  • move_ids One2many → stock.move
    comodel_name='stock.move' copy=False domain=[('scrapped', '=', False)] inverse_name='raw_material_task_id' string='Stock Moves'
  • picking_type_id Many2one → stock.picking.type
    check_company=True comodel_name='stock.picking.type' domain="[('company_id', '=', company_id)]" index=True readonly=False string='Operation Type'
  • scrap_count Integer
    compute='_compute_scrap_move_count' string='Scrap Move'
  • scrap_ids One2many → stock.scrap
    comodel_name='stock.scrap' inverse_name='task_id' string='Scraps'
  • stock_analytic_account_id Many2one → account.analytic.account
    comodel_name='account.analytic.account' help='Move created will be assigned to this analytic account' string='Move Analytic Account'
  • stock_analytic_date Date
    string='Analytic date'
  • stock_analytic_distribution Json
    copy=True readonly=False args: 'Analytic Distribution'
  • stock_analytic_line_ids One2many → account.analytic.line
    comodel_name='account.analytic.line' inverse_name='stock_task_id' string='Analytic Lines'
  • stock_moves_is_locked Boolean
    default=True
  • stock_state Selection
    compute='_compute_stock_state' selection=[('pending', 'Pending'), ('confirmed', 'Confirmed'), ('assigned', 'Assigned'), ('done', 'Done'), ('cancel', 'Cancel')]
  • unreserve_visible Boolean
    compute='_compute_unreserve_visible' help='Technical field to check when we can unreserve' string='Allowed to Unreserve Inventory'
  • use_stock_moves Boolean
    related='stage_id.use_stock_moves'
Public methods (11)
  • action_assign(self)
  • action_cancel(self)
    Cancel the stock moves and remove the analytic lines created from stock moves when cancelling the task.
  • action_confirm(self)
  • action_done(self)
  • action_see_move_scrap(self)
  • action_toggle_stock_moves_is_locked(self)
  • button_scrap(self)
  • button_unreserve(self)
  • do_unreserve(self)
  • unlink(self)
  • write(self, vals)

New fields (2)
  • done_stock_moves Boolean
    help='If you check this box, when a task is in this state, you will not be able to add more stock moves but they can be viewed.'
  • use_stock_moves Boolean
    help='If you mark this check, when a task goes to this state, it will use stock moves'
Public methods (0)

No public methods.

New fields (4)
  • analytic_line_ids One2many → account.analytic.line
    comodel_name='account.analytic.line' inverse_name='stock_move_id' string='Analytic Lines'
  • raw_material_task_id Many2one → project.task
    check_company=True comodel_name='project.task' string='Task for material'
  • show_cancel_button_in_task Boolean
    compute='_compute_show_cancel_button_in_task'
  • task_id Many2one → project.task
    check_company=True comodel_name='project.task' string='Related Task'
Public methods (3)
  • action_cancel_from_task(self)
  • action_task_product_forecast_report(self)
  • default_get(self, fields_list)
    @api.model

New fields (1)
  • task_id Many2one → project.task
    comodel_name='project.task' compute='_compute_task_id' store=True string='Task'
Public methods (0)

No public methods.

New fields (1)
  • task_id Many2one → project.task
    check_company=True comodel_name='project.task' string='Task'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/project
GIT
GIThttps://github.com/OCA/project.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/project/tree/15.0/project_stock
VERSION
VERSION 1.0.6
CATEGORY
CATEGORYProject Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSVíctor Martínez, Weblate, OCA-git-bot, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/project
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:36
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - project
    - analytic
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - rating
    - resource
    - digest
    - stock
    - product
    - barcodes
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (4)
XML IDNameModelTypeStatus
edit_project project.project.form project.project xpath Inherits project.edit_project
task_type_edit project.task.type.form project.task.type field Inherits project.task_type_edit
view_stock_move_raw_tree stock.move.raw.tree stock.move tree New
view_task_form2 project.task.form project.task xpath Inherits project.view_task_form2
Models touched (7)

New fields (1)
  • stock_task_id Many2one → project.task
    comodel_name='project.task' ondelete='cascade' string='Project Task'
Public methods (0)

No public methods.

New fields (4)
  • location_dest_id Many2one → stock.location
    check_company=True comodel_name='stock.location' help='Default location to which materials are consumed.' index=True readonly=False string='Destination Location'
  • location_id Many2one → stock.location
    check_company=True comodel_name='stock.location' help='Default location from which materials are consumed.' index=True readonly=False string='Source Location'
  • picking_type_id Many2one → stock.picking.type
    check_company=True comodel_name='stock.picking.type' domain="[('company_id', '=', company_id)]" index=True readonly=False string='Operation Type'
  • stock_analytic_date Date
    string='Analytic date'
Public methods (1)
  • write(self, vals)
    Update location information on pending moves when changed.

New fields (18)
  • allow_moves_action_assign Boolean
    compute='_compute_allow_moves_action_assign'
  • allow_moves_action_confirm Boolean
    compute='_compute_allow_moves_action_confirm'
  • done_stock_moves Boolean
    related='stage_id.done_stock_moves'
  • group_id Many2one → procurement.group
    comodel_name='procurement.group'
  • location_dest_id Many2one → stock.location
    check_company=True comodel_name='stock.location' index=True readonly=False string='Destination Location'
  • location_id Many2one → stock.location
    check_company=True comodel_name='stock.location' index=True readonly=False string='Source Location'
  • move_ids One2many → stock.move
    comodel_name='stock.move' copy=False domain=[('scrapped', '=', False)] inverse_name='raw_material_task_id' string='Stock Moves'
  • picking_type_id Many2one → stock.picking.type
    check_company=True comodel_name='stock.picking.type' domain="[('company_id', '=', company_id)]" index=True readonly=False string='Operation Type'
  • scrap_count Integer
    compute='_compute_scrap_move_count' string='Scrap Move'
  • scrap_ids One2many → stock.scrap
    comodel_name='stock.scrap' inverse_name='task_id' string='Scraps'
  • stock_analytic_account_id Many2one → account.analytic.account
    comodel_name='account.analytic.account' help='Move created will be assigned to this analytic account' string='Move Analytic Account'
  • stock_analytic_date Date
    string='Analytic date'
  • stock_analytic_line_ids One2many → account.analytic.line
    comodel_name='account.analytic.line' inverse_name='stock_task_id' string='Analytic Lines'
  • stock_analytic_tag_ids Many2many → account.analytic.tag
    column1='project_task_id' column2='account_analytic_tag_id' comodel_name='account.analytic.tag' relation='account_analytic_tag_project_task_stock_rel' string='Move Analytic Tags'
  • stock_moves_is_locked Boolean
    default=True
  • stock_state Selection
    compute='_compute_stock_state' selection=[('pending', 'Pending'), ('confirmed', 'Confirmed'), ('assigned', 'Assigned'), ('done', 'Done'), ('cancel', 'Cancel')]
  • unreserve_visible Boolean
    compute='_compute_unreserve_visible' help='Technical field to check when we can unreserve' string='Allowed to Unreserve Inventory'
  • use_stock_moves Boolean
    related='stage_id.use_stock_moves'
Public methods (11)
  • action_assign(self)
  • action_cancel(self)
    Cancel the stock moves and remove the analytic lines created from stock moves when cancelling the task.
  • action_confirm(self)
  • action_done(self)
  • action_see_move_scrap(self)
  • action_toggle_stock_moves_is_locked(self)
  • button_scrap(self)
  • button_unreserve(self)
  • do_unreserve(self)
  • unlink(self)
  • write(self, vals)

New fields (2)
  • done_stock_moves Boolean
    help='If you check this box, when a task is in this state, you will not be able to add more stock moves but they can be viewed.'
  • use_stock_moves Boolean
    help='If you mark this check, when a task goes to this state, it will use stock moves'
Public methods (0)

No public methods.

New fields (2)
  • raw_material_task_id Many2one → project.task
    check_company=True comodel_name='project.task' string='Task for material'
  • task_id Many2one → project.task
    check_company=True comodel_name='project.task' string='Related Task'
Public methods (1)
  • default_get(self, fields_list)
    @api.model

New fields (1)
  • task_id Many2one → project.task
    comodel_name='project.task' compute='_compute_task_id' store=True string='Task'
Public methods (0)

No public methods.

New fields (1)
  • task_id Many2one → project.task
    check_company=True comodel_name='project.task' string='Task'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/project
GIT
GIThttps://github.com/OCA/project.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/project/tree/14.0/project_stock
VERSION
VERSION 1.1.4
CATEGORY
CATEGORYProject Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSOCA Transbot, Víctor Martínez, oca-travis, Weblate, OCA-git-bot, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/project
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:41:02
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - project
    - analytic
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - rating
    - resource
    - digest
    - stock
    - product
    - barcodes
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (4)
XML IDNameModelTypeStatus
edit_project project.project.form project.project xpath Inherits project.edit_project
task_type_edit project.task.type.form project.task.type field Inherits project.task_type_edit
view_stock_move_raw_tree stock.move.raw.tree stock.move tree New
view_task_form2 project.task.form project.task xpath Inherits project.view_task_form2
Models touched (7)

New fields (1)
  • stock_task_id Many2one → project.task
    comodel_name='project.task' ondelete='cascade' string='Project Task'
Public methods (0)

No public methods.

New fields (4)
  • location_dest_id Many2one → stock.location
    check_company=True comodel_name='stock.location' help='Default location to which materials are consumed.' index=True readonly=False string='Destination Location'
  • location_id Many2one → stock.location
    check_company=True comodel_name='stock.location' help='Default location from which materials are consumed.' index=True readonly=False string='Source Location'
  • picking_type_id Many2one → stock.picking.type
    check_company=True comodel_name='stock.picking.type' domain="[('company_id', '=', company_id)]" index=True readonly=False string='Operation Type'
  • stock_analytic_date Date
    string='Analytic date'
Public methods (1)
  • write(self, vals)
    Update location information on pending moves when changed.

New fields (18)
  • allow_moves_action_assign Boolean
    compute='_compute_allow_moves_action_assign'
  • allow_moves_action_confirm Boolean
    compute='_compute_allow_moves_action_confirm'
  • done_stock_moves Boolean
    related='stage_id.done_stock_moves'
  • group_id Many2one → procurement.group
    comodel_name='procurement.group'
  • location_dest_id Many2one → stock.location
    check_company=True comodel_name='stock.location' index=True readonly=False string='Destination Location'
  • location_id Many2one → stock.location
    check_company=True comodel_name='stock.location' index=True readonly=False string='Source Location'
  • move_ids One2many → stock.move
    comodel_name='stock.move' copy=False domain=[('scrapped', '=', False)] inverse_name='raw_material_task_id' string='Stock Moves'
  • picking_type_id Many2one → stock.picking.type
    check_company=True comodel_name='stock.picking.type' domain="[('company_id', '=', company_id)]" index=True readonly=False string='Operation Type'
  • scrap_count Integer
    compute='_compute_scrap_move_count' string='Scrap Move'
  • scrap_ids One2many → stock.scrap
    comodel_name='stock.scrap' inverse_name='task_id' string='Scraps'
  • stock_analytic_account_id Many2one → account.analytic.account
    comodel_name='account.analytic.account' help='Move created will be assigned to this analytic account' string='Move Analytic Account'
  • stock_analytic_date Date
    string='Analytic date'
  • stock_analytic_line_ids One2many → account.analytic.line
    comodel_name='account.analytic.line' inverse_name='stock_task_id' string='Analytic Lines'
  • stock_analytic_tag_ids Many2many → account.analytic.tag
    comodel_name='account.analytic.tag' string='Move Analytic Tags'
  • stock_moves_is_locked Boolean
    default=True
  • stock_state Selection
    compute='_compute_stock_state' selection=[('pending', 'Pending'), ('confirmed', 'Confirmed'), ('assigned', 'Assigned'), ('done', 'Done'), ('cancel', 'Cancel')]
  • unreserve_visible Boolean
    compute='_compute_unreserve_visible' help='Technical field to check when we can unreserve' string='Allowed to Unreserve Inventory'
  • use_stock_moves Boolean
    related='stage_id.use_stock_moves'
Public methods (11)
  • action_assign(self)
  • action_cancel(self)
    Cancel the stock moves and remove the analytic lines created from stock moves when cancelling the task.
  • action_confirm(self)
  • action_done(self)
  • action_see_move_scrap(self)
  • action_toggle_stock_moves_is_locked(self)
  • button_scrap(self)
  • button_unreserve(self)
  • do_unreserve(self)
  • unlink(self)
  • write(self, vals)

New fields (2)
  • done_stock_moves Boolean
    help='If you check this box, when a task is in this state, you will not be able to add more stock moves but they can be viewed.'
  • use_stock_moves Boolean
    help='If you mark this check, when a task goes to this state, it will use stock moves'
Public methods (0)

No public methods.

New fields (2)
  • raw_material_task_id Many2one → project.task
    check_company=True comodel_name='project.task' string='Task for material'
  • task_id Many2one → project.task
    check_company=True comodel_name='project.task' string='Related Task'
Public methods (2)
  • default_get(self, fields_list)
    @api.model
  • onchange_product_id(self)
    @api.onchange('product_id')
    It is necessary to overwrite the name to prevent set product name from being auto-defined.

New fields (1)
  • task_id Many2one → project.task
    comodel_name='project.task' compute='_compute_task_id' store=True string='Task'
Public methods (0)

No public methods.

New fields (1)
  • task_id Many2one → project.task
    check_company=True comodel_name='project.task' string='Task'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/project
GIT
GIThttps://github.com/OCA/project.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/project/tree/13.0/project_stock
VERSION
VERSION 2.2.3
CATEGORY
CATEGORYProject Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSOCA Transbot, Víctor Martínez, oca-travis, Weblate, OCA-git-bot, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/project
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:15
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - project
    - analytic
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - rating
    - resource
    - digest
    - stock
    - product
    - barcodes
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (4)
XML IDNameModelTypeStatus
edit_project project.project.form project.project xpath Inherits project.edit_project
task_type_edit project.task.type.form project.task.type field Inherits project.task_type_edit
view_stock_move_raw_tree stock.move.raw.tree stock.move tree New
view_task_form2 project.task.form project.task xpath Inherits project.view_task_form2
Models touched (7)

New fields (1)
  • stock_task_id Many2one → project.task
    comodel_name='project.task' string='Project Task'
Public methods (0)

No public methods.

New fields (4)
  • location_dest_id Many2one → stock.location
    check_company=True comodel_name='stock.location' help='Default location to which materials are consumed.' index=True readonly=False string='Destination Location'
  • location_id Many2one → stock.location
    check_company=True comodel_name='stock.location' help='Default location from which materials are consumed.' index=True readonly=False string='Source Location'
  • picking_type_id Many2one → stock.picking.type
    check_company=True comodel_name='stock.picking.type' domain="[('company_id', '=', company_id)]" index=True readonly=False string='Operation Type'
  • stock_analytic_date Date
    string='Analytic date'
Public methods (1)
  • write(self, vals)
    Update location information on pending moves when changed.

New fields (18)
  • allow_moves_action_assign Boolean
    compute='_compute_allow_moves_action_assign'
  • allow_moves_action_confirm Boolean
    compute='_compute_allow_moves_action_confirm'
  • done_stock_moves Boolean
    related='stage_id.done_stock_moves'
  • group_id Many2one → procurement.group
    comodel_name='procurement.group'
  • location_dest_id Many2one → stock.location
    check_company=True comodel_name='stock.location' index=True readonly=False string='Destination Location'
  • location_id Many2one → stock.location
    check_company=True comodel_name='stock.location' index=True readonly=False string='Source Location'
  • move_ids One2many → stock.move
    comodel_name='stock.move' copy=False domain=[('scrapped', '=', False)] inverse_name='raw_material_task_id' string='Stock Moves'
  • picking_type_id Many2one → stock.picking.type
    check_company=True comodel_name='stock.picking.type' domain="[('company_id', '=', company_id)]" index=True readonly=False string='Operation Type'
  • scrap_count Integer
    compute='_compute_scrap_move_count' string='Scrap Move'
  • scrap_ids One2many → stock.scrap
    comodel_name='stock.scrap' inverse_name='task_id' string='Scraps'
  • stock_analytic_account_id Many2one → account.analytic.account
    comodel_name='account.analytic.account' help='Move created will be assigned to this analytic account' string='Move Analytic Account'
  • stock_analytic_date Date
    string='Analytic date'
  • stock_analytic_line_ids One2many → account.analytic.line
    comodel_name='account.analytic.line' inverse_name='stock_task_id' string='Analytic Lines'
  • stock_analytic_tag_ids Many2many → account.analytic.tag
    comodel_name='account.analytic.tag' string='Move Analytic Tags'
  • stock_moves_is_locked Boolean
    default=True
  • stock_state Selection
    compute='_compute_stock_state' selection=[('pending', 'Pending'), ('confirmed', 'Confirmed'), ('assigned', 'Assigned'), ('done', 'Done'), ('cancel', 'Cancel')]
  • unreserve_visible Boolean
    compute='_compute_unreserve_visible' help='Technical field to check when we can unreserve' string='Allowed to Unreserve Inventory'
  • use_stock_moves Boolean
    related='stage_id.use_stock_moves'
Public methods (11)
  • action_assign(self)
  • action_cancel(self)
    Cancel the stock moves and remove the analytic lines created from stock moves when cancelling the task.
  • action_confirm(self)
  • action_done(self)
  • action_see_move_scrap(self)
  • action_toggle_stock_moves_is_locked(self)
  • button_scrap(self)
  • button_unreserve(self)
  • do_unreserve(self)
  • unlink(self)
  • write(self, vals)

New fields (2)
  • done_stock_moves Boolean
    help='If you check this box, when a task is in this state, you will not be able to add more stock moves but they can be viewed.'
  • use_stock_moves Boolean
    help='If you mark this check, when a task goes to this state, it will use stock moves'
Public methods (0)

No public methods.

New fields (2)
  • raw_material_task_id Many2one → project.task
    check_company=True comodel_name='project.task' string='Task for material'
  • task_id Many2one → project.task
    check_company=True comodel_name='project.task' string='Related Task'
Public methods (2)
  • default_get(self, fields_list)
    @api.model
  • onchange_product_id(self)
    @api.onchange('product_id')
    It is necessary to overwrite the name to prevent set product name from being auto-defined.

New fields (1)
  • task_id Many2one → project.task
    comodel_name='project.task' compute='_compute_task_id' store=True string='Task'
Public methods (0)

No public methods.

New fields (1)
  • task_id Many2one → project.task
    check_company=True comodel_name='project.task' string='Task'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/project
GIT
GIThttps://github.com/OCA/project.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/project/tree/12.0/project_stock
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYProject Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, Marcel Savegnago
WEBSITE
WEBSITEhttps://github.com/OCA/project
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:29:20
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - hr_timesheet
    - hr
    - base_setup
    - base
    - web
    - mail
    - bus
    - web_tour
    - resource
    - analytic
    - decimal_precision
    - uom
    - project
    - portal
    - http_routing
    - rating
    - digest
    - stock
    - product
    - barcodes
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (4)
XML IDNameModelTypeStatus
edit_project project.project.form project.project xpath Inherits project.edit_project
task_type_edit project.task.type.form project.task.type field Inherits project.task_type_edit
view_stock_move_raw_tree stock.move.raw.tree stock.move tree New
view_task_form2 project.task.form project.task xpath Inherits project.view_task_form2
Models touched (7)

New fields (1)
  • stock_task_id Many2one → project.task
    comodel_name='project.task' ondelete='cascade' string='Project Task'
Public methods (0)

No public methods.

New fields (4)
  • location_dest_id Many2one → stock.location
    check_company=True comodel_name='stock.location' help='Default location to which materials are consumed.' index=True readonly=False string='Destination Location'
  • location_id Many2one → stock.location
    check_company=True comodel_name='stock.location' help='Default location from which materials are consumed.' index=True readonly=False string='Source Location'
  • picking_type_id Many2one → stock.picking.type
    check_company=True comodel_name='stock.picking.type' domain="[('warehouse_id.company_id', '=', company_id)]" index=True readonly=False string='Operation Type'
  • stock_analytic_date Date
    string='Analytic date'
Public methods (1)
  • write(self, vals)
    @api.multi
    Update location information on pending moves when changed.

New fields (18)
  • allow_moves_action_assign Boolean
    compute='_compute_allow_moves_action_assign'
  • allow_moves_action_confirm Boolean
    compute='_compute_allow_moves_action_confirm'
  • done_stock_moves Boolean
    related='stage_id.done_stock_moves'
  • group_id Many2one → procurement.group
    comodel_name='procurement.group'
  • location_dest_id Many2one → stock.location
    check_company=True comodel_name='stock.location' index=True readonly=False string='Destination Location'
  • location_id Many2one → stock.location
    check_company=True comodel_name='stock.location' index=True readonly=False string='Source Location'
  • move_ids One2many → stock.move
    comodel_name='stock.move' copy=False domain=[('scrapped', '=', False)] inverse_name='raw_material_task_id' string='Stock Moves'
  • picking_type_id Many2one → stock.picking.type
    check_company=True comodel_name='stock.picking.type' domain="[('company_id', '=', company_id)]" index=True readonly=False string='Operation Type'
  • scrap_count Integer
    compute='_compute_scrap_move_count' string='Scrap Move'
  • scrap_ids One2many → stock.scrap
    comodel_name='stock.scrap' inverse_name='task_id' string='Scraps'
  • stock_analytic_account_id Many2one → account.analytic.account
    comodel_name='account.analytic.account' help='Move created will be assigned to this analytic account' string='Move Analytic Account'
  • stock_analytic_date Date
    string='Analytic date'
  • stock_analytic_line_ids One2many → account.analytic.line
    comodel_name='account.analytic.line' inverse_name='stock_task_id' string='Analytic Lines'
  • stock_analytic_tag_ids Many2many → account.analytic.tag
    comodel_name='account.analytic.tag' string='Move Analytic Tags'
  • stock_moves_is_locked Boolean
    default=True
  • stock_state Selection
    compute='_compute_stock_state' selection=[('pending', 'Pending'), ('confirmed', 'Confirmed'), ('assigned', 'Assigned'), ('done', 'Done'), ('cancel', 'Cancel')]
  • unreserve_visible Boolean
    compute='_compute_unreserve_visible' help='Technical field to check when we can unreserve' string='Allowed to Unreserve Inventory'
  • use_stock_moves Boolean
    related='stage_id.use_stock_moves'
Public methods (11)
  • action_assign(self)
  • action_cancel(self)
    Cancel the stock moves and remove the analytic lines created from stock moves when cancelling the task.
  • action_confirm(self)
  • action_done(self)
  • action_see_move_scrap(self)
  • action_toggle_stock_moves_is_locked(self)
  • button_scrap(self)
  • button_unreserve(self)
  • do_unreserve(self)
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (2)
  • done_stock_moves Boolean
    help='If you check this box, when a task is in this state, you will not be able to add more stock moves but they can be viewed.'
  • use_stock_moves Boolean
    help='If you mark this check, when a task goes to this state, it will use stock moves'
Public methods (0)

No public methods.

New fields (3)
  • product_uom_category_id Many2one
    related='product_id.uom_id.category_id'
  • raw_material_task_id Many2one → project.task
    check_company=True comodel_name='project.task' string='Task for material'
  • task_id Many2one → project.task
    check_company=True comodel_name='project.task' string='Related Task'
Public methods (2)
  • default_get(self, fields_list)
    @api.model
  • onchange_product_id(self)
    @api.onchange('product_id')
    It is necessary to overwrite the name to prevent set product name from being auto-defined.

New fields (1)
  • task_id Many2one → project.task
    comodel_name='project.task' compute='_compute_task_id' store=True string='Task'
Public methods (0)

No public methods.

New fields (1)
  • task_id Many2one → project.task
    check_company=True comodel_name='project.task' string='Task'
Public methods (0)

No public methods.