示例#1
0
class User(ModelBase):
    email = fields.EmailField(unique=True)

    class Meta:
        indexes = [
            models.Index(fields=['email']),
        ]
示例#2
0
class BaseSubscriber(AbstractSubscriber, models.Model):
    objects = BaseSubscriberManager()

    email = fields.EmailField(max_length=255, verbose_name=_("Email"))
    subscriber_status = fields.IntegerField(
        choices=AbstractSubscriber.STATUS_CHOICES,
        verbose_name=_("Subscriber status"))

    class Meta(AbstractSubscriber.Meta):
        swappable = "NUNTIUS_SUBSCRIBER_MODEL"
示例#3
0
class SignupForm(UserCreationForm):
    """
    A form that creates a user, with no privileges, from the given username and
    password.
    """
    error_messages = {
        'password_mismatch': _("The two password fields didn't match."),
    }
    password1 = forms.CharField(
        label=_("Password"),
        strip=False,
        widget=forms.PasswordInput,
        help_text=password_validation.password_validators_help_text_html(),
    )
    password2 = forms.CharField(
        label=_("Password confirmation"),
        widget=forms.PasswordInput,
        strip=False,
        help_text=_("Enter the same password as before, for verification."),
    )

    email = fields.EmailField(help_text='Required')

    class Meta:
        model = get_user_model() #### figure it out !!!!
        fields = ("email", "first_name", "last_name", "password1", "password2")

    def __init__(self, *args, **kwargs):
        super(SignupForm, self).__init__(*args, **kwargs) # UserCreationForm Changed to SignupForm
        if self._meta.model.EMAIL_FIELD in self.fields:
            self.fields[self._meta.model.EMAIL_FIELD].widget.attrs.update({'autofocus': True})

    def clean_password2(self):
        password1 = self.cleaned_data.get("password1")
        password2 = self.cleaned_data.get("password2")
        if password1 and password2 and password1 != password2:
            raise forms.ValidationError(
                self.error_messages['password_mismatch'],
                code='password_mismatch',
            )
        self.instance.username = self.cleaned_data.get('username')
        password_validation.validate_password(self.cleaned_data.get('password2'), self.instance)
        return password2

    def save(self, commit=True):
        user = SignupForm.save(commit=False)
        user.set_password(self.cleaned_data["password1"])
        if commit:
            user.save()
        return user
示例#4
0
文件: models.py 项目: chschenk/qcos
class Registration(Model):
    camp = ForeignKey(Camp, on_delete=CASCADE)
    clan = ForeignKey(Clan, on_delete=PROTECT)
    telephone = fields.CharField(max_length=100)
    contact_name = fields.CharField(max_length=100)
    email = fields.EmailField(max_length=100)
    comment = fields.TextField(max_length=1000, null=True, blank=True)
    paid = fields.DecimalField(decimal_places=2, max_digits=6, default=0)
    rules_accepted = fields.BooleanField(default=False,
                                         validators=[validate_true])
    present_participants = fields.PositiveIntegerField(null=True)

    def get_price(self):
        price = 0
        for info in self.ticketinfo_set.all():
            price += info.quantity * info.fee.price
        return price

    def get_quantity(self):
        quantity = 0
        for info in self.ticketinfo_set.all():
            quantity += info.quantity
        return quantity

    def get_quantities(self):
        quantities = list()
        for fee in self.camp.fee_set.all().order_by('pk'):
            value = 0
            for info in self.ticketinfo_set.all():
                if info.fee == fee:
                    value = info.quantity
            quantities.append(value)
        return quantities

    def get_ticket_count(self):
        tickets = list()
        for info in self.ticketinfo_set.all():
            tickets.extend(info.ticket_set.all())
        return len(tickets)

    def get_registrated_participant_count(self):
        count = 0
        for info in self.ticketinfo_set.all():
            for ticket in info.ticket_set.all():
                if ticket.registrated:
                    count += 1
        return count

    def __str__(self):
        return "Registration from {}".format(self.clan.name)
