18 changed files with 489 additions and 2 deletions
			
			
		@ -0,0 +1,23 @@ | 
				
			|||
# -*- coding: utf-8 -*- | 
				
			|||
############################################################################## | 
				
			|||
# | 
				
			|||
#    Cybrosys Technologies Pvt. Ltd. | 
				
			|||
#    Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). | 
				
			|||
#    Author: Nilmar Shereef(<http://www.cybrosys.com>) | 
				
			|||
#    you can modify it under the terms of the GNU LESSER | 
				
			|||
#    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | 
				
			|||
# | 
				
			|||
#    It is forbidden to publish, distribute, sublicense, or sell copies | 
				
			|||
#    of the Software or modified copies of the Software. | 
				
			|||
# | 
				
			|||
#    This program is distributed in the hope that it will be useful, | 
				
			|||
#    but WITHOUT ANY WARRANTY; without even the implied warranty of | 
				
			|||
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
				
			|||
#    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | 
				
			|||
# | 
				
			|||
#    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | 
				
			|||
#    GENERAL PUBLIC LICENSE (LGPL v3) along with this program. | 
				
			|||
#    If not, see <http://www.gnu.org/licenses/>. | 
				
			|||
# | 
				
			|||
############################################################################## | 
				
			|||
import models | 
				
			|||
@ -0,0 +1,43 @@ | 
				
			|||
# -*- coding: utf-8 -*- | 
				
			|||
############################################################################## | 
				
			|||
# | 
				
			|||
#    Cybrosys Technologies Pvt. Ltd. | 
				
			|||
#    Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). | 
				
			|||
#    Author: Nilmar Shereef(<http://www.cybrosys.com>) | 
				
			|||
#    you can modify it under the terms of the GNU LESSER | 
				
			|||
#    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | 
				
			|||
# | 
				
			|||
#    It is forbidden to publish, distribute, sublicense, or sell copies | 
				
			|||
#    of the Software or modified copies of the Software. | 
				
			|||
# | 
				
			|||
#    This program is distributed in the hope that it will be useful, | 
				
			|||
#    but WITHOUT ANY WARRANTY; without even the implied warranty of | 
				
			|||
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
				
			|||
#    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | 
				
			|||
# | 
				
			|||
#    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | 
				
			|||
#    GENERAL PUBLIC LICENSE (LGPL v3) along with this program. | 
				
			|||
#    If not, see <http://www.gnu.org/licenses/>. | 
				
			|||
# | 
				
			|||
############################################################################## | 
				
			|||
{ | 
				
			|||
    'name': 'CRM Kanban Drag Back Permission', | 
				
			|||
    'version': '0.2', | 
				
			|||
    'category': 'CRM', | 
				
			|||
    'sequence': 6, | 
				
			|||
    'summary': 'Permission for Drag Back in CRM', | 
				
			|||
    'author': 'Cybrosys Techno Solutions', | 
				
			|||
    'company': 'Cybrosys Techno Solutions', | 
				
			|||
    'website': 'http://www.cybrosys.com', | 
				
			|||
    'depends': ['crm', 'sale', 'sales_team'], | 
				
			|||
    'images': ['static/description/banner.jpg'], | 
				
			|||
    'data': [ | 
				
			|||
        'views/crm_sales_team.xml', | 
				
			|||
        'views/crm_lead_update.xml', | 
				
			|||
        'views/templates.xml', | 
				
			|||
        'security/ir.model.access.csv', | 
				
			|||
 | 
				
			|||
    ], | 
				
			|||
    'installable': True, | 
				
			|||
    'auto_install': False, | 
				
			|||
} | 
				
			|||
@ -0,0 +1,25 @@ | 
				
			|||
# -*- coding: utf-8 -*- | 
				
			|||
############################################################################## | 
				
			|||
# | 
				
			|||
#    Cybrosys Technologies Pvt. Ltd. | 
				
			|||
#    Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). | 
				
			|||
#    Author: Nilmar Shereef(<http://www.cybrosys.com>) | 
				
			|||
#    you can modify it under the terms of the GNU LESSER | 
				
			|||
#    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | 
				
			|||
# | 
				
			|||
