<commit_before>﻿from django.db import models

from commons.models import BaseStampedModel
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.utils import timezone

from django.db import transaction
import reversion

from ich_bau.profiles.notification_helper import Send_Notification
from ich_bau.profiles.models import Profile

import markdown

from project.repo_wrapper import *

# access level
PROJECT_ACCESS_NONE  = 0 # нет доступа
PROJECT_ACCESS_VIEW  = 1 # просмотр
PROJECT_ACCESS_WORK  = 2 # может что-то делать: создавать и редактировать задачи, комментировать, закрывать и открывать задачи
PROJECT_ACCESS_ADMIN = 3 # админить проект - создавать и редактировать вехи, добавлять-удалять участников
# правила следующие
# для открытых проектов:
# - любой аноним может смотреть
# - любой авторизованный юзер может смотреть и работать.
# - Админить может только их админ. Тогда в чем смысл участника? Что на него можно назначать задачи!
# для закрытых проектов:
# - аноним и авторизованный не участник их не видит
# - авторизованный участник может работать
# - админ может админить

@reversion.register()
class Project(BaseStampedModel):
    # shortname = models.CharField(max_length=255)
    fullname = models.CharField(max_length=255, verbose_name = 'Full name!')
    active_flag=models.BooleanField(blank=True, default=True)
    private_flag=models.BooleanField(blank=True, default=False, verbose_name = 'Private project')
    description = models.TextField(blank=True, null=True)
    repo_name = models.CharField( max_length=255, blank=True, null = True )

    class Meta:
        ordering = ['fullname']

    # полный список членов проекта, независимо от статуса подтверждения. Возвращает объекты Member
    def GetMemberList( self ):
        return Member.objects.filter( project = self )

    # список полных (полностью подтвержденных) членов проекта. Возвращает объекты Member
    def GetFullMemberList( self ):
        q = Member.objects.filter( project = self, team_accept__isnull = False, member_accept__isnull = False )
        return q

    # список профилей полных (полностью подтвержденных) членов проекта. Возвращает объекты Profile
    def GetFullMemberProfiles( self ):
        q = Profile.objects.filter( member_profile__project = self, member_profile__team_accept__isnull = False, member_profile__member_accept__isnull = False )
        return q<commit_msg>#29 GetFullMemberUsers query is ready<commit_after>﻿from django.db import models

from commons.models import BaseStampedModel
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.utils import timezone

from django.db import transaction
import reversion

from ich_bau.profiles.notification_helper import Send_Notification
from ich_bau.profiles.models import Profile

import markdown

from project.repo_wrapper import *

# access level
PROJECT_ACCESS_NONE  = 0 # нет доступа
PROJECT_ACCESS_VIEW  = 1 # просмотр
PROJECT_ACCESS_WORK  = 2 # может что-то делать: создавать и редактировать задачи, комментировать, закрывать и открывать задачи
PROJECT_ACCESS_ADMIN = 3 # админить проект - создавать и редактировать вехи, добавлять-удалять участников
# правила следующие
# для открытых проектов:
# - любой аноним может смотреть
# - любой авторизованный юзер может смотреть и работать.
# - Админить может только их админ. Тогда в чем смысл участника? Что на него можно назначать задачи!
# для закрытых проектов:
# - аноним и авторизованный не участник их не видит
# - авторизованный участник может работать
# - админ может админить

@reversion.register()
class Project(BaseStampedModel):
    # shortname = models.CharField(max_length=255)
    fullname = models.CharField(max_length=255, verbose_name = 'Full name!')
    active_flag=models.BooleanField(blank=True, default=True)
    private_flag=models.BooleanField(blank=True, default=False, verbose_name = 'Private project')
    description = models.TextField(blank=True, null=True)
    repo_name = models.CharField( max_length=255, blank=True, null = True )

    class Meta:
        ordering = ['fullname']

    # полный список членов проекта, независимо от статуса подтверждения. Возвращает объекты Member
    def GetMemberList( self ):
        return Member.objects.filter( project = self )

    # список полных (полностью подтвержденных) членов проекта. Возвращает объекты Member
    def GetFullMemberList( self ):
        q = Member.objects.filter( project = self, team_accept__isnull = False, member_accept__isnull = False )
        return q

    # список профилей полных (полностью подтвержденных) членов проекта. Возвращает объекты Profile
    def GetFullMemberProfiles( self ):
        q = Profile.objects.filter( member_profile__project = self, member_profile__team_accept__isnull = False, member_profile__member_accept__isnull = False )
        return q

    # список юзеров полных (полностью подтвержденных) членов проекта. Возвращает объекты User
    def GetFullMemberUsers( self ):
        q = User.objects.filter( profile__in=self.GetFullMemberProfiles() )
        return q
{'fraction_non_alphanumeric': 0.06732253086419752, 'fraction_numerical': 0.005401234567901234, 'mean_word_length': 4.672866520787746, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3553148', 'n_tokens_mistral': 1700, 'n_tokens_neox': 1832, 'n_words': 459}