示例#5
0
class ParentCard(models.Model):
    fio = f.CharField(max_length=100, verbose_name='ФИО')
    address = f.CharField(max_length=100, verbose_name='Адрес')
    phone_number = PhoneNumberField(null=False,
                                    unique=True,
                                    verbose_name='Номер телефона')
    gender = f.CharField(max_length=7,
                         choices=GENDER_CHOICES,
                         verbose_name='Пол')
    date_of_birth = f.DateTimeField(verbose_name='Дата рождения',
                                    blank=True,
                                    null=True)
    email = f.EmailField(verbose_name='E-mail')

    def __str__(self):
        return self.fio
示例#6
0
class Contact(ModelBase):
    contact_book = models.ForeignKey(ContactBook)
    email = fields.EmailField(unique=True, null=False, blank=False)
    first_name = fields.CharField(max_length=127)
    last_name = fields.CharField(max_length=127, null=True, blank=True)
    phone = fields.CharField(max_length=20, null=True, blank=True)
    address = models.TextField(blank=True, null=True)

    class Meta:
        indexes = [
            models.Index(fields=[
                'first_name',
                'last_name',
            ]),
            models.Index(fields=['email']),
        ]
class User(Model):
    "user model to be quried from"
    username_validator = UnicodeUsernameValidator()
    username = fields.CharField(
        _('username'),
        max_length=150,
        unique=True,
        help_text=_('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'),
        validators=[username_validator],
        error_messages={
            'unique': _("A user with that username already exists."),
        },
    )
    first_name = fields.CharField(_('first name'), max_length=30, blank=True)
    last_name = fields.CharField(_('last name'), max_length=30, blank=True)
    email = fields.EmailField(_('email address'), blank=True)
    password = fields.CharField(_('password'), max_length=255, blank=True)
    fcm_id = fields.CharField(_('fcm id'), max_length=255, blank=True)

    objects = UserManager()
示例#8
0
class User(AbstractUser):
    first_name = None
    last_name = None
    email = fields.EmailField(unique=True)
    full_name = fields.CharField(max_length=250)
示例#9
0
class User(_Abstract, _Model):
    from django.db.models import fields as _field
    from app.fields import timezone as _timezone

    email = _field.EmailField(
        verbose_name='E-mail',
        null=False,
        blank=False,
        unique=True,
        max_length=256,
    )

    phone = _field.CharField(
        verbose_name='Телефон',
        max_length=30,
        null=False,
        blank=False,
    )

    activation = _field.CharField(
        verbose_name='Код активации/восстановления пароля',
        max_length=255,
        null=True,
        editable=False,
        default=_activation_key)

    timezone = _timezone.TimeZoneField(
        verbose_name='Локальное время пользователя',
        default='UTC',
        null=False,
        blank=True,
    )

    is_active = _field.BooleanField(
        verbose_name='Активирован',
        default=
        True,  # Causes problems with super users if is not set to True. Handle base user active in views.
    )

    is_banned = _field.BooleanField(
        verbose_name='Забанен',
        default=False,
    )

    def new_activation(self):
        self.activation = _activation_key()
        return self.activation

    def check_activation(self, code):
        if self.activation is None or code is None or code == '':
            return False

        return self.activation == code

    def activate(self):
        """ Modificates user activation and save """
        self.is_active = True
        self.activation = None
        self.save()

    def deactivate(self):
        """ Modificates user activation and save """
        self.is_active = False
        self.activation = None
        self.save()

    def get_token(self):
        from entry.jwt import create_token
        return create_token(self)

    def __str__(self):
        return "%s %s (%s)" % (self.first_name, self.last_name,
                               self.username) if (self.first_name
                                                  or self.last_name) else (
                                                      "%s" % self.username)

    def reactivate(self):
        self.new_activation()
        self.save()

    # Mails part
    def mail_default(self, subject, template):
        from django.conf import settings

        _Mail(mail_from=settings.EMAIL_ADDRESSES.get('main'),
              mail_to=self.email,
              subject=subject,
              template=template,
              context={
                  'user': self,
              }).start()

    def mail_activation(self):
        self.mail_default(
            template='user%sregister' % _os.sep,
            subject="Registration",
        )

    def mail_activation_resend(self):
        self.reactivate()

        self.mail_default(
            template='user%sregister' % _os.sep,
            subject="Repeat registration mail",
        )

    def mail_reset_password(self):
        self.reactivate()

        self.mail_default(
            template='user%snew_password' % _os.sep,
            subject="Password restoration",
        )

    class Meta(_Abstract.Meta):
        swappable = 'AUTH_USER_MODEL'
        verbose_name = 'Пользователь'
        verbose_name_plural = 'Пользователи'
