11.0 add mrp_warehouse_calendar

This commit is contained in:
Jordi Ballester Alomar
2018-06-29 15:45:49 +02:00
committed by davidborromeo
parent 7cfe224058
commit f81064829c
13 changed files with 187 additions and 0 deletions

View File

@@ -0,0 +1 @@
from . import models

View 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'],
}

View File

@@ -0,0 +1,2 @@
from . import mrp_production
from . import procurement_rule

View 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

View 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

View 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.

View File

@@ -0,0 +1 @@
* Jordi Ballester (EFICENT) <jordi.ballester@eficent.com>.

View 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.

View 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.

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View File

@@ -0,0 +1 @@
from . import test_mrp_warehouse_calendar

View 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)