feature/IO-3497-Ant-Design-v5-to-v6 - Signed off Files

This commit is contained in:
Dave
2026-01-12 11:34:25 -05:00
parent c3da0d9035
commit c119a66f27
70 changed files with 442 additions and 463 deletions

153
client/package-lock.json generated
View File

@@ -11,7 +11,7 @@
"dependencies": { "dependencies": {
"@amplitude/analytics-browser": "^2.33.1", "@amplitude/analytics-browser": "^2.33.1",
"@ant-design/pro-layout": "^7.22.6", "@ant-design/pro-layout": "^7.22.6",
"@apollo/client": "^3.13.9", "@apollo/client": "^4.0.12",
"@emotion/is-prop-valid": "^1.4.0", "@emotion/is-prop-valid": "^1.4.0",
"@fingerprintjs/fingerprintjs": "^4.6.1", "@fingerprintjs/fingerprintjs": "^4.6.1",
"@firebase/analytics": "^0.10.19", "@firebase/analytics": "^0.10.19",
@@ -27,7 +27,7 @@
"@splitsoftware/splitio-react": "^2.6.1", "@splitsoftware/splitio-react": "^2.6.1",
"@tanem/react-nprogress": "^5.0.56", "@tanem/react-nprogress": "^5.0.56",
"antd": "^6.1.4", "antd": "^6.1.4",
"apollo-link-logger": "^2.0.1", "apollo-link-logger": "^3.0.0",
"apollo-link-sentry": "^4.4.0", "apollo-link-sentry": "^4.4.0",
"autosize": "^6.0.1", "autosize": "^6.0.1",
"axios": "^1.13.2", "axios": "^1.13.2",
@@ -51,7 +51,7 @@
"normalize-url": "^8.1.1", "normalize-url": "^8.1.1",
"object-hash": "^3.0.0", "object-hash": "^3.0.0",
"phone": "^3.1.69", "phone": "^3.1.69",
"posthog-js": "^1.316.1", "posthog-js": "^1.318.2",
"prop-types": "^15.8.1", "prop-types": "^15.8.1",
"query-string": "^9.3.1", "query-string": "^9.3.1",
"raf-schd": "^4.0.3", "raf-schd": "^4.0.3",
@@ -84,7 +84,7 @@
"reselect": "^5.1.1", "reselect": "^5.1.1",
"sass": "^1.97.2", "sass": "^1.97.2",
"socket.io-client": "^4.8.3", "socket.io-client": "^4.8.3",
"styled-components": "^6.2.0", "styled-components": "^6.3.5",
"subscriptions-transport-ws": "^0.11.0", "subscriptions-transport-ws": "^0.11.0",
"use-memo-one": "^1.1.3", "use-memo-one": "^1.1.3",
"vite-plugin-ejs": "^1.7.0", "vite-plugin-ejs": "^1.7.0",
@@ -553,30 +553,30 @@
} }
}, },
"node_modules/@apollo/client": { "node_modules/@apollo/client": {
"version": "3.14.0", "version": "4.0.12",
"resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.14.0.tgz", "resolved": "https://registry.npmjs.org/@apollo/client/-/client-4.0.12.tgz",
"integrity": "sha512-0YQKKRIxiMlIou+SekQqdCo0ZTHxOcES+K8vKB53cIDpwABNR0P0yRzPgsbgcj3zRJniD93S/ontsnZsCLZrxQ==", "integrity": "sha512-CyDR+2A18TFH08rKvH3DaV63eRE0E4pj34gT8UZIQVP64bRRXnQiYuKTf/c6oJNY8+4FrCrcPwWEldnVbh02bA==",
"license": "MIT", "license": "MIT",
"workspaces": [
"dist",
"codegen",
"scripts/codemods/ac3-to-ac4"
],
"dependencies": { "dependencies": {
"@graphql-typed-document-node/core": "^3.1.1", "@graphql-typed-document-node/core": "^3.1.1",
"@wry/caches": "^1.0.0", "@wry/caches": "^1.0.0",
"@wry/equality": "^0.5.6", "@wry/equality": "^0.5.6",
"@wry/trie": "^0.5.0", "@wry/trie": "^0.5.0",
"graphql-tag": "^2.12.6", "graphql-tag": "^2.12.6",
"hoist-non-react-statics": "^3.3.2",
"optimism": "^0.18.0", "optimism": "^0.18.0",
"prop-types": "^15.7.2", "tslib": "^2.3.0"
"rehackt": "^0.1.0",
"symbol-observable": "^4.0.0",
"ts-invariant": "^0.10.3",
"tslib": "^2.3.0",
"zen-observable-ts": "^1.2.5"
}, },
"peerDependencies": { "peerDependencies": {
"graphql": "^15.0.0 || ^16.0.0", "graphql": "^16.0.0",
"graphql-ws": "^5.5.5 || ^6.0.3", "graphql-ws": "^5.5.5 || ^6.0.3",
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc", "react": "^17.0.0 || ^18.0.0 || >=19.0.0-rc",
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc", "react-dom": "^17.0.0 || ^18.0.0 || >=19.0.0-rc",
"rxjs": "^7.3.0",
"subscriptions-transport-ws": "^0.9.0 || ^0.11.0" "subscriptions-transport-ws": "^0.9.0 || ^0.11.0"
}, },
"peerDependenciesMeta": { "peerDependenciesMeta": {
@@ -4225,9 +4225,9 @@
} }
}, },
"node_modules/@posthog/types": { "node_modules/@posthog/types": {
"version": "1.316.1", "version": "1.318.2",
"resolved": "https://registry.npmjs.org/@posthog/types/-/types-1.316.1.tgz", "resolved": "https://registry.npmjs.org/@posthog/types/-/types-1.318.2.tgz",
"integrity": "sha512-rh8GSOnmnwd0fUIBYzQcXt4WYXMg9QPkY0tE46K0eneWYVyqNYXFXzcdf2U37g+ZYNiBq9ubLeCD7h0C0MDJgw==", "integrity": "sha512-/4m1DStpyaZStTJJ4b7RyftnFoSM/IWmVBTiWvdm2e2I8A8W3D4+YY7YkTpPtTinRZEhDQEZFjhlHdDgNCiNuA==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/@protobufjs/aspromise": { "node_modules/@protobufjs/aspromise": {
@@ -6805,7 +6805,7 @@
"version": "2.0.7", "version": "2.0.7",
"resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
"integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",
"dev": true, "devOptional": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/@types/unist": { "node_modules/@types/unist": {
@@ -7266,16 +7266,16 @@
} }
}, },
"node_modules/apollo-link-logger": { "node_modules/apollo-link-logger": {
"version": "2.0.1", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/apollo-link-logger/-/apollo-link-logger-2.0.1.tgz", "resolved": "https://registry.npmjs.org/apollo-link-logger/-/apollo-link-logger-3.0.0.tgz",
"integrity": "sha512-4KkdwCqWtlOc0vx0W/5o+UfotyZtcJZicraKNyo2KTaCmAGSJ8vDnNRyDlv6o5XtSgdv4NA36cSe6dt49OkGWA==", "integrity": "sha512-7j557AndpQXqmOg6MLERh9eCGrKdQSoIzHPSU+9Umw8EnkwU+CphCXb4p22Zx6yRnYxVV7fOrqbB+4lsfloATQ==",
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">= 10", "node": ">= 10",
"npm": "> 3" "npm": "> 3"
}, },
"peerDependencies": { "peerDependencies": {
"@apollo/client": "^3.0.0" "@apollo/client": "^4.0.0"
} }
}, },
"node_modules/apollo-link-sentry": { "node_modules/apollo-link-sentry": {
@@ -9156,6 +9156,15 @@
"url": "https://bevry.me/fund" "url": "https://bevry.me/fund"
} }
}, },
"node_modules/dompurify": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.3.1.tgz",
"integrity": "sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q==",
"license": "(MPL-2.0 OR Apache-2.0)",
"optionalDependencies": {
"@types/trusted-types": "^2.0.7"
}
},
"node_modules/dot-case": { "node_modules/dot-case": {
"version": "3.0.4", "version": "3.0.4",
"resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz",
@@ -14189,16 +14198,18 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/posthog-js": { "node_modules/posthog-js": {
"version": "1.316.1", "version": "1.318.2",
"resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.316.1.tgz", "resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.318.2.tgz",
"integrity": "sha512-4B0PHnMZwjV9aoQRQ5OqrPa40aCVlqRx1aZMCZCbZ4Z7c91bpOJDpENGGyxFvjUoNN+f8MP8LHZBdn5DPQyWTg==", "integrity": "sha512-M5C/3HYlyNaqmCIwgGkmJLcGt5MREwsllwGLAOO3nMYhrWSjEuJnEzenplHxa/4UgwvhR4121ErzRHgK67qq1A==",
"license": "SEE LICENSE IN LICENSE", "license": "SEE LICENSE IN LICENSE",
"dependencies": { "dependencies": {
"@posthog/core": "1.9.1", "@posthog/core": "1.9.1",
"@posthog/types": "1.316.1", "@posthog/types": "1.318.2",
"core-js": "^3.38.1", "core-js": "^3.38.1",
"dompurify": "^3.3.1",
"fflate": "^0.4.8", "fflate": "^0.4.8",
"preact": "^10.19.3", "preact": "^10.19.3",
"query-selector-shadow-dom": "^1.0.1",
"web-vitals": "^4.2.4" "web-vitals": "^4.2.4"
} }
}, },
@@ -14411,6 +14422,12 @@
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
} }
}, },
"node_modules/query-selector-shadow-dom": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/query-selector-shadow-dom/-/query-selector-shadow-dom-1.0.1.tgz",
"integrity": "sha512-lT5yCqEBgfoMYpf3F2xQRK7zEr1rhIIZuceDK6+xRkJQ4NMbHTwXqk4NkwDwQMNqXgG9r9fyHnzwNVs6zV5KRw==",
"license": "MIT"
},
"node_modules/query-string": { "node_modules/query-string": {
"version": "9.3.1", "version": "9.3.1",
"resolved": "https://registry.npmjs.org/query-string/-/query-string-9.3.1.tgz", "resolved": "https://registry.npmjs.org/query-string/-/query-string-9.3.1.tgz",
@@ -15249,24 +15266,6 @@
"regjsparser": "bin/parser" "regjsparser": "bin/parser"
} }
}, },
"node_modules/rehackt": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/rehackt/-/rehackt-0.1.0.tgz",
"integrity": "sha512-7kRDOuLHB87D/JESKxQoRwv4DzbIdwkAGQ7p6QKGdVlY1IZheUnVhlk/4UZlNUVxdAXpyxikE3URsG067ybVzw==",
"license": "MIT",
"peerDependencies": {
"@types/react": "*",
"react": "*"
},
"peerDependenciesMeta": {
"@types/react": {
"optional": true
},
"react": {
"optional": true
}
}
},
"node_modules/remark-parse": { "node_modules/remark-parse": {
"version": "11.0.0", "version": "11.0.0",
"resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz",
@@ -16543,20 +16542,20 @@
} }
}, },
"node_modules/styled-components": { "node_modules/styled-components": {
"version": "6.2.0", "version": "6.3.5",
"resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.2.0.tgz", "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.3.5.tgz",
"integrity": "sha512-ryFCkETE++8jlrBmC+BoGPUN96ld1/Yp0s7t5bcXDobrs4XoXroY1tN+JbFi09hV6a5h3MzbcVi8/BGDP0eCgQ==", "integrity": "sha512-f8jAunVw/r41o17+JlWVlMTsyBKyghCdQ84YCKPxgKSMOZJbK3CKPxeIhotz6hlXvHb0w62zG4yyOdGY0kaB3g==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@emotion/is-prop-valid": "1.2.2", "@emotion/is-prop-valid": "1.4.0",
"@emotion/unitless": "0.8.1", "@emotion/unitless": "0.10.0",
"@types/stylis": "4.2.7", "@types/stylis": "4.2.7",
"css-to-react-native": "3.2.0", "css-to-react-native": "3.2.0",
"csstype": "3.2.3", "csstype": "3.2.3",
"postcss": "8.4.49", "postcss": "8.4.49",
"shallowequal": "1.1.0", "shallowequal": "1.1.0",
"stylis": "4.3.6", "stylis": "4.3.6",
"tslib": "2.6.2" "tslib": "2.8.1"
}, },
"engines": { "engines": {
"node": ">= 16" "node": ">= 16"
@@ -16570,33 +16569,12 @@
"react-dom": ">= 16.8.0" "react-dom": ">= 16.8.0"
} }
}, },
"node_modules/styled-components/node_modules/@emotion/is-prop-valid": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz",
"integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==",
"license": "MIT",
"dependencies": {
"@emotion/memoize": "^0.8.1"
}
},
"node_modules/styled-components/node_modules/@emotion/memoize": {
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz",
"integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==",
"license": "MIT"
},
"node_modules/styled-components/node_modules/@emotion/unitless": { "node_modules/styled-components/node_modules/@emotion/unitless": {
"version": "0.8.1", "version": "0.10.0",
"resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz",
"integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==", "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/styled-components/node_modules/tslib": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
"integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
"license": "0BSD"
},
"node_modules/stylis": { "node_modules/stylis": {
"version": "4.3.6", "version": "4.3.6",
"resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.6.tgz", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.6.tgz",
@@ -16695,15 +16673,6 @@
"react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" "react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
} }
}, },
"node_modules/symbol-observable": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz",
"integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==",
"license": "MIT",
"engines": {
"node": ">=0.10"
}
},
"node_modules/symbol-tree": { "node_modules/symbol-tree": {
"version": "3.2.4", "version": "3.2.4",
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
@@ -17038,18 +17007,6 @@
"url": "https://github.com/sponsors/wooorm" "url": "https://github.com/sponsors/wooorm"
} }
}, },
"node_modules/ts-invariant": {
"version": "0.10.3",
"resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.10.3.tgz",
"integrity": "sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==",
"license": "MIT",
"dependencies": {
"tslib": "^2.1.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/tslib": { "node_modules/tslib": {
"version": "2.8.1", "version": "2.8.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",

View File

@@ -10,7 +10,7 @@
"dependencies": { "dependencies": {
"@amplitude/analytics-browser": "^2.33.1", "@amplitude/analytics-browser": "^2.33.1",
"@ant-design/pro-layout": "^7.22.6", "@ant-design/pro-layout": "^7.22.6",
"@apollo/client": "^3.13.9", "@apollo/client": "^4.0.12",
"@emotion/is-prop-valid": "^1.4.0", "@emotion/is-prop-valid": "^1.4.0",
"@fingerprintjs/fingerprintjs": "^4.6.1", "@fingerprintjs/fingerprintjs": "^4.6.1",
"@firebase/analytics": "^0.10.19", "@firebase/analytics": "^0.10.19",
@@ -26,7 +26,7 @@
"@splitsoftware/splitio-react": "^2.6.1", "@splitsoftware/splitio-react": "^2.6.1",
"@tanem/react-nprogress": "^5.0.56", "@tanem/react-nprogress": "^5.0.56",
"antd": "^6.1.4", "antd": "^6.1.4",
"apollo-link-logger": "^2.0.1", "apollo-link-logger": "^3.0.0",
"apollo-link-sentry": "^4.4.0", "apollo-link-sentry": "^4.4.0",
"autosize": "^6.0.1", "autosize": "^6.0.1",
"axios": "^1.13.2", "axios": "^1.13.2",
@@ -50,7 +50,7 @@
"normalize-url": "^8.1.1", "normalize-url": "^8.1.1",
"object-hash": "^3.0.0", "object-hash": "^3.0.0",
"phone": "^3.1.69", "phone": "^3.1.69",
"posthog-js": "^1.316.1", "posthog-js": "^1.318.2",
"prop-types": "^15.8.1", "prop-types": "^15.8.1",
"query-string": "^9.3.1", "query-string": "^9.3.1",
"raf-schd": "^4.0.3", "raf-schd": "^4.0.3",
@@ -83,7 +83,7 @@
"reselect": "^5.1.1", "reselect": "^5.1.1",
"sass": "^1.97.2", "sass": "^1.97.2",
"socket.io-client": "^4.8.3", "socket.io-client": "^4.8.3",
"styled-components": "^6.2.0", "styled-components": "^6.3.5",
"subscriptions-transport-ws": "^0.11.0", "subscriptions-transport-ws": "^0.11.0",
"use-memo-one": "^1.1.3", "use-memo-one": "^1.1.3",
"vite-plugin-ejs": "^1.7.0", "vite-plugin-ejs": "^1.7.0",

View File

@@ -176,7 +176,7 @@ export function AccountingPayablesTableComponent({ bodyshop, loading, bills, ref
<Table <Table
loading={loading} loading={loading}
dataSource={dataSource} dataSource={dataSource}
pagination={{ position: "top", pageSize: exportPageLimit }} pagination={{ placement: "top", pageSize: exportPageLimit }}
columns={columns} columns={columns}
rowKey="id" rowKey="id"
onChange={handleTableChange} onChange={handleTableChange}

View File

@@ -189,7 +189,7 @@ export function AccountingPayablesTableComponent({ bodyshop, loading, payments,
<Table <Table
loading={loading} loading={loading}
dataSource={dataSource} dataSource={dataSource}
pagination={{ position: "top", pageSize: exportPageLimit }} pagination={{ placement: "top", pageSize: exportPageLimit }}
columns={columns} columns={columns}
rowKey="id" rowKey="id"
onChange={handleTableChange} onChange={handleTableChange}

View File

@@ -211,7 +211,7 @@ export function AccountingReceivablesTableComponent({ bodyshop, loading, jobs, r
<Table <Table
loading={loading} loading={loading}
dataSource={dataSource} dataSource={dataSource}
pagination={{ position: "top", pageSize: exportPageLimit }} pagination={{ placement: "top", pageSize: exportPageLimit }}
columns={columns} columns={columns}
rowKey="id" rowKey="id"
onChange={handleTableChange} onChange={handleTableChange}

View File

@@ -65,7 +65,7 @@ export default function AuditTrailListComponent({ loading, data }) {
<Table <Table
{...formItemLayout} {...formItemLayout}
loading={loading} loading={loading}
pagination={{ position: "top", defaultPageSize: pageLimit }} pagination={{ placement: "top", defaultPageSize: pageLimit }}
columns={columns} columns={columns}
rowKey="id" rowKey="id"
dataSource={data} dataSource={data}

View File

@@ -50,7 +50,7 @@ export default function EmailAuditTrailListComponent({ loading, data }) {
<Table <Table
{...formItemLayout} {...formItemLayout}
loading={loading} loading={loading}
pagination={{ position: "top", defaultPageSize: pageLimit }} pagination={{ placement: "top", defaultPageSize: pageLimit }}
columns={columns} columns={columns}
rowKey="id" rowKey="id"
dataSource={data} dataSource={data}

View File

@@ -189,7 +189,7 @@ export function BillDetailEditcontainer({ insertAuditTrail, bodyshop }) {
/> />
<Form form={form} onFinish={handleFinish} initialValues={transformData(data)} layout="vertical"> <Form form={form} onFinish={handleFinish} initialValues={transformData(data)} layout="vertical">
<BillFormContainer form={form} billEdit disabled={exported} disableInHouse={isinhouse} /> <BillFormContainer form={form} billEdit disabled={exported} disableInHouse={isinhouse} />
<Divider orientation="left">{t("general.labels.media")}</Divider> <Divider titlePlacement="left">{t("general.labels.media")}</Divider>
{bodyshop.uselocalmediaserver ? ( {bodyshop.uselocalmediaserver ? (
<JobsDocumentsLocalGallery <JobsDocumentsLocalGallery
job={{ id: data ? data.bills_by_pk.jobid : null }} job={{ id: data ? data.bills_by_pk.jobid : null }}

View File

@@ -429,7 +429,7 @@ export function BillFormComponent({
}} }}
</Form.Item> </Form.Item>
</LayoutFormRow> </LayoutFormRow>
<Divider orientation="left">{t("bills.labels.bill_lines")}</Divider> <Divider titlePlacement="left">{t("bills.labels.bill_lines")}</Divider>
{Extended_Bill_Posting.treatment === "on" ? ( {Extended_Bill_Posting.treatment === "on" ? (
<BillFormLinesExtended <BillFormLinesExtended
@@ -449,7 +449,7 @@ export function BillFormComponent({
billEdit={billEdit} billEdit={billEdit}
/> />
)} )}
<Divider orientation="left" style={{ display: billEdit ? "none" : null }}> <Divider titlePlacement="left" style={{ display: billEdit ? "none" : null }}>
{t("documents.labels.upload")} {t("documents.labels.upload")}
</Divider> </Divider>
<Form.Item <Form.Item

View File

@@ -89,7 +89,7 @@ export default function BillsVendorsList() {
); );
}} }}
dataSource={dataSource} dataSource={dataSource}
pagination={{ position: "top" }} pagination={{ placement: "top" }}
columns={columns} columns={columns}
rowKey="id" rowKey="id"
onChange={handleTableChange} onChange={handleTableChange}

View File

@@ -104,7 +104,7 @@ export default function ContractsCarsComponent({ loading, data, selectedCarId, h
> >
<Table <Table
loading={loading} loading={loading}
pagination={{ position: "top" }} pagination={{ placement: "top" }}
columns={columns} columns={columns}
rowKey="id" rowKey="id"
dataSource={filteredData} dataSource={filteredData}

View File

@@ -128,11 +128,7 @@ export default function ContractsJobsComponent({ loading, data, selectedJob, han
> >
<Table <Table
loading={loading} loading={loading}
pagination={{ pagination={{ placement: "top", defaultPageSize: pageLimit, defaultCurrent: defaultCurrent }}
position: "top",
defaultPageSize: pageLimit,
defaultCurrent: defaultCurrent
}}
columns={columns} columns={columns}
rowKey="id" rowKey="id"
dataSource={filteredData} dataSource={filteredData}

View File

@@ -172,12 +172,7 @@ export function ContractsList({ bodyshop, loading, contracts, refetch, total, se
scroll={{ scroll={{
x: "50%" //y: "40rem" x: "50%" //y: "40rem"
}} }}
pagination={{ pagination={{ placement: "top", pageSize: pageLimit, current: parseInt(page || 1, 10), total: total }}
position: "top",
pageSize: pageLimit,
current: parseInt(page || 1, 10),
total: total
}}
columns={columns} columns={columns}
rowKey="id" rowKey="id"
dataSource={contracts} dataSource={contracts}

View File

@@ -75,12 +75,7 @@ export default function CourtesyCarContractListComponent({ contracts, totalContr
<Card title={t("menus.header.courtesycars-contracts")}> <Card title={t("menus.header.courtesycars-contracts")}>
<Table <Table
scroll={{ x: true }} scroll={{ x: true }}
pagination={{ pagination={{ placement: "top", pageSize: pageLimit, current: parseInt(page || 1), total: totalContracts }}
position: "top",
pageSize: pageLimit,
current: parseInt(page || 1),
total: totalContracts
}}
columns={columns} columns={columns}
rowKey="id" rowKey="id"
dataSource={contracts} dataSource={contracts}

View File

@@ -278,7 +278,7 @@ export default function CourtesyCarsList({ loading, courtesycars, refetch }) {
> >
<Table <Table
loading={loading} loading={loading}
pagination={{ position: "top" }} pagination={{ placement: "top" }}
columns={columns} columns={columns}
rowKey="id" rowKey="id"
dataSource={tableData} dataSource={tableData}

View File

@@ -94,12 +94,7 @@ export default function CsiResponseListPaginated({ refetch, loading, responses,
> >
<Table <Table
loading={loading} loading={loading}
pagination={{ pagination={{ placement: "top", pageSize: pageLimit, current: parseInt(state.page || 1), total: total }}
position: "top",
pageSize: pageLimit,
current: parseInt(state.page || 1),
total: total
}}
columns={columns} columns={columns}
rowKey="id" rowKey="id"
dataSource={responses} dataSource={responses}

View File

@@ -105,7 +105,7 @@ export default function DashboardMonthlyJobCosting({ data, ...cardProps }) {
<div style={{ height: "100%" }}> <div style={{ height: "100%" }}>
<Table <Table
onChange={handleTableChange} onChange={handleTableChange}
pagination={{ position: "top", defaultPageSize: pageLimit }} pagination={{ placement: "top", defaultPageSize: pageLimit }}
columns={columns} columns={columns}
scroll={{ x: true, y: "calc(100% - 4em)" }} scroll={{ x: true, y: "calc(100% - 4em)" }}
rowKey="id" rowKey="id"

View File

@@ -2,14 +2,14 @@ import Icon, { SyncOutlined } from "@ant-design/icons";
import { useMutation, useQuery } from "@apollo/client"; import { useMutation, useQuery } from "@apollo/client";
import { Button, Dropdown, Space } from "antd"; import { Button, Dropdown, Space } from "antd";
import { PageHeader } from "@ant-design/pro-layout"; import { PageHeader } from "@ant-design/pro-layout";
import { useMemo, useState, useEffect } from "react"; import { useEffect, useMemo, useState } from "react";
import { Responsive, WidthProvider } from "react-grid-layout"; import { Responsive, WidthProvider } from "react-grid-layout";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { MdClose } from "react-icons/md"; import { MdClose } from "react-icons/md";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { createStructuredSelector } from "reselect"; import { createStructuredSelector } from "reselect";
import { logImEXEvent } from "../../firebase/firebase.utils"; import { logImEXEvent } from "../../firebase/firebase.utils";
import { UPDATE_DASHBOARD_LAYOUT, QUERY_USER_DASHBOARD_LAYOUT } from "../../graphql/user.queries"; import { QUERY_USER_DASHBOARD_LAYOUT, UPDATE_DASHBOARD_LAYOUT } from "../../graphql/user.queries";
import { QUERY_DASHBOARD_BODYSHOP } from "../../graphql/bodyshop.queries"; import { QUERY_DASHBOARD_BODYSHOP } from "../../graphql/bodyshop.queries";
import { selectCurrentUser } from "../../redux/user/user.selectors"; import { selectCurrentUser } from "../../redux/user/user.selectors";
import AlertComponent from "../alert/alert.component"; import AlertComponent from "../alert/alert.component";

View File

@@ -112,7 +112,7 @@ export function DmsAllocationsSummaryAp({ socket, bodyshop, billids, title }) {
} }
> >
<Table <Table
pagination={{ position: "top", defaultPageSize: pageLimit }} pagination={{ placement: "top", defaultPageSize: pageLimit }}
columns={columns} columns={columns}
rowKey={(record) => `${record.InvoiceNumber}${record.Account}`} rowKey={(record) => `${record.InvoiceNumber}${record.Account}`}
dataSource={allocationsSummary} dataSource={allocationsSummary}

View File

@@ -116,7 +116,7 @@ export function DmsAllocationsSummary({ mode, socket, bodyshop, jobId, title, on
)} )}
<Table <Table
pagination={{ position: "top", defaultPageSize: pageLimit }} pagination={{ placement: "top", defaultPageSize: pageLimit }}
columns={columns} columns={columns}
rowKey="center" rowKey="center"
dataSource={allocationsSummary} dataSource={allocationsSummary}

View File

@@ -84,7 +84,7 @@ export default function CDKCustomerSelector({ bodyshop, socket }) {
<Button onClick={onCreateNew}>{t("jobs.actions.dms.createnewcustomer")}</Button> <Button onClick={onCreateNew}>{t("jobs.actions.dms.createnewcustomer")}</Button>
</div> </div>
)} )}
pagination={{ position: "top" }} pagination={{ placement: "top" }}
columns={columns} columns={columns}
rowKey={rowKey} rowKey={rowKey}
dataSource={customerList} dataSource={customerList}

View File

@@ -90,7 +90,7 @@ export default function FortellisCustomerSelector({ bodyshop, jobid, socket }) {
<Button onClick={onCreateNew}>{t("jobs.actions.dms.createnewcustomer")}</Button> <Button onClick={onCreateNew}>{t("jobs.actions.dms.createnewcustomer")}</Button>
</div> </div>
)} )}
pagination={{ position: "top" }} pagination={{ placement: "top" }}
columns={columns} columns={columns}
rowKey={(r) => r.customerId} rowKey={(r) => r.customerId}
dataSource={customerList} dataSource={customerList}

View File

@@ -78,7 +78,7 @@ export default function PBSCustomerSelector({ bodyshop, socket }) {
<Button onClick={onCreateNew}>{t("jobs.actions.dms.createnewcustomer")}</Button> <Button onClick={onCreateNew}>{t("jobs.actions.dms.createnewcustomer")}</Button>
</div> </div>
)} )}
pagination={{ position: "top" }} pagination={{ placement: "top" }}
columns={columns} columns={columns}
rowKey={(r) => r.ContactId} rowKey={(r) => r.ContactId}
dataSource={customerList} dataSource={customerList}

View File

@@ -251,7 +251,7 @@ export default function RRCustomerSelector({
)} )}
</div> </div>
)} )}
pagination={{ position: "top" }} pagination={{ placement: "top" }}
columns={columns} columns={columns}
rowKey={(r) => r.custNo} rowKey={(r) => r.custNo}
dataSource={customerList} dataSource={customerList}

View File

@@ -74,13 +74,13 @@ export function DmsLogEvents({
{/* Row 1: summary + inline "Details" toggle */} {/* Row 1: summary + inline "Details" toggle */}
<Space wrap align="start"> <Space wrap align="start">
<Tag color={logLevelColor(level)}>{level}</Tag> <Tag color={logLevelColor(level)}>{level}</Tag>
<Divider type="vertical" /> <Divider orientation="vertical" />
<span>{dayjs(timestamp).format("MM/DD/YYYY HH:mm:ss")}</span> <span>{dayjs(timestamp).format("MM/DD/YYYY HH:mm:ss")}</span>
<Divider type="vertical" /> <Divider orientation="vertical" />
<span>{message}</span> <span>{message}</span>
{hasMeta && ( {hasMeta && (
<> <>
<Divider type="vertical" /> <Divider orientation="vertical" />
<a <a
role="button" role="button"
aria-expanded={isOpen} aria-expanded={isOpen}

View File

@@ -131,10 +131,7 @@ const DateTimePicker = ({
if (timeValue) { if (timeValue) {
// When time changes, combine it with the existing date // When time changes, combine it with the existing date
const existingDate = dayjs(value); const existingDate = dayjs(value);
const newDateTime = existingDate const newDateTime = existingDate.hour(timeValue.hour()).minute(timeValue.minute()).second(0);
.hour(timeValue.hour())
.minute(timeValue.minute())
.second(0);
handleChange(newDateTime); handleChange(newDateTime);
} else { } else {
// If time is cleared, just update with null time but keep date // If time is cleared, just update with null time but keep date

View File

@@ -37,7 +37,7 @@ export default function GlobalSearch() {
value: job.ro_number || "N/A", value: job.ro_number || "N/A",
label: ( label: (
<Link to={`/manage/jobs/${job.id}`}> <Link to={`/manage/jobs/${job.id}`}>
<Space size="small" split={<Divider type="vertical" />}> <Space size="small" split={<Divider orientation="vertical" />}>
<strong>{job.ro_number || t("general.labels.na")}</strong> <strong>{job.ro_number || t("general.labels.na")}</strong>
<span>{`${job.status || ""}`}</span> <span>{`${job.status || ""}`}</span>
<span> <span>
@@ -59,7 +59,7 @@ export default function GlobalSearch() {
value: OwnerNameDisplayFunction(owner), value: OwnerNameDisplayFunction(owner),
label: ( label: (
<Link to={`/manage/owners/${owner.id}`}> <Link to={`/manage/owners/${owner.id}`}>
<Space size="small" split={<Divider type="vertical" />} wrap> <Space size="small" split={<Divider orientation="vertical" />} wrap>
<span> <span>
<OwnerNameDisplay ownerObject={owner} /> <OwnerNameDisplay ownerObject={owner} />
</span> </span>
@@ -79,7 +79,7 @@ export default function GlobalSearch() {
value: `${vehicle.v_model_yr || ""} ${vehicle.v_make_desc || ""} ${vehicle.v_model_desc || ""}`, value: `${vehicle.v_model_yr || ""} ${vehicle.v_make_desc || ""} ${vehicle.v_model_desc || ""}`,
label: ( label: (
<Link to={`/manage/vehicles/${vehicle.id}`}> <Link to={`/manage/vehicles/${vehicle.id}`}>
<Space size="small" split={<Divider type="vertical" />}> <Space size="small" split={<Divider orientation="vertical" />}>
<span> <span>
{`${vehicle.v_model_yr || ""} ${vehicle.v_make_desc || ""} ${vehicle.v_model_desc || ""}`} {`${vehicle.v_model_yr || ""} ${vehicle.v_make_desc || ""} ${vehicle.v_model_desc || ""}`}
</span> </span>
@@ -101,7 +101,7 @@ export default function GlobalSearch() {
value: `${payment.job.ro_number} ${payment.payer} ${payment.amount}`, value: `${payment.job.ro_number} ${payment.payer} ${payment.amount}`,
label: ( label: (
<Link to={`/manage/jobs/${payment.job.id}`}> <Link to={`/manage/jobs/${payment.job.id}`}>
<Space size="small" split={<Divider type="vertical" />}> <Space size="small" split={<Divider orientation="vertical" />}>
<span>{payment.paymentnum}</span> <span>{payment.paymentnum}</span>
<span>{payment.job.ro_number}</span> <span>{payment.job.ro_number}</span>
<span>{payment.memo || ""}</span> <span>{payment.memo || ""}</span>
@@ -121,7 +121,7 @@ export default function GlobalSearch() {
value: `${bill.invoice_number} - ${bill.vendor.name}`, value: `${bill.invoice_number} - ${bill.vendor.name}`,
label: ( label: (
<Link to={`/manage/bills?billid=${bill.id}`}> <Link to={`/manage/bills?billid=${bill.id}`}>
<Space size="small" split={<Divider type="vertical" />}> <Space size="small" split={<Divider orientation="vertical" />}>
<span>{bill.invoice_number}</span> <span>{bill.invoice_number}</span>
<span>{bill.vendor.name}</span> <span>{bill.vendor.name}</span>
<span>{bill.date}</span> <span>{bill.date}</span>
@@ -139,7 +139,7 @@ export default function GlobalSearch() {
value: `${pb.firstname || ""} ${pb.lastname || ""} ${pb.company || ""}`, value: `${pb.firstname || ""} ${pb.lastname || ""} ${pb.company || ""}`,
label: ( label: (
<Link to={`/manage/phonebook?phonebookentry=${pb.id}`}> <Link to={`/manage/phonebook?phonebookentry=${pb.id}`}>
<Space size="small" split={<Divider type="vertical" />}> <Space size="small" split={<Divider orientation="vertical" />}>
<span>{`${pb.firstname || ""} ${pb.lastname || ""} ${pb.company || ""}`}</span> <span>{`${pb.firstname || ""} ${pb.lastname || ""} ${pb.company || ""}`}</span>
<PhoneNumberFormatter>{pb.phone1}</PhoneNumberFormatter> <PhoneNumberFormatter>{pb.phone1}</PhoneNumberFormatter>
<span>{pb.email}</span> <span>{pb.email}</span>

View File

@@ -183,12 +183,7 @@ export function JobsList({ refetch, loading, jobs, total, setInventoryUpsertCont
> >
<Table <Table
loading={loading} loading={loading}
pagination={{ pagination={{ placement: "top", pageSize: pageLimit, current: parseInt(page || 1), total: total }}
position: "top",
pageSize: pageLimit,
current: parseInt(page || 1),
total: total
}}
columns={columns} columns={columns}
rowKey="id" rowKey="id"
dataSource={jobs} dataSource={jobs}

View File

@@ -55,8 +55,9 @@ export function JobBillsTotalComponent({
); );
if (pol.cm_received === null) { if (pol.cm_received === null) {
return; //TODO:AIO This was previously removed. Check if functionality impacted. //TODO:AIO This was previously removed. Check if functionality impacted.
// Skip this calculation for bills posted prior to the CNR change. // Skip this calculation for bills posted prior to the CNR change.
return;
} else { } else {
if (pol.cm_received === false) { if (pol.cm_received === false) {
totalReturnsMarkedNotReceived = totalReturnsMarkedNotReceived.add( totalReturnsMarkedNotReceived = totalReturnsMarkedNotReceived.add(
@@ -174,8 +175,10 @@ export function JobBillsTotalComponent({
<BlurWrapperComponent featureName="bills" overrideValueFunction="RandomDinero"> <BlurWrapperComponent featureName="bills" overrideValueFunction="RandomDinero">
<Statistic <Statistic
title={t("bills.labels.discrepancy")} title={t("bills.labels.discrepancy")}
valueStyle={{ styles={{
color: discrepancy.getAmount() === 0 ? "green" : "red" content: {
color: discrepancy.getAmount() === 0 ? "green" : "red"
}
}} }}
value={discrepancy.toFormat()} value={discrepancy.toFormat()}
/> />
@@ -208,8 +211,10 @@ export function JobBillsTotalComponent({
<BlurWrapperComponent featureName="bills" overrideValueFunction="RandomDinero"> <BlurWrapperComponent featureName="bills" overrideValueFunction="RandomDinero">
<Statistic <Statistic
title={t("bills.labels.discrepancy")} title={t("bills.labels.discrepancy")}
valueStyle={{ styles={{
color: discrepWithLbrAdj.getAmount() === 0 ? "green" : "red" content: {
color: discrepWithLbrAdj.getAmount() === 0 ? "green" : "red"
}
}} }}
value={discrepWithLbrAdj.toFormat()} value={discrepWithLbrAdj.toFormat()}
/> />
@@ -242,8 +247,10 @@ export function JobBillsTotalComponent({
<BlurWrapperComponent featureName="bills" overrideValueFunction="RandomDinero"> <BlurWrapperComponent featureName="bills" overrideValueFunction="RandomDinero">
<Statistic <Statistic
title={t("bills.labels.discrepancy")} title={t("bills.labels.discrepancy")}
valueStyle={{ styles={{
color: discrepWithCms.getAmount() === 0 ? "green" : "red" content: {
color: discrepWithCms.getAmount() === 0 ? "green" : "red"
}
}} }}
value={discrepWithCms.toFormat()} value={discrepWithCms.toFormat()}
/> />
@@ -290,8 +297,10 @@ export function JobBillsTotalComponent({
<BlurWrapperComponent featureName="bills" overrideValueFunction="RandomDinero"> <BlurWrapperComponent featureName="bills" overrideValueFunction="RandomDinero">
<Statistic <Statistic
title={t("bills.labels.calculatedcreditsnotreceived")} title={t("bills.labels.calculatedcreditsnotreceived")}
valueStyle={{ styles={{
color: calculatedCreditsNotReceived.getAmount() <= 0 ? "green" : "red" content: {
color: calculatedCreditsNotReceived.getAmount() <= 0 ? "green" : "red"
}
}} }}
value={ value={
calculatedCreditsNotReceived.getAmount() >= 0 calculatedCreditsNotReceived.getAmount() >= 0
@@ -313,8 +322,10 @@ export function JobBillsTotalComponent({
<BlurWrapperComponent featureName="bills" overrideValueFunction="RandomDinero"> <BlurWrapperComponent featureName="bills" overrideValueFunction="RandomDinero">
<Statistic <Statistic
title={t("bills.labels.creditsnotreceived")} title={t("bills.labels.creditsnotreceived")}
valueStyle={{ styles={{
color: totalReturnsMarkedNotReceived.getAmount() <= 0 ? "green" : "red" content: {
color: totalReturnsMarkedNotReceived.getAmount() <= 0 ? "green" : "red"
}
}} }}
value={ value={
totalReturnsMarkedNotReceived.getAmount() >= 0 totalReturnsMarkedNotReceived.getAmount() >= 0

View File

@@ -84,7 +84,7 @@ export default function JobCostingPartsTable({ data, summaryData }) {
x: "50%" //y: "40rem" x: "50%" //y: "40rem"
}} }}
onChange={handleTableChange} onChange={handleTableChange}
pagination={{ position: "top", defaultPageSize: pageLimit }} pagination={{ placement: "top", defaultPageSize: pageLimit }}
columns={columns} columns={columns}
rowKey="id" rowKey="id"
dataSource={filteredData} dataSource={filteredData}

View File

@@ -154,7 +154,7 @@ export function JobDetailCards({ bodyshop, setPrintCenterContext, insertAuditTra
} }
> >
<JobsDetailHeader job={data ? data.jobs_by_pk : null} /> <JobsDetailHeader job={data ? data.jobs_by_pk : null} />
<Divider type="horizontal" /> <Divider orientation="horizontal" />
<Row gutter={[16, 16]}> <Row gutter={[16, 16]}>
<Col {...span}> <Col {...span}>
<JobDetailCardsInsuranceComponent loading={loading} data={data ? data.jobs_by_pk : null} /> <JobDetailCardsInsuranceComponent loading={loading} data={data ? data.jobs_by_pk : null} />

View File

@@ -147,7 +147,7 @@ export function JobsAvailableScan({ partnerVersion, refetch }) {
> >
<Table <Table
loading={loading} loading={loading}
pagination={{ position: "top" }} pagination={{ placement: "top" }}
columns={columns} columns={columns}
rowKey="id" rowKey="id"
dataSource={data} dataSource={data}

View File

@@ -98,7 +98,7 @@ export default function JobsCreateOwnerInfoSearchComponent({ loading, owners })
<Table <Table
loading={loading} loading={loading}
scroll={{ x: true }} scroll={{ x: true }}
pagination={{ position: "top" }} pagination={{ placement: "top" }}
columns={columns} columns={columns}
rowKey="id" rowKey="id"
dataSource={owners} dataSource={owners}

View File

@@ -71,7 +71,7 @@ export default function JobsCreateVehicleInfoSearchComponent({ loading, vehicles
<Table <Table
loading={loading} loading={loading}
scroll={{ x: true }} scroll={{ x: true }}
pagination={{ position: "top" }} pagination={{ placement: "top" }}
columns={columns} columns={columns}
rowKey="id" rowKey="id"
dataSource={vehicles} dataSource={vehicles}

View File

@@ -133,7 +133,7 @@ export function JobsDetailRates({ jobRO, form, job, bodyshop }) {
</FormRow> </FormRow>
) )
})} })}
<Divider orientation="left" type="horizontal" style={{ marginTop: ".8rem", float: "right" }}> <Divider titlePlacement="left" orientation="horizontal" style={{ marginTop: ".8rem", float: "right" }}>
{t("jobs.forms.laborrates")} {t("jobs.forms.laborrates")}
</Divider> </Divider>
<Space> <Space>
@@ -217,7 +217,7 @@ export function JobsDetailRates({ jobRO, form, job, bodyshop }) {
imex: <JobsDetailRatesParts form={form} />, imex: <JobsDetailRatesParts form={form} />,
rome: ( rome: (
<> <>
<Divider orientation="left">Tax Profile</Divider> <Divider titlePlacement="left">Tax Profile</Divider>
<JobsDetailRatesProfileOVerride form={form} /> <JobsDetailRatesProfileOVerride form={form} />
<JobsDetailRatesParts form={form} /> <JobsDetailRatesParts form={form} />
<JobsDetailRatesLabor form={form} /> <JobsDetailRatesLabor form={form} />

View File

@@ -1,4 +1,4 @@
import { useEffect, useState, useCallback } from "react"; import { useCallback, useEffect, useState } from "react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import LocalMediaGrid from "../jobs-documents-local-gallery/local-media-grid.component"; import LocalMediaGrid from "../jobs-documents-local-gallery/local-media-grid.component";
import LoadingSpinner from "../loading-spinner/loading-spinner.component"; import LoadingSpinner from "../loading-spinner/loading-spinner.component";

View File

@@ -1,4 +1,4 @@
import { useEffect, useMemo, useState, useCallback } from "react"; import { useCallback, useEffect, useMemo, useState } from "react";
import LocalMediaGrid from "./local-media-grid.component"; import LocalMediaGrid from "./local-media-grid.component";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { connect } from "react-redux"; import { connect } from "react-redux";

View File

@@ -60,7 +60,7 @@ export function JobsDocumentsLocalGalleryReassign({ bodyshop, jobid, allMedia, g
]} ]}
name={"jobid"} name={"jobid"}
> >
<JobSearchSelect notExported={false} notInvoiced={false}/> <JobSearchSelect notExported={false} notInvoiced={false} />
</Form.Item> </Form.Item>
</Form> </Form>
<Space> <Space>

View File

@@ -190,7 +190,7 @@ export default function JobsFindModalComponent({
/> />
</div> </div>
)} )}
pagination={{ position: "bottom" }} pagination={{ placement: "bottom" }}
columns={columns} columns={columns}
rowKey="id" rowKey="id"
loading={jobsListLoading} loading={jobsListLoading}

View File

@@ -4,7 +4,7 @@ import "./layout-form-row.styles.scss";
export default function LayoutFormRow({ header, children, grow = false, noDivider = false, ...restProps }) { export default function LayoutFormRow({ header, children, grow = false, noDivider = false, ...restProps }) {
const DividerHeader = () => const DividerHeader = () =>
!noDivider && ( !noDivider && (
<Divider orientation="left" type="horizontal" style={{ marginTop: ".8rem" }}> <Divider titlePlacement="left" orientation="horizontal" style={{ marginTop: ".8rem" }}>
{header} {header}
</Divider> </Divider>
); );

View File

@@ -110,7 +110,7 @@ function OwnerDetailJobsComponent({ bodyshop, owner, isPartsEntry }) {
} }
> >
<Table <Table
pagination={{ position: "bottom" }} pagination={{ placement: "bottom" }}
columns={columns} columns={columns}
scroll={{ x: true }} scroll={{ x: true }}
rowKey="id" rowKey="id"

View File

@@ -76,7 +76,7 @@ export default function OwnerFindModalComponent({
return ( return (
<div> <div>
<Table <Table
pagination={{ position: "bottom" }} pagination={{ placement: "bottom" }}
columns={columns} columns={columns}
rowKey="id" rowKey="id"
loading={ownersListLoading} loading={ownersListLoading}

View File

@@ -116,12 +116,7 @@ export default function OwnersListComponent({ loading, owners, total, refetch })
> >
<Table <Table
loading={loading} loading={loading}
pagination={{ pagination={{ placement: "top", pageSize: pageLimit, current: parseInt(page || 1, 10), total: total }}
position: "top",
pageSize: pageLimit,
current: parseInt(page || 1, 10),
total: total
}}
columns={columns} columns={columns}
rowKey="id" rowKey="id"
scroll={{ x: true }} scroll={{ x: true }}

View File

@@ -116,7 +116,7 @@ export function PartsOrderModalComponent({
</Radio.Group> </Radio.Group>
</Form.Item> </Form.Item>
</LayoutFormRow> </LayoutFormRow>
<Divider orientation="left">{t("parts_orders.labels.inthisorder")}</Divider> <Divider titlePlacement="left">{t("parts_orders.labels.inthisorder")}</Divider>
<Form.List name={["parts_order_lines", "data"]}> <Form.List name={["parts_order_lines", "data"]}>
{(fields, { remove, move }) => { {(fields, { remove, move }) => {
return ( return (

View File

@@ -58,7 +58,7 @@ export default function PartsQueueDetailCard() {
} }
> >
<JobsDetailHeader job={data ? data.jobs_by_pk : null} /> <JobsDetailHeader job={data ? data.jobs_by_pk : null} />
<Divider type="horizontal" /> <Divider orientation="horizontal" />
<PartsQueueJobLinesComponent jobLines={data.jobs_by_pk ? data.jobs_by_pk.joblines : null} /> <PartsQueueJobLinesComponent jobLines={data.jobs_by_pk ? data.jobs_by_pk.joblines : null} />
</Card> </Card>
) : null} ) : null}

View File

@@ -289,7 +289,7 @@ export function PartsQueueListComponent({ bodyshop }) {
<Table <Table
loading={loading} loading={loading}
pagination={{ pagination={{
position: "top", placement: "top",
pageSize: pageLimit pageSize: pageLimit
// current: parseInt(page || 1), // current: parseInt(page || 1),
// total: data && data.jobs_aggregate.aggregate.count, // total: data && data.jobs_aggregate.aggregate.count,

View File

@@ -87,7 +87,7 @@ function ProductionBoardKanbanSettings({ associationSettings, parentLoading, bod
}; };
const overlay = ( const overlay = (
<Card style={{ maxWidth: "80vw", width: "100%"}}> <Card style={{ maxWidth: "80vw", width: "100%" }}>
<Form form={form} onFinish={handleFinish} layout="vertical" onValuesChange={handleValuesChange}> <Form form={form} onFinish={handleFinish} layout="vertical" onValuesChange={handleValuesChange}>
<Tabs <Tabs
defaultActiveKey="1" defaultActiveKey="1"

View File

@@ -127,7 +127,7 @@ export function ProductionListDetail({ bodyshop, jobs, setPrintCenterContext, te
/> />
} }
placement="right" placement="right"
width={"50%"} width="50%"
onClose={handleClose} onClose={handleClose}
open={selected} open={selected}
> >
@@ -199,7 +199,11 @@ export function ProductionListDetail({ bodyshop, jobs, setPrintCenterContext, te
{!bodyshop.uselocalmediaserver && ( {!bodyshop.uselocalmediaserver && (
<> <>
<div style={{ height: "8px" }} /> <div style={{ height: "8px" }} />
<JobDetailCardsDocumentsComponent loading={loading} data={data ? data.jobs_by_pk : null} bodyshop={bodyshop} /> <JobDetailCardsDocumentsComponent
loading={loading}
data={data ? data.jobs_by_pk : null}
bodyshop={bodyshop}
/>
</> </>
)} )}
</div> </div>

View File

@@ -178,7 +178,14 @@ export function ReportCenterModalComponent({ reportCenterModal, bodyshop }) {
<BlurWrapperComponent <BlurWrapperComponent
featureName={groupExcludeKeyFilter.find((g) => g.key === key).featureName} featureName={groupExcludeKeyFilter.find((g) => g.key === key).featureName}
> >
<ul style={{ listStyleType: "none", columns: grouped[key].length > 4 ? "2 auto" : "1", padding: 0, margin: 0 }}> <ul
style={{
listStyleType: "none",
columns: grouped[key].length > 4 ? "2 auto" : "1",
padding: 0,
margin: 0
}}
>
{grouped[key].map((item) => ( {grouped[key].map((item) => (
<li key={item.key}> <li key={item.key}>
<Radio key={item.key} value={item.key}> <Radio key={item.key} value={item.key}>
@@ -189,7 +196,14 @@ export function ReportCenterModalComponent({ reportCenterModal, bodyshop }) {
</ul> </ul>
</BlurWrapperComponent> </BlurWrapperComponent>
) : ( ) : (
<ul style={{ listStyleType: "none", columns: grouped[key].length > 4 ? "2 auto" : "1", padding: 0, margin: 0 }}> <ul
style={{
listStyleType: "none",
columns: grouped[key].length > 4 ? "2 auto" : "1",
padding: 0,
margin: 0
}}
>
{grouped[key].map((item) => {grouped[key].map((item) =>
item.featureNameRestricted ? ( item.featureNameRestricted ? (
<li key={item.key}> <li key={item.key}>

View File

@@ -224,7 +224,7 @@ export function ScheduleJobModalContainer({
email: (job && job.ownr_ea) || "", email: (job && job.ownr_ea) || "",
// smartDates: [], // smartDates: [],
start: context.scheduled_in, start: context.scheduled_in,
scheduled_completion: context.scheduled_completion , scheduled_completion: context.scheduled_completion,
color: context.color, color: context.color,
alt_transport: context.alt_transport, alt_transport: context.alt_transport,
note: context.note note: context.note

View File

@@ -30,12 +30,12 @@ export function ScoreboardDayStats({ bodyshop, date, entries }) {
return ( return (
<Card title={dayjs(date).format("D - ddd")} className="ant-card-grid-hoverable" style={{ height: "100%" }}> <Card title={dayjs(date).format("D - ddd")} className="ant-card-grid-hoverable" style={{ height: "100%" }}>
<Statistic <Statistic
valueStyle={{ color: dailyBodyTarget > bodyHrs ? "red" : "green" }} styles={{ content: { color: dailyBodyTarget > bodyHrs ? "red" : "green" } }}
label="Body" label="Body"
value={bodyHrs.toFixed(1)} value={bodyHrs.toFixed(1)}
/> />
<Statistic <Statistic
valueStyle={{ color: dailyPaintTarget > paintHrs ? "red" : "green" }} styles={{ content: { color: dailyPaintTarget > paintHrs ? "red" : "green" } }}
label="Refinish" label="Refinish"
value={paintHrs.toFixed(1)} value={paintHrs.toFixed(1)}
/> />

View File

@@ -149,7 +149,7 @@ export default function ScoreboardJobsList() {
onClick={(e) => e.stopPropagation()} onClick={(e) => e.stopPropagation()}
onChange={(tableArgs) => setState((state) => ({ ...state, ...tableArgs }))} onChange={(tableArgs) => setState((state) => ({ ...state, ...tableArgs }))}
pagination={{ pagination={{
position: "top", placement: "top",
pageSize: state.pageSize || pageLimit, pageSize: state.pageSize || pageLimit,
current: state.current || 1, current: state.current || 1,
total: data ? data.scoreboard_aggregate.aggregate.count : 0 total: data ? data.scoreboard_aggregate.aggregate.count : 0

View File

@@ -1,4 +1,4 @@
import { Card, Col, Form, Row, Space, Statistic, Switch, Typography } from "antd"; import { Card, Col, Row, Space, Statistic, Switch, Typography } from "antd";
import dayjs from "../../utils/day"; import dayjs from "../../utils/day";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
@@ -41,9 +41,10 @@ export function ScoreboardTicketsStats({ data, jobData, bodyshop }) {
<Card <Card
title={t("scoreboard.labels.productivestatistics")} title={t("scoreboard.labels.productivestatistics")}
extra={ extra={
<Form.Item label={t("general.labels.tvmode")} valuePropName="checked" name={["tvmode"]}> <Space>
<Typography.Text>{t("general.labels.tvmode")}</Typography.Text>
<Switch onClick={() => setIsLarge(!isLarge)} defaultChecked={isLarge} /> <Switch onClick={() => setIsLarge(!isLarge)} defaultChecked={isLarge} />
</Form.Item> </Space>
} }
> >
<Row gutter={[16, 16]}> <Row gutter={[16, 16]}>
@@ -60,15 +61,17 @@ export function ScoreboardTicketsStats({ data, jobData, bodyshop }) {
<Col span={24}> <Col span={24}>
<Statistic <Statistic
value={data.seperatedThisWeek[day].total} value={data.seperatedThisWeek[day].total}
valueStyle={{ styles={{
color: content: {
parseFloat(data.seperatedThisWeek[day].total) >= color:
bodyshop.scoreboard_target.dailyBodyTarget + parseFloat(data.seperatedThisWeek[day].total) >=
bodyshop.scoreboard_target.dailyPaintTarget bodyshop.scoreboard_target.dailyBodyTarget +
? "green" bodyshop.scoreboard_target.dailyPaintTarget
: "red", ? "green"
fontSize: statisticSize, : "red",
fontWeight: statisticWeight fontSize: statisticSize,
fontWeight: statisticWeight
}
}} }}
/> />
</Col> </Col>
@@ -78,14 +81,16 @@ export function ScoreboardTicketsStats({ data, jobData, bodyshop }) {
<Statistic <Statistic
title={<Typography.Text strong>{t("scoreboard.labels.body")}</Typography.Text>} title={<Typography.Text strong>{t("scoreboard.labels.body")}</Typography.Text>}
value={data.seperatedThisWeek[day].lab} value={data.seperatedThisWeek[day].lab}
valueStyle={{ styles={{
color: content: {
parseFloat(data.seperatedThisWeek[day].lab) >= color:
bodyshop.scoreboard_target.dailyBodyTarget parseFloat(data.seperatedThisWeek[day].lab) >=
? "green" bodyshop.scoreboard_target.dailyBodyTarget
: "red", ? "green"
fontSize: statisticSize, : "red",
fontWeight: statisticWeight fontSize: statisticSize,
fontWeight: statisticWeight
}
}} }}
/> />
</Col> </Col>
@@ -93,14 +98,16 @@ export function ScoreboardTicketsStats({ data, jobData, bodyshop }) {
<Statistic <Statistic
title={<Typography.Text strong>{t("scoreboard.labels.refinish")}</Typography.Text>} title={<Typography.Text strong>{t("scoreboard.labels.refinish")}</Typography.Text>}
value={data.seperatedThisWeek[day].lar} value={data.seperatedThisWeek[day].lar}
valueStyle={{ styles={{
color: content: {
parseFloat(data.seperatedThisWeek[day].lar) >= color:
bodyshop.scoreboard_target.dailyPaintTarget parseFloat(data.seperatedThisWeek[day].lar) >=
? "green" bodyshop.scoreboard_target.dailyPaintTarget
: "red", ? "green"
fontSize: statisticSize, : "red",
fontWeight: statisticWeight fontSize: statisticSize,
fontWeight: statisticWeight
}
}} }}
/> />
</Col> </Col>
@@ -122,25 +129,27 @@ export function ScoreboardTicketsStats({ data, jobData, bodyshop }) {
<Col span={24}> <Col span={24}>
<Statistic <Statistic
value={data.totalThisWeek} value={data.totalThisWeek}
valueStyle={{ styles={{
color: content: {
parseFloat(data.totalThisWeek) >= color:
Util.WeeklyTargetHrsInPeriod( parseFloat(data.totalThisWeek) >=
bodyshop.scoreboard_target.dailyBodyTarget,
dayjs().startOf("week"),
dayjs().endOf("week"),
bodyshop
) +
Util.WeeklyTargetHrsInPeriod( Util.WeeklyTargetHrsInPeriod(
bodyshop.scoreboard_target.dailyPaintTarget, bodyshop.scoreboard_target.dailyBodyTarget,
dayjs().startOf("week"), dayjs().startOf("week"),
dayjs().endOf("week"), dayjs().endOf("week"),
bodyshop bodyshop
) ) +
? "green" Util.WeeklyTargetHrsInPeriod(
: "red", bodyshop.scoreboard_target.dailyPaintTarget,
fontSize: statisticSize, dayjs().startOf("week"),
fontWeight: statisticWeight dayjs().endOf("week"),
bodyshop
)
? "green"
: "red",
fontSize: statisticSize,
fontWeight: statisticWeight
}
}} }}
/> />
</Col> </Col>
@@ -150,19 +159,21 @@ export function ScoreboardTicketsStats({ data, jobData, bodyshop }) {
<Statistic <Statistic
title={<Typography.Text strong>{t("scoreboard.labels.body")}</Typography.Text>} title={<Typography.Text strong>{t("scoreboard.labels.body")}</Typography.Text>}
value={data.totalThisWeekLAB} value={data.totalThisWeekLAB}
valueStyle={{ styles={{
color: content: {
parseFloat(data.totalThisWeekLAB) >= color:
Util.WeeklyTargetHrsInPeriod( parseFloat(data.totalThisWeekLAB) >=
bodyshop.scoreboard_target.dailyBodyTarget, Util.WeeklyTargetHrsInPeriod(
dayjs().startOf("week"), bodyshop.scoreboard_target.dailyBodyTarget,
dayjs().endOf("week"), dayjs().startOf("week"),
bodyshop dayjs().endOf("week"),
) bodyshop
? "green" )
: "red", ? "green"
fontSize: statisticSize, : "red",
fontWeight: statisticWeight fontSize: statisticSize,
fontWeight: statisticWeight
}
}} }}
/> />
</Col> </Col>
@@ -170,19 +181,21 @@ export function ScoreboardTicketsStats({ data, jobData, bodyshop }) {
<Statistic <Statistic
title={<Typography.Text strong>{t("scoreboard.labels.refinish")}</Typography.Text>} title={<Typography.Text strong>{t("scoreboard.labels.refinish")}</Typography.Text>}
value={data.totalThisWeekLAR} value={data.totalThisWeekLAR}
valueStyle={{ styles={{
color: content: {
parseFloat(data.totalThisWeekLAR) >= color:
Util.WeeklyTargetHrsInPeriod( parseFloat(data.totalThisWeekLAR) >=
bodyshop.scoreboard_target.dailyPaintTarget, Util.WeeklyTargetHrsInPeriod(
dayjs().startOf("week"), bodyshop.scoreboard_target.dailyPaintTarget,
dayjs().endOf("week"), dayjs().startOf("week"),
bodyshop dayjs().endOf("week"),
) bodyshop
? "green" )
: "red", ? "green"
fontSize: statisticSize, : "red",
fontWeight: statisticWeight fontSize: statisticSize,
fontWeight: statisticWeight
}
}} }}
/> />
</Col> </Col>
@@ -196,25 +209,27 @@ export function ScoreboardTicketsStats({ data, jobData, bodyshop }) {
<Col span={24}> <Col span={24}>
<Statistic <Statistic
value={data.totalLastWeek} value={data.totalLastWeek}
valueStyle={{ styles={{
color: content: {
parseFloat(data.totalLastWeek) >= color:
Util.WeeklyTargetHrsInPeriod( parseFloat(data.totalLastWeek) >=
bodyshop.scoreboard_target.dailyBodyTarget,
dayjs().subtract(1, "week").startOf("week"),
dayjs().subtract(1, "week").endOf("week"),
bodyshop
) +
Util.WeeklyTargetHrsInPeriod( Util.WeeklyTargetHrsInPeriod(
bodyshop.scoreboard_target.dailyPaintTarget, bodyshop.scoreboard_target.dailyBodyTarget,
dayjs().subtract(1, "week").startOf("week"), dayjs().subtract(1, "week").startOf("week"),
dayjs().subtract(1, "week").endOf("week"), dayjs().subtract(1, "week").endOf("week"),
bodyshop bodyshop
) ) +
? "green" Util.WeeklyTargetHrsInPeriod(
: "red", bodyshop.scoreboard_target.dailyPaintTarget,
fontSize: statisticSize, dayjs().subtract(1, "week").startOf("week"),
fontWeight: statisticWeight dayjs().subtract(1, "week").endOf("week"),
bodyshop
)
? "green"
: "red",
fontSize: statisticSize,
fontWeight: statisticWeight
}
}} }}
/> />
</Col> </Col>
@@ -224,19 +239,21 @@ export function ScoreboardTicketsStats({ data, jobData, bodyshop }) {
<Statistic <Statistic
title={<Typography.Text strong>{t("scoreboard.labels.body")}</Typography.Text>} title={<Typography.Text strong>{t("scoreboard.labels.body")}</Typography.Text>}
value={data.totalLastWeekLAB} value={data.totalLastWeekLAB}
valueStyle={{ styles={{
color: content: {
parseFloat(data.totalLastWeekLAB) >= color:
Util.WeeklyTargetHrsInPeriod( parseFloat(data.totalLastWeekLAB) >=
bodyshop.scoreboard_target.dailyBodyTarget, Util.WeeklyTargetHrsInPeriod(
dayjs().subtract(1, "week").startOf("week"), bodyshop.scoreboard_target.dailyBodyTarget,
dayjs().subtract(1, "week").endOf("week"), dayjs().subtract(1, "week").startOf("week"),
bodyshop dayjs().subtract(1, "week").endOf("week"),
) bodyshop
? "green" )
: "red", ? "green"
fontSize: statisticSize, : "red",
fontWeight: statisticWeight fontSize: statisticSize,
fontWeight: statisticWeight
}
}} }}
/> />
</Col> </Col>
@@ -244,19 +261,21 @@ export function ScoreboardTicketsStats({ data, jobData, bodyshop }) {
<Statistic <Statistic
title={<Typography.Text strong>{t("scoreboard.labels.refinish")}</Typography.Text>} title={<Typography.Text strong>{t("scoreboard.labels.refinish")}</Typography.Text>}
value={data.totalLastWeekLAR} value={data.totalLastWeekLAR}
valueStyle={{ styles={{
color: content: {
parseFloat(data.totalLastWeekLAR) >= color:
Util.WeeklyTargetHrsInPeriod( parseFloat(data.totalLastWeekLAR) >=
bodyshop.scoreboard_target.dailyPaintTarget, Util.WeeklyTargetHrsInPeriod(
dayjs().subtract(1, "week").startOf("week"), bodyshop.scoreboard_target.dailyPaintTarget,
dayjs().subtract(1, "week").endOf("week"), dayjs().subtract(1, "week").startOf("week"),
bodyshop dayjs().subtract(1, "week").endOf("week"),
) bodyshop
? "green" )
: "red", ? "green"
fontSize: statisticSize, : "red",
fontWeight: statisticWeight fontSize: statisticSize,
fontWeight: statisticWeight
}
}} }}
/> />
</Col> </Col>
@@ -270,25 +289,27 @@ export function ScoreboardTicketsStats({ data, jobData, bodyshop }) {
<Col span={24}> <Col span={24}>
<Statistic <Statistic
value={data.totalPriorWeek} value={data.totalPriorWeek}
valueStyle={{ styles={{
color: content: {
parseFloat(data.totalPriorWeek) >= color:
Util.WeeklyTargetHrsInPeriod( parseFloat(data.totalPriorWeek) >=
bodyshop.scoreboard_target.dailyBodyTarget,
dayjs().subtract(2, "week").startOf("week"),
dayjs().subtract(2, "week").endOf("week"),
bodyshop
) +
Util.WeeklyTargetHrsInPeriod( Util.WeeklyTargetHrsInPeriod(
bodyshop.scoreboard_target.dailyPaintTarget, bodyshop.scoreboard_target.dailyBodyTarget,
dayjs().subtract(2, "week").startOf("week"), dayjs().subtract(2, "week").startOf("week"),
dayjs().subtract(2, "week").endOf("week"), dayjs().subtract(2, "week").endOf("week"),
bodyshop bodyshop
) ) +
? "green" Util.WeeklyTargetHrsInPeriod(
: "red", bodyshop.scoreboard_target.dailyPaintTarget,
fontSize: statisticSize, dayjs().subtract(2, "week").startOf("week"),
fontWeight: statisticWeight dayjs().subtract(2, "week").endOf("week"),
bodyshop
)
? "green"
: "red",
fontSize: statisticSize,
fontWeight: statisticWeight
}
}} }}
/> />
</Col> </Col>
@@ -298,19 +319,21 @@ export function ScoreboardTicketsStats({ data, jobData, bodyshop }) {
<Statistic <Statistic
title={<Typography.Text strong>{t("scoreboard.labels.body")}</Typography.Text>} title={<Typography.Text strong>{t("scoreboard.labels.body")}</Typography.Text>}
value={data.totalPriorWeekLAB} value={data.totalPriorWeekLAB}
valueStyle={{ styles={{
color: content: {
parseFloat(data.totalPriorWeekLAB) >= color:
Util.WeeklyTargetHrsInPeriod( parseFloat(data.totalPriorWeekLAB) >=
bodyshop.scoreboard_target.dailyBodyTarget, Util.WeeklyTargetHrsInPeriod(
dayjs().subtract(2, "week").startOf("week"), bodyshop.scoreboard_target.dailyBodyTarget,
dayjs().subtract(2, "week").endOf("week"), dayjs().subtract(2, "week").startOf("week"),
bodyshop dayjs().subtract(2, "week").endOf("week"),
) bodyshop
? "green" )
: "red", ? "green"
fontSize: statisticSize, : "red",
fontWeight: statisticWeight fontSize: statisticSize,
fontWeight: statisticWeight
}
}} }}
/> />
</Col> </Col>
@@ -318,19 +341,21 @@ export function ScoreboardTicketsStats({ data, jobData, bodyshop }) {
<Statistic <Statistic
title={<Typography.Text strong>{t("scoreboard.labels.refinish")}</Typography.Text>} title={<Typography.Text strong>{t("scoreboard.labels.refinish")}</Typography.Text>}
value={data.totalPriorWeekLAR} value={data.totalPriorWeekLAR}
valueStyle={{ styles={{
color: content: {
parseFloat(data.totalPriorWeekLAR) >= color:
Util.WeeklyTargetHrsInPeriod( parseFloat(data.totalPriorWeekLAR) >=
bodyshop.scoreboard_target.dailyPaintTarget, Util.WeeklyTargetHrsInPeriod(
dayjs().subtract(2, "week").startOf("week"), bodyshop.scoreboard_target.dailyPaintTarget,
dayjs().subtract(2, "week").endOf("week"), dayjs().subtract(2, "week").startOf("week"),
bodyshop dayjs().subtract(2, "week").endOf("week"),
) bodyshop
? "green" )
: "red", ? "green"
fontSize: statisticSize, : "red",
fontWeight: statisticWeight fontSize: statisticSize,
fontWeight: statisticWeight
}
}} }}
/> />
</Col> </Col>
@@ -347,15 +372,17 @@ export function ScoreboardTicketsStats({ data, jobData, bodyshop }) {
<Col span={24}> <Col span={24}>
<Statistic <Statistic
value={data.totalThisMonth} value={data.totalThisMonth}
valueStyle={{ styles={{
color: content: {
parseFloat(data.totalThisMonth) >= color:
Util.MonthlyTargetHrs(bodyshop.scoreboard_target.dailyBodyTarget, bodyshop) + parseFloat(data.totalThisMonth) >=
Util.MonthlyTargetHrs(bodyshop.scoreboard_target.dailyPaintTarget, bodyshop) Util.MonthlyTargetHrs(bodyshop.scoreboard_target.dailyBodyTarget, bodyshop) +
? "green" Util.MonthlyTargetHrs(bodyshop.scoreboard_target.dailyPaintTarget, bodyshop)
: "red", ? "green"
fontSize: statisticSize, : "red",
fontWeight: statisticWeight fontSize: statisticSize,
fontWeight: statisticWeight
}
}} }}
/> />
</Col> </Col>
@@ -365,14 +392,16 @@ export function ScoreboardTicketsStats({ data, jobData, bodyshop }) {
<Statistic <Statistic
title={<Typography.Text strong>{t("scoreboard.labels.body")}</Typography.Text>} title={<Typography.Text strong>{t("scoreboard.labels.body")}</Typography.Text>}
value={data.totalThisMonthLAB} value={data.totalThisMonthLAB}
valueStyle={{ styles={{
color: content: {
parseFloat(data.totalThisMonthLAB) >= color:
Util.MonthlyTargetHrs(bodyshop.scoreboard_target.dailyBodyTarget, bodyshop) parseFloat(data.totalThisMonthLAB) >=
? "green" Util.MonthlyTargetHrs(bodyshop.scoreboard_target.dailyBodyTarget, bodyshop)
: "red", ? "green"
fontSize: statisticSize, : "red",
fontWeight: statisticWeight fontSize: statisticSize,
fontWeight: statisticWeight
}
}} }}
/> />
</Col> </Col>
@@ -380,14 +409,16 @@ export function ScoreboardTicketsStats({ data, jobData, bodyshop }) {
<Statistic <Statistic
title={<Typography.Text strong>{t("scoreboard.labels.refinish")}</Typography.Text>} title={<Typography.Text strong>{t("scoreboard.labels.refinish")}</Typography.Text>}
value={data.totalThisMonthLAR} value={data.totalThisMonthLAR}
valueStyle={{ styles={{
color: content: {
parseFloat(data.totalThisMonthLAR) >= color:
Util.MonthlyTargetHrs(bodyshop.scoreboard_target.dailyPaintTarget, bodyshop) parseFloat(data.totalThisMonthLAR) >=
? "green" Util.MonthlyTargetHrs(bodyshop.scoreboard_target.dailyPaintTarget, bodyshop)
: "red", ? "green"
fontSize: statisticSize, : "red",
fontWeight: statisticWeight fontSize: statisticSize,
fontWeight: statisticWeight
}
}} }}
/> />
</Col> </Col>
@@ -401,15 +432,17 @@ export function ScoreboardTicketsStats({ data, jobData, bodyshop }) {
<Col span={24}> <Col span={24}>
<Statistic <Statistic
value={data.totalLastMonth} value={data.totalLastMonth}
valueStyle={{ styles={{
color: content: {
parseFloat(data.totalLastMonth) >= color:
Util.LastMonthTargetHrs(bodyshop.scoreboard_target.dailyBodyTarget, bodyshop) + parseFloat(data.totalLastMonth) >=
Util.LastMonthTargetHrs(bodyshop.scoreboard_target.dailyPaintTarget, bodyshop) Util.LastMonthTargetHrs(bodyshop.scoreboard_target.dailyBodyTarget, bodyshop) +
? "green" Util.LastMonthTargetHrs(bodyshop.scoreboard_target.dailyPaintTarget, bodyshop)
: "red", ? "green"
fontSize: statisticSize, : "red",
fontWeight: statisticWeight fontSize: statisticSize,
fontWeight: statisticWeight
}
}} }}
/> />
</Col> </Col>
@@ -419,14 +452,16 @@ export function ScoreboardTicketsStats({ data, jobData, bodyshop }) {
<Statistic <Statistic
title={<Typography.Text strong>{t("scoreboard.labels.body")}</Typography.Text>} title={<Typography.Text strong>{t("scoreboard.labels.body")}</Typography.Text>}
value={data.totalLastMonthLAB} value={data.totalLastMonthLAB}
valueStyle={{ styles={{
color: content: {
parseFloat(data.totalLastMonthLAB) >= color:
Util.LastMonthTargetHrs(bodyshop.scoreboard_target.dailyBodyTarget, bodyshop) parseFloat(data.totalLastMonthLAB) >=
? "green" Util.LastMonthTargetHrs(bodyshop.scoreboard_target.dailyBodyTarget, bodyshop)
: "red", ? "green"
fontSize: statisticSize, : "red",
fontWeight: statisticWeight fontSize: statisticSize,
fontWeight: statisticWeight
}
}} }}
/> />
</Col> </Col>
@@ -434,14 +469,16 @@ export function ScoreboardTicketsStats({ data, jobData, bodyshop }) {
<Statistic <Statistic
title={<Typography.Text strong>{t("scoreboard.labels.refinish")}</Typography.Text>} title={<Typography.Text strong>{t("scoreboard.labels.refinish")}</Typography.Text>}
value={data.totalLastMonthLAR} value={data.totalLastMonthLAR}
valueStyle={{ styles={{
color: content: {
parseFloat(data.totalLastMonthLAR) >= color:
Util.LastMonthTargetHrs(bodyshop.scoreboard_target.dailyPaintTarget, bodyshop) parseFloat(data.totalLastMonthLAR) >=
? "green" Util.LastMonthTargetHrs(bodyshop.scoreboard_target.dailyPaintTarget, bodyshop)
: "red", ? "green"
fontSize: statisticSize, : "red",
fontWeight: statisticWeight fontSize: statisticSize,
fontWeight: statisticWeight
}
}} }}
/> />
</Col> </Col>
@@ -455,9 +492,11 @@ export function ScoreboardTicketsStats({ data, jobData, bodyshop }) {
<Col span={24}> <Col span={24}>
<Statistic <Statistic
value={`${data.totalEffieciencyOverPeriod || 0}%`} value={`${data.totalEffieciencyOverPeriod || 0}%`}
valueStyle={{ styles={{
fontSize: statisticSize, content: {
fontWeight: statisticWeight fontSize: statisticSize,
fontWeight: statisticWeight
}
}} }}
/> />
</Col> </Col>
@@ -467,9 +506,11 @@ export function ScoreboardTicketsStats({ data, jobData, bodyshop }) {
<Statistic <Statistic
title={<Typography.Text strong>{t("scoreboard.labels.body")}</Typography.Text>} title={<Typography.Text strong>{t("scoreboard.labels.body")}</Typography.Text>}
value={`${data.totalEffieciencyOverPeriodLAB || 0}%`} value={`${data.totalEffieciencyOverPeriodLAB || 0}%`}
valueStyle={{ styles={{
fontSize: statisticSize, content: {
fontWeight: statisticWeight fontSize: statisticSize,
fontWeight: statisticWeight
}
}} }}
/> />
</Col> </Col>
@@ -477,9 +518,11 @@ export function ScoreboardTicketsStats({ data, jobData, bodyshop }) {
<Statistic <Statistic
title={<Typography.Text strong>{t("scoreboard.labels.refinish")}</Typography.Text>} title={<Typography.Text strong>{t("scoreboard.labels.refinish")}</Typography.Text>}
value={`${data.totalEffieciencyOverPeriodLAR || 0}%`} value={`${data.totalEffieciencyOverPeriodLAR || 0}%`}
valueStyle={{ styles={{
fontSize: statisticSize, content: {
fontWeight: statisticWeight fontSize: statisticSize,
fontWeight: statisticWeight
}
}} }}
/> />
</Col> </Col>
@@ -492,9 +535,11 @@ export function ScoreboardTicketsStats({ data, jobData, bodyshop }) {
<Col span={24}> <Col span={24}>
<Statistic <Statistic
value={jobData.count} value={jobData.count}
valueStyle={{ styles={{
fontSize: statisticSize, content: {
fontWeight: statisticWeight fontSize: statisticSize,
fontWeight: statisticWeight
}
}} }}
/> />
</Col> </Col>
@@ -504,9 +549,11 @@ export function ScoreboardTicketsStats({ data, jobData, bodyshop }) {
<Statistic <Statistic
title={<Typography.Text strong>{t("scoreboard.labels.totalhrs")}</Typography.Text>} title={<Typography.Text strong>{t("scoreboard.labels.totalhrs")}</Typography.Text>}
value={jobData.tthrs} value={jobData.tthrs}
valueStyle={{ styles={{
fontSize: statisticSize, content: {
fontWeight: statisticWeight fontSize: statisticSize,
fontWeight: statisticWeight
}
}} }}
/> />
</Col> </Col>

View File

@@ -104,7 +104,7 @@ export default function ShopEmployeesListComponent({ loading, employees }) {
); );
}} }}
loading={loading} loading={loading}
pagination={{ position: "top" }} pagination={{ placement: "top" }}
columns={columns} columns={columns}
rowKey="id" rowKey="id"
dataSource={employees} dataSource={employees}

View File

@@ -100,7 +100,7 @@ export function ShopInfoSchedulingComponent({ form, bodyshop }) {
<Select mode="tags" /> <Select mode="tags" />
</Form.Item> </Form.Item>
</LayoutFormRow> </LayoutFormRow>
<Divider orientation="left">{t("bodyshop.labels.workingdays")}</Divider> <Divider titlePlacement="left">{t("bodyshop.labels.workingdays")}</Divider>
<Space wrap size="large" id="workingdays"> <Space wrap size="large" id="workingdays">
<Form.Item label={t("general.labels.sunday")} name={["workingdays", "sunday"]} valuePropName="checked"> <Form.Item label={t("general.labels.sunday")} name={["workingdays", "sunday"]} valuePropName="checked">
<Switch /> <Switch />

View File

@@ -10,9 +10,7 @@ export default function ShopInfoSpeedPrint() {
const { t } = useTranslation(); const { t } = useTranslation();
const allTemplates = TemplateList("job"); const allTemplates = TemplateList("job");
const TemplateListGenerated = InstanceRenderManager({ const TemplateListGenerated = InstanceRenderManager({
imex: Object.fromEntries( imex: Object.fromEntries(Object.entries(allTemplates).filter(([, { enhanced_payroll }]) => !enhanced_payroll)),
Object.entries(allTemplates).filter(([, { enhanced_payroll }]) => !enhanced_payroll)
),
rome: allTemplates rome: allTemplates
}); });

View File

@@ -42,7 +42,7 @@ export default function ShopEmployeeTeamsListComponent({ loading, employee_teams
); );
}} }}
loading={loading} loading={loading}
pagination={{ position: "top" }} pagination={{ placement: "top" }}
columns={columns} columns={columns}
rowKey="id" rowKey="id"
dataSource={employee_teams} dataSource={employee_teams}

View File

@@ -68,7 +68,7 @@ export function ShopInfoUsersComponent({ bodyshop }) {
<div> <div>
<Table <Table
loading={loading} loading={loading}
pagination={{ position: "top" }} pagination={{ placement: "top" }}
columns={columns} columns={columns}
rowKey="id" rowKey="id"
dataSource={data && data.associations} dataSource={data && data.associations}

View File

@@ -95,9 +95,9 @@ export function TechLookupJobsDrawer({ bodyshop, setPrintCenterContext }) {
} }
> >
<JobsDetailHeader job={data.jobs_by_pk} disabled /> <JobsDetailHeader job={data.jobs_by_pk} disabled />
<Divider type="horizontal" /> <Divider orientation="horizontal" />
<Tabs <Tabs
size="large" width="large"
defaultActiveKey="lines" defaultActiveKey="lines"
items={[ items={[
{ {

View File

@@ -189,12 +189,7 @@ export function TtApprovalsListComponent({
scroll={{ scroll={{
x: true x: true
}} }}
pagination={{ pagination={{ placement: "top", pageSize: 25, current: parseInt(page || 1), total: total }}
position: "top",
pageSize: 25,
current: parseInt(page || 1),
total: total
}}
dataSource={tt_approval_queue} dataSource={tt_approval_queue}
onChange={handleTableChange} onChange={handleTableChange}
rowSelection={{ rowSelection={{

View File

@@ -104,12 +104,7 @@ export default function VehiclesListComponent({ loading, vehicles, total, refetc
> >
<Table <Table
loading={loading} loading={loading}
pagination={{ pagination={{ placement: "top", pageSize: pageLimit, current: parseInt(page || 1), total: total }}
position: "top",
pageSize: pageLimit,
current: parseInt(page || 1),
total: total
}}
columns={columns} columns={columns}
rowKey="id" rowKey="id"
scroll={{ x: true }} scroll={{ x: true }}

View File

@@ -89,7 +89,7 @@ export default function VendorsListComponent({ handleNewVendor, loading, handleO
> >
<Table <Table
loading={loading} loading={loading}
pagination={{ position: "top" }} pagination={{ placement: "top" }}
columns={columns} columns={columns}
rowKey="id" rowKey="id"
onChange={handleTableChange} onChange={handleTableChange}

View File

@@ -537,17 +537,7 @@ const SocketProvider = ({ children, bodyshop, navigate, currentUser }) => {
setIsConnected(false); setIsConnected(false);
} }
}; };
}, [ }, [bodyshop?.id, userAssociationId, Realtime_Notifications_UI?.treatment]);
bodyshop,
notification,
userAssociationId,
markNotificationRead,
markAllNotificationsRead,
navigate,
currentUser,
Realtime_Notifications_UI,
t
]);
return ( return (
<SocketContext.Provider <SocketContext.Provider

View File

@@ -8,7 +8,7 @@ export default function CourtesyCarDetailPageComponent({ contracts, form, saveLo
<Col span={24}> <Col span={24}>
<CourtesyCarCreateFormComponent form={form} saveLoading={saveLoading} /> <CourtesyCarCreateFormComponent form={form} saveLoading={saveLoading} />
</Col> </Col>
<Divider type="horizontal" /> <Divider orientation="horizontal" />
<Col span={24}> <Col span={24}>
<CourtesyCarContractListComponent contracts={contracts} totalContracts={totalContracts} /> <CourtesyCarContractListComponent contracts={contracts} totalContracts={totalContracts} />
</Col> </Col>

View File

@@ -190,7 +190,7 @@ export function ExportLogsPageComponent() {
<Table <Table
loading={loading} loading={loading}
pagination={{ pagination={{
position: "top", placement: "top",
pageSize: pageLimit, pageSize: pageLimit,
current: parseInt(page || 1, 10), current: parseInt(page || 1, 10),
total: data && data.search_exportlog_aggregate.aggregate.count total: data && data.search_exportlog_aggregate.aggregate.count

View File

@@ -332,7 +332,7 @@ export function JobsDetailPage({
extra={menuExtra} extra={menuExtra}
/> />
<JobsDetailHeader job={job} /> <JobsDetailHeader job={job} />
<Divider type="horizontal" /> <Divider orientation="horizontal" />
<JobProfileDataWarning job={job} /> <JobProfileDataWarning job={job} />
<FormFieldsChanged form={form} /> <FormFieldsChanged form={form} />
<Tabs <Tabs

View File

@@ -8,7 +8,7 @@ export default function OwnersDetailComponent({ owner, refetch }) {
<Col span={24}> <Col span={24}>
<OwnerDetailForm owner={owner} refetch={refetch} /> <OwnerDetailForm owner={owner} refetch={refetch} />
</Col> </Col>
<Divider type="horizontal" /> <Divider orientation="horizontal" />
<Col span={24}> <Col span={24}>
<OwnerDetailJobsComponent owner={owner} /> <OwnerDetailJobsComponent owner={owner} />
</Col> </Col>

View File

@@ -176,7 +176,7 @@ export function PhonebookPageComponent({ bodyshop, authLevel }) {
<Table <Table
loading={loading} loading={loading}
pagination={{ pagination={{
position: "top", placement: "top",
pageSize: pageLimit, pageSize: pageLimit,
current: parseInt(page || 1, 10), current: parseInt(page || 1, 10),
total: data && data.search_phonebook_aggregate.aggregate.count total: data && data.search_phonebook_aggregate.aggregate.count

View File

@@ -133,7 +133,7 @@ export function SimplifiedPartsJobDetailComponent({ setPrintCenterContext, jobRO
<PageHeader title={<Space>{job.ro_number || t("general.labels.na")}</Space>} extra={menuExtra} /> <PageHeader title={<Space>{job.ro_number || t("general.labels.na")}</Space>} extra={menuExtra} />
<JobsDetailHeader job={job} /> <JobsDetailHeader job={job} />
<Divider type="horizontal" /> <Divider orientation="horizontal" />
<FormFieldsChanged form={form} /> <FormFieldsChanged form={form} />
<Tabs <Tabs
defaultActiveKey={search.tab} defaultActiveKey={search.tab}

View File

@@ -9,7 +9,7 @@ export default function VehicleDetailComponent({ vehicle, refetch }) {
<Col span={24}> <Col span={24}>
<VehicleDetailFormContainer vehicle={vehicle} refetch={refetch} /> <VehicleDetailFormContainer vehicle={vehicle} refetch={refetch} />
</Col> </Col>
<Divider type="horizontal" /> <Divider orientation="horizontal" />
<Col span={24}> <Col span={24}>
<VehicleDetailJobsComponent vehicle={vehicle} /> <VehicleDetailJobsComponent vehicle={vehicle} />
</Col> </Col>