sale and sales_team module.
'base_partner_merge_view.xml',
'sales_team_view.xml',
- 'views/crm.xml',
],
'demo': [
'crm_demo.xml',
+++ /dev/null
-crm.css: crm.sass
- sass --trace -t expanded crm.sass:crm.css
+++ /dev/null
-@charset "utf-8";
-.openerp .oe_kanban_view .oe_kanban_crm_salesteams {
- /* Customize width and height of kanban according bootstrap3 */
- width: 357px;
- min-height: 254px !important;
- /* End of customize */
- cursor: default;
-}
-.openerp .oe_kanban_view .oe_kanban_crm_salesteams .oe_items_list {
- position: relative;
- /* Improved margin to set alignment of list items according bootstrap3 */
- margin: 10px 0 10px 9px;
- min-height: 10px;
-}
-.openerp .oe_kanban_view .oe_kanban_crm_salesteams .oe_items_list div {
- width: 160px;
- height: 22px;
- margin: 0 !important;
- position: relative;
- display: inline-block;
- float: left;
-}
-.openerp .oe_kanban_view .oe_kanban_crm_salesteams .oe_items_list div a:nth-child(2n) {
- position: absolute;
- left: 90px;
- top: 0;
-}
-.openerp .oe_kanban_view .oe_kanban_crm_salesteams .oe_items_list div:nth-child(2n) a:nth-child(2n) {
- left: 110px;
-}
-.openerp .oe_kanban_view .oe_kanban_crm_salesteams .oe_items_list a:hover {
- text-decoration: underline !important;
-}
-.openerp .oe_kanban_view .oe_kanban_crm_salesteams .oe_center {
- text-align: center;
- margin: 3px 0;
-}
-.openerp .oe_kanban_view .oe_kanban_crm_salesteams .oe_center .oe_sum {
- margin: 0;
- font-size: 40px;
-}
-.openerp .oe_kanban_view .oe_kanban_crm_salesteams .oe_center .oe_subsum {
- font-size: 10px;
-}
-.openerp .oe_kanban_view .oe_salesteams_help {
- display: inline-block;
-}
-.openerp .oe_kanban_view .oe_kanban_salesteams_avatars {
- margin-top: 20px;
-}
-.openerp .oe_kanban_view .oe_kanban_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);
-}
+++ /dev/null
-@charset "utf-8"
-
-.openerp
- .oe_kanban_view
- .oe_kanban_crm_salesteams
- /* Customize width and height of kanban according bootstrap3 */
- width: 357px
- min-height: 254px !important
- /* End of customize */
- cursor: default
- .oe_items_list
- position: relative
- /* Improved margin to set alignment of list items according bootstrap3 */
- margin: 10px 0 10px 9px
- min-height: 10px
- div
- width: 160px
- height: 22px
- margin: 0 !important
- position: relative
- display: inline-block
- float: left
- a:nth-child(2n)
- position: absolute
- left: 90px
- top: 0
- div:nth-child(2n)
- a:nth-child(2n)
- left: 110px
- a:hover
- text-decoration: underline !important
- .oe_center
- text-align: center
- margin: 3px 0
- .oe_sum
- margin: 0
- font-size: 40px
- .oe_subsum
- font-size: 10px
- .oe_salesteams_help
- display: inline-block
- .oe_kanban_salesteams_avatars
- margin-top: 20px
- .oe_kanban_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)
+++ /dev/null
-openerp.crm = function(openerp) {
- openerp.web_kanban.KanbanView.include({
- crm_display_members_names: function() {
- /*
- * Set avatar title for members.
- * In kanban views, many2many fields only return a list of ids.
- * We can implement return value of m2m fields like [(1,"Adminstration"),...].
- */
- var self = this;
- var members_ids = [];
-
- // Collect members ids
- self.$el.find('img[data-member_id]').each(function() {
- members_ids.push($(this).data('member_id'));
- });
-
- // Find their matching names
- var dataset = new openerp.web.DataSetSearch(self, 'res.users', self.session.context, [['id', 'in', _.uniq(members_ids)]]);
- dataset.read_slice(['id', 'name']).done(function(result) {
- _.each(result, function(v, k) {
- // Set the proper value in the DOM
- self.$el.find('img[data-member_id=' + v.id + ']').attr('title', v.name).tooltip();
- });
- });
- },
- on_groups_started: function() {
- var self = this;
- self._super.apply(self, arguments);
-
- if (self.dataset.model === 'crm.case.section') {
- self.crm_display_members_names();
- }
- },
- });
-
- openerp.web_kanban.KanbanRecord.include({
- on_card_clicked: function() {
- if (this.view.dataset.model === 'crm.case.section') {
- this.$('.oe_kanban_crm_salesteams_list a').first().click();
- } else {
- this._super.apply(this, arguments);
- }
- },
- });
-};
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<!-- vim:fdn=3:
--->
-<openerp>
- <data>
- <template id="assets_backend" name="crm assets" inherit_id="web.assets_backend">
- <xpath expr="." position="inside">
- <link rel="stylesheet" href="/crm/static/src/css/crm.css"/>
- <script type="text/javascript" src="/crm/static/src/js/crm_case_section.js"></script>
- </xpath>
- </template>
- </data>
-</openerp>
<field name="body"><![CDATA[<p>This application lets you create and send quotations and process your sales orders; from delivery to invoicing.</p>
<p>If you need to manage your sales pipeline (leads, opportunities, phonecalls), the <i>CRM</i> application may be useful. Use the Settings menu to install it.</p>]]></field>
</record>
-
+
<!-- Sale-related subtypes for messaging / Chatter -->
<record id="mt_order_sent" model="mail.message.subtype">
<field name="name">Quotation sent</field>
<field name="description">Quotation confirmed</field>
</record>
+ <!-- Salesteam-related subtypes for messaging / Chatter -->
+ <record id="mt_salesteam_order_sent" model="mail.message.subtype">
+ <field name="name">Quotation Send</field>
+ <field name="sequence">20</field>
+ <field name="res_model">crm.case.section</field>
+ <field name="parent_id" eval="ref('sale.mt_order_sent')"/>
+ <field name="relation_field">section_id</field>
+ </record>
+ <record id="mt_salesteam_order_confirmed" model="mail.message.subtype">
+ <field name="name">Sales Order Confirmed</field>
+ <field name="sequence">21</field>
+ <field name="res_model">crm.case.section</field>
+ <field name="parent_id" eval="ref('sale.mt_order_confirmed')"/>
+ <field name="relation_field">section_id</field>
+ </record>
+
</data>
</openerp>
<openerp>
<data noupdate="1">
+ <record model="crm.case.section" id="sales_team.section_sales_department">
+ <field name="invoiced_forecast">52700</field>
+ <field name="invoiced_target">60000</field>
+ </record>
+
+ <record model="crm.case.section" id="sales_team.crm_case_section_1">
+ <field name="invoiced_forecast">36000</field>
+ <field name="invoiced_target">40000</field>
+ </record>
+
<record id="sale_order_1" model="sale.order">
<field name="partner_id" ref="base.res_partner_2"/>
<field name="partner_invoice_id" ref="base.res_partner_2"/>
<field name="partner_shipping_id" ref="base.res_partner_2"/>
<field name="user_id" ref="base.user_demo"/>
<field name="pricelist_id" ref="product.list0"/>
+ <field name="section_id" ref="sales_team.section_sales_department"/>
+ <field name="date_order" eval="(DateTime.today() - relativedelta(months=1)).strftime('%Y-%m-%d %H:%M')"/>
</record>
<record id="sale_order_line_1" model="sale.order.line">
<field name="user_id" ref="base.user_root"/>
<field name="pricelist_id" ref="product.list0"/>
<field name="order_policy">manual</field>
+ <field name="section_id" ref="sales_team.section_sales_department"/>
+ <field name="date_order" eval="(DateTime.today() - relativedelta(months=1)).strftime('%Y-%m-%d %H:%M')"/>
</record>
<record id="sale_order_line_4" model="sale.order.line">
<field name="user_id" ref="base.user_root"/>
<field name="pricelist_id" ref="product.list0"/>
<field name="order_policy">manual</field>
+ <field name="section_id" ref="sales_team.section_sales_department"/>
</record>
<record id="sale_order_line_6" model="sale.order.line">
<field name="partner_shipping_id" ref="base.res_partner_address_25"/>
<field name="user_id" ref="base.user_root"/>
<field name="pricelist_id" ref="product.list0"/>
+ <field name="section_id" ref="sales_team.section_sales_department"/>
</record>
<record id="sale_order_line_8" model="sale.order.line">
<field name="partner_shipping_id" ref="base.res_partner_2"/>
<field name="user_id" ref="base.user_demo"/>
<field name="pricelist_id" ref="product.list0"/>
+ <field name="section_id" ref="sales_team.crm_case_section_1"/>
+ <field name="date_order" eval="(DateTime.today() - relativedelta(months=1)).strftime('%Y-%m-%d %H:%M')"/>
</record>
<record id="sale_order_line_12" model="sale.order.line">
<field name="partner_shipping_id" ref="base.res_partner_18"/>
<field name="user_id" ref="base.user_root"/>
<field name="pricelist_id" ref="product.list0"/>
+ <field name="section_id" ref="sales_team.crm_case_section_1"/>
</record>
<record id="sale_order_line_15" model="sale.order.line">
<field name="user_id" ref="base.user_root"/>
<field name="pricelist_id" ref="product.list0"/>
<field name="order_policy">manual</field>
+ <field name="section_id" ref="sales_team.section_sales_department"/>
+ <field name="date_confirm" eval="(DateTime.today() - relativedelta(months=1)).strftime('%Y-%m-%d %H:%M')"/>
</record>
<record id="sale_order_line_16" model="sale.order.line">
<field name="user_id" ref="base.user_demo"/>
<field name="pricelist_id" ref="product.list0"/>
<field name="order_policy">manual</field>
+ <field name="section_id" ref="sales_team.crm_case_section_1"/>
</record>
<record id="sale_order_line_20" model="sale.order.line">
<field eval="[(4, ref('base.group_sale_salesman'))]" name="groups_id"/>
</record>
+ <!-- coming from sale_crm -->
+ <record id="test_crm_sale_invoice_1" model="account.invoice">
+ <field name="currency_id" ref="base.EUR"/>
+ <field name="company_id" ref="base.main_company"/>
+ <field name="partner_id" ref="base.res_partner_1"/>
+ <field name="journal_id" ref="account.sales_journal"/>
+ <field name="section_id" ref="sales_team.section_sales_department"/>
+ <field name="state">draft</field>
+ <field name="type">in_invoice</field>
+ <field name="account_id" ref="account.a_recv"/>
+ <field name="name">Test invoice 1</field>
+ </record>
+ <record id="test_crm_sale_invoice_1_line_1" model="account.invoice.line">
+ <field name="name">Basic computer with Dvorak keyboard and left-handed mouse</field>
+ <field name="invoice_id" ref="test_crm_sale_invoice_1"/>
+ <field name="price_unit">250</field>
+ <field name="quantity">1</field>
+ <field name="account_id" ref="account.a_sale"/>
+ </record>
+ <record id="test_crm_sale_invoice_1_line_2" model="account.invoice.line">
+ <field name="name">Little server with raid 1 and 512ECC ram</field>
+ <field name="invoice_id" ref="test_crm_sale_invoice_1"/>
+ <field name="price_unit">800</field>
+ <field name="quantity">2</field>
+ <field name="account_id" ref="account.a_sale"/>
+ </record>
+ <record id="test_crm_sale_invoice_1_line_2" model="account.invoice.line">
+ <field name="name">Server with raid 10 and 2048ECC ram</field>
+ <field name="invoice_id" ref="test_crm_sale_invoice_1"/>
+ <field name="price_unit">4800</field>
+ <field name="quantity">4</field>
+ <field name="account_id" ref="account.a_sale"/>
+ </record>
+ <workflow action="invoice_open" model="account.invoice" ref="test_crm_sale_invoice_1"/>
+ <function model="account.invoice" name="pay_and_reconcile">
+ <!-- ids = --> <value eval="[ref('test_crm_sale_invoice_1')]"/>
+ <!-- pay_amount = --> <value eval="1850"/>
+ <!-- pay_account_id = --> <value eval="ref('account.cash')"/>
+ <!-- period_id = --> <value eval="ref('account.period_' + str(int(time.strftime('%m'))))"/>
+ <!-- pay_journal_id = --> <value eval="ref('account.bank_journal')"/>
+ <!-- writeoff_acc_id = --> <value eval="ref('account.cash')"/>
+ <!-- writeoff_period_id = --> <value eval="ref('account.period_' + str(int(time.strftime('%m'))))"/>
+ <!-- writeoff_journal_id = --> <value eval="ref('account.bank_journal')"/>
+ <!-- context = --> <value eval="{}"/>
+ <!-- name = --> <value eval="str('Payment from ASUStek')"/>
+ </function>
+
+ <!-- Invoice for Indirect Marketing -->
+
+ <record id="test_crm_sale_invoice_2" model="account.invoice">
+ <field name="currency_id" ref="base.EUR"/>
+ <field name="company_id" ref="base.main_company"/>
+ <field name="partner_id" ref="base.res_partner_1"/>
+ <field name="journal_id" ref="account.sales_journal"/>
+ <field name="section_id" ref="sales_team.crm_case_section_1"/>
+ <field name="state">draft</field>
+ <field name="type">out_invoice</field>
+ <field name="account_id" ref="account.a_recv"/>
+ <field name="name">Test invoice 1</field>
+ </record>
+ <record id="test_crm_sale_invoice_2_line_1" model="account.invoice.line">
+ <field name="name">Basic formation with Dvorak</field>
+ <field name="invoice_id" ref="test_crm_sale_invoice_2"/>
+ <field name="price_unit">500</field>
+ <field name="quantity">1</field>
+ <field name="account_id" ref="account.a_sale"/>
+ </record>
+ <workflow action="invoice_open" model="account.invoice" ref="test_crm_sale_invoice_2"/>
+ <function model="account.invoice" name="pay_and_reconcile">
+ <!-- ids = --> <value eval="[ref('test_crm_sale_invoice_2')]"/>
+ <!-- pay_amount = --> <value eval="500"/>
+ <!-- pay_account_id = --> <value eval="ref('account.cash')"/>
+ <!-- period_id = --> <value eval="ref('account.period_' + str(int(time.strftime('%m'))))"/>
+ <!-- pay_journal_id = --> <value eval="ref('account.bank_journal')"/>
+ <!-- writeoff_acc_id = --> <value eval="ref('account.cash')"/>
+ <!-- writeoff_period_id = --> <value eval="ref('account.period_' + str(int(time.strftime('%m'))))"/>
+ <!-- writeoff_journal_id = --> <value eval="ref('account.bank_journal')"/>
+ <!-- context = --> <value eval="{}"/>
+ <!-- name = --> <value eval="str('Payment from ASUStek')"/>
+ </function>
+
</data>
</openerp>
'data': [
'wizard/crm_make_sale_view.xml',
'sale_crm_view.xml',
- 'sale_crm_data.xml',
'security/sale_crm_security.xml',
'security/ir.model.access.csv',
],
- 'demo': ['sale_crm_demo.xml'],
+ 'demo': [],
'test': ['test/sale_crm.yml'],
'installable': True,
'auto_install': True,
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<openerp>
- <data noupdate="1">
-
- <!-- Salesteam-related subtypes for messaging / Chatter -->
- <record id="mt_salesteam_order_sent" model="mail.message.subtype">
- <field name="name">Quotation Send</field>
- <field name="sequence">20</field>
- <field name="res_model">crm.case.section</field>
- <field name="parent_id" eval="ref('sale.mt_order_sent')"/>
- <field name="relation_field">section_id</field>
- </record>
- <record id="mt_salesteam_order_confirmed" model="mail.message.subtype">
- <field name="name">Sales Order Confirmed</field>
- <field name="sequence">21</field>
- <field name="res_model">crm.case.section</field>
- <field name="parent_id" eval="ref('sale.mt_order_confirmed')"/>
- <field name="relation_field">section_id</field>
- </record>
-
- </data>
-</openerp>
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<openerp>
- <data>
-
- <record model="crm.case.section" id="sales_team.section_sales_department">
- <field name="invoiced_forecast">52700</field>
- <field name="invoiced_target">60000</field>
- </record>
-
- <record model="crm.case.section" id="sales_team.crm_case_section_1">
- <field name="name">Indirect Sales</field>
- <field name="code">IM</field>
- <field name="invoiced_forecast">36000</field>
- <field name="invoiced_target">40000</field>
- </record>
-
- <!-- Invoice for Direct Marketing -->
-
- <record id="test_crm_sale_invoice_1" model="account.invoice">
- <field name="currency_id" ref="base.EUR"/>
- <field name="company_id" ref="base.main_company"/>
- <field name="partner_id" ref="base.res_partner_1"/>
- <field name="journal_id" ref="account.sales_journal"/>
- <field name="section_id" ref="sales_team.section_sales_department"/>
- <field name="state">draft</field>
- <field name="type">in_invoice</field>
- <field name="account_id" ref="account.a_recv"/>
- <field name="name">Test invoice 1</field>
- </record>
- <record id="test_crm_sale_invoice_1_line_1" model="account.invoice.line">
- <field name="name">Basic computer with Dvorak keyboard and left-handed mouse</field>
- <field name="invoice_id" ref="test_crm_sale_invoice_1"/>
- <field name="price_unit">250</field>
- <field name="quantity">1</field>
- <field name="account_id" ref="account.a_sale"/>
- </record>
- <record id="test_crm_sale_invoice_1_line_2" model="account.invoice.line">
- <field name="name">Little server with raid 1 and 512ECC ram</field>
- <field name="invoice_id" ref="test_crm_sale_invoice_1"/>
- <field name="price_unit">800</field>
- <field name="quantity">2</field>
- <field name="account_id" ref="account.a_sale"/>
- </record>
- <record id="test_crm_sale_invoice_1_line_2" model="account.invoice.line">
- <field name="name">Server with raid 10 and 2048ECC ram</field>
- <field name="invoice_id" ref="test_crm_sale_invoice_1"/>
- <field name="price_unit">4800</field>
- <field name="quantity">4</field>
- <field name="account_id" ref="account.a_sale"/>
- </record>
- <workflow action="invoice_open" model="account.invoice" ref="test_crm_sale_invoice_1"/>
- <function model="account.invoice" name="pay_and_reconcile">
- <!-- ids = --> <value eval="[ref('test_crm_sale_invoice_1')]"/>
- <!-- pay_amount = --> <value eval="1850"/>
- <!-- pay_account_id = --> <value eval="ref('account.cash')"/>
- <!-- period_id = --> <value eval="ref('account.period_' + str(int(time.strftime('%m'))))"/>
- <!-- pay_journal_id = --> <value eval="ref('account.bank_journal')"/>
- <!-- writeoff_acc_id = --> <value eval="ref('account.cash')"/>
- <!-- writeoff_period_id = --> <value eval="ref('account.period_' + str(int(time.strftime('%m'))))"/>
- <!-- writeoff_journal_id = --> <value eval="ref('account.bank_journal')"/>
- <!-- context = --> <value eval="{}"/>
- <!-- name = --> <value eval="str('Payment from ASUStek')"/>
- </function>
-
- <!-- Invoice for Indirect Marketing -->
-
- <record id="test_crm_sale_invoice_2" model="account.invoice">
- <field name="currency_id" ref="base.EUR"/>
- <field name="company_id" ref="base.main_company"/>
- <field name="partner_id" ref="base.res_partner_1"/>
- <field name="journal_id" ref="account.sales_journal"/>
- <field name="section_id" ref="sales_team.crm_case_section_1"/>
- <field name="state">draft</field>
- <field name="type">out_invoice</field>
- <field name="account_id" ref="account.a_recv"/>
- <field name="name">Test invoice 1</field>
- </record>
- <record id="test_crm_sale_invoice_2_line_1" model="account.invoice.line">
- <field name="name">Basic formation with Dvorak</field>
- <field name="invoice_id" ref="test_crm_sale_invoice_2"/>
- <field name="price_unit">500</field>
- <field name="quantity">1</field>
- <field name="account_id" ref="account.a_sale"/>
- </record>
- <workflow action="invoice_open" model="account.invoice" ref="test_crm_sale_invoice_2"/>
- <function model="account.invoice" name="pay_and_reconcile">
- <!-- ids = --> <value eval="[ref('test_crm_sale_invoice_2')]"/>
- <!-- pay_amount = --> <value eval="500"/>
- <!-- pay_account_id = --> <value eval="ref('account.cash')"/>
- <!-- period_id = --> <value eval="ref('account.period_' + str(int(time.strftime('%m'))))"/>
- <!-- pay_journal_id = --> <value eval="ref('account.bank_journal')"/>
- <!-- writeoff_acc_id = --> <value eval="ref('account.cash')"/>
- <!-- writeoff_period_id = --> <value eval="ref('account.period_' + str(int(time.strftime('%m'))))"/>
- <!-- writeoff_journal_id = --> <value eval="ref('account.bank_journal')"/>
- <!-- context = --> <value eval="{}"/>
- <!-- name = --> <value eval="str('Payment from ASUStek')"/>
- </function>
-
-
- <record id="sale.sale_order_1" model="sale.order">
- <field name="section_id" ref="sales_team.section_sales_department"/>
- <field name="date_order" eval="(DateTime.today() - relativedelta(months=1)).strftime('%Y-%m-%d %H:%M')"/>
- </record>
- <record id="sale.sale_order_2" model="sale.order">
- <field name="section_id" ref="sales_team.section_sales_department"/>
- <field name="date_order" eval="(DateTime.today() - relativedelta(months=1)).strftime('%Y-%m-%d %H:%M')"/>
- </record>
- <record id="sale.sale_order_3" model="sale.order">
- <field name="section_id" ref="sales_team.section_sales_department"/>
- </record>
- <record id="sale.sale_order_4" model="sale.order">
- <field name="section_id" ref="sales_team.section_sales_department"/>
- </record>
- <record id="sale.sale_order_5" model="sale.order">
- <field name="section_id" ref="sales_team.crm_case_section_1"/>
- <field name="date_order" eval="(DateTime.today() - relativedelta(months=1)).strftime('%Y-%m-%d %H:%M')"/>
- </record>
- <record id="sale.sale_order_6" model="sale.order">
- <field name="section_id" ref="sales_team.crm_case_section_1"/>
- </record>
- <record id="sale.sale_order_7" model="sale.order">
- <field name="section_id" ref="sales_team.section_sales_department"/>
- <field name="date_confirm" eval="(DateTime.today() - relativedelta(months=1)).strftime('%Y-%m-%d %H:%M')"/>
- </record>
- <record id="sale.sale_order_8" model="sale.order">
- <field name="section_id" ref="sales_team.crm_case_section_1"/>
- </record>
-
- </data>
-</openerp>
</p>
</field>
</record>
- <menuitem id="sales_team.menu_sales_team_act" action="crm_case_section_salesteams_act" sequence="1" parent="base.menu_sales" groups="base.group_multi_salesteams"/>
+
+ <menuitem id="sales_team.menu_sales_team_act" action="crm_case_section_salesteams_act" sequence="1" parent="base.menu_sales" groups="base.group_multi_salesteams"/>
+
+ <!-- add css / js -->
+ <template id="assets_backend" name="sales_team assets" inherit_id="web.assets_backend">
+ <xpath expr="." position="inside">
+ <link rel="stylesheet" href="/sales_team/static/src/css/sales_team.css"/>
+ <script type="text/javascript" src="/sales_team/static/src/js/sales_team.js"></script>
+ </xpath>
+ </template>
+
</data>
</openerp>
--- /dev/null
+sales_team.css: sales_team.sass
+ sass --trace -t expanded sales_team.sass:sales_team.css
--- /dev/null
+@charset "utf-8"
+
+.openerp
+ .oe_kanban_view
+ .oe_kanban_crm_salesteams
+ /* Customize width and height of kanban according bootstrap3 */
+ width: 357px
+ min-height: 254px !important
+ /* End of customize */
+ cursor: default
+ .oe_items_list
+ position: relative
+ /* Improved margin to set alignment of list items according bootstrap3 */
+ margin: 10px 0 10px 9px
+ min-height: 10px
+ div
+ width: 160px
+ height: 22px
+ margin: 0 !important
+ position: relative
+ display: inline-block
+ float: left
+ a:nth-child(2n)
+ position: absolute
+ left: 90px
+ top: 0
+ div:nth-child(2n)
+ a:nth-child(2n)
+ left: 110px
+ a:hover
+ text-decoration: underline !important
+ .oe_center
+ text-align: center
+ margin: 3px 0
+ .oe_sum
+ margin: 0
+ font-size: 40px
+ .oe_subsum
+ font-size: 10px
+ .oe_salesteams_help
+ display: inline-block
+ .oe_kanban_salesteams_avatars
+ margin-top: 20px
+ .oe_kanban_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)
--- /dev/null
+openerp.crm = function(openerp) {
+ openerp.web_kanban.KanbanView.include({
+ crm_display_members_names: function() {
+ /*
+ * Set avatar title for members.
+ * In kanban views, many2many fields only return a list of ids.
+ * We can implement return value of m2m fields like [(1,"Adminstration"),...].
+ */
+ var self = this;
+ var members_ids = [];
+
+ // Collect members ids
+ self.$el.find('img[data-member_id]').each(function() {
+ members_ids.push($(this).data('member_id'));
+ });
+
+ // Find their matching names
+ var dataset = new openerp.web.DataSetSearch(self, 'res.users', self.session.context, [['id', 'in', _.uniq(members_ids)]]);
+ dataset.read_slice(['id', 'name']).done(function(result) {
+ _.each(result, function(v, k) {
+ // Set the proper value in the DOM
+ self.$el.find('img[data-member_id=' + v.id + ']').attr('title', v.name).tooltip();
+ });
+ });
+ },
+ on_groups_started: function() {
+ var self = this;
+ self._super.apply(self, arguments);
+
+ if (self.dataset.model === 'crm.case.section') {
+ self.crm_display_members_names();
+ }
+ },
+ });
+
+ openerp.web_kanban.KanbanRecord.include({
+ on_card_clicked: function() {
+ if (this.view.dataset.model === 'crm.case.section') {
+ this.$('.oe_kanban_crm_salesteams_list a').first().click();
+ } else {
+ this._super.apply(this, arguments);
+ }
+ },
+ });
+};