2017-02-06 2 views
0

이 게시물은 평소보다 조금 복잡해야합니다.이 도메인을 작성하여 각 인보이스 라인에 적합한 재고 팩 작업을 100 % 보장하는 방법은 무엇입니까?

account.invoice.line : pack_operation에 대한 새 입력란을 만들었습니다. 이 필드를 사용하여 PDF 인보이스의 각 행에 대한 일련 번호/로트 번호를 인쇄 할 수 있습니다 (이 부분은 잘 작동 함).

각 송장 라인에 대해 EXACT 및 ONLY 스톡 팩 작업을 선택하기 위해 많은 시간이 지났습니다.

아래 코드에서 [('id', '=', 31)] 도메인을 사용하여 테스트를 PDF로 인쇄했습니다.

호이 인보이스를 작성하여 각 인보이스 라인에 대해 올바른 재고 팩 작업을 얻을 수 있는지 확인하십시오.

정말 여기 당신의 도움이 필요합니다 ... 너무 복잡해서 두뇌가 복잡해졌습니다. 우리의 코드 :

class AccountInvoiceLine(models.Model): 
_inherit = "account.invoice.line" 
    pack_operation = fields.Many2one(comodel_name='stock.pack.operation', compute='compute_stock_pack_operation_id') 

    def compute_stock_pack_operation_id(self):  
     stock_operation_obj = self.env['stock.pack.operation'] 
     stock_operation = stock_operation_obj.search(   [('id','=', 31)]   ) 
     self.pack_operation = stock_operation[0] 




    EDIT#1 
I know that you won't like my code. But, this one seems to work. I take any comments and improvements with pleasure. 



    class AccountInvoiceLine(models.Model): 
    _inherit = "account.invoice.line" 
    pack_operation = fields.Many2one(comodel_name='stock.pack.operation', compute='compute_stock_pack_operation_id')@api.one 
    def compute_stock_pack_operation_id(self): 


     procurement_order_obj = self.env['procurement.order'] 
     stock_operation_obj = self.env['stock.pack.operation'] 

     all_picking_ids_for_this_invoice_line = [] 


     for saleorderline in self.sale_line_ids: 

      for procurement in saleorderline.procurement_ids: 

       for stockmove in procurement.move_ids: 

        if stockmove.picking_id.id not in all_picking_ids_for_this_invoice_line 
         all_picking_ids_for_this_invoice_line.append(stockmove.picking_id.id) 


     all_picking_ids_for_this_invoice_line)) 

     stock_operation = stock_operation_obj.search(
      [ '&', 
       ('picking_id','in',all_picking_ids_for_this_invoice_line), 
       ('product_id','=',self.product_id.id) 
       ] 
      ) 

     self.pack_operation = stock_operation[0] 

답변

0

pack_operation 필드가 계산 된 필드, 즉 수 기본값은 당신이 당신의 필드를 정의 할 때 store=True을 설정하지 않는 한 필드가 데이터베이스에 저장되지 않습니다.

pack_operation = fields.Many2one(comodel_name='stock.pack.operation', compute='compute_stock_pack_operation_id') 

에 :

그럼, 당신이 여기에서 할 수있는 일은 변화

pack_operation = fields.Many2one(comodel_name='stock.pack.operation', compute='compute_stock_pack_operation_id', store=True) 

그리고 조회를 다시 실행 해보십시오.