如何从一个odoo表单进行两次不同的交付?odoo-15



创建一个销售订单并添加几个项目。点击"确认"后;按下交付"交付&;将被创建。销售订单中的所有项目都将交付。您需要将快递标志添加到销售订单(bool)。示例:在销售订单中添加5个项目A B C(快递)D E(快递)。销售订单确认后创建两个交付:第一个交付包含位置A, B和D;第二次投递(快递)应包含位置C和e

我添加了按钮。现在有了调试器,我达到了odoo/addons/sale_stock/models/sale_order.py中的def _action_launch_stock_rule(self, previous_product_uom_qty=False)函数我不知道下一步该怎么办。我无法理解在哪个阶段(在哪个函数中)数据被抛出到交付。这里我需要写出逻辑。如果我们是快件,那我就得把它分成两次运送。

sale.py

class SaleOrderLine(models.Model):
_inherit = "sale.order.line"
express_delivery = fields.Boolean(string='Express delivery')

sale.xml

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_order_form_inherit" model="ir.ui.view">
<field name="name">sale.order.form</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='order_line']/tree/field[@name='qty_delivered']" position="after">
<field name="express_delivery" />
</xpath>
</field>
</record>
</odoo>
也许有人能帮我理解?

我找到了解决这个问题的方法

sale.py

class SaleOrderLine(models.Model):
_name = "sale.order.line"
_inherit = "sale.order.line"
express_delivery = fields.Boolean(string='Express delivery')
def _prepare_procurement_values(self, group_id=False):
res = super(SaleOrderLine, self)._prepare_procurement_values(group_id)
res.update({'express_delivery': self.express_delivery})
return res

stock_move.py

from odoo import models, fields
from itertools import groupby

class StockMoveInherit(models.Model):
_inherit = 'stock.move'
express_delivery = fields.Boolean()
def _search_picking_for_assignation(self):
self.ensure_one()
picking = self.env['stock.picking'].search([
('group_id', '=', self.group_id.id),
('location_id', '=', self.location_id.id),
('location_dest_id', '=', self.location_dest_id.id),
('picking_type_id', '=', self.picking_type_id.id),
('printed', '=', False),
('express_delivery', '=', self.express_delivery),  # Добавляю поле
('immediate_transfer', '=', False),
('state', 'in', ['draft', 'confirmed', 'waiting', 'partially_available', 'assigned'])], limit=1)
return picking
def _assign_picking(self):
Picking = self.env['stock.picking']
grouped_moves = groupby(sorted(self, key=lambda m: [f.id for f in m._key_assign_picking()]),
key=lambda m: [m._key_assign_picking(), m.express_delivery])
for group, moves in grouped_moves:
moves = self.env['stock.move'].concat(*list(moves))
new_picking = False
picking = moves[0]._search_picking_for_assignation()
if picking:
if any(picking.partner_id.id != m.partner_id.id or
picking.origin != m.origin for m in moves):
picking.write({
'partner_id': False,
'origin': False,
})
else:
new_picking = True
picking = Picking.create(moves._get_new_picking_values())
picking.write({'express_delivery': moves[0].express_delivery})  # Добавляю поле
moves.write({'picking_id': picking.id})
moves._assign_picking_post_process(new=new_picking)
return True

stock_picking.py

from odoo import fields, models, api

class StockMoveInherit(models.Model):
_name = 'stock.picking'
_inherit = 'stock.picking'
express_delivery = fields.Boolean(default=False)

stock_rule.py

from odoo import api, fields, models

class StockRuleInh(models.Model):
_inherit = 'stock.rule'
def _get_stock_move_values(self, product_id, product_qty, product_uom, location_id, name, origin, company_id,
values):
res = super(StockRuleInh, self)._get_stock_move_values(product_id, product_qty, product_uom, location_id,
name, origin, company_id, values)
res['express_delivery'] = values.get('express_delivery', False)
return res

stock_picking_view.xml

<?xml version="1.0"?>
<odoo>
<record id="stock_picking_view_form_inherit" model="ir.ui.view">
<field name="name">stock.picking.view.form.inherit</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.view_picking_form"/>
<field name="arch" type="xml">
<xpath expr="//group/field[@name='origin']" position="after">
<field name="express_delivery" attrs="{'readonly':[True]}" />
</xpath>
</field>
</record>
<record id="vpicktree_inherit" model="ir.ui.view">
<field name="name">stock.picking.tree</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.vpicktree"/>
<field name="arch" type="xml">
<xpath expr="//tree/field[@name='user_id']" position="after">
<field name="express_delivery"/>
</xpath>
</field>
</record>
</odoo>

sale.xml

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_order_form_inherit" model="ir.ui.view">
<field name="name">sale.order.form</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='order_line']/tree/field[@name='qty_delivered']" position="after">
<field name="express_delivery" />
</xpath>
</field>
</record>
</odoo>

最新更新