Пример #1
0
class User(AbstractBaseUser, PermissionsMixin):
    email = EmailField(max_length=254, unique=True)
    is_staff = BooleanField(default=False)
    is_superuser = BooleanField(default=False)
    is_active = BooleanField(default=True)
    last_login = DateTimeField(null=True, blank=True)
    date_joined = DateTimeField(auto_now_add=True)

    USERNAME_FIELD = 'email'
    EMAIL_FIELD = 'email'
    REQUIRED_FIELDS = []

    objects = UserManager()

    def get_absolute_url(self):
        return "/users/%i/" % (self.pk)

    def get_email(self):
        return self.email

    class Meta:
        db_table = 'auth_user'
Пример #2
0
class Person(AbstractUser):
    objects: UserManager = UserManager()
    name: TextField = TextField(null=False)
    familyName: TextField = TextField(null=False)
    cin: CharField = CharField(max_length=255, null=False, unique=True)
    email: EmailField = EmailField(null=False, unique=True)
    telephone: CharField = CharField(max_length=255, null=False, unique=True)
    password: TextField = TextField(null=False)
    typeUser: TextField = TextField(null=False,
                                    choices=[('teacher', 'Teacher'),
                                             ('instructor', 'Inscructor')],
                                    db_column='type_user')
    accountId: TextField = TextField(unique=True,
                                     null=True,
                                     db_column='account_id')
    localisation = ForeignKey(Localisation,
                              on_delete=PROTECT,
                              db_column='localisation',
                              null=True)

    class Meta:
        db_table = 'persons'
Пример #3
0
class User(AbstractBaseUser, PermissionsMixin):
    email = EmailField(_('email address'), unique=True, blank=True)
    is_staff = BooleanField(
        _('staff status'),
        default=False,
        help_text=_(
            'Designates whether the user can log into this admin site.'),
    )
    is_active = BooleanField(
        _('active'),
        default=True,
        help_text=_(
            'Designates whether this user should be treated as active. '
            'Unselect this instead of deleting accounts.'
        ),
    )
    date_joined = DateTimeField(_('date joined'), default=timezone.now)

    objects = UserManager()

    EMAIL_FIELD = 'email'
    USERNAME_FIELD = 'email'

    def clean(self):
        super().clean()
        self.email = self.__class__.objects.normalize_email(self.email)

    def get_full_name(self):
        return self.email

    def get_short_name(self):
        return self.email

    def email_user(self, subject, message, from_email=None, **kwargs):
        send_mail(subject, message, from_email, [self.email], **kwargs)

    def __str__(self):
        return self.email
Пример #4
0
class Author(Model):
    """
    Model corresponding "author" entity

    Attributes
    ----------
    name : string
        Full name of the author

    username : string
        Username of the author. Must be unique

    email : string
        Email of the author, not necessarily unique

    date : datetime
        Automatically adds the current datetime
    """

    name = CharField(max_length=50)
    username = CharField(max_length=50, unique=True)
    email = EmailField(max_length=50)
    date = DateTimeField(auto_now_add=True)
Пример #5
0
class ReferenceRequest(models.Model):

    # Fields
    name = CharField(max_length=255)
    slug = AutoSlugField(populate_from='name', blank=True)
    created = DateTimeField(auto_now_add=True, editable=False)
    last_updated = DateTimeField(auto_now=True, editable=False)
    email = EmailField(max_length=255)

    # Relationship Fields
    references = ManyToManyField('resume.Reference', )

    class Meta:
        ordering = ('-created', )

    def __unicode__(self):
        return u'%s' % self.slug

    def get_absolute_url(self):
        return reverse('resume_referencerequest_detail', args=(self.slug, ))

    def get_update_url(self):
        return reverse('resume_referencerequest_update', args=(self.slug, ))
