sale.order
中两个订单中,产品相同(产品的供应商一样,产品路线是Make To Order
),这样两单都Confirm
时,是怎么自动生成Purchase Order
,并合并的?
按钮Confirm
对应的方法action_confirm
只是修改了Sale Order
的订单状态,没有逻辑生成Purchase Order
的?
sale.order
中两个订单中,产品相同(产品的供应商一样,产品路线是Make To Order
),这样两单都Confirm
时,是怎么自动生成Purchase Order
,并合并的?
按钮Confirm
对应的方法action_confirm
只是修改了Sale Order
的订单状态,没有逻辑生成Purchase Order
的?
@seasid
在js中可以获取到当前view的id,获取方法:
this.__parentedParent.views.list.view_id
就看怎么获取到自定义的tree view的id,然后对比下应该就可以了
ps:js获取这些值,都可以通过console.log(this)
,在这里面找应该都可以找到的。
@ssun
按你说的我测试了下,
首先添加:static/src/xml/xx.xml:
<?xml version="1.0" encoding="UTF-8"?>
<template id="template" xml:space="preserve">
<t t-extend="ListView.buttons">
<t t-jquery="button.o_list_button_add" t-operation="replace">
<button t-if="widget.model == 'purchase.order'" class="btn btn-primary btn-sm o_list_tender_button_create" type="button">Create Tender</button>
<button t-if="widget.model != 'purchase.order'" class="btn btn-primary btn-sm o_list_button_add" type="button">Create</button>
</t>
</t>
</template>
其次:在__manifest__.py添加
'qweb': ['static/src/xml/*.xml',],
测试没有效果,还需要其他操作?
还有这个t-if中的widget可以这样用,有没有有文档详细说明的?
@digitalsatori
谢谢,就是这个原因。
只有继承了mail.thread
才能使用message_post
方法。
message_post
的主体是谁,就是在那个的form表单上记录log的。
如何给sale.order
的sale.order.line
添加删除日志或者字段值变动的日志(类似track_visibility='onchange'
的功能),显示在sale.order
的form视图上。还有其他的方法吗?
尝试做法:
在sale.order
的write
方法中获取不到删除的line的记录,在sale.order
的unlink
方法中使用message_post
记录到sale.order.line
的删除记录。
在sale.order.line
的unlink
方法中使用message_post
报错:AttributeError: 'sale.order.line' object has no attribute 'message_post'
@llrrjj 看那个字段在哪个model中啊,看看那个model中的代码
@llrrjj
你现在拿的这个是odoo关于server action的代码。你用这个想要实现什么功能?
上述贴出来的代码跟报错没有直接关系吧,我觉得应该找那个字段在的model。
@ssun 这个js里面的有些属性在odoo11里面就已经不适用了,明显的:
var myListView = require('web.ListView');
var tree_model = this.dataset.model;
下面是我测试odoo11,odoo12都可以使用的,你对照看看:
odoo.define('xxx.add_tree_view_button', function (require) {
"use strict";
var show_button_model = ['product.template'];//哪些模型显示导入按钮
var ListController = require('web.ListController');
ListController.include({
renderButtons: function ($node) {
var $buttons = this._super.apply(this, arguments);
var tree_model = this.modelName;
for(var i=0; i<show_button_model.length; i++) {
if (tree_model == show_button_model[i]){
var button2 = $("<button type='button' class='btn btn-sm btn-default'>Import Excel</button>")
.click(this.proxy('popup_import_wizard'));
this.$buttons.append(button2);
}
}
return $buttons;
},
popup_import_wizard: function () {
this.do_action({
type: 'ir.actions.act_window',
res_model: 'import.wizard',
views: [[false, 'form']],
view_mode: "form",
view_type: 'form',
view_id: 'import_wizard_form',
target: 'new',
});
},
});
});