2017-11-29 17 views
1

필요한 것은 상황에 따라 일부 저널을 특정 저널에 자동으로 쓰고 읽은 다음 직불 또는 크레딧 필드에 쓰는 것입니다.수량을 특정 저널에 기입하십시오 - Odoo v8

하지만, 요점은 내가이 할 필요가있다 : 클래스의 상태에 따라 송장

2 .-

에게/테이블을 생성하지 않고

1.-을

3 .- 함수를 필드에 추가하지 않고 상태를 변경하자마자 quantites가 저널에 기록됩니다.

필자는이 방법을 시도했지만 나는 그것이 computed 플로트 또는 정수 필드에 있어야하기 때문에이 작동하지 않습니다 생각 :

@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 
     elif record.state == work_in_progress: 
      record.transporter.transp_transit.debit = record.contract_worksheet.total_alles 

그래서, 기본적으로 아무것도하지 않습니다.

구매 또는 판매가 완료되면 debit 또는 credit fied가 생성 된 인보이스로 업데이트되는 등의 행동이 필요합니다. 그러나이 경우 청구서는 필요하지 않습니다. 일부 필드 (계산되지 않든)를 읽고 복사 한 다음 선택한 저널의 앞에서 설명한 필드에 붙여 넣어야합니다.

나는 자신을 설명하기를 희망한다.

아이디어가 있으십니까?

+1

'isbn','printer_wip_account','transporter','transp_transit','contract_worksheet' 및'total_alles'의 필드 유형은 무엇입니까? – forvas

+0

isbn = produdct.product에 many2one, printer_wip_account는 res.partner 저널 계정, transporter는 res.partner, transp_transit, transporter의 계정 journnal, contract_worksheet는 One2Many에서 다른 모델로 (계산을 읽습니다) , total_alles는 contract_worksheet 모델 – NeoVe

+0

Idk에 속한 계산 된 필드 중 하나입니다.이 문제를 공격하는 방식을 변경해야하는 경우 – NeoVe

답변

1

필드가 변경 될 때마다 몇 가지 작업을 수행해야하지만 계산 방법 (@api.depends 데코레이터 사용)을 호출하는 새 필드를 만들 필요가없는 경우 모델의 ORM write 메서드를 덮어 써야합니다 필드가에 속한다. '당신이 할 수있는, 당신이 사용하고있는 모든 필드의 유형을 알 수 없기 때문에

@api.multi 
def write(self, vals): 
    res = super(YourModel, self).write(vals) 
    if 'state' in vals: 
     for record in self: 
      contract_worksheet = record.contract_worksheet 
      if record.state == awaitingraw: 
       printer_wip_account = record.isbn.printer_wip_account 
       res &= printer_wip_account.write({ 
        'debit': sum(c.total_alles for c in contract_worksheet), 
       }) 
      elif record.state == work_in_progress: 
       transp_transit = record.transporter.transp_transit 
       res &= transp_transit.write({ 
        'debit': sum(c.total_alles for c in contract_worksheet), 
       }) 
    return res 

위의 코드가 정확하지 않을 수 있지만 : 그래서, 당신의 경우에이 같은 일을 할 것입니다 One2many 필드의 값을 직접 가져 오려면 원하는 값을 얻기 위해 반복해야합니다. 난 필드 total_alles 계산 된 Float 가정하고, 각각의 contract_worksheet 레코드가 다른 값을 가지고, 그래서 당신은 debit 값을 쓸 유일한 플로트를 얻으려면 그들을 합계해야합니다.

+0

나는 이것이 정말로 좋은 출발이라고 생각합니다, 고맙습니다, 제가 다른 어떤 것을 발견했다고 생각 하긴하지만, 저는 그 문제에 대해 새로운 질문을 열 것입니다, 대단히 감사합니다. – NeoVe