class Campaign(AbstractCampaign):
    message_from_name = fields.CharField(_('"From" name'),
                                         max_length=255,
                                         blank=True)
    message_from_email = fields.EmailField(_('"From" email address'),
                                           max_length=255)
    message_reply_to_name = fields.CharField(_('"Reply to" name'),
                                             max_length=255,
                                             blank=True)
    message_reply_to_email = fields.CharField(_('"Reply to" email address'),
                                              max_length=255,
                                              blank=True)
    message_subject = fields.CharField(_("Message subject line"),
                                       max_length=255,
                                       blank=True)
    message_mosaico_data = fields.TextField(_("Mosaico data"), blank=True)
    message_content_html = fields.TextField(_("Message content (HTML)"),
                                            blank=True)
    message_content_text = fields.TextField(_("Message content (text)"),
                                            blank=True)

    def save(self, *args, **kwargs):
        if self.message_mosaico_data:
            self.message_content_text = generate_plain_text(
                self.message_content_html)
        super().save(*args, **kwargs)

    def get_sent_count(self):
        return (CampaignSentEvent.objects.filter(campaign=self).exclude(
            result=CampaignSentStatusType.PENDING).count())

    def get_ok_count(self):
        return (CampaignSentEvent.objects.filter(campaign=self).filter(
            result=CampaignSentStatusType.OK).count())

    def get_bounced_count(self):
        return (CampaignSentEvent.objects.filter(campaign=self).filter(
            result=CampaignSentStatusType.BOUNCED).count())

    def get_complained_count(self):
        return (CampaignSentEvent.objects.filter(campaign=self).filter(
            result=CampaignSentStatusType.COMPLAINED).count())

    def get_blocked_count(self):
        return (CampaignSentEvent.objects.filter(campaign=self).filter(
            result=CampaignSentStatusType.BLOCKED).count())

    def get_open_count(self):
        return CampaignSentEvent.objects.filter(campaign=self).aggregate(
            count=Coalesce(Sum("open_count"), Value(0)))["count"]

    def get_unique_open_count(self):
        return (CampaignSentEvent.objects.filter(campaign=self).filter(
            open_count__gt=0).count())

    def get_click_count(self):
        return CampaignSentEvent.objects.filter(campaign=self).aggregate(
            count=Coalesce(Sum("click_count"), Value(0)))["count"]

    def get_unique_click_count(self):
        return (CampaignSentEvent.objects.filter(campaign=self).filter(
            click_count__gt=0).count())

    def get_event_for_subscriber(self, subscriber):
        event, _ = CampaignSentEvent.objects.get_or_create(
            campaign=self,
            subscriber=subscriber,
            defaults={"email": subscriber.get_subscriber_email()},
        )
        return event

    def __repr__(self):
        return f"Campaign(id={self.id!r}, name={self.name!r})"

    @cached_property
    def html_template(self):
        from nuntius.messages import insert_tracking_image_template

        return Template(
            insert_tracking_image_template(self.message_content_html))

    @cached_property
    def text_template(self):
        return Template(self.message_content_text)

    @property
    def from_header(self):
        if self.message_from_name:
            return f"{self.message_from_name} <{self.message_from_email}>"
        return self.message_from_email

    @property
    def reply_to_header(self):
        if self.message_reply_to_email:
            if self.message_reply_to_name:
                return f"{self.message_reply_to_name} <{self.message_reply_to_email}>"
            return self.message_reply_to_email
        return None

    class Meta:
        verbose_name = _("email campaign")
        verbose_name_plural = _("email campaigns")