#    It is forbidden to publish, distribute, sublicense, or sell copies | 
				
			|||
#    of the Software or modified copies of the Software. | 
				
			|||
# | 
				
			|||
#    This program is distributed in the hope that it will be useful, | 
				
			|||
#    but WITHOUT ANY WARRANTY; without even the implied warranty of | 
				
			|||
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
				
			|||
#    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | 
				
			|||
# | 
				
			|||
#    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | 
				
			|||
#    GENERAL PUBLIC LICENSE (LGPL v3) along with this program. | 
				
			|||
#    If not, see <http://www.gnu.org/licenses/>. | 
				
			|||
# | 
				
			|||
############################################################################## | 
				
			|||
import update_kanban_record | 
				
			|||
 | 
				
			|||
 | 
				
			|||
@ -0,0 +1,136 @@ | 
				
			|||
# -*- coding: utf-8 -*- | 
				
			|||
############################################################################## | 
				
			|||
# | 
				
			|||
#    Cybrosys Technologies Pvt. Ltd. | 
				
			|||
#    Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). | 
				
			|||
#    Author: Nilmar Shereef(<http://www.cybrosys.com>) | 
				
			|||
#    you can modify it under the terms of the GNU LESSER | 
				
			|||
#    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | 
				
			|||
# | 
				
			|||
#    It is forbidden to publish, distribute, sublicense, or sell copies | 
				
			|||
#    of the Software or modified copies of the Software. | 
				
			|||
# | 
				
			|||
#    This program is distributed in the hope that it will be useful, | 
				
			|||
#    but WITHOUT ANY WARRANTY; without even the implied warranty of | 
				
			|||
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
				
			|||
#    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | 
				
			|||
# | 
				
			|||
#    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | 
				
			|||
#    GENERAL PUBLIC LICENSE (LGPL v3) along with this program. | 
				
			|||
#    If not, see <http://www.gnu.org/licenses/>. | 
				
			|||
# | 
				
			|||
############################################################################## | 
				
			|||
from openerp import models, fields, api | 
				
			|||
 | 
				
			|||
 | 
				
			|||
