Example #1
0
class Employee(models.Model):
    company = models.ForeignKey('business.Company')
    profile = models.ForeignKey('accounts.Profile')
    primary = models.BooleanField(default=False)
    title = models.CharField(max_length=255, blank=True, null=True)
    start_date = models.DateField(blank=True, null=True)
    end_date = models.DateField(blank=True, null=True)
    current = models.BooleanField(default=True)
    city = models.CharField(max_length=255, blank=True, null=True)
    state = models.CharField(max_length=255, blank=True, null=True)
    country = models.CharField(max_length=255, blank=True, null=True)
    description = models.TextField(blank=True, null=True)

    class Meta:
        ordering = ['-current', '-end_date', '-start_date']
class Release(models.Model):
    types = [
        ('release', 'release'),
        ('event', 'event'),
    ]

    release_date = models.DateField()
    release_type = models.CharField(max_length=999, choices=types)
    title = models.CharField(max_length=999)
    important_tags = tagulous.models.TagField(
        to="general.customtag",
        related_name="release_important_tags",
        default=None,
        blank=True)
    other_tags = tagulous.models.TagField(to="general.customtag",
                                          related_name="release_other_tags",
                                          default=None,
                                          blank=True)
    snippet = models.CharField(max_length=999, blank=True, null=True)
    description = models.TextField(
        blank=True,
        null=True,
    )
    video = models.CharField(max_length=999, blank=True, null=True)
    external_link = models.CharField(max_length=999, blank=True, null=True)
    review_link = models.ForeignKey(Publication,
                                    blank=True,
                                    null=True,
                                    related_name="review_link",
                                    on_delete=models.CASCADE)

    def __str__(self):
        return self.title
Example #3
0
class Thesis(models.Model):
    """
    This class defines the field that a thesis can have.
    The following fields are optional: additional, pdf
    A thesis can be promoted for either BSc, MSc, BEd, MEd, or as being part of a project.
    Each thesis is referenced with the chair that is providing it via a ForeignKey field.
    """
    THESIS_CHOICES = (
        ('BSC', 'Bachelor of Science'),
        ('MSC', 'Master of Science'),
        ('BED', 'Bachelor of Education'),
        ('MED', 'Master of Education'),
        ('PRO', 'Forschungsprojekt'),
        ('ETC', 'nach Absprache')
    )

    title = models.CharField('Titel der Arbeit',
                             blank=False,
                             max_length=200)

    description = models.TextField('Beschreibung',
                                   blank=False)

    date_added = models.DateTimeField('Erstellungsdatum',
                                      default=timezone.now,
                                      editable=False)

    additional = models.TextField('weitere Beschreibung',
                                  blank=True,
                                  max_length=1000)

    contact = models.EmailField('E-Mail der Kontaktperson:',
                                blank=False)

    chair = models.ForeignKey(Chair, on_delete=models.CASCADE,
                              related_name="provided_by",
                              verbose_name='angeboten durch Lehrstuhl')

    start_date = models.DateField('frühester Beginn',
                                  blank=False,
                                  default=timezone.now)

    is_active = models.BooleanField('aktiv',
                                    default=True)

    pdf = models.FileField('PDF mit Ausschreibung',
                           validators=[FileExtensionValidator(allowed_extensions=['pdf'])],
                           blank=True)

    type = MultiSelectField('Art der Arbeit',
                            choices=THESIS_CHOICES,
                            blank=False)

    tags = tagulous.models.TagField(get_absolute_url=lambda tag: reverse(
            'by_tag',
            args=parse_tags(tag.slug)))

    user = models.ForeignKey(AAIUser, null=True,
                             on_delete=models.DO_NOTHING,
                             related_name="uploaded_by",
                             verbose_name="hochgeladen von")

    def __str__(self):
        return self.title

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

    class Meta:
        verbose_name = "Abschlussarbeit"
        verbose_name_plural = "Abschlussarbeiten"
