[REM] models: remove the magic methods signal_XXX()

This commit is contained in:
Raphael Collet 2014-07-07 11:50:30 +02:00
parent cbe2dbb672
commit 33eb3dffb2
15 changed files with 32 additions and 45 deletions

View File

@ -98,7 +98,7 @@ class account_invoice(models.Model):
def _compute_reconciled(self): def _compute_reconciled(self):
self.reconciled = self.test_paid() self.reconciled = self.test_paid()
if not self.reconciled and self.state == 'paid': if not self.reconciled and self.state == 'paid':
self.signal_open_test() self.signal_workflow('open_test')
@api.model @api.model
def _get_reference_type(self): def _get_reference_type(self):

View File

@ -884,7 +884,7 @@ class mrp_production(osv.osv):
production = self.browse(cr, uid, production_id, context=context) production = self.browse(cr, uid, production_id, context=context)
if not production.move_lines and production.state == 'ready': if not production.move_lines and production.state == 'ready':
# trigger workflow if not products to consume (eg: services) # trigger workflow if not products to consume (eg: services)
self.signal_button_produce(cr, uid, [production_id]) self.signal_workflow(cr, uid, [production_id], 'button_produce')
produced_qty = self._get_produced_qty(cr, uid, production, context=context) produced_qty = self._get_produced_qty(cr, uid, production, context=context)
@ -944,7 +944,7 @@ class mrp_production(osv.osv):
stock_mov_obj.action_done(cr, uid, [extra_move_id], context=context) stock_mov_obj.action_done(cr, uid, [extra_move_id], context=context)
self.message_post(cr, uid, production_id, body=_("%s produced") % self._description, context=context) self.message_post(cr, uid, production_id, body=_("%s produced") % self._description, context=context)
self.signal_button_produce_done(cr, uid, [production_id]) self.signal_workflow(cr, uid, [production_id], 'button_produce_done')
return True return True
def _costs_generate(self, cr, uid, production): def _costs_generate(self, cr, uid, production):

View File

@ -114,7 +114,7 @@ class procurement_order(osv.osv):
procurement.refresh() procurement.refresh()
self.production_order_create_note(cr, uid, procurement, context=context) self.production_order_create_note(cr, uid, procurement, context=context)
production_obj.action_compute(cr, uid, [produce_id], properties=[x.id for x in procurement.property_ids]) production_obj.action_compute(cr, uid, [produce_id], properties=[x.id for x in procurement.property_ids])
production_obj.signal_button_confirm(cr, uid, [produce_id]) production_obj.signal_workflow(cr, uid, [produce_id], 'button_confirm')
else: else:
res[procurement.id] = False res[procurement.id] = False
self.message_post(cr, uid, [procurement.id], body=_("No BoM exists for this product!"), context=context) self.message_post(cr, uid, [procurement.id], body=_("No BoM exists for this product!"), context=context)

View File

@ -159,7 +159,7 @@ class StockMove(osv.osv):
'consumed_for': consumed_for}, context=context) 'consumed_for': consumed_for}, context=context)
self.action_done(cr, uid, res, context=context) self.action_done(cr, uid, res, context=context)
production_ids = production_obj.search(cr, uid, [('move_lines', 'in', [move.id])]) production_ids = production_obj.search(cr, uid, [('move_lines', 'in', [move.id])])
production_obj.signal_button_produce(cr, uid, production_ids) production_obj.signal_workflow(cr, uid, production_ids, button_produce)
for new_move in res: for new_move in res:
if new_move != move.id: if new_move != move.id:
#This move is not already there in move lines of production order #This move is not already there in move lines of production order
@ -181,7 +181,7 @@ class StockMove(osv.osv):
#If we are not scrapping our whole move, tracking and lot references must not be removed #If we are not scrapping our whole move, tracking and lot references must not be removed
production_ids = production_obj.search(cr, uid, [('move_lines', 'in', [move.id])]) production_ids = production_obj.search(cr, uid, [('move_lines', 'in', [move.id])])
for prod_id in production_ids: for prod_id in production_ids:
production_obj.signal_button_produce(cr, uid, [prod_id]) production_obj.signal_workflow(cr, uid, [prod_id], 'button_produce')
for new_move in new_moves: for new_move in new_moves:
production_obj.write(cr, uid, production_ids, {'move_lines': [(4, new_move)]}) production_obj.write(cr, uid, production_ids, {'move_lines': [(4, new_move)]})
res.append(new_move) res.append(new_move)

View File