class StageChange(models.Model): | 
				
			|||
    _inherit = 'crm.lead' | 
				
			|||
 | 
				
			|||
    stage_previous = fields.Integer(string="Previous stage", default=False) | 
				
			|||
    stage_next = fields.Integer(string="Next stage", default=False) | 
				
			|||
    stage_type = fields.Char() | 
				
			|||
    new_stage_id = fields.Selection([('previous', 'Previous'), ('current', 'Current'), ('next', 'Next')], readonly=True) | 
				
			|||
    previous = fields.Char(string="Previous Stage", compute='get_previous_stage') | 
				
			|||
    next_stage = fields.Char(string="Next Stage", compute='get_next_stage') | 
				
			|||
 | 
				
			|||
    @api.one | 
				
			|||
    def get_previous_stage(self): | 
				
			|||
        self.previous = self.env['crm.case.stage'].search([('id', '=', self.stage_previous)]).name | 
				
			|||
 | 
				
			|||
    @api.one | 
				
			|||
    def get_next_stage(self): | 
				
			|||
        self.next_stage = self.env['crm.case.stage'].search([('id', '=', self.stage_next)]).name | 
				
			|||
 | 
				
			|||
    @api.one | 
				
			|||
    def approve_oppor(self): | 
				
			|||
        self.write({'stage_id': self.env['crm.case.stage'].browse([self.stage_next]).id, 'stage_previous': self.stage_id.id, 'stage_next': 0, 'new_stage_id': ''}) | 
				
			|||
        return | 
				
			|||
 | 
				
			|||
    @api.one | 
				
			|||
    def decline_oppor(self): | 
				
			|||
        self.write({'stage_id': self.env['crm.case.stage'].browse([self.stage_previous]).id, 'stage_previous': self.stage_id.id, 'stage_next': 0, 'new_stage_id': ''}) | 
				
			|||
        return | 
				
			|||
 | 
				
			|||
    @api.multi | 
				
			|||
    def write(self, vals): | 
				
			|||
        if not vals.get('stage_previous') and vals.get('stage_id'): | 
				
			|||
            last_stage = self.browse(self.ids).stage_id | 
				
			|||
 | 
				
			|||
            if self.env['crm.case.stage'].browse([vals['stage_id']]).stage_order < last_stage.stage_order \ | 
				
			|||
                    and not self.env['res.users'].browse(self._uid).has_group('base.group_sale_manager') \ | 
				
			|||
                    and not self.env['res.users'].browse(self._uid).has_group('base.group_sale_salesman_all_leads'): | 
				
			|||
                vals['stage_previous'] = last_stage.id | 
				
			|||
                vals['stage_next'] = vals['stage_id'] | 
				
			|||
                vals['stage_type'] = "approval" | 
				
			|||
                vals['new_stage_id'] = 'current' | 
				
			|||
                to_approve = self.env['crm.case.stage'].search([('type', '=', 'approval'), ('name', '=', 'Waiting for approval')]) | 
				
			|||
                if to_approve: | 
				
			|||
                    vals['stage_id'] = to_approve.id | 
				
			|||
                else: | 
				
			|||
                    values = { | 
				
			|||
                        'name': "Waiting for approval", | 
				
			|||
                        'type': "approval", | 
				
			|||
                        'stage_order': -1, | 
				
			|||
                    } | 
				
			|||
                    result = self.env['crm.case.stage'].create(values) | 
				
			|||
                    vals['stage_id'] = result.id | 
				
			|||
 | 
				
			|||
        elif vals.get('stage_id'): | 
				
			|||
            vals['stage_type'] = "" | 
				
			|||
        res = super(StageChange, self).write(vals) | 
				
			|||
        return res | 
				
			|||
 | 
				
			|||
    def get_approvals(self, cr, uid, context=None): | 
				
			|||
        tree_res = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'crm', | 
				
			|||
                                                                       'crm_case_tree_view_oppor') | 
				
			|||
        x = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'crm_drag_back_permission', 'action_waiting_approval_window') | 
				
			|||
        tree_id = tree_res and tree_res[1] or False | 
				
			|||
        form_res = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'crm', | 
				
			|||
                                                                       'crm_case_form_view_leads') | 
				
			|||
        form_id = form_res and form_res[1] or False | 
				
			|||
        approval_stage = self.pool.get('crm.lead') | 
				
			|||
        approvals = approval_stage.search(cr, uid, [('stage_id.type', '=', "approval")]) | 
				
			|||
        user_obj = self.pool.get('res.users') | 
				
			|||
        u_id = user_obj.browse(cr, uid, uid, context=context) | 
				
			|||
        if u_id.has_group('base.group_sale_salesman_all_leads') and u_id.has_group( | 
				
			|||
                'base.group_sale_salesman') and u_id.has_group('base.group_sale_manager'): | 
				
			|||
            object_list = approvals | 
				
			|||
        elif u_id.has_group('base.group_sale_salesman_all_leads') and u_id.has_group('base.group_sale_salesman'): | 
				
			|||
            teams = self.pool.get('crm.case.section').search(cr, uid, [('user_id.id', '=', uid)]) | 
				
			|||
            object_list = [] | 
				
			|||
            if approvals: | 
				
			|||
                for obj in approvals: | 
				
			|||
                    if self.pool.get('crm.lead').browse(cr, uid, [obj]).section_id.id in teams: | 
				
			|||
                        object_list.append(obj) | 
				
			|||
        elif u_id.has_group('base.group_sale_salesman'): | 
				
			|||
            object_list = [] | 
				
			|||
            if approvals: | 
				
			|||
                for obj in approvals: | 
				
			|||
                    if self.pool.get('crm.lead').browse(cr, uid, [obj]).user_id.id == uid: | 
				
			|||
                        object_list.append(obj) | 
				
			|||
        return { | 
				
			|||
            'model': 'ir.actions.act_window', | 
				
			|||
            'name': 'Waiting Approval', | 
				
			|||
            'type': 'ir.actions.act_window', | 
				
			|||
            'view_type': 'form', | 
				
			|||
            'view_mode': 'form,tree', | 
				
			|||
            'res_model': 'crm.lead', | 
				
			|||
            'views': [(tree_id, 'tree'), (form_id, 'form')], | 
				
			|||
            'domain': [('id', 'in', object_list)], | 
				
			|||
            'id': x[1], | 
				
			|||
        } | 
				
			|||
 | 
				
			|||
 | 
				
			|||
