def edit_leaves(current_user, leave_id):
    if request.content_type == 'application/json':
        data = request.get_json()
        try:
            int(leave_id)
        except:
            return response("failed", "leave id need to be integer", 404)

        leave = Leaves.query.filter_by(id=leave_id).first()

        if leave.leave_status is 0:
            if leave:
                leave.leaveType = data['leaveType']
                leave.description = data['description']
                leave.from_date = data['from_date']
                leave.to_date = data['to_date']
                leave.num_of_days = data['num_of_days']
                leave.leave_status = data['leave_status']
                leave.update()
                return response_for_created_leave(leave, 201)
            return response('failed', 'Missing leave attribute', 400)
        return response(
            'failed',
            'Unable to edit leave because already submitted. please contact admin',
            400)
    return response('failed', 'Content-type must be json', 202)
def delete_leave_type(current_user, leave_type_id):
    try:
        int(leave_type_id)
    except:
        return response('failed', 'Please provide a valid leave type Id', 400)

    leave_type = LeaveTypes.query.filter_by(id=leave_type_id).first()

    if not leave_type:
        abort(404)
    leave_type.delete()
    return response('success', 'LeaveType Deleted successfully', 200)
def get_leave_type(current_user, leave_type_id):
    """
    Return a user Leave_Type with the supplied user Id.
    :param current_user: User
    :param Leave_Type_id: Leave_Type Id
    :return:
    """
    try:
        int(leave_type_id)
    except ValueError:
        return response('failed', 'Please provide a valid Leave_Type Id', 400)
    else:
        leave_type = LeaveTypes.query.filter_by(id=leave_type_id).first()
        if leave_type:
            return response_for_user_leave_type(leave_type)
        return response('failed', "leave_type not found", 404)
def delete_leaves(current_user, leave_id):
    try:
        int(leave_id)
    except:
        return response("failed", "leave id need to be integer", 404)

    leave = Leaves.query.filter_by(id=leave_id).first()

    if leave.leave_status is 0:
        if leave:
            abort(404)
        leave.delete()
        return response('success', 'Leave Deleted successfully', 200)
    return response(
        'failed',
        'Unable to delete leave because already submitted. Please contact admin',
        400)
def create_leave_type(current_user):
    """
    Create a Leave_Type from the sent json data.
    :param current_user: Current User
    :return:
    """
    if request.content_type == 'application/json':
        data = request.get_json()
        leaveType_name = data.get('leaveType')
        description = data.get('description')
        num_of_days = data.get('num_of_days')
        validity = data.get('validity')
        carry_forward = data.get('carry_forward')
        employee_id = current_user.id
        if leaveType_name:
            leaveType = LeaveTypes(leaveType_name, description, num_of_days,
                                   validity, carry_forward, employee_id)
            leaveType.save()
            return response_for_created_leave_type(leaveType, 201)
        return response('failed', 'Missing leaveType name attribute', 400)
    return response('failed', 'Content-type must be json', 202)
def edit_leave_type(current_user, leave_type_id):
    if request.content_type == 'application/json':
        data = request.get_json()
        try:
            int(leave_type_id)
        except:
            return response('failed', 'Please provide a valid leave type Id',
                            400)

        leave_type = LeaveTypes.query.filter_by(id=leave_type_id).first()
        if leave_type:
            leave_type.leaveType = data.get('leaveType')
            leave_type.description = data.get('description')
            leave_type.num_of_days = data.get('num_of_days')
            leave_type.validity = data.get('validity')
            leave_type.carry_forward = data.get('carry_forward')
            leave_type.employee_id = current_user.id
            leave_type.update()
            return response_for_created_leave_type(leave_type, 201)
        return response(
            'failed',
            'The leaveType with Id ' + leave_type_id + ' does not exist', 404)
    return response('failed', 'Content-type must be json', 202)
def create_leave(current_user):
    """
    Create a Leave from the sent json data.
    :param current_user: Current User
    :return:
    """
    if request.content_type == 'application/json':
        data = request.get_json()
        leaveType = data.get('leaveType')
        description = data.get('description')
        from_date = data.get('from_date')
        to_date = data.get('to_date')
        num_of_days = data.get('num_of_days')
        employee_id = current_user.id
        leave_status = data.get('leave_status')

        if leaveType:
            leave = Leaves(leaveType, description, from_date, to_date,
                           num_of_days, employee_id, leave_status)
            leave.save()
            return response_for_created_leave(leave, 201)
        return response('failed', 'Missing leaveType attribute', 400)
    return response('failed', 'Content-type must be json', 202)