Example #4
0
class ItemModel(BaseModel, VersionProtectBaseModel):
    """
    A Item that can be described and store somewhere ;)
    """
    objects = ItemQuerySet.as_manager()

    kind = tagulous.models.TagField(
        case_sensitive=False,
        force_lowercase=False,
        space_delimiter=False,
        max_count=3,
        verbose_name=_('ItemModel.kind.verbose_name'),
        help_text=_('ItemModel.kind.help_text'))
    producer = tagulous.models.TagField(
        blank=True,
        case_sensitive=False,
        force_lowercase=False,
        space_delimiter=False,
        max_count=1,
        verbose_name=_('ItemModel.producer.verbose_name'),
        help_text=_('ItemModel.producer.help_text'))
    description = RichTextUploadingField(
        blank=True,
        null=True,
        config_name='ItemModel.description',
        verbose_name=_('ItemModel.description.verbose_name'),
        help_text=_('ItemModel.description.help_text'))
    fcc_id = models.CharField(max_length=20,
                              blank=True,
                              null=True,
                              verbose_name=_('ItemModel.fcc_id.verbose_name'),
                              help_text=_('ItemModel.fcc_id.help_text'))
    location = models.ForeignKey(
        'inventory.LocationModel',
        blank=True,
        null=True,
        on_delete=models.SET_NULL,
        verbose_name=_('ItemModel.location.verbose_name'),
        help_text=_('ItemModel.location.help_text'))
    parent = models.ForeignKey('self',
                               limit_choices_to={'parent_id': None},
                               on_delete=models.SET_NULL,
                               blank=True,
                               null=True,
                               verbose_name=_('ItemModel.parent.verbose_name'),
                               help_text=_('ItemModel.parent.help_text'))

    # ________________________________________________________________________
    # lent

    lent_to = models.CharField(
        max_length=64,
        blank=True,
        null=True,
        verbose_name=_('ItemModel.lent_to.verbose_name'),
        help_text=_('ItemModel.lent_to.help_text'))
    lent_from_date = models.DateField(
        blank=True,
        null=True,
        verbose_name=_('ItemModel.lent_from_date.verbose_name'),
        help_text=_('ItemModel.lent_from_date.help_text'))
    lent_until_date = models.DateField(
        blank=True,
        null=True,
        verbose_name=_('ItemModel.lent_until_date.verbose_name'),
        help_text=_('ItemModel.lent_until_date.help_text'))

    # ________________________________________________________________________
    # received

    received_from = models.CharField(
        max_length=64,
        blank=True,
        null=True,
        verbose_name=_('ItemModel.received_from.verbose_name'),
        help_text=_('ItemModel.received_from.help_text'))
    received_date = models.DateField(
        blank=True,
        null=True,
        verbose_name=_('ItemModel.received_date.verbose_name'),
        help_text=_('ItemModel.received_date.help_text'))
    received_price = models.DecimalField(
        decimal_places=2,
        max_digits=6,  # up to 9999 with a resolution of 2 decimal places
        blank=True,
        null=True,
        verbose_name=_('ItemModel.received_price.verbose_name'),
        help_text=_('ItemModel.received_price.help_text'))

    # ________________________________________________________________________
    # handed over

    handed_over_to = models.CharField(
        max_length=64,
        blank=True,
        null=True,
        verbose_name=_('ItemModel.handed_over_to.verbose_name'),
        help_text=_('ItemModel.handed_over_to.help_text'))
    handed_over_date = models.DateField(
        blank=True,
        null=True,
        verbose_name=_('ItemModel.handed_over_date.verbose_name'),
        help_text=_('ItemModel.handed_over_date.help_text'))
    handed_over_price = models.DecimalField(
        decimal_places=2,
        max_digits=6,  # up to 9999 with a resolution of 2 decimal places
        blank=True,
        null=True,
        verbose_name=_('ItemModel.handed_over_price.verbose_name'),
        help_text=_('ItemModel.handed_over_price.help_text'))

    def local_admin_link(self):
        url = reverse('admin:inventory_itemmodel_change', args=[self.id])
        return url

    def verbose_name(self):
        parts = [str(part) for part in (self.kind, self.producer, self.name)]
        return ' - '.join(part for part in parts if part)

    def __str__(self):
        if self.parent_id is None:
            title = self.name
        else:
            title = f'{self.name} › {self.parent}'

        if self.producer:
            title = f'{self.producer} - {title}'

        if self.location_id is not None:
            title = f'{title} ({self.location})'

        return title

    class Meta:
        verbose_name = _('ItemModel.verbose_name')
        verbose_name_plural = _('ItemModel.verbose_name_plural')