class NewStage(models.Model): | 
				
			|||
    _inherit = 'crm.case.stage' | 
				
			|||
 | 
				
			|||
    stage_order = fields.Integer(string='Order') | 
				
			|||
    type = fields.Selection([('lead', 'Lead'), ('opportunity', 'Opportunity'), ('both', 'Both'), ('approval', '')], | 
				
			|||
                            string='Type', required=True, | 
				
			|||
                            help="This field is used to distinguish stages related to Leads from stages related to " | 
				
			|||
                                 "Opportunities or to specify stages available for both types.") | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
		
		
			
  | 
| 
		 After Width: | Height: | Size: 120 KiB  | 
| 
		 After Width: | Height: | Size: 9.3 KiB  | 
| 
		 After Width: | Height: | Size: 64 KiB  | 
| 
		 After Width: | Height: | Size: 56 KiB  | 
| 
		 After Width: | Height: | Size: 42 KiB  | 
| 
		 After Width: | Height: | Size: 61 KiB  | 
@ -0,0 +1,93 @@ | 
				
			|||
<section class="oe_container"> | 
				
			|||
    <div class="oe_row oe_spaced"> | 
				
			|||
        <h2 class="oe_slogan">CRM Kanban Drag Back</h2> | 
				
			|||
        <h3 class="oe_slogan">Permission for Back Drag in CRM Kanban view</h3> | 
				
			|||
         <h4 class="oe_slogan">Author : Cybrosys Techno Solutions , www.cybrosys.com</h4> | 
				
			|||
    </div> | 
				
			|||
    <div class="oe_row oe_spaced"> | 
				
			|||
        <div> | 
				
			|||
            This module restricts some users to drag    leads backwards in sales pipeline without permission. | 
				
			|||
        </div> | 
				
			|||
    </div> | 
				
			|||
 | 
				
			|||
    <div class="oe_row oe_spaced"> | 
				
			|||
        <div class="oe_span12"> | 
				
			|||
            <div class="oe_demo oe_picture oe_screenshot"> | 
				
			|||
                <img src="image1.png"> | 
				
			|||
            </div> | 
				
			|||
        </div> | 
				
			|||
        <div class="oe_span12"> | 
				
			|||
            <p class='oe_mt32'> | 
				
			|||
                Go to Settings -> Configuration -> Sales, and enable the 'Manage Sales Teams' option | 
				
			|||
                under the Sales Teams. | 
				
			|||
            </p> | 
				
			|||
        </div> | 
				
			|||
        <div class="oe_span12"> | 
				
			|||
            <div class="oe_demo oe_picture oe_screenshot"> | 
				
			|||
                <img src="image2.png"> | 
				
			|||
            </div> | 
				
			|||
        </div> | 
				
			|||
        <div class="oe_span12"> | 
				
			|||
            <p class='oe_mt32'> | 
				
			|||
                Go to Configuration -> Stages, and set an 'order'(integer value) for each stage you want to use in the pipeline. | 
				
			|||
                The drag back is working based on this 'order' field value. When a user tries to drag a lead from one stage to another, | 
				
			|||
                we will check the 'order' of those two stages. | 
				
			|||
                If the movement is from a stage with higher order value to a stage with lower order value, it will be considered | 
				
			|||
                as a back drag. | 
				
			|||
            </p> | 
				
			|||
        </div> | 
				
			|||
    </div> | 
				
			|||
</section> | 
				
			|||
 | 
				
			|||
