diff options
| author | Jeremy Kersten <jke@odoo.com> | 2016-10-25 20:44:12 +0200 |
|---|---|---|
| committer | Jeremy Kersten <jke@odoo.com> | 2016-11-21 11:22:05 +0100 |
| commit | c141fbb46feb3edd9250c7b073df40ceaea3ff5c (patch) | |
| tree | a8f067cc9dee36c14f9f49656dbcc64a9877e1d1 | |
| parent | 06fa5c64e00c316d27726feb6233098251b6f958 (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.
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">&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> |