@ -497,7 +497,7 @@ class pos_session(osv.osv):
_('Error!'), _('Error!'),
_("You cannot confirm all orders of this session, because they have not the 'paid' status")) _("You cannot confirm all orders of this session, because they have not the 'paid' status"))
else: else:
pos_order_obj.signal_done(cr, uid, [order.id]) pos_order_obj.signal_workflow(cr, uid, [order.id], 'done')
return True return True
@ -581,14 +581,14 @@ class pos_order(osv.osv):
order_ids.append(order_id) order_ids.append(order_id)
try: try:
self.signal_paid(cr, uid, [order_id]) self.signal_workflow(cr, uid, [order_id], 'paid')
except Exception as e: except Exception as e:
_logger.error('Could not fully process the POS Order: %s', tools.ustr(e)) _logger.error('Could not fully process the POS Order: %s', tools.ustr(e))
if to_invoice: if to_invoice:
self.action_invoice(cr, uid, [order_id], context) self.action_invoice(cr, uid, [order_id], context)
order_obj = self.browse(cr, uid, order_id, context) order_obj = self.browse(cr, uid, order_id, context)
self.pool['account.invoice'].signal_invoice_open(cr, uid, [order_obj.invoice_id.id]) self.pool['account.invoice'].signal_workflow(cr, uid, [order_obj.invoice_id.id], 'invoice_open')
return order_ids return order_ids
@ -933,8 +933,8 @@ class pos_order(osv.osv):
inv_line['invoice_line_tax_id'] = [(6, 0, [x.id for x in line.product_id.taxes_id] )] inv_line['invoice_line_tax_id'] = [(6, 0, [x.id for x in line.product_id.taxes_id] )]
inv_line_ref.create(cr, uid, inv_line, context=context) inv_line_ref.create(cr, uid, inv_line, context=context)
inv_ref.button_reset_taxes(cr, uid, [inv_id], context=context) inv_ref.button_reset_taxes(cr, uid, [inv_id], context=context)
self.signal_invoice(cr, uid, [order.id]) self.signal_workflow(cr, uid, [order.id], 'invoice')
inv_ref.signal_validate(cr, uid, [inv_id]) inv_ref.signal_workflow(cr, uid, [inv_id], 'validate')
if not inv_ids: return {} if not inv_ids: return {}

View File

