Repository
OCA/stock-logistics-warehouse · module folder · Try on Runboat
Module version
1.0.3
Category
Warehouse Management
Folder size
2.35 MB
License
AGPL-3
Application
No
Auto-installable
No
Website
https://github.com/OCA/stock-logistics-warehouse
Last tracking update
2026-08-07 08:42:50
Authors
Odoo Community Association (OCA), ForgeFlow
Maintainers
Odoo Community Association (OCA), ForgeFlow
Committers
Víctor Martínez, Weblate, ThiagoMForgeFlow, Do Anh Duy, OCA-git-bot, oca-ci, Arnau
Odoo dependencies
Python dependencies
None
System dependencies
None
Required by
None
Description
This module provides the capability to execute a cycle count strategy in
a warehouse through different rules defined by the user. Cycle count is
an alternative to full wall-to-wall physical inventories in which little
portions (stock locations) of the stock are selected to count on a
regular basis.

The system propose locations in which to perform a inventory adjustment
every day based on a set of rules defined for the warehouse. In addition
the system can propose Zero-Confirmations which are simple and
opportunistic counts to check whether a locations has actually became
empty or not.

With this strategy it is possible to:

- Remove the need to perform full physical inventories and to stop the
  production in the warehouse.
- Measure the accuracy of the inventory records and improve it.
- Correct inventory errors earlier and prevent them to become bigger.

Code Analysis

Views touched (17)
XML IDNameModelTypeStatus
report_cyclecount report_cyclecount ir.ui.view qweb New
res_config_settings_view_form_cycle_adjustment res.config.settings.view.form.inherit.cycle.adjustment res.config.settings form Inherits stock.res_config_settings_view_form
stock_cycle_count_form_view stock.cycle.count.form stock.cycle.count form New
stock_cycle_count_rule_form_view stock.cycle.count.rule.form stock.cycle.count.rule form New
stock_cycle_count_rule_tree_view stock.cycle.count.rule.list stock.cycle.count.rule list New
stock_cycle_count_search_view stock.cycle.count.search stock.cycle.count search New
stock_cycle_count_tree_view stock.cycle.count.list stock.cycle.count list New
stock_location_accuracy stock_location_accuracy ir.ui.view qweb New
view_inventory_filter stock.inventory.filter - stock_cycle_count stock.inventory search Inherits stock_inventory.stock_inventory_search_view
view_inventory_form Inventory form view - cycle count extension stock.inventory form Inherits stock_inventory.view_inventory_group_form
view_inventory_graph stock.inventory.graph stock.inventory graph New
view_inventory_pivot stock.inventory.pivot stock.inventory pivot New
view_inventory_tree Inventory list view - cycle count extension stock.inventory tree Inherits stock_inventory.view_inventory_group_tree
view_location_form Location form - cycle count extension stock.location form Inherits stock.view_location_form
view_stock_move_line_form Stock Move Line Form - cycle count extension stock.move.line form Inherits stock.view_move_line_form
view_stock_move_line_tree Stock Move Line List - cycle count extension stock.move.line tree Inherits stock_inventory.view_stock_move_line_inventory_tree
view_warehouse_form Warehouse form - cycle count extension stock.warehouse form Inherits stock.view_warehouse
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (11)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • auto_start_inventory_from_cycle_count Boolean
    help='If enabled, confirming a Cycle Count will start the related Inventory Adjustment.' string='Auto Start Inventory Adjustment from Cycle Count'
  • inventory_adjustment_counted_quantities Selection
    help='If enabled, confirming a Cycle Count will start the related Inventory Adjustment.' selection=[('counted', 'Default to stock on hand'), ('zero', 'Default to zero')] string='Inventory Adjustment Counted quantities from Cycle Count'
Public methods (0)

No public methods.

New fields (2)
  • auto_start_inventory_from_cycle_count Boolean
    help='If enabled, confirming a Cycle Count will start the related Inventory Adjustment.' readonly=False related='company_id.auto_start_inventory_from_cycle_count' string='Auto Start Inventory Adjustment from Cycle Count'
  • inventory_adjustment_counted_quantities Selection
    help='If enabled, confirming a Cycle Count will start the related Inventory Adjustment.' readonly=False related='company_id.inventory_adjustment_counted_quantities' string='Inventory Adjustment Counted quantities from Cycle Count'
Public methods (0)

No public methods.

