【发布时间】:2017-02-17 06:07:25
【问题描述】:
我创建了一个模块来根据客户将销售订单行添加到采购订单行。
当我添加销售订单时,它将添加到采购订单中。
我试图从 one2many 字段中取消链接特定 ID。在图片中添加 SO 字段
class PurchaseOrder(models.Model):
_inherit= "purchase.order"
_name = "purchase.order"
order_ids = fields.Many2many('sale.order', String="Add Order",domain="[('partner_id', 'child_of', partner_id),('state', 'in', ('quotation','socreated','done'))]")
@api.onchange('order_ids')
def orders_change(self):
if not self.order_ids:
return {}
if not self.partner_customer_id:
warning = {
'title': _('Warning!'),
'message': _('You must first select a partner!'),
}
# self.order_ids =False
return {'warning': warning}
line_ids = []
u_ids=[]
new_lines = self.env['purchase.order.line']
for qt in self.order_ids:
for i in self.order_line.mapped('sale_order_id'):
line_ids.append(i)
for u in self.order_ids:
if u.id in line_id:
u_ids.append(u)
line_ids.remove(u)
if line_ids and u_ids:
lp = self.order_line.filtered(lambda r: r.sale_order_id <= line_ids[0])
lp2 = self.order_line.filtered(lambda r: r.sale_order_id <= u_ids[0])
for line in self.order_line:
if line in lp:
# self.order_line = [(6, 0, lp2.ids)]
line.unlink()
continue
for line in qt.order_line:
# Load a PO line only once
if line in self.order_line.mapped('sale_order_line_id'):
continue
#seller section
seller = line.product_id._select_seller(
line.product_id,
partner_id=self.partner_id,
quantity=line.product_uom_qty,
date=self.date_order and self.date_order[:10],
uom_id=line.product_uom)
price_unit = self.env['account.tax']._fix_tax_included_price(seller.price,
line.product_id.supplier_taxes_id,
line.tax_id) if seller else 0.0
if price_unit and seller and self.currency_id and seller.currency_id != self.currency_id:
price_unit = seller.currency_id.compute(price_unit, self.currency_id)
if seller and line.product_uom and seller.product_uom != line.product_uom:
price_unit = self.env['product.uom']._compute_price(seller.product_uom.id, price_unit,
to_uom_id=line.product_uom.id)
unit = price_unit
qty = line.product_uom_qty
if float_compare(qty, 0.0, precision_rounding=line.product_uom.rounding) <= 0:
qty = 0.0
tax_id = line.tax_id or line.product_id.taxes_id
data = {
'sale_order_line_id': line.id,
'name': line.name,
'sequence_number':line.sequence_number,
'product_id': line.product_id.id,
'product_qty': qty,
'product_uom': line.product_id.uom_po_id or line.product_id.uom_id,
'price_unit': unit,
'cpo_no' : line.order_id.cpo_number,
'cpo_product_qty': qty,
'cpo_product_uom': line.product_id.uom_id,
'cpo_price_unit': line.price_unit,
'discount': 0.0,
'date_planned':(datetime.today() + relativedelta(weeks=4)).strftime(DEFAULT_SERVER_DATETIME_FORMAT),
}
new_line = new_lines.new(data)
new_line._set_additional_fields(self)
new_lines += new_line
if new_lines :
self.order_line += new_lines
class PurchaseOrderLine(models.Model):
_inherit= "purchase.order.line"
_name = "purchase.order.line"
sale_order_line_id = fields.Many2one('sale.order.line', 'Order Line', ondelete='set null', select=True
)
sale_order_id = fields.Many2one('sale.order', related='sale_order_line_id.order_id', string='Order',
store=False)
当我删除 order_ids 时,我想从 order_line (po) 中取消相关行的链接
link_ids 将在它被选中时保存 order_ids,当一个 id 从 order_ids 中删除时,它将从 link_ids 中删除。 u_ids 将在 order_id 删除时保留其余部分。
当我从 order_ids 中删除一个 id 时,我想从 order_line 中取消相关行的链接
但我不能删除它。
我有用户 [6,0,ids] 方法来替换值,它不会在创建状态下工作。 请帮帮我。
【问题讨论】:
-
当您更改 order_ids 时,所选 SO 的行会正常添加,但当您删除它时,行不会?
-
是的。如果我从 order_ids 中删除任何添加的 id,我想从 order_line 中删除其行
-
尝试使用 [(5,0,0)] 删除每条记录,然后添加 ID。这对我有用,但唯一的问题是,如果其他字段触发 onchange 方法不是相同的 many2many 或 one2many 字段,它会起作用
-
但是 [(5,0,0)] 在 create() 中不起作用,对吧?
-
如果您没有找到任何解决方案,为什么在他更改所选订单 ID 时不使用更新按钮,他需要在显示 one2many 字段之前进行验证,这样您就可以一直进行写入,因为create 将在他验证选择时发生。我想说的是找到它的工作原理并围绕它工作以找到使用它的方法