2017-11-28 5 views
1

One2many 필드에서 금액을 읽어야합니다. 그러면 기록의 state에 따라이 수량을 특정 저널에 기록하십시오.회선의 제품 가격을 읽으십시오 - 회계 저널에 기록하십시오 - Odoo v8

class print_order(models.Model): 
    _name = 'print.order' 

    name = fields.Char('Reference', required=True, index=True, copy=False, readonly='True', default='New') 
    date = fields.Date(string="Print Date",default=fields.Datetime.now) 
    production_orders = fields.Many2one('bsi.production.order', ondelete='cascade', string="Production Order") 
    due_date = fields.Date(string="Due Date") 
    journal_entry = fields.Many2one('account.move', string="Journal Entry") 
    stock_picking_id = fields.Many2one('stock.picking', string="Stock Picking") 
    order_picking = fields.One2many('print.order.lines', 'print_order', string="Order lines") 
    book_block = fields.Boolean(string="Book Block", default=True,) 
    binding = fields.Boolean(string="Binding",) #compute="_bool_binding", readonly=False 
    edging = fields.Boolean(string="Edging",) #compute="_bool_edging", readonly=False 
    raw_material_consumed = fields.One2many('stock.move', 'stock_move_lines', string="Raw material consumed") 
    contract_worksheet = fields.One2many('mrp.worksheet.contract', 'printer_order', string="Worksheet calculation") 
    name_contract = fields.Char(string="Name", compute="_compute_worksheet") 
    state = fields.Selection([ 
      ('draft','Draft'), 
      ('inprogress','In progress'), 
      ('awaitingraw','Awaiting raw materials'), 
      ('work_in_progress','Print in Progress'), 
      ('delivered','Delivered'), 
      ('cancel','Cancel'), 
     ], string="State") 
    notes = fields.Text(string="Notes") 
    printer_book_block = fields.Many2one('res.partner', string="Printer Book Block") 
    printer_binding = fields.Many2one('res.partner', string="Printer Binding") 
    printer_edging = fields.Many2one('res.partner', string="Printer Edging") 
    transporter = fields.Many2one('res.partner', string="Transporter") 
    total_transport_cost = fields.Float(string="Total transport cost") 
    additional_job = fields.Boolean(string="Additional Job") 
    company_id = fields.Many2one('res.company', 'Company',default='_default_company') 
    location_id = fields.Many2one('stock.location', string="Source Location") 
    location_dest_id = fields.Many2one('stock.location', string="Destination Location") 

그래서, isbnMany2oneproduct.product에 모델이 내가 account.account에 새 Many2one 필드를 만든이 모델에 있습니다 :

이 내 모델입니다.

당신이 볼 수 있듯이

,이 클래스는 내가 debit 또는 credit에 내가 product.product에 만든 특정 저널로 One2many 필드가 contract_worksheet에서이 양을 작성해야하므로 특정 상태에 따라 '상태'가 전지.

이제는 무엇이 나를 혼란스럽게합니까? One2many의 특정 필드에 어떻게 액세스합니까?

상태를 변경하는 동안 자동으로이 작업을 수행하는 방법은 무엇입니까?

@api.model 
@api.depends('order_picking', 'order_picking.isbn', 'contract_worksheet') 
def accounting_scenarios(self): 
    for record in self: 
     if self.state == awaitingraw: 
      self.isbn.printer_wip_account.debit = self.contract_worksheet.total_alles 

을하지만 아무것도하지 않습니다

이것은 내가 지금까지 시도한 것입니다.

그래서 어떤 아이디어입니까? 난 당신이 값을 계산하기 때문에 당신이 대신 @api.model@api.multi를 사용한다고 생각

class bsi_print_order_lines(models.Model): 
    _name = 'bsi.print.order.lines' 

    print_order = fields.Many2one('bsi.print.order', string="Print Order") 
    isbn = fields.Many2one('product.product', string="ISBN", domain="[('is_isbn', '=', True)]") 
    qty = fields.Integer(string="Quantity") 
    consumed_qty = fields.Integer(string="Quantity consumed") 
    remaining_qty = fields.Float(string="Remaining quantity") #, compute="_remaining_func" 
    is_book_block = fields.Boolean(string="Is Book Block Done", compute="compute_book_block") 
    is_binding = fields.Boolean(string="Is Binding Done", compute="compute_binding") 
    is_edging = fields.Boolean(string="Is Edging Done", compute="compute_edging") 
    isbns = fields.Many2one('worksheets.isbns', string="Worksheet ISBNS") 
+1

귀하의 질문은 약간 혼란 스럽다. accounting_scenarios는 필드를 계산하는 방법입니까? 어떻게 isbn을 정의합니까? 잘 모르겠지만 for 루프 안에 "self"를 사용하고 있습니다. 대신에 "기록하십시오."... 제가 생각하기에는 문제가 될 수 있습니다 ... @ api.multi도 사용해야 할 수도 있습니다 ... – Lucas

+0

예, 필드를 계산하는 방법으로, 필드를 취해야합니다. One2Many 인 'contract_worksheet'를 작성하고 사례에 따라 차변 또는 대변에 따라 특정 저널로 복사하십시오. 제 질문을 편집하여 줄을 추가하십시오. – NeoVe

+0

편집 완료, 감사합니다 – NeoVe

답변

1

:

편집

이것은 내가 order_picking One2many 필드에서 액세스 모델이다.

또한,과 같이, recordself 교체 :

@api.multi 
@api.depends('order_picking', 'order_picking.isbn', 'contract_worksheet') 
def accounting_scenarios(self): 
    for record in self: 
     if record.state == 'awaitingraw': 
      record.isbn.printer_wip_account.debit = record.contract_worksheet.total_alles 
+0

감사합니다. 나는 그것을 변경했지만 아무런 효과가 없습니다.이 행동은 다른 모듈에서도 자동으로 이루어집니다. 즉, 계산 된 필드가 아니므로, 이해하기 어려워졌습니다. 어떤 필드에 함수를 추가하지 않고 상태에 따라이 작업을 수행하거나 "보이지 않는"경우에도 추가해야합니까? – NeoVe

+0

하지만 내가 봤던 모든 예가 오래된 API이거나 인보이스가 있습니다. – NeoVe

+0

아니면 저널에서 필드를 물려받은 것입니까? 그러나이 경우 하드 코딩 된 것입니다 : / – NeoVe