summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorJeremy Kersten <jke@odoo.com>2016-10-25 20:44:12 +0200
committerJeremy Kersten <jke@odoo.com>2016-11-21 11:22:05 +0100
commitc141fbb46feb3edd9250c7b073df40ceaea3ff5c (patch)
treea8f067cc9dee36c14f9f49656dbcc64a9877e1d1 /addons
parent06fa5c64e00c316d27726feb6233098251b6f958 (diff)
[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.
Diffstat (limited to 'addons')
-rw-r--r--addons/website_crm_partner_assign/data/crm_partner_assign_data.xml4
-rw-r--r--addons/website_crm_partner_assign/models/crm_lead.py27
-rw-r--r--addons/website_crm_partner_assign/static/src/js/crm_partner_assign.js22
-rw-r--r--addons/website_crm_partner_assign/views/res_partner_views.xml1
-rw-r--r--addons/website_crm_partner_assign/views/website_crm_partner_assign_templates.xml44
5 files changed, 91 insertions, 7 deletions
diff --git a/addons/website_crm_partner_assign/data/crm_partner_assign_data.xml b/addons/website_crm_partner_assign/data/crm_partner_assign_data.xml
index ff42c8c4310..cc4abe26921 100644
--- a/addons/website_crm_partner_assign/data/crm_partner_assign_data.xml
+++ b/addons/website_crm_partner_assign/data/crm_partner_assign_data.xml
@@ -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>
diff --git a/addons/website_crm_partner_assign/models/crm_lead.py b/addons/website_crm_partner_assign/models/crm_lead.py
index a6302f5008b..fe2f42e156b 100644
--- a/addons/website_crm_partner_assign/models/crm_lead.py
+++ b/addons/website_crm_partner_assign/models/crm_lead.py
@@ -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
+ } \ No newline at end of file
diff --git a/addons/website_crm_partner_assign/static/src/js/crm_partner_assign.js b/addons/website_crm_partner_assign/static/src/js/crm_partner_assign.js
index 6ba98e15ef6..df265a4221b 100644
--- a/addons/website_crm_partner_assign/static/src/js/crm_partner_assign.js
+++ b/addons/website_crm_partner_assign/static/src/js/crm_partner_assign.js
@@ -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())],{
diff --git a/addons/website_crm_partner_assign/views/res_partner_views.xml b/addons/website_crm_partner_assign/views/res_partner_views.xml
index d8fed863f69..b719c7c297e 100644
--- a/addons/website_crm_partner_assign/views/res_partner_views.xml
+++ b/addons/website_crm_partner_assign/views/res_partner_views.xml
@@ -66,6 +66,7 @@
</h1>
</div>
<group>
+ <field name="partner_weight"/>
<field name="sequence"/>
<field name="active"/>
</group>
diff --git a/addons/website_crm_partner_assign/views/website_crm_partner_assign_templates.xml b/addons/website_crm_partner_assign/views/website_crm_partner_assign_templates.xml
index 0a114af3c15..2fb4aea29b0 100644
--- a/addons/website_crm_partner_assign/views/website_crm_partner_assign_templates.xml
+++ b/addons/website_crm_partner_assign/views/website_crm_partner_assign_templates.xml
@@ -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">&amp;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>