Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions specifyweb/backend/context/app_resource.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,19 @@
"invertebrate": "invertebrate",
"geology": "geology",
}
DISCIPLINE_NAMES = {
'fish': 'Fish',
'herpetology': 'Herpetology',
'paleobotany': 'Paleobotany',
'invertpaleo': 'Invertebrate Paleontology',
'vertpaleo': 'Vertebrate Paleontology',
'bird': 'Bird',
'mammal': 'Mammal',
'insect': 'Insect',
'botany': 'Botany',
'invertebrate': 'Invertebrate',
'geology': 'Geology',
}

FORM_RESOURCE_EXCLUDED_LST = [
"fish/fishbase.views.xml",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,8 @@ def fix_schema_config(stdout: WriteToStdOut | None = None):
usc.add_quantities_gift, # specify 0032
usc.update_paleo_desc, # specify 0033
usc.update_accession_date_fields # specify 0034
usc.create_discipline_type_picklist # specify 0042
usc.update_discipline_type_splocalecontaineritem # specify specify 0042
]
log_and_run(funcs, stdout)

Expand Down
65 changes: 65 additions & 0 deletions specifyweb/specify/migration_utils/update_schema_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -1397,3 +1397,68 @@ def revert_version_required(apps):
for table, fields in MIGRATION_0035_FIELDS.items():
for field in fields:
update_table_field_schema_config_params(table, discipline.id, field, updated_config_params, apps)

# ##########################################
# Used in 0042_discipline_type_picklist.py
# ##########################################

from specifyweb.backend.context.app_resource import DISCIPLINE_NAMES

DISCIPLINE_TYPE_PICKLIST_NAME = 'DisciplineType'

def create_discipline_type_picklist(apps):
Collection = apps.get_model('specify', 'Collection')
Picklist = apps.get_model('specify', 'Picklist')
Picklistitem = apps.get_model('specify', 'Picklistitem')

# Create a discipline type picklist for each collection
for collection in Collection.objects.all():
picklist, created = Picklist.objects.get_or_create(
name=DISCIPLINE_TYPE_PICKLIST_NAME,
type=0,
collection=collection,
defaults={
"issystem": True,
"readonly": True,
"sizelimit": -1,
"sorttype": 1,
}
)
# If the picklist doesn't exist, create a new one
if created:
ordinal = 1
items = []
for value, title in DISCIPLINE_NAMES.items():
items.append(
Picklistitem(
picklist=picklist,
ordinal=ordinal,
value=value,
title=title,
)
)
ordinal += 1
Picklistitem.objects.bulk_create(items)

def revert_discipline_type_picklist(apps):
Picklist = apps.get_model('specify', 'Picklist')

Picklist.objects.filter(name=DISCIPLINE_TYPE_PICKLIST_NAME).delete()

def update_discipline_type_splocalecontaineritem(apps):
Splocalecontaineritem = apps.get_model("specify", "Splocalecontaineritem")

Splocalecontaineritem.objects.filter(
container__name="discipline",
container__schematype=0,
name="type",
).update(picklistname=DISCIPLINE_TYPE_PICKLIST_NAME, isrequired=True)

def revert_discipline_type_splocalecontaineritem(apps):
Splocalecontaineritem = apps.get_model("specify", "Splocalecontaineritem")

Splocalecontaineritem.objects.filter(
container__name="discipline",
container__schematype=0,
name="type",
).update(picklistname=None, isrequired=None)
23 changes: 23 additions & 0 deletions specifyweb/specify/migrations/0042_discipline_type_picklist.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
from django.db import migrations
from specifyweb.specify.migration_utils import update_schema_config as usc

class Migration(migrations.Migration):
dependencies = [
('specify', '0041_add_missing_schema_after_reorganization'),
]

def apply_migration(apps, schema_editor):
usc.create_discipline_type_picklist(apps)
usc.update_discipline_type_splocalecontaineritem(apps)

def revert_migration(apps, schema_editor):
usc.revert_discipline_type_picklist(apps)
usc.revert_discipline_type_splocalecontaineritem(apps)

operations = [
migrations.RunPython(
apply_migration,
revert_migration,
atomic=True,
),
]