7779544a249575ac1d472f5ab7c0c7c56ac91003
kent
  Thu Aug 29 16:54:41 2019 -0700
First committed cut of Human Cell Atlas Tracker (HCAT) - a Django based relational database and webworks aimed at helping track progress of projects being imported into the HCA-DCP.

diff --git src/hca/hcat/mysite/hcat/models.py src/hca/hcat/mysite/hcat/models.py
new file mode 100644
index 0000000..da2f110
--- /dev/null
+++ src/hca/hcat/mysite/hcat/models.py
@@ -0,0 +1,103 @@
+# -*- 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 Contributor(models.Model):
+    name = models.CharField(max_length=250, unique=True)
+    email = models.EmailField(max_length=254, blank=True)
+    phone = models.CharField(max_length=25, blank=True)
+    project_role = models.CharField(max_length=100, default="contributor")
+    def __str__(self):
+       return self.name
+
+class Lab(models.Model):
+    short_name =  models.CharField(max_length=50)
+    institution = models.CharField(max_length=250, blank="")
+    contributors = models.ManyToManyField(Contributor)
+    contact = models.ForeignKey(Contributor, null=True, default=None, on_delete=models.SET_NULL, related_name="contact")
+    pi = models.ForeignKey(Contributor, null=True, default=None, on_delete=models.SET_NULL, related_name="pi")
+    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()
+     def __str__(self):
+       return self.common_name
+
+class ProjectState(models.Model):
+    state = models.CharField(max_length=30)
+    description = models.CharField(max_length=100)
+    def __str__(self):
+       return self.state
+
+class OrganPart(models.Model):
+    short_name = models.CharField(max_length=50)
+    description = models.CharField(max_length=250)
+    def __str__(self):
+        return self.short_name
+
+class Organ(models.Model):
+    short_name = models.CharField(max_length=50)
+    description = models.CharField(max_length=250)
+    def __str__(self):
+        return self.short_name
+    
+class Disease(models.Model):
+    short_name = models.CharField(max_length=50)
+    description = models.CharField(max_length=250)
+    def __str__(self):
+        return self.short_name
+
+class Consent(models.Model):
+    short_name = models.CharField(max_length=50)
+    description = models.CharField(max_length=250)
+    def __str__(self):
+        return self.short_name
+
+class SampleType(models.Model):
+    short_name = models.CharField(max_length=50)
+    description = models.CharField(max_length=250)
+    def __str__(self):
+        return self.short_name
+
+class Project(models.Model):
+    short_name = models.CharField(max_length=80)
+    state = models.ForeignKey(ProjectState, blank=True, null=True, default=None, on_delete=models.SET_NULL)
+    priority = models.IntegerField(blank=True,validators=[MinValueValidator(1),MaxValueValidator(5)], default=3)
+    wrangler1 = models.ForeignKey(Contributor, blank=True, null=True, default=None, on_delete=models.SET_NULL, related_name="wrangler1")
+    wrangler2 = models.ForeignKey(Contributor, blank=True, null=True, default=None, on_delete=models.SET_NULL, related_name="wrangler2")
+    title = models.CharField(max_length=120)
+    description = models.TextField()
+    labs = models.ManyToManyField(Lab, blank=True)
+    contributors = models.ManyToManyField(Contributor)
+    species = models.ManyToManyField(Species, 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)
+    consent = models.ForeignKey(Consent, blank=True, null=True, default=None, on_delete=models.SET_NULL)
+    def __str__(self):
+       return self.short_name
+
+class Funder(models.Model):
+    short_name = models.CharField(max_length=50)
+    description = models.TextField()
+    def __str__(self):
+       return self.short_name
+
+class Grant(models.Model):
+    grant_title = models.CharField(max_length=200)
+    grant_id = models.CharField(max_length=200)
+    funder = models.ForeignKey(Funder, null=True, default=None, on_delete=models.SET_NULL)
+    funded_projects = models.ManyToManyField(Project, blank=True)
+    funded_labs = models.ManyToManyField(Lab, blank=True)
+    funded_contributors = models.ManyToManyField(Contributor, blank=True)
+    def __str__(self):
+       return self.grant_title
+