Skip to content

Commit

Permalink
Merge pull request #4816 from specify/issue-4815
Browse files Browse the repository at this point in the history
Do not define busRules if not present in 6
  • Loading branch information
melton-jason committed Apr 26, 2024
2 parents 0b1ec8b + 1942d4b commit 7971012
Show file tree
Hide file tree
Showing 5 changed files with 130 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ exports[`Can edit a form definition 1`] = `
},
],
},
"businessRules": "edu.ku.brc.specify.datamodel.busrules.AccessionBusRules",
"description": "The Accession form.",
"legacyResourceLabels": false,
"legacyUseBusinessRules": true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,9 @@ const viewSets = (): ViewSets =>
{
name: localized('CollectionObjectAttachment'),
description: 'The Collection Object-Attachment View.',
businessRules: localized(
'edu.ku.brc.specify.datamodel.busrules.AttachmentBusRules'
),
legacyIsInternal: undefined,
legacyIsExternal: undefined,
legacyTable: undefined,
Expand Down Expand Up @@ -360,6 +363,8 @@ test('Create new view definition', () =>
],
},
description: 'The Collection Object-Attachment View.',
businessRules:
'edu.ku.brc.specify.datamodel.busrules.AttachmentBusRules',
legacyResourceLabels: false,
legacyUseBusinessRules: true,
name: 'CollectionObjectAttachment',
Expand Down Expand Up @@ -414,6 +419,8 @@ test('Create new view definition', () =>
],
},
description: '',
businessRules:
'edu.ku.brc.specify.datamodel.busrules.AttachmentBusRules',
legacyUseBusinessRules: true,
name: 'CollectionObjectAttachment_2',
table: '[table CollectionObjectAttachment]',
Expand Down Expand Up @@ -558,6 +565,8 @@ test('Add new view definition based on existing', () =>
],
},
description: 'The Collection Object-Attachment View.',
businessRules:
'edu.ku.brc.specify.datamodel.busrules.AttachmentBusRules',
legacyResourceLabels: false,
legacyUseBusinessRules: true,
name: 'CollectionObjectAttachment',
Expand Down Expand Up @@ -608,6 +617,8 @@ test('Add new view definition based on existing', () =>
],
},
description: 'The Collection Object-Attachment View.',
businessRules:
'edu.ku.brc.specify.datamodel.busrules.AttachmentBusRules',
legacyResourceLabels: false,
legacyUseBusinessRules: true,
name: 'A',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import { getLogContext, setLogContext } from '../Errors/logContext';
import type { ViewDefinition } from '../FormParse';
import { fromSimpleXmlNode } from '../Syncer/fromSimpleXmlNode';
import { createSimpleXmlNode } from '../Syncer/xmlToJson';
import { getBusinessRuleClassFromTable } from './helpers';
import type { ViewSets } from './spec';
import { parseFormView } from './spec';

Expand Down Expand Up @@ -91,6 +92,7 @@ function createNewView(
title: localized(table.name),
description: '',
table,
businessRules: localized(getBusinessRuleClassFromTable(table.name)),
legacyTable: undefined,
altViews,
legacyIsInternal: undefined,
Expand Down
104 changes: 104 additions & 0 deletions specifyweb/frontend/js_src/lib/components/FormEditor/helpers.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
import type { RR } from '../../utils/types';
import type { Tables } from '../DataModel/types';

export const tablesWithBusRulesIn6 = new Set([
'AccessionAgentBusRules',
'AccessionAuthorizationBusRules',
'AccessionBusRules',
'AddressBusRules',
'AgentBusRules',
'AppraisalBusRules',
'AttachmentBusRules',
'AttachmentOwnerBaseBusRules',
'AttachmentReferenceBaseBusRules',
'AuthorBusRules',
'BaseTreeBusRules',
'BioStratBusRules',
'BorrowBusRules',
'CatalogNumberingSchemeBusRules',
'CatAutoNumberingSchemeBusRules',
'CollectingEventAttributeBusRules',
'CollectingEventAuthorizationBusRules',
'CollectingEventBusRules',
'CollectingTripAuthorizationBusRules',
'CollectingTripBusRules',
'CollectionBusRules',
'CollectionObjectBusRules',
'CollectionSetupBusRules',
'CollectorBusRules',
'ConservDescriptionBusRules',
'ConservEventBusRules',
'ContainerBusRules',
'DataTypeBusRules',
'DeaccessionAgentBusRules',
'DeaccessionBusRules',
'DeterminationBusRules',
'DeterminerBusRules',
'DisciplineBusRules',
'DisposalAgentBusRules',
'DisposalBusRules',
'DisposalPreparationBusRules',
'DivisionBusRules',
'DNASequenceBusRules',
'DNASequencingRunBusRules',
'ExchangeInBusRules',
'ExchangeOutBusRules',
'ExchangeOutPrepBusRules',
'ExtractorBusRules',
'FieldNotebookBusRules',
'FieldNotebookPageBusRules',
'FieldNotebookPageSetBusRules',
'FundingAgentBusRules',
'GeoCoordDetailBusRules',
'GeographyBusRules',
'GeologicTimePeriodBusRules',
'GiftBusRules',
'GiftPreparationBusRules',
'GroupPersonBusRules',
'InfoRequestBusRules',
'InstitutionBusRules',
'JournalBusRules',
'LithoStratBusRules',
'LoanBusRules',
'LoanGiftShipmentBusRules',
'LoanPreparationBusRules',
'LoanReturnPreparationBusRules',
'LocalityBusRules',
'LocalityDetailBusRules',
'PaleoContextBusRules',
'PcrPersonBusRules',
'PermitBusRules',
'PickListBusRules',
'PreparationBusRules',
'PrepTypeBusRules',
'ReferenceWorkBusRules',
'RepositoryAgreementBusRules',
'ShipmentBusRules',
'SpecifyUserBusRules',
'StorageBusRules',
'TableSearchResults',
'TaxonBusRules',
'TreatmentEventBusRules',
'TreeableSearchQueryBuilder',
'TreeDefBusRules',
]);

/**
* Most of the time business rules class name can be inferred from table name.
* Exceptions:
*/
export const businessRulesOverride: Partial<RR<keyof Tables, string>> = {
Shipment: 'LoanGiftShipment',
CollectionObjectAttachment: 'Attachment',
};

export const getBusinessRuleClassFromTable = (
tableName: keyof Tables
): string =>
businessRulesOverride[tableName] === undefined
? tablesWithBusRulesIn6.has(`${tableName}BusRules`)
? `edu.ku.brc.specify.datamodel.busrules.${tableName}BusRules`
: ''
: `edu.ku.brc.specify.datamodel.busrules.${businessRulesOverride[
tableName
]!}BusRules`;
31 changes: 12 additions & 19 deletions specifyweb/frontend/js_src/lib/components/FormEditor/spec.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import { f } from '../../utils/functools';
import type { RA, RR } from '../../utils/types';
import type { RA } from '../../utils/types';
import { defined, localized } from '../../utils/types';
import { getUniqueName } from '../../utils/uniquifyName';
import { strictParseXml } from '../AppResources/parseXml';
import type { Tables } from '../DataModel/types';
import type { ViewDefinition } from '../FormParse';
import type { SpecToJson } from '../Syncer';
import { pipe, syncer } from '../Syncer';
Expand All @@ -19,6 +18,7 @@ import {
getOriginalSyncerInput,
setOriginalSyncerInput,
} from '../Syncer/xmlUtils';
import { getBusinessRuleClassFromTable } from './helpers';

export const viewSetsSpec = f.store(() =>
createXmlSpec({
Expand Down Expand Up @@ -53,21 +53,22 @@ const resolvedViewSpec = () =>
pipe(
syncers.object(viewSpec()),
syncer(
({ businessRules: _, table, ...node }) => ({
({ table, ...node }) => ({
...node,
table: table.parsed,
legacyTable: table.bad,
}),
({ table, legacyTable, ...node }) => ({
({ table, legacyTable, businessRules, ...node }) => ({
...node,
table: { parsed: table, bad: legacyTable },
businessRules: localized(
typeof table === 'object'
? `edu.ku.brc.specify.datamodel.busrules.${
businessRules[table.name] ?? table.name
}BusRules`
: ''
),
businessRules:
f.trim(businessRules ?? '') === ''
? localized(
typeof table === 'object'
? getBusinessRuleClassFromTable(table.name)
: ''
)
: businessRules,
})
)
);
Expand Down Expand Up @@ -99,14 +100,6 @@ export function parseFormView(definition: ViewDefinition) {
};
}

/**
* Most of the time business rules class name can be inferred from table name.
* Exceptions:
*/
const businessRules: Partial<RR<keyof Tables, string>> = {
Shipment: 'LoanGiftShipment',
};

const viewSpec = f.store(() =>
createXmlSpec({
name: syncers.xmlAttribute('name', 'required'),
Expand Down

0 comments on commit 7971012

Please sign in to comment.