Пример #6
0
class User(Model):
    first_name = CharField(verbose_name="Ism",
                           max_length=64,
                           help_text="64 ta belgidan oshmasligi kerak")
    last_name = CharField(verbose_name="Familiya",
                          max_length=64,
                          help_text="64 ta belgidan oshmasligi kerak")
    email = EmailField()
    categories = ManyToManyField('Category',
                                 related_name="followers",
                                 verbose_name="Yoqtirgan bo'limlari",
                                 blank=True)

    @property
    def full_name(self):
        return f"{self.first_name} {self.last_name}"

    def __str__(self):
        return f"{self.first_name} {self.last_name}"

    class Meta:
        verbose_name = "Foydalanuvchi"
        verbose_name_plural = "Foydalanuvchilar"
Пример #7
0
class DCFAbstractUser(AbstractBaseUser, __implements__, IDCFModel[T]):
    class Meta:
        abstract = True

    _meta: Options[T]  # type: ignore
    model_permissions = ManyToManyField(DCFPermission)
    groups = ManyToManyField(UserGroup)

    username = CharField(_("username"), max_length=64, blank=False, unique=True)
    email = EmailField(_("email address"), blank=True)

    EMAIL_FIELD = "email"
    USERNAME_FIELD = "username"

    @classmethod
    def get_anonymous(cls) -> T:
        raise NotImplementedError()

    def __repr__(self) -> str:
        return f"<{self.__class__.__name__}: {self.pk}>"

    def __str__(self) -> str:
        return f"<{self.__class__.__name__}: {self.pk}>"
Пример #8
0
class Podcast(Model):
    id = UUIDField(primary_key=True, default=uuid.uuid4)
    slug = SlugField(unique=True)

    title = CharField(max_length=255)
    description = TextField()

    author = CharField(max_length=255)

    owner_name = CharField(max_length=255)
    owner_email = EmailField(max_length=255)

    image = ForeignKey(Image, on_delete=SET_NULL, null=True)

    category = CharField(
        max_length=255,
        choices=CATEGORY_CHOICES,
        default=CATEGORY_CHOICES[0][0])

    explicit = CharField(
        max_length=5, 
        choices=EXPLICIT_CHOICES, 
        default=EXPLICIT_CHOICES[0][0])
Пример #9
0
class Company(Model):
    name = CharField(max_length=60)
    logo = ImageBinaryField(default=None, null=True, blank=True, editable=True)
    email = EmailField(null=True, blank=True)
    website = CharField(
        max_length=100,
        null=True,
        blank=True,
    )
    telephone = CharField(null=True, blank=True, max_length=127)
    registered_address = CharField(
        max_length=1000,
        null=True,
        blank=True,
        editable=True,
    )
    employee_expectations = CharField(
        max_length=1000,
        null=True,
        blank=True,
        help_text=
        "Optional\nInclude the company\'s vision, it's expectations from employees at large and relevant info here",
        editable=True,
    )
    sector = CharField(max_length=25,
                       help_text="e.g., Public, Government, NGO, Startup")
    industry = CharField(
        max_length=255,
        help_text="Which industry(ies) does the organisation fall in?")
    remarks = CharField(
        max_length=255,
        null=True,
        blank=True,
    )

    def get_absolute_url(self):
        return reverse("recruiters:company_detail", kwargs={"pk": self.pk})
Пример #10
0
class Dados(Model):
    cd_ua = PositiveIntegerField(blank=True, null=True)
    sigla_ua = CharField(max_length=100, blank=True, null=True)
    nome_ua = CharField(max_length=255, blank=True, null=True)
    titular = CharField(max_length=255, blank=True, null=True)
    cargo = CharField(max_length=255, blank=True, null=True)
    cd_ua_pai = PositiveIntegerField(blank=True, null=True)
    cd_ua_basica = PositiveIntegerField(blank=True, null=True)
    nome_ua_basica = CharField(max_length=255, blank=True, null=True)
    sigla_ua_basica = CharField(max_length=255, blank=True, null=True)
    nat_juridica = PositiveIntegerField(blank=True, null=True)
    ordem_ua_basica = PositiveIntegerField(blank=True, null=True)
    ordem_absoluta = PositiveIntegerField(blank=True, null=True)
    ordem_relativa = PositiveIntegerField(blank=True, null=True)
    tipo_logradouro = CharField(max_length=255, blank=True, null=True)
    nome_logradouro = CharField(max_length=500, blank=True, null=True)
    trechamento_cep = CharField(db_column='trechamento_CEP',
                                max_length=500,
                                blank=True,
                                null=True)
    nome_logradouro_abreviado = CharField(max_length=500,
                                          blank=True,
                                          null=True)
    nro = PositiveIntegerField(blank=True, null=True)
    complemento = CharField(max_length=255, blank=True, null=True)
    bairro = CharField(max_length=255, blank=True, null=True)
    bairro_abreviado = CharField(max_length=255, blank=True, null=True)
    localidade = CharField(max_length=255, blank=True, null=True)
    cep = CharField(max_length=255, db_column='CEP', blank=True, null=True)
    telefones = CharField(max_length=1000, blank=True, null=True)
    emails = EmailField(max_length=1000, blank=True, null=True)
    horario_funcionamento = CharField(max_length=255, blank=True, null=True)
    msg = TextField(max_length=255, blank=True, null=True)
    data_criacao_registro = DateTimeField(blank=True, null=True)

    class Meta:
        db_table = 'Dados'
