'crm_lead_view.xml',
'crm_lead_menu.xml',
+ 'crm_salesteams.xml',
+
'crm_meeting_menu.xml',
'crm_phonecall_view.xml',
'test/ui/duplicate_lead.yml',
'test/ui/delete_lead.yml',
],
+ 'css': ['static/src/css/crm.css'],
'installable': True,
'application': True,
'auto_install': False,
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)
+ lead_obj = self.pool.get('crm.lead')
+ for section_id in section_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)
+ lead_obj = self.pool.get('crm.lead')
+ for section_id in section_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
+
_columns = {
'name': fields.char('Sales Team', size=64, required=True, translate=True),
'complete_name': fields.function(get_full_name, type='char', size=256, readonly=True, store=True),
'alias_id': fields.many2one('mail.alias', 'Alias', ondelete="cascade", required=True,
help="The email address associated with this team. New emails received will automatically "
"create new leads assigned to the team."),
+ 'number_lead': fields.function(get_number_leads, type='integer', readonly=True),
+ 'number_opportunity': fields.function(get_number_opportunities, type='integer', readonly=True),
}
def _get_stage_common(self, cr, uid, context):
</record>
<record model="crm.case.stage" id="stage_lead6">
<field name="name">Won</field>
+ <field eval="True" name="fold"/>
<field eval="1" name="case_default"/>
<field name="state">done</field>
<field eval="'100'" name="probability"/>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+ <data>
+
+ <!-- CRM lead search by Salesteams -->
+
+ <record model="ir.actions.act_window" id="crm_case_form_view_salesteams_lead">
+ <field name="name">Leads</field>
+ <field name="res_model">crm.lead</field>
+ <field name="view_mode">tree,form</field>
+ <field name="domain">['|', ('type','=','lead'), ('type','=',False)]</field>
+ <field name="context">{
+ 'search_default_section_id': [active_id],
+ 'default_section_id': active_id,
+ 'search_default_new': True,
+ 'search_default_open': True
+ }</field>
+ <field name="help" type="html">
+ <p class="oe_view_nocontent_create">
+ Click to create a new lead.
+ </p><p>
+ Use leads if you need a qualification step before creating an
+ opportunity or a customer. It can be a business card you received,
+ a contact form filled in your website, or a file of unqualified
+ prospects you import, etc.
+ </p><p>
+ Once qualified, the lead can be converted into a business
+ opportunity and/or a new customer in your address book.
+ </p>
+ </field>
+ </record>
+
+ <!-- CRM opportunity search by Salesteams -->
+
+ <record model="ir.actions.act_window" id="crm_case_form_view_salesteams_opportunity">
+ <field name="name">Leads</field>
+ <field name="res_model">crm.lead</field>
+ <field name="view_mode">kanban,tree,form</field>
+ <field name="domain">[('type','=','opportunity')]</field>
+ <field name="view_id" ref="crm.crm_case_kanban_view_leads"/>
+ <field name="context">{
+ 'search_default_section_id': [active_id],
+ 'default_section_id': active_id,
+ 'search_default_new': True,
+ 'search_default_open': True
+ }</field>
+ <field name="help" type="html">
+ <p class="oe_view_nocontent_create">
+ Click to create a new lead.
+ </p><p>
+ Use leads if you need a qualification step before creating an
+ opportunity or a customer. It can be a business card you received,
+ a contact form filled in your website, or a file of unqualified
+ prospects you import, etc.
+ </p><p>
+ Once qualified, the lead can be converted into a business
+ opportunity and/or a new customer in your address book.
+ </p>
+ </field>
+ </record>
+
+ <!-- Case Sections Salesteams kanban view -->
+
+ <record model="ir.ui.view" id="crm_case_section_salesteams_view_kanban">
+ <field name="name">crm.case.section.kanban</field>
+ <field name="model">crm.case.section</field>
+ <field name="arch" type="xml">
+ <kanban version="7.0">
+ <field name="name"/>
+ <field name="user_id"/>
+ <field name="member_ids"/>
+ <field name="note"/>
+ <field name="alias_id"/>
+ <field name="number_lead"/>
+ <field name="number_opportunity"/>
+ <templates>
+ <t t-name="kanban-box">
+ <div t-attf-class="oe_kanban_card oe_kanban_project oe_kanban_global_click oe_kanban_crm_salesteams" style="width:200px;">
+ <div class="oe_dropdown_toggle oe_dropdown_kanban" groups="base.group_user">
+ <span class="oe_e">í</span>
+ <ul class="oe_dropdown_menu">
+ <t t-if="widget.view.is_action_enabled('edit')"><li><a type="edit">Project Settings</a></li></t>
+ <t t-if="widget.view.is_action_enabled('delete')"><li><a type="delete">Delete</a></li></t>
+ </ul>
+ </div>
+ <div class="oe_kanban_content">
+ <h4>
+ <field name="name"/>
+ <div class="oe_kanban_crm_salesteams_leader">
+ <small>
+ <t t-if="record.user_id.raw_value">(<field name="user_id"/>)</t>
+ <t t-if="!record.user_id.raw_value"><br/></t>
+ </small>
+ </div>
+ </h4>
+ <div class="oe_kanban_crm_salesteams_list">
+ <a name="%(crm_case_form_view_salesteams_lead)d" type="action">
+ <field name="number_lead"/>
+ <t t-if="record.number_lead.raw_value > 1">Leads</t>
+ <t t-if="record.number_lead.raw_value <= 1">Lead</t>
+ </a><br/>
+ <a name="%(crm_case_form_view_salesteams_opportunity)d" type="action">
+ <field name="number_opportunity"/>
+ <t t-if="record.number_opportunity.raw_value > 1">Opportunities</t>
+ <t t-if="record.number_opportunity.raw_value <= 1">Opportunity</t>
+ </a>
+ </div>
+ <div class="oe_kanban_crm_salesteams_avatars">
+ <t t-foreach="record.member_ids.raw_value.slice(0,11)" t-as="member">
+ <img t-att-src="kanban_image('res.users', 'image_small', member)" t-att-data-member_id="member"/>
+ </t>
+ </div>
+ <br/>
+ <small style="position: absolute; bottom: 5px;">
+ <field name="alias_id"/>
+ </small>
+ </div>
+ </div>
+ </t>
+ </templates>
+ </kanban>
+ </field>
+ </record>
+
+ <!-- Case Sections Action -->
+
+ <record id="crm_case_section_salesteams_act" model="ir.actions.act_window">
+ <field name="name">Sales Teams</field>
+ <field name="res_model">crm.case.section</field>
+ <field name="view_type">form</field>
+ <field name="view_mode">kanban,tree,form</field>
+ <field name="view_id" ref="crm_case_section_salesteams_view_kanban"/>
+ <field name="help" type="html">
+ <p class="oe_view_nocontent_create">
+ Click to define a new sales team.
+ </p><p>
+ Use sales team to organize your different salespersons or
+ departments into separate teams. Each team will work in
+ its own list of opportunities.
+ </p>
+ </field>
+ </record>
+
+ <menuitem
+ action="crm_case_section_salesteams_act"
+ id="crm.menu_crm_case_section_act"
+ sequence="1"
+ parent="base.menu_sales"
+ groups="base.group_sale_manager,base.group_sale_salesman"/>
+ </data>
+</openerp>
\ No newline at end of file
<field name="model">crm.case.section</field>
<field name="arch" type="xml">
<form string="Sales Team" version="7.0">
- <group>
+ <sheet>
<group>
- <field name="name" colspan="2"/>
- <field name="parent_id"/>
- <field name="code"/>
- </group>
+ <group>
+ <field name="name" colspan="2"/>
+ <field name="parent_id"/>
+ <field name="code"/>
+ </group>
- <group>
- <field name="user_id"/>
- <field name="resource_calendar_id"/>
- <field name="active"/>
- </group>
- </group>
- <notebook colspan="4">
- <page string="Sales Team">
- <group>
- <field name="alias_id" invisible="1" required="0"/>
- <label for="alias_name" attrs="{'invisible': [('alias_domain', '=', False)]}"/>
- <div attrs="{'invisible': [('alias_domain', '=', False)]}">
- <field name="alias_name" class="oe_inline" attrs="{'required': [('alias_id', '!=', False)]}"/>@<field name="alias_domain" class="oe_inline"/>
- </div>
- <field name="change_responsible"/>
+ <group>
+ <field name="user_id"/>
+ <field name="resource_calendar_id"/>
+ <field name="active"/>
</group>
- <separator string="Team Members"/>
- <field name="member_ids" widget="many2many_kanban">
- <kanban quick_create="false" create="true">
- <field name="name"/>
- <templates>
- <t t-name="kanban-box">
- <div style="position: relative">
- <a t-if="! read_only_mode" type="delete" style="position: absolute; right: 0; padding: 4px; diplay: inline-block">X</a>
- <div class="oe_module_vignette">
- <div class="oe_module_desc">
- <field name="name"/>
+ </group>
+ <notebook colspan="4">
+ <page string="Sales Team">
+ <group>
+ <field name="alias_id" invisible="1" required="0"/>
+ <label for="alias_name" attrs="{'invisible': [('alias_domain', '=', False)]}"/>
+ <div attrs="{'invisible': [('alias_domain', '=', False)]}">
+ <field name="alias_name" class="oe_inline" attrs="{'required': [('alias_id', '!=', False)]}"/>@<field name="alias_domain" class="oe_inline"/>
+ </div>
+ <field name="change_responsible"/>
+ </group>
+ <separator string="Team Members"/>
+ <field name="member_ids" widget="many2many_kanban">
+ <kanban quick_create="false" create="true">
+ <field name="name"/>
+ <templates>
+ <t t-name="kanban-box">
+ <div style="position: relative">
+ <a t-if="! read_only_mode" type="delete" style="position: absolute; right: 0; padding: 4px; diplay: inline-block">X</a>
+ <div class="oe_module_vignette">
+ <div class="oe_module_desc">
+ <field name="name"/>
+ </div>
</div>
</div>
- </div>
- </t>
- </templates>
- </kanban>
- </field>
- </page>
- <page string="Stages">
- <separator string="Select Stages for this Sales Team"/>
- <field name="stage_ids"/>
- </page>
- <page string="Notes">
- <field name="note"/>
- </page>
- </notebook>
+ </t>
+ </templates>
+ </kanban>
+ </field>
+ </page>
+ <page string="Stages">
+ <separator string="Select Stages for this Sales Team"/>
+ <field name="stage_ids"/>
+ </page>
+ <page string="Notes">
+ <field name="note"/>
+ </page>
+ </notebook>
+ </sheet>
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers" help="Follow this salesteam to automatically track the events associated to users of this team."/>
<field name="message_ids" widget="mail_thread"/>
access_crm_lead_partner_manager,crm.lead.partner.manager,model_crm_lead,base.group_partner_manager,1,0,0,0\r
access_crm_phonecall_partner_manager,crm.phonecall.partner.manager,model_crm_phonecall,base.group_partner_manager,1,1,1,1\r
access_crm_payment_mode_user,crm.payment.mode,model_crm_payment_mode,base.group_sale_salesman,1,0,0,0\r
-access_crm_payment_mode,crm.payment.mode,model_crm_payment_mode,base.group_sale_manager,1,1,1,1\r
+access_crm_payment_mode,crm.payment.mode,model_crm_payment_mode,base.group_sale_manager,1,1,1,1
\ No newline at end of file
--- /dev/null
+.oe_kanban_crm_salesteams {
+ width: 220px;
+ min-height: 160px;
+}
+.oe_kanban_crm_salesteams_avatars {
+ margin-top: 8px;
+}
+
+.oe_kanban_crm_salesteams_avatars img {
+ width: 30px;
+ height: 30px;
+ padding-left: 0px;
+ margin-top: 3px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ border-radius: 2px;
+ -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
+ -box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
+}
+
+