Skip to content

Commit ae762ab

Browse files
authored
feat: compete and accept the test (#2046)
1 parent daa0720 commit ae762ab

File tree

5 files changed

+142
-11
lines changed

5 files changed

+142
-11
lines changed

frontend/src/views/CONSEP/TestingActivities/MoistureContent/index.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ const MoistureContent = () => {
162162

163163
const validateTest = useMutation({
164164
mutationFn: () => testingActivitiesAPI(
165-
'purityTest',
165+
'moistureTest',
166166
'validateTestResult',
167167
{ riaKey }
168168
),
@@ -195,7 +195,7 @@ const MoistureContent = () => {
195195

196196
const acceptTest = useMutation({
197197
mutationFn: () => testingActivitiesAPI(
198-
'purityTest',
198+
'moistureTest',
199199
'acceptResult',
200200
{ riaKey }
201201
),
@@ -271,7 +271,7 @@ const MoistureContent = () => {
271271
kind: 'tertiary',
272272
size: 'lg',
273273
icon: Checkmark,
274-
disabled: !!testActivity?.testCompleteInd,
274+
disabled: testActivity?.testCompleteInd === 1,
275275
action: () => validateTest.mutate()
276276
},
277277
{
@@ -280,7 +280,7 @@ const MoistureContent = () => {
280280
kind: 'tertiary',
281281
size: 'lg',
282282
icon: CheckmarkOutline,
283-
disabled: !testActivity?.testCompleteInd || !!testActivity?.acceptResult,
283+
disabled: testActivity?.acceptResult === 1 || testActivity?.testCompleteInd !== 1,
284284
action: () => acceptTest.mutate()
285285
},
286286
{

frontend/src/views/CONSEP/TestingActivities/PurityContent/constants.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,21 @@ export const fieldsConfig = {
4141
placeholder: 'My comments about this activity'
4242
}
4343
};
44+
45+
export const actionModalOptions = {
46+
complete: {
47+
modalLabel: 'Are you sure you want to complete the test?',
48+
modalHeading: 'Complete purity test',
49+
primaryButtonText: 'Yes',
50+
secondaryButtonText: 'Cancel'
51+
},
52+
accept: {
53+
modalLabel: 'Are you sure you want to accept the test result?',
54+
modalHeading: 'Accept purity test result',
55+
primaryButtonText: 'Yes',
56+
secondaryButtonText: 'Cancel'
57+
}
58+
};
59+
60+
export const COMPLETE = 'complete';
61+
export const ACCEPT = 'accept';

frontend/src/views/CONSEP/TestingActivities/PurityContent/index.tsx

Lines changed: 103 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ import {
1313
ComboBox,
1414
Button,
1515
InlineNotification,
16-
TextInput
16+
TextInput,
17+
Modal
1718
} from '@carbon/react';
1819
import {
1920
CheckmarkFilled,
@@ -42,7 +43,7 @@ import ButtonGroup from '../ButtonGroup';
4243
import { categoryMap, categoryMapReverse } from '../SharedConstants';
4344
import { ImpurityType } from './definitions';
4445
import {
45-
DATE_FORMAT, fieldsConfig
46+
DATE_FORMAT, fieldsConfig, actionModalOptions, COMPLETE, ACCEPT
4647
} from './constants';
4748
import './styles.scss';
4849

@@ -55,6 +56,8 @@ const PurityContent = () => {
5556
const [activityRecord, setActivityRecord] = useState<ActivityRecordType>();
5657
const [activitySummary, setActivitySummary] = useState<ActivitySummaryType>();
5758
const [alert, setAlert] = useState<{ isSuccess: boolean; message: string } | null>(null);
59+
const [isModalOpen, setModalOpen] = useState(false);
60+
const [modalType, setModalType] = useState<'complete' | 'accept'>(COMPLETE);
5861

5962
const tableBodyRef = useRef<HTMLTableSectionElement>(null);
6063

@@ -92,6 +95,64 @@ const PurityContent = () => {
9295
}
9396
});
9497

98+
const validateTest = useMutation({
99+
mutationFn: () => testingActivitiesAPI(
100+
'purityTest',
101+
'validateTestResult',
102+
{ riaKey }
103+
),
104+
onSuccess: () => {
105+
const testActivityData: TestingActivityType = {
106+
...testActivity!,
107+
testCompleteInd: 1,
108+
sampleDesc: testActivity?.sampleDesc || '',
109+
moistureStatus: testActivity?.moistureStatus || '',
110+
moisturePct: testActivity?.moisturePct || 0,
111+
acceptResult: testActivity?.acceptResult || 0,
112+
requestId: testActivity?.requestId || '',
113+
seedlotNumber: testActivity?.seedlotNumber || '',
114+
activityType: testActivity?.activityType || '',
115+
replicatesList: testActivity?.replicatesList || []
116+
};
117+
setTestActivity(testActivityData);
118+
setAlert({ isSuccess: true, message: 'Test validated successfully' });
119+
setTimeout(() => {
120+
setAlert(null);
121+
}, 3000);
122+
},
123+
onError: (error) => {
124+
setAlert({
125+
isSuccess: false,
126+
message: `Failed to validate test: ${(error as AxiosError).message}`
127+
});
128+
}
129+
});
130+
131+
const acceptTest = useMutation({
132+
mutationFn: () => testingActivitiesAPI(
133+
'purityTest',
134+
'acceptResult',
135+
{ riaKey }
136+
),
137+
onSuccess: () => {
138+
const testActivityData: TestingActivityType = {
139+
...testActivity!,
140+
acceptResult: 1
141+
};
142+
setTestActivity(testActivityData);
143+
setAlert({ isSuccess: true, message: 'Test accepted successfully' });
144+
setTimeout(() => {
145+
setAlert(null);
146+
}, 3000);
147+
},
148+
onError: (error) => {
149+
setAlert({
150+
isSuccess: false,
151+
message: `Failed to accept test: ${(error as AxiosError).message}`
152+
});
153+
}
154+
});
155+
95156
useEffect(() => {
96157
if (!riaKey) {
97158
navigate(ROUTES.FOUR_OH_FOUR);
@@ -201,28 +262,42 @@ const PurityContent = () => {
201262
setAverage(7.8); // Set the test average value from the API response
202263
};
203264

265+
const handleCompleteTestModal = () => {
266+
setModalType(COMPLETE);
267+
setModalOpen(true);
268+
};
269+
270+
const handleAcceptTestModal = () => {
271+
setModalType(ACCEPT);
272+
setModalOpen(true);
273+
};
274+
204275
const buttons = [
205276
{
206277
id: 'calculate-average',
207278
text: 'Calculate average',
208279
kind: 'primary',
209280
size: 'lg',
210281
icon: Calculator,
211-
onClick: handleCalculateAverage
282+
action: handleCalculateAverage
212283
},
213284
{
214285
id: 'complete-test',
215286
text: 'Complete test',
216287
kind: 'tertiary',
217288
size: 'lg',
218-
icon: Checkmark
289+
icon: Checkmark,
290+
disabled: testActivity?.testCompleteInd === 1,
291+
action: handleCompleteTestModal
219292
},
220293
{
221294
id: 'accept-test',
222295
text: 'Accept test',
223296
kind: 'tertiary',
224297
size: 'lg',
225-
icon: CheckmarkOutline
298+
icon: CheckmarkOutline,
299+
disabled: testActivity?.acceptResult === 1 || testActivity?.testCompleteInd !== 1,
300+
action: handleAcceptTestModal
226301
},
227302
{
228303
id: 'test-history',
@@ -322,21 +397,42 @@ const PurityContent = () => {
322397
</Alert>
323398
)
324399
}
400+
<Modal
401+
className="action-modal"
402+
modalLabel={actionModalOptions[modalType].modalLabel}
403+
modalHeading={actionModalOptions[modalType].modalHeading}
404+
primaryButtonText={actionModalOptions[modalType].primaryButtonText}
405+
secondaryButtonText={actionModalOptions[modalType].secondaryButtonText}
406+
open={isModalOpen}
407+
onRequestClose={() => {
408+
setModalOpen(false);
409+
}}
410+
onRequestSubmit={() => {
411+
if (modalType === COMPLETE) {
412+
validateTest.mutate();
413+
} else if (modalType === ACCEPT) {
414+
acceptTest.mutate();
415+
}
416+
setModalOpen(false);
417+
}}
418+
size="sm"
419+
danger
420+
/>
325421
<Row className="consep-purity-content-breadcrumb">
326422
<Breadcrumbs crumbs={createBreadcrumbItems()} />
327423
</Row>
328424
<Row className="consep-purity-content-title">
329425
<PageTitle title={`${fieldsConfig.titleSection.title} ${seedlotNumber}`} />
330426
<>
331427
{
332-
testActivity?.testCompleteInd
428+
testActivity?.testCompleteInd === 1
333429
? (
334430
<StatusTag type="Completed" renderIcon={CheckmarkFilled} />
335431
)
336432
: null
337433
}
338434
{
339-
testActivity?.acceptResult
435+
testActivity?.acceptResult === 1
340436
? (
341437
<StatusTag type="Accepted" renderIcon={CheckmarkFilled} />
342438
)

frontend/src/views/CONSEP/TestingActivities/PurityContent/styles.scss

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
@use '@carbon/type';
12
@use '@bcgov-nr/nr-theme/design-tokens/variables.scss' as vars;
23

4+
35
.consep-purity-content-title {
46
justify-content: flex-start;
57
gap: 0.5rem;
@@ -115,3 +117,17 @@
115117
.consep-purity-content-comments > div {
116118
padding: 0rem;
117119
}
120+
121+
.action-modal {
122+
.#{vars.$bcgov-prefix}--btn {
123+
height: 1rem;
124+
}
125+
126+
.#{vars.$bcgov-prefix}--modal-footer{
127+
height: auto;
128+
}
129+
130+
.#{vars.$bcgov-prefix}--modal-header__label{
131+
@include type.type-style('label-01');
132+
}
133+
}

oracle-api/src/main/java/ca/bc/gov/oracleapi/endpoint/consep/MoistureContentConesEndpoint.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,7 @@ public void validateMoistureContentData(
215215
activityData.setActualBeginDateTime(moistureContent.get().actualBeginDateTime());
216216
activityData.setActualEndDateTime(moistureContent.get().actualEndDateTime());
217217
activityData.setTestCategoryCode(moistureContent.get().testCategoryCode());
218+
218219
activityService.validateActivityData(activityData);
219220
testResultService.updateTestResultStatusToCompleted(riaKey);
220221

0 commit comments

Comments
 (0)