From e288dabab2f0713dd675665930d1e5dd050f3ce4 Mon Sep 17 00:00:00 2001 From: Sharad S Date: Mon, 5 Aug 2024 14:00:26 -0400 Subject: [PATCH 1/5] Add migration for collectionObjectType --- .../migrations/0003_cotype_picklist.py | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 specifyweb/specify/migrations/0003_cotype_picklist.py diff --git a/specifyweb/specify/migrations/0003_cotype_picklist.py b/specifyweb/specify/migrations/0003_cotype_picklist.py new file mode 100644 index 00000000000..0ff37d3e3f5 --- /dev/null +++ b/specifyweb/specify/migrations/0003_cotype_picklist.py @@ -0,0 +1,84 @@ +from django.db import migrations +from specifyweb.specify.models import ( + Collection, + Splocalecontainer, + Splocalecontaineritem, + Splocaleitemstr, + Picklist +) + +PICKLIST_NAME = 'CollectionObjectType' +FIELD_NAME = 'collectionObjectType' + +def create_cotype_picklist(): + # Create a cotype picklist for each collection + for collection in Collection.objects.all(): + Picklist.objects.get_or_create( + name=PICKLIST_NAME, + issystem=True, + readonly=True, + sizelimit=-1, + sorttype=1, + type=1, + tablename='collectionobjecttype', + collection=collection + ) + +def revert_cotype_picklist(): + Picklist.objects.filter(name=PICKLIST_NAME).delete() + + +def create_cotype_splocalecontaineritem(): + # Create a Splocalecontaineritem record for each CollectionObject Splocalecontainer + # NOTE: Each discipline has its own CollectionObject Splocalecontainer + for container in Splocalecontainer.objects.filter(name='collectionobject'): + Splocalecontaineritem.objects.get_or_create( + name=FIELD_NAME, + picklistname=PICKLIST_NAME, + type='ManyToOne', + container=container + ) + +def revert_cotype_splocalecontaineritem(): + Splocalecontaineritem.objects.filter(name=FIELD_NAME).delete() + + +def create_cotype_splocaleitemstr(): + # Create caption & description records for collectionObjectType in Schema Config + for container_item in Splocalecontaineritem.objects.filter(name=FIELD_NAME): + Splocaleitemstr.objects.create( + language='en', + text='Collection Object Type', + itemname=container_item + ) + Splocaleitemstr.objects.create( + language='en', + text=FIELD_NAME, + itemdesc=container_item + ) + +def revert_cotype_splocaleitemstr(): + Splocaleitemstr.objects.filter(text=FIELD_NAME).delete() + Splocaleitemstr.objects.filter(text='Collection Object Type').delete() + + +class Migration(migrations.Migration): + initial = True + + dependencies = [ + ('specify', '0002_geo'), + ] + + def apply_migration(apps, schema_editor): + create_cotype_picklist() + create_cotype_splocalecontaineritem() + create_cotype_splocaleitemstr() + + def revert_migration(apps, schema_editor): + revert_cotype_picklist() + revert_cotype_splocaleitemstr() + revert_cotype_splocalecontaineritem() + + operations = [ + migrations.RunPython(apply_migration, revert_migration, atomic=True) + ] \ No newline at end of file From 61a80ab6e8fc51cf4950f1b9fb2e269ab534750b Mon Sep 17 00:00:00 2001 From: Sharad S Date: Mon, 12 Aug 2024 12:23:46 -0400 Subject: [PATCH 2/5] Use apps instead of import for models - adds schematype filter to Splocalecontainer - untags migration as initial - add isrequired to cotype schema config field --- .../migrations/0003_cotype_picklist.py | 55 ++++++++++--------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/specifyweb/specify/migrations/0003_cotype_picklist.py b/specifyweb/specify/migrations/0003_cotype_picklist.py index 0ff37d3e3f5..62e78f325dc 100644 --- a/specifyweb/specify/migrations/0003_cotype_picklist.py +++ b/specifyweb/specify/migrations/0003_cotype_picklist.py @@ -1,16 +1,12 @@ from django.db import migrations -from specifyweb.specify.models import ( - Collection, - Splocalecontainer, - Splocalecontaineritem, - Splocaleitemstr, - Picklist -) PICKLIST_NAME = 'CollectionObjectType' FIELD_NAME = 'collectionObjectType' +COTYPE_TEXT = 'Collection Object Type' -def create_cotype_picklist(): +def create_cotype_picklist(apps): + Collection = apps.get_model('specify', 'Collection') + Picklist = apps.get_model('specify', 'Picklist') # Create a cotype picklist for each collection for collection in Collection.objects.all(): Picklist.objects.get_or_create( @@ -24,60 +20,65 @@ def create_cotype_picklist(): collection=collection ) -def revert_cotype_picklist(): +def revert_cotype_picklist(apps): + Picklist = apps.get_model('specify', 'Picklist') Picklist.objects.filter(name=PICKLIST_NAME).delete() -def create_cotype_splocalecontaineritem(): +def create_cotype_splocalecontaineritem(apps): + Splocalecontainer = apps.get_model('specify', 'Splocalecontainer') + Splocalecontaineritem = apps.get_model('specify', 'Splocalecontaineritem') # Create a Splocalecontaineritem record for each CollectionObject Splocalecontainer # NOTE: Each discipline has its own CollectionObject Splocalecontainer - for container in Splocalecontainer.objects.filter(name='collectionobject'): + for container in Splocalecontainer.objects.filter(name='collectionobject', schematype=0): Splocalecontaineritem.objects.get_or_create( name=FIELD_NAME, picklistname=PICKLIST_NAME, type='ManyToOne', - container=container + container=container, + isrequired=True ) -def revert_cotype_splocalecontaineritem(): +def revert_cotype_splocalecontaineritem(apps): + Splocalecontaineritem = apps.get_model('specify', 'Splocalecontaineritem') Splocalecontaineritem.objects.filter(name=FIELD_NAME).delete() -def create_cotype_splocaleitemstr(): +def create_cotype_splocaleitemstr(apps): + Splocalecontaineritem = apps.get_model('specify', 'Splocalecontaineritem') + Splocaleitemstr = apps.get_model('specify', 'Splocaleitemstr') # Create caption & description records for collectionObjectType in Schema Config for container_item in Splocalecontaineritem.objects.filter(name=FIELD_NAME): Splocaleitemstr.objects.create( language='en', - text='Collection Object Type', + text=COTYPE_TEXT, itemname=container_item ) Splocaleitemstr.objects.create( language='en', - text=FIELD_NAME, + text=COTYPE_TEXT, itemdesc=container_item ) -def revert_cotype_splocaleitemstr(): - Splocaleitemstr.objects.filter(text=FIELD_NAME).delete() - Splocaleitemstr.objects.filter(text='Collection Object Type').delete() +def revert_cotype_splocaleitemstr(apps): + Splocaleitemstr = apps.get_model('specify', 'Splocaleitemstr') + Splocaleitemstr.objects.filter(text=COTYPE_TEXT).delete() class Migration(migrations.Migration): - initial = True - dependencies = [ ('specify', '0002_geo'), ] def apply_migration(apps, schema_editor): - create_cotype_picklist() - create_cotype_splocalecontaineritem() - create_cotype_splocaleitemstr() + create_cotype_picklist(apps) + create_cotype_splocalecontaineritem(apps) + create_cotype_splocaleitemstr(apps) def revert_migration(apps, schema_editor): - revert_cotype_picklist() - revert_cotype_splocaleitemstr() - revert_cotype_splocalecontaineritem() + revert_cotype_picklist(apps) + revert_cotype_splocaleitemstr(apps) + revert_cotype_splocalecontaineritem(apps) operations = [ migrations.RunPython(apply_migration, revert_migration, atomic=True) From 015f4b2ca46a65cece440afbfaf0e8a7a9707be3 Mon Sep 17 00:00:00 2001 From: Sharad S Date: Mon, 12 Aug 2024 15:40:08 -0400 Subject: [PATCH 3/5] Add formatter name to picklist --- specifyweb/specify/migrations/0003_cotype_picklist.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/specifyweb/specify/migrations/0003_cotype_picklist.py b/specifyweb/specify/migrations/0003_cotype_picklist.py index 62e78f325dc..811c50d4529 100644 --- a/specifyweb/specify/migrations/0003_cotype_picklist.py +++ b/specifyweb/specify/migrations/0003_cotype_picklist.py @@ -17,7 +17,8 @@ def create_cotype_picklist(apps): sorttype=1, type=1, tablename='collectionobjecttype', - collection=collection + collection=collection, + formatter=PICKLIST_NAME ) def revert_cotype_picklist(apps): From 1f2ab73358aab5fd8735273ec7231daf23c97330 Mon Sep 17 00:00:00 2001 From: Sharad S Date: Mon, 19 Aug 2024 11:09:48 -0400 Subject: [PATCH 4/5] use container name when deleting --- specifyweb/specify/migrations/0003_cotype_picklist.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/specifyweb/specify/migrations/0003_cotype_picklist.py b/specifyweb/specify/migrations/0003_cotype_picklist.py index 811c50d4529..aea638fa61d 100644 --- a/specifyweb/specify/migrations/0003_cotype_picklist.py +++ b/specifyweb/specify/migrations/0003_cotype_picklist.py @@ -42,7 +42,7 @@ def create_cotype_splocalecontaineritem(apps): def revert_cotype_splocalecontaineritem(apps): Splocalecontaineritem = apps.get_model('specify', 'Splocalecontaineritem') - Splocalecontaineritem.objects.filter(name=FIELD_NAME).delete() + Splocalecontaineritem.objects.filter(name=FIELD_NAME, container__name='collectionobject', container__schematype=0).delete() def create_cotype_splocaleitemstr(apps): @@ -50,12 +50,12 @@ def create_cotype_splocaleitemstr(apps): Splocaleitemstr = apps.get_model('specify', 'Splocaleitemstr') # Create caption & description records for collectionObjectType in Schema Config for container_item in Splocalecontaineritem.objects.filter(name=FIELD_NAME): - Splocaleitemstr.objects.create( + Splocaleitemstr.objects.get_or_create( language='en', text=COTYPE_TEXT, itemname=container_item ) - Splocaleitemstr.objects.create( + Splocaleitemstr.objects.get_or_create( language='en', text=COTYPE_TEXT, itemdesc=container_item @@ -63,7 +63,8 @@ def create_cotype_splocaleitemstr(apps): def revert_cotype_splocaleitemstr(apps): Splocaleitemstr = apps.get_model('specify', 'Splocaleitemstr') - Splocaleitemstr.objects.filter(text=COTYPE_TEXT).delete() + Splocaleitemstr.objects.filter(text=COTYPE_TEXT, itemdesc__container__name='collectionobject', itemdesc__container__schematype=0).delete() + Splocaleitemstr.objects.filter(text=COTYPE_TEXT, itemname__container__name='collectionobject', itemname__container__schematype=0).delete() class Migration(migrations.Migration): From d3a0e35dedab1d4d6296c3e784cf3af341550fd4 Mon Sep 17 00:00:00 2001 From: Sharad S Date: Tue, 20 Aug 2024 11:04:55 -0400 Subject: [PATCH 5/5] Create splocale strings along with containeritem --- .../migrations/0003_cotype_picklist.py | 22 ++++++------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/specifyweb/specify/migrations/0003_cotype_picklist.py b/specifyweb/specify/migrations/0003_cotype_picklist.py index aea638fa61d..f3da52afc9e 100644 --- a/specifyweb/specify/migrations/0003_cotype_picklist.py +++ b/specifyweb/specify/migrations/0003_cotype_picklist.py @@ -29,27 +29,18 @@ def revert_cotype_picklist(apps): def create_cotype_splocalecontaineritem(apps): Splocalecontainer = apps.get_model('specify', 'Splocalecontainer') Splocalecontaineritem = apps.get_model('specify', 'Splocalecontaineritem') + Splocaleitemstr = apps.get_model('specify', 'Splocaleitemstr') + # Create a Splocalecontaineritem record for each CollectionObject Splocalecontainer # NOTE: Each discipline has its own CollectionObject Splocalecontainer for container in Splocalecontainer.objects.filter(name='collectionobject', schematype=0): - Splocalecontaineritem.objects.get_or_create( + container_item, _ = Splocalecontaineritem.objects.get_or_create( name=FIELD_NAME, picklistname=PICKLIST_NAME, type='ManyToOne', container=container, isrequired=True ) - -def revert_cotype_splocalecontaineritem(apps): - Splocalecontaineritem = apps.get_model('specify', 'Splocalecontaineritem') - Splocalecontaineritem.objects.filter(name=FIELD_NAME, container__name='collectionobject', container__schematype=0).delete() - - -def create_cotype_splocaleitemstr(apps): - Splocalecontaineritem = apps.get_model('specify', 'Splocalecontaineritem') - Splocaleitemstr = apps.get_model('specify', 'Splocaleitemstr') - # Create caption & description records for collectionObjectType in Schema Config - for container_item in Splocalecontaineritem.objects.filter(name=FIELD_NAME): Splocaleitemstr.objects.get_or_create( language='en', text=COTYPE_TEXT, @@ -61,10 +52,13 @@ def create_cotype_splocaleitemstr(apps): itemdesc=container_item ) -def revert_cotype_splocaleitemstr(apps): +def revert_cotype_splocalecontaineritem(apps): + Splocalecontaineritem = apps.get_model('specify', 'Splocalecontaineritem') Splocaleitemstr = apps.get_model('specify', 'Splocaleitemstr') + Splocaleitemstr.objects.filter(text=COTYPE_TEXT, itemdesc__container__name='collectionobject', itemdesc__container__schematype=0).delete() Splocaleitemstr.objects.filter(text=COTYPE_TEXT, itemname__container__name='collectionobject', itemname__container__schematype=0).delete() + Splocalecontaineritem.objects.filter(name=FIELD_NAME, container__name='collectionobject', container__schematype=0).delete() class Migration(migrations.Migration): @@ -75,11 +69,9 @@ class Migration(migrations.Migration): def apply_migration(apps, schema_editor): create_cotype_picklist(apps) create_cotype_splocalecontaineritem(apps) - create_cotype_splocaleitemstr(apps) def revert_migration(apps, schema_editor): revert_cotype_picklist(apps) - revert_cotype_splocaleitemstr(apps) revert_cotype_splocalecontaineritem(apps) operations = [