mirror of
https://github.com/OCA/manufacture.git
synced 2025-01-28 16:37:15 +02:00
11.0 add mrp_warehouse_calendar
This commit is contained in:
committed by
davidborromeo
parent
7cfe224058
commit
f81064829c
1
mrp_warehouse_calendar/__init__.py
Normal file
1
mrp_warehouse_calendar/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
from . import models
|
||||
20
mrp_warehouse_calendar/__manifest__.py
Normal file
20
mrp_warehouse_calendar/__manifest__.py
Normal file
@@ -0,0 +1,20 @@
|
||||
# Copyright 2018 Eficent Business and IT Consulting Services, S.L.
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
{
|
||||
"name": "MRP Warehouse Calendar",
|
||||
"summary": "Considers the warehouse calendars in manufacturing",
|
||||
"version": "11.0.1.0.0",
|
||||
"license": "AGPL-3",
|
||||
"website": "https://github.com/stock-logistics-warehouse",
|
||||
"author": "Eficent, "
|
||||
"Odoo Community Association (OCA)",
|
||||
"category": "Manufacturing",
|
||||
"depends": [
|
||||
"mrp",
|
||||
"stock_warehouse_calendar",
|
||||
],
|
||||
"installable": True,
|
||||
'development_status': 'Beta',
|
||||
'maintainers': ['jbeficent'],
|
||||
}
|
||||
2
mrp_warehouse_calendar/models/__init__.py
Normal file
2
mrp_warehouse_calendar/models/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
from . import mrp_production
|
||||
from . import procurement_rule
|
||||
28
mrp_warehouse_calendar/models/mrp_production.py
Normal file
28
mrp_warehouse_calendar/models/mrp_production.py
Normal file
@@ -0,0 +1,28 @@
|
||||
# Copyright 2018 Eficent Business and IT Consulting Services, S.L.
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from odoo import api, fields, models
|
||||
|
||||
|
||||
class MrpProduction(models.Model):
|
||||
_inherit = 'mrp.production'
|
||||
|
||||
@api.onchange('date_planned_start', 'product_id')
|
||||
def onchange_date_planned(self):
|
||||
dt_planned = fields.Datetime.from_string(self.date_planned_start)
|
||||
warehouse = self.picking_type_id.warehouse_id
|
||||
if warehouse.calendar_id and self.product_id.produce_delay:
|
||||
date_expected_finished = warehouse.calendar_id.plan_days(
|
||||
+1 * self.product_id.produce_delay + 1, dt_planned)
|
||||
self.date_planned_finished = date_expected_finished
|
||||
|
||||
@api.multi
|
||||
def copy(self, default=None):
|
||||
mo = super(MrpProduction, self).copy(default=default)
|
||||
dt_planned = fields.Datetime.from_string(mo.date_planned_start)
|
||||
warehouse = mo.picking_type_id.warehouse_id
|
||||
if warehouse.calendar_id and mo.product_id.produce_delay:
|
||||
date_expected = warehouse.calendar_id.plan_days(
|
||||
+1 * self.product_id.produce_delay + 1, dt_planned)
|
||||
mo.date_planned_finished = date_expected
|
||||
return mo
|
||||
23
mrp_warehouse_calendar/models/procurement_rule.py
Normal file
23
mrp_warehouse_calendar/models/procurement_rule.py
Normal file
@@ -0,0 +1,23 @@
|
||||
# Copyright 2018 Eficent Business and IT Consulting Services, S.L.
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class ProcurementRule(models.Model):
|
||||
_inherit = 'procurement.rule'
|
||||
|
||||
def _get_date_planned(self, product_id, values):
|
||||
date_planned = super(ProcurementRule, self)._get_date_planned(
|
||||
product_id, values)
|
||||
picking_type = self.picking_type_id or \
|
||||
values['warehouse_id'].manu_type_id
|
||||
dt_planned = fields.Datetime.from_string(values['date_planned'])
|
||||
warehouse = picking_type.warehouse_id
|
||||
if warehouse.calendar_id and product_id.produce_delay:
|
||||
lead_days = values['company_id'].manufacturing_lead + \
|
||||
product_id.produce_delay
|
||||
date_expected = warehouse.calendar_id.plan_days(
|
||||
-1 * lead_days - 1, dt_planned)
|
||||
date_planned = date_expected
|
||||
return date_planned
|
||||
9
mrp_warehouse_calendar/readme/CONFIGURE.rst
Normal file
9
mrp_warehouse_calendar/readme/CONFIGURE.rst
Normal file
@@ -0,0 +1,9 @@
|
||||
* This module depends on `stock_warehouse_calendar <https://github.com/OCA/stock-logistics-warehouse>`_
|
||||
|
||||
* Go to *Settings* and activate the developer mode.
|
||||
|
||||
* Go to *Settings > Technical > Resource > Working Time* and define your
|
||||
resource calendar.
|
||||
|
||||
* Go to *Inventory > Configuration > Warehouse Management > Warehouses*
|
||||
and assign the Resource Calendar.
|
||||
1
mrp_warehouse_calendar/readme/CONTRIBUTORS.rst
Normal file
1
mrp_warehouse_calendar/readme/CONTRIBUTORS.rst
Normal file
@@ -0,0 +1 @@
|
||||
* Jordi Ballester (EFICENT) <jordi.ballester@eficent.com>.
|
||||
7
mrp_warehouse_calendar/readme/DESCRIPTION.rst
Normal file
7
mrp_warehouse_calendar/readme/DESCRIPTION.rst
Normal file
@@ -0,0 +1,7 @@
|
||||
With this module the manufacturing orders created from procurements consider
|
||||
the calendar assigned to the warehouse of the picking type of the
|
||||
manufacturing order to determine, based on the product's manufacturing
|
||||
lead time, the planned start date of the manufacturing order.
|
||||
|
||||
Further manual replannings of start/end date of the manufacturing order
|
||||
also consider the lead time using the warehouse calendar days.
|
||||
0
mrp_warehouse_calendar/readme/ROADMAP.rst
Normal file
0
mrp_warehouse_calendar/readme/ROADMAP.rst
Normal file
8
mrp_warehouse_calendar/readme/USAGE.rst
Normal file
8
mrp_warehouse_calendar/readme/USAGE.rst
Normal file
@@ -0,0 +1,8 @@
|
||||
When a manufacturing order is created out of a procurement evaluation
|
||||
(from an orderpoint, MTO,...) the calendar is considered in the computation
|
||||
of the planned start date of the manufacturing order.
|
||||
|
||||
For example, if it takes 1 day to manufacture a product and it is required
|
||||
for Monday, the manufacturing order will be created with planned start date
|
||||
on the previous Friday, if the warehouse operates under a Mo-Fri working
|
||||
calendar.
|
||||
BIN
mrp_warehouse_calendar/static/description/icon.png
Normal file
BIN
mrp_warehouse_calendar/static/description/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.2 KiB |
1
mrp_warehouse_calendar/tests/__init__.py
Normal file
1
mrp_warehouse_calendar/tests/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
from . import test_mrp_warehouse_calendar
|
||||
87
mrp_warehouse_calendar/tests/test_mrp_warehouse_calendar.py
Normal file
87
mrp_warehouse_calendar/tests/test_mrp_warehouse_calendar.py
Normal file
@@ -0,0 +1,87 @@
|
||||
# Copyright 2018 Eficent Business and IT Consulting Services, S.L.
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
from odoo import fields
|
||||
from odoo.tests.common import TransactionCase
|
||||
|
||||
|
||||
class TestMrpWarehouseCalendar(TransactionCase):
|
||||
|
||||
def setUp(self):
|
||||
super(TestMrpWarehouseCalendar, self).setUp()
|
||||
self.move_obj = self.env['stock.move']
|
||||
self.company = self.env.ref('base.main_company')
|
||||
self.warehouse = self.env.ref('stock.warehouse0')
|
||||
self.customer_loc = self.env.ref('stock.stock_location_customers')
|
||||
self.company_partner = self.env.ref('base.main_partner')
|
||||
self.calendar = self.env.ref('resource.resource_calendar_std')
|
||||
self.manufacture_route = self.env.ref(
|
||||
'mrp.route_warehouse0_manufacture')
|
||||
|
||||
self.warehouse.calendar_id = self.calendar.id
|
||||
self.warehouse_2 = self.env['stock.warehouse'].create({
|
||||
'code': 'WH-T',
|
||||
'name': 'Warehouse Test',
|
||||
'calendar_id': self.calendar.id,
|
||||
})
|
||||
|
||||
self.product = self.env['product.product'].create({
|
||||
'name': 'test product',
|
||||
'default_code': 'PRD',
|
||||
'type': 'product',
|
||||
'produce_delay': 1,
|
||||
})
|
||||
self.product_2 = self.env['product.product'].create({
|
||||
'name': 'test product 2',
|
||||
'default_code': 'PRD 2',
|
||||
'type': 'product',
|
||||
})
|
||||
self.bom = self.env['mrp.bom'].create({
|
||||
'product_id': self.product.id,
|
||||
'product_tmpl_id': self.product.product_tmpl_id.id,
|
||||
'product_uom_id': self.product.uom_id.id,
|
||||
'product_qty': 1.0,
|
||||
'type': 'normal',
|
||||
})
|
||||
self.env['mrp.bom.line'].create({
|
||||
'bom_id': self.bom.id,
|
||||
'product_id': self.product_2.id,
|
||||
'product_qty': 2,
|
||||
})
|
||||
|
||||
self.product.route_ids = [(6, 0, self.manufacture_route.ids)]
|
||||
|
||||
def test_procurement_with_calendar(self):
|
||||
values = {
|
||||
'date_planned': '2097-01-07 09:00:00', # Monday
|
||||
'warehouse_id': self.warehouse,
|
||||
'company_id': self.company,
|
||||
'rule_id': self.manufacture_route,
|
||||
}
|
||||
self.env['procurement.group'].run(
|
||||
self.product, 100,
|
||||
self.product.uom_id,
|
||||
self.warehouse.lot_stock_id, 'Test',
|
||||
'Test', values)
|
||||
mo = self.env['mrp.production'].search(
|
||||
[('product_id', '=', self.product.id)], limit=1)
|
||||
date_plan_start = fields.Datetime.from_string(
|
||||
mo.date_planned_start).date()
|
||||
# Friday 4th Jan 2097
|
||||
friday = fields.Datetime.from_string('2097-01-04 09:00:00').date()
|
||||
|
||||
self.assertEqual(date_plan_start, friday)
|
||||
|
||||
def test_onchange_date_planned(self):
|
||||
mo = self.env['mrp.production'].new({
|
||||
'product_id': self.product.id,
|
||||
'bom_id': self.bom.id,
|
||||
'product_qty': 1,
|
||||
'picking_type_id':
|
||||
self.env['mrp.production']._get_default_picking_type()
|
||||
})
|
||||
mo.date_planned_start = '2097-01-04 09:00:00'
|
||||
mo.onchange_date_planned()
|
||||
date_plan_finished = fields.Datetime.from_string(
|
||||
mo.date_planned_finished).date()
|
||||
monday = fields.Datetime.from_string('2097-01-07 09:00:00').date()
|
||||
self.assertEqual(date_plan_finished, monday)
|
||||
Reference in New Issue
Block a user