Example #5
0
class Company(models.Model):
    name = models.CharField(max_length=255, unique=True)
    slug = models.SlugField()
    legal_entity_name = models.CharField(max_length=255, blank=True, null=True)
    phone = models.CharField(max_length=255, blank=True, null=True)
    email = models.CharField(max_length=255, blank=True, null=True)
    stripe = models.CharField(max_length=255, blank=True, null=True)
    address = models.CharField(max_length=255, blank=True, null=True)
    address2 = models.CharField(max_length=255, blank=True, null=True)
    city = models.CharField(max_length=255, blank=True, null=True)
    state = models.CharField(max_length=255, blank=True, null=True)
    zipcode = models.CharField(max_length=15, blank=True, null=True)
    country = models.CharField(max_length=255, blank=True, null=True)
    ein = models.CharField(max_length=50,
                           verbose_name='EIN',
                           blank=True,
                           null=True)
    logo = models.ImageField(blank=True, null=True, upload_to='provider/logo')
    description = models.TextField(blank=True, null=True)
    long_description = models.TextField(blank=True, null=True)
    type = models.CharField(max_length=100,
                            choices=COMPANY_TYPES,
                            blank=True,
                            null=True)
    filing_location = models.CharField(max_length=100, blank=True, null=True)
    incorporation_date = models.DateField(blank=True, null=True)

    @property
    def get_logo(self):
        if self.logo:
            return '{0}{1}'.format(settings.MEDIA_URL, self.logo)
        else:
            return '{0}{1}'.format(settings.STATIC_URL,
                                   'images/home-hero-2g.jpg')

    @property
    def primary_contact(self):
        return Employee.objects.get(company=self, primary=True)

    @property
    def employees(self):
        return Employee.objects.filter(company=self)

    @property
    def tags(self):
        projects = Project.objects.filter(company=self)
        tags = []
        for project in projects:
            # TODO List comprehension here bro
            if project.type not in tags:
                tags.append(project.type)
        return tags

    def save(self, *args, **kwargs):
        self.slug = slugify(self.name)
        super(Company, self).save(*args, **kwargs)

    def __str__(self):
        return self.name

    def __unicode__(self):
        return self.name

    class Meta:
        verbose_name_plural = 'companies'
