diff --git a/account_move_line_stock_info/README.rst b/account_move_line_stock_info/README.rst index b0021ad3f..cc71283c4 100644 --- a/account_move_line_stock_info/README.rst +++ b/account_move_line_stock_info/README.rst @@ -13,11 +13,11 @@ Usage ===== * The stock manager can check the journal items by accessing to 'Inventory > -Reports > Stock moves'. + Reports > Stock moves'. * A user belonging to the group 'Accounting & Finance/Adviser' can review the - details of a move that is associated to a journal item through - 'Invoicing > Adviser > Journal Entries (or Journal items)'. + details of a move that is associated to a journal item through + 'Invoicing > Adviser > Journal Entries (or Journal items)'. .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas :alt: Try me on Runbot diff --git a/stock_cycle_count/models/stock_cycle_count.py b/stock_cycle_count/models/stock_cycle_count.py index ebd8f86d0..c545f5e2d 100644 --- a/stock_cycle_count/models/stock_cycle_count.py +++ b/stock_cycle_count/models/stock_cycle_count.py @@ -12,9 +12,10 @@ class StockCycleCount(models.Model): _description = "Stock Cycle Counts" _inherit = 'mail.thread' - @api.one + @api.depends('stock_adjustment_ids') def _count_inventory_adj(self): - self.inventory_adj_count = len(self.stock_adjustment_ids) + for rec in self: + rec.inventory_adj_count = len(rec.stock_adjustment_ids) @api.model def create(self, vals): @@ -57,9 +58,9 @@ class StockCycleCount(models.Model): comodel_name='res.company', string='Company', required=True, default=_company_get, readonly=True) - @api.one + @api.multi def do_cancel(self): - self.state = 'cancelled' + self.write({'state': 'cancelled'}) @api.model def _prepare_inventory_adjustment(self): @@ -70,15 +71,16 @@ class StockCycleCount(models.Model): 'exclude_sublocation': True } - @api.one + @api.multi def action_create_inventory_adjustment(self): - if self.state != 'draft': - raise UserError(_( - "You can only confirm cycle counts in state 'Planned'." - )) - data = self._prepare_inventory_adjustment() - self.env['stock.inventory'].create(data) - self.state = 'open' + for rec in self: + if rec.state != 'draft': + raise UserError(_( + "You can only confirm cycle counts in state 'Planned'." + )) + data = rec._prepare_inventory_adjustment() + rec.env['stock.inventory'].create(data) + rec.state = 'open' return True @api.multi diff --git a/stock_cycle_count/models/stock_cycle_count_rule.py b/stock_cycle_count/models/stock_cycle_count_rule.py index 6a952ce8c..7af288ca6 100644 --- a/stock_cycle_count/models/stock_cycle_count_rule.py +++ b/stock_cycle_count/models/stock_cycle_count_rule.py @@ -1,4 +1,4 @@ -# -*- coding: utf-8 -*- +# coding: utf-8 # Copyright 2017 Eficent Business and IT Consulting Services S.L. # (http://www.eficent.com) # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). @@ -13,9 +13,10 @@ class StockCycleCountRule(models.Model): _name = 'stock.cycle.count.rule' _description = "Stock Cycle Counts Rules" - @api.one + @api.multi def _compute_currency(self): - self.currency_id = self.env.user.company_id.currency_id + for rec in self: + rec.currency_id = self.env.user.company_id.currency_id @api.model def _selection_rule_types(self): @@ -25,23 +26,23 @@ class StockCycleCountRule(models.Model): ('accuracy', _('Minimum Accuracy')), ('zero', _('Zero Confirmation'))] - @api.one @api.constrains('rule_type', 'warehouse_ids') def _check_zero_rule(self): - if self.rule_type == 'zero' and len(self.warehouse_ids) > 1: - raise UserError( - _('Zero confirmation rules can only have one warehouse ' - 'assigned.') - ) - if self.rule_type == 'zero': - zero_rule = self.search([ - ('rule_type', '=', 'zero'), - ('warehouse_ids', '=', self.warehouse_ids.id)]) - if len(zero_rule) > 1: + for rec in self: + if rec.rule_type == 'zero' and len(rec.warehouse_ids) > 1: raise UserError( - _('You can only have one zero confirmation rule per ' - 'warehouse.') + _('Zero confirmation rules can only have one warehouse ' + 'assigned.') ) + if rec.rule_type == 'zero': + zero_rule = self.search([ + ('rule_type', '=', 'zero'), + ('warehouse_ids', '=', rec.warehouse_ids.id)]) + if len(zero_rule) > 1: + err = _( + 'Warehouses can only have one zero-confirmation rule.' + ) + raise UserError(err) @api.onchange('rule_type') def _get_rule_description(self): diff --git a/stock_cycle_count/models/stock_location.py b/stock_cycle_count/models/stock_location.py index bf040984a..93886b082 100644 --- a/stock_cycle_count/models/stock_location.py +++ b/stock_cycle_count/models/stock_location.py @@ -20,19 +20,26 @@ except (ImportError, IOError) as err: class StockLocation(models.Model): _inherit = 'stock.location' - @api.one + @api.multi def _compute_loc_accuracy(self): - history = self.env['stock.inventory'].search([ - ('location_id', '=', self.id), ('state', '=', 'done')]) - history = history.sorted(key=lambda r: r.write_date, reverse=True) - if history: - wh_id = self.get_warehouse(self) - wh = self.env['stock.warehouse'].browse(wh_id) - if len(history) > wh.counts_for_accuracy_qty: - self.loc_accuracy = mean(history[:wh.counts_for_accuracy_qty]. - mapped('inventory_accuracy')) - else: - self.loc_accuracy = mean(history.mapped('inventory_accuracy')) + for rec in self: + history = self.env['stock.inventory'].search( + [('location_id', '=', rec.id), + ('state', '=', 'done'), + ], + order='write_date DESC' + ) + if history: + wh_id = rec.get_warehouse(rec) + wh = self.env['stock.warehouse'].browse(wh_id) + if len(history) > wh.counts_for_accuracy_qty: + rec.loc_accuracy = mean( + history[:wh.counts_for_accuracy_qty]. + mapped('inventory_accuracy')) + else: + rec.loc_accuracy = mean( + history.mapped('inventory_accuracy') + ) zero_confirmation_disabled = fields.Boolean( string='Disable Zero Confirmations', @@ -56,26 +63,27 @@ class StockLocation(models.Model): domain = [('location_id', '=', self.id)] return domain - @api.one + @api.multi def check_zero_confirmation(self): - if not self.zero_confirmation_disabled: - wh_id = self.get_warehouse(self) - wh = self.env['stock.warehouse'].browse(wh_id) - rule_model = self.env['stock.cycle.count.rule'] - zero_rule = rule_model.search([ - ('rule_type', '=', 'zero'), - ('warehouse_ids', '=', wh.id)]) - if zero_rule: - quants = self.env['stock.quant'].search( - self._get_zero_confirmation_domain()) - if not quants: - self.create_zero_confirmation_cycle_count() + rule_model = self.env['stock.cycle.count.rule'] + for rec in self: + if not rec.zero_confirmation_disabled: + wh_id = rec.get_warehouse(rec) + wh = self.env['stock.warehouse'].browse(wh_id) + zero_rule = rule_model.search([ + ('rule_type', '=', 'zero'), + ('warehouse_ids', '=', wh.id)]) + if zero_rule: + quants = self.env['stock.quant'].search( + rec._get_zero_confirmation_domain()) + if not quants: + rec.create_zero_confirmation_cycle_count() def create_zero_confirmation_cycle_count(self): date = datetime.today().strftime(DEFAULT_SERVER_DATETIME_FORMAT) wh_id = self.get_warehouse(self) date_horizon = self.env['stock.warehouse'].browse( - wh_id).get_horizon_date()[0].strftime( + wh_id).get_horizon_date().strftime( DEFAULT_SERVER_DATETIME_FORMAT) counts_planned = self.env['stock.cycle.count'].search([ ('date_deadline', '<', date_horizon), ('state', '=', 'draft'), diff --git a/stock_cycle_count/models/stock_warehouse.py b/stock_cycle_count/models/stock_warehouse.py index 453045b29..d31efa1b4 100644 --- a/stock_cycle_count/models/stock_warehouse.py +++ b/stock_cycle_count/models/stock_warehouse.py @@ -28,8 +28,9 @@ class StockWarehouse(models.Model): help='Number of latest inventories used to calculate location ' 'accuracy') - @api.one + @api.multi def get_horizon_date(self): + self.ensure_one() date = datetime.today() delta = timedelta(self.cycle_count_planning_horizon) date_horizon = date + delta @@ -62,11 +63,15 @@ class StockWarehouse(models.Model): ('rule_type', '!=', 'zero'), ('warehouse_ids', '=', self.id)]) return rules - @api.one + @api.multi def 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 ''' + for rec in self: + rec._do_compute_cycle_count_rules() + + def _do_compute_cycle_count_rules(self): proposed_cycle_counts = [] rules = self._cycle_count_rules_to_compute() for rule in rules: diff --git a/stock_demand_estimate/wizards/stock_demand_estimate_wizard.py b/stock_demand_estimate/wizards/stock_demand_estimate_wizard.py index ebab92e02..7c3b2eb82 100644 --- a/stock_demand_estimate/wizards/stock_demand_estimate_wizard.py +++ b/stock_demand_estimate/wizards/stock_demand_estimate_wizard.py @@ -150,12 +150,12 @@ class DemandEstimateWizard(models.TransientModel): comodel_name="product.product", string="Products") - @api.one @api.constrains('date_start', 'date_end') def _check_start_end_dates(self): - if self.date_start > self.date_end: - raise ValidationError(_( - 'The start date cannot be later than the end date.')) + for rec in self: + if rec.date_start > rec.date_end: + raise ValidationError(_( + 'The start date cannot be later than the end date.')) @api.multi def _prepare_demand_estimate_sheet(self): diff --git a/stock_inventory_chatter/README.rst b/stock_inventory_chatter/README.rst index 0b94573b9..fb221f9c3 100644 --- a/stock_inventory_chatter/README.rst +++ b/stock_inventory_chatter/README.rst @@ -49,4 +49,4 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -To contribute to this module, please visit https://odoo-community.org. \ No newline at end of file +To contribute to this module, please visit https://odoo-community.org. diff --git a/stock_inventory_discrepancy/models/stock_inventory.py b/stock_inventory_discrepancy/models/stock_inventory.py index 28af0aea9..897754c53 100644 --- a/stock_inventory_discrepancy/models/stock_inventory.py +++ b/stock_inventory_discrepancy/models/stock_inventory.py @@ -17,13 +17,14 @@ class StockInventory(models.Model): ('pending', 'Pending to Approve'), ('done', 'Validated')] - @api.one @api.depends('line_ids.product_qty', 'line_ids.theoretical_qty') def _compute_over_discrepancy_line_count(self): - lines = self.line_ids - self.over_discrepancy_line_count = sum( - d.discrepancy_percent > d.discrepancy_threshold - for d in lines) + for rec in self: + lines = rec.line_ids.filtered( + lambda line: + line.discrepancy_percent > line.discrepancy_threshold + ) + rec.over_discrepancy_line_count = len(lines) state = fields.Selection( selection=INVENTORY_STATE_SELECTION, @@ -57,15 +58,16 @@ class StockInventory(models.Model): 'this action.') ) - @api.one + @api.multi def action_done(self): - if self.over_discrepancy_line_count and self.line_ids.filtered( - lambda t: t.discrepancy_threshold > 0.0): - if self.env.context.get('normal_view', False): - self.action_over_discrepancies() - return True - else: - self._check_group_inventory_validation_always() + for rec in self: + if rec.over_discrepancy_line_count and rec.line_ids.filtered( + lambda t: t.discrepancy_threshold > 0.0): + if self.env.context.get('normal_view', False): + rec.action_over_discrepancies() + return True + else: + rec._check_group_inventory_validation_always() return super(StockInventory, self).action_done() @api.multi diff --git a/stock_inventory_discrepancy/models/stock_inventory_line.py b/stock_inventory_discrepancy/models/stock_inventory_line.py index b13e99d43..a57e28e70 100644 --- a/stock_inventory_discrepancy/models/stock_inventory_line.py +++ b/stock_inventory_discrepancy/models/stock_inventory_line.py @@ -9,26 +9,29 @@ from openerp import api, fields, models class StockInventoryLine(models.Model): _inherit = 'stock.inventory.line' - @api.one + @api.depends('product_qty', 'theoretical_qty') def _compute_discrepancy(self): - self.discrepancy_qty = self.product_qty - self.theoretical_qty - if self.theoretical_qty: - self.discrepancy_percent = 100 * abs( - (self.product_qty - self.theoretical_qty) / - self.theoretical_qty) - elif not self.theoretical_qty and self.product_qty: - self.discrepancy_percent = 100.0 + for rec in self: + rec.discrepancy_qty = rec.product_qty - rec.theoretical_qty + if rec.theoretical_qty: + rec.discrepancy_percent = 100 * abs( + (rec.product_qty - rec.theoretical_qty) / + rec.theoretical_qty) + elif not rec.theoretical_qty and rec.product_qty: + rec.discrepancy_percent = 100.0 - @api.one + @api.multi def _get_discrepancy_threshold(self): - wh_id = self.location_id.get_warehouse(self.location_id) - wh = self.env['stock.warehouse'].browse(wh_id) - if self.location_id.discrepancy_threshold > 0.0: - self.discrepancy_threshold = self.location_id.discrepancy_threshold - elif wh.discrepancy_threshold > 0.0: - self.discrepancy_threshold = wh.discrepancy_threshold - else: - self.discrepancy_threshold = False + for rec in self: + wh_id = rec.location_id.get_warehouse(rec.location_id) + wh = self.env['stock.warehouse'].browse(wh_id) + if rec.location_id.discrepancy_threshold > 0.0: + rec.discrepancy_threshold = \ + rec.location_id.discrepancy_threshold + elif wh.discrepancy_threshold > 0.0: + rec.discrepancy_threshold = wh.discrepancy_threshold + else: + rec.discrepancy_threshold = False discrepancy_qty = fields.Float( string='Discrepancy', diff --git a/stock_inventory_exclude_sublocation/models/stock_inventory.py b/stock_inventory_exclude_sublocation/models/stock_inventory.py index af4299dc8..6bdf89789 100644 --- a/stock_inventory_exclude_sublocation/models/stock_inventory.py +++ b/stock_inventory_exclude_sublocation/models/stock_inventory.py @@ -35,6 +35,9 @@ class StockInventory(models.Model): domain += ' and package_id = %s' args += (inventory.package_id.id,) + # disable error about SQL injection as the code here is generating + # a vulnerability + # pylint: disable = E8103 self.env.cr.execute(''' SELECT product_id, sum(qty) as product_qty, location_id, lot_id as prod_lot_id, package_id, owner_id as partner_id diff --git a/stock_inventory_verification_request/models/stock_slot_verification_request.py b/stock_inventory_verification_request/models/stock_slot_verification_request.py index a200494d7..316615566 100644 --- a/stock_inventory_verification_request/models/stock_slot_verification_request.py +++ b/stock_inventory_verification_request/models/stock_slot_verification_request.py @@ -16,13 +16,15 @@ class SlotVerificationRequest(models.Model): 'stock.slot.verification.request') or '' return super(SlotVerificationRequest, self).create(vals) - @api.one + @api.depends('involved_move_ids') def _count_involved_moves(self): - self.involved_move_count = len(self.involved_move_ids) + for rec in self: + rec.involved_move_count = len(rec.involved_move_ids) - @api.one + @api.depends('involved_inv_line_ids') def _count_involved_inv_lines(self): - self.involved_inv_line_count = len(self.involved_inv_line_ids) + for rec in self: + rec.involved_inv_line_count = len(rec.involved_inv_line_ids) name = fields.Char(string='Name', readonly=True) inventory_id = fields.Many2one(comodel_name='stock.inventory', @@ -60,20 +62,17 @@ class SlotVerificationRequest(models.Model): string='Involved Inventory Lines') involved_inv_line_count = fields.Integer(compute=_count_involved_inv_lines) - @api.model def _get_involved_moves_domain(self): domain = [('product_id', '=', self.product_id.id), '|', ('location_id', '=', self.location_id.id), ('location_dest_id', '=', self.location_id.id)] return domain - @api.model def _get_involved_lines_domain(self): domain = [('product_id', '=', self.product_id.id), ('location_id', '=', self.location_id.id)] return domain - @api.model def _get_involved_lines_and_locations(self): involved_moves = self.env['stock.move'].search( self._get_involved_moves_domain()) @@ -81,23 +80,24 @@ class SlotVerificationRequest(models.Model): self._get_involved_lines_domain()) return involved_moves, involved_lines - @api.one + @api.multi def action_confirm(self): - self.state = 'open' - involved_moves, involved_lines = \ - self._get_involved_lines_and_locations() - self.involved_move_ids = involved_moves - self.involved_inv_line_ids = involved_lines + for rec in self: + rec.state = 'open' + involved_moves, involved_lines = \ + rec._get_involved_lines_and_locations() + rec.involved_move_ids = involved_moves + rec.involved_inv_line_ids = involved_lines return True - @api.one + @api.multi def action_cancel(self): - self.state = 'cancelled' + self.write({'state': 'cancelled'}) return True - @api.one + @api.multi def action_solved(self): - self.state = 'done' + self.write({'state': 'done'}) return True @api.multi diff --git a/stock_inventory_verification_request/views/stock_inventory_view.xml b/stock_inventory_verification_request/views/stock_inventory_view.xml index f8ccffdcc..2f007a93b 100644 --- a/stock_inventory_verification_request/views/stock_inventory_view.xml +++ b/stock_inventory_verification_request/views/stock_inventory_view.xml @@ -7,7 +7,7 @@ Inventory form view - SVR extension stock.inventory - + diff --git a/stock_location_area_data/README.rst b/stock_location_area_data/README.rst index 9d6249f8a..be6819a9c 100644 --- a/stock_location_area_data/README.rst +++ b/stock_location_area_data/README.rst @@ -52,4 +52,4 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -To contribute to this module, please visit https://odoo-community.org. \ No newline at end of file +To contribute to this module, please visit https://odoo-community.org. diff --git a/stock_mts_mto_rule/tests/test_mto_mts_route.py b/stock_mts_mto_rule/tests/test_mto_mts_route.py index f603b74c3..d54343b81 100644 --- a/stock_mts_mto_rule/tests/test_mto_mts_route.py +++ b/stock_mts_mto_rule/tests/test_mto_mts_route.py @@ -1,3 +1,4 @@ +# coding: utf-8 # Author: Florian da Costa # Copyright 2015 Akretion # diff --git a/stock_quant_manual_assign/views/stock_move_view.xml b/stock_quant_manual_assign/views/stock_move_view.xml index c015de1aa..873802d2e 100644 --- a/stock_quant_manual_assign/views/stock_move_view.xml +++ b/stock_quant_manual_assign/views/stock_move_view.xml @@ -31,4 +31,4 @@ - \ No newline at end of file + diff --git a/stock_quant_manual_assign/wizard/assign_manual_quants_view.xml b/stock_quant_manual_assign/wizard/assign_manual_quants_view.xml index df8288b0e..cd5c28c80 100644 --- a/stock_quant_manual_assign/wizard/assign_manual_quants_view.xml +++ b/stock_quant_manual_assign/wizard/assign_manual_quants_view.xml @@ -33,4 +33,4 @@ - \ No newline at end of file +