2017-11-28 1 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") 

isbn私はaccount.accountに新しいMany2oneフィールドを作成したこのモデルに、Many2oneproduct.productにモデルです。

あなたが見ることができるように、このクラスはその特定の状態に応じて、私は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ループの中で、あなたは「自己」を使用しています。私はそれが問題かもしれないと思う...それはまた、@ api.multiを使用する必要があるかもしれないと思う... – Lucas

+0

はい、それはフィールドを計算する方法です、それはフィールドを取る必要がありますOne2Manyである 'contract_worksheet'を作成し、ケースに応じて特定のジャーナルに借方または貸方でコピーします。私の質問を編集して行を追加するつもりです。 – NeoVe

+0

編集を完了しました、ありがとうございました – NeoVe

答えて

1

EDITは

これは私が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

関連する問題