Пример #11
0
class ImportRecord(Model):
    ROLES = {r[1]: r[0] for r in USER_ROLES}

    row = IntegerField(null=False)
    action_username = CharField(max_length=32, null=False)
    task_id = CharField(max_length=40, null=True)
    username = CharField(max_length=32, null=False)
    role = IntegerField(choices=USER_ROLES, default=USER_ROLES[-1][0])
    first_name = CharField(max_length=30, null=True)
    last_name = CharField(max_length=30, null=True)
    bill_group_name = CharField(max_length=20, null=False)
    email = EmailField(null=True)
    status = CharField(max_length=24, null=True)
    error_message = CharField(max_length=50, null=True)

    create_time = DateTimeField(auto_now_add=True)
    update_time = DateTimeField(auto_now=True)

    class Meta:
        unique_together = (
            ("action_username", "row"),
            ("action_username", "username")
        )

    @classmethod
    def get_role_value(cls, role):
        return cls.ROLES[role]

    def as_dict(self, **karg):
        data = model_to_dict(
            self,
            fields=karg.get('fields', []),
            exclude=karg.get('exclude', [])
        )
        data.update(role=self.get_role_display())

        return data
Пример #12
0
class UserProfile(AbstractBaseUser, PermissionsMixin):
    """Clase que representa a los Usuarios en el sistema"""
    class Types(TextChoices):
        CLIENT = "CLIENT", "Client"
        MANAGER = "MANAGER", "Manager"
        COURIER = "COURIER", "Courier"

    email = EmailField(max_length=45, unique=True)
    type = CharField(max_length=7,
                     choices=Types.choices,
                     null=True,
                     blank=True,
                     help_text='tipo de usuario')
    is_active = BooleanField(default=True, help_text='usuario activo')
    is_staff = BooleanField(default=False,
                            help_text='personal de administrador de Django')

    objects = UserProfileManager()

    USERNAME_FIELD = 'email'

    # Relaciones
    enterprise = ForeignKey('enterprises.Enterprise',
                            related_name='couriers',
                            on_delete=CASCADE,
                            null=True,
                            blank=True,
                            help_text='establecimiento')

    def __str__(self) -> str:
        """
        Función que representa al objeto
        cuando es recuperado
        """

        return self.email
Пример #13
0
class Target(Model):
    """
        People who'll be targeted

        :param email(EmailField): Target's email
        :param group(ForeignKey): Link to :func:`target group class
                                    <phishing.models.target.TargetGroup>`
        :param first_name(CharField): (Optional) First name of the target
        :param last_name(CharField): (Optional) Last name of the target
    """
    email = EmailField()
    group = ForeignKey('TargetGroup', on_delete=CASCADE,
                       related_name='targets')

    # optional infos
    first_name = CharField(max_length=128, blank=True)
    last_name = CharField(max_length=128, blank=True)

    def __str__(self):
        """
            Print function for Target
            :return text: Print the email of the target
        """
        return self.email
