diff --git a/mrp_production_draft/__manifest__.py b/mrp_production_draft/__manifest__.py
index e321b202c..a769881df 100644
--- a/mrp_production_draft/__manifest__.py
+++ b/mrp_production_draft/__manifest__.py
@@ -22,7 +22,7 @@
##############################################################################
{
'name': 'Draft Manufacturing Order',
- 'version': '12.0.1.0.0',
+ 'version': '12.0.1.0',
'summary': 'Draft State in Manufacturing Order',
'description': """
This module provides a draft state for manufacturing order instead of default first stage 'confirmed'.
diff --git a/mrp_production_draft/models/mrp_production.py b/mrp_production_draft/models/mrp_production.py
index 85cf17530..6a972ddd0 100644
--- a/mrp_production_draft/models/mrp_production.py
+++ b/mrp_production_draft/models/mrp_production.py
@@ -22,7 +22,8 @@
##############################################################################
from odoo import api, models, fields, _
-from odoo.exceptions import UserError
+from odoo.exceptions import UserError, ValidationError
+from psycopg2 import IntegrityError
from odoo.addons.mrp.models.mrp_production import MrpProduction as mp
@@ -39,15 +40,32 @@ class MrpProduction(models.Model):
('cancel', 'Cancelled')], string='State',
copy=False, default='draft', track_visibility='onchange')
- _sql_constraints = [
- ('name_uniq', "check(state='draft' or UNIQUE(name,company_id))", 'Reference must be unique per Company!'),
- ]
+ @api.model_cr
+ def init(self):
+ self.env.cr.execute('ALTER TABLE mrp_production DROP CONSTRAINT mrp_production_name_uniq')
+ self.env.cr.execute(
+ '''CREATE UNIQUE INDEX mrp_mo_unique ON mrp_production (name,company_id) WHERE (state != 'draft')''')
@api.model
def create(self, values):
production = super(mp, self).create(values)
return production
+ @api.multi
+ def write(self, vals):
+ try:
+ res = super(MrpProduction, self).write(vals)
+ except IntegrityError:
+ raise ValidationError(_("Reference must be unique per Company for confirmed orders!"))
+ if 'date_planned_start' in vals:
+ moves = (self.mapped('move_raw_ids') + self.mapped('move_finished_ids')).filtered(
+ lambda r: r.state not in ['done', 'cancel'])
+ moves.write({
+ 'date_expected': vals['date_planned_start'],
+ })
+ if res:
+ return res
+
@api.multi
def unlink(self):
if any(production.state not in ['draft', 'cancel'] for production in self):
@@ -56,9 +74,17 @@ class MrpProduction(models.Model):
@api.multi
def action_confirm(self):
- if not self.name or self.name == _('New'):
- self.name = self.env['ir.sequence'].next_by_code('mrp.production') or _('New')
- if not self.procurement_group_id:
- self.procurement_group_id = self.env["procurement.group"].create({'name': self.name}).id
- self._generate_moves()
- self.state = 'confirmed'
+ self.onchange_product_id()
+ for production in self:
+ if not production.name or production.name == _('New'):
+ picking_type_id = production._get_default_picking_type()
+ picking_type_id = self.env['stock.picking.type'].browse(picking_type_id)
+ if picking_type_id:
+ production.name = picking_type_id.sequence_id.next_by_id()
+ else:
+ production.name = self.env['ir.sequence'].next_by_code('mrp.production') or _('New')
+ production.state = 'confirmed'
+ if not self.procurement_group_id:
+ production.procurement_group_id = self.env["procurement.group"].create({'name': production.name}).id
+ production._generate_moves()
+
diff --git a/mrp_production_draft/views/mrp_production_view.xml b/mrp_production_draft/views/mrp_production_view.xml
index 98db61bca..c2dfd4747 100644
--- a/mrp_production_draft/views/mrp_production_view.xml
+++ b/mrp_production_draft/views/mrp_production_view.xml
@@ -12,6 +12,13 @@
+
+ draft,confirmed,progress,done
+
+
+
+
+