GoodERP
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

62 Zeilen
2.1KB

  1. # Copyright 2016 上海开阖软件有限公司 (http://www.osbzr.com)
  2. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
  3. from odoo import api, fields, models
  4. from odoo.exceptions import UserError
  5. import datetime
  6. # 请假单确认状态可选值
  7. LEAVE_STATES = [
  8. ('draft', '未确认'),
  9. ('done', '已确认'), ]
  10. class StaffLeave(models.Model):
  11. _name = 'staff.leave'
  12. _description = '请假单'
  13. _inherit = ['mail.thread']
  14. @api.model
  15. def _set_staff_id(self):
  16. return self.env.uid
  17. name = fields.Text(string='请假缘由')
  18. user_id = fields.Many2one('res.users',
  19. string='请假人',
  20. default=_set_staff_id,
  21. )
  22. date_start = fields.Datetime(string='离开时间')
  23. date_stop = fields.Datetime(string='回来时间')
  24. leave_type = fields.Selection([('no_pay', '无薪'), ('with_pay', '带薪'),
  25. ('compensation_day', '补偿日数'), ('sick_leave', '病假')],
  26. required=True, string='准假类型')
  27. leave_dates = fields.Float('请假天数')
  28. state = fields.Selection(LEAVE_STATES, '状态', readonly=True,
  29. help="请假单的状态", index=True, copy=False,
  30. tracking=True,
  31. default='draft')
  32. company_id = fields.Many2one(
  33. 'res.company',
  34. string='公司',
  35. change_default=True,
  36. default=lambda self: self.env.company)
  37. def leave_done(self):
  38. '''确认请假单'''
  39. for l in self:
  40. if l.state == 'done':
  41. raise UserError('请不要重复确认!')
  42. l.state = 'done'
  43. def leave_draft(self):
  44. '''撤销确认请假单'''
  45. for l in self:
  46. if l.state == 'draft':
  47. raise UserError('请不要重复撤销 %s' % self._description)
  48. l.state = 'draft'
  49. @api.constrains('leave_dates')
  50. def check_leave_dates(self):
  51. for l in self:
  52. if l.leave_dates <= 0:
  53. raise UserError('请假天数不能小于或等于零')
上海开阖软件有限公司 沪ICP备12045867号-1