Final changes for RO closer.

This commit is contained in:
Patrick Fic
2024-04-03 14:18:45 -07:00
parent 815ada0516
commit 5e63ce7271
18 changed files with 1266 additions and 494 deletions

View File

@@ -1,6 +1,6 @@
import React, { useCallback, useState } from 'react';
import { Badge, Card, Col, Collapse, Row, Space } from 'antd';
import { LockOutlined } from '@ant-design/icons';
import { Badge, Card, Col, Collapse, Form, Input, Row, Space, Tooltip } from 'antd';
import { useTranslation } from 'react-i18next';
import { connect } from 'react-redux';
import { createStructuredSelector } from 'reselect';
@@ -25,16 +25,20 @@ const mapDispatchToProps = (dispatch) => ({
});
export default connect(mapStateToProps, mapDispatchToProps)(JobCloseRoGuardContainer);
const colSpans = {
md: 24,
lg: 12,
xl: 8,
};
export function JobCloseRoGuardContainer({ job, jobRO, bodyshop, form }) {
const { t } = useTranslation();
const [warnings, setWarnings] = useState([]);
const warningCallback = useCallback((warning) => setWarnings((state) => [...state, warning]), []);
const warningCallback = useCallback(
({ key, warning }) =>
setWarnings((state) => {
if (state.find((s) => s.key === key)) return state;
return [...state, { key, warning }];
}),
[]
);
if (!bodyshop?.md_ro_guard?.enabled) return null;
return (
<>
@@ -48,8 +52,15 @@ export function JobCloseRoGuardContainer({ job, jobRO, bodyshop, form }) {
}
>
<ul>
{warnings.map((warning, index) => (
<li key={index}>{warning}</li>
{warnings.map((w, index) => (
<li key={index}>
{bodyshop.md_ro_guard[`enforce_${w.key}`] && (
<Tooltip title={t('jobs.labels.ro_guard.enforced')}>
<LockOutlined style={{ color: 'tomato', marginRight: '8px' }} />
</Tooltip>
)}
{w.warning}
</li>
))}
</ul>
</Card>
@@ -72,16 +83,135 @@ export function JobCloseRoGuardContainer({ job, jobRO, bodyshop, form }) {
</Col>
</Row>
</Col>
<Col className="ro-guard-col" md={24} lg={8}>
<Col className="ro-guard-col-50" md={24} lg={8}>
<JobCloseRoGuardSublet job={job} warningCallback={warningCallback} />
<JobCloseRoGuardPpd job={job} warningCallback={warningCallback} />
</Col>
<Col className="ro-guard-col" md={24} lg={10}>
<JobCloseRoGuardLabor job={job} form={form} warningCallback={warningCallback} />
</Col>
<Col className="ro-guard-col" {...colSpans}>
<JobCloseRoGuardPpd job={job} warningCallback={warningCallback} />
</Col>
</Row>
<Form.Item
name="masterbypass"
label={t('jobs.labels.masterbypass')}
rules={[
({ getFieldValue }) => ({
validator(_, value) {
if (
!PasswordCheck({ bodyshop, value }) &&
bodyshop.md_ro_guard.enforce_bills &&
warnings.find((w) => w.key === 'bills')
) {
return Promise.reject(t('jobs.labels.ro_guard.enforce_bills'));
}
return Promise.resolve();
},
}),
({ getFieldValue }) => ({
validator(_, value) {
if (
!PasswordCheck({ bodyshop, value }) &&
bodyshop.md_ro_guard.enforce_cm &&
warnings.find((w) => w.key === 'cm')
) {
return Promise.reject(
t('translation.jobs.labels.ro_guard.enforce_validation', {
message: t('jobs.labels.ro_guard.enforce_cm'),
})
);
}
return Promise.resolve();
},
}),
({ getFieldValue }) => ({
validator(_, value) {
if (
!PasswordCheck({ bodyshop, value }) &&
bodyshop.md_ro_guard.enforce_profit &&
warnings.find((w) => w.key === 'profit')
) {
return Promise.reject(
t('translation.jobs.labels.ro_guard.enforce_validation', {
message: t('jobs.labels.ro_guard.enforce_profit'),
})
);
}
return Promise.resolve();
},
}),
({ getFieldValue }) => ({
validator(_, value) {
if (
!PasswordCheck({ bodyshop, value }) &&
bodyshop.md_ro_guard.enforce_ar &&
warnings.find((w) => w.key === 'ar')
) {
return Promise.reject(
t('translation.jobs.labels.ro_guard.enforce_validation', {
message: t('jobs.labels.ro_guard.enforce_ar'),
})
);
}
return Promise.resolve();
},
}),
({ getFieldValue }) => ({
validator(_, value) {
if (
!PasswordCheck({ bodyshop, value }) &&
bodyshop.md_ro_guard.enforce_sublet &&
warnings.find((w) => w.key === 'sublet')
) {
return Promise.reject(
t('translation.jobs.labels.ro_guard.enforce_validation', {
message: t('jobs.labels.ro_guard.enforce_sublet'),
})
);
}
return Promise.resolve();
},
}),
({ getFieldValue }) => ({
validator(_, value) {
if (
!PasswordCheck({ bodyshop, value }) &&
bodyshop.md_ro_guard.enforce_ppd &&
warnings.find((w) => w.key === 'ppd')
) {
return Promise.reject(
t('translation.jobs.labels.ro_guard.enforce_validation', {
message: t('jobs.labels.ro_guard.enforce_ppd'),
})
);
}
return Promise.resolve();
},
}),
({ getFieldValue }) => ({
validator(_, value) {
if (
!PasswordCheck({ bodyshop, value }) &&
bodyshop.md_ro_guard.enforce_labor &&
warnings.find((w) => w.key === 'labor')
) {
return Promise.reject(
t('translation.jobs.labels.ro_guard.enforce_validation', {
message: t('jobs.labels.ro_guard.enforce_labor'),
})
);
}
return Promise.resolve();
},
}),
]}
>
<Input
prefix={<LockOutlined />}
type="password"
placeholder="Password"
disabled={jobRO}
/>
</Form.Item>
</Collapse.Panel>
<Collapse.Panel header={t('jobs.labels.performance')}>
@@ -95,3 +225,7 @@ export function JobCloseRoGuardContainer({ job, jobRO, bodyshop, form }) {
</>
);
}
function PasswordCheck({ bodyshop, value }) {
return value === bodyshop?.md_ro_guard?.masterbypass;
}