@ -328,7 +328,7 @@ class purchase_order(osv.osv):
raise osv.except_osv(_('Invalid Action!'), _('In order to delete a purchase order, you must cancel it first.')) raise osv.except_osv(_('Invalid Action!'), _('In order to delete a purchase order, you must cancel it first.'))
# automatically sending subflow.delete upon deletion # automatically sending subflow.delete upon deletion
self.signal_purchase_cancel(cr, uid, unlink_ids) self.signal_workflow(cr, uid, unlink_ids, 'purchase_cancel')
return super(purchase_order, self).unlink(cr, uid, unlink_ids, context=context) return super(purchase_order, self).unlink(cr, uid, unlink_ids, context=context)
@ -519,7 +519,7 @@ class purchase_order(osv.osv):
This function prints the request for quotation and mark it as sent, so that we can see more easily the next step of the workflow This function prints the request for quotation and mark it as sent, so that we can see more easily the next step of the workflow
''' '''
assert len(ids) == 1, 'This option should only be used for a single id at a time' assert len(ids) == 1, 'This option should only be used for a single id at a time'
self.signal_send_rfq(cr, uid, ids) self.signal_workflow(cr, uid, ids, 'send_rfq')
return self.pool['report'].get_action(cr, uid, ids, 'purchase.report_purchasequotation', context=context) return self.pool['report'].get_action(cr, uid, ids, 'purchase.report_purchasequotation', context=context)
def wkf_confirm_order(self, cr, uid, ids, context=None): def wkf_confirm_order(self, cr, uid, ids, context=None):
@ -680,19 +680,19 @@ class purchase_order(osv.osv):
_('Unable to cancel the purchase order %s.') % (purchase.name), _('Unable to cancel the purchase order %s.') % (purchase.name),
_('First cancel all receptions related to this purchase order.')) _('First cancel all receptions related to this purchase order.'))
self.pool.get('stock.picking') \ self.pool.get('stock.picking') \
.signal_button_cancel(cr, uid, map(attrgetter('id'), purchase.picking_ids)) .signal_workflow(cr, uid, map(attrgetter('id'), purchase.picking_ids), 'button_cancel')
for inv in purchase.invoice_ids: for inv in purchase.invoice_ids:
if inv and inv.state not in ('cancel', 'draft'): if inv and inv.state not in ('cancel', 'draft'):
raise osv.except_osv( raise osv.except_osv(
_('Unable to cancel this purchase order.'), _('Unable to cancel this purchase order.'),
_('You must first cancel all invoices related to this purchase order.')) _('You must first cancel all invoices related to this purchase order.'))
self.pool.get('account.invoice') \ self.pool.get('account.invoice') \
.signal_invoice_cancel(cr, uid, map(attrgetter('id'), purchase.invoice_ids)) .signal_workflow(cr, uid, map(attrgetter('id'), purchase.invoice_ids), 'invoice_cancel')
self.pool['purchase.order.line'].write(cr, uid, [l.id for l in purchase.order_line], self.pool['purchase.order.line'].write(cr, uid, [l.id for l in purchase.order_line],
{'state': 'cancel'}) {'state': 'cancel'})
self.write(cr, uid, ids, {'state': 'cancel'}) self.write(cr, uid, ids, {'state': 'cancel'})
self.set_order_line_status(cr, uid, ids, 'cancel', context=context) self.set_order_line_status(cr, uid, ids, 'cancel', context=context)
self.signal_purchase_cancel(cr, uid, ids) self.signal_workflow(cr, uid, ids, 'purchase_cancel')
return True return True
def _prepare_order_line_move(self, cr, uid, order, order_line, picking_id, group_id, context=None): def _prepare_order_line_move(self, cr, uid, order, order_line, picking_id, group_id, context=None):
@ -933,7 +933,7 @@ class purchase_order(osv.osv):
# make triggers pointing to the old orders point to the new order # make triggers pointing to the old orders point to the new order
for old_id in old_ids: for old_id in old_ids:
self.redirect_workflow(cr, uid, [(old_id, neworder_id)]) self.redirect_workflow(cr, uid, [(old_id, neworder_id)])
self.signal_purchase_cancel(cr, uid, [old_id]) self.signal_workflow(cr, uid, [old_id], 'purchase_cancel')
return orders_info return orders_info
@ -1370,7 +1370,7 @@ class mail_mail(osv.Model):
if mail_sent and mail.model == 'purchase.order': if mail_sent and mail.model == 'purchase.order':
obj = self.pool.get('purchase.order').browse(cr, uid, mail.res_id, context=context) obj = self.pool.get('purchase.order').browse(cr, uid, mail.res_id, context=context)
if obj.state == 'draft': if obj.state == 'draft':
self.pool.get('purchase.order').signal_send_rfq(cr, uid, [mail.res_id]) self.pool.get('purchase.order').signal_workflow(cr, uid, [mail.res_id], 'send_rfq')
return super(mail_mail, self)._postprocess_sent_message(cr, uid, mail=mail, context=context, mail_sent=mail_sent) return super(mail_mail, self)._postprocess_sent_message(cr, uid, mail=mail, context=context, mail_sent=mail_sent)
@ -1423,7 +1423,7 @@ class mail_compose_message(osv.Model):
context = context or {} context = context or {}
if context.get('default_model') == 'purchase.order' and context.get('default_res_id'): if context.get('default_model') == 'purchase.order' and context.get('default_res_id'):
context = dict(context, mail_post_autofollow=True) context = dict(context, mail_post_autofollow=True)
self.pool.get('purchase.order').signal_send_rfq(cr, uid, [context['default_res_id']]) self.pool.get('purchase.order').signal_workflow(cr, uid, [context['default_res_id']], 'send_rfq')
return super(mail_compose_message, self).send_mail(cr, uid, ids, context=context) return super(mail_compose_message, self).send_mail(cr, uid, ids, context=context)

View File

