summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnold Moyaux <arm@odoo.com>2019-08-14 13:56:15 +0000
committerArnold Moyaux <arm@odoo.com>2019-08-19 15:03:59 +0000
commit5d809fd6b48008711b494d887fc97ca60635587b (patch)
treeeff500b6067f1e518d1747f42cd3737c2ff2e95c
parenta684372fdd4247553978d893a354eec01dfad288 (diff)
[MOV] purchase_mrp_subcontracting -> mrp_subcontracting_account
-rw-r--r--addons/mrp_subcontracting/__manifest__.py6
-rw-r--r--addons/mrp_subcontracting/models/__init__.py1
-rw-r--r--addons/mrp_subcontracting/models/product.py (renamed from addons/purchase_mrp_subcontracting/models/product.py)0
-rw-r--r--addons/mrp_subcontracting/views/supplier_info_views.xml (renamed from addons/purchase_mrp_subcontracting/views/supplier_info_views.xml)0
-rw-r--r--addons/mrp_subcontracting_account/__init__.py (renamed from addons/purchase_mrp_subcontracting/__init__.py)0
-rw-r--r--addons/mrp_subcontracting_account/__manifest__.py (renamed from addons/purchase_mrp_subcontracting/__manifest__.py)10
-rw-r--r--addons/mrp_subcontracting_account/models/__init__.py (renamed from addons/purchase_mrp_subcontracting/models/__init__.py)1
-rw-r--r--addons/mrp_subcontracting_account/models/stock_picking.py25
-rw-r--r--addons/mrp_subcontracting_account/tests/__init__.py (renamed from addons/purchase_mrp_subcontracting/tests/__init__.py)5
-rw-r--r--addons/mrp_subcontracting_account/tests/test_subcontracting_account.py58
-rw-r--r--addons/purchase_mrp_subcontracting/i18n/purchase_mrp_subcontracting.pot37
-rw-r--r--addons/purchase_mrp_subcontracting/models/stock_picking.py16
-rw-r--r--addons/purchase_mrp_subcontracting/tests/test_purchase_subcontracting.py112
13 files changed, 91 insertions, 180 deletions
diff --git a/addons/mrp_subcontracting/__manifest__.py b/addons/mrp_subcontracting/__manifest__.py
index 840ba29f9ee..2a3152636f9 100644
--- a/addons/mrp_subcontracting/__manifest__.py
+++ b/addons/mrp_subcontracting/__manifest__.py
@@ -11,12 +11,12 @@
'depends': ['mrp'],
'data': [
'data/mrp_subcontracting_data.xml',
+ 'views/mrp_bom_views.xml',
+ 'views/res_partner_views.xml',
'views/stock_warehouse_views.xml',
'views/stock_move_views.xml',
'views/stock_picking_views.xml',
- 'views/res_partner_views.xml',
- 'views/mrp_bom_views.xml',
- 'views/res_partner_views.xml',
+ 'views/supplier_info_views.xml',
],
'demo': [
'data/mrp_subcontracting_demo.xml',
diff --git a/addons/mrp_subcontracting/models/__init__.py b/addons/mrp_subcontracting/models/__init__.py
index 3e55733a730..8dddd8d9090 100644
--- a/addons/mrp_subcontracting/models/__init__.py
+++ b/addons/mrp_subcontracting/models/__init__.py
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
from . import mrp_bom
+from . import product
from . import res_company
from . import res_partner
from . import stock_move
diff --git a/addons/purchase_mrp_subcontracting/models/product.py b/addons/mrp_subcontracting/models/product.py
index 88e969cc24b..88e969cc24b 100644
--- a/addons/purchase_mrp_subcontracting/models/product.py
+++ b/addons/mrp_subcontracting/models/product.py
diff --git a/addons/purchase_mrp_subcontracting/views/supplier_info_views.xml b/addons/mrp_subcontracting/views/supplier_info_views.xml
index 796f4a41d98..796f4a41d98 100644
--- a/addons/purchase_mrp_subcontracting/views/supplier_info_views.xml
+++ b/addons/mrp_subcontracting/views/supplier_info_views.xml
diff --git a/addons/purchase_mrp_subcontracting/__init__.py b/addons/mrp_subcontracting_account/__init__.py
index dc5e6b693d1..dc5e6b693d1 100644
--- a/addons/purchase_mrp_subcontracting/__init__.py
+++ b/addons/mrp_subcontracting_account/__init__.py
diff --git a/addons/purchase_mrp_subcontracting/__manifest__.py b/addons/mrp_subcontracting_account/__manifest__.py
index 5fca667e462..45e10b05fdb 100644
--- a/addons/purchase_mrp_subcontracting/__manifest__.py
+++ b/addons/mrp_subcontracting_account/__manifest__.py
@@ -1,18 +1,14 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
{
- 'name': 'Purchase and Subcontracting Management',
+ 'name': 'Subcontracting Management with Stock Valuation',
'version': '0.1',
'category': 'Hidden',
'description': """
- This bridge module allows to manage subcontracting with the purchase module.
+ This bridge module allows to manage subcontracting with valuation.
""",
- 'depends': ['purchase_stock', 'mrp_subcontracting'],
- 'data': [
- 'views/supplier_info_views.xml',
- ],
+ 'depends': ['mrp_subcontracting', 'mrp_account'],
'installable': True,
'auto_install': True,
}
diff --git a/addons/purchase_mrp_subcontracting/models/__init__.py b/addons/mrp_subcontracting_account/models/__init__.py
index 8585b3cca70..ac9517445ae 100644
--- a/addons/purchase_mrp_subcontracting/models/__init__.py
+++ b/addons/mrp_subcontracting_account/models/__init__.py
@@ -1,5 +1,4 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from . import product
from . import stock_picking
diff --git a/addons/mrp_subcontracting_account/models/stock_picking.py b/addons/mrp_subcontracting_account/models/stock_picking.py
new file mode 100644
index 00000000000..087c60c03cc
--- /dev/null
+++ b/addons/mrp_subcontracting_account/models/stock_picking.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import models
+from odoo.osv.expression import OR
+
+
+class StockPicking(models.Model):
+ _inherit = 'stock.picking'
+
+ def action_view_stock_valuation_layers(self):
+ action = super(StockPicking, self).action_view_stock_valuation_layers()
+ subcontracted_productions = self._get_subcontracted_productions()
+ if not subcontracted_productions:
+ return action
+ domain = action['domain']
+ domain_subcontracting = [('id', 'in', (subcontracted_productions.move_raw_ids | subcontracted_productions.move_finished_ids).stock_valuation_layer_ids.ids)]
+ domain = OR([domain, domain_subcontracting])
+ return dict(action, domain=domain)
+
+ def _prepare_subcontract_mo_vals(self, subcontract_move, bom):
+ vals = super(StockPicking, self)._prepare_subcontract_mo_vals(subcontract_move, bom)
+ if bom.product_tmpl_id.cost_method in ('fifo', 'average'):
+ vals = dict(vals, extra_cost=subcontract_move._get_price_unit())
+ return vals
diff --git a/addons/purchase_mrp_subcontracting/tests/__init__.py b/addons/mrp_subcontracting_account/tests/__init__.py
index 76fe74ec58b..99d0c6d660b 100644
--- a/addons/purchase_mrp_subcontracting/tests/__init__.py
+++ b/addons/mrp_subcontracting_account/tests/__init__.py
@@ -1,7 +1,4 @@
-# -*- coding: utf-8 -*-
-
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from . import test_purchase_subcontracting
-
+from . import test_subcontracting_account
diff --git a/addons/mrp_subcontracting_account/tests/test_subcontracting_account.py b/addons/mrp_subcontracting_account/tests/test_subcontracting_account.py
new file mode 100644
index 00000000000..1ca19d0b15c
--- /dev/null
+++ b/addons/mrp_subcontracting_account/tests/test_subcontracting_account.py
@@ -0,0 +1,58 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo.addons.mrp_subcontracting.tests.common import TestMrpSubcontractingCommon
+from odoo.tests.common import Form
+
+class TestAccountSubcontractingFlows(TestMrpSubcontractingCommon):
+ def test_subcontracting_account_flow_1(self):
+ self.stock_location = self.env.ref('stock.stock_location_stock')
+ self.customer_location = self.env.ref('stock.stock_location_customers')
+ self.supplier_location = self.env.ref('stock.stock_location_suppliers')
+ self.uom_unit = self.env.ref('uom.product_uom_unit')
+ self.env.ref('product.product_category_all').property_cost_method = 'fifo'
+
+ # IN 10@10 comp1 10@20 comp2
+ move1 = self.env['stock.move'].create({
+ 'name': 'IN 10 units @ 10.00 per unit',
+ 'location_id': self.supplier_location.id,
+ 'location_dest_id': self.env.company.subcontracting_location_id.id,
+ 'product_id': self.comp1.id,
+ 'product_uom': self.uom_unit.id,
+ 'product_uom_qty': 10.0,
+ 'price_unit': 10.0,
+ })
+ move1._action_confirm()
+ move1._action_assign()
+ move1.move_line_ids.qty_done = 10.0
+ move1._action_done()
+ move2 = self.env['stock.move'].create({
+ 'name': 'IN 10 units @ 20.00 per unit',
+ 'location_id': self.supplier_location.id,
+ 'location_dest_id': self.env.company.subcontracting_location_id.id,
+ 'product_id': self.comp2.id,
+ 'product_uom': self.uom_unit.id,
+ 'product_uom_qty': 10.0,
+ 'price_unit': 20.0,
+ })
+ move2._action_confirm()
+ move2._action_assign()
+ move2.move_line_ids.qty_done = 10.0
+ move2._action_done()
+
+ picking_form = Form(self.env['stock.picking'])
+ picking_form.picking_type_id = self.env.ref('stock.picking_type_in')
+ picking_form.partner_id = self.subcontractor_partner1
+ with picking_form.move_ids_without_package.new() as move:
+ move.product_id = self.finished
+ move.product_uom_qty = 1
+ picking_receipt = picking_form.save()
+ picking_receipt.move_lines.price_unit = 30.0
+
+ picking_receipt.action_confirm()
+ picking_receipt.move_lines.quantity_done = 1.0
+ picking_receipt.action_done()
+
+ mo = picking_receipt._get_subcontracted_productions()
+ self.assertEqual(mo.move_finished_ids.stock_valuation_layer_ids.value, 60)
+ self.assertEqual(mo.move_finished_ids.product_id.value_svl, 60)
diff --git a/addons/purchase_mrp_subcontracting/i18n/purchase_mrp_subcontracting.pot b/addons/purchase_mrp_subcontracting/i18n/purchase_mrp_subcontracting.pot
deleted file mode 100644
index 7534b45d46e..00000000000
--- a/addons/purchase_mrp_subcontracting/i18n/purchase_mrp_subcontracting.pot
+++ /dev/null
@@ -1,37 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * purchase_mrp_subcontracting
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server saas~12.4\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-08-12 11:32+0000\n"
-"PO-Revision-Date: 2019-08-12 11:32+0000\n"
-"Last-Translator: \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: \n"
-
-#. module: purchase_mrp_subcontracting
-#: model:ir.model.fields,help:purchase_mrp_subcontracting.field_product_supplierinfo__is_subcontractor
-msgid ""
-"Choose a vendor of type subcontractor if you want to subcontract the product"
-msgstr ""
-
-#. module: purchase_mrp_subcontracting
-#: model:ir.model.fields,field_description:purchase_mrp_subcontracting.field_product_supplierinfo__is_subcontractor
-msgid "Subcontracted"
-msgstr ""
-
-#. module: purchase_mrp_subcontracting
-#: model:ir.model,name:purchase_mrp_subcontracting.model_product_supplierinfo
-msgid "Supplier Pricelist"
-msgstr ""
-
-#. module: purchase_mrp_subcontracting
-#: model:ir.model,name:purchase_mrp_subcontracting.model_stock_picking
-msgid "Transfer"
-msgstr ""
diff --git a/addons/purchase_mrp_subcontracting/models/stock_picking.py b/addons/purchase_mrp_subcontracting/models/stock_picking.py
deleted file mode 100644
index 57c4441b54e..00000000000
--- a/addons/purchase_mrp_subcontracting/models/stock_picking.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- coding: utf-8 -*-
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-from odoo import api, fields, models, _
-from odoo.exceptions import UserError
-
-
-class StockPicking(models.Model):
- _inherit = 'stock.picking'
-
- def _prepare_subcontract_mo_vals(self, subcontract_move, bom):
- vals = super(StockPicking, self)._prepare_subcontract_mo_vals(subcontract_move, bom)
- if bom.product_tmpl_id.cost_method in ('fifo', 'average'):
- vals = dict(vals, extra_cost=subcontract_move._get_price_unit())
- return vals
-
diff --git a/addons/purchase_mrp_subcontracting/tests/test_purchase_subcontracting.py b/addons/purchase_mrp_subcontracting/tests/test_purchase_subcontracting.py
deleted file mode 100644
index 8b792477923..00000000000
--- a/addons/purchase_mrp_subcontracting/tests/test_purchase_subcontracting.py
+++ /dev/null
@@ -1,112 +0,0 @@
-# -*- coding: utf-8 -*-
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-from datetime import datetime
-
-from odoo.tests import Form
-from odoo.tests.common import TransactionCase
-from odoo.tools import DEFAULT_SERVER_DATETIME_FORMAT
-
-
-class TestPurchaseSubcontractingFlows(TransactionCase):
- def setUp(self):
- super(TestPurchaseSubcontractingFlows, self).setUp()
-
- # 1. Create a BOM of subcontracting type
- self.comp1 = self.env['product.product'].create({
- 'name': 'Component1',
- 'type': 'product',
- 'categ_id': self.env.ref('product.product_category_all').id,
- })
- self.comp2 = self.env['product.product'].create({
- 'name': 'Component2',
- 'type': 'product',
- 'categ_id': self.env.ref('product.product_category_all').id,
- })
- self.finished_product = self.env['product.product'].create({
- 'name': 'finished',
- 'type': 'product',
- 'categ_id': self.env.ref('product.product_category_all').id,
- })
- bom_form = Form(self.env['mrp.bom'])
- bom_form.type = 'subcontract'
- bom_form.product_tmpl_id = self.finished_product.product_tmpl_id
- with bom_form.bom_line_ids.new() as bom_line:
- bom_line.product_id = self.comp1
- bom_line.product_qty = 1
- with bom_form.bom_line_ids.new() as bom_line:
- bom_line.product_id = self.comp2
- bom_line.product_qty = 1
- self.bom_finished_product = bom_form.save()
-
- # 2: Create a subcontracting partner
- company_partner = self.env['res.partner'].create({'name': 'main_partner', 'is_company': True})
- self.subcontractor_partner1 = self.env['res.partner'].create({
- 'name': 'subcontractor_partner',
- 'parent_id': company_partner.id,
- 'company_id': self.env.ref('base.main_company').id
- })
-
- self.stock_location = self.env.ref('stock.stock_location_stock')
- self.customer_location = self.env.ref('stock.stock_location_customers')
- self.supplier_location = self.env.ref('stock.stock_location_suppliers')
- self.uom_unit = self.env.ref('uom.product_uom_unit')
-
- def test_purchase_1(self):
- self.env.ref('product.product_category_all').property_cost_method = 'fifo'
-
- # IN 10@10 comp1 10@20 comp2
- move1 = self.env['stock.move'].create({
- 'name': 'IN 10 units @ 10.00 per unit',
- 'location_id': self.supplier_location.id,
- 'location_dest_id': self.env.user.company_id.subcontracting_location_id.id,
- 'product_id': self.comp1.id,
- 'product_uom': self.uom_unit.id,
- 'product_uom_qty': 10.0,
- 'price_unit': 10.0,
- })
- move1._action_confirm()
- move1._action_assign()
- move1.move_line_ids.qty_done = 10.0
- move1._action_done()
- move1 = self.env['stock.move'].create({
- 'name': 'IN 10 units @ 20.00 per unit',
- 'location_id': self.supplier_location.id,
- 'location_dest_id': self.env.user.company_id.subcontracting_location_id.id,
- 'product_id': self.comp2.id,
- 'product_uom': self.uom_unit.id,
- 'product_uom_qty': 10.0,
- 'price_unit': 20.0,
- })
- move1._action_confirm()
- move1._action_assign()
- move1.move_line_ids.qty_done = 10.0
- move1._action_done()
-
- po1 = self.env['purchase.order'].create({
- 'partner_id': self.subcontractor_partner1.id,
- 'order_line': [
- (0, 0, {
- 'name': self.finished_product.name,
- 'product_id': self.finished_product.id,
- 'product_qty': 1,
- 'product_uom': self.finished_product.uom_po_id.id,
- 'price_unit': 30.0,
- 'date_planned': datetime.today().strftime(DEFAULT_SERVER_DATETIME_FORMAT),
- }),
- ],
- })
- po1.button_confirm()
-
- picking1 = po1.picking_ids[0]
-
- # Check the created manufacturing order
- mo = self.env['mrp.production'].search([('bom_id', '=', self.bom_finished_product.id)])
- self.assertEqual(len(mo), 1)
-
- move1 = picking1.move_lines[0]
- move1.quantity_done = 1
- picking1.button_validate()
- self.assertEqual(mo.move_finished_ids.stock_valuation_layer_ids.value, 60)
- self.assertEqual(mo.move_finished_ids.product_id.value_svl, 60)
-