Пример #14
0
class Podcast(Model):
    id = UUIDField(primary_key=True, default=uuid.uuid4)
    slug = SlugField(unique=True)

    title = CharField(max_length=255)
    description = TextField()

    author = CharField(max_length=255)

    owner_name = CharField(max_length=255)
    owner_email = EmailField(max_length=255)

    image = ForeignKey(Image, null=True)

    CATEGORY_CHOICES = (
        ('Arts', 'Arts'),
        ('Business', 'Business'),
        ('Comedy', 'Comedy'),
        ('Education', 'Education'),
        ('Games &amp; Hobbies', 'Games & Hobbies'),
        ('Government &amp; Organizations', 'Government & Organizations'),
        ('Health', 'Health'),
        ('Kids &amp; Family', 'Kids & Family'),
        ('Music', 'Music'),
        ('News &amp; Politics', 'News & Politics'),
        ('Religion &amp; Spirituality', 'Religion & Spirituality'),
        ('Science &amp; Medicine', 'Science & Medicine'),
        ('Society &amp; Culture', 'Society & Culture'),
        ('Sports &amp; Recreation', 'Sports & Recreation'),
        ('Technology', 'Technology'),
        ('TV &amp; Film', 'TV & Film'),
    )

    category = CharField(max_length=255,
                         choices=CATEGORY_CHOICES,
                         default='News &amp; Politics')
Пример #15
0
class Candidato(Model):

    SEXO = (
        (1, 'Feminino'),
        (2, 'Masculino'),
    )

    ACRE = 'AC'
    ALAGOAS = 'AL'
    AMAPA = 'AP'
    AMAZONAS = 'AM'
    BAHIA = 'BA'
    CEARÁ = 'CE'
    DISTRITOFEDERAL = 'DF'
    ESPIRITOSANTO = 'ES'
    GOIAS = 'GO'
    MARANHAO = 'MA'
    MATOGROSSO = 'MT'
    MATOGROSSOSUL = 'MS'
    MINASGERAIS = 'MG'
    PARA = 'PA'
    PARAIBA = 'PB'
    PARANA = 'PR'
    PERNAMBUCO = 'PE'
    PIAUI = 'PI'
    RIODEJANEIRO = 'RJ'
    RIOGRANDEDONORTE = 'RN'
    RIOGRANDEDOSUL = 'RS'
    RONDONIA = 'RO'
    RORAIMA = 'RR'
    SANTACATARINA = 'SC'
    SAOPAULO = 'SP'
    SERGIPE = 'SE'
    TOCANTINS = 'TO'

    ESTADO = (
        (ACRE, 'Acre'),
        (ALAGOAS, 'Alagoas'),
        (AMAPA, 'Amapá'),
        (AMAZONAS, 'Amazonas'),
        (BAHIA, 'Bahia'),
        (CEARÁ, 'Ceará'),
        (DISTRITOFEDERAL, 'Distrito Federal'),
        (ESPIRITOSANTO, 'Espirito Santo'),
        (GOIAS, 'Goiás'),
        (MARANHAO, 'Maranhão'),
        (MATOGROSSO, 'Mato Grosso'),
        (MATOGROSSOSUL, 'Mato Grosso do Sul'),
        (MINASGERAIS, 'Minas Gerais'),
        (PARA, 'Pará'),
        (PARAIBA, 'Paraíba'),
        (PARANA, 'Paraná'),
        (PERNAMBUCO, 'Pernambuco'),
        (PIAUI, 'Piauí'),
        (RIODEJANEIRO, 'Rio de Janeiro'),
        (RIOGRANDEDONORTE, 'Rio Grande do Norte'),
        (RIOGRANDEDOSUL, 'Rio Grande do Sul'),
        (RONDONIA, 'Rondônia'),
        (RORAIMA, 'Roraima'),
        (SANTACATARINA, 'Santa Catarina'),
        (SAOPAULO, 'São Paulo'),
        (SERGIPE, 'Sergipe'),
        (TOCANTINS, 'Tocantins'),
    )

    cpf = CharField('CPF', max_length=150, unique=True)
    nome_civil = CharField('Nome Civil', max_length=150)
    nome_social = CharField('Nome Social', max_length=150)
    nome_apresentacao = CharField('Nome de Apresentação', max_length=150)
    nome_usual = CharField('Nome Usual', max_length=150)
    data_nascimento = DateField('Data de Nascimento')
    nome_mae = CharField('Nome da Mãe', max_length=150)
    nome_pai = CharField('Nome do Pai', max_length=150)
    sexo = PositiveIntegerField('Sexo', choices=SEXO)
    rg = CharField('RG', max_length=50)
    data_emissao = DateField('Data de emissão')
    estado_emissao = CharField('Estado Emissão',
                               max_length=2,
                               choices=ESTADO,
                               default=RIOGRANDEDONORTE)
    orgao_rg = CharField('Órgão do RG', max_length=100)
    telefone = CharField('Telefone', max_length=150)
    email = EmailField('E-mail', unique=True)
    pais_nascimento = CharField('País de Nascimento', max_length=100)
    estado_nascimento = CharField('Estado de Nascimento',
                                  max_length=2,
                                  choices=ESTADO,
                                  default=RIOGRANDEDONORTE)
    cidade_nascimento = CharField('Município de Nascimento', max_length=150)
    cep = CharField('CEP', max_length=50)
    endereco = CharField('Endereço', max_length=200)
    complemento = CharField('Complento', max_length=100, null=True)
    uf = CharField('UF', max_length=100)
    cidade = CharField('Cidade', max_length=100)

    class Meta:
        verbose_name = "Inscrição"
        verbose_name_plural = "Inscrições"

    def __str__(self):
        return self.cpf