<section> | 
				
			|||
    <div class="oe_row oe_spaced"> | 
				
			|||
        <div class="oe_span12"> | 
				
			|||
            <p class='oe_mt32'> | 
				
			|||
               When a salesperson tries to perform a back drag, the lead will go to a new stage, 'Waiting for Approval'. | 
				
			|||
                From this stage, the Administrator or the Head of Sales of team which the lead belongs to, can | 
				
			|||
                approve the lead to the stage requested by the user or decline the lead back to it's previous stage. | 
				
			|||
                The salesperson can't move the lead from this stage. | 
				
			|||
            </p> | 
				
			|||
            <div class="oe_span12"> | 
				
			|||
                <div class="oe_demo oe_picture oe_screenshot"> | 
				
			|||
                    <img src="image3.png"> | 
				
			|||
                </div> | 
				
			|||
            </div> | 
				
			|||
 | 
				
			|||
        </div> | 
				
			|||
    </div> | 
				
			|||
</section> | 
				
			|||
 <section> | 
				
			|||
    <div class="oe_row oe_spaced"> | 
				
			|||
        <div class="oe_span12"> | 
				
			|||
            <p class='oe_mt32'> | 
				
			|||
               In the 'Waiting for Approval' stage, a lead will be visible only to the administrator, | 
				
			|||
                the user to which the lead is assigned to and the head of sales  of team that the lead belongs to. | 
				
			|||
                When we select a lead in the 'Waiting for Approval' stage, we can see the stages, the lead comes from and where the lead is headed to. | 
				
			|||
            </p> | 
				
			|||
        </div> | 
				
			|||
        <div class="oe_span12"> | 
				
			|||
             <div class="oe_demo oe_picture oe_screenshot"> | 
				
			|||
                <img src="image5.png"> | 
				
			|||
            </div> | 
				
			|||
        </div> | 
				
			|||
    </div> | 
				
			|||
</section> | 
				
			|||
 | 
				
			|||
<section class="oe_container oe_dark"> | 
				
			|||
    <h2 class="oe_slogan">Need Any Help?</h2> | 
				
			|||
    <div class="oe_slogan"> | 
				
			|||
        <a  class="btn btn-primary btn-lg mt8" | 
				
			|||
            style="color: #FFFFFF !important;" href="http://www.cybrosys.com"><i | 
				
			|||
            class="fa fa-envelope"></i> Email </a> <a | 
				
			|||
            class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;" | 
				
			|||
            href="http://www.cybrosys.com/contact/"><i | 
				
			|||
            class="fa fa-phone"></i> Contact Us </a> <a | 
				
			|||
            class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;" | 
				
			|||
            href="http://www.cybrosys.com/odoo-customization-and-installation/"><i | 
				
			|||
            class="fa fa-check-square"></i> Request Customization </a> | 
				
			|||
    </div> | 
				
			|||
</section> | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
@ -0,0 +1,16 @@ | 
				
			|||
openerp.crm_drag_back_permission = function (instance) { | 
				
			|||
    var kanbanview = instance.web_kanban; | 
				
			|||
    kanbanview.KanbanView.include({ | 
				
			|||
        do_process_groups: function (groups) { | 
				
			|||
            var x = [] ; | 
				
			|||
            for (var i in groups) { | 
				
			|||
                if (groups[i]['attributes']['value'][1] != 'Waiting for approval') { | 
				
			|||
                    x[i] = groups[i]; | 
				
			|||
                } | 
				
			|||
 | 
				
			|||
            } | 
				
			|||
            this._super(x); | 
				
			|||
 | 
				
			|||
        }, | 
				
			|||
        }); | 
				
			|||
} | 
				
			|||
@ -0,0 +1,115 @@ | 
				
			|||
<?xml version="1.0" encoding="UTF-8" ?> | 
				
			|||