@ -245,7 +245,7 @@ class purchase_requisition(osv.osv):
for quotation in tender.purchase_ids: for quotation in tender.purchase_ids:
if (self.check_valid_quotation(cr, uid, quotation, context=context)): if (self.check_valid_quotation(cr, uid, quotation, context=context)):
#use workflow to set PO state to confirm #use workflow to set PO state to confirm
po.signal_purchase_confirm(cr, uid, [quotation.id]) po.signal_workflow(cr, uid, [quotation.id], 'purchase_confirm')
#get other confirmed lines per supplier #get other confirmed lines per supplier
for po_line in tender.po_line_ids: for po_line in tender.po_line_ids:
@ -268,13 +268,13 @@ class purchase_requisition(osv.osv):
vals = self._prepare_po_line_from_tender(cr, uid, tender, line, new_po, context=context) vals = self._prepare_po_line_from_tender(cr, uid, tender, line, new_po, context=context)
poline.copy(cr, uid, line.id, default=vals, context=context) poline.copy(cr, uid, line.id, default=vals, context=context)
#use workflow to set new PO state to confirm #use workflow to set new PO state to confirm
po.signal_purchase_confirm(cr, uid, [new_po]) po.signal_workflow(cr, uid, [new_po], 'purchase_confirm')
#cancel other orders #cancel other orders
self.cancel_unconfirmed_quotations(cr, uid, tender, context=context) self.cancel_unconfirmed_quotations(cr, uid, tender, context=context)
#set tender to state done #set tender to state done
self.signal_done(cr, uid, [tender.id]) self.signal_workflow(cr, uid, [tender.id], 'done')
return True return True
def cancel_unconfirmed_quotations(self, cr, uid, tender, context=None): def cancel_unconfirmed_quotations(self, cr, uid, tender, context=None):
@ -282,7 +282,7 @@ class purchase_requisition(osv.osv):
po = self.pool.get('purchase.order') po = self.pool.get('purchase.order')
for quotation in tender.purchase_ids: for quotation in tender.purchase_ids:
if quotation.state in ['draft', 'sent', 'bid']: if quotation.state in ['draft', 'sent', 'bid']:
self.pool.get('purchase.order').signal_purchase_cancel(cr, uid, [quotation.id]) self.pool.get('purchase.order').signal_workflow(cr, uid, [quotation.id], 'purchase_cancel')
po.message_post(cr, uid, [quotation.id], body=_('Cancelled by the call for bids associated to this request for quotation.'), context=context) po.message_post(cr, uid, [quotation.id], body=_('Cancelled by the call for bids associated to this request for quotation.'), context=context)
return True return True

View File

@ -60,7 +60,7 @@ class sale_make_invoice(osv.osv_memory):
for i in o.invoice_ids: for i in o.invoice_ids:
newinv.append(i.id) newinv.append(i.id)
# Dummy call to workflow, will not create another invoice but bind the new invoice to the subflow # Dummy call to workflow, will not create another invoice but bind the new invoice to the subflow
order_obj.signal_manual_invoice(cr, uid, [o.id for o in orders if o.order_policy == 'manual']) order_obj.signal_workflow(cr, uid, [o.id for o in orders if o.order_policy == 'manual'], 'manual_invoice')
result = mod_obj.get_object_reference(cr, uid, 'account', 'action_invoice_tree1') result = mod_obj.get_object_reference(cr, uid, 'account', 'action_invoice_tree1')
id = result and result[1] or False id = result and result[1] or False
result = act_obj.read(cr, uid, [id], context=context)[0] result = act_obj.read(cr, uid, [id], context=context)[0]

View File

@ -159,7 +159,7 @@ class sale_order(osv.osv):
raise osv.except_osv( raise osv.except_osv(
_('Cannot cancel sales order!'), _('Cannot cancel sales order!'),
_('You must first cancel all delivery order(s) attached to this sales order.')) _('You must first cancel all delivery order(s) attached to this sales order.'))
stock_obj.signal_button_cancel(cr, uid, [p.id for p in sale.picking_ids]) stock_obj.signal_workflow(cr, uid, [p.id for p in sale.picking_ids], 'button_cancel')
return super(sale_order, self).action_cancel(cr, uid, ids, context=context) return super(sale_order, self).action_cancel(cr, uid, ids, context=context)
def action_wait(self, cr, uid, ids, context=None): def action_wait(self, cr, uid, ids, context=None):
@ -356,7 +356,7 @@ class stock_move(osv.osv):
if move.procurement_id and move.procurement_id.sale_line_id: if move.procurement_id and move.procurement_id.sale_line_id:
sale_ids.append(move.procurement_id.sale_line_id.order_id.id) sale_ids.append(move.procurement_id.sale_line_id.order_id.id)
if sale_ids: if sale_ids:
self.pool.get('sale.order').signal_ship_except(cr, uid, sale_ids) self.pool.get('sale.order').signal_workflow(cr, uid, sale_ids, 'ship_except')
return super(stock_move, self).action_cancel(cr, uid, ids, context=context) return super(stock_move, self).action_cancel(cr, uid, ids, context=context)
def _create_invoice_line_from_vals(self, cr, uid, move, invoice_line_vals, context=None): def _create_invoice_line_from_vals(self, cr, uid, move, invoice_line_vals, context=None):

View File

