from django.contrib.auth.models import AbstractUser, AbstractBaseUser, PermissionsMixin, BaseUserManager from app.settings import WEBSITE_URI, WEB_APP_NAME from django.template.loader import render_to_string from django.core.mail import send_mail from django.core.urlresolvers import reverse from django.db import models # Create your models here. class UserManager(BaseUserManager): def create_user(self, email, first_name, last_name, password=None): """ Creates and saves a User with the given email, first name, last name and password. """ if not email: raise ValueError('Users must have an email address') user = self.model( email=self.normalize_email(email), first_name=first_name, last_name=last_name, ) user.set_password(password) user.save(using=self._db) return user def create_superuser(self, email, first_name, last_name, password): """ Creates and saves a superuser with the given email, first name, last name and password. """ user = self.create_user( email=email, first_name=first_name, last_name=last_name, password=password, ) user.is_superuser = True user.save(using=self._db) return user class User(PermissionsMixin, AbstractBaseUser): id = models.AutoField(primary_key=True) email = models.EmailField(max_length=256, unique=True) first_name = models.CharField(max_length=256) last_name = models.CharField(max_length=256) is_active = models.BooleanField(default=True) is_superuser = models.BooleanField(default=False) USERNAME_FIELD = 'email' EMAIL_FIELD = 'email' REQUIRED_FIELDS = ['first_name', 'last_name'] objects = UserManager() def get_full_name(self): return "{} {}".format(self.first_name, self.last_name) def get_short_name(self): return self.first_name def get_absolute_url(self): return reverse('driver_details', kwargs={'pk': self.pk}) def __str__(self): # return self.email # Show the Identity associated with the user, not the user itself try: return "{} ({} {})".format(self.identity, self.first_name, self.last_name) except: return "{} {} ({})".format(self.first_name, self.last_name, self.email) def email_user(self, subject, message, from_email=None, **kwargs): """Send an email to this user.""" send_mail(subject, message, from_email, [self.email], **kwargs) def send_invite(self, name, to, from_email=None, **kwargs): """Send an invite for a new user to register""" current_site = WEBSITE_URI message = render_to_string('dispatch/invite_email.txt', { 'name': name, 'user': self, 'site': current_site, 'app_name': WEB_APP_NAME }) send_mail("Invitation to register at {}".format(current_site), message, from_email, [to]) @property def is_staff(self): return self.is_superuser