|  | # Copyright 2016 上海开阖软件有限公司 (http://www.osbzr.com)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import api, fields, models
from odoo.exceptions import UserError
import time
import datetime
# 请假单确认状态可选值
LEAVE_STATES = [
    ('draft', '未确认'),
    ('done', '已确认'), ]
class StaffLeave(models.Model):
    _name = 'staff.leave'
    _description = '请假单'
    _inherit = ['mail.thread']
    @api.model
    def _set_staff_id(self):
        return self.env.uid
    name = fields.Text(string='请假缘由')
    user_id = fields.Many2one('res.users',
                              string='请假人',
                              default=_set_staff_id,
                              )
    date_start = fields.Datetime(string='离开时间')
    date_stop = fields.Datetime(string='回来时间')
    leave_type = fields.Selection([('no_pay', '无薪'), ('with_pay', '带薪'),
                                   ('compensation_day', '补偿日数'), ('sick_leave', '病假')],
                                  required=True, string='准假类型')
    leave_dates = fields.Float('请假天数')
    state = fields.Selection(LEAVE_STATES, '状态', readonly=True,
                             help="请假单的状态", index=True, copy=False,
                             tracking=True,
                             default='draft')
    company_id = fields.Many2one(
        'res.company',
        string='公司',
        change_default=True,
        default=lambda self: self.env.company)
    def leave_done(self):
        '''确认请假单'''
        for l in self:
            if l.state == 'done':
                raise UserError('请不要重复确认!')
            l.state = 'done'
    def leave_draft(self):
        '''撤销确认请假单'''
        for l in self:
            if l.state == 'draft':
                raise UserError('请不要重复撤销 %s' % self._description)
            l.state = 'draft'
    @api.constrains('leave_dates')
    def check_leave_dates(self):
        for l in self:
            if l.leave_dates <= 0:
                raise UserError('请假天数不能小于或等于零')
 |