1.web端代码
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="stock_inout_detail_list_tree" model="ir.ui.view">
<field name="name">stock_inout_detail_list_tree</field>
<field name="model">stock.inout.detail</field>
<field name="arch" type="xml">
<tree string="Stock Inout Detail" create="false">
<field name="product_id"/>
<field name="create_date"/>
<field name="picking_type_id"/>
<field name="quantity"/>
<field name="serial_number"/>
<field name="product_uom_id"/>
<field name="lot_id"/>
<field name="origin"/>
<field name="force_date"/>
</tree>
</field>
</record>
<record model="ir.actions.act_window" id="action_stock_inout_detail"><!--设定window-->
<field name="name">出入库明细</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">stock.inout.detail</field>
<field name="view_type">form</field>
<field name="view_mode">tree</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to start a new Call for Bids process.
</p>
<p>
</p>
</field>
</record>
<!--菜单链接对应的model-->
<record model="ir.actions.act_window.view"
id="action_stock_inout_detail_list_tree">
<field name="sequence" eval="0"/>
<field name="view_mode">tree</field>
<field name="view_id" ref="stock_inout_detail_list_tree"/>
</record>
<!--菜单名称及上级菜单名称-->
<menuitem
id="stock_inout_detail"
sequence="90"
name="出入库明细"
parent="stock.menu_warehouse_report"
action="action_stock_inout_detail"/>
</data>
</odoo>
2.服务端代码:
# _*_ coding: utf-8 _*_
from odoo import api, fields, models, tools
class StockInoutDetial(models.Model):
_name = "stock.inout.detail"
_auto = False
_order = 'create_date asc'
move_id = fields.Many2one('stock.move', u'Stock Move', required=True)
# location_id = fields.Many2one('stock.location', 'Location', required=True)
product_id = fields.Many2one('product.product', '产品', required=True)
quantity = fields.Float('数量')
create_date = fields.Datetime('创建日期')
serial_number = fields.Char('追踪号', required=True)
origin = fields.Char(u'源单据', required=True)
picking_type_id = fields.Many2one('stock.picking.type',
string=u'拣货类型')
lot_id = fields.Many2one('stock.production.lot', string='追踪号/批次号')
product_uom_id = fields.Many2one(
'product.uom', string='单位', related='product_id.uom_id',
readonly=True)
force_date = fields.Datetime(u'强制时间')
@api.model_cr
def init(self):
tools.drop_view_if_exists(self._cr, 'stock_inout_detail')
self._cr.execute("""
CREATE VIEW stock_inout_detail AS (
SELECT sq.id as id,
spl.id AS lot_id,
sqmr.move_id AS move_id,
sm.product_id AS product_id,
sm.create_date AS create_date,
sm.origin AS origin,
sm.picking_type_id AS picking_type_id,
sm.force_date,
sq.ref AS serial_number,
sq.qty AS quantity
FROM stock_quant_move_rel sqmr
LEFT JOIN stock_move sm ON sm.id=sqmr.move_id
LEFT JOIN stock_quant sq ON sq.id=sqmr.quant_id
LEFT JOIN stock_production_lot spl ON spl.id=sq.lot_id WHERE origin is not null
)""")