3

我正在尝试在 POS 屏幕上添加一个按钮。我掌握的很多信息都与 Odoo 8 有关,这可能就是它不起作用的原因。我安装了自定义插件没有任何错误,但我没有看到按钮。运行 POS 时我也没有收到任何错误。在版本 8 中有一个 widgets.js 文件,其中包括

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

版本 10 中没有 widgets.js,我猜这就是我的问题所在。这只是一个猜测,我真的不知道如何在 POS 中添加按钮。

这是我的 pos_custom.js

odoo.pos_custom = function(instance){
    var module = instance.point_of_sale;
    var round_pr = instance.web.round_precision
    var QWeb = instance.web.qweb;

    console.log("POS JS Loaded")
    module.PosWidget.include({
        build_widgets: function(){
      var self = this;
      this._super()

       custom_btn = $(QWeb.render(`custom_btn`))
       custom_btn.click(function(){
            alert("hello")
       })
       console.log("button <<<>>> ",custom_btn,this.$(`.control-button`))
       custom_btn.appendTo(this.$(`.control-button`))


      this.$control_buttons`).removeClass(`oe_hidden`)


            }
})

};

我的 /src/xml/pos_custom.xml

<?xml version="1.0" encoding="UTF-8"?>
<templates xml="template" xml:space="preserve">

    <t t-name="custom_btn">
        <button>Cust Button</button>
    </t>

</templates>

我的 /views/templates.xml

<?xml version="1.0"?>
<openerp>
    <data>
        <template id="assets_backend" name="pos_custom assets" inherit_id="web.assets_backend">
            <xpath expr="." position="inside">

                <script type="text/javascript" src="/pos_custom/static/src/js/pos_custom.js"></script>
                </xpath>
            </template>

    </data>
</openerp>

清单.py

{
    'name': 'Point Custom Module',
    'version': '1.2',
    'category': 'Point of Sale',
    'summary': 'Custom Point of Sale ',
    'description': "",
    'data': [
        "views/templates.xml"

    ],
    'depends': ['point_of_sale'],


    'qweb': ['static/src/xml/*.xml'],
    'application': True,


}
4

3 回答 3

2

有关如何做到这一点的具体示例,请查看addons/pos_discount/static/src/js/discount.js. 您可以在此处看到,在DiscountOdoo POS 的其中一个屏幕中添加了一个带有标签的按钮。检查整个模块,因为基本上是在 POS 的操作按钮上添加一个按钮(附截图)

在此处输入图像描述

还要检查模板上addons/pos_discount/static/src/xml/discount_templates.xml的按钮布局。

于 2017-02-02T16:45:27.227 回答
1

要在 pos 界面中创建一个按钮,您需要创建三个文件。

  1. xml 文件。

  2. js文件

  3. 用于模板的 xml 文件

  4. xml文件

    该文件用于调用js文件。您还需要在清单中设置此 xml 文件的路径,如 'data': ['view/pos_update_view.xml'] 此 xml 文件的代码如下所示:

                <script type="text/javascript" src="/pos_update/static/src/js/cancel.js"></script>
    
            </xpath>
        </template>
    </data>
    

您只需要更改 src="YOUR JS FILE PATH" 中的 js 文件的路径

  1. js文件

    在正常情况下,js 文件的位置将在 FOLDER_NAME/STATIC/SRC/JS/FILENAME.JS

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

    var screen = require('point_of_sale.screens'); var gui = require('point_of_sale.gui'); var core = require('web.core');

    var ClearCartLine = screen.ActionButtonWidget.extend({ template: "ClearCartLine",

    button_click: function(){
    var self = this;
    this.clear_button_fun();
    },
    
    clear_button_fun(){
    var order = this.pos.get_order();
    order.remove_orderline(order.get_selected_orderline())
    },
    

    }); screen.define_action_button({'name': 'clear_button_fun','widget': ClearCartLine,});

    });

    在上面的代码中,ClearCartLine 是模板名称,它必须在所有地方都相同。clear_button_fun() 是函数的名称,您可以添加代码以告知单击该按钮时要执行的操作。

  2. xml 文件。

    这个 xml 文件是创建一个按钮作为模板。在正常情况下,此 xml 文件的位置将在 FOLDER_NAME/STATIC/SRC/XML/FILENAME.XML

您还需要在清单中设置此模板位置。像'qweb':['static/src/xml/pos_view.xml']

<t t-name="ClearCartLine">
    <div class='control-button'>
        Clear Oder Line
    </div>
</t>

希望以上描述对你有所帮助。

于 2018-09-28T07:23:12.543 回答
0

也许你应该改变你的代码

id="assets_backend"进入id="assets" &

inherit_id="web.assets_backend"进入inherit_id="point_of_sale.assets"

于 2017-02-22T08:35:14.487 回答