[REF] sale: removed some chatter messages, replaced by a track on state and amount, and a _track with subtype. Moved link between salesteam and sale order into sale_crm.
bzr revid: tde@openerp.com-20121218181718-zw3d4lmau83bhk7v
This commit is contained in:
parent
f0d5a92950
commit
ddda5c3640
|
@ -50,6 +50,12 @@ class sale_order(osv.osv):
|
||||||
_inherit = ['mail.thread', 'ir.needaction_mixin']
|
_inherit = ['mail.thread', 'ir.needaction_mixin']
|
||||||
_description = "Sales Order"
|
_description = "Sales Order"
|
||||||
|
|
||||||
|
_track = {
|
||||||
|
'state': {
|
||||||
|
'sale.mt_order_confirmed': lambda self, cr, uid, obj, ctx=None: obj.state in ['manual', 'progress']
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
def onchange_shop_id(self, cr, uid, ids, shop_id, context=None):
|
def onchange_shop_id(self, cr, uid, ids, shop_id, context=None):
|
||||||
v = {}
|
v = {}
|
||||||
if shop_id:
|
if shop_id:
|
||||||
|
@ -187,7 +193,8 @@ class sale_order(osv.osv):
|
||||||
('manual', 'Sale to Invoice'),
|
('manual', 'Sale to Invoice'),
|
||||||
('invoice_except', 'Invoice Exception'),
|
('invoice_except', 'Invoice Exception'),
|
||||||
('done', 'Done'),
|
('done', 'Done'),
|
||||||
], 'Status', readonly=True, tracked=True, help="Gives the status of the quotation or sales order. \nThe exception status is automatically set when a cancel operation occurs in the processing of a document linked to the sale order. \nThe 'Waiting Schedule' status is set when the invoice is confirmed but waiting for the scheduler to run on the order date.", select=True),
|
], 'Status', readonly=True, track_visibility=1,
|
||||||
|
help="Gives the status of the quotation or sales order. \nThe exception status is automatically set when a cancel operation occurs in the processing of a document linked to the sale order. \nThe 'Waiting Schedule' status is set when the invoice is confirmed but waiting for the scheduler to run on the order date.", select=True),
|
||||||
'date_order': fields.date('Date', required=True, readonly=True, select=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}),
|
'date_order': fields.date('Date', required=True, readonly=True, select=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}),
|
||||||
'create_date': fields.datetime('Creation Date', readonly=True, select=True, help="Date on which sales order is created."),
|
'create_date': fields.datetime('Creation Date', readonly=True, select=True, help="Date on which sales order is created."),
|
||||||
'date_confirm': fields.date('Confirmation Date', readonly=True, select=True, help="Date on which sales order is confirmed."),
|
'date_confirm': fields.date('Confirmation Date', readonly=True, select=True, help="Date on which sales order is confirmed."),
|
||||||
|
@ -213,24 +220,24 @@ class sale_order(osv.osv):
|
||||||
fnct_search=_invoiced_search, type='boolean', help="It indicates that sale order has at least one invoice."),
|
fnct_search=_invoiced_search, type='boolean', help="It indicates that sale order has at least one invoice."),
|
||||||
'note': fields.text('Terms and conditions'),
|
'note': fields.text('Terms and conditions'),
|
||||||
|
|
||||||
'amount_untaxed': fields.function(_amount_all, digits_compute= dp.get_precision('Account'), string='Untaxed Amount',
|
'amount_untaxed': fields.function(_amount_all, digits_compute=dp.get_precision('Account'), string='Untaxed Amount',
|
||||||
store = {
|
store={
|
||||||
'sale.order': (lambda self, cr, uid, ids, c={}: ids, ['order_line'], 10),
|
'sale.order': (lambda self, cr, uid, ids, c={}: ids, ['order_line'], 10),
|
||||||
'sale.order.line': (_get_order, ['price_unit', 'tax_id', 'discount', 'product_uom_qty'], 10),
|
'sale.order.line': (_get_order, ['price_unit', 'tax_id', 'discount', 'product_uom_qty'], 10),
|
||||||
},
|
},
|
||||||
multi='sums', help="The amount without tax."),
|
multi='sums', help="The amount without tax."),
|
||||||
'amount_tax': fields.function(_amount_all, digits_compute= dp.get_precision('Account'), string='Taxes',
|
'amount_tax': fields.function(_amount_all, digits_compute=dp.get_precision('Account'), string='Taxes',
|
||||||
store = {
|
store={
|
||||||
'sale.order': (lambda self, cr, uid, ids, c={}: ids, ['order_line'], 10),
|
'sale.order': (lambda self, cr, uid, ids, c={}: ids, ['order_line'], 10),
|
||||||
'sale.order.line': (_get_order, ['price_unit', 'tax_id', 'discount', 'product_uom_qty'], 10),
|
'sale.order.line': (_get_order, ['price_unit', 'tax_id', 'discount', 'product_uom_qty'], 10),
|
||||||
},
|
},
|
||||||
multi='sums', help="The tax amount."),
|
multi='sums', help="The tax amount."),
|
||||||
'amount_total': fields.function(_amount_all, digits_compute= dp.get_precision('Account'), string='Total',
|
'amount_total': fields.function(_amount_all, digits_compute=dp.get_precision('Account'), string='Total',
|
||||||
store = {
|
store={
|
||||||
'sale.order': (lambda self, cr, uid, ids, c={}: ids, ['order_line'], 10),
|
'sale.order': (lambda self, cr, uid, ids, c={}: ids, ['order_line'], 10),
|
||||||
'sale.order.line': (_get_order, ['price_unit', 'tax_id', 'discount', 'product_uom_qty'], 10),
|
'sale.order.line': (_get_order, ['price_unit', 'tax_id', 'discount', 'product_uom_qty'], 10),
|
||||||
},
|
},
|
||||||
multi='sums', help="The total amount."),
|
multi='sums', track_visibility=2, help="The total amount."),
|
||||||
|
|
||||||
'invoice_quantity': fields.selection([('order', 'Ordered Quantities')], 'Invoice on', help="The sale order will automatically create the invoice proposition (draft invoice).", required=True, readonly=True, states={'draft': [('readonly', False)]}),
|
'invoice_quantity': fields.selection([('order', 'Ordered Quantities')], 'Invoice on', help="The sale order will automatically create the invoice proposition (draft invoice).", required=True, readonly=True, states={'draft': [('readonly', False)]}),
|
||||||
'payment_term': fields.many2one('account.payment.term', 'Payment Term'),
|
'payment_term': fields.many2one('account.payment.term', 'Payment Term'),
|
||||||
|
@ -323,10 +330,7 @@ class sale_order(osv.osv):
|
||||||
def create(self, cr, uid, vals, context=None):
|
def create(self, cr, uid, vals, context=None):
|
||||||
if vals.get('name','/')=='/':
|
if vals.get('name','/')=='/':
|
||||||
vals['name'] = self.pool.get('ir.sequence').get(cr, uid, 'sale.order') or '/'
|
vals['name'] = self.pool.get('ir.sequence').get(cr, uid, 'sale.order') or '/'
|
||||||
order = super(sale_order, self).create(cr, uid, vals, context=context)
|
return super(sale_order, self).create(cr, uid, vals, context=context)
|
||||||
if order:
|
|
||||||
self.create_send_note(cr, uid, [order], context=context)
|
|
||||||
return order
|
|
||||||
|
|
||||||
def button_dummy(self, cr, uid, ids, context=None):
|
def button_dummy(self, cr, uid, ids, context=None):
|
||||||
return True
|
return True
|
||||||
|
@ -561,7 +565,6 @@ class sale_order(osv.osv):
|
||||||
wf_service.trg_validate(uid, 'account.invoice', inv, 'invoice_cancel', cr)
|
wf_service.trg_validate(uid, 'account.invoice', inv, 'invoice_cancel', cr)
|
||||||
sale_order_line_obj.write(cr, uid, [l.id for l in sale.order_line],
|
sale_order_line_obj.write(cr, uid, [l.id for l in sale.order_line],
|
||||||
{'state': 'cancel'})
|
{'state': 'cancel'})
|
||||||
self.cancel_send_note(cr, uid, [sale.id], context=None)
|
|
||||||
self.write(cr, uid, ids, {'state': 'cancel'})
|
self.write(cr, uid, ids, {'state': 'cancel'})
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
@ -596,7 +599,6 @@ class sale_order(osv.osv):
|
||||||
else:
|
else:
|
||||||
self.write(cr, uid, [o.id], {'state': 'progress', 'date_confirm': fields.date.context_today(self, cr, uid, context=context)})
|
self.write(cr, uid, [o.id], {'state': 'progress', 'date_confirm': fields.date.context_today(self, cr, uid, context=context)})
|
||||||
self.pool.get('sale.order.line').button_confirm(cr, uid, [x.id for x in o.order_line])
|
self.pool.get('sale.order.line').button_confirm(cr, uid, [x.id for x in o.order_line])
|
||||||
self.confirm_send_note(cr, uid, ids, context)
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def action_quotation_send(self, cr, uid, ids, context=None):
|
def action_quotation_send(self, cr, uid, ids, context=None):
|
||||||
|
@ -634,7 +636,6 @@ class sale_order(osv.osv):
|
||||||
}
|
}
|
||||||
|
|
||||||
def action_done(self, cr, uid, ids, context=None):
|
def action_done(self, cr, uid, ids, context=None):
|
||||||
self.done_send_note(cr, uid, ids, context=context)
|
|
||||||
return self.write(cr, uid, ids, {'state': 'done'}, context=context)
|
return self.write(cr, uid, ids, {'state': 'done'}, context=context)
|
||||||
|
|
||||||
# ------------------------------------------------
|
# ------------------------------------------------
|
||||||
|
@ -642,23 +643,7 @@ class sale_order(osv.osv):
|
||||||
# ------------------------------------------------
|
# ------------------------------------------------
|
||||||
|
|
||||||
def needaction_domain_get(self, cr, uid, ids, context=None):
|
def needaction_domain_get(self, cr, uid, ids, context=None):
|
||||||
return [('state', '=', 'draft'), ('user_id','=',uid)]
|
return [('state', '=', 'draft'), ('user_id', '=', uid)]
|
||||||
|
|
||||||
def create_send_note(self, cr, uid, ids, context=None):
|
|
||||||
for obj in self.browse(cr, uid, ids, context=context):
|
|
||||||
self.message_post(cr, uid, [obj.id], body=_("Quotation for <em>%s</em> <b>created</b>.") % (obj.partner_id.name), context=context)
|
|
||||||
|
|
||||||
def confirm_send_note(self, cr, uid, ids, context=None):
|
|
||||||
for obj in self.browse(cr, uid, ids, context=context):
|
|
||||||
self.message_post(cr, uid, [obj.id], body=_("Quotation for <em>%s</em> <b>converted</b> to Sale Order of %s %s.") % (obj.partner_id.name, obj.amount_total, obj.pricelist_id.currency_id.symbol), subtype="sale.mt_order_confirmed", context=context)
|
|
||||||
|
|
||||||
def cancel_send_note(self, cr, uid, ids, context=None):
|
|
||||||
for obj in self.browse(cr, uid, ids, context=context):
|
|
||||||
self.message_post(cr, uid, [obj.id], body=_("Sale Order for <em>%s</em> <b>cancelled</b>.") % (obj.partner_id.name), context=context)
|
|
||||||
|
|
||||||
def done_send_note(self, cr, uid, ids, context=None):
|
|
||||||
for obj in self.browse(cr, uid, ids, context=context):
|
|
||||||
self.message_post(cr, uid, [obj.id], body=_("Sale Order for <em>%s</em> set to <b>Done</b>") % (obj.partner_id.name), context=context)
|
|
||||||
|
|
||||||
def invoice_paid_send_note(self, cr, uid, ids, context=None):
|
def invoice_paid_send_note(self, cr, uid, ids, context=None):
|
||||||
self.message_post(cr, uid, ids, body=_("Invoice <b>paid</b>."), context=context)
|
self.message_post(cr, uid, ids, body=_("Invoice <b>paid</b>."), context=context)
|
||||||
|
|
|
@ -48,22 +48,12 @@
|
||||||
<record id="mt_quotation_sent" model="mail.message.subtype">
|
<record id="mt_quotation_sent" model="mail.message.subtype">
|
||||||
<field name="name">Quotation sent</field>
|
<field name="name">Quotation sent</field>
|
||||||
<field name="res_model">sale.order</field>
|
<field name="res_model">sale.order</field>
|
||||||
|
<field name="description">Quotation <b>send</b></field>
|
||||||
</record>
|
</record>
|
||||||
<record id="mt_order_confirmed" model="mail.message.subtype">
|
<record id="mt_order_confirmed" model="mail.message.subtype">
|
||||||
<field name="name">Sale Order Confirmed</field>
|
<field name="name">Sale Order Confirmed</field>
|
||||||
<field name="res_model">sale.order</field>
|
<field name="res_model">sale.order</field>
|
||||||
</record>
|
<field name="description">Quotation <b>confirmed</b></field>
|
||||||
|
|
||||||
<!-- Salesteam-related subtypes for messaging / Chatter -->
|
|
||||||
<record id="mt_salesteam_sent" model="mail.message.subtype">
|
|
||||||
<field name="name">Quotation sent</field>
|
|
||||||
<field name="res_model">crm.case.section</field>
|
|
||||||
<field name="default" eval="False"/>
|
|
||||||
</record>
|
|
||||||
<record id="mt_salesteam_confirmed" model="mail.message.subtype">
|
|
||||||
<field name="name">Sale Order Confirmed</field>
|
|
||||||
<field name="res_model">crm.case.section</field>
|
|
||||||
<field name="default" eval="False"/>
|
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
</data>
|
</data>
|
||||||
|
|
|
@ -41,6 +41,7 @@ modules.
|
||||||
'data': [
|
'data': [
|
||||||
'wizard/crm_make_sale_view.xml',
|
'wizard/crm_make_sale_view.xml',
|
||||||
'sale_crm_view.xml',
|
'sale_crm_view.xml',
|
||||||
|
'sale_crm_data.xml',
|
||||||
'process/sale_crm_process.xml',
|
'process/sale_crm_process.xml',
|
||||||
'security/sale_crm_security.xml',
|
'security/sale_crm_security.xml',
|
||||||
'security/ir.model.access.csv',
|
'security/ir.model.access.csv',
|
||||||
|
|
|
@ -29,15 +29,8 @@ class sale_order(osv.osv):
|
||||||
domain="['|',('section_id','=',section_id),('section_id','=',False), ('object_id.model', '=', 'crm.lead')]")
|
domain="['|',('section_id','=',section_id),('section_id','=',False), ('object_id.model', '=', 'crm.lead')]")
|
||||||
}
|
}
|
||||||
|
|
||||||
def create(self, cr, uid, vals, context=None):
|
|
||||||
order = super(sale_order, self).create(cr, uid, vals, context=context)
|
|
||||||
section_id = self.browse(cr, uid, order, context=context).section_id
|
|
||||||
if section_id:
|
|
||||||
# subscribe salesteam followers & subtypes to the sale order
|
|
||||||
self._subscribe_followers_subtype(cr, uid, [order], section_id, 'crm.case.section', context=context)
|
|
||||||
return order
|
|
||||||
|
|
||||||
def write(self, cr, uid, ids, vals, context=None):
|
def write(self, cr, uid, ids, vals, context=None):
|
||||||
|
# TDE todo: will be replaced by automatic in mail.thread
|
||||||
if vals.get('section_id'):
|
if vals.get('section_id'):
|
||||||
section_id = self.pool.get('crm.case.section').browse(cr, uid, vals.get('section_id'), context=context)
|
section_id = self.pool.get('crm.case.section').browse(cr, uid, vals.get('section_id'), context=context)
|
||||||
vals['message_follower_ids'] = [(6, 0, [follower.id]) for follower in section_id.message_follower_ids]
|
vals['message_follower_ids'] = [(6, 0, [follower.id]) for follower in section_id.message_follower_ids]
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<openerp>
|
||||||
|
<data noupdate="1">
|
||||||
|
|
||||||
|
<!-- Salesteam-related subtypes for messaging / Chatter -->
|
||||||
|
<record id="mt_salesteam_sent" model="mail.message.subtype">
|
||||||
|
<field name="name">Quotation sent</field>
|
||||||
|
<field name="res_model">crm.case.section</field>
|
||||||
|
<field name="parent_id" eval="ref('sale.mt_quotation_sent')"/>
|
||||||
|
<field name="parent_field">section_id</field>
|
||||||
|
</record>
|
||||||
|
<record id="mt_salesteam_confirmed" model="mail.message.subtype">
|
||||||
|
<field name="name">Sale Order Confirmed</field>
|
||||||
|
<field name="res_model">crm.case.section</field>
|
||||||
|
<field name="parent_id" eval="ref('sale.mt_order_confirmed')"/>
|
||||||
|
<field name="parent_field">section_id</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</data>
|
||||||
|
</openerp>
|
Loading…
Reference in New Issue