New fields (11)
  • automatic_deadline_date Date
    string='Automatic Required Date' tracking=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • cycle_count_rule_id Many2one → stock.cycle.count.rule
    comodel_name='stock.cycle.count.rule' required=True string='Cycle count rule' tracking=True
  • date_deadline Date
    compute='_compute_date_deadline' inverse='_inverse_date_deadline' store=True string='Required Date' tracking=True
  • inventory_adj_count Integer
    compute='_compute_inventory_adj_count'
  • location_id Many2one → stock.location
    comodel_name='stock.location' domain="[('company_id', '=', company_id)]" required=True string='Location'
  • manual_deadline_date Date
    string='Manual Required Date' tracking=True
  • name Char
  • responsible_id Many2one → res.users
    comodel_name='res.users' string='Assigned to' tracking=True
  • state Selection
    default='draft' selection=[('draft', 'Planned'), ('open', 'Execution'), ('cancelled', 'Cancelled'), ('done', 'Done')] tracking=True
  • stock_adjustment_ids One2many → stock.inventory
    comodel_name='stock.inventory' inverse_name='cycle_count_id' string='Inventory Adjustment' tracking=True
Public methods (4)
  • action_create_inventory_adjustment(self)
  • action_view_inventory(self)
  • create(self, vals_list)
    @api.model_create_multi
  • do_cancel(self)

New fields (12)
  • accuracy_threshold Float
    digits=(3, 2) string='Minimum Accuracy Threshold'
  • active Boolean
    default=True
  • apply_in Selection
    default='warehouse' selection=[('warehouse', 'Selected warehouses'), ('location', 'Selected Location Zones.')] string='Apply this rule in:'
  • currency_id Many2one → res.currency
    comodel_name='res.currency' compute='_compute_currency_id' string='Currency'
  • location_ids Many2many → stock.location
    column1='rule_id' column2='location_id' comodel_name='stock.location' relation='location_cycle_count_rule_rel' string='Zones where applied'
  • name Char
    required=True
  • periodic_count_period Integer
    string='Period in days'
  • periodic_qty_per_period Integer
    default=1 string='Counts per period'
  • rule_description Char
    compute='_compute_rule_description'
  • rule_type Selection
    required=True selection='_selection_rule_types' string='Type of rule'
  • turnover_inventory_value_threshold Float
  • warehouse_ids Many2many → stock.warehouse
    column1='rule_id' column2='warehouse_id' comodel_name='stock.warehouse' compute='_compute_warehouse_ids' readonly=False relation='warehouse_cycle_count_rule_rel' store=True string='Warehouses where applied'
Public methods (1)
  • compute_rule(self, locs)

New fields (4)
  • cycle_count_id Many2one → stock.cycle.count
    comodel_name='stock.cycle.count' ondelete='restrict' string='Stock Cycle Count'
  • inventory_accuracy Float
    aggregator='avg' default=False digits=(3, 2) store=True string='Accuracy'
  • prefill_counted_quantity Selection
    default='counted' help='Allows to start with a pre-filled counted quantity for each lines or with all counted quantities set to zero.' selection=[('counted', 'Default to stock on hand'), ('zero', 'Default to zero')] string='Counted Quantities'
  • responsible_id Many2one
    compute='_compute_responsible_id' inverse='_inverse_responsible_id' readonly=False store=True tracking=True
Public methods (5)
  • action_force_done(self)
  • action_state_to_done(self)
  • action_state_to_in_progress(self)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (4)
  • cycle_count_disabled Boolean
    help='Define whether the location is going to be cycle counted.' string='Exclude from Cycle Count'
  • loc_accuracy Float
    compute='_compute_loc_accuracy' digits=(3, 2) string='Inventory Accuracy'
  • qty_variance_inventory_threshold Float
    string='Acceptable Inventory Quantity Variance Threshold'
  • zero_confirmation_disabled Boolean
    help='Define whether this location will trigger a zero-confirmation validation when a rule for its warehouse is defined to perform zero-confirmations.' string='Disable Zero Confirmations'
Public methods (3)
  • action_accuracy_stats(self)
  • check_zero_confirmation(self)
  • create_zero_confirmation_cycle_count(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • counted_qty Float
    string='Counted Quantity'
  • line_accuracy Float
    string='Accuracy'
  • theoretical_qty Float
    string='Theoretical Quantity'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • counts_for_accuracy_qty Integer
    default=1 help='Number of latest inventories used to calculate location accuracy' string='Inventories for location accuracy calculation'
  • cycle_count_planning_horizon Integer
    help='Cycle Count planning horizon in days. Only the counts inside the horizon will be created.' string='Cycle Count Planning Horizon (in days)'
  • cycle_count_rule_ids Many2many → stock.cycle.count.rule
    column1='warehouse_id' column2='rule_id' comodel_name='stock.cycle.count.rule' relation='warehouse_cycle_count_rule_rel' string='Cycle Count Rules'
Public methods (3)
  • action_compute_cycle_count_rules(self)
    Apply the rule in all the sublocations of a given warehouse(s) and returns a list with required dates for the cycle count of each location
  • cron_cycle_count(self)
    @api.model
  • get_horizon_date(self)

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Status
Open migration PR — not merged yet for this version
CI status
checks failing
Open since
267 days ago
Last activity
120 days ago
Repository
OCA/stock-logistics-warehouse
Pull request
[17.0][MIG] stock_cycle_count: Migration to 17.0 (#2475)