@ -76,7 +76,7 @@
!python {model: sale.order}: | !python {model: sale.order}: |
invoice_ids = self.browse(cr, uid, ref("sale.sale_order_8")).invoice_ids invoice_ids = self.browse(cr, uid, ref("sale.sale_order_8")).invoice_ids
first_invoice_id = invoice_ids[0] first_invoice_id = invoice_ids[0]
self.pool.get('account.invoice').signal_invoice_cancel(cr, uid, [first_invoice_id.id]) self.pool.get('account.invoice').signal_workflow(cr, uid, [first_invoice_id.id], 'invoice_cancel')
- -
I check order status in "Invoice Exception" and related invoice is in cancel state. I check order status in "Invoice Exception" and related invoice is in cancel state.
- -

View File

@ -190,7 +190,7 @@
so = self.browse(cr, uid, ref("sale_order_service")) so = self.browse(cr, uid, ref("sale_order_service"))
account_invoice_obj = self.pool.get('account.invoice') account_invoice_obj = self.pool.get('account.invoice')
for invoice in so.invoice_ids: for invoice in so.invoice_ids:
account_invoice_obj.signal_invoice_open(cr, uid, [invoice.id]) account_invoice_obj.signal_workflow(cr, uid, [invoice.id], 'invoice_open')
- -
I pay the invoice I pay the invoice
- -

View File

@ -76,7 +76,7 @@ class make_procurement(osv.osv_memory):
'location_id': wh.lot_stock_id.id, 'location_id': wh.lot_stock_id.id,
'company_id': wh.company_id.id, 'company_id': wh.company_id.id,
}) })
procurement_obj.signal_button_confirm(cr, uid, [procure_id]) procurement_obj.signal_workflow(cr, uid, [procure_id], 'button_confirm')
id2 = data_obj._get_id(cr, uid, 'procurement', 'procurement_tree_view') id2 = data_obj._get_id(cr, uid, 'procurement', 'procurement_tree_view')
id3 = data_obj._get_id(cr, uid, 'procurement', 'procurement_form_view') id3 = data_obj._get_id(cr, uid, 'procurement', 'procurement_form_view')

View File

@ -65,7 +65,7 @@ class sale_quote(http.Controller):
if token != order.access_token: if token != order.access_token:
return request.website.render('website.404') return request.website.render('website.404')
attachments=sign and [('signature.png', sign.decode('base64'))] or [] attachments=sign and [('signature.png', sign.decode('base64'))] or []
order_obj.signal_order_confirm(request.cr, SUPERUSER_ID, [order_id], context=request.context) order_obj.signal_workflow(request.cr, SUPERUSER_ID, [order_id], 'order_confirm', context=request.context)
message = _('Order signed by %s') % (signer,) message = _('Order signed by %s') % (signer,)
self.__message_post(message, order_id, type='comment', subtype='mt_comment', attachments=attachments) self.__message_post(message, order_id, type='comment', subtype='mt_comment', attachments=attachments)
return True return True

View File

@ -848,9 +848,9 @@ class ir_actions_server(osv.osv):
def run_action_trigger(self, cr, uid, action, eval_context=None, context=None): def run_action_trigger(self, cr, uid, action, eval_context=None, context=None):
""" Trigger a workflow signal, depending on the use_relational_model: """ Trigger a workflow signal, depending on the use_relational_model:
- `base`: base_model_pool.signal_<TRIGGER_NAME>(cr, uid, context.get('active_id')) - `base`: base_model_pool.signal_workflow(cr, uid, context.get('active_id'), <TRIGGER_NAME>)
- `relational`: find the related model and object, using the relational - `relational`: find the related model and object, using the relational
field, then target_model_pool.signal_<TRIGGER_NAME>(cr, uid, target_id) field, then target_model_pool.signal_workflow(cr, uid, target_id, <TRIGGER_NAME>)
""" """
obj_pool = self.pool[action.model_id.model] obj_pool = self.pool[action.model_id.model]
if action.use_relational_model == 'base': if action.use_relational_model == 'base':

View File

@ -4937,19 +4937,6 @@ class BaseModel(object):
""" stuff to do right after the registry is built """ """ stuff to do right after the registry is built """
pass pass
def __getattr__(self, name):
if name.startswith('signal_'):
# self.signal_XXX() sends signal XXX to the record's workflow
signal_name = name[7:]
assert signal_name
return (lambda *args, **kwargs:
self.signal_workflow(*args, signal=signal_name, **kwargs))
get = getattr(super(BaseModel, self), '__getattr__', None)
if get is None:
raise AttributeError("%r has no attribute %r" % (type(self).__name__, name))
return get(name)
def _patch_method(self, name, method): def _patch_method(self, name, method):
""" Monkey-patch a method for all instances of this model. This replaces """ Monkey-patch a method for all instances of this model. This replaces
the method called `name` by `method` in `self`'s class. the method called `name` by `method` in `self`'s class.