示例#11
0
class Employee(_Model):
    from django.db.models import fields as _field
    from app.fields import timezone as _timezone
    from django.db.models.fields import related as _related
    from django.db.models import deletion as _deletion

    first_name = _field.CharField(
        max_length=200,
        verbose_name="Имя",
    )

    last_name = _field.CharField(
        max_length=200,
        verbose_name="Фамилия",
    )

    phone = _field.CharField(
        max_length=200,
        verbose_name="Телефон",
        null=True,
        blank=True,
    )

    company = _related.ForeignKey(
        'holding.Company',
        on_delete=_deletion.SET_NULL,
        verbose_name="Компания",
        null=True,
        blank=True,
        related_name="employees",
    )

    is_manager = _field.BooleanField(
        verbose_name="Менеджер",
        default=False,
    )

    is_fired = _field.BooleanField(
        verbose_name="Уволен",
        default=False,
    )

    import uuid as _uuid
    auth_key = _field.UUIDField(
        verbose_name="Уникальный авторизационный ключ",
        editable=False,
        unique=True,
        null=True,
        blank=False,
        default=_uuid.uuid4,
    )

    email = _field.EmailField(
        verbose_name="E-mail",
        null=True,
        blank=True,
    )

    timezone = _timezone.TimeZoneField(
        verbose_name="Пояс",
        default="UTC",
        null=False,
        blank=True,
    )

    invitation = _field.DateTimeField(
        verbose_name="Последнее приглашение",
        null=True,
        blank=True,
    )

    is_invited = _field.BooleanField(
        verbose_name="Приглашён",
        null=False,
        default=False,
    )

    is_active = _field.BooleanField(
        verbose_name="Активен",
        null=False,
        default=False,
    )

    face_id = _field.UUIDField(
        verbose_name="Face ID",
        null=True,
        blank=True,
    )

    user = _related.ForeignKey(
        'entry.User',
        on_delete=_deletion.CASCADE,
        verbose_name="Физический пользователь",
        null=True,
        blank=True,
    )

    department = _related.ForeignKey(
        'holding.Department',
        on_delete=_deletion.SET_NULL,
        default=None,
        null=True,
        blank=True,
        related_name="employees",
    )

    position = _related.ForeignKey(
        'holding.Position',
        on_delete=_deletion.SET_NULL,
        default=None,
        null=True,
        blank=True,
        related_name="employees",
    )

    def clear_face_id(self):
        self.face_id = None

    def new_face_id(self):
        self.face_id = self._uuid.uuid4()

    def new_invitation(self):
        from datetime import datetime

        old = self.invitation
        self.invitation = datetime.now()
        return old

    def activate(self):
        self.is_invited = True
        self.is_active = True
        self.auth_key = None

    def __str__(self):
        user = self.user
        ttl = {}

        if self.last_name and self.first_name:
            ttl['first_name'] = self.first_name
            ttl['last_name'] = self.last_name
        elif user:
            if user.last_name and user.first_name:
                ttl['first_name'] = user.first_name
                ttl['last_name'] = user.last_name
            ttl['username'] = user.username

        if ttl.get('first_name'):
            if ttl.get('username'):
                return "%(first_name)s %(last_name)s [%(username)s]" % ttl
            else:
                return "%(first_name)s %(last_name)s" % ttl
        elif ttl.get('username'):
            return "%(username)s" % ttl
        else:
            return "Employee №[%d]" % self.id

    @classmethod
    def create_from_user(cls, user, **kwargs):
        """
        :type user: entry.models.User
        """
        from factory.faker import faker

        fake = faker.Faker(locale='ru_RU')

        employee = cls(
            user=user,

            first_name=user.first_name if user.first_name else fake.first_name(),
            last_name=user.last_name if user.last_name else fake.last_name(),
            timezone=user.timezone,
            phone=user.phone,
            email=user.email,
            is_active=True,
            **kwargs
        )

        employee.save()

        return employee

    def set_position(self, position, department=None):
        self.position = position

        if not department and not self.department:
            related = position.departments.first()

            if related:
                self.department = related.department
        elif department:
            self.department = department

    class Meta:
        verbose_name = "Сотрудник"
        verbose_name_plural = "Сотрудники"
        unique_together = (('user', 'company'),)

    def create_user(self, username=None):
        """
        Creates user from employee, save it and send email if application not in debug mode
        :type username: str
        """
        from django.conf import settings
        from entry.models import User

        if not self.auth_key and not username:
            raise AttributeError('No username provided or can\'t be get from auth')

        user = User(
            username=username if username else self.auth_key,
            first_name=self.first_name,
            last_name=self.last_name,
            email=self.email,
            phone=self.phone,
            timezone=self.timezone,
        )

        user.save()
        self.user = user

        if user.email and not settings.DEBUG:
            user.mail_activation()

        if settings.DEBUG:
            user.activate()
            self.activate()

        return user
