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
フィールドを作成したこのモデルに、Many2one
product.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")
あなたの質問は少し混乱しています。 accounting_scenariosはフィールドを計算するメソッドですか? isbnの定義方法を教えてください。 わかりませんが、forループの中で、あなたは「自己」を使用しています。私はそれが問題かもしれないと思う...それはまた、@ api.multiを使用する必要があるかもしれないと思う... – Lucas
はい、それはフィールドを計算する方法です、それはフィールドを取る必要がありますOne2Manyである 'contract_worksheet'を作成し、ケースに応じて特定のジャーナルに借方または貸方でコピーします。私の質問を編集して行を追加するつもりです。 – NeoVe
編集を完了しました、ありがとうございました – NeoVe