<openerp> | 
				
			|||
    <data> | 
				
			|||
        <record id="crm_case_form_view_lead_updated" model="ir.ui.view"> | 
				
			|||
            <field name="name">Leads updated</field> | 
				
			|||
            <field name="model">crm.lead</field> | 
				
			|||
            <field name="inherit_id" ref="crm.crm_case_form_view_leads" /> | 
				
			|||
            <field name="arch" type="xml"> | 
				
			|||
                <xpath expr="//field[@name='partner_id']" position="after"> | 
				
			|||
                    <field name="stage_previous" invisible="1" /> | 
				
			|||
                    <field name="stage_next" invisible="1" /> | 
				
			|||
                    <field name="stage_type" invisible="1" /> | 
				
			|||
                </xpath> | 
				
			|||
                <xpath expr="//field[@name='user_id']" position="attributes"> | 
				
			|||
                    <attribute name="required">1</attribute> | 
				
			|||
                </xpath> | 
				
			|||
                <xpath expr="//form/header/field[@name='stage_id']" position="attributes"> | 
				
			|||
                    <attribute name="attrs">{'invisible': [('stage_type','=','approval')]}</attribute> | 
				
			|||
                </xpath> | 
				
			|||
 | 
				
			|||
                <xpath expr="//form/header" position="inside"> | 
				
			|||
                    <button name="approve_oppor" string="Approve" groups="base.group_sale_manager,base.group_sale_salesman_all_leads" | 
				
			|||
                            type="object" class="oe_highlight o_wow" attrs="{'invisible': [('stage_type','!=','approval')]}"/> | 
				
			|||
                    <button name="decline_oppor" string="Decline" groups="base.group_sale_manager,base.group_sale_salesman_all_leads" | 
				
			|||
                            type="object" class="oe_highlight o_wow"  attrs="{'invisible': [('stage_type','!=','approval')]}"/> | 
				
			|||
 | 
				
			|||
                </xpath> | 
				
			|||
                <xpath expr="//form/header/button[1]" position="attributes"> | 
				
			|||
                    <attribute name="attrs">{'invisible': [('stage_type','=','approval')]} | 
				
			|||
                    </attribute> | 
				
			|||
                </xpath> | 
				
			|||
 | 
				
			|||
                <xpath expr="//group[1]/group[2]" position="before"> | 
				
			|||
                    <group> | 
				
			|||
                        <field name="previous" /> | 
				
			|||
                        <field name="next_stage"/> | 
				
			|||
                    </group> | 
				
			|||
                </xpath> | 
				
			|||
 | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
        <record id="crm_case_form_view_opport_updated" model="ir.ui.view"> | 
				
			|||
            <field name="name">Opportunity updated</field> | 
				
			|||
            <field name="model">crm.lead</field> | 
				
			|||
            <field name="inherit_id" ref="crm.crm_case_form_view_oppor" /> | 
				
			|||
            <field name="arch" type="xml"> | 
				
			|||
                <xpath expr="//field[@name='partner_id']" position="after"> | 
				
			|||
                    <field name="stage_previous" invisible="1" /> | 
				
			|||
                    <field name="stage_next" invisible="1" /> | 
				
			|||
                    <field name="stage_type" invisible="1" /> | 
				
			|||
                </xpath> | 
				
			|||
                <xpath expr="//field[@name='user_id']" position="attributes"> | 
				
			|||
                    <attribute name="required">1</attribute> | 
				
			|||
                </xpath> | 
				
			|||
 | 
				
			|||
                <xpath expr="//form/header/field[@name='stage_id']" position="attributes"> | 
				
			|||
                    <attribute name="attrs">{'invisible': [('stage_type','=','approval')]}</attribute> | 
				
			|||
                </xpath> | 
				
			|||
 | 
				
			|||
 | 
				
			|||
                <xpath expr="//form/header" position="inside"> | 
				
			|||
                    <button name="approve_oppor" string="Approve" groups="base.group_sale_manager,base.group_sale_salesman_all_leads" | 
				
			|||
                            type="object" class="oe_highlight o_wow" attrs="{'invisible': [('stage_type','!=','approval')]}"/> | 
				
			|||
                    <button name="decline_oppor" string="Decline" groups="base.group_sale_manager,base.group_sale_salesman_all_leads" | 
				
			|||
                            type="object" class="oe_highlight o_wow" attrs="{'invisible': [('stage_type','!=','approval')]}" /> | 
				
			|||
 | 
				
			|||
                </xpath> | 
				
			|||
                <xpath expr="//form/header/button[1]" position="attributes"> | 
				
			|||
                    <attribute name="attrs">{'invisible': [('stage_type','=','approval')]}</attribute> | 
				
			|||
                </xpath> | 
				
			|||
 | 
				
			|||
                <xpath expr="//group[1]/group[2]" position="before"> | 
				
			|||
                    <group> | 
				
			|||
                        <field name="previous" /> | 
				
			|||
                        <field name="next_stage"/> | 
				
			|||
                    </group> | 
				
			|||
                </xpath> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
        <record id="crm_case_stage_updated" model="ir.ui.view"> | 
				
			|||
            <field name="name">Stages Updated</field> | 
				
			|||
            <field name="model">crm.case.stage</field> | 
				
			|||
            <field name="inherit_id" ref="crm.crm_case_stage_form"/> | 
				
			|||
            <field name="arch" type="xml"> | 
				
			|||
                <xpath expr="//field[@name='on_change']" position="after"> | 
				
			|||
                    <field name="stage_order" /> | 
				
			|||
                </xpath> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
        <record id="action_waiting_approval_window" model="ir.actions.act_window"> | 
				
			|||
            <field name="name">Waiting</field> | 
				
			|||
            <field name="res_model">crm.lead</field> | 
				
			|||
            <field name="view_type">form</field> | 
				
			|||
            <field name="view_mode">tree,form</field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
 | 
				
			|||
        <record id="action_waiting_approval" model="ir.actions.server"> | 
				
			|||
            <field name="name">Waiting</field> | 
				
			|||
            <field name="type">ir.actions.server</field> | 
				
			|||
            <field name="res_model">crm.lead</field> | 
				
			|||
            <field name="model_id" ref="model_crm_lead"/> | 
				
			|||
            <field name="view_type">form</field> | 
				
			|||
            <field name="view_mode">tree,form</field> | 
				
			|||
            <field name="state">code</field> | 
				
			|||
            <field name="code">action = self.get_approvals(cr, uid, context=context)</field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
        <menuitem name="Waiting for approval" id="waiting_approval" action="action_waiting_approval" parent="base.menu_sales" /> | 
				
			|||
 | 
				
			|||
    </data> | 
				
			|||
