2017-01-20 2 views
0

odoo 10에서 충성도 높은 프로그램을 구현하려고합니다.에서 개발하려고 시도한 동일한 기능을 odoo 8에서 사용할 수 있습니다. 코드POS Odoo 10의 Addtocart 화면에 새로운 버튼이나 텍스트를 추가하고 싶습니다.

3 가지 모델 클래스가 있습니다. 메신저 model.load_models 에서 모든 데이터를 가져하지만 메신저하지 addto 카트 화면에서 POS 화면에서 버튼을 받고

loyal.xml

<templates id="template" xml:space="preserve"> 

<t t-name="LoyaltyPoints"> 
    <div class='loyalty-points'> 
     <div class='loyalty-points-title'>Points</div> 
     <t t-if='points_won'> 
      <div class="loyalty-points-won"> 
       <span class='value'>+<t t-esc='widget.format_pr(points_won,1)'/></span> 
      </div> 
     </t> 
     <t t-if='points_spent'> 
      <div class="loyalty-points-spent"> 
       <span class='value'>-<t t-esc='widget.format_pr(points_spent,1)'/></span> 
      </div> 
     </t> 
     <div class='loyalty-points-total'> 
      <span class='value'><t t-esc='widget.format_pr(points_total,1)' /></span> 
     </div> 
    </div> 
</t>  

<t t-name="LoyaltyButton"> 
    <div class='control-button'> 
     <i class='fa fa-tag' /> Rewards 
    </div> 
</t> 
</templates> 

loyal.js

odoo.define('pos_loyalty_program.pos_loyalty_program', function (require) { 
"use strict"; 

var models = require('point_of_sale.models'); 
var screens = require('point_of_sale.screens'); 
var core = require('web.core'); 
var utils = require('web.utils'); 
var gui  = require('point_of_sale.gui'); 
var _t  = core._t; 

var round_pr = utils.round_precision; 
var QWeb  = core.qweb; 


models.load_fields('res.partner','loyalty_points'); 
models.load_models([ 
       { 
        model: 'loyal.program', 
        condition: function(self){ return !!self.config; }, 
        fields: ['name'], 
        domain: function(self){ 
        return [['id','=',self.config.related_loyal_program_id[0]]]; }, 
        loaded: function(self,loyalties){ 
         self.loyalty = loyalties[0]; 
        }, 
        { 
        model: 'loyal.rule',} 
        { 
        model: 'loyal.award',} 
       }, 
],{'after': 'product.product'}); 

var LoyaltyButton = screens.ActionButtonWidget.extend({ 
template: 'LoyaltyButton', 
button_click: function(){ 
    var order = this.pos.get_order(); 
    var client = order.get_client(); 
    if (!client) { 
      this.gui.show_screen('clientlist'); 
     return; 
    } 

    var rewards = order.get_available_rewards(); 
    if (rewards.length === 0) { 
     this.gui.show_popup('alert',{ 
      'title': 'No Rewards Available', 
      'body': 'There are no rewards available for this customer as part of the loyalty program', 
     }); 
     return; 
    } else if (rewards.length === 1 && this.pos.loyalty.rewards.length === 1) { 
     order.apply_reward(rewards[0]); 
     return; 
    } else { 
     var list = []; 
     for (var i = 0; i < rewards.length; i++) { 
      list.push({ 
       label: rewards[i].name, 
       item: rewards[i], 
      }); 
     } 
     this.gui.show_popup('selection',{ 
      'title': 'Please select a reward', 
      'list': list, 
      'confirm': function(reward){ 
       order.apply_reward(reward); 
      }, 
     }); 
    } 
}, 
}); 

screens.define_action_button({ 
'name': 'loyalty', 
'widget': LoyaltyButton, 
'condition': function(){ 
    return this.pos.loyalty && this.pos.loyalty.rewards.length; 
}, 
}); 

누구든지이 문제를 해결할 수 있도록 도와 주시겠습니까?

+0

가능한 복제 (http://stackoverflow.com/questions/41997252/odoo-10-add-button-to-pos) –

답변

0

위젯 만 빌드하면됩니다. 이 같은 예를 들어 뭔가 : [POS에 Odoo 10 추가 버튼]의

module.PosWidget.include({ 

    build_widgets: function(){ 
     var self = this; 
     this._super(); 

     // -------- Button screen and his selector --------- 
     this.button_screen = new module.LoyaltyButton(this,{}); 
     this.button_screen.appendTo(this.$('.screens')); 
     this.screen_selector.add_screen('loyalty',this.button_screen); 
    }