Skip to content

Create new component table #6395

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 33 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
c56a966
Create new component table
CarolineDenis Apr 7, 2025
01a5bd7
Typo
CarolineDenis Apr 7, 2025
caf8c59
Add component to types.ts
CarolineDenis Apr 7, 2025
8ef77d1
Create migration file for component table
CarolineDenis Apr 7, 2025
44941e0
Update children
CarolineDenis Apr 7, 2025
39e10bb
Modify migration
CarolineDenis Apr 7, 2025
16dbf8c
Update migration delete
CarolineDenis Apr 7, 2025
a8646d9
Add component to Co
CarolineDenis Apr 7, 2025
db6c3d7
Typo
CarolineDenis Apr 7, 2025
1f627af
Remove component from CO
CarolineDenis Apr 7, 2025
ee4ec5f
Remove pass
CarolineDenis Apr 8, 2025
d7d6731
Remove add field on CO in migration
CarolineDenis Apr 8, 2025
aa64b8a
Capitalize
CarolineDenis Apr 8, 2025
a72660f
Chnage operatio to operations
CarolineDenis Apr 8, 2025
2fef326
Remove component from CO datamodel
CarolineDenis Apr 8, 2025
723f716
Change import
CarolineDenis Apr 8, 2025
7ea7665
Update schemaconfig field
CarolineDenis Apr 8, 2025
f61bad6
Additions
CarolineDenis Apr 8, 2025
552c97e
Updates in models
CarolineDenis Apr 8, 2025
5fba994
Updates
CarolineDenis Apr 8, 2025
bde1cf2
Regenerate migration
CarolineDenis Apr 8, 2025
bf38454
import
CarolineDenis Apr 8, 2025
2d6748c
Add children
CarolineDenis Apr 8, 2025
a5e4ed8
Change children type
CarolineDenis Apr 8, 2025
06afaed
Chnage children to dependent
CarolineDenis Apr 8, 2025
e069118
chnage role requirement
CarolineDenis Apr 8, 2025
8ae557e
Update taxon to name
CarolineDenis Apr 8, 2025
c7fd709
Change role in migration
CarolineDenis Apr 8, 2025
c0194c8
Add dependent to CO component
CarolineDenis Apr 8, 2025
53809cb
include toManyIndependent in types
CarolineDenis Apr 9, 2025
9d469a6
Set component CO with the parent CO
CarolineDenis Apr 9, 2025
5df922a
Improve conditional in backendrules
CarolineDenis Apr 10, 2025
a2ae877
Make component dependent
CarolineDenis Apr 11, 2025
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
1 change: 1 addition & 0 deletions specifyweb/businessrules/rules/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,5 @@
workbench_rules,
cojo_rules,
cogtype_rules,
component_rules
)
16 changes: 16 additions & 0 deletions specifyweb/businessrules/rules/component_rules.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@

from specifyweb.businessrules.exceptions import BusinessRuleException
from specifyweb.businessrules.orm_signal_handler import orm_signal_handler
from specifyweb.specify.models import Component

@orm_signal_handler('pre_save', 'Component')
def component_pre_save(component):
if component.parentcomponent is not None and not hasattr(component, "collectionobject"):
component.collectionobject = component.parentcomponent.collectionobject
component.save()
component.parentcomponent.children.add(component)
component.parentcomponent.save()
component.parentcomponent.collectionobject.components.add(component)
component.parentcomponent.collectionobject.save()


