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
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"
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')
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'
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