diff --git a/stock_request_analytic/__init__.py b/stock_request_analytic/__init__.py index a9e337226..0650744f6 100644 --- a/stock_request_analytic/__init__.py +++ b/stock_request_analytic/__init__.py @@ -1,2 +1 @@ - from . import models diff --git a/stock_request_analytic/__manifest__.py b/stock_request_analytic/__manifest__.py index a695d829c..e335c02e3 100644 --- a/stock_request_analytic/__manifest__.py +++ b/stock_request_analytic/__manifest__.py @@ -7,13 +7,9 @@ "version": "12.0.1.0.1", "license": "LGPL-3", "website": "https://github.com/stock-logistics-warehouse", - "author": "Eficent, " - "Odoo Community Association (OCA)", + "author": "Eficent, " "Odoo Community Association (OCA)", "category": "Analytic", - "depends": [ - "stock_request", - "stock_analytic", - ], + "depends": ["stock_request", "stock_analytic",], "data": [ "security/ir.model.access.csv", "views/stock_request_views.xml", diff --git a/stock_request_analytic/models/analytic.py b/stock_request_analytic/models/analytic.py index 423cfb144..fbdf7b632 100644 --- a/stock_request_analytic/models/analytic.py +++ b/stock_request_analytic/models/analytic.py @@ -5,8 +5,11 @@ from odoo import fields, models class AccountAnalyticAccount(models.Model): - _inherit = 'account.analytic.account' + _inherit = "account.analytic.account" stock_request_ids = fields.One2many( - comodel_name='stock.request', inverse_name='analytic_account_id', - string='Stock Requests', copy=False) + comodel_name="stock.request", + inverse_name="analytic_account_id", + string="Stock Requests", + copy=False, + ) diff --git a/stock_request_analytic/models/stock_request.py b/stock_request_analytic/models/stock_request.py index 16dd4b24b..658fb45cc 100644 --- a/stock_request_analytic/models/stock_request.py +++ b/stock_request_analytic/models/stock_request.py @@ -9,15 +9,22 @@ class StockRequest(models.Model): _inherit = "stock.request" analytic_account_id = fields.Many2one( - 'account.analytic.account', string='Analytic Account') - analytic_tag_ids = fields.Many2many( - 'account.analytic.tag', string='Analytic Tags') + "account.analytic.account", string="Analytic Account" + ) + analytic_tag_ids = fields.Many2many("account.analytic.tag", string="Analytic Tags") - @api.constrains('analytic_account_id') + @api.constrains("analytic_account_id") def _check_analytic_company_constrains(self): - if any(r.company_id and r.analytic_account_id and - r.analytic_account_id.company_id != r.company_id for r in self): + if any( + r.company_id + and r.analytic_account_id + and r.analytic_account_id.company_id != r.company_id + for r in self + ): raise ValidationError( - _('You cannot link a analytic account ' - 'to a stock request that belongs to ' - 'another company.')) + _( + "You cannot link a analytic account " + "to a stock request that belongs to " + "another company." + ) + ) diff --git a/stock_request_analytic/models/stock_request_order.py b/stock_request_analytic/models/stock_request_order.py index fc838ce89..29f2199c2 100644 --- a/stock_request_analytic/models/stock_request_order.py +++ b/stock_request_analytic/models/stock_request_order.py @@ -5,45 +5,43 @@ from odoo import api, fields, models class StockRequestOrder(models.Model): - _inherit = 'stock.request.order' + _inherit = "stock.request.order" - analytic_count = fields.Integer( - compute='_compute_analytic_ids', - readonly=True, - ) + analytic_count = fields.Integer(compute="_compute_analytic_ids", readonly=True,) analytic_account_ids = fields.One2many( - comodel_name='account.analytic.account', - compute='_compute_analytic_ids', - string='Analytic Accounts', + comodel_name="account.analytic.account", + compute="_compute_analytic_ids", + string="Analytic Accounts", readonly=True, ) analytic_tag_ids = fields.One2many( - comodel_name='account.analytic.tag', - compute='_compute_analytic_ids', - string='Analytic Tags', + comodel_name="account.analytic.tag", + compute="_compute_analytic_ids", + string="Analytic Tags", readonly=True, ) - @api.depends('stock_request_ids') + @api.depends("stock_request_ids") def _compute_analytic_ids(self): for req in self.sudo(): req.analytic_account_ids = req.stock_request_ids.mapped( - 'analytic_account_id') - req.analytic_tag_ids = req.stock_request_ids.mapped( - 'analytic_tag_ids') + "analytic_account_id" + ) + req.analytic_tag_ids = req.stock_request_ids.mapped("analytic_tag_ids") req.analytic_count = len(req.analytic_account_ids) @api.multi def action_view_analytic(self): - action = self.env.ref( - 'analytic.action_account_analytic_account_form').read()[0] - analytics = self.mapped('analytic_account_ids') + action = self.env.ref("analytic.action_account_analytic_account_form").read()[0] + analytics = self.mapped("analytic_account_ids") if len(analytics) > 1: - action['domain'] = [('id', 'in', analytics.ids)] + action["domain"] = [("id", "in", analytics.ids)] elif analytics: - action['views'] = [ - (self.env.ref( - 'analytic.action_account_analytic_account_form').id, - 'form')] - action['res_id'] = analytics.id + action["views"] = [ + ( + self.env.ref("analytic.action_account_analytic_account_form").id, + "form", + ) + ] + action["res_id"] = analytics.id return action diff --git a/stock_request_analytic/models/stock_rule.py b/stock_request_analytic/models/stock_rule.py index fbdedd03a..ccae11747 100644 --- a/stock_request_analytic/models/stock_rule.py +++ b/stock_request_analytic/models/stock_rule.py @@ -7,15 +7,29 @@ from odoo import models class ProcurementRule(models.Model): _inherit = "stock.rule" - def _get_stock_move_values(self, product_id, product_qty, product_uom, - location_id, name, origin, values, group_id): + def _get_stock_move_values( + self, + product_id, + product_qty, + product_uom, + location_id, + name, + origin, + values, + group_id, + ): res = super(ProcurementRule, self)._get_stock_move_values( - product_id, product_qty, product_uom, location_id, name, origin, - values, group_id) - if values.get('stock_request_id'): - stock_request = self.env['stock.request'].browse( - values['stock_request_id'] - ) + product_id, + product_qty, + product_uom, + location_id, + name, + origin, + values, + group_id, + ) + if values.get("stock_request_id"): + stock_request = self.env["stock.request"].browse(values["stock_request_id"]) analytic_account = stock_request.analytic_account_id analytic_tags = stock_request.analytic_tag_ids res.update( diff --git a/stock_request_analytic/tests/__init__.py b/stock_request_analytic/tests/__init__.py index 7142d2e80..fd35f0ff6 100644 --- a/stock_request_analytic/tests/__init__.py +++ b/stock_request_analytic/tests/__init__.py @@ -1,2 +1 @@ - from . import test_stock_request_analytic diff --git a/stock_request_analytic/tests/test_stock_request_analytic.py b/stock_request_analytic/tests/test_stock_request_analytic.py index 10b995a47..a8c804a80 100644 --- a/stock_request_analytic/tests/test_stock_request_analytic.py +++ b/stock_request_analytic/tests/test_stock_request_analytic.py @@ -1,86 +1,98 @@ # Copyright 2017 Eficent Business and IT Consulting Services S.L. # License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl-3.0). -from odoo.addons.stock_request.tests import test_stock_request from odoo import fields from odoo.exceptions import ValidationError +from odoo.addons.stock_request.tests import test_stock_request + class TestStockRequestAnalytic(test_stock_request.TestStockRequest): def setUp(self): super(TestStockRequestAnalytic, self).setUp() - self.analytic_model = self.env['account.analytic.account'] - self.analytic = self.analytic_model.create({'name': 'Pizza'}) - self.analytic2 = self.analytic_model.create({ - 'name': 'Pizza', - 'company_id': self.company_2.id, - }) - self.demand_loc = self.env['stock.location'].create({ - 'name': 'demand_loc', - 'location_id': self.warehouse.lot_stock_id.id, - 'usage': 'internal', - }) - self.demand_route = self.env['stock.location.route'].create({ - 'name': 'Transfer', - 'product_categ_selectable': False, - 'product_selectable': True, - 'company_id': self.main_company.id, - 'sequence': 10, - }) - self.pizza = self._create_product('PZ', 'Pizza', False) - self.demand_rule = self.env['stock.rule'].create({ - 'name': 'Transfer', - 'route_id': self.demand_route.id, - 'location_src_id': self.warehouse.lot_stock_id.id, - 'location_id': self.demand_loc.id, - 'action': 'pull', - 'picking_type_id': self.warehouse.int_type_id.id, - 'procure_method': 'make_to_stock', - 'warehouse_id': self.warehouse.id, - 'company_id': self.main_company.id, - 'propagate': 'False', - }) + self.analytic_model = self.env["account.analytic.account"] + self.analytic = self.analytic_model.create({"name": "Pizza"}) + self.analytic2 = self.analytic_model.create( + {"name": "Pizza", "company_id": self.company_2.id,} + ) + self.demand_loc = self.env["stock.location"].create( + { + "name": "demand_loc", + "location_id": self.warehouse.lot_stock_id.id, + "usage": "internal", + } + ) + self.demand_route = self.env["stock.location.route"].create( + { + "name": "Transfer", + "product_categ_selectable": False, + "product_selectable": True, + "company_id": self.main_company.id, + "sequence": 10, + } + ) + self.pizza = self._create_product("PZ", "Pizza", False) + self.demand_rule = self.env["stock.rule"].create( + { + "name": "Transfer", + "route_id": self.demand_route.id, + "location_src_id": self.warehouse.lot_stock_id.id, + "location_id": self.demand_loc.id, + "action": "pull", + "picking_type_id": self.warehouse.int_type_id.id, + "procure_method": "make_to_stock", + "warehouse_id": self.warehouse.id, + "company_id": self.main_company.id, + "propagate": "False", + } + ) self.pizza.route_ids = [(6, 0, self.demand_route.ids)] def prepare_order_request_analytic(self, aa, company, analytic_tags=None): expected_date = fields.Datetime.now() analytic_tags = analytic_tags or self.env["account.analytic.tag"] vals = { - 'company_id': company.id, - 'warehouse_id': self.warehouse.id, - 'location_id': self.demand_loc.id, - 'expected_date': expected_date, - 'stock_request_ids': [(0, 0, { - 'product_id': self.pizza.id, - 'product_uom_id': self.pizza.uom_id.id, - 'product_uom_qty': 5.0, - 'analytic_account_id': aa.id, - 'analytic_tag_ids': [(4, tag.id) for tag in analytic_tags], - 'company_id': company.id, - 'warehouse_id': self.warehouse.id, - 'location_id': self.demand_loc.id, - 'expected_date': expected_date, - })] + "company_id": company.id, + "warehouse_id": self.warehouse.id, + "location_id": self.demand_loc.id, + "expected_date": expected_date, + "stock_request_ids": [ + ( + 0, + 0, + { + "product_id": self.pizza.id, + "product_uom_id": self.pizza.uom_id.id, + "product_uom_qty": 5.0, + "analytic_account_id": aa.id, + "analytic_tag_ids": [(4, tag.id) for tag in analytic_tags], + "company_id": company.id, + "warehouse_id": self.warehouse.id, + "location_id": self.demand_loc.id, + "expected_date": expected_date, + }, + ) + ], } return vals def test_stock_analytic(self): - analytic_tag = self.env.ref('analytic.tag_contract') + analytic_tag = self.env.ref("analytic.tag_contract") vals = self.prepare_order_request_analytic( - self.analytic, self.main_company, analytic_tags=analytic_tag) - order = self.env['stock.request.order'].create(vals) + self.analytic, self.main_company, analytic_tags=analytic_tag + ) + order = self.env["stock.request.order"].create(vals) req = order.stock_request_ids order.action_confirm() - self.assertEqual( - req.move_ids.mapped('analytic_account_id'), self.analytic) - self.assertEqual( - req.move_ids.mapped('analytic_tag_ids'), analytic_tag) + self.assertEqual(req.move_ids.mapped("analytic_account_id"), self.analytic) + self.assertEqual(req.move_ids.mapped("analytic_tag_ids"), analytic_tag) self.assertEqual(order.analytic_count, 1) action = order.action_view_analytic() - self.assertTrue(action['res_id'], self.analytic.id) + self.assertTrue(action["res_id"], self.analytic.id) def test_company(self): with self.assertRaises(ValidationError): vals = self.prepare_order_request_analytic( - self.analytic2, self.main_company) - self.env['stock.request.order'].create(vals) + self.analytic2, self.main_company + ) + self.env["stock.request.order"].create(vals) diff --git a/stock_request_analytic/views/analytic_views.xml b/stock_request_analytic/views/analytic_views.xml index d51cc3f31..c6baaa39e 100644 --- a/stock_request_analytic/views/analytic_views.xml +++ b/stock_request_analytic/views/analytic_views.xml @@ -1,20 +1,19 @@ - + analytic.order.form account.analytic.account - + - + - diff --git a/stock_request_analytic/views/stock_request_order_views.xml b/stock_request_analytic/views/stock_request_order_views.xml index ea7abe191..0886b0106 100644 --- a/stock_request_analytic/views/stock_request_order_views.xml +++ b/stock_request_analytic/views/stock_request_order_views.xml @@ -1,30 +1,39 @@ - + - stock.request.order.form - stock_request_analytic stock.request.order - + - + - - + groups="analytic.group_analytic_accounting" + > + - - + + - diff --git a/stock_request_analytic/views/stock_request_views.xml b/stock_request_analytic/views/stock_request_views.xml index cbf71bcc6..ce90080b2 100644 --- a/stock_request_analytic/views/stock_request_views.xml +++ b/stock_request_analytic/views/stock_request_views.xml @@ -1,18 +1,22 @@ - + - stock.request.form stock.request - + - - + + -