Example #6
0
class Project(models.Model):
    company = models.ForeignKey(Company, blank=True, null=True)
    project_manager = models.ForeignKey('accounts.Profile')
    title = models.CharField(max_length=255, unique=True)
    slug = models.SlugField(max_length=255)
    type = models.CharField(max_length=100,
                            choices=PROJECT_TYPES,
                            blank=True,
                            null=True)
    category = models.CharField(max_length=100, blank=True, null=True)
    start_date = models.DateField(blank=True, null=True)
    end_date = models.DateField(blank=True, null=True)
    expire_date = models.DateField(blank=True, null=True)
    skills = tagulous.models.TagField(to='accounts.Skills',
                                      blank=True,
                                      null=True)
    deleted = models.BooleanField(default=False)
    estimated_hours = models.IntegerField(blank=True, null=True)
    estimated_cash = models.IntegerField(blank=True, null=True)
    estimated_equity_percentage = models.DecimalField(blank=True,
                                                      null=True,
                                                      max_digits=4,
                                                      decimal_places=2)
    estimated_equity_shares = models.DecimalField(blank=True,
                                                  null=True,
                                                  max_digits=9,
                                                  decimal_places=2)
    date_created = models.DateTimeField(auto_now_add=True)
    city = models.CharField(max_length=255, blank=True, null=True)
    state = models.CharField(max_length=255, blank=True, null=True)
    country = models.CharField(max_length=100, blank=True, null=True)
    country_code = models.CharField(max_length=100, blank=True, null=True)
    location = models.CharField(max_length=150, blank=True, null=True)
    status = models.CharField(max_length=100, blank=True, null=True)
    remote = models.BooleanField(default=False)
    featured = models.BooleanField(default=False)
    mix = models.BooleanField(default=False)
    background = models.TextField(blank=True, null=True)
    progress = models.TextField(blank=True, null=True)
    scope = models.TextField(blank=True, null=True)
    specs = models.TextField(blank=True, null=True)
    private_info = models.TextField(blank=True, null=True)
    published = models.BooleanField(default=False)
    approved = models.BooleanField(default=False)
    role = models.CharField(max_length=100, blank=True, null=True)
    years = models.IntegerField(blank=True, null=True)
    employment_type = models.CharField(max_length=100, default='freelance')
    autorenew = models.BooleanField(default=False)
    sku = models.CharField(max_length=50, blank=True, null=True)
    views = models.IntegerField(default=0)

    objects = ProjectManager()

    def __str__(self):
        return self.title

    def __unicode__(self):
        return self.title

    class Meta:
        ordering = ['-date_created']

    def save(self, *args, **kwargs):
        self.slug = slugify(self.title)
        super(Project, self).save(*args, **kwargs)

    def preauth(self, promo=None):
        product = Product.objects.get(sku=self.sku)
        try:
            order = Order.objects.get(content_type__pk=self.content_type.id,
                                      object_id=self.id,
                                      status='preauth')
        except Order.DoesNotExist:
            if promo:
                promo = Promo.objects.get(code=promo.lower())
            order = Order(content_object=self,
                          product=product,
                          user=self.project_manager,
                          status='preauth',
                          promo=promo)
            order.save()
            order.charge()
        return order

    def activate(self):
        today = datetime.now().date()
        if not self.sku:
            self.sku = 'free'
        product = Product.objects.get(sku=self.sku)
        self.expire_date = today + timedelta(days=product.interval)
        self.status = 'active'
        self.save()
        return self

    def subscribe(self, promo=None):
        try:
            order = Order.objects.get(content_type__pk=self.content_type.id,
                                      object_id=self.id,
                                      status='preauth')
        except Order.DoesNotExist:
            order = self.preauth(promo=promo)
        if order.product.sku != self.sku:
            product = Product.objects.get(sku=self.sku)
            order.product = product
            order.save()
        order.capture()
        if self.project_manager.referral_code:
            response = vl_conversion(self.project_manager)
            context = {
                'name': self.project_manager.name,
                'title': self.title,
                'email': self.project_manager.email,
                'location': self.project_manager.location,
                'referral_code': self.project_manager.referral_code,
                'url': settings.VL_CAMPAIGN_URL
            }
            send_to_emails('referral-conversion', settings.ADMINS, context)
        self.activate()
        return self

    def deactivate(self):
        today = datetime.now().date()
        if self.expire_date and self.expire_date <= today:
            if self.sku != 'free':
                order = Order.objects.get(
                    content_type__pk=self.content_type.id,
                    object_id=self.id,
                    status='active')
                order.status = 'expired'
                order.save()
            self.status = 'expired'
            self.published = False
            self.save()
            if not self.deleted:
                template = 'project-expired-free' if self.sku == 'free' else 'project-expired'
                url = '{0}/project/upgrade/{1}/'.format(
                    settings.BASE_URL, self.slug
                ) if self.sku == 'free' else '{0}/project/renew/{1}/'.format(
                    settings.BASE_URL, self.slug)
                send_mail(
                    template, [self.project_manager], {
                        'fname': self.project_manager.first_name,
                        'title': self.title,
                        'url': url
                    })
        return self

    @property
    def content_type(self):
        return ContentType.objects.get_for_model(self)

    @property
    def location(self):
        return self.city if self.city else self.project_manager.city

    @property
    def skills_str(self):
        return self.skills.get_tag_string()

    @property
    def nda_list(self):
        ndas = NDA.objects.filter(proposal__project=self)
        nda_list = [nda.receiver.id for nda in ndas]
        nda_list.append(self.project_manager.id)
        return nda_list