|  | # -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import fields, models, api
from odoo.exceptions import UserError
class Goods(models.Model):
    """ Extension of ir.attachment only used in MRP to handle archivage
    and basic versioning.
    """
    _inherit = 'goods'
    quantity_per_month = fields.Float()
    demanded_quantity = fields.Float()
    quantity_month_mrp_plan = fields.Float()
    weight = fields.Float('重量', digits='Weight')
    @api.model
    def _get_default_warehouse(self):
        """返回stock类型的第一个仓库做为默认值"""
        domain = [('type', '=', 'stock')]
        warehouses = self.env['warehouse'].search(domain, limit=1, order='id asc')
        if not warehouses:
            raise UserError('不存在类型为stock的仓库。')
        return warehouses[0]
    # TODO:为IQC和IPQC增加方法和控制
    buy_qc = fields.Boolean('IQC(来料检验)', default=0, help="勾选后,需采购走采购质检流程才能入库")
    mrp_qc = fields.Boolean('IPQC(过程检验)', default=0, help="勾选后,可以走工序质检流程")
    pre_days = fields.Integer('准备天数')
    out_warehouse_id = fields.Many2one('warehouse',
                                       '默认生产发料库', required=True,
                                       ondelete='restrict',
                                       help='生产领料默认从该仓库调出', default=_get_default_warehouse)
    in_warehouse_id = fields.Many2one('warehouse',
                                      '默认生产完工入库仓库', required=True,
                                      ondelete='restrict',
                                      help='默认的生产完工入库仓库', default=_get_default_warehouse)
    department_id = fields.Many2one('staff.department',
                                    '默认生产部门',
                                    index=True,
                                    ondelete='cascade')
    mrp_bom_ids = fields.One2many('mrp.bom', 'goods_id', '物料清单')
    mrp_bom_line_ids = fields.One2many('mrp.bom.line', 'goods_id', '物料清单明细')
    mrp_bom_count = fields.Integer('物料清单数量', compute='_compute_mrp_bom_count')
    mrp_bom_line_count = fields.Integer('物料清单明细数量', compute='_compute_mrp_bom_line_count')
    def action_mrp_bom(self, bom_ids):
        action = {
            'name': '物料清单',
            'type': 'ir.actions.act_window',
            'view_mode': 'form',
            'res_model': 'mrp.bom',
            'view_id': False,
            'target': 'current',
        }
        # 选择对应的view_mode
        if len(bom_ids) > 1:
            action['domain'] = "[('id','in',[" + \
                               ','.join(map(str, bom_ids)) + "])]"
            action['view_mode'] = 'list,form'
        elif len(bom_ids) == 1:
            view_id = self.env.ref('good_mrp.mrp_bom_form_view').id
            action['views'] = [(view_id, 'form')]
            action['res_id'] = bom_ids and bom_ids[0] or False
        return action
    @api.depends('mrp_bom_line_ids')
    def _compute_mrp_bom_line_count(self):
        for goods in self:
            goods.sudo().mrp_bom_line_count = len(set(goods.mrp_bom_line_ids.mapped('bom_id').ids))
    @api.depends('mrp_bom_ids')
    def _compute_mrp_bom_count(self):
        for goods in self:
            goods.sudo().mrp_bom_count = len(goods.mrp_bom_ids.ids)
    def action_view_mrp_bom_line(self):
        self.ensure_one()
        bom_ids = list(set(self.mrp_bom_line_ids.mapped('bom_id').ids))
        return self.action_mrp_bom(bom_ids)
    def action_view_mrp_bom(self):
        return self.action_mrp_bom(self.mrp_bom_ids.ids)
 |