diff --git a/addons/crm/crm.py b/addons/crm/crm.py
index 9fa6b6281f7..c00b5ff2597 100644
--- a/addons/crm/crm.py
+++ b/addons/crm/crm.py
@@ -109,17 +109,17 @@ class crm_case_section(osv.osv):
def get_full_name(self, cr, uid, ids, field_name, arg, context=None):
return dict(self.name_get(cr, uid, ids, context=context))
- def get_number_leads(self, cr, uid, section_ids, field_name, arg, context=None):
- res = dict.fromkeys(section_ids, 0)
+ def get_number_leads(self, cr, uid, ids, field_name, arg, context=None):
+ res = dict.fromkeys(ids, 0)
lead_obj = self.pool.get('crm.lead')
- for section_id in section_ids:
+ for section_id in ids:
res[section_id] = lead_obj.search(cr, uid, [("section_id", "=", section_id), '|', '|', ("type", "=", "lead"), ("type", "=", "both"), ("type", "=", False), ('state', 'not in', ['done', 'cancel'])], count=True, context=context)
return res
- def get_number_opportunities(self, cr, uid, section_ids, field_name, arg, context=None):
- res = dict.fromkeys(section_ids, 0)
+ def get_number_opportunities(self, cr, uid, ids, field_name, arg, context=None):
+ res = dict.fromkeys(ids, 0)
lead_obj = self.pool.get('crm.lead')
- for section_id in section_ids:
+ for section_id in ids:
res[section_id] = lead_obj.search(cr, uid, [("section_id", "=", section_id), '|', ("type", "=", "opportunity"), ("type", "=", "both"), ('state', 'not in', ['done', 'cancel'])], context=context, count=True)
return res
diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py
index d675753bcb2..20d9339ede5 100644
--- a/addons/crm/crm_lead.py
+++ b/addons/crm/crm_lead.py
@@ -85,28 +85,11 @@ class crm_lead(base_stage, format_address, osv.osv):
}
def dynamic_help(self, cr, uid, help, context=None):
- alias_txt = ""
- if context.get('default_section_id'):
- project_id = self.pool.get('crm.case.section').browse(cr, uid, context.get('default_section_id'), context=context)
- alias = project_id.alias_id and project_id.alias_id.name_get() or False
- if alias and alias[0] and alias[0][1]:
- alias_txt = alias[0][1]
- else:
- model_id = self.pool.get('ir.model').search(cr, uid, [("model", "=", self._name)], context=context)[0]
- alias_obj = self.pool.get('mail.alias')
- alias_nb = 0
- alias_ids = alias_obj.search(cr, uid, [("alias_model_id", "=", model_id)], context=context, limit=5)
- if alias_ids:
- for alias in alias_obj.browse(cr, uid, alias_ids, context=context):
- email = "%s@%s" % (alias.alias_name, alias.alias_domain)
- alias_txt = "%s%s%s" % (alias_txt, (alias_nb and ", " or " "), email)
- alias_nb += 1
- if alias_txt:
- if context.get('default_type', False) == "opportunity":
- help = "%s %s" % (help, _("
You can also create opportunities by sending an email to: %s
" % alias_txt))
- else:
- help = "%s %s" % (help, _("You can also create lead by sending an email to: %s
" % alias_txt))
- return help
+ if context.get('default_type', None) == 'lead':
+ context['dynamic_help_model'] = 'crm.case.section'
+ context['dynamic_help_id'] = context.get('default_section_id', None)
+ context['dynamic_help_documents'] = _("leads")
+ return super(crm_lead, self).dynamic_help(cr, uid, help, context=context)
def create(self, cr, uid, vals, context=None):
if context is None:
diff --git a/addons/crm/crm_salesteams.xml b/addons/crm/crm_salesteams.xml
index 9a76c98a985..3c55f0198f7 100644
--- a/addons/crm/crm_salesteams.xml
+++ b/addons/crm/crm_salesteams.xml
@@ -51,7 +51,7 @@
kanban,tree,graph,form,calendar
[('type','=','opportunity')]
-
+
{
'search_default_section_id': [active_id], 'default_section_id': active_id, 'stage_type': 'opportunity', 'default_type': 'opportunity', 'default_user_id': uid
}
@@ -120,12 +120,12 @@
%%
diff --git a/addons/crm/static/src/css/crm.css b/addons/crm/static/src/css/crm.css
index e9f7abfa7ae..a263393e8fa 100644
--- a/addons/crm/static/src/css/crm.css
+++ b/addons/crm/static/src/css/crm.css
@@ -36,4 +36,8 @@
.oe_kanban_crm_salesteams_alias small {
display: block;
margin-left: 20px;
+}
+
+.oe_kanban_crm_salesteams_list a {
+ white-space: nowrap;
}
\ No newline at end of file
diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py
index d75a9199369..27ca09136d6 100644
--- a/addons/mail/mail_thread.py
+++ b/addons/mail/mail_thread.py
@@ -35,6 +35,7 @@ from openerp import SUPERUSER_ID
from openerp.addons.mail.mail_message import decode
from openerp.osv import fields, osv
from openerp.tools.safe_eval import safe_eval as eval
+from openerp.tools.translate import _
_logger = logging.getLogger(__name__)
@@ -88,6 +89,31 @@ class mail_thread(osv.AbstractModel):
# :param function lambda: returns whether the tracking should record using this subtype
_track = {}
+ def dynamic_help(self, cr, uid, help, context=None):
+ if not context.get('dynamic_help_model', None):
+ return help
+
+ alias_txt = ""
+ if context.get('dynamic_help_id', None):
+ object_id = self.pool.get(context.get('dynamic_help_model')).browse(cr, uid, context.get('dynamic_help_id'), context=context)
+ alias = object_id.alias_id and object_id.alias_id.name_get() or False
+ if alias and alias[0] and alias[0][1]:
+ alias_txt = alias[0][1]
+ else:
+ model_id = self.pool.get('ir.model').search(cr, uid, [("model", "=", self._name)], context=context)[0]
+ alias_obj = self.pool.get('mail.alias')
+ alias_nb = 0
+ alias_ids = alias_obj.search(cr, uid, [("alias_model_id", "=", model_id)], context=context, limit=5)
+ if alias_ids:
+ for alias in alias_obj.browse(cr, uid, alias_ids, context=context):
+ email = "%s@%s" % (alias.alias_name, alias.alias_domain)
+ alias_txt = "%s%s%s" % (alias_txt, (alias_nb and ", " or " "), email)
+ alias_nb += 1
+ if alias_txt:
+ help = "%s %s" % (help, _("You can also create %s by sending an email to: %s
" % (context.get('dynamic_help_documents', _("documents")), alias_txt)))
+
+ return help
+
def _get_message_data(self, cr, uid, ids, name, args, context=None):
""" Computes:
- message_unread: has uid unread message for the document
diff --git a/addons/project/project.py b/addons/project/project.py
index 91dfc858113..a35ecfe4ece 100644
--- a/addons/project/project.py
+++ b/addons/project/project.py
@@ -891,26 +891,12 @@ class task(base_stage, osv.osv):
def dynamic_help(self, cr, uid, help, context=None):
- alias_txt = ""
- if context.get('default_project_id'):
- project_id = self.pool.get('project.project').browse(cr, uid, context.get('default_project_id'), context=context)
- alias = project_id.alias_id and project_id.alias_id.name_get() or False
- if alias and alias[0] and alias[0][1]:
- alias_txt = alias[0][1]
- else:
- model_id = self.pool.get('ir.model').search(cr, uid, [("model", "=", self._name)], context=context)[0]
- alias_obj = self.pool.get('mail.alias')
- alias_nb = 0
- alias_ids = alias_obj.search(cr, uid, [("alias_model_id", "=", model_id)], context=context, limit=5)
- if alias_ids:
- for alias in alias_obj.browse(cr, uid, alias_ids, context=context):
- email = "%s@%s" % (alias.alias_name, alias.alias_domain)
- alias_txt = "%s%s%s" % (alias_txt, (alias_nb and ", " or " "), email)
- alias_nb += 1
- if alias_txt:
- help = "%s %s" % (help, _("You can also create tasks by sending an email to: %s
" % alias_txt))
- return help
-
+ context['dynamic_help_model'] = 'project.project'
+ context['dynamic_help_id'] = context.get('default_project_id', None)
+ context['dynamic_help_documents'] = _("tasks")
+ print context
+ return super(task, self).dynamic_help(cr, uid, help, context=context)
+
# ----------------------------------------
# Case management
# ----------------------------------------
diff --git a/addons/sale/sale_view.xml b/addons/sale/sale_view.xml
index 18fdb739923..bf5ccf8ab7b 100644
--- a/addons/sale/sale_view.xml
+++ b/addons/sale/sale_view.xml
@@ -340,6 +340,7 @@
+
diff --git a/addons/sale_crm/sale_crm.py b/addons/sale_crm/sale_crm.py
index 1f3f85d5ed1..00a6503f70a 100644
--- a/addons/sale_crm/sale_crm.py
+++ b/addons/sale_crm/sale_crm.py
@@ -29,6 +29,27 @@ class sale_order(osv.osv):
domain="['|',('section_id','=',section_id),('section_id','=',False), ('object_id.model', '=', 'crm.lead')]")
}
+class crm_case_section(osv.osv):
+ _inherit = 'crm.case.section'
+
+ def get_number_saleorder(self, cr, uid, ids, field_name, arg, context=None):
+ res = dict.fromkeys(ids, 0)
+ obj = self.pool.get('sale.order')
+ for section_id in ids:
+ res[section_id] = obj.search(cr, uid, [("section_id", "=", section_id), ('state','not in',('draft','sent','cancel'))], context=context, count=True)
+ return res
+
+ def get_number_quotation(self, cr, uid, ids, field_name, arg, context=None):
+ res = dict.fromkeys(ids, 0)
+ obj = self.pool.get('sale.order')
+ for section_id in ids:
+ res[section_id] = obj.search(cr, uid, [("section_id", "=", section_id), ('state','in',('draft','sent','cancel'))], context=context, count=True)
+ return res
+
+ _columns = {
+ 'number_saleorder': fields.function(get_number_saleorder, type='integer', readonly=True),
+ 'number_quotation': fields.function(get_number_quotation, type='integer', readonly=True),
+ }
class res_users(osv.Model):
_inherit = 'res.users'
diff --git a/addons/sale_crm/sale_crm_view.xml b/addons/sale_crm/sale_crm_view.xml
index 0b5fce2f5cd..4c96e8b2cc5 100644
--- a/addons/sale_crm/sale_crm_view.xml
+++ b/addons/sale_crm/sale_crm_view.xml
@@ -113,5 +113,78 @@
+
+
+
+ Sales Orders
+ ir.actions.act_window
+ sale.order
+ form
+ tree,form,calendar,graph
+
+ [('state','not in',('draft','sent','cancel'))]
+ {
+ 'search_default_section_id': [active_id], 'default_section_id': active_id
+ }
+
+
+ Click to create a quotation that can be converted into a sales
+ order.
+
+ OpenERP will help you efficiently handle the complete sales flow:
+ quotation, sales order, delivery, invoicing and payment.
+
+
+
+
+
+ Quotations
+ ir.actions.act_window
+ sale.order
+ form
+
+ tree,form,calendar,graph
+ {
+ 'search_default_section_id': [active_id], 'default_section_id': active_id, 'show_address': 1
+ }
+ [('state','in',('draft','sent','cancel'))]
+
+
+
+ Click to create a quotation, the first step of a new sale.
+
+ OpenERP will help you handle efficiently the complete sale flow:
+ from the quotation to the sales order, the
+ delivery, the invoicing and the payment collection.
+
+ The social feature helps you organize discussions on each sales
+ order, and allow your customers to keep track of the evolution
+ of the sales order.
+
+
+
+
+
+ crm.case.section.kanban
+ crm.case.section
+
+
+
+
+
+
+
+
+
+
+ QuotationQuotations
+
+
+ Sales OrderSales Orders
+
+
+
+
+