gooderp18绿色标准版
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

89 lines
3.8KB

  1. # -*- coding: utf-8 -*-
  2. # Part of Odoo. See LICENSE file for full copyright and licensing details.
  3. from odoo import fields, models, api
  4. from odoo.exceptions import UserError
  5. class Goods(models.Model):
  6. """ Extension of ir.attachment only used in MRP to handle archivage
  7. and basic versioning.
  8. """
  9. _inherit = 'goods'
  10. quantity_per_month = fields.Float()
  11. demanded_quantity = fields.Float()
  12. quantity_month_mrp_plan = fields.Float()
  13. demanded_quantity_month_mrp_plan = fields.Float()
  14. weight = fields.Float('重量', digits='Weight')
  15. @api.model
  16. def _get_default_warehouse(self):
  17. """返回stock类型的第一个仓库做为默认值"""
  18. domain = [('type', '=', 'stock')]
  19. warehouses = self.env['warehouse'].search(domain, limit=1, order='id asc')
  20. if not warehouses:
  21. raise UserError('不存在类型为stock的仓库。')
  22. return warehouses[0]
  23. # TODO:为IQC和IPQC增加方法和控制
  24. buy_qc = fields.Boolean('IQC(来料检验)', default=0, help="勾选后,需采购走采购质检流程才能入库")
  25. mrp_qc = fields.Boolean('IPQC(过程检验)', default=0, help="勾选后,可以走工序质检流程")
  26. pre_days = fields.Integer('准备天数')
  27. out_warehouse_id = fields.Many2one('warehouse',
  28. '默认生产发料库', required=True,
  29. ondelete='restrict',
  30. help='生产领料默认从该仓库调出', default=_get_default_warehouse)
  31. in_warehouse_id = fields.Many2one('warehouse',
  32. '默认生产完工入库仓库', required=True,
  33. ondelete='restrict',
  34. help='默认的生产完工入库仓库', default=_get_default_warehouse)
  35. department_id = fields.Many2one('staff.department',
  36. '默认生产部门',
  37. index=True,
  38. ondelete='cascade')
  39. mrp_bom_ids = fields.One2many('mrp.bom', 'goods_id', '物料清单')
  40. mrp_bom_line_ids = fields.One2many('mrp.bom.line', 'goods_id', '物料清单明细')
  41. mrp_bom_count = fields.Integer('物料清单数量', compute='_compute_mrp_bom_count')
  42. mrp_bom_line_count = fields.Integer('物料清单明细数量', compute='_compute_mrp_bom_line_count')
  43. def action_mrp_bom(self, bom_ids):
  44. action = {
  45. 'name': '物料清单',
  46. 'type': 'ir.actions.act_window',
  47. 'view_mode': 'form',
  48. 'res_model': 'mrp.bom',
  49. 'view_id': False,
  50. 'target': 'current',
  51. }
  52. # 选择对应的view_mode
  53. if len(bom_ids) > 1:
  54. action['domain'] = "[('id','in',[" + \
  55. ','.join(map(str, bom_ids)) + "])]"
  56. action['view_mode'] = 'list,form'
  57. elif len(bom_ids) == 1:
  58. view_id = self.env.ref('good_mrp.mrp_bom_form_view').id
  59. action['views'] = [(view_id, 'form')]
  60. action['res_id'] = bom_ids and bom_ids[0] or False
  61. return action
  62. @api.depends('mrp_bom_line_ids')
  63. def _compute_mrp_bom_line_count(self):
  64. for goods in self:
  65. goods.sudo().mrp_bom_line_count = len(set(goods.mrp_bom_line_ids.mapped('bom_id').ids))
  66. @api.depends('mrp_bom_ids')
  67. def _compute_mrp_bom_count(self):
  68. for goods in self:
  69. goods.sudo().mrp_bom_count = len(goods.mrp_bom_ids.ids)
  70. def action_view_mrp_bom_line(self):
  71. self.ensure_one()
  72. bom_ids = list(set(self.mrp_bom_line_ids.mapped('bom_id').ids))
  73. return self.action_mrp_bom(bom_ids)
  74. def action_view_mrp_bom(self):
  75. return self.action_mrp_bom(self.mrp_bom_ids.ids)
上海开阖软件有限公司 沪ICP备12045867号-1