summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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>