示例#12
0
文件: model.py 项目: r00tkid/getface
class Company(_Model):
    from app.fields import timezone as _timezone

    name = _field.CharField(
        verbose_name='Название компании',
        max_length=255,
        null=False,
    )

    description = _field.TextField(
        verbose_name='Описание компании',
        max_length=4000,
        null=True,
        blank=True,
    )

    address = _field.CharField(
        verbose_name='Адрес компании',
        max_length=512,
        null=True,
        blank=True,
    )

    phone = _field.CharField(
        verbose_name='Телефон',
        max_length=32,
        null=True,
        blank=True,
    )

    email = _field.EmailField(
        verbose_name='Почтовый ящик',
        max_length=255,
        null=False,
    )

    owner = _related.ForeignKey(
        'holding.Employee',  # Changed company owner from user to employee because of the system flow
        verbose_name='Владелец',
        on_delete=_deletion.DO_NOTHING,
        null=False,
        related_name='owner',
    )

    discount = _related.ForeignKey(
        to='pay.Discount',
        on_delete=_deletion.SET_NULL,
        null=True,
        blank=True,
    )

    timezone = _timezone.TimeZoneField(
        verbose_name='Локальное время компании',
        default='UTC',
        null=False,
        blank=True,
    )

    def __str__(self):
        return self.name

    @property
    def last_payment(self):
        from pay.models import Payment

        return Payment.objects.filter(details__company=self).last()

    @property
    def rate(self):
        return self.last_payment.details.rate if self.last_payment else None

    rate.fget.short_description = u'Тариф'

    @property
    def time_left(self):
        return self.last_payment.time_left if self.last_payment else -1

    time_left.fget.short_description = u"Оплаченное время"

    @property
    def employee_amount(self):
        return self.employees.count()

    employee_amount.fget.short_description = u"Сотрудников"

    @property
    def departments_amount(self):
        return self.departments.count()

    departments_amount.fget.short_description = u"Отделов"

    def save(self,
             force_insert=False,
             force_update=False,
             using=None,
             update_fields=None):
        creation = True

        if self.id:
            creation = False

        super(Company, self).save(force_insert, force_update, using,
                                  update_fields)

        self.owner.company = self
        self.owner.save()

        if creation:
            CompanyCreator(creator=self.owner, company=self).save()

    class Meta:
        verbose_name = "Компания"
        verbose_name_plural = "Компании"
示例#13
0
class User(AbstractBaseUser, PermissionsMixin):
    id = fields.AutoField(
        verbose_name=_('ID'),
        primary_key=True,
    )
    site = models.ForeignKey(
        Site,
        related_name='users',
        null=True,
        blank=True,
        db_index=True,
    )
    email = fields.EmailField(
        verbose_name=_('Email Address'),
        max_length=255,
        null=False,
        blank=False,
        unique=True,
    )
    first_name = fields.CharField(
        verbose_name=_('First Name'),
        max_length=32,
        null=True,
        blank=False,
    )
    last_name = fields.CharField(
        verbose_name=_('Last Name'),
        max_length=32,
        null=True,
        blank=False,
    )
    is_active = fields.BooleanField(
        verbose_name=_('Is Active'),
        null=False,
        blank=False,
        default=True,
        db_index=True,
    )
    create_date = fields.DateTimeField(
        verbose_name=_('Create Date'),
        null=False,
        blank=True,
        auto_now_add=True,
    )
    update_date = fields.DateTimeField(
        verbose_name=_('Update Date'),
        null=True,
        blank=True,
        auto_now=True,
    )

    @property
    def is_staff(self):
        return self.is_superuser

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    objects = UserManager()

    class Meta:
        db_table = 'auth_user'
        verbose_name = _('User')
        verbose_name_plural = _('Users')
        get_latest_by = 'create_date'
        default_related_name = 'users'

    def get_short_name(self):
        return self.first_name if self.first_name is not None else self.email

    def get_full_name(self):
        return '{0} {1}'.format(self.first_name, self.last_name)

    def __str__(self):
        return self.email