2017-02-17 119 views
0

我創建了一個模塊,以根據客戶向PO訂單行添加銷售訂單行。如何取消Odoo onchange上的One2many字段值

Selecting customer

當我添加銷售訂單將在PO順序加入。

SO added

我試圖取消鏈接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 iwant從ORDER_LINE

斷開鏈接的相關線路,但我不能刪除它。

我有用戶[6,0,ids]方法來取代值,它不會工作在創建狀態。 請幫幫我。

+0

當你改變order_ids選定SO addes的行normaly,但是當你刪除它的行不會? – Cherif

+0

是的。如果我從order_ids中刪除任何添加的id,我想從order_line –

+0

中刪除它的行,嘗試使用[(5,0,0)]刪除每條記錄,然後添加id。這工作對我來說,但唯一的問題是,它的工作,如果其他字段觸發onchange方法不是many2many或one2many字段 – Cherif

回答

0

對於現場你用來做關係: -

sale_order_id = fields.Many2one('sale.order', related='sale_order_line_id.order_id', string='Order', 
           store=False) 

請儘量給屬性ondelete =「瀑布」,改變路線爲: -

sale_order_id = fields.Many2one('sale.order', related='sale_order_line_id.order_id', string='Order', ondelete ='cascade' 
           store=False) 

如果你把這樣的,當相關銷售訂單被刪除時,具有關係記錄的one2many條目也將被刪除。這只是一個例子,你可以嘗試這種方式。 感謝

+0

讓我試試,謝謝緬甸人 –

+0

它不會工作,實際上是刪除order_ids [many2many]從purcahse命令,我想刪除相應的訂單id從po行 –

+0

但我認爲你的代碼是錯的 –

1

以下是在one2many

@api.onchage('field_name') 
def onchange_field_name(self): 
    for line in self.one2many_field_records: 
    if line.order_id == 'your_satisfying_condition': 
     line.unlink() 

刪除記錄一個共同的邏輯這是要刪除的訂單記錄通常的方式

1

對不起,我遲到了它是一個記錄時間:

嘗試使用[(5,0,0)]刪除每條記錄,然後添加ID。這工作對我來說,但唯一的問題是,它的工作,如果其他領域觸發onchange方法不相同many2many或one2many領域

但在創建模式,如果你沒有找到任何解決方案,爲什麼你不使用更新按鈕,當他在顯示one2many字段之前更改選定的訂單id時,他需要驗證,這樣您將一直在寫作,因爲創建將在驗證選擇時發生。我想說的是找到它的工作和工作,找到一種方法來使用它

+0

是的我已經使用[5,_,_]來刪除所有數據,我在創建時遇到的問題是通過以下方法解決的: - 當我從many2many中刪除銷售訂單ID時,不包含sale_order_id並使用new_line add方法重寫行。 –

+0

lp6 = self.order_line.filtered(lambda r:r.sale_order_id不在line_ids中) –

+0

如果您希望看到您的工作,請回復 – Cherif

0
new_lines = self.env['purchase.order.line'] 
     for qt in self.order_ids: 
      for i in self.order_line.mapped('sale_order_id'): 
       line_id.append(i.id) 
       line_ids.append(i) 
      for u in self.order_ids: 
       if u.id in line_id: 
        u_id.append(u.id) 
        line_id.remove(u.id) 
        u_ids.append(u) 
        line_ids.remove(u) 
      k = self.order_line.mapped('sale_order_id') 
      if line_id and line_ids and u_ids: 
       lp = self.order_line.filtered(lambda r: r.sale_order_id <= line_ids[0]) 
       lp6 = self.order_line.filtered(lambda r: r.sale_order_id not in line_ids) 
       lp2 = self.order_line.filtered(lambda r: r.sale_order_id in u_ids) 

       for line in self.order_line: 
        if line in lp: 
         self.update({ 
          'order_line': [(5, _, _)], 
         }) 
       for o in lp6: 
        data = { 
         'sale_order_line_id': o.sale_order_line_id.id, 
         'name': o.name, 
         'sequence_number': o.sequence_number, 
         'product_id': o.product_id.id, 
         'product_qty': o.product_qty, 
         'product_uom': o.product_uom, 
         'price_unit': o.price_unit, 
         'cpo_no': o.cpo_no, 
         'cpo_product_qty': o.cpo_product_qty, 
         'cpo_product_uom': o.cpo_product_uom, 
         'cpo_price_unit': o.cpo_price_unit, 
         # 'quote_ref':line.order_id.origin, 
         'discount': 0.0, 
         'date_planned': (datetime.today() + relativedelta(weeks=4)).strftime(
          DEFAULT_SERVER_DATETIME_FORMAT), 
        } 
        for line in qt.order_line: 
           # Load a PO line only once 
         if line in self.order_line.mapped('sale_order_line_id'): 
          continue 
        new_line = new_lines.new(data) 
        new_line._set_additional_fields(self) 
        new_lines += new_line 



        new_line = False 

       continue 
相關問題