Пример #16
0
class About(Model):
    text_about = TextField(null=True)
    text_alamat = CharField(max_length=100, null=True)
    text_no_hp = CharField(max_length=40, null=True)
    text_email = EmailField(max_length=50, null=True)
Пример #17
0
class PCCandidato(Model):
    nome = CharField(max_length=100)
    email = EmailField()

    def __str__(self):
        return f'{self.nome} - {self.email}'
Пример #18
0
class User(AbstractBaseUser, BaseModel, LocationModel):
    email = EmailField(max_length=255, unique=True)
    is_active = BooleanField(default=True)
    is_staff = BooleanField(default=False)
    display_name = CharField(max_length=settings.NAME_MAX_LENGTH)
    description = TextField(blank=True)

    activation_key = CharField(max_length=40, blank=True)
    key_expires_at = DateTimeField(null=True)
    mail_verified = BooleanField(default=False)

    objects = UserManager()

    USERNAME_FIELD = 'email'

    def get_full_name(self):
        return self.display_name

    def get_short_name(self):
        return self.display_name

    def verify_mail(self):
        self.mail_verified = True
        self.activation_key = ''
        self.key_expires_at = None
        self.save()

    def _unverify_mail(self):
        key = crypto.get_random_string(length=40)
        self.mail_verified = False
        self.activation_key = key
        self.key_expires_at = timezone.now() + timedelta(days=7)
        self.save()

    def send_verification_code(self):
        self._unverify_mail()

        url = '{hostname}/#!/verify-mail?key={key}'.format(
            hostname=settings.HOSTNAME, key=self.activation_key)

        AnymailMessage(
            subject=_('Verify your mail address'),
            body=_(
                'Here is your activation link: {}. It will be valid for 7 days.'
            ).format(url),
            to=[self.email],
            from_email=settings.DEFAULT_FROM_EMAIL,
            track_clicks=False,
            track_opens=False).send()

    def reset_password(self):
        new_password = User.objects.make_random_password(length=20)
        self.set_password(new_password)
        self.save()

        AnymailMessage(
            subject=_('New password'),
            body=_('Here is your new temporary password: {}.' +
                   'You can use it to login. Please change it soon.').format(
                       new_password),
            to=[self.email],
            from_email=settings.DEFAULT_FROM_EMAIL,
            track_clicks=False,
            track_opens=False).send()
Пример #19
0
class UmToken(Model):

    key = CharField(max_length=32)
    email = EmailField(max_length=50, null=True)
    created_at = DateTimeField(auto_now_add=True)
Пример #20
0
class User(Model):
    name = CharField(max_length=32)
    google_id = CharField(max_length=32)
    mail = EmailField()
    created_at = DateTimeField(auto_now_add=True)
    updated_at = DateTimeField(auto_now=True)
