|
- # -*- 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)
|