Exemple #1
0
def execute_balance_calculation_rule(ws_id, user_id):

    leaves = DayOff.query(). \
        filter(DayOff.user_id == user_id). \
        filter(DayOff.workspace_id == ws_id). \
        all()

    ws_user = WorkspaceUser.find(user_id=user_id, ws_id=ws_id)

    rule_payload = BalanceCalculationRulePayload(start_date=ws_user.start_date)

    node = _get_rule_node(ws_id=ws_id,
                          type=WorkspaceRuleTypes.BALANCE_CALCULATION)

    intellect = Intellect()
    intellect.policy.append_child(node)

    for leave_day in _leaves_to_leave_days(leaves):
        intellect.learn_fact(leave_day)

    intellect.learn_fact(rule_payload)

    intellect.reason()

    return rule_payload
Exemple #2
0
def execute_day_off_validation_rule(day_off):

    balance = execute_balance_calculation_rule(ws_id=day_off.workspace_id,
                                               user_id=day_off.user_id)

    ws_user = WorkspaceUser.find(user_id=day_off.user_id,
                                 ws_id=day_off.workspace_id)

    if not ws_user:
        raise Exception('User is not added to the specified workspace')

    ws_roles = WorkspaceUserRole.find_all(ws_id=day_off.workspace_id,
                                          user_id=day_off.user_id)

    rule_payload = DayOffValidationPayload(user_start_date=ws_user.start_date,
                                           leave=day_off,
                                           balance=balance,
                                           user_roles=list(
                                               map(lambda r: r.role,
                                                   ws_roles)))

    intellect = Intellect()
    intellect.policy.append_child(
        _get_rule_node(ws_id=day_off.workspace_id,
                       type=WorkspaceRuleTypes.DAY_OFF_VALIDATION))

    for leave_day in _leaves_to_leave_days([day_off]):
        intellect.learn_fact(leave_day)

    intellect.learn_fact(rule_payload)

    intellect.reason()

    return rule_payload
Exemple #3
0
    def mutate(self, _, email, ws_id, start_date=None):
        check_role_or_error(ws_id=ws_id, role=WorkspaceUserRoles.ADMIN)

        start_date = start_date if start_date else datetime.datetime.utcnow()

        try:
            user = _UserModel.find(email=email)
            if user is None:
                if WorkspaceInvitation.find(email=email, ws_id=ws_id) is None:
                    WorkspaceInvitation(
                        email=email,
                        ws_id=ws_id,
                        start_date=start_date,
                        status=WorkspaceInvitationStatus.PENDING).save()
            elif WorkspaceUser.find(user_id=user.id, ws_id=ws_id) is None:
                WorkspaceInvitation(
                    email=email,
                    ws_id=ws_id,
                    start_date=start_date,
                    status=WorkspaceInvitationStatus.ACCEPTED).save()

                WorkspaceUser(user_id=user.id,
                              ws_id=ws_id,
                              start_date=start_date).save()

            Persistent.commit()

            return AddMember(ok=True)
        except Exception as e:
            LOG.error(f'Could not add member into workspace. Error: {e}')
            Persistent.rollback()
            return GraphQLError('Could not add member into workspace.')
Exemple #4
0
def current_user_in_workspace_or_error(ws_id, message="Wrong association"):
    user = current_user_or_error()
    find_kwargs = {"user_id": user.id, "ws_id": ws_id}

    assoc = WorkspaceUser.find(**find_kwargs)
    if not assoc:
        raise GraphQLError(message)

    return user
Exemple #5
0
    def mutate(self, _, ws_id, user_id, start_date):

        check_role_or_error(ws_id=ws_id, role=WorkspaceUserRoles.ADMIN)

        ws_user = WorkspaceUser.find(ws_id=ws_id, user_id=user_id)

        if not ws_user:
            raise GraphQLError("Could not find user in the workspace")

        ws_user.start_date = start_date

        try:
            ws_user.save_and_persist()
            return UpdateMember(ok=True, member=ws_user)
        except Exception as e:
            LOG.error(f'Could not update the workspace member. Error: {e}')
            return GraphQLError('Could not update the workspace member.')
Exemple #6
0
    def mutate(self, _, email, ws_id):
        check_role_or_error(ws_id=ws_id, role=WorkspaceUserRoles.ADMIN)

        try:
            invitation = WorkspaceInvitation.find(ws_id=ws_id, email=email)
            if invitation:
                invitation.delete()

            ws_user = None

            user = _UserModel.find(email=email)
            if user:
                ws_user = WorkspaceUser.find(ws_id=ws_id, user_id=user.id)

            if ws_user:
                ws_user.delete()

            Persistent.commit()
            return RemoveMember(ok=True)
        except Exception as e:
            LOG.error(f'Could not remove member from workspace.. Error: {e}')
            Persistent.rollback()
            return GraphQLError('Could not remove member from workspace.')
Exemple #7
0
def workspace_member(_, info, workspace_id, user_id):
    return WorkspaceUser.find(ws_id=workspace_id, user_id=user_id)