[IMP] website_crm_partner_assign: add own opportunities management
Allow partners with grades to add their own opportunity in their own pipe. Until now, it is their saleman which import the opp in csv.
This commit is contained in:
@@ -8,6 +8,10 @@
|
||||
<field name="name">Spam</field>
|
||||
<field name="color">3</field>
|
||||
</record>
|
||||
<record model="crm.lead.tag" id="tag_portal_lead_own_opp">
|
||||
<field name="name">Created by Partner</field>
|
||||
<field name="color">4</field>
|
||||
</record>
|
||||
<record id="email_template_lead_forward_mail" model="mail.template">
|
||||
<field name="name">Lead Mass Mail</field>
|
||||
<field name="model_id" model="ir.model" search="[('name', '=', 'crm.lead.forward.to.partner')]"></field>
|
||||
|
||||
@@ -243,3 +243,30 @@ class CrmLead(models.Model):
|
||||
'priority': values['priority'],
|
||||
'date_deadline': values['date_deadline'] if values['date_deadline'] else False,
|
||||
})
|
||||
|
||||
@api.model
|
||||
def create_opp_portal(self, values):
|
||||
if self.env.user.partner_id.grade_id or self.env.user.commercial_partner_id.grade_id:
|
||||
user = self.env.user
|
||||
self = self.sudo()
|
||||
if not (values['contact_name'] and values['description'] and values['title']):
|
||||
return {
|
||||
'errors': _('All fields are required !')
|
||||
}
|
||||
tag_own = self.env.ref('website_crm_partner_assign.tag_portal_lead_own_opp', False)
|
||||
values = {
|
||||
'contact_name': values['contact_name'],
|
||||
'name': values['title'],
|
||||
'description': values['description'],
|
||||
'priority': '2',
|
||||
'partner_assigned_id': user.partner_id.id,
|
||||
}
|
||||
if tag_own:
|
||||
values['tag_ids'] = [(4, tag_own.id, False)]
|
||||
|
||||
lead = self.create(values)
|
||||
lead.assign_salesman_of_assigned_partner()
|
||||
lead.convert_opportunity(lead.partner_id.id)
|
||||
return {
|
||||
'id': lead.id
|
||||
}
|
||||
@@ -13,8 +13,9 @@ var website = require('website.website');
|
||||
var interested_form = $('.interested_partner_assign_form');
|
||||
var desinterested_form = $('.desinterested_partner_assign_form');
|
||||
var opp_stage_buttons = $('.opp-stage-button');
|
||||
var new_opp_form = $('.new_opp_form');
|
||||
|
||||
if(!interested_form.length && !desinterested_form.length && !opp_stage_buttons.length) {
|
||||
if(!interested_form.length && !desinterested_form.length && !opp_stage_buttons.length && !new_opp_form.length) {
|
||||
return $.Deferred().reject("DOM doesn't contain website_crm_partner_assign elements");
|
||||
}
|
||||
|
||||
@@ -82,6 +83,25 @@ $('.edit_contact_confirm').on('click',function(e){
|
||||
return false;
|
||||
});
|
||||
|
||||
$('.new_opp_confirm').on('click',function(e){
|
||||
new Model('crm.lead')
|
||||
.call("create_opp_portal", [{
|
||||
contact_name: $('.new_opp_form .contact_name').val(),
|
||||
title: $('.new_opp_form .title').val(),
|
||||
description: $('.new_opp_form .description').val(),
|
||||
}])
|
||||
.done(function(response){
|
||||
if (response.errors) {
|
||||
$('#new-opp-dialog .alert').remove();
|
||||
$('#new-opp-dialog div:first').prepend("<div class='alert alert-danger'>" + response.errors + "</div>");
|
||||
}
|
||||
else {
|
||||
window.location = '/my/opportunity/' + response.id;
|
||||
}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
$('.edit_opp_confirm').on('click',function(e){
|
||||
new Model('crm.lead')
|
||||
.call("update_lead_portal", [[parseInt($('.edit_opp_form .opportunity_id').val())],{
|
||||
|
||||
@@ -66,6 +66,7 @@
|
||||
</h1>
|
||||
</div>
|
||||
<group>
|
||||
<field name="partner_weight"/>
|
||||
<field name="sequence"/>
|
||||
<field name="active"/>
|
||||
</group>
|
||||
|
||||
@@ -276,17 +276,49 @@
|
||||
<h3 class="page-header">
|
||||
Your Opportunities
|
||||
<t t-call="website_portal.portal_searchbar"/>
|
||||
<button name='new_opp' data-toggle="modal" data-target=".modal_new_opp" class="btn btn-default pull-right mr8"><i class="fa fa-plus fa-lg" /></button>
|
||||
</h3>
|
||||
<div t-if="not opportunities" class="alert alert-warning mt8" role="alert">
|
||||
There are no opportunities.
|
||||
<div class="modal fade modal_new_opp" role="form" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<form method="POST" class="modal-content js_website_submit_form new_opp_form">
|
||||
<input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
|
||||
<h4 class="modal-title">New Opportunity</h4>
|
||||
</div>
|
||||
<div class="modal-body" id="new-opp-dialog">
|
||||
<div class="form-group">
|
||||
<label class="control-label hdd4" for="contact_name">Contact name</label>
|
||||
<input type='text' name="contact_name" class="form-control contact_name"/>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label h4dd" for="title">Title</label>
|
||||
<input type='text' name="title" class="form-control title"/>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label hdd4" for="description">Description</label>
|
||||
<textarea row="3" name="description" class="form-control description"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button t-attf-class="btn btn-primary new_opp_confirm">Confirm</button> or
|
||||
<button type="button" class="btn btn-link" data-dismiss="modal" style="padding: 0">Cancel</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div t-if="opportunities" class="panel panel-default">
|
||||
<table class="table table-hover">
|
||||
<div class="panel panel-default">
|
||||
<t t-if="not opportunities">
|
||||
<div class="alert alert-warning mt8" role="alert">
|
||||
There are no opportunities.
|
||||
</div>
|
||||
</t>
|
||||
<table t-if="opportunities" class="table table-hover">
|
||||
<thead>
|
||||
<tr class="active">
|
||||
<th class="col-xs-2">Date</th>
|
||||
<th class="col-md-5">Name</th>
|
||||
<th class="col-md-3">Expected Revenue</th>
|
||||
<th class="col-md-4">Name</th>
|
||||
<th class="col-md-2">Expected</th>
|
||||
<th>Contact Name</th>
|
||||
<th>Stage</th>
|
||||
</tr>
|
||||
|
||||
Reference in New Issue
Block a user