57 changes: 57 additions & 0 deletions specifyweb/frontend/js_src/lib/components/DataModel/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ export type Tables = {
readonly Collector: Collector;
readonly CommonNameTx: CommonNameTx;
readonly CommonNameTxCitation: CommonNameTxCitation;
readonly Component: Component;
readonly ConservDescription: ConservDescription;
readonly ConservDescriptionAttachment: ConservDescriptionAttachment;
readonly ConservEvent: ConservEvent;
Expand Down Expand Up @@ -1470,6 +1471,7 @@ export type CollectionObject = {
readonly rightSideRels: RA<CollectionRelationship>;
readonly treatmentEvents: RA<TreatmentEvent>;
readonly voucherRelationships: RA<VoucherRelationship>;
readonly components: RA<Component>;
};
readonly toManyIndependent: { readonly projects: RA<Project> };
};
Expand Down Expand Up @@ -1966,6 +1968,58 @@ export type CommonNameTxCitation = {
readonly toManyDependent: RR<never, never>;
readonly toManyIndependent: RR<never, never>;
};
export type Component = {
readonly tableName: 'Component';
readonly fields: {
readonly verbatimName: string | null;
readonly role: string | null;
readonly proportion: number | null;
readonly uniqueIdentifier: string | null;
readonly text1: string | null;
readonly text2: string | null;
readonly text3: string | null;
readonly text4: string | null;
readonly text5: string | null;
readonly text6: string | null;
readonly yesNo1: boolean | null;
readonly yesNo2: boolean | null;
readonly yesNo3: boolean | null;
readonly yesNo4: boolean | null;
readonly yesNo5: boolean | null;
readonly yesNo6: boolean | null;
readonly integer1: number | null;
readonly integer2: number | null;
readonly integer3: number | null;
readonly integer4: number | null;
readonly integer5: number | null;
readonly integer6: number | null;
readonly number1: number | null;
readonly number2: number | null;
readonly number3: number | null;
readonly number4: number | null;
readonly number5: number | null;
readonly number6: number | null;
readonly version: number | null;
readonly timestampCreated: string;
readonly timestampModified: string | null;
};
readonly toOneDependent: {
readonly collectionObject: CollectionObject | null;
};
readonly toOneIndependent: {
readonly type: CollectionObjectType;
readonly name: Taxon | null;
readonly createdByAgent: Agent | null;
readonly modifiedByAgent: Agent | null;
readonly parentComponent: Component | null;
};
readonly toManyDependent: {
readonly absoluteAges: RA<AbsoluteAge>;
readonly relativeAges: RA<RelativeAge>;
readonly children: RA<Component>;
};
readonly toManyIndependent: RR<never, never>;
};
export type ConservDescription = {
readonly tableName: 'ConservDescription';
readonly fields: {
Expand Down Expand Up @@ -5736,6 +5790,7 @@ export type Taxon = {
readonly hybridChildren2: RA<Taxon>;
readonly preferredTaxonOf: RA<Determination>;
readonly acceptedChildren: RA<Taxon>;
readonly components: RA<Component>;
};
};
export type TaxonAttachment = {
Expand Down Expand Up @@ -6602,6 +6657,7 @@ export type AbsoluteAge = {
readonly collectionObject: CollectionObject;
readonly createdByAgent: Agent | null;
readonly modifiedByAgent: Agent | null;
readonly component: Component;
};
readonly toManyDependent: {
readonly absoluteAgeAttachments: RA<AbsoluteAgeAttachment>;
Expand Down Expand Up @@ -6642,6 +6698,7 @@ export type RelativeAge = {
readonly collectionObject: CollectionObject;
readonly createdByAgent: Agent | null;
readonly modifiedByAgent: Agent | null;
readonly component: Component;
};
readonly toManyDependent: {
readonly relativeAgeAttachments: RA<RelativeAgeAttachment>;
Expand Down
64 changes: 61 additions & 3 deletions specifyweb/specify/datamodel.py
Original file line number Diff line number Diff line change
Expand Up @@ -1601,6 +1601,7 @@ def is_tree_table(table: Table):
Relationship(name='cojo', type='one-to-one', required=False, relatedModelName='CollectionObjectGroupJoin', otherSideName='childco', dependent=True),
Relationship(name='absoluteAges', type='one-to-many', required=False, relatedModelName='AbsoluteAge', otherSideName='collectionObject', dependent=True),
Relationship(name='relativeAges', type='one-to-many', required=False, relatedModelName='RelativeAge', otherSideName='collectionObject', dependent=True),
Relationship(name='components', type='one-to-many',required=False, relatedModelName='Component', otherSideName='collectionObject', dependent=True)
],
fieldAliases=[

Expand Down Expand Up @@ -2197,6 +2198,60 @@ def is_tree_table(table: Table):

]
),
Table(
classname='edu.ku.brc.specify.datamodel.Component',
table='component',
tableId=1028,
idColumn='ComponentID',
idFieldName='componentId',
idField=IdField(name='componentId', column='ComponentID', type='java.lang.Integer'),
fields=[
Field(name='verbatimName', column='VerbatimName', indexed=False, unique=False, required=False, type='text'),
Field(name='role', column='Role', indexed=False, unique=False, required=False, type='java.lang.String', length=64),
Field(name='proportion', column='Proportion', indexed=False, unique=False, required=False, type='java.lang.Integer'),
Field(name='uniqueIdentifier', column='UniqueIdentifier', indexed=True, unique=False, required=False, type='java.lang.String', length=128),
Field(name='text1', column='Text1', indexed=False, unique=False, required=False, type='text', length=65535),
Field(name='text2', column='Text2', indexed=False, unique=False, required=False, type='text', length=65535),
Field(name='text3', column='Text3', indexed=False, unique=False, required=False, type='text', length=65535),
Field(name='text4', column='Text4', indexed=False, unique=False, required=False, type='text', length=65535),
Field(name='text5', column='Text5', indexed=False, unique=False, required=False, type='text', length=65535),
Field(name='text6', column='Text6', indexed=False, unique=False, required=False, type='text', length=65535),
Field(name='yesNo1', column='YesNo1', indexed=False, unique=False, required=False, type='java.lang.Boolean'),
Field(name='yesNo2', column='YesNo2', indexed=False, unique=False, required=False, type='java.lang.Boolean'),
Field(name='yesNo3', column='YesNo3', indexed=False, unique=False, required=False, type='java.lang.Boolean'),
Field(name='yesNo4', column='YesNo4', indexed=False, unique=False, required=False, type='java.lang.Boolean'),
Field(name='yesNo5', column='YesNo5', indexed=False, unique=False, required=False, type='java.lang.Boolean'),
Field(name='yesNo6', column='YesNo6', indexed=False, unique=False, required=False, type='java.lang.Boolean'),
Field(name='integer1', column='Integer1', indexed=False, unique=False, required=False, type='java.lang.Integer'),
Field(name='integer2', column='Integer2', indexed=False, unique=False, required=False, type='java.lang.Integer'),
Field(name='integer3', column='Integer3', indexed=False, unique=False, required=False, type='java.lang.Integer'),
Field(name='integer4', column='Integer4', indexed=False, unique=False, required=False, type='java.lang.Integer'),
Field(name='integer5', column='Integer5', indexed=False, unique=False, required=False, type='java.lang.Integer'),
Field(name='integer6', column='Integer6', indexed=False, unique=False, required=False, type='java.lang.Integer'),
Field(name='number1', column='Number1', indexed=False, unique=False, required=False, type='java.math.BigDecimal'),
Field(name='number2', column='Number2', indexed=False, unique=False, required=False, type='java.math.BigDecimal'),
Field(name='number3', column='Number3', indexed=False, unique=False, required=False, type='java.math.BigDecimal'),
Field(name='number4', column='Number4', indexed=False, unique=False, required=False, type='java.math.BigDecimal'),
Field(name='number5', column='Number5', indexed=False, unique=False, required=False, type='java.math.BigDecimal'),
Field(name='number6', column='Number6', indexed=False, unique=False, required=False, type='java.math.BigDecimal'),
Field(name='version', column='Version', indexed=False, unique=False, required=False, type='java.lang.Integer'),
Field(name='timestampCreated', column='TimestampCreated', indexed=False, unique=False, required=True, type='java.sql.Timestamp'),
Field(name='timestampModified', column='TimestampModified', indexed=False, unique=False, required=False, type='java.sql.Timestamp'),
],
indexes=[],
relationships=[
Relationship(name='collectionObject', type='many-to-one',required=True, relatedModelName='CollectionObject', column='CollectionObjectID', otherSideName='components'),
Relationship(name='name', type='many-to-one',required=False, relatedModelName='Taxon', column='TaxonID', otherSideName='components'),
Relationship(name='type', type='many-to-one', required=True, relatedModelName='CollectionObjectType', column='CollectionObjectTypeID'),
Relationship(name='parentComponent', type='many-to-one', required=False, relatedModelName='Component', column='ParentComponentID', otherSideName='children'),
Relationship(name='children', type='one-to-many', required=False, relatedModelName='Component', otherSideName='parentComponent', dependent=True),
Relationship(name='absoluteAges', type='one-to-many', required=False, relatedModelName='AbsoluteAge', otherSideName='component', dependent=True),
Relationship(name='relativeAges', type='one-to-many', required=False, relatedModelName='RelativeAge', otherSideName='component', dependent=True),
Relationship(name='createdByAgent', type='many-to-one',required=False, relatedModelName='Agent', column='CreatedByAgentID'),
Relationship(name='modifiedByAgent', type='many-to-one',required=False, relatedModelName='Agent', column='ModifiedByAgentID'),
],
fieldAliases=[]
),
Table(
classname='edu.ku.brc.specify.datamodel.ConservDescription',
table='conservdescription',
Expand Down Expand Up @@ -7151,7 +7206,8 @@ def is_tree_table(table: Table):
Relationship(name='taxonAttachments', type='one-to-many',required=False, relatedModelName='TaxonAttachment', otherSideName='taxon', dependent=True),
Relationship(name='taxonAttribute', type='many-to-one',required=False, relatedModelName='TaxonAttribute', column='TaxonAttributeID', otherSideName='taxons', dependent=True),
Relationship(name='taxonCitations', type='one-to-many',required=False, relatedModelName='TaxonCitation', otherSideName='taxon', dependent=True),
Relationship(name='visibilitySetBy', type='many-to-one',required=False, relatedModelName='SpecifyUser', column='VisibilitySetByID')
Relationship(name='visibilitySetBy', type='many-to-one',required=False, relatedModelName='SpecifyUser', column='VisibilitySetByID'),
Relationship(name='components', type='one-to-many',required=False, relatedModelName='Component', otherSideName='taxon'),
],
fieldAliases=[
{'vname':'acceptedParent', 'aname':'acceptedTaxon'}
Expand Down Expand Up @@ -8416,7 +8472,8 @@ def is_tree_table(table: Table):
Relationship(name='collectionObject', type='many-to-one', required=True, relatedModelName='CollectionObject', column='CollectionObjectID', otherSideName='absoluteAges'),
Relationship(name='absoluteAgeCitations', type='one-to-many',required=False, relatedModelName='AbsoluteAgeCitation', otherSideName='absoluteAge', dependent=True),
Relationship(name='createdByAgent', type='many-to-one', required=False, relatedModelName='Agent', column='CreatedByAgentID'),
Relationship(name='modifiedByAgent', type='many-to-one', required=False, relatedModelName='Agent', column='ModifiedByAgentID')
Relationship(name='modifiedByAgent', type='many-to-one', required=False, relatedModelName='Agent', column='ModifiedByAgentID'),
Relationship(name='component', type='many-to-one', required=False, relatedModelName='Component', column='ComponentID', otherSideName='absoluteAges'),
],
fieldAliases=[

Expand Down Expand Up @@ -8465,7 +8522,8 @@ def is_tree_table(table: Table):
Relationship(name='collectionObject', type='many-to-one', required=True, relatedModelName='CollectionObject', column='CollectionObjectID', otherSideName='relativeAges'),
Relationship(name='relativeAgeCitations', type='one-to-many',required=False, relatedModelName='RelativeAgeCitation', otherSideName='relativeAge', dependent=True),
Relationship(name='createdByAgent', type='many-to-one', required=False, relatedModelName='Agent', column='CreatedByAgentID'),
Relationship(name='modifiedByAgent', type='many-to-one', required=False, relatedModelName='Agent', column='ModifiedByAgentID')
Relationship(name='modifiedByAgent', type='many-to-one', required=False, relatedModelName='Agent', column='ModifiedByAgentID'),
Relationship(name='component', type='many-to-one', required=False, relatedModelName='Component', column='ComponentID', otherSideName='relativeAges'),
],
fieldAliases=[

Expand Down
23 changes: 23 additions & 0 deletions specifyweb/specify/migration_utils/sp7_schemaconfig.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,4 +167,27 @@

MIGRATION_0024_FIELDS = {
'Storage': ['uniqueIdentifier'],
}

MIGRATION_0027_TABLES = [
('Component', None),
]

MIGRATION_0027_FIELDS = {
'CollectionObject': ['components'],
'Taxon': ['components'],
'RelativeAge': ['component'],
'AbsoluteAge': ['component'],
}


MIGRATION_0027_UPDATE_FIELDS = {
'Component': [
('type', 'Component Type', 'This type determines the valid options for component names.'),
('name', 'Component Name', 'The name from a taxon tree corresponding to the chosen type.'),
('verbatimName', 'Verbatim Name', 'The original name printed or associated with the component.'),
('role', 'Component Role', 'Define the role or purpose of the component in the overall collection.'),
('proportion', 'Component Proportion', 'Specify the proportion of the component relative to the whole.'),
('uniqueIdentifier', 'Unique Identifier', 'Unique Identifier [/+][-]Unique Identifier'),
],
}
Loading
Loading