text: from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
  from django.db import models
  
  '''
      @name : AccountManager
      @desc : AccountManager model. The AccountManager is responsible to manage
      the creation of users and superusers.
  '''
  class AccountManager(BaseUserManager):
      def create_user(self, email, password=None, **kwargs):
          if not email:
              raise ValueError('Users must have a valid email adress.')
          if not kwargs.get('username'):
              raise ValueError('Users must have a valid username.')
  
          account = self.model(
              email = self.normalize_email(email), username= kwargs.get('username')
          )
  
          account.set_password(password)
          account.save()
          return account
  
      def create_superuser(self, email, password, **kwargs):
          account = self.create_user(email, password, **kwargs)
          account.is_admin = True
          account.save()
          return account
  
  '''
      @name : Account
      @desc : Model that represents an account. This model is generic to represent a user
      that has an account in the ShopIT application. This user can be the store manager
      or the mobile app user.
  '''
  class Account(AbstractBaseUser):
      email = models.EmailField(unique=True)
      username = models.CharField(max_length=50, unique=True)
  
      first_name = models.CharField(max_length=50, blank=True)
      last_name = models.CharField(max_length=50, blank=True)
  
      is_admin = models.BooleanField(default=False)
  
      created_at = models.DateTimeField(auto_now_add=True)
      updated_at = models.DateTimeField(auto_now=True)
  
      objects = AccountManager()
  
      USERNAME_FIELD = 'email'
      REQUIRED_FIELDS = ['username']
  
      def __unicode__(self):
          return self.email
  
      def get_full_name(self):
          return ' '.join([self.first_name, self.last_name])
  
      def get_short_name(self):
          return self.first_name
  