diff --git a/addons/mrp/mrp_view.xml b/addons/mrp/mrp_view.xml index ad6b571f905..3436fcb7bcb 100644 --- a/addons/mrp/mrp_view.xml +++ b/addons/mrp/mrp_view.xml @@ -962,10 +962,10 @@ form - + - + diff --git a/addons/mrp/procurement.py b/addons/mrp/procurement.py index 4086a401f56..7b5c9ec1233 100644 --- a/addons/mrp/procurement.py +++ b/addons/mrp/procurement.py @@ -43,7 +43,7 @@ class procurement_order(osv.osv): cr.execute('update procurement_order set message=%s where id=%s', (_('No BoM defined for this product !'), procurement.id)) for (id, name) in self.name_get(cr, uid, procurement.id): message = _("Procurement '%s' has an exception: 'No BoM defined for this product !'") % name - self.log(cr, uid, id, message) + self.message_append_note(cr, uid, [procurement], body=message, context=context) return False return True @@ -97,6 +97,7 @@ class procurement_order(osv.osv): }) res[procurement.id] = produce_id self.write(cr, uid, [procurement.id], {'state': 'running'}) + self.running_send_note(cr, uid, ids, context=None) bom_result = production_obj.action_compute(cr, uid, [produce_id], properties=[x.id for x in procurement.property_ids]) wf_service.trg_validate(uid, 'mrp.production', produce_id, 'button_confirm', cr) diff --git a/addons/procurement/procurement.py b/addons/procurement/procurement.py index 164314c4573..bc25985475f 100644 --- a/addons/procurement/procurement.py +++ b/addons/procurement/procurement.py @@ -81,6 +81,7 @@ class procurement_order(osv.osv): _name = "procurement.order" _description = "Procurement" _order = 'priority,date_planned desc' + _inherit = ['mail.thread'] _log_create = False _columns = { 'name': fields.char('Reason', size=64, required=True, help='Procurement name.'), @@ -346,6 +347,7 @@ class procurement_order(osv.osv): move_obj.action_confirm(cr, uid, [id], context=context) self.write(cr, uid, [procurement.id], {'move_id': id, 'close_move': 1}) self.write(cr, uid, ids, {'state': 'confirmed', 'message': ''}) + self.confirm_send_note(cr, uid, ids, context) return True def action_move_assigned(self, cr, uid, ids, context=None): @@ -354,6 +356,7 @@ class procurement_order(osv.osv): """ self.write(cr, uid, ids, {'state': 'running', 'message': _('from stock: products assigned.')}) + self.running_send_note(cr, uid, ids, context=None) return True def _check_make_to_stock_service(self, cr, uid, procurement, context=None): @@ -383,7 +386,8 @@ class procurement_order(osv.osv): message = _("Not enough stock.") if message: - self.log(cr, uid, procurement.id, _("Procurement '%s' is in exception: ") % (procurement.name) + message) + message = _("Procurement '%s' is in exception: ") % (procurement.name) + message + self.message_append_note(cr, uid, [procurement], body=message, context=context) cr.execute('update procurement_order set message=%s where id=%s', (message, procurement.id)) return ok @@ -393,6 +397,7 @@ class procurement_order(osv.osv): """ for procurement in self.browse(cr, uid, ids, context=context): self.write(cr, uid, [procurement.id], {'state': 'running'}) + self.running_send_note(cr, uid, ids, context=None) return True def action_produce_assign_product(self, cr, uid, ids, context=None): @@ -427,6 +432,7 @@ class procurement_order(osv.osv): if len(todo): move_obj.write(cr, uid, todo, {'state': 'assigned'}) self.write(cr, uid, ids, {'state': 'cancel'}) + self.cancel_send_note(cr, uid, ids, context=None) wf_service = netsvc.LocalService("workflow") for id in ids: wf_service.trg_trigger(uid, 'procurement.order', id, cr) @@ -451,6 +457,7 @@ class procurement_order(osv.osv): @return: True """ res = self.write(cr, uid, ids, {'state': 'ready'}) + self.ready_send_note(cr, uid, ids, context=None) return res def action_done(self, cr, uid, ids): @@ -463,11 +470,45 @@ class procurement_order(osv.osv): if procurement.close_move and (procurement.move_id.state <> 'done'): move_obj.action_done(cr, uid, [procurement.move_id.id]) res = self.write(cr, uid, ids, {'state': 'done', 'date_close': time.strftime('%Y-%m-%d')}) + self.done_send_note(cr, uid, ids, context=None) wf_service = netsvc.LocalService("workflow") for id in ids: wf_service.trg_trigger(uid, 'procurement.order', id, cr) return res + # ---------------------------------------- + # OpenChatter methods and notifications + # ---------------------------------------- + + def create(self, cr, uid, vals, context=None): + obj_id = super(procurement_order, self).create(cr, uid, vals, context) + self.create_send_note(cr, uid, [obj_id], context=context) + return obj_id + + def create_send_note(self, cr, uid, ids, context=None): + for obj in self.browse(cr, uid, ids, context=context): + self.message_append_note(cr, uid, [obj.id], body=_("Procurement has been created."), context=context) + + def confirm_send_note(self, cr, uid, ids, context=None): + for obj in self.browse(cr, uid, ids, context=context): + self.message_append_note(cr, uid, [obj.id], body=_("Procurement has been confirmed."), context=context) + + def running_send_note(self, cr, uid, ids, context=None): + for obj in self.browse(cr, uid, ids, context=context): + self.message_append_note(cr, uid, [obj.id], body=_("Procurement has been set to running."), context=context) + + def ready_send_note(self, cr, uid, ids, context=None): + for obj in self.browse(cr, uid, ids, context=context): + self.message_append_note(cr, uid, [obj.id], body=_("Procurement has been set to ready."), context=context) + + def cancel_send_note(self, cr, uid, ids, context=None): + for obj in self.browse(cr, uid, ids, context=context): + self.message_append_note(cr, uid, [obj.id], body=_("Procurement has been cancelled."), context=context) + + def done_send_note(self, cr, uid, ids, context=None): + for obj in self.browse(cr, uid, ids, context=context): + self.message_append_note(cr, uid, [obj.id], body=_("Procurement has been done."), context=context) + procurement_order() class StockPicking(osv.osv): diff --git a/addons/procurement/procurement_view.xml b/addons/procurement/procurement_view.xml index b3e90ab4e6e..f1430f480b7 100644 --- a/addons/procurement/procurement_view.xml +++ b/addons/procurement/procurement_view.xml @@ -46,7 +46,8 @@ procurement.order form -
+ + @@ -91,6 +92,10 @@ + +
+ +
diff --git a/addons/project_mrp/project_procurement.py b/addons/project_mrp/project_procurement.py index 7d3045aede0..c27a3d547a3 100644 --- a/addons/project_mrp/project_procurement.py +++ b/addons/project_mrp/project_procurement.py @@ -81,6 +81,7 @@ class procurement_order(osv.osv): 'company_id': procurement.company_id.id, },context=context) self.write(cr, uid, [procurement.id], {'task_id': task_id, 'state': 'running'}, context=context) + self.running_send_note(cr, uid, ids, context=None) return task_id procurement_order() diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index 97fe017ce62..962287576ed 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -991,6 +991,7 @@ class procurement_order(osv.osv): } res[procurement.id] = self.create_procurement_purchase_order(cr, uid, procurement, po_vals, line_vals, context=context) self.write(cr, uid, [procurement.id], {'state': 'running', 'purchase_id': res[procurement.id]}) + self.running_send_note(cr, uid, ids, context=None) return res procurement_order() diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml index 7a7b9e942cd..97230b3e191 100644 --- a/addons/purchase/purchase_view.xml +++ b/addons/purchase/purchase_view.xml @@ -506,7 +506,7 @@ form - + diff --git a/addons/purchase_requisition/purchase_requisition.py b/addons/purchase_requisition/purchase_requisition.py index 43cfe2de069..a458481e524 100644 --- a/addons/purchase_requisition/purchase_requisition.py +++ b/addons/purchase_requisition/purchase_requisition.py @@ -259,7 +259,7 @@ class procurement_order(osv.osv): })], 'purchase_ids': [(6,0,[po_id])] }) - self.write(cr,uid,proc_id,{'requisition_id':requisition_id}) + self.write(cr,uid,[proc_id],{'requisition_id':requisition_id}) return res procurement_order() diff --git a/addons/stock_location/procurement_pull.py b/addons/stock_location/procurement_pull.py index 33168a53e20..97ccb3eb38a 100644 --- a/addons/stock_location/procurement_pull.py +++ b/addons/stock_location/procurement_pull.py @@ -116,6 +116,7 @@ class procurement_order(osv.osv): move_obj.write(cr, uid, [proc.move_id.id], {'location_id':proc.location_id.id}) self.write(cr, uid, [proc.id], {'state':'running', 'message':_('Pulled from another location via procurement %d')%proc_id}) + self.running_send_note(cr, uid, ids, context=None) # trigger direct processing (the new procurement shares the same planned date as the original one, which is already being processed) wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_check', cr)