Пример #21
0
class User(AbstractBaseUser, BaseModel, LocationModel):
    email = EmailField(unique=True, null=True)
    is_active = BooleanField(default=True)
    is_staff = BooleanField(default=False)
    is_superuser = BooleanField(default=False)
    display_name = CharField(max_length=settings.NAME_MAX_LENGTH)
    description = TextField(blank=True)
    language = CharField(max_length=7, default='en')

    activation_key = CharField(max_length=40, blank=True)
    key_expires_at = DateTimeField(null=True)
    mail_verified = BooleanField(default=False)
    unverified_email = EmailField(null=True)

    deleted = BooleanField(default=False)
    deleted_at = DateTimeField(default=None, null=True)
    current_group = ForeignKey('groups.Group',
                               blank=True,
                               null=True,
                               on_delete=models.SET_NULL)

    photo = VersatileImageField(
        'Photo',
        upload_to='user__photos',
        null=True,
    )

    objects = UserManager()

    USERNAME_FIELD = 'email'

    def get_full_name(self):
        return self.display_name

    def get_short_name(self):
        return self.display_name

    def delete_photo(self):
        # Deletes Image Renditions
        self.photo.delete_all_created_images()
        # Deletes Original Image
        self.photo.delete(save=False)

    @transaction.atomic
    def verify_mail(self):
        self.mail_verified = True
        self.activation_key = ''
        self.key_expires_at = None
        self.email = self.unverified_email
        self.save()

    def _unverify_mail(self):
        key = crypto.get_random_string(length=40)
        self.mail_verified = False
        self.activation_key = key
        self.key_expires_at = timezone.now() + timedelta(days=7)
        self.save()

    @transaction.atomic
    def update_email(self, unverified_email):
        self.unverified_email = unverified_email
        self._send_mail_change_notification()
        self.send_new_verification_code()

    def update_language(self, language):
        self.language = language

    def _send_mail_change_notification(self):
        context = {
            'user': self,
        }

        AnymailMessage(subject=render_to_string(
            'changemail_notice-subject.jinja').replace('\n', ''),
                       body=render_to_string(
                           'changemail_notice-body-text.jinja', context),
                       to=[self.email],
                       from_email=settings.DEFAULT_FROM_EMAIL,
                       track_clicks=False,
                       track_opens=False).send()

    def _send_welcome_mail(self):
        self._unverify_mail()

        url = '{hostname}/#/verify-mail?key={key}'.format(
            hostname=settings.HOSTNAME, key=self.activation_key)

        context = {
            'user': self,
            'url': url,
        }

        AnymailMessage(
            subject=render_to_string('mailverification-subject.jinja').replace(
                '\n', ''),
            body=render_to_string('mailverification-body-text.jinja', context),
            to=[self.unverified_email],
            from_email=settings.DEFAULT_FROM_EMAIL,
            track_clicks=False,
            track_opens=False).send()

    @transaction.atomic
    def send_new_verification_code(self):
        self._unverify_mail()

        url = '{hostname}/#/verify-mail?key={key}'.format(
            hostname=settings.HOSTNAME, key=self.activation_key)

        context = {
            'user': self,
            'url': url,
        }

        AnymailMessage(subject=render_to_string(
            'send_new_verification_code-subject.jinja').replace('\n', ''),
                       body=render_to_string(
                           'send_new_verification_code-body-text.jinja',
                           context),
                       to=[self.unverified_email],
                       from_email=settings.DEFAULT_FROM_EMAIL,
                       track_clicks=False,
                       track_opens=False).send()

    @transaction.atomic
    def reset_password(self):
        new_password = User.objects.make_random_password(length=20)
        self.set_password(new_password)
        self.save()

        AnymailMessage(
            subject=_('New password'),
            body=_('Here is your new temporary password: {}. ' +
                   'You can use it to login. Please change it soon.').format(
                       new_password),
            to=[self.email],
            from_email=settings.DEFAULT_FROM_EMAIL,
            track_clicks=False,
            track_opens=False).send()

    def has_perm(self, perm, obj=None):
        # temporarily only allow access for admins
        return self.is_superuser

    def has_module_perms(self, app_label):
        # temporarily only allow access for admins
        return self.is_superuser
