2017-09-07 3 views
0

odoo .v8を使用しています。私はすでにPoint of Saleモジュールを使用しています。印刷のためのいくつかのメソッドを継承するつもりです。良い私はvalidate_orderを再定義するとき、私は、クライアント側でこのエラーが出るまで:クライアントODOOエラー:QWebが定義されていません

Uncaught ReferenceError: QWeb is not defined

これは私がvalidate_order方法を再定義する方法私のコードです:

`関数openerp_tpv_screens(例えば、モジュール){ var Qweb = instance.web.qweb; var _t = instance.web._t;

module.PaymentScreenWidget=module.PaymentScreenWidget.extend({ 

validate_order: function(options) { 
     var self = this; 
     options = options || {}; 

     var currentOrder = this.pos.get('selectedOrder'); 

     if(currentOrder.get('orderLines').models.length === 0){ 
      this.pos_widget.screen_selector.show_popup('error',{ 
       'message': _t('Empty Order'), 
       'comment': _t('There must be at least one product in your order before it can be validated'), 
      }); 
      return; 
     } 

     var plines = currentOrder.get('paymentLines').models; 
     for (var i = 0; i < plines.length; i++) { 
      if (plines[i].get_type() === 'bank' && plines[i].get_amount() < 0) { 
       this.pos_widget.screen_selector.show_popup('error',{ 
        'message': _t('Negative Bank Payment'), 
        'comment': _t('You cannot have a negative amount in a Bank payment. Use a cash payment method to return money to the customer.'), 
       }); 
       return; 
      } 
     } 

     if(!this.is_paid()){ 
      return; 
     } 

     // The exact amount must be paid if there is no cash payment method defined. 
     if (Math.abs(currentOrder.getTotalTaxIncluded() - currentOrder.getPaidTotal()) > 0.00001) { 
      var cash = false; 
      for (var i = 0; i < this.pos.cashregisters.length; i++) { 
       cash = cash || (this.pos.cashregisters[i].journal.type === 'cash'); 
      } 
      if (!cash) { 
       this.pos_widget.screen_selector.show_popup('error',{ 
        message: _t('Cannot return change without a cash payment method'), 
        comment: _t('There is no cash payment method available in this point of sale to handle the change.\n\n Please pay the exact amount or add a cash payment method in the point of sale configuration'), 
       }); 
       return; 
      } 
     } 

     if (this.pos.config.iface_cashdrawer) { 
       this.pos.proxy.open_cashbox(); 
     } 

     if(options.invoice){ 
      // deactivate the validation button while we try to send the order 
      this.pos_widget.action_bar.set_button_disabled('validation',true); 
      this.pos_widget.action_bar.set_button_disabled('invoice',true); 
      this.pos_widget.action_bar.set_button_disabled('invoice_03',true); 

      var invoiced = this.pos.push_and_invoice_order(currentOrder); 

      invoiced.fail(function(error){ 
       if(error === 'error-no-client' || error === 'error-generic-client'){ 
        self.pos_widget.screen_selector.show_popup('error',{ 
         message: _t('An anonymous order cannot be invoiced'), 
         comment: _t('Please select a client for this order. This can be done by clicking the order tab'), 
        }); 
       }else if(error === 'error-no-generic-client'){ 
        self.pos_widget.screen_selector.show_popup('error',{ 
         message: _t('An anonymous order cannot be invoiced'), 
         comment: _t('No se debe seleccionar un Cliente Genérico.'), 
        }); 
       }else{ 
        self.pos_widget.screen_selector.show_popup('error',{ 
         message: _t('The order could not be sent'), 
         comment: _t('Check your internet connection and try again.'), 
        }); 
       } 
       self.pos_widget.action_bar.set_button_disabled('validation',false); 
       self.pos_widget.action_bar.set_button_disabled('invoice',false); 
       self.pos_widget.action_bar.set_button_disabled('invoice_03',false); 
      }); 

      invoiced.done(function(){ 
       self.pos_widget.action_bar.set_button_disabled('validation',false); 
       self.pos_widget.action_bar.set_button_disabled('invoice',false); 
       self.pos_widget.action_bar.set_button_disabled('invoice_03',false); 
       self.pos.get('selectedOrder').destroy(); 
      }); 

     }else{ 
      this.pos.push_order(currentOrder) 
      if(this.pos.config.iface_print_via_proxy){ 
       var receipt = currentOrder.export_for_printing(); 
       this.pos.proxy.print_receipt(QWeb.render('XmlReceipt',{ 
        receipt: receipt, widget: self, 
       })); 
       this.pos.get('selectedOrder').destroy(); //finish order and go back to scan screen 
      }else{ 
       this.pos_widget.screen_selector.set_current_screen(this.next_screen); 
      } 
     } 

     // hide onscreen (iOS) keyboard 
     setTimeout(function(){ 
      document.activeElement.blur(); 
      $("input").blur(); 
     },250); 
    }, 

});私にエラーを与える `

特定の行は次のとおりです。

this.pos.proxy.print_receipt(QWeb.render('XmlReceipt',{ receipt: receipt, widget: self, }));

Qwebのが定義されていませんが、エラーであるが、私はそれをやった:var Qweb = instance.web.qweb;enter image description here

お時間をいただきありがとうございます。

答えて

0

レンダリングされたテンプレートをオブジェクトに渡し、コード内でこのオブジェクトを呼び出してみます。その後、動作しない場合は__openerp__.pyファイルを確認してください。

<template id="assets_backend" name="pos assets" inherit_id="web.assets_backend"> 
     <xpath expr="." position="inside"> 
      <script type="text/javascript" src="/module_name/static/src/js/file_name.js"></script> 
    </template> 

後:それはこのようにする必要がありますファイルをXMLであなたのjsファイルのパスをチェックすることを忘れないでください。その後

'qweb': ['static/src/xml/pos.xml'] 

:その中でQwebのテンプレートのパスをチェックし、それは次のようにする必要があります再度実行され、気象エラーが解決されたかどうかがチェックされます。

+0

私は新しいテンプレートを定義していないので、この関数が既に呼び出したテンプレートが存在しています。この関数に新しいbottonといくつかのバリデーションを追加します。 'QWeb.render'です。 –

+0

テンプレートを継承するか、ベースを変更してテンプレートを変更しましたか? –

+0

私は「私はテンプレートを使用したり定義したりしませんが、単に.jsファイルを上書きします。 –

関連する問題