gooderp18绿色标准版
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

88 líneas
3.7KB

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