Назначенное количество из строк перемещения в строке заказа на продажу - PullRequest
0 голосов
/ 06 сентября 2018

Я хочу показать в sale.order.line для каждого назначенного количества продукта. Это работает, когда у меня есть 1 строка заказа на продажу, но если у меня есть больше, это - то же самое кол-во для всего продукта. но мой код плохой, потому что есть больше чем 1 ход, так как я могу сделать это правильно?

reserved_qty = fields.Float(string='Reserved Qty', compute='_get_qtys') 


@api.depends('order_id.picking_id.move_lines.state')
    def _get_qtys(self):
        for line in self:
            domain = [('id', '=', line.order_id.picking_id.move_lines.id),
                      ('product_id', '=', line.product_id.id)
                      ]
            movez = self.env['stock.move'].search(domain)
            line.not_fulfiled_qty = line.product_uom_qty - line.qty_delivered
            if line.order_id.picking_id:
                for picking in line.order_id.picking_id:
                    for move in picking.move_lines:
                        if move.state == 'assigned':
                            line.reserved_qty = movez.product_uom_qty

UPDATE:

если найдено решение, оно работает нормально, но все же есть вопрос, может ли быть более 1 procurement_ids? будут ли ошибки синглтона в некоторых сценариях?

@api.depends('order_id.picking_id.move_lines.state')
    def _get_qtys(self):
        for line in self:
            line.not_fulfiled_qty = line.product_uom_qty - line.qty_delivered
            if line.order_id.picking_id:
                for move in line.procurement_ids.move_ids:
                    if move.state == 'assigned':
                        line.reserved_qty = move.product_uom_qty

1 Ответ

0 голосов
/ 06 сентября 2018

Даже если есть больше закупок, просто измените свой код для обработки таких ситуаций:

            for move in line.procurement_ids.mapped('move_ids'):
                if move.state == 'assigned':
...