</openerp> | 
				
			|||
@ -0,0 +1,21 @@ | 
				
			|||
<?xml version="1.0" encoding="utf-8"?> | 
				
			|||
<openerp> | 
				
			|||
<data> | 
				
			|||
    <record id="base.group_sale_manager" model="res.groups"> | 
				
			|||
        <field name="name">CEO/Head of Business strategy</field> | 
				
			|||
        <field name="implied_ids" eval="[(4, ref('base.group_sale_salesman'))]"/> | 
				
			|||
    </record> | 
				
			|||
    <record id="base.group_sale_salesman_all_leads" model="res.groups"> | 
				
			|||
        <field name="name">Head Of Sales</field> | 
				
			|||
        <field name="category_id" ref="base.module_category_sales_management"/> | 
				
			|||
        <field name="implied_ids" eval="[(4, ref('base.group_sale_salesman'))]"/> | 
				
			|||
        <field name="comment">the user will have access to all records of everyone in the sales application.</field> | 
				
			|||
    </record> | 
				
			|||
    <record id="base.group_sale_salesman" model="res.groups"> | 
				
			|||
        <field name="name">SalesPerson</field> | 
				
			|||
        <field name="category_id" ref="base.module_category_sales_management"/> | 
				
			|||
        <field name="implied_ids" eval="[(4, ref('base.group_user'))]"/> | 
				
			|||
        <field name="comment">the user will have access to his own data in the sales application.</field> | 
				
			|||
    </record> | 
				
			|||
</data> | 
				
			|||
</openerp> | 
				
			|||
@ -0,0 +1,12 @@ | 
				
			|||
<?xml version="1.0" encoding="utf-8"?> | 
				
			|||
<openerp> | 
				
			|||
    <data> | 
				
			|||
        <template id="assets_backend" name="hide_stage_kanban" inherit_id="web.assets_backend"> | 
				
			|||
            <xpath expr="." position="inside"> | 
				
			|||
 | 
				
			|||
                <script type="text/javascript" src="/crm_drag_back_permission/static/src/js/hide_stage.js"></script> | 
				
			|||
 | 
				
			|||
            </xpath> | 
				
			|||
        </template> | 
				
			|||
    </data> | 
				
			|||
</openerp> | 
				
			|||
					Loading…
					
					
				
		Reference in new issue