Пример #22
0
class UserProfile(guardian.mixins.GuardianUserMixin, PermissionsMixin,
                  AbstractBaseUser):
    email = EmailField(_("email address"), unique=True)
    is_active = BooleanField(default=True)
    is_staff = BooleanField(default=False)
    first_name = CharField(_("first name"), max_length=254)
    last_name = CharField(_("last name"), max_length=254)
    date_of_birth = DateField(_("date of birth"))
    phone = CharField(_("phone number"), max_length=254, blank=True)
    calendar_token = CharField(_("calendar token"),
                               max_length=254,
                               default=secrets.token_urlsafe)

    USERNAME_FIELD = "email"
    REQUIRED_FIELDS = [
        "first_name",
        "last_name",
        "date_of_birth",
    ]

    objects = UserProfileManager()

    class Meta:
        verbose_name = _("user profile")
        verbose_name_plural = _("user profiles")
        db_table = "userprofile"

    def get_full_name(self):
        return self.first_name + " " + self.last_name

    def __str__(self):
        return self.get_full_name()

    def get_short_name(self):
        return self.first_name

    @property
    def age(self):
        today, born = date.today(), self.date_of_birth
        return today.year - born.year - ((today.month, today.day) <
                                         (born.month, born.day))

    @property
    def is_minor(self):
        return self.age < 18

    def as_participant(self):
        from ephios.core.signup import LocalUserParticipant

        return LocalUserParticipant(
            first_name=self.first_name,
            last_name=self.last_name,
            qualifications=self.qualifications,
            date_of_birth=self.date_of_birth,
            email=self.email if self.is_active else None,
            user=self,
        )

    @property
    def qualifications(self):
        return Qualification.objects.filter(
            pk__in=self.qualification_grants.filter(
                Q(expires__gt=timezone.now())
                | Q(expires__isnull=True)).values_list(
                    "qualification_id", flat=True)).annotate(expires=Max(
                        F("grants__expires"), filter=Q(grants__user=self)), )

    def get_shifts(self, with_participation_state_in):
        from ephios.core.models import Shift

        shift_ids = self.localparticipation_set.filter(
            state__in=with_participation_state_in).values_list("shift",
                                                               flat=True)
        return Shift.objects.filter(pk__in=shift_ids).select_related("event")

    def get_workhour_items(self):
        from ephios.core.models import AbstractParticipation

        participation = (
            self.localparticipation_set.filter(
                state=AbstractParticipation.States.CONFIRMED).annotate(
                    hours=ExpressionWrapper(
                        (F("shift__end_time") - F("shift__start_time")
                         )  # calculate length of shift in μs
                        / 1000000  # convert microseconds to seconds
                        / 3600,  # convert seconds to hours
                        output_field=models.DecimalField(),
                    ),
                    date=ExpressionWrapper(TruncDate(F("shift__start_time")),
                                           output_field=DateField()),
                    reason=F("shift__event__title"),
                ).values("hours", "date", "reason"))
        workinghours = self.workinghours_set.all().values(
            "hours", "date", "reason")
        hour_sum = (participation.aggregate(Sum("hours"))["hours__sum"]
                    or 0) + (workinghours.aggregate(Sum("hours"))["hours__sum"]
                             or 0)
        return hour_sum, list(
            sorted(chain(participation, workinghours),
                   key=lambda k: k["date"]))
Пример #23
0
class Customer(Model):
    id = UUIDField(primary_key=True)
    name = CharField(max_length=45)
    surname = CharField(max_length=45)
    phone = CharField(max_length=45)
    email = EmailField()
Пример #24
0
 def test_get_schematic_type(self):
     self.assertEqual(get_schematics_type(type(EmailField())), EmailType)
Пример #25
0
 def annotate_email(self):
     return self.annotate(email=Concat(
         "user_part", Value("@"), "domain_part", output_field=EmailField()))
Пример #26
0
 def test_get_type(self):
     self.assertEqual(get_type(EmailField()), EmailField)
