Report center filtering and shop info instance management.

This commit is contained in:
Patrick Fic
2024-03-12 09:40:39 -04:00
parent 53a55dd1ef
commit d9d30b59f0
9 changed files with 197 additions and 169 deletions

View File

@@ -19,6 +19,7 @@ export default function FormsFieldChanged({form, skipPrompt}) {
style={{margin: 0, padding: 0, minHeight: "unset"}} style={{margin: 0, padding: 0, minHeight: "unset"}}
> >
{() => { {() => {
console.log("should update",form.isFieldsTouched())
const errors = form.getFieldsError().filter((e) => e.errors.length > 0); const errors = form.getFieldsError().filter((e) => e.errors.length > 0);
if (form.isFieldsTouched()) if (form.isFieldsTouched())
return ( return (

View File

@@ -18,6 +18,7 @@ import EmployeeSearchSelect from "../employee-search-select/employee-search-sele
import VendorSearchSelect from "../vendor-search-select/vendor-search-select.component"; import VendorSearchSelect from "../vendor-search-select/vendor-search-select.component";
import "./report-center-modal.styles.scss"; import "./report-center-modal.styles.scss";
import ReportCenterModalFiltersSortersComponent from "./report-center-modal-filters-sorters-component"; import ReportCenterModalFiltersSortersComponent from "./report-center-modal-filters-sorters-component";
import { HasFeatureAccess } from "../feature-wrapper/feature-wrapper.component";
const mapStateToProps = createStructuredSelector({ const mapStateToProps = createStructuredSelector({
reportCenterModal: selectReportCenter, reportCenterModal: selectReportCenter,
@@ -140,6 +141,10 @@ export function ReportCenterModalComponent({reportCenterModal, bodyshop}) {
const grouped = _.groupBy(FilteredReportsList, "group"); const grouped = _.groupBy(FilteredReportsList, "group");
const groupExcludeKeyFilter = [...!HasFeatureAccess({featureName: 'bills'})? ["purchases"]:[],
...!HasFeatureAccess({featureName: 'timetickets'})? ["payroll"]:[],
]
return ( return (
<div> <div>
<Form <Form
@@ -172,7 +177,7 @@ export function ReportCenterModalComponent({reportCenterModal, bodyshop}) {
))} */} ))} */}
<Row gutter={[16, 16]}> <Row gutter={[16, 16]}>
{Object.keys(grouped).map((key) => ( {Object.keys(grouped).filter(key => !groupExcludeKeyFilter.includes(key)).map((key) => (
<Col md={8} sm={12} key={key}> <Col md={8} sm={12} key={key}>
<Card.Grid <Card.Grid
style={{ style={{

View File

@@ -18,6 +18,8 @@ import ShopInfoSpeedPrint from "./shop-info.speedprint.component";
import {useLocation, useNavigate} from "react-router-dom"; import {useLocation, useNavigate} from "react-router-dom";
import ShopInfoTaskPresets from "./shop-info.task-presets.component"; import ShopInfoTaskPresets from "./shop-info.task-presets.component";
import queryString from "query-string"; import queryString from "query-string";
import { HasFeatureAccess } from "../feature-wrapper/feature-wrapper.component";
import InstanceRenderManager from "../../utils/instanceRenderMgr";
const mapStateToProps = createStructuredSelector({ const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop, bodyshop: selectBodyshop,
@@ -76,11 +78,12 @@ export function ShopInfoComponent({bodyshop, form, saveLoading}) {
label: t("bodyshop.labels.responsibilitycenters.title"), label: t("bodyshop.labels.responsibilitycenters.title"),
children: <ShopInfoResponsibilityCenterComponent form={form}/>, children: <ShopInfoResponsibilityCenterComponent form={form}/>,
}, },
{ ...InstanceRenderManager({imex: [ {
key: "checklists", key: "checklists",
label: t("bodyshop.labels.checklists"), label: t("bodyshop.labels.checklists"),
children: <ShopInfoIntakeChecklistComponent form={form}/>, children: <ShopInfoIntakeChecklistComponent form={form}/>,
}, }], rome: "USE_IMEX", promanager:[]})
,
{ {
key: "laborrates", key: "laborrates",
label: t("bodyshop.labels.laborrates"), label: t("bodyshop.labels.laborrates"),

View File

@@ -41,7 +41,7 @@ export function ShopInfoResponsibilityCenters({bodyshop, form}) {
}) })
); );
} }
formItems.push(Space({children: section, wrap: true})); formItems.push(<Space wrap>{section}</Space> );
formItems.push(<Divider/>); formItems.push(<Divider/>);
} }
return ( return (

View File

@@ -6,6 +6,7 @@ import ColorpickerFormItemComponent from "../form-items-formatted/colorpicker-fo
import FormListMoveArrows from "../form-list-move-arrows/form-list-move-arrows.component"; import FormListMoveArrows from "../form-list-move-arrows/form-list-move-arrows.component";
import LayoutFormRow from "../layout-form-row/layout-form-row.component"; import LayoutFormRow from "../layout-form-row/layout-form-row.component";
import {ColorPicker} from "./shop-info.rostatus.component"; import {ColorPicker} from "./shop-info.rostatus.component";
import InstanceRenderManager from "../../utils/instanceRenderMgr";
export default function ShopInfoSchedulingComponent({form}) { export default function ShopInfoSchedulingComponent({form}) {
const {t} = useTranslation(); const {t} = useTranslation();
@@ -198,7 +199,8 @@ export default function ShopInfoSchedulingComponent({form}) {
}} }}
</Form.List> </Form.List>
</LayoutFormRow> </LayoutFormRow>
<LayoutFormRow header={t("bodyshop.labels.ssbuckets")} id="ssbuckets"> {
InstanceRenderManager({imex: <LayoutFormRow header={t("bodyshop.labels.ssbuckets")} id="ssbuckets">
<Form.List name={["ssbuckets"]}> <Form.List name={["ssbuckets"]}>
{(fields, {add, remove, move}) => { {(fields, {add, remove, move}) => {
return ( return (
@@ -331,7 +333,9 @@ export default function ShopInfoSchedulingComponent({form}) {
); );
}} }}
</Form.List> </Form.List>
</LayoutFormRow> </LayoutFormRow>, rome: "USE_IMEX", promanager: null})
}
</div> </div>
); );
} }

View File

@@ -10,6 +10,7 @@ import JobsCreateOwnerInfoContainer from "../../components/jobs-create-owner-inf
import JobsCreateVehicleInfoContainer import JobsCreateVehicleInfoContainer
from "../../components/jobs-create-vehicle-info/jobs-create-vehicle-info.container"; from "../../components/jobs-create-vehicle-info/jobs-create-vehicle-info.container";
import JobCreateContext from "../../pages/jobs-create/jobs-create.context"; import JobCreateContext from "../../pages/jobs-create/jobs-create.context";
import FormsFieldChanged from "../../components/form-fields-changed-alert/form-fields-changed-alert.component";
export default function JobsCreateComponent({form}) { export default function JobsCreateComponent({form}) {
const [pageIndex, setPageIndex] = useState(0); const [pageIndex, setPageIndex] = useState(0);
@@ -41,6 +42,7 @@ export default function JobsCreateComponent({form}) {
const next = () => { const next = () => {
setPageIndex(pageIndex + 1); setPageIndex(pageIndex + 1);
console.log("NExt")
}; };
const prev = () => { const prev = () => {
setPageIndex(pageIndex - 1); setPageIndex(pageIndex - 1);
@@ -57,24 +59,32 @@ export default function JobsCreateComponent({form}) {
<Button <Button
type="primary" type="primary"
onClick={() => { onClick={() => {
form
.validateFields()
.then((r) => {
if (steps[pageIndex].validation) {
setErrorMessage(null);
next(); next();
} else { // form
setErrorMessage(steps[pageIndex].error); // .validateFields()
} // .then((r) => {
}) // if (steps[pageIndex].validation) {
.catch((error) => console.log("error", error)); // setErrorMessage(null);
// next();
// } else {
// setErrorMessage(steps[pageIndex].error);
// }
// })
// .catch((error) => console.log("error", error));
}} }}
> >
Next Next
</Button> </Button>
)} )}
{pageIndex === steps.length - 1 && ( {pageIndex === steps.length - 1 && (
<Button type="primary" htmlType="submit"> <Button type="primary" onClick={() => {
form
.validateFields()
.then((r) => {
})
.catch((error) => console.log("error", error));
form.submit()}}>
Done Done
</Button> </Button>
)} )}
@@ -91,18 +101,18 @@ export default function JobsCreateComponent({form}) {
cursor: "pointer", cursor: "pointer",
fontWeight: idx === pageIndex && "bolder", fontWeight: idx === pageIndex && "bolder",
}} }}
onClick={() => { onClick={() => { setPageIndex(idx);
form // form
.validateFields() // .validateFields()
.then((r) => { // .then((r) => {
if (steps[pageIndex].validation) { // if (steps[pageIndex].validation) {
setErrorMessage(null); // setErrorMessage(null);
setPageIndex(idx); // setPageIndex(idx);
} else { // } else {
setErrorMessage(steps[pageIndex].error); // setErrorMessage(steps[pageIndex].error);
} // }
}) // })
.catch((error) => console.log("error", error)); // .catch((error) => console.log("error", error));
}} }}
/> />
))} ))}
@@ -132,7 +142,7 @@ export default function JobsCreateComponent({form}) {
) : ( ) : (
<div> <div>
<ProgressButtons top/> <ProgressButtons top/>
<FormsFieldChanged form={form} />
{errorMessage ? ( {errorMessage ? (
<div> <div>
<AlertComponent message={errorMessage} type="error"/> <AlertComponent message={errorMessage} type="error"/>

View File

@@ -153,7 +153,7 @@ function JobsCreateContainer({bodyshop, setBreadcrumbs, setSelectedHeader}) {
<JobCreateContext.Provider value={contextState}> <JobCreateContext.Provider value={contextState}>
<RbacWrapper action="jobs:create"> <RbacWrapper action="jobs:create">
<Form <Form
scrollToFirstError
form={form} form={form}
onFinish={handleFinish} onFinish={handleFinish}
layout="vertical" layout="vertical"

View File

@@ -15,6 +15,7 @@ import {selectBodyshop} from "../../redux/user/user.selectors";
import ShopInfoUsersComponent from "../../components/shop-users/shop-users.component"; import ShopInfoUsersComponent from "../../components/shop-users/shop-users.component";
import ShopTeamsContainer from "../../components/shop-teams/shop-teams.container"; import ShopTeamsContainer from "../../components/shop-teams/shop-teams.container";
import { HasFeatureAccess } from "../../components/feature-wrapper/feature-wrapper.component";
const mapStateToProps = createStructuredSelector({ const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop, bodyshop: selectBodyshop,
@@ -69,12 +70,15 @@ export function ShopPage({bodyshop, setSelectedHeader, setBreadcrumbs}) {
label: t("bodyshop.labels.licensing"), label: t("bodyshop.labels.licensing"),
children: <ShopInfoUsersComponent/>, children: <ShopInfoUsersComponent/>,
}, },
{ );
if(HasFeatureAccess("csi")){
items.push({
key: "csiq", key: "csiq",
label: t("bodyshop.labels.csiq"), label: t("bodyshop.labels.csiq"),
children: <ShopCsiConfig/>, children: <ShopCsiConfig/>,
}); })
}
return ( return (
<RbacWrapper action="shop:config"> <RbacWrapper action="shop:config">
<Tabs <Tabs

View File

@@ -5,9 +5,10 @@ import InstanceRenderManager from './instanceRenderMgr'
export const EmailSettings = { export const EmailSettings = {
fromNameDefault: InstanceRenderManager({ fromNameDefault: InstanceRenderManager({
imex: "ImEX Online", imex: "ImEX Online",
rome:"Rome Online" rome:"Rome Online",
promanager: "ProManager"
}) , }) ,
fromAddress: InstanceRenderManager({imex: "noreply@imex.online" ,rome:"noreply@romeonline.io"}) , fromAddress: InstanceRenderManager({imex: "noreply@imex.online" ,rome:"noreply@romeonline.io", promanager: "noreply@promanager.web-est.com"}) ,
}; };
export const TemplateList = (type, context) => { export const TemplateList = (type, context) => {