From 3be40fe7dacb18efdbcf45164d79ad45a86190da Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Sat, 30 Jan 2016 17:05:59 -0700 Subject: [PATCH 1/6] Species --- ccdb/species/__init__.py | 0 ccdb/species/admin.py | 14 ++++++++ ccdb/species/migrations/0001_initial.py | 34 +++++++++++++++++++ ccdb/species/migrations/__init__.py | 0 ccdb/species/models.py | 20 +++++++++++ ccdb/utils/management/commands/import_data.py | 7 ++++ config/settings/base.py | 1 + misc/existing.py | 14 -------- 8 files changed, 76 insertions(+), 14 deletions(-) create mode 100644 ccdb/species/__init__.py create mode 100644 ccdb/species/admin.py create mode 100644 ccdb/species/migrations/0001_initial.py create mode 100644 ccdb/species/migrations/__init__.py create mode 100644 ccdb/species/models.py diff --git a/ccdb/species/__init__.py b/ccdb/species/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/ccdb/species/admin.py b/ccdb/species/admin.py new file mode 100644 index 0000000..ab1991a --- /dev/null +++ b/ccdb/species/admin.py @@ -0,0 +1,14 @@ +from django.contrib import admin + +from .models import Species + + +class SpeciesAdmin(admin.ModelAdmin): + list_display = ('common_name', 'genus', 'species', 'parasite', 'sort_order') + list_display_links = ('common_name',) + search_fields = ('common_name', 'genus', 'species', 'parasite') + list_per_page = 25 + fields = ('common_name', 'genus', 'species', 'parasite', 'sort_order') + + +admin.site.register(Species, SpeciesAdmin) diff --git a/ccdb/species/migrations/0001_initial.py b/ccdb/species/migrations/0001_initial.py new file mode 100644 index 0000000..cc2dcf5 --- /dev/null +++ b/ccdb/species/migrations/0001_initial.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +import autoslug.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Species', + fields=[ + ('id', models.AutoField(primary_key=True, verbose_name='ID', serialize=False, auto_created=True)), + ('common_name', models.CharField(max_length=100)), + ('genus', models.CharField(max_length=50, blank=True)), + ('species', models.CharField(max_length=50, blank=True)), + ('parasite', models.BooleanField(default=False)), + ('sort_order', models.IntegerField(blank=True, null=True)), + ('slug', autoslug.fields.AutoSlugField(editable=False, populate_from='common_name')), + ], + options={ + 'ordering': ['sort_order'], + 'verbose_name_plural': 'species', + }, + ), + migrations.AlterUniqueTogether( + name='species', + unique_together=set([('common_name', 'species')]), + ), + ] diff --git a/ccdb/species/migrations/__init__.py b/ccdb/species/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/ccdb/species/models.py b/ccdb/species/models.py new file mode 100644 index 0000000..60a9820 --- /dev/null +++ b/ccdb/species/models.py @@ -0,0 +1,20 @@ +from django.db import models + +from autoslug import AutoSlugField + + +class Species(models.Model): + common_name = models.CharField(max_length=100) + genus = models.CharField(max_length=50, blank=True) + species = models.CharField(max_length=50, blank=True) + parasite = models.BooleanField(default=False) + sort_order = models.IntegerField(blank=True, null=True) + slug = AutoSlugField(populate_from='common_name') + + def __str__(self): + return self.common_name + + class Meta: + unique_together = ('common_name', 'species') + ordering = ['sort_order'] + verbose_name_plural = 'species' diff --git a/ccdb/utils/management/commands/import_data.py b/ccdb/utils/management/commands/import_data.py index 72ce6cb..91b9569 100644 --- a/ccdb/utils/management/commands/import_data.py +++ b/ccdb/utils/management/commands/import_data.py @@ -12,6 +12,7 @@ from ccdb.misc.models import MeasurementUnit, MeasurementType, Container, \ Material, Color from ccdb.locations.models import Region, Site, MunicipalLocation, \ StudyLocation, StorageLocation +from ccdb.species.models import Species class Command(BaseCommand): @@ -151,3 +152,9 @@ def _import_data(): room=r[3], freezer=r[4], temp_c=r[5], code=code, description=r[6], sort_order=r[7]) sl.save() + + # Species + for r in c.execute('SELECT * FROM tbl_lu_species;'): + s = Species(id=r[0], common_name=r[1], genus=r[2], species=r[3], + parasite=r[4], sort_order=r[5]) + s.save() diff --git a/config/settings/base.py b/config/settings/base.py index 52c0839..48a9031 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -42,6 +42,7 @@ LOCAL_APPS = ( 'ccdb.projects', 'ccdb.misc', 'ccdb.locations', + 'ccdb.species', ) # See: https://docs.djangoproject.com/en/dev/ref/settings/#installed-apps diff --git a/misc/existing.py b/misc/existing.py index a353673..1d9d53b 100644 --- a/misc/existing.py +++ b/misc/existing.py @@ -461,20 +461,6 @@ class TblLuSampleTypes(models.Model): unique_together = (('Sample_Type', 'Sample_Type_Code'),) -class TblLuSpecies(models.Model): - speciesid = models.AutoField(db_column='SpeciesID', primary_key=True) # Field name made lowercase. - common_name = models.CharField(db_column='Common_Name', max_length=100) # Field name made lowercase. - genus = models.CharField(db_column='Genus', max_length=50, blank=True, null=True) # Field name made lowercase. - species = models.CharField(db_column='Species', max_length=50, blank=True, null=True) # Field name made lowercase. - parasite = models.BooleanField(db_column='Parasite') # Field name made lowercase. - sort_order = models.IntegerField(db_column='Sort_Order', blank=True, null=True) # Field name made lowercase. - - class Meta: - managed = False - db_table = 'tbl_LU_Species' - unique_together = (('Common_Name', 'Species'),) - - class TblLuTreatmentTypes(models.Model): treatment_typeid = models.AutoField(db_column='Treatment_TypeID', primary_key=True) # Field name made lowercase. experimentid = models.ForeignKey(TblLuExperiments, db_column='ExperimentID', blank=True, null=True) # Field name made lowercase. From 847d4b372a0ff334f0cfaef17d341a298aef916d Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Sun, 31 Jan 2016 20:39:23 -0700 Subject: [PATCH 2/6] WIP --- ccdb/collections_ccdb/__init__.py | 0 ccdb/collections_ccdb/admin.py | 3 +++ ccdb/collections_ccdb/migrations/__init__.py | 0 ccdb/collections_ccdb/models.py | 28 ++++++++++++++++++++ config/settings/base.py | 1 + 5 files changed, 32 insertions(+) create mode 100644 ccdb/collections_ccdb/__init__.py create mode 100644 ccdb/collections_ccdb/admin.py create mode 100644 ccdb/collections_ccdb/migrations/__init__.py create mode 100644 ccdb/collections_ccdb/models.py diff --git a/ccdb/collections_ccdb/__init__.py b/ccdb/collections_ccdb/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/ccdb/collections_ccdb/admin.py b/ccdb/collections_ccdb/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/ccdb/collections_ccdb/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/ccdb/collections_ccdb/migrations/__init__.py b/ccdb/collections_ccdb/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/ccdb/collections_ccdb/models.py b/ccdb/collections_ccdb/models.py new file mode 100644 index 0000000..d88b804 --- /dev/null +++ b/ccdb/collections_ccdb/models.py @@ -0,0 +1,28 @@ +from django.db import models + +from autoslug import AutoSlugField + + +class Collection(models.Model): + projectid = models.ForeignKey('TblLuProjects', db_column='ProjectID') # Field name made lowercase. + collectionid = models.AutoField(db_column='CollectionID', primary_key=True) # Field name made lowercase. + study_locationid = models.ForeignKey('TblLuStudyLocations', db_column='Study_LocationID') # Field name made lowercase. + collection_typeid = models.ForeignKey('TblLuCollectionTypes', db_column='Collection_TypeID') # Field name made lowercase. + collection_methodid = models.ForeignKey('TblLuCollectionMethods', db_column='Collection_MethodID') # Field name made lowercase. + number_of_traps = models.IntegerField(db_column='Number_Of_Traps', blank=True, null=True) # Field name made lowercase. + collection_start_date = models.DateField(db_column='Collection_Start_Date', blank=True, null=True) # Field name made lowercase. + collection_start_time = models.TimeField(db_column='Collection_Start_Time', blank=True, null=True) # Field name made lowercase. + collection_end_date = models.DateField(db_column='Collection_End_Date', blank=True, null=True) # Field name made lowercase. + collection_end_time = models.TimeField(db_column='Collection_End_Time', blank=True, null=True) # Field name made lowercase. + storage_locationid = models.ForeignKey('TblLuStorageLocations', db_column='Storage_LocationID', blank=True, null=True) # Field name made lowercase. + specimen_state = models.CharField(db_column='Specimen_State', max_length=50, blank=True, null=True) # Field name made lowercase. + process_typeid = models.ForeignKey('TblLuProcessTypes', db_column='Process_TypeID', blank=True, null=True) # Field name made lowercase. + reagentid = models.ForeignKey('TblLuReagents', db_column='ReagentID', blank=True, null=True) # Field name made lowercase. + adfg_permit = models.CharField(db_column='ADFG_Permit', max_length=25, blank=True, null=True) # Field name made lowercase. + link_to_datasheets = models.CharField(db_column='Link_To_Datasheets', max_length=255, blank=True, null=True) # Field name made lowercase. + flawid = models.ForeignKey('TblLuRecordFlaws', db_column='FlawID', blank=True, null=True) # Field name made lowercase. + + class Meta: + managed = False + db_table = 'tbl_Collections' + unique_together = (('ProjectID', 'Study_LocationID', 'Collection_TypeID', 'Collection_Start_Date', 'Collection_End_Date', 'Collection_MethodID'),) diff --git a/config/settings/base.py b/config/settings/base.py index 48a9031..d1ee8c5 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -43,6 +43,7 @@ LOCAL_APPS = ( 'ccdb.misc', 'ccdb.locations', 'ccdb.species', + 'ccdb.collections_ccdb', ) # See: https://docs.djangoproject.com/en/dev/ref/settings/#installed-apps From 528dfcc57e621a13470ba1953047c777e9a8cd1d Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Mon, 1 Feb 2016 11:20:40 -0700 Subject: [PATCH 3/6] Fix locations integrity issue --- .../migrations/0002_remove_site_fk_dupes.py | 23 +++++++++++++++++++ ccdb/locations/models.py | 3 +-- 2 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 ccdb/locations/migrations/0002_remove_site_fk_dupes.py diff --git a/ccdb/locations/migrations/0002_remove_site_fk_dupes.py b/ccdb/locations/migrations/0002_remove_site_fk_dupes.py new file mode 100644 index 0000000..cb6dcb7 --- /dev/null +++ b/ccdb/locations/migrations/0002_remove_site_fk_dupes.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('locations', '0001_initial'), + ] + + operations = [ + migrations.RemoveField( + model_name='municipallocation', + name='site', + ), + migrations.AlterField( + model_name='studylocation', + name='site', + field=models.ForeignKey(to='locations.Site'), + ), + ] diff --git a/ccdb/locations/models.py b/ccdb/locations/models.py index eeb42d8..ef47bfe 100644 --- a/ccdb/locations/models.py +++ b/ccdb/locations/models.py @@ -33,7 +33,6 @@ class Site(models.Model): class MunicipalLocation(models.Model): - site = models.ForeignKey(Site) name = models.CharField(max_length=100) code = models.CharField(max_length=10, blank=True) municipal_location_type = models.CharField(max_length=50, blank=True) @@ -49,7 +48,7 @@ class MunicipalLocation(models.Model): class StudyLocation(models.Model): - site = models.ForeignKey(Site, blank=True, null=True) + site = models.ForeignKey(Site) name = models.CharField(max_length=100) code = models.CharField(max_length=10, blank=True) study_location_type = models.CharField(max_length=50, blank=True) From 94d7143cd2beb4eb1fe55f06ff709ef409acf986 Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Mon, 1 Feb 2016 11:20:57 -0700 Subject: [PATCH 4/6] Collections too soon --- ccdb/collections_ccdb/models.py | 47 +++++++++++++++++---------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/ccdb/collections_ccdb/models.py b/ccdb/collections_ccdb/models.py index d88b804..024558e 100644 --- a/ccdb/collections_ccdb/models.py +++ b/ccdb/collections_ccdb/models.py @@ -3,26 +3,27 @@ from django.db import models from autoslug import AutoSlugField -class Collection(models.Model): - projectid = models.ForeignKey('TblLuProjects', db_column='ProjectID') # Field name made lowercase. - collectionid = models.AutoField(db_column='CollectionID', primary_key=True) # Field name made lowercase. - study_locationid = models.ForeignKey('TblLuStudyLocations', db_column='Study_LocationID') # Field name made lowercase. - collection_typeid = models.ForeignKey('TblLuCollectionTypes', db_column='Collection_TypeID') # Field name made lowercase. - collection_methodid = models.ForeignKey('TblLuCollectionMethods', db_column='Collection_MethodID') # Field name made lowercase. - number_of_traps = models.IntegerField(db_column='Number_Of_Traps', blank=True, null=True) # Field name made lowercase. - collection_start_date = models.DateField(db_column='Collection_Start_Date', blank=True, null=True) # Field name made lowercase. - collection_start_time = models.TimeField(db_column='Collection_Start_Time', blank=True, null=True) # Field name made lowercase. - collection_end_date = models.DateField(db_column='Collection_End_Date', blank=True, null=True) # Field name made lowercase. - collection_end_time = models.TimeField(db_column='Collection_End_Time', blank=True, null=True) # Field name made lowercase. - storage_locationid = models.ForeignKey('TblLuStorageLocations', db_column='Storage_LocationID', blank=True, null=True) # Field name made lowercase. - specimen_state = models.CharField(db_column='Specimen_State', max_length=50, blank=True, null=True) # Field name made lowercase. - process_typeid = models.ForeignKey('TblLuProcessTypes', db_column='Process_TypeID', blank=True, null=True) # Field name made lowercase. - reagentid = models.ForeignKey('TblLuReagents', db_column='ReagentID', blank=True, null=True) # Field name made lowercase. - adfg_permit = models.CharField(db_column='ADFG_Permit', max_length=25, blank=True, null=True) # Field name made lowercase. - link_to_datasheets = models.CharField(db_column='Link_To_Datasheets', max_length=255, blank=True, null=True) # Field name made lowercase. - flawid = models.ForeignKey('TblLuRecordFlaws', db_column='FlawID', blank=True, null=True) # Field name made lowercase. - - class Meta: - managed = False - db_table = 'tbl_Collections' - unique_together = (('ProjectID', 'Study_LocationID', 'Collection_TypeID', 'Collection_Start_Date', 'Collection_End_Date', 'Collection_MethodID'),) +# class Collection(models.Model): +# project = models.ForeignKey('projects.Project') +# study_location = models.ForeignKey('locations.StudyLocation') +# collection_type = models.ForeignKey(CollectionType) +# collection_method = models.ForeignKey(CollectionMethod) +# number_of_traps = models.IntegerField(blank=True, null=True) +# collection_start_date = models.DateField(blank=True, null=True) +# collection_start_time = models.TimeField(blank=True, null=True) +# collection_end_date = models.DateField(blank=True, null=True) +# collection_end_time = models.TimeField(blank=True, null=True) +# storage_location = models.ForeignKey('locations.StorageLocation', blank=True, null=True) +# specimen_state = models.CharField(max_length=50, blank=True) +# process_type = models.ForeignKey('processing.ProcessType', blank=True, null=True) +# reagent = models.ForeignKey('processing.Reagent', blank=True, null=True) +# # adfg_permit = models.CharField(db_column='ADFG_Permit', max_length=25, blank=True, null=True) # Field name made lowercase. +# # link_to_datasheets = models.CharField(db_column='Link_To_Datasheets', max_length=255, blank=True, null=True) # Field name made lowercase. +# flaw = models.ForeignKey(Flaw, blank=True, null=True) +# +# def __str__(self): +# return "{project} {study_location} {collection_type} {collection_method}".format(**self) +# +# class Meta: +# unique_together = ('project', 'study_location', 'collection_type', +# 'collection_start_date', 'collection_end_date', 'collection_method') From 60601beacb76c0f09ef7641d38e13d3b96dbb2c1 Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Mon, 1 Feb 2016 11:21:11 -0700 Subject: [PATCH 5/6] Processing --- ccdb/processing/__init__.py | 0 ccdb/processing/admin.py | 32 +++++++ ccdb/processing/migrations/0001_initial.py | 92 +++++++++++++++++++ ccdb/processing/migrations/__init__.py | 0 ccdb/processing/models.py | 66 +++++++++++++ ccdb/utils/management/commands/import_data.py | 19 +++- config/settings/base.py | 1 + misc/existing.py | 83 ----------------- 8 files changed, 207 insertions(+), 86 deletions(-) create mode 100644 ccdb/processing/__init__.py create mode 100644 ccdb/processing/admin.py create mode 100644 ccdb/processing/migrations/0001_initial.py create mode 100644 ccdb/processing/migrations/__init__.py create mode 100644 ccdb/processing/models.py diff --git a/ccdb/processing/__init__.py b/ccdb/processing/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/ccdb/processing/admin.py b/ccdb/processing/admin.py new file mode 100644 index 0000000..be47cee --- /dev/null +++ b/ccdb/processing/admin.py @@ -0,0 +1,32 @@ +from django.contrib import admin + +from .models import ProcessType, Reagent, Flaw + + +class ProcessTypeAdmin(admin.ModelAdmin): + list_display = ('name', 'code', 'description', 'sort_order') + list_display_links = ('name',) + search_fields = ('name', 'code', 'description') + list_per_page = 25 + fields = ('name', 'code', 'description', 'sort_order') + + +class ReagentAdmin(admin.ModelAdmin): + list_display = ('name', 'code', 'reagent_class', 'sort_order') + list_display_links = ('name',) + search_fields = ('name', 'code', 'reagent_class') + list_per_page = 25 + fields = ('name', 'code', 'reagent_class', 'sort_order') + + +class FlawAdmin(admin.ModelAdmin): + list_display = ('name', 'description', 'sort_order') + list_display_links = ('name',) + search_fields = ('name', 'description') + list_per_page = 25 + fields = ('name', 'description') + + +admin.site.register(ProcessType, ProcessTypeAdmin) +admin.site.register(Reagent, ReagentAdmin) +admin.site.register(Flaw, FlawAdmin) diff --git a/ccdb/processing/migrations/0001_initial.py b/ccdb/processing/migrations/0001_initial.py new file mode 100644 index 0000000..d471501 --- /dev/null +++ b/ccdb/processing/migrations/0001_initial.py @@ -0,0 +1,92 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +import autoslug.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('misc', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Flaw', + fields=[ + ('id', models.AutoField(primary_key=True, auto_created=True, verbose_name='ID', serialize=False)), + ('name', models.CharField(max_length=200)), + ('description', models.CharField(blank=True, max_length=255)), + ('sort_order', models.IntegerField(blank=True, null=True)), + ('slug', autoslug.fields.AutoSlugField(populate_from='name', editable=False)), + ], + options={ + 'ordering': ['sort_order'], + }, + ), + migrations.CreateModel( + name='Processing', + fields=[ + ('id', models.AutoField(primary_key=True, auto_created=True, verbose_name='ID', serialize=False)), + ('container_label', models.CharField(max_length=50)), + ('process_date', models.DateField(blank=True, null=True)), + ('process_time', models.TimeField(blank=True, null=True)), + ('reagent_volume', models.FloatField(blank=True, null=True)), + ('minutes_in_reagent', models.IntegerField(blank=True, null=True)), + ('container', models.ForeignKey(to='misc.Container')), + ('flaw', models.ForeignKey(to='processing.Flaw', blank=True, null=True)), + ('measurement_unit', models.ForeignKey(to='misc.MeasurementUnit', blank=True, null=True)), + ], + ), + migrations.CreateModel( + name='ProcessType', + fields=[ + ('id', models.AutoField(primary_key=True, auto_created=True, verbose_name='ID', serialize=False)), + ('name', models.CharField(max_length=100)), + ('code', models.CharField(blank=True, max_length=10)), + ('description', models.CharField(blank=True, max_length=255)), + ('sort_order', models.IntegerField(blank=True, null=True)), + ('slug', autoslug.fields.AutoSlugField(populate_from='name', editable=False)), + ], + options={ + 'ordering': ['sort_order'], + }, + ), + migrations.CreateModel( + name='Reagent', + fields=[ + ('id', models.AutoField(primary_key=True, auto_created=True, verbose_name='ID', serialize=False)), + ('name', models.CharField(max_length=100)), + ('code', models.CharField(blank=True, max_length=10)), + ('reagent_class', models.CharField(blank=True, max_length=50)), + ('sort_order', models.IntegerField(blank=True, null=True)), + ('slug', autoslug.fields.AutoSlugField(populate_from='name', editable=False)), + ], + options={ + 'ordering': ['sort_order'], + }, + ), + migrations.AlterUniqueTogether( + name='reagent', + unique_together=set([('name', 'code')]), + ), + migrations.AlterUniqueTogether( + name='processtype', + unique_together=set([('name', 'code')]), + ), + migrations.AddField( + model_name='processing', + name='process_type', + field=models.ForeignKey(to='processing.ProcessType'), + ), + migrations.AddField( + model_name='processing', + name='reagent', + field=models.ForeignKey(to='processing.Reagent', blank=True, null=True), + ), + migrations.AlterUniqueTogether( + name='processing', + unique_together=set([('process_type', 'container', 'container_label', 'process_date', 'process_time', 'reagent')]), + ), + ] diff --git a/ccdb/processing/migrations/__init__.py b/ccdb/processing/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/ccdb/processing/models.py b/ccdb/processing/models.py new file mode 100644 index 0000000..639b530 --- /dev/null +++ b/ccdb/processing/models.py @@ -0,0 +1,66 @@ +from django.db import models + +from autoslug import AutoSlugField + + +class ProcessType(models.Model): + name = models.CharField(max_length=100) + code = models.CharField(max_length=10, blank=True) + description = models.CharField(max_length=255, blank=True) + sort_order = models.IntegerField(blank=True, null=True) + slug = AutoSlugField(populate_from='name') + + def __str__(self): + return self.name + + class Meta: + unique_together = ('name', 'code') + ordering = ['sort_order'] + + +class Reagent(models.Model): + name = models.CharField(max_length=100) + code = models.CharField(max_length=10, blank=True) + reagent_class = models.CharField(max_length=50, blank=True) + sort_order = models.IntegerField(blank=True, null=True) + slug = AutoSlugField(populate_from='name') + + def __str__(self): + return self.name + + class Meta: + unique_together = ('name', 'code') + ordering = ['sort_order'] + + +class Flaw(models.Model): + name = models.CharField(max_length=200) + description = models.CharField(max_length=255, blank=True) + sort_order = models.IntegerField(blank=True, null=True) + slug = AutoSlugField(populate_from='name') + + def __str__(self): + return self.name + + class Meta: + ordering = ['sort_order'] + + +class Processing(models.Model): + process_type = models.ForeignKey(ProcessType) + container = models.ForeignKey('misc.Container') + container_label = models.CharField(max_length=50) + process_date = models.DateField(blank=True, null=True) + process_time = models.TimeField(blank=True, null=True) + reagent = models.ForeignKey(Reagent, blank=True, null=True) + reagent_volume = models.FloatField(blank=True, null=True) + measurement_unit = models.ForeignKey('misc.MeasurementUnit', blank=True, null=True) + minutes_in_reagent = models.IntegerField(blank=True, null=True) + flaw = models.ForeignKey(Flaw, blank=True, null=True) + + def __str__(self): + return "{process_date} {process_type} {container_label}".format(**self) + + class Meta: + unique_together = ('process_type', 'container', 'container_label', + 'process_date', 'process_time', 'reagent') diff --git a/ccdb/utils/management/commands/import_data.py b/ccdb/utils/management/commands/import_data.py index 91b9569..fd18865 100644 --- a/ccdb/utils/management/commands/import_data.py +++ b/ccdb/utils/management/commands/import_data.py @@ -13,6 +13,7 @@ from ccdb.misc.models import MeasurementUnit, MeasurementType, Container, \ from ccdb.locations.models import Region, Site, MunicipalLocation, \ StudyLocation, StorageLocation from ccdb.species.models import Species +from ccdb.processing.models import ProcessType, Reagent, Flaw, Processing class Command(BaseCommand): @@ -24,7 +25,7 @@ class Command(BaseCommand): def handle(self, **options): _fetch_data(options['manifest_url'], self.stdout.write) self.stdout.write('Fetched data') - _import_data() + _import_admin_data() self.stdout.write('Imported data') @@ -44,7 +45,7 @@ def _fetch_data(url, write): out_file.write(chunk) -def _import_data(): +def _import_admin_data(): c = setup_sqlite() if c: # Projects @@ -126,7 +127,7 @@ def _import_data(): # Municipal Locations for r in c.execute('SELECT * FROM tbl_lu_municipal_locations;'): - ml = MunicipalLocation(site_id=r[0], id=r[1], name=r[2], code=r[3], + ml = MunicipalLocation(id=r[1], name=r[2], code=r[3], municipal_location_type=r[4], description=r[5], sort_order=r[6]) ml.save() @@ -158,3 +159,15 @@ def _import_data(): s = Species(id=r[0], common_name=r[1], genus=r[2], species=r[3], parasite=r[4], sort_order=r[5]) s.save() + + # Processing Type + for r in c.execute('SELECT * FROM tbl_lu_process_types;'): + pt = ProcessType(id=r[0], name=r[1], code=r[2], description=r[3], + sort_order=r[4]) + pt.save() + + # Reagent + for r in c.execute('SELECT * FROM tbl_lu_reagents;'): + r = Reagent(id=r[0], name=r[1], code=r[2], reagent_class=r[3], + sort_order=r[4]) + r.save() diff --git a/config/settings/base.py b/config/settings/base.py index d1ee8c5..bff0974 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -44,6 +44,7 @@ LOCAL_APPS = ( 'ccdb.locations', 'ccdb.species', 'ccdb.collections_ccdb', + 'ccdb.processing', ) # See: https://docs.djangoproject.com/en/dev/ref/settings/#installed-apps diff --git a/misc/existing.py b/misc/existing.py index 1d9d53b..0ff04df 100644 --- a/misc/existing.py +++ b/misc/existing.py @@ -74,31 +74,6 @@ class TblBioReplicates(models.Model): db_table = 'tbl_Bio_Replicates' -class TblCollections(models.Model): - projectid = models.ForeignKey('TblLuProjects', db_column='ProjectID') # Field name made lowercase. - collectionid = models.AutoField(db_column='CollectionID', primary_key=True) # Field name made lowercase. - study_locationid = models.ForeignKey('TblLuStudyLocations', db_column='Study_LocationID') # Field name made lowercase. - collection_typeid = models.ForeignKey('TblLuCollectionTypes', db_column='Collection_TypeID') # Field name made lowercase. - collection_methodid = models.ForeignKey('TblLuCollectionMethods', db_column='Collection_MethodID') # Field name made lowercase. - number_of_traps = models.IntegerField(db_column='Number_Of_Traps', blank=True, null=True) # Field name made lowercase. - collection_start_date = models.DateField(db_column='Collection_Start_Date', blank=True, null=True) # Field name made lowercase. - collection_start_time = models.TimeField(db_column='Collection_Start_Time', blank=True, null=True) # Field name made lowercase. - collection_end_date = models.DateField(db_column='Collection_End_Date', blank=True, null=True) # Field name made lowercase. - collection_end_time = models.TimeField(db_column='Collection_End_Time', blank=True, null=True) # Field name made lowercase. - storage_locationid = models.ForeignKey('TblLuStorageLocations', db_column='Storage_LocationID', blank=True, null=True) # Field name made lowercase. - specimen_state = models.CharField(db_column='Specimen_State', max_length=50, blank=True, null=True) # Field name made lowercase. - process_typeid = models.ForeignKey('TblLuProcessTypes', db_column='Process_TypeID', blank=True, null=True) # Field name made lowercase. - reagentid = models.ForeignKey('TblLuReagents', db_column='ReagentID', blank=True, null=True) # Field name made lowercase. - adfg_permit = models.CharField(db_column='ADFG_Permit', max_length=25, blank=True, null=True) # Field name made lowercase. - link_to_datasheets = models.CharField(db_column='Link_To_Datasheets', max_length=255, blank=True, null=True) # Field name made lowercase. - flawid = models.ForeignKey('TblLuRecordFlaws', db_column='FlawID', blank=True, null=True) # Field name made lowercase. - - class Meta: - managed = False - db_table = 'tbl_Collections' - unique_together = (('ProjectID', 'Study_LocationID', 'Collection_TypeID', 'Collection_Start_Date', 'Collection_End_Date', 'Collection_MethodID'),) - - class TblComments(models.Model): record_typeid = models.ForeignKey('TblLuRecordTypes', db_column='Record_TypeID') # Field name made lowercase. foreign_key = models.AutoField(db_column='Foreign_Key') # Field name made lowercase. @@ -399,45 +374,6 @@ class TblLuPeople(models.Model): unique_together = (('First_Name', 'Middle_Initial', 'Last_Name'),) -class TblLuProcessTypes(models.Model): - process_typeid = models.AutoField(db_column='Process_TypeID', primary_key=True) # Field name made lowercase. - process_type = models.CharField(db_column='Process_Type', max_length=100) # Field name made lowercase. - process_type_code = models.CharField(db_column='Process_Type_Code', max_length=10, blank=True, null=True) # Field name made lowercase. - ptype_short_description = models.CharField(db_column='PType_Short_Description', max_length=255, blank=True, null=True) # Field name made lowercase. - sort_order = models.IntegerField(db_column='Sort_Order', blank=True, null=True) # Field name made lowercase. - - class Meta: - managed = False - db_table = 'tbl_LU_Process_Types' - unique_together = (('Process_Type', 'Process_Type_Code'),) - - -class TblLuReagents(models.Model): - reagentid = models.AutoField(db_column='ReagentID', primary_key=True) # Field name made lowercase. - reagent = models.CharField(db_column='Reagent', max_length=100) # Field name made lowercase. - reagent_code = models.CharField(db_column='Reagent_Code', max_length=10, blank=True, null=True) # Field name made lowercase. - reagent_class = models.CharField(db_column='Reagent_Class', max_length=50, blank=True, null=True) # Field name made lowercase. - sort_order = models.IntegerField(db_column='Sort_Order', blank=True, null=True) # Field name made lowercase. - - class Meta: - managed = False - db_table = 'tbl_LU_Reagents' - unique_together = (('Reagent', 'Reagent_Code'),) - - -class TblLuRecordFlaws(models.Model): - flawid = models.AutoField(db_column='FlawID', primary_key=True) # Field name made lowercase. - record_typeid = models.ForeignKey('TblLuRecordTypes', db_column='Record_TypeID') # Field name made lowercase. - flaw = models.CharField(db_column='Flaw', max_length=200) # Field name made lowercase. - flaw_short_description = models.CharField(db_column='Flaw_Short_Description', max_length=255, blank=True, null=True) # Field name made lowercase. - sort_order = models.IntegerField(db_column='Sort_Order', blank=True, null=True) # Field name made lowercase. - - class Meta: - managed = False - db_table = 'tbl_LU_Record_Flaws' - unique_together = (('Record_TypeID', 'Flaw'),) - - class TblLuRecordTypes(models.Model): record_typeid = models.AutoField(db_column='Record_TypeID', primary_key=True) # Field name made lowercase. record_type = models.CharField(db_column='Record_Type', unique=True, max_length=50) # Field name made lowercase. @@ -492,25 +428,6 @@ class TblLuUsers(models.Model): db_table = 'tbl_LU_Users' -class TblProcessing(models.Model): - processid = models.AutoField(db_column='ProcessID', primary_key=True) # Field name made lowercase. - process_typeid = models.ForeignKey(TblLuProcessTypes, db_column='Process_TypeID') # Field name made lowercase. - containerid = models.ForeignKey(TblLuContainers, db_column='ContainerID') # Field name made lowercase. - container_label = models.CharField(db_column='Container_Label', max_length=50) # Field name made lowercase. - process_date = models.DateField(db_column='Process_Date', blank=True, null=True) # Field name made lowercase. - process_time = models.TimeField(db_column='Process_Time', blank=True, null=True) # Field name made lowercase. - reagentid = models.ForeignKey(TblLuReagents, db_column='ReagentID', blank=True, null=True) # Field name made lowercase. - reagent_volume = models.FloatField(db_column='Reagent_Volume', blank=True, null=True) # Field name made lowercase. - measurement_unitid = models.ForeignKey(TblLuMeasurementUnits, db_column='Measurement_UnitID', blank=True, null=True) # Field name made lowercase. - time_in_reagent = models.CharField(db_column='Time_in_Reagent', max_length=10, blank=True, null=True) # Field name made lowercase. - flawid = models.ForeignKey(TblLuRecordFlaws, db_column='FlawID', blank=True, null=True) # Field name made lowercase. - - class Meta: - managed = False - db_table = 'tbl_Processing' - unique_together = (('Process_TypeID', 'ContainerID', 'Container_Label', 'Process_Date', 'Process_Time', 'ReagentID'),) - - class TblSamples(models.Model): trrepid = models.ForeignKey('TblTreatmentReplicates', db_column='TrRepID') # Field name made lowercase. sampleid = models.AutoField(db_column='SampleID', primary_key=True) # Field name made lowercase. From 2c8681217b5a72f16d4daa3d818f0446b97f7677 Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Mon, 1 Feb 2016 13:04:51 -0700 Subject: [PATCH 6/6] Finish up collections admin --- ccdb/collections_ccdb/__init__.py | 1 + ccdb/collections_ccdb/admin.py | 59 ++++++- ccdb/collections_ccdb/apps.py | 7 + .../migrations/0001_initial.py | 158 ++++++++++++++++++ ccdb/collections_ccdb/models.py | 124 +++++++++++--- ccdb/utils/management/commands/import_data.py | 39 ++++- misc/existing.py | 41 ----- 7 files changed, 361 insertions(+), 68 deletions(-) create mode 100644 ccdb/collections_ccdb/apps.py create mode 100644 ccdb/collections_ccdb/migrations/0001_initial.py diff --git a/ccdb/collections_ccdb/__init__.py b/ccdb/collections_ccdb/__init__.py index e69de29..b297d36 100644 --- a/ccdb/collections_ccdb/__init__.py +++ b/ccdb/collections_ccdb/__init__.py @@ -0,0 +1 @@ +default_app_config = 'ccdb.collections_ccdb.apps.CollectionsAppConfig' diff --git a/ccdb/collections_ccdb/admin.py b/ccdb/collections_ccdb/admin.py index 8c38f3f..2c7e154 100644 --- a/ccdb/collections_ccdb/admin.py +++ b/ccdb/collections_ccdb/admin.py @@ -1,3 +1,60 @@ from django.contrib import admin -# Register your models here. +from .models import CollectionType, CollectionMethod, Flaw, ADFGPermit, \ + DatasheetAttachment, CollectionTrap + + +class CollectionTypeAdmin(admin.ModelAdmin): + list_display = ('name', 'code', 'sort_order') + list_display_links = ('name',) + search_fields = ('name', 'code') + list_per_page = 25 + fields = ('name', 'code', 'sort_order') + + +class CollectionMethodAdmin(admin.ModelAdmin): + list_display = ('name', 'code', 'collection_method_class', 'sort_order') + list_display_links = ('name',) + search_fields = ('name', 'code', 'collection_method_class') + list_per_page = 25 + fields = ('name', 'code', 'collection_method_class', 'sort_order') + + +class FlawAdmin(admin.ModelAdmin): + list_display = ('name', 'description', 'sort_order') + list_display_links = ('name',) + search_fields = ('name', 'description') + list_per_page = 25 + fields = ('name', 'description') + + +class ADFGPermitAdmin(admin.ModelAdmin): + list_display = ('name', 'sort_order') + list_display_links = ('name',) + search_fields = ('name',) + list_per_page = 25 + fields = ('name', 'sort_order') + + +class DatasheetAttachmentAdmin(admin.ModelAdmin): + list_display = ('collection', 'datasheet') + list_display_links = ('datasheet',) + list_per_page = 25 + fields = ('collection', 'datasheet') + + +class CollectionTrapAdmin(admin.ModelAdmin): + list_display = ('collection', 'number_of_traps', 'date_opened', + 'time_opened', 'date_closed', 'time_closed') + list_display_links = ('number_of_traps',) + list_per_page = 25 + fields = ('collection', 'number_of_traps', 'date_opened', + 'time_opened', 'date_closed', 'time_closed') + + +admin.site.register(CollectionType, CollectionTypeAdmin) +admin.site.register(CollectionMethod, CollectionMethodAdmin) +admin.site.register(Flaw, FlawAdmin) +admin.site.register(ADFGPermit, ADFGPermitAdmin) +admin.site.register(DatasheetAttachment, DatasheetAttachmentAdmin) +admin.site.register(CollectionTrap, CollectionTrapAdmin) diff --git a/ccdb/collections_ccdb/apps.py b/ccdb/collections_ccdb/apps.py new file mode 100644 index 0000000..f5b0b6b --- /dev/null +++ b/ccdb/collections_ccdb/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig + + +# This is needed because 'collections' is part of the Python Std Lib +class CollectionsAppConfig(AppConfig): + name = 'ccdb.collections_ccdb' + verbose_name = 'Collections' diff --git a/ccdb/collections_ccdb/migrations/0001_initial.py b/ccdb/collections_ccdb/migrations/0001_initial.py new file mode 100644 index 0000000..402332d --- /dev/null +++ b/ccdb/collections_ccdb/migrations/0001_initial.py @@ -0,0 +1,158 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +import autoslug.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('locations', '0002_remove_site_fk_dupes'), + ('projects', '0004_initial_grantreport'), + ('processing', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='ADFGPermit', + fields=[ + ('id', models.AutoField(primary_key=True, serialize=False, verbose_name='ID', auto_created=True)), + ('name', models.CharField(max_length=200)), + ('sort_order', models.IntegerField(null=True, blank=True)), + ('slug', autoslug.fields.AutoSlugField(editable=False, populate_from='name')), + ], + options={ + 'ordering': ['sort_order'], + }, + ), + migrations.CreateModel( + name='Collection', + fields=[ + ('id', models.AutoField(primary_key=True, serialize=False, verbose_name='ID', auto_created=True)), + ('number_of_traps', models.IntegerField(null=True, blank=True)), + ('collection_start_date', models.DateField(null=True, blank=True)), + ('collection_start_time', models.TimeField(null=True, blank=True)), + ('collection_end_date', models.DateField(null=True, blank=True)), + ('collection_end_time', models.TimeField(null=True, blank=True)), + ('specimen_state', models.CharField(max_length=50, blank=True)), + ('adfg_permit', models.ForeignKey(to='collections_ccdb.ADFGPermit', blank=True, null=True)), + ], + ), + migrations.CreateModel( + name='CollectionMethod', + fields=[ + ('id', models.AutoField(primary_key=True, serialize=False, verbose_name='ID', auto_created=True)), + ('name', models.CharField(max_length=100)), + ('code', models.CharField(max_length=10, blank=True)), + ('collection_method_class', models.CharField(max_length=50, blank=True)), + ('sort_order', models.IntegerField(null=True, blank=True)), + ('slug', autoslug.fields.AutoSlugField(editable=False, populate_from='name')), + ], + options={ + 'ordering': ['sort_order'], + }, + ), + migrations.CreateModel( + name='CollectionTrap', + fields=[ + ('id', models.AutoField(primary_key=True, serialize=False, verbose_name='ID', auto_created=True)), + ('number_of_traps', models.IntegerField()), + ('date_opened', models.DateField()), + ('time_opened', models.TimeField()), + ('date_closed', models.DateField()), + ('time_closed', models.TimeField()), + ('collection', models.ForeignKey(to='collections_ccdb.Collection')), + ], + ), + migrations.CreateModel( + name='CollectionType', + fields=[ + ('id', models.AutoField(primary_key=True, serialize=False, verbose_name='ID', auto_created=True)), + ('name', models.CharField(max_length=100)), + ('code', models.CharField(max_length=10, blank=True)), + ('sort_order', models.IntegerField(null=True, blank=True)), + ('slug', autoslug.fields.AutoSlugField(editable=False, populate_from='name')), + ], + options={ + 'ordering': ['sort_order'], + }, + ), + migrations.CreateModel( + name='DatasheetAttachment', + fields=[ + ('id', models.AutoField(primary_key=True, serialize=False, verbose_name='ID', auto_created=True)), + ('datasheet', models.FileField(verbose_name='Datasheet', upload_to='collections/datasheets/%Y/%m/%d')), + ('collection', models.ForeignKey(to='collections_ccdb.Collection')), + ], + ), + migrations.CreateModel( + name='Flaw', + fields=[ + ('id', models.AutoField(primary_key=True, serialize=False, verbose_name='ID', auto_created=True)), + ('name', models.CharField(max_length=200)), + ('description', models.CharField(max_length=255, blank=True)), + ('sort_order', models.IntegerField(null=True, blank=True)), + ('slug', autoslug.fields.AutoSlugField(editable=False, populate_from='name')), + ], + options={ + 'ordering': ['sort_order'], + }, + ), + migrations.AlterUniqueTogether( + name='collectiontype', + unique_together=set([('name', 'code')]), + ), + migrations.AlterUniqueTogether( + name='collectionmethod', + unique_together=set([('name', 'code')]), + ), + migrations.AddField( + model_name='collection', + name='collection_method', + field=models.ForeignKey(to='collections_ccdb.CollectionMethod'), + ), + migrations.AddField( + model_name='collection', + name='collection_type', + field=models.ForeignKey(to='collections_ccdb.CollectionType'), + ), + migrations.AddField( + model_name='collection', + name='flaw', + field=models.ForeignKey(to='collections_ccdb.Flaw', blank=True, null=True), + ), + migrations.AddField( + model_name='collection', + name='process_type', + field=models.ForeignKey(to='processing.ProcessType', blank=True, null=True), + ), + migrations.AddField( + model_name='collection', + name='project', + field=models.ForeignKey(to='projects.Project'), + ), + migrations.AddField( + model_name='collection', + name='reagent', + field=models.ForeignKey(to='processing.Reagent', blank=True, null=True), + ), + migrations.AddField( + model_name='collection', + name='storage_location', + field=models.ForeignKey(to='locations.StorageLocation', blank=True, null=True), + ), + migrations.AddField( + model_name='collection', + name='study_location', + field=models.ForeignKey(to='locations.StudyLocation'), + ), + migrations.AlterUniqueTogether( + name='collectiontrap', + unique_together=set([('collection', 'date_opened', 'time_opened', 'date_closed', 'time_closed')]), + ), + migrations.AlterUniqueTogether( + name='collection', + unique_together=set([('project', 'study_location', 'collection_type', 'collection_start_date', 'collection_end_date', 'collection_method')]), + ), + ] diff --git a/ccdb/collections_ccdb/models.py b/ccdb/collections_ccdb/models.py index 024558e..63e810d 100644 --- a/ccdb/collections_ccdb/models.py +++ b/ccdb/collections_ccdb/models.py @@ -3,27 +3,103 @@ from django.db import models from autoslug import AutoSlugField -# class Collection(models.Model): -# project = models.ForeignKey('projects.Project') -# study_location = models.ForeignKey('locations.StudyLocation') -# collection_type = models.ForeignKey(CollectionType) -# collection_method = models.ForeignKey(CollectionMethod) -# number_of_traps = models.IntegerField(blank=True, null=True) -# collection_start_date = models.DateField(blank=True, null=True) -# collection_start_time = models.TimeField(blank=True, null=True) -# collection_end_date = models.DateField(blank=True, null=True) -# collection_end_time = models.TimeField(blank=True, null=True) -# storage_location = models.ForeignKey('locations.StorageLocation', blank=True, null=True) -# specimen_state = models.CharField(max_length=50, blank=True) -# process_type = models.ForeignKey('processing.ProcessType', blank=True, null=True) -# reagent = models.ForeignKey('processing.Reagent', blank=True, null=True) -# # adfg_permit = models.CharField(db_column='ADFG_Permit', max_length=25, blank=True, null=True) # Field name made lowercase. -# # link_to_datasheets = models.CharField(db_column='Link_To_Datasheets', max_length=255, blank=True, null=True) # Field name made lowercase. -# flaw = models.ForeignKey(Flaw, blank=True, null=True) -# -# def __str__(self): -# return "{project} {study_location} {collection_type} {collection_method}".format(**self) -# -# class Meta: -# unique_together = ('project', 'study_location', 'collection_type', -# 'collection_start_date', 'collection_end_date', 'collection_method') +class CollectionType(models.Model): + name = models.CharField(max_length=100) + code = models.CharField(max_length=10, blank=True) + sort_order = models.IntegerField(blank=True, null=True) + slug = AutoSlugField(populate_from='name') + + def __str__(self): + return self.name + + class Meta: + unique_together = ('name', 'code') + ordering = ['sort_order'] + + +class CollectionMethod(models.Model): + name = models.CharField(max_length=100) + code = models.CharField(max_length=10, blank=True) + collection_method_class = models.CharField(max_length=50, blank=True) + sort_order = models.IntegerField(blank=True, null=True) + slug = AutoSlugField(populate_from='name') + + def __str__(self): + return self.name + + class Meta: + unique_together = ('name', 'code') + ordering = ['sort_order'] + + +class Flaw(models.Model): + name = models.CharField(max_length=200) + description = models.CharField(max_length=255, blank=True) + sort_order = models.IntegerField(blank=True, null=True) + slug = AutoSlugField(populate_from='name') + + def __str__(self): + return self.name + + class Meta: + ordering = ['sort_order'] + + +class ADFGPermit(models.Model): + name = models.CharField(max_length=200) + sort_order = models.IntegerField(blank=True, null=True) + slug = AutoSlugField(populate_from='name') + + def __str__(self): + return self.name + + class Meta: + ordering = ['sort_order'] + + +class Collection(models.Model): + project = models.ForeignKey('projects.Project') + study_location = models.ForeignKey('locations.StudyLocation') + collection_type = models.ForeignKey(CollectionType) + collection_method = models.ForeignKey(CollectionMethod) + number_of_traps = models.IntegerField(blank=True, null=True) + collection_start_date = models.DateField(blank=True, null=True) + collection_start_time = models.TimeField(blank=True, null=True) + collection_end_date = models.DateField(blank=True, null=True) + collection_end_time = models.TimeField(blank=True, null=True) + storage_location = models.ForeignKey('locations.StorageLocation', blank=True, null=True) + specimen_state = models.CharField(max_length=50, blank=True) + process_type = models.ForeignKey('processing.ProcessType', blank=True, null=True) + reagent = models.ForeignKey('processing.Reagent', blank=True, null=True) + adfg_permit = models.ForeignKey(ADFGPermit, blank=True, null=True) + flaw = models.ForeignKey(Flaw, blank=True, null=True) + + def __str__(self): + return "{} {} {} {} {} {}".format(self.project, self.study_location, + self.collection_start_date, self.collection_end_date, + self.collection_type, self.collection_method) + + class Meta: + unique_together = ('project', 'study_location', 'collection_type', + 'collection_start_date', 'collection_end_date', 'collection_method') + + +class DatasheetAttachment(models.Model): + collection = models.ForeignKey(Collection) + datasheet = models.FileField("Datasheet", + upload_to='collections/datasheets/%Y/%m/%d') + + +class CollectionTrap(models.Model): + collection = models.ForeignKey(Collection) + number_of_traps = models.IntegerField() + date_opened = models.DateField() + time_opened = models.TimeField() + date_closed = models.DateField() + time_closed = models.TimeField() + + def __str__(self): + return "{collection} {number_of_traps} {date_opened} {date_closed}".format(self) + + class Meta: + unique_together = ('collection', 'date_opened', 'time_opened', 'date_closed', 'time_closed') diff --git a/ccdb/utils/management/commands/import_data.py b/ccdb/utils/management/commands/import_data.py index fd18865..f93773d 100644 --- a/ccdb/utils/management/commands/import_data.py +++ b/ccdb/utils/management/commands/import_data.py @@ -14,6 +14,8 @@ from ccdb.locations.models import Region, Site, MunicipalLocation, \ StudyLocation, StorageLocation from ccdb.species.models import Species from ccdb.processing.models import ProcessType, Reagent, Flaw, Processing +from ccdb.collections_ccdb.models import CollectionType, CollectionMethod, \ + Flaw, ADFGPermit, Collection class Command(BaseCommand): @@ -168,6 +170,39 @@ def _import_admin_data(): # Reagent for r in c.execute('SELECT * FROM tbl_lu_reagents;'): - r = Reagent(id=r[0], name=r[1], code=r[2], reagent_class=r[3], + rg = Reagent(id=r[0], name=r[1], code=r[2], reagent_class=r[3], sort_order=r[4]) - r.save() + rg.save() + + # Collection Type + for r in c.execute('SELECT * FROM tbl_lu_collection_types;'): + ct = CollectionType(id=r[0], name=r[1], code=r[2], sort_order=r[3]) + ct.save() + + # Collection Method + for r in c.execute('SELECT * FROM tbl_lu_collection_methods;'): + cm = CollectionMethod(id=r[0], name=r[1], code=r[2], + collection_method_class=r[3], sort_order=r[4]) + cm.save() + + # Collection + for r in c.execute(''' + SELECT *, + collection_start_date AS "collection_start_date [dtdt]", + collection_start_time AS "collection_start_time [dtdt]", + collection_end_date AS "collection_end_date [dtdt]", + collection_end_time AS "collection_end_time [dtdt]" + FROM tbl_collections; + '''): + if r[14] is not '': + permit, _ = ADFGPermit.objects.get_or_create(name=r[14]) + else: + permit = None + col = Collection(project_id=r[0], id=r[1], study_location_id=r[2], + collection_type_id=r[3], collection_method_id=r[4], + number_of_traps=r[5], collection_start_date=r[17], + collection_start_time=r[18], collection_end_date=r[19], + collection_end_time=r[20], storage_location_id=r[10], + specimen_state=r[11], process_type_id=r[12], reagent_id=r[13], + adfg_permit=permit) + col.save() diff --git a/misc/existing.py b/misc/existing.py index 0ff04df..2d2af04 100644 --- a/misc/existing.py +++ b/misc/existing.py @@ -215,22 +215,6 @@ class TblHashCollectionSpecies(models.Model): unique_together = (('CollectionID', 'SpeciesID'),) -class TblHashCollectionTraps(models.Model): - colltrapid = models.AutoField(db_column='CollTrapID', primary_key=True) # Field name made lowercase. - collectionid = models.ForeignKey(TblCollections, db_column='CollectionID') # Field name made lowercase. - number_of_traps = models.IntegerField(db_column='Number_Of_Traps') # Field name made lowercase. - date_opened = models.DateField(db_column='Date_Opened') # Field name made lowercase. - time_opened = models.TimeField(db_column='Time_Opened') # Field name made lowercase. - date_closed = models.DateField(db_column='Date_Closed') # Field name made lowercase. - time_closed = models.TimeField(db_column='Time_Closed') # Field name made lowercase. - reference = models.CharField(db_column='Reference', max_length=255, blank=True, null=True) # Field name made lowercase. - - class Meta: - managed = False - db_table = 'tbl_HASH_Collection_Traps' - unique_together = (('CollectionID', 'Date_Opened', 'Time_Opened', 'Date_Closed', 'Time_Closed'),) - - class TblHashPeopleSets(models.Model): peoplesetid = models.AutoField(db_column='PeopleSetID', primary_key=True) # Field name made lowercase. record_typeid = models.ForeignKey('TblLuRecordTypes', db_column='Record_TypeID') # Field name made lowercase. @@ -293,31 +277,6 @@ class TblLuBioMolecules(models.Model): unique_together = (('BioMolecule', 'BioMolecule_Code'),) -class TblLuCollectionMethods(models.Model): - collection_methodid = models.AutoField(db_column='Collection_MethodID', primary_key=True) # Field name made lowercase. - collection_method = models.CharField(db_column='Collection_Method', max_length=100) # Field name made lowercase. - collection_method_code = models.CharField(db_column='Collection_Method_Code', max_length=10, blank=True, null=True) # Field name made lowercase. - collection_method_class = models.CharField(db_column='Collection_Method_Class', max_length=50, blank=True, null=True) # Field name made lowercase. - sort_order = models.IntegerField(db_column='Sort_Order', blank=True, null=True) # Field name made lowercase. - - class Meta: - managed = False - db_table = 'tbl_LU_Collection_Methods' - unique_together = (('Collection_Method', 'Collection_Method_Code'),) - - -class TblLuCollectionTypes(models.Model): - collection_typeid = models.AutoField(db_column='Collection_TypeID', primary_key=True) # Field name made lowercase. - collection_type = models.CharField(db_column='Collection_Type', max_length=100) # Field name made lowercase. - collection_type_code = models.CharField(db_column='Collection_Type_Code', max_length=10, blank=True, null=True) # Field name made lowercase. - sort_order = models.IntegerField(db_column='Sort_Order', blank=True, null=True) # Field name made lowercase. - - class Meta: - managed = False - db_table = 'tbl_LU_Collection_Types' - unique_together = (('Collection_Type', 'Collection_Type_Code'),) - - class TblLuCommentTypes(models.Model): comment_typeid = models.AutoField(db_column='Comment_TypeID', primary_key=True) # Field name made lowercase. comment_type = models.CharField(db_column='Comment_Type', max_length=100) # Field name made lowercase.