Пример #27
0
class Zmail(BaseModel):
    from_addr = EmailField()
    to_addr = EmailField()
Пример #28
0
class Case(Model):
    """案件
    * state: 案件狀態, 預設值為未成案
    * uuid: 案件編號(uuid4)
    * type: 案件類別
    * region: 使用者所在選區
    * title: 標題
    * content: 案件內容
    * location: 相關地址
    * username: 使用者名字
    * mobile: 手機
    * email: 信箱
    * address: 地址
    * open_time: 成案日期
    * close_time: 結案日期
    * update_time: 上次更新時間
    """
    state = FSMField(default=State.DRAFT,
                     verbose_name=_('Case State'),
                     choices=State.CHOICES)
    uuid = UUIDField(default=uuid.uuid4, verbose_name=_('UUID'), unique=True)
    number = CharField(max_length=6,
                       default='-',
                       null=True,
                       blank=True,
                       verbose_name=_('Case Number'))
    type = ForeignKey('cases.Type',
                      on_delete=CASCADE,
                      related_name='cases',
                      verbose_name=_('Case Type'))
    region = ForeignKey('cases.Region',
                        on_delete=CASCADE,
                        related_name='cases',
                        verbose_name=_('User Region'))
    title = CharField(max_length=255, verbose_name=_('Case Title'))
    content = TextField(verbose_name=_('Content'))
    location = CharField(null=True,
                         blank=True,
                         max_length=255,
                         verbose_name=_('Location'))
    username = CharField(max_length=50, verbose_name=_('Username'))
    mobile = CharField(max_length=10,
                       null=True,
                       blank=True,
                       verbose_name=_('Mobile'))
    email = EmailField(null=True, blank=True, verbose_name=_('Email'))
    address = CharField(null=True,
                        blank=True,
                        max_length=255,
                        verbose_name=_('Address'))
    open_time = DateTimeField(null=True,
                              blank=True,
                              verbose_name=_('Opened Time'))
    close_time = DateTimeField(null=True,
                               blank=True,
                               verbose_name=_('Closed Time'))
    create_time = DateTimeField(auto_now_add=True,
                                null=True,
                                blank=True,
                                verbose_name=_('Created Time'))
    update_time = DateTimeField(auto_now=True,
                                null=True,
                                blank=True,
                                verbose_name=_('Updated Time'))

    disapprove_info = TextField(null=True,
                                blank=True,
                                verbose_name=_('Disapprove Info'))

    note = TextField(null=True, blank=True, verbose_name=_('Case Notes'))
    tags = TagField(blank=True,
                    verbose_name=_('Tags'),
                    verbose_name_plural=_('Tags'))

    objects = CaseQuerySet.as_manager()

    class Meta:
        verbose_name = _('Case')
        verbose_name_plural = _('Cases')
        ordering = ('id', )

    def save(self, *args, **kwargs):
        created = self.pk is None
        super(Case, self).save(*args, **kwargs)

        if created:
            self.number = str(self.pk).zfill(6)
            self.save()
            self.move_file()  # 搬移暫存檔案
            self.confirm(template_name='收件通知')  # 發送確認信
            new_case_notify(self)  # 發送slack通知

    def __str__(self):
        return self.number

    def to_dict(self):
        """用於新增CaseHistory"""
        return {
            'state': self.state,
            'title': self.title,
            'type': self.type,
            'region': self.region,
            'content': self.content,
            'location': self.location,
            'username': self.username,
            'mobile': self.mobile,
            'email': self.email,
            'address': self.address,
        }

    def move_file(self):
        case = Case.objects.get(uuid=self.uuid)
        objs = TempFile.objects.filter(case_uuid=self.uuid)
        for i in objs:
            file = TEMP_STORAGE.open(i.file.name)
            case_file = CaseFile()
            case_file.case = case
            case_file.file = file
            case_file.save()
Пример #29
0
class UserDetailForm(Form):
    password = CharField(max_length=64, blank=True)
    email = EmailField(blank=True)
Пример #30
0
 def test_EmailField(self):
     lazy_func = lazy(lambda: "*****@*****.**", str)
     self.assertIsInstance(EmailField().get_prep_value(lazy_func()), str)