e61dee7bb39246a91885ef62078d45818559bedd kent Fri Sep 6 14:01:59 2019 -0700 Switching date/deliverable order so lines up pretty. Changing some things in response to Paris's requests. diff --git src/hca/hcat/mysite/hcat/models.py src/hca/hcat/mysite/hcat/models.py index 35bf379..c501402 100644 --- src/hca/hcat/mysite/hcat/models.py +++ src/hca/hcat/mysite/hcat/models.py @@ -1,53 +1,53 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals import datetime from django.db import models from django.utils import timezone from django.core.validators import MaxValueValidator, MinValueValidator class ContributorType(models.Model): short_name = models.CharField(max_length=50, unique=True) - description = models.CharField(max_length=250) + description = models.CharField(max_length=255) comments = models.CharField(max_length=255, blank=True) def __str__(self): return self.short_name class Meta: verbose_name = 'Wrangler contributor type' class Contributor(models.Model): name = models.CharField(max_length=255, unique=True) email = models.EmailField(max_length=128, blank=True) phone = models.CharField(max_length=32, blank=True) address = models.CharField(max_length=255, blank=True) department = models.CharField(max_length=255, blank=True) institute = models.CharField(max_length=255, blank=True) city = models.CharField(max_length=100, blank=True) zip_postal_code = models.CharField(max_length=20, blank=True) country = models.CharField(max_length = 100, blank=True) projects = models.ManyToManyField("Project", blank=True, through="project_contributors") labs = models.ManyToManyField("Lab", blank=True, through="lab_contributors") grants = models.ManyToManyField("Grant", blank=True, through="grant_funded_contributors") type = models.ForeignKey(ContributorType, blank=True, null=True, default=None, on_delete=models.SET_NULL) comments = models.CharField(max_length=255, blank=True) def __str__(self): return self.name class Lab(models.Model): short_name = models.CharField(max_length=50, unique=True) - institution = models.CharField(max_length=250, null=True, blank=True) + institution = models.CharField(max_length=255, null=True, blank=True) #contacts = models.ManyToManyField(Contributor, related_name="contacts") pi = models.ForeignKey(Contributor, blank=True, null=True, default=None, on_delete=models.SET_NULL, related_name="pi") contributors = models.ManyToManyField(Contributor, blank=True, related_name="contributors") projects = models.ManyToManyField("Project", blank=True, through="project_labs") grants = models.ManyToManyField("Grant", blank=True, through="grant_funded_labs") comments = models.CharField(max_length=255, blank=True) def __str__(self): return self.short_name class Species(models.Model): common_name = models.CharField(max_length = 40) scientific_name = models.CharField(max_length=150) ncbi_taxon = models.IntegerField(unique=True) def __str__(self): return self.common_name @@ -72,169 +72,173 @@ def __str__(self): return self.short_name class Meta: verbose_name = 'Wrangler file' class ProjectState(models.Model): state = models.CharField(max_length=30, unique=True) description = models.CharField(max_length=100) def __str__(self): return self.state class Meta: verbose_name = 'Wrangler project state' class OrganPart(models.Model): short_name = models.CharField(max_length=50, unique=True) - description = models.CharField(max_length=250) + ontology_id = models.CharField(max_length=32, blank=True, null=True) + ontology_label = models.CharField(max_length=255, blank=True, null=True) + description = models.CharField(max_length=255, blank=True) projects = models.ManyToManyField("Project", blank=True, through="project_organ_part") comments = models.CharField(max_length=255, blank=True) def __str__(self): return self.short_name class Meta: verbose_name = 'Wrangler organ part' class Organ(models.Model): short_name = models.CharField(max_length=50, unique=True) - description = models.CharField(max_length=250) + ontology_id = models.CharField(max_length=32, blank=True, null=True) + ontology_label = models.CharField(max_length=255, blank=True, null=True) + description = models.CharField(max_length=255) comments = models.CharField(max_length=255, blank=True) def __str__(self): return self.short_name class Meta: verbose_name = 'Wrangler organ' class Disease(models.Model): short_name = models.CharField(max_length=50, unique=True) - description = models.CharField(max_length=250) + description = models.CharField(max_length=255) projects = models.ManyToManyField("Project", blank=True, through="project_disease", related_name='projects_diseases_relationship') comments = models.CharField(max_length=255, blank=True) def __str__(self): return self.short_name class Meta: verbose_name = 'Wrangler disease' class Consent(models.Model): short_name = models.CharField(max_length=50, unique=True) - description = models.CharField(max_length=250) + description = models.CharField(max_length=255) comments = models.CharField(max_length=255, blank=True) def __str__(self): return self.short_name class Meta: verbose_name = 'Wrangler consent' class SampleType(models.Model): short_name = models.CharField(max_length=50, unique=True) - description = models.CharField(max_length=250) + description = models.CharField(max_length=255) comments = models.CharField(max_length=255, blank=True) def __str__(self): return self.short_name class Meta: verbose_name = 'Wrangler sample type' class AssayTech(models.Model): short_name = models.CharField(max_length=50, unique=True) - description = models.CharField(max_length=250) + description = models.CharField(max_length=255) comments = models.CharField(max_length=255, blank=True) projects = models.ManyToManyField("Project", blank=True, through="project_assay_tech", related_name='projects_assay_tech_relationship') def __str__(self): return self.short_name class Meta: verbose_name = 'Wrangler assay tech' class AssayType(models.Model): short_name = models.CharField(max_length=50, unique=True) - description = models.CharField(max_length=250) + description = models.CharField(max_length=255) comments = models.CharField(max_length=255, blank=True) projects = models.ManyToManyField("Project", blank=True, through="project_assay_type", related_name='projects_assay_type_relationship') def __str__(self): return self.short_name class Meta: verbose_name = 'Wrangler assay type' class Publication(models.Model): short_name = models.CharField(max_length=50, unique=True) - title = models.CharField(max_length=250, blank=True) + title = models.CharField(max_length=255, blank=True) pmid = models.CharField(max_length=16) comments = models.CharField(max_length=255, blank=True) doi = models.CharField(max_length=32) def __str__(self): return self.short_name class Meta: verbose_name = 'Wrangler publication' class EffortType(models.Model): short_name = models.CharField(max_length=50, unique=True) description = models.CharField(max_length=255) comments = models.CharField(max_length=255, blank=True) def __str__(self): return self.short_name class Meta: verbose_name = 'Wrangler effort type' class SoftwareDeveloper(models.Model): who = models.ForeignKey(Contributor, on_delete=models.PROTECT) favorite_languages = models.CharField(max_length=255) comments = models.CharField(max_length=255, blank=True) def __str__(self): return self.who.__str__() class Meta: verbose_name = 'Wrangler software developer' -class Curator(models.Model): +class Intern(models.Model): who = models.ForeignKey(Contributor, on_delete=models.PROTECT) advisor = models.ForeignKey(Contributor, null=True, on_delete=models.SET_NULL, related_name='advisor') interests = models.CharField(max_length=128, blank=True) comments = models.CharField(max_length=255, blank=True) def __str__(self): return self.who.__str__() + class Meta: + verbose_name = 'Wrangler intern' class Wrangler(models.Model): who = models.ForeignKey(Contributor, on_delete=models.PROTECT) favorite_site = models.URLField(null=True,blank=True) comments = models.CharField(max_length=255, blank=True) def __str__(self): return self.who.__str__() class Project(models.Model): short_name = models.CharField(max_length=80) cur_state = models.ForeignKey(ProjectState, blank=True, null=True, default=None, on_delete=models.SET_NULL, related_name="cur_state") comments = models.CharField(max_length=255, blank=True) state_reached = models.ForeignKey(ProjectState, blank=True, null=True, default=None, on_delete=models.SET_NULL, related_name="state_reached") stars = models.IntegerField(blank=True,validators=[MinValueValidator(1),MaxValueValidator(5)], default=3) chat_url = models.URLField(blank=True, null=True) wrangler1 = models.ForeignKey(Wrangler, blank=True, null=True, default=None, on_delete=models.SET_NULL, related_name="wrangler1"); wrangler2 = models.ForeignKey(Wrangler, blank=True, null=True, default=None, on_delete=models.SET_NULL, related_name="wrangler2"); contacts = models.ManyToManyField(Contributor, blank=True, related_name="projcontacts") first_contact_date = models.DateField(blank=True, null=True, default=None) last_contact_date = models.DateField(blank=True, null=True, default=None) responders = models.ManyToManyField(Contributor, blank=True, related_name="projresponders") first_response_date = models.DateField(blank=True, null=True, default=None) last_response_date = models.DateField(blank=True, null=True, default=None) questionnaire_comments = models.CharField(max_length=255, blank=True) questionnaire_date = models.DateField(blank=True, null=True, default=None) - tAndC = models.FileField(upload_to="uploads/project", blank=True, null=True, default=None) + tAndC_comments = models.CharField(max_length=255, blank=True) tAndC_date = models.DateField(blank=True, null=True, default=None) sheet_template = models.FileField(upload_to="uploads/project", blank=True, null=True, default=None) sheet_template_date = models.DateField(blank=True, null=True, default=None) sheet_from_lab = models.FileField(upload_to="uploads/project", blank=True, null=True, default=None) sheet_from_lab_date = models.DateField(blank=True, null=True, default=None) - curator_assigned = models.ForeignKey(Curator, blank=True, null=True, default=None, on_delete=models.SET_NULL) - curator_assigned_date = models.DateField(blank=True, null=True, default=None) - sheet_curated = models.FileField(upload_to="uploads/project", blank=True, null=True, default=None) - sheet_curated_date = models.DateField(blank=True, null=True, default=None) - review_comments = models.CharField(max_length=255, blank=True) - review_accepted_date = models.DateField(blank=True, null=True, default=None) - sheet_validated = models.FileField(upload_to="uploads/project", blank=True, null=True, default=None) + back_to_lab = models.FileField(upload_to="uploads/project", blank=True, null=True, default=None) + back_to_lab_date = models.DateField(blank=True, null=True, default=None) + lab_review_comments = models.CharField(max_length=255, blank=True) + lab_review_date = models.DateField(blank=True, null=True, default=None) + sheet_that_validated = models.FileField(upload_to="uploads/project", blank=True, null=True, default=None) sheet_validated_date = models.DateField(blank=True, null=True, default=None) staging_area = models.URLField(blank=True, null=True) staging_area_date = models.DateField(blank=True, null=True, default=None) submit_date = models.DateField(blank=True, null=True, default=None) submit_comments = models.CharField(max_length=255, blank=True) cloud_date = models.DateField(blank=True, null=True, default=None) pipeline_date = models.DateField(blank=True, null=True, default=None) orange_date = models.DateField(blank=True, null=True, default=None) title = models.CharField(max_length=120) description = models.TextField() labs = models.ManyToManyField(Lab, blank=True) organ = models.ManyToManyField(Organ, blank=True) organ_part = models.ManyToManyField(OrganPart, blank=True) disease = models.ManyToManyField(Disease, blank=True) sample_type = models.ManyToManyField(SampleType, blank=True)