From 5ed1c55458833942c1678158fb83434925c2b022 Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Fri, 24 Jan 2020 13:22:22 -0800 Subject: [PATCH 1/9] Added delay to app load to ensure firebase connection established. --- client/src/App/App.container.jsx | 1 - client/src/App/App.js | 13 ++++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/client/src/App/App.container.jsx b/client/src/App/App.container.jsx index 15eb73548..b9d91afa1 100644 --- a/client/src/App/App.container.jsx +++ b/client/src/App/App.container.jsx @@ -109,7 +109,6 @@ class AppContainer extends Component { }); try { - // See above for additional options, including other storage providers. await persistCache({ cache, storage: window.sessionStorage, diff --git a/client/src/App/App.js b/client/src/App/App.js index 3fa93e5d1..8ff98d835 100644 --- a/client/src/App/App.js +++ b/client/src/App/App.js @@ -1,4 +1,4 @@ -import React, { useEffect, Suspense, lazy } from "react"; +import React, { useEffect, Suspense, lazy, useState } from "react"; import { useApolloClient, useQuery } from "@apollo/react-hooks"; import { Switch, Route, Redirect } from "react-router-dom"; import firebase from "../firebase/firebase.utils"; @@ -26,11 +26,12 @@ const Unauthorized = lazy(() => export default () => { const apolloClient = useApolloClient(); - + const [loaded, setloaded] = useState(false); useEffect(() => { //Run the auth code only on the first render. const unsubscribeFromAuth = auth.onAuthStateChanged(async user => { - console.log("Auth State Changed.") + console.log("Auth State Changed."); + setloaded(true); if (user) { let token; token = await user.getIdToken(); @@ -87,16 +88,18 @@ export default () => { unsubscribeFromAuth(); }; }, [apolloClient]); - const HookCurrentUser = useQuery(GET_CURRENT_USER); + + if (!loaded) return ; if (HookCurrentUser.loading) return ; if (HookCurrentUser.error) return ; + return (
- TODO: Suspense Loading
}> + }> Date: Fri, 24 Jan 2020 16:35:29 -0800 Subject: [PATCH 2/9] Added rates containers + cached language selection --- client/src/App/App.js | 21 ++++++++++++--- .../current-user-dropdown.component.jsx | 5 ++-- .../jobs-list/jobs-list.component.jsx | 19 +++++++++---- .../jobs-rates/jobs-rates.component.jsx | 5 ++++ .../jobs-rates/jobs-rates.container.jsx | 6 +++++ .../langauge-selector.component.jsx | 27 ------------------- client/src/graphql/initial-state.js | 3 ++- client/src/graphql/jobs.queries.js | 4 +-- client/src/graphql/local.queries.js | 22 +++------------ .../pages/jobs-detail/jobs-detail.page.jsx | 3 ++- client/src/pages/jobs/jobs.page.jsx | 6 ++--- 11 files changed, 57 insertions(+), 64 deletions(-) create mode 100644 client/src/components/jobs-rates/jobs-rates.component.jsx create mode 100644 client/src/components/jobs-rates/jobs-rates.container.jsx delete mode 100644 client/src/components/language-selector/langauge-selector.component.jsx diff --git a/client/src/App/App.js b/client/src/App/App.js index 8ff98d835..5ff998489 100644 --- a/client/src/App/App.js +++ b/client/src/App/App.js @@ -2,6 +2,7 @@ import React, { useEffect, Suspense, lazy, useState } from "react"; import { useApolloClient, useQuery } from "@apollo/react-hooks"; import { Switch, Route, Redirect } from "react-router-dom"; import firebase from "../firebase/firebase.utils"; +import i18next from "i18next"; import "./App.css"; @@ -12,7 +13,7 @@ import ErrorBoundary from "../components/error-boundary/error-boundary.component import { auth } from "../firebase/firebase.utils"; import { UPSERT_USER } from "../graphql/user.queries"; -import { GET_CURRENT_USER } from "../graphql/local.queries"; +import { GET_CURRENT_USER, GET_LANGUAGE } from "../graphql/local.queries"; // import { QUERY_BODYSHOP } from "../graphql/bodyshop.queries"; import PrivateRoute from "../utils/private-route"; @@ -89,11 +90,23 @@ export default () => { }; }, [apolloClient]); const HookCurrentUser = useQuery(GET_CURRENT_USER); + const HookLanguage = useQuery(GET_LANGUAGE); if (!loaded) return ; - if (HookCurrentUser.loading) return ; - if (HookCurrentUser.error) - return ; + if (HookCurrentUser.loading || HookLanguage.loading) + return ; + if (HookCurrentUser.error || HookLanguage.error) + return ( + + ); + + if (HookLanguage.data.language) + i18next.changeLanguage(HookLanguage.data.language, (err, t) => { + if (err) + return console.log("Error encountered when changing languages.", err); + }); return (
diff --git a/client/src/components/current-user-dropdown/current-user-dropdown.component.jsx b/client/src/components/current-user-dropdown/current-user-dropdown.component.jsx index 177a1cb97..d2bb617b3 100644 --- a/client/src/components/current-user-dropdown/current-user-dropdown.component.jsx +++ b/client/src/components/current-user-dropdown/current-user-dropdown.component.jsx @@ -1,4 +1,4 @@ -import { useQuery } from "@apollo/react-hooks"; +import { useQuery, useApolloClient } from "@apollo/react-hooks"; import { Avatar, Col, Dropdown, Icon, Menu, Row } from "antd"; import i18next from "i18next"; import React from "react"; @@ -12,13 +12,14 @@ import SignOut from "../sign-out/sign-out.component"; export default function CurrentUserDropdown() { const { t } = useTranslation(); const { loading, error, data } = useQuery(GET_CURRENT_USER); + const client = useApolloClient(); const handleMenuClick = e => { - console.log("e", e); if (e.item.props.actiontype === "lang-select") { i18next.changeLanguage(e.key, (err, t) => { if (err) return console.log("Error encountered when changing languages.", err); + client.writeData({ data: { language: e.key } }); }); } }; diff --git a/client/src/components/jobs-list/jobs-list.component.jsx b/client/src/components/jobs-list/jobs-list.component.jsx index f92279eee..17635845d 100644 --- a/client/src/components/jobs-list/jobs-list.component.jsx +++ b/client/src/components/jobs-list/jobs-list.component.jsx @@ -25,6 +25,7 @@ export default withRouter(function JobsList({ title: t("jobs.fields.ro_number"), dataIndex: "ro_number", key: "ro_number", + width: "8%", // onFilter: (value, record) => record.ro_number.includes(value), // filteredValue: state.filteredInfo.text || null, sorter: (a, b) => alphaSort(a, b), @@ -45,6 +46,7 @@ export default withRouter(function JobsList({ key: "owner", ellipsis: true, sorter: (a, b) => alphaSort(a.ownr_ln, b.ownr_ln), + width: "25%", sortOrder: state.sortedInfo.columnKey === "owner" && state.sortedInfo.order, render: (text, record) => { @@ -64,6 +66,7 @@ export default withRouter(function JobsList({ title: t("jobs.fields.phone1"), dataIndex: "ownr_ph1", key: "ownr_ph1", + width: "12%", ellipsis: true, render: (text, record) => { return record.ownr_ph1 ? ( @@ -86,6 +89,7 @@ export default withRouter(function JobsList({ title: t("jobs.fields.status"), dataIndex: "status", key: "status", + width: "10%", ellipsis: true, sorter: (a, b) => alphaSort(a, b), sortOrder: @@ -99,6 +103,7 @@ export default withRouter(function JobsList({ title: t("jobs.fields.vehicle"), dataIndex: "vehicle", key: "vehicle", + width: "15%", ellipsis: true, render: (text, record) => { return record.vehicle ? ( @@ -115,6 +120,7 @@ export default withRouter(function JobsList({ title: t("vehicles.fields.plate_no"), dataIndex: "plate_no", key: "plate_no", + width: "8%", ellipsis: true, sorter: (a, b) => alphaSort(a, b), sortOrder: @@ -131,6 +137,7 @@ export default withRouter(function JobsList({ title: t("jobs.fields.clm_no"), dataIndex: "clm_no", key: "clm_no", + width: "12%", ellipsis: true, sorter: (a, b) => alphaSort(a, b), sortOrder: @@ -147,11 +154,12 @@ export default withRouter(function JobsList({ title: t("jobs.fields.clm_total"), dataIndex: "clm_total", key: "clm_total", - sorter: (a, b) => { - return a > b; - }, - sortOrder: - state.sortedInfo.columnKey === "clm_total" && state.sortedInfo.order, + width: "8%", + // sorter: (a, b) => { + // return a > b; + // }, + // sortOrder: + // state.sortedInfo.columnKey === "clm_total" && state.sortedInfo.order, render: (text, record) => { return record.clm_total ? ( {record.clm_total} @@ -164,6 +172,7 @@ export default withRouter(function JobsList({ title: t("jobs.fields.owner_owing"), dataIndex: "owner_owing", key: "owner_owing", + width: "8%", render: (text, record) => { return record.owner_owing ? ( {record.owner_owing} diff --git a/client/src/components/jobs-rates/jobs-rates.component.jsx b/client/src/components/jobs-rates/jobs-rates.component.jsx new file mode 100644 index 000000000..338a8eb9e --- /dev/null +++ b/client/src/components/jobs-rates/jobs-rates.component.jsx @@ -0,0 +1,5 @@ +import React from "react"; + +export default function JobsRatesComponent() { + return
Jobs Rates Comp
; +} diff --git a/client/src/components/jobs-rates/jobs-rates.container.jsx b/client/src/components/jobs-rates/jobs-rates.container.jsx new file mode 100644 index 000000000..c952d752a --- /dev/null +++ b/client/src/components/jobs-rates/jobs-rates.container.jsx @@ -0,0 +1,6 @@ +import React from "react"; +import JobsRatesComponent from "./jobs-rates.component"; + +export default function JobsRatesContainer() { + return ; +} diff --git a/client/src/components/language-selector/langauge-selector.component.jsx b/client/src/components/language-selector/langauge-selector.component.jsx deleted file mode 100644 index 177c51d4f..000000000 --- a/client/src/components/language-selector/langauge-selector.component.jsx +++ /dev/null @@ -1,27 +0,0 @@ -import React from "react"; -import { useTranslation } from "react-i18next"; -import i18next from "i18next"; -import { Dropdown, Menu, Icon } from "antd"; - -export default function LanguageSelector() { - const { t } = useTranslation(); - - const handleMenuClick = e => { - i18next.changeLanguage(e.key, (err, t) => { - if (err) - return console.log("Error encountered when changing languages.", err); - }); - }; - const menu = ( - - {t("general.languages.english")} - {t("general.languages.french")} - {t("general.languages.spanish")} - - ); - return ( - - - - ); -} diff --git a/client/src/graphql/initial-state.js b/client/src/graphql/initial-state.js index 671221c8b..fc69d4836 100644 --- a/client/src/graphql/initial-state.js +++ b/client/src/graphql/initial-state.js @@ -3,5 +3,6 @@ export default { currentUser: null, selectedNavItem: "Home", recentItems: [], - bodyShopData: null + bodyShopData: null, + language: "en_us" }; diff --git a/client/src/graphql/jobs.queries.js b/client/src/graphql/jobs.queries.js index c74240b52..c70285e9b 100644 --- a/client/src/graphql/jobs.queries.js +++ b/client/src/graphql/jobs.queries.js @@ -27,8 +27,8 @@ export const GET_ALL_OPEN_JOBS = gql` } `; -export const SUBSCRIPTION_ALL_OPEN_JOBS = gql` - subscription SUBSCRIPTION_ALL_OPEN_JOBS { +export const QUERY_ALL_OPEN_JOBS = gql` + query QUERY_ALL_OPEN_JOBS { jobs { ownr_fn ownr_ln diff --git a/client/src/graphql/local.queries.js b/client/src/graphql/local.queries.js index 88ae13c4f..7611dfd32 100644 --- a/client/src/graphql/local.queries.js +++ b/client/src/graphql/local.queries.js @@ -1,13 +1,5 @@ import { gql } from "apollo-boost"; -export const SET_CURRENT_USER = gql` - mutation SetCurrentUser($user: User!) { - setCurrentUser(user: $user) @client { - email - } - } -`; - export const GET_CURRENT_USER = gql` query GET_CURRENT_USER { currentUser @client { @@ -26,16 +18,8 @@ export const GET_CURRENT_SELECTED_NAV_ITEM = gql` } `; -export const GET_WHITE_BOARD_LEFT_SIDER_VISIBLE = gql` - { - whiteBoardLeftSiderVisible @client - } -`; - -export const GET_BODYSHOP = gql` - query LOCAL_GET_BODY_SHOP { - bodyShopData @client { - shopname - } +export const GET_LANGUAGE = gql` + query GET_USER_LANGUAGE { + language @client } `; diff --git a/client/src/pages/jobs-detail/jobs-detail.page.jsx b/client/src/pages/jobs-detail/jobs-detail.page.jsx index a87c8f93e..ecc689b03 100644 --- a/client/src/pages/jobs-detail/jobs-detail.page.jsx +++ b/client/src/pages/jobs-detail/jobs-detail.page.jsx @@ -7,6 +7,7 @@ import JobLinesContainer from "../../components/job-lines/job-lines.container.co import JobTombstone from "../../components/job-tombstone/job-tombstone.component"; import JobsDocumentsContainer from "../../components/jobs-documents/jobs-documents.container"; import JobNotesContainer from "../../components/jobs-notes/jobs-notes.container"; +import JobsRatesContainer from "../../components/jobs-rates/jobs-rates.container"; function JobsDetailPage({ jobId, hash, data, match, history }) { const { t } = useTranslation(); @@ -39,7 +40,7 @@ function JobsDetailPage({ jobId, hash, data, match, history }) { } key='#rates'> - Estimate Rates + Date: Sat, 25 Jan 2020 09:33:17 -0800 Subject: [PATCH 3/9] Adding chat window. --- client/src/App/App.css | 28 ++++++++++++++++++- .../chat-window/chat-window.component.jsx | 5 ++++ .../chat-window/chat-window.container.jsx | 18 ++++++++++++ .../components/footer/footer.component.jsx | 5 ++-- client/src/pages/manage/manage.page.jsx | 12 ++++---- 5 files changed, 60 insertions(+), 8 deletions(-) create mode 100644 client/src/components/chat-window/chat-window.component.jsx create mode 100644 client/src/components/chat-window/chat-window.container.jsx diff --git a/client/src/App/App.css b/client/src/App/App.css index 3cb918ee2..a4b0e7a43 100644 --- a/client/src/App/App.css +++ b/client/src/App/App.css @@ -1 +1,27 @@ -@import '~antd/dist/antd.css'; \ No newline at end of file +@import "~antd/dist/antd.css"; + +.ant-layout-header { + position: absolute; + top: 0px; + left: 0px; + height: 5vh; + right: 0px; + overflow: hidden; +} +.ant-layout-content { + position: absolute; + top: 5vh; + bottom: 3vh; + left: 0px; + right: 0px; + overflow: auto; +} + +.ant-layout-footer { + position: absolute; + bottom: 0px; + height: 3vh; + left: 0px; + right: 0px; + overflow: hidden; +} diff --git a/client/src/components/chat-window/chat-window.component.jsx b/client/src/components/chat-window/chat-window.component.jsx new file mode 100644 index 000000000..e4fd51848 --- /dev/null +++ b/client/src/components/chat-window/chat-window.component.jsx @@ -0,0 +1,5 @@ +import React from "react"; + +export default function ChatWindowComponent() { + return
Chat Windows and more
; +} diff --git a/client/src/components/chat-window/chat-window.container.jsx b/client/src/components/chat-window/chat-window.container.jsx new file mode 100644 index 000000000..cd70e1060 --- /dev/null +++ b/client/src/components/chat-window/chat-window.container.jsx @@ -0,0 +1,18 @@ +import React, { useState } from "react"; +import ChatWindowComponent from "./chat-window.component"; +import { Button } from "antd"; + +export default function ChatWindowContainer() { + const [visible, setVisible] = useState(false); + return ( +
+ {visible ? : null} + +
+ ); +} diff --git a/client/src/components/footer/footer.component.jsx b/client/src/components/footer/footer.component.jsx index 36532e88d..9061616ef 100644 --- a/client/src/components/footer/footer.component.jsx +++ b/client/src/components/footer/footer.component.jsx @@ -1,5 +1,6 @@ -import React from "react"; -import { Row, Col } from "antd"; +import React, { useState } from "react"; +import { Row, Col, Button } from "antd"; +import ChatWindowContainer from "../chat-window/chat-window.container"; export default function FooterComponent() { return ( diff --git a/client/src/pages/manage/manage.page.jsx b/client/src/pages/manage/manage.page.jsx index 56f4e47f0..9e450f058 100644 --- a/client/src/pages/manage/manage.page.jsx +++ b/client/src/pages/manage/manage.page.jsx @@ -8,18 +8,19 @@ import HeaderContainer from "../../components/header/header.container"; import FooterComponent from "../../components/footer/footer.component"; import ErrorBoundary from "../../components/error-boundary/error-boundary.component"; -import './manage.page.styles.scss' +import "./manage.page.styles.scss"; +import ChatWindowContainer from "../../components/chat-window/chat-window.container"; const WhiteBoardPage = lazy(() => import("../white-board/white-board.page")); const JobsPage = lazy(() => import("../jobs/jobs.page")); -const JobsDetailPage = lazy(() => import("../jobs-detail/jobs-detail.page.container")); +const JobsDetailPage = lazy(() => + import("../jobs-detail/jobs-detail.page.container") +); const ProfilePage = lazy(() => import("../profile/profile.container.page")); const JobsDocumentsPage = lazy(() => import("../../components/jobs-documents/jobs-documents.container") ); - - const { Header, Content, Footer } = Layout; //This page will handle all routing for the entire application. export default function Manage({ match }) { @@ -35,7 +36,7 @@ export default function Manage({ match }) { - + TODO: Suspended Loading in Manage Page...
}> @@ -62,6 +63,7 @@ export default function Manage({ match }) {
+
From b5e9c65aee6b83d44cdcd0068d844bd0420b818b Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Mon, 27 Jan 2020 16:20:33 -0800 Subject: [PATCH 4/9] Complete refactor of jobs detail screen. --- bodyshop_translations.babel | 327 +++++++++++++++++- client/src/App/App.css | 4 +- .../current-user-dropdown.component.jsx | 10 +- .../components/footer/footer.component.jsx | 5 +- .../components/header/header.component.jsx | 53 ++- .../job-lines.container.component.jsx | 3 +- .../job-tombstone/job-tombstone.component.jsx | 217 ------------ .../jobs-detail-header.component.jsx | 117 +++++++ .../note-upsert-modal.container.jsx | 4 +- client/src/graphql/jobs.queries.js | 54 +-- .../jobs-available.page.component.jsx | 9 + .../jobs-available.page.container.jsx | 10 + .../jobs-detail.page.component.jsx | 181 ++++++++++ .../jobs-detail.page.container.jsx | 77 ++++- .../pages/jobs-detail/jobs-detail.page.jsx | 80 ----- client/src/pages/manage/manage.page.jsx | 10 + client/src/translations/en_us/common.json | 21 +- client/src/translations/es/common.json | 21 +- client/src/translations/fr/common.json | 21 +- client/src/utils/CurrencyFormatter.jsx | 13 + .../down.yaml | 3 + .../up.yaml | 3 + .../down.yaml | 212 ++++++++++++ .../up.yaml | 213 ++++++++++++ .../down.yaml | 210 +++++++++++ .../up.yaml | 211 +++++++++++ .../down.yaml | 212 ++++++++++++ .../up.yaml | 213 ++++++++++++ .../down.yaml | 6 + .../up.yaml | 6 + .../down.yaml | 3 + .../up.yaml | 4 + .../down.yaml | 213 ++++++++++++ .../up.yaml | 214 ++++++++++++ .../down.yaml | 211 +++++++++++ .../up.yaml | 212 ++++++++++++ .../down.yaml | 213 ++++++++++++ .../up.yaml | 214 ++++++++++++ 38 files changed, 3409 insertions(+), 401 deletions(-) delete mode 100644 client/src/components/job-tombstone/job-tombstone.component.jsx create mode 100644 client/src/components/jobs-detail-header/jobs-detail-header.component.jsx create mode 100644 client/src/pages/jobs-available/jobs-available.page.component.jsx create mode 100644 client/src/pages/jobs-available/jobs-available.page.container.jsx create mode 100644 client/src/pages/jobs-detail/jobs-detail.page.component.jsx delete mode 100644 client/src/pages/jobs-detail/jobs-detail.page.jsx create mode 100644 client/src/utils/CurrencyFormatter.jsx create mode 100644 hasura/migrations/1580169338033_alter_table_public_jobs_add_column_service_Car/down.yaml create mode 100644 hasura/migrations/1580169338033_alter_table_public_jobs_add_column_service_Car/up.yaml create mode 100644 hasura/migrations/1580169357455_update_permission_user_public_table_jobs/down.yaml create mode 100644 hasura/migrations/1580169357455_update_permission_user_public_table_jobs/up.yaml create mode 100644 hasura/migrations/1580169365397_update_permission_user_public_table_jobs/down.yaml create mode 100644 hasura/migrations/1580169365397_update_permission_user_public_table_jobs/up.yaml create mode 100644 hasura/migrations/1580169373151_update_permission_user_public_table_jobs/down.yaml create mode 100644 hasura/migrations/1580169373151_update_permission_user_public_table_jobs/up.yaml create mode 100644 hasura/migrations/1580169467694_alter_table_public_jobs_alter_column_service_Car/down.yaml create mode 100644 hasura/migrations/1580169467694_alter_table_public_jobs_alter_column_service_Car/up.yaml create mode 100644 hasura/migrations/1580169565651_alter_table_public_jobs_add_column_special_coverage_policy/down.yaml create mode 100644 hasura/migrations/1580169565651_alter_table_public_jobs_add_column_special_coverage_policy/up.yaml create mode 100644 hasura/migrations/1580169609143_update_permission_user_public_table_jobs/down.yaml create mode 100644 hasura/migrations/1580169609143_update_permission_user_public_table_jobs/up.yaml create mode 100644 hasura/migrations/1580169617954_update_permission_user_public_table_jobs/down.yaml create mode 100644 hasura/migrations/1580169617954_update_permission_user_public_table_jobs/up.yaml create mode 100644 hasura/migrations/1580169626079_update_permission_user_public_table_jobs/down.yaml create mode 100644 hasura/migrations/1580169626079_update_permission_user_public_table_jobs/up.yaml diff --git a/bodyshop_translations.babel b/bodyshop_translations.babel index 8b29804b6..ee4afc6cf 100644 --- a/bodyshop_translations.babel +++ b/bodyshop_translations.babel @@ -804,6 +804,27 @@ + + customerowing + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + date_closed false @@ -1077,6 +1098,27 @@ + + repairtotal + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + ro_number false @@ -1161,6 +1203,48 @@ + + servicecar + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + specialcoveragepolicy + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + status false @@ -1713,6 +1797,247 @@ + + header + + + activejobs + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + availablejobs + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + home + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + jobs + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + + + jobsdetail + + + claimdetail + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + dates + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + financials + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + insurance + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + labor + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + partssublet + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + repairdata + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + profilesidebar @@ -1994,7 +2319,7 @@ successes - created + create false diff --git a/client/src/App/App.css b/client/src/App/App.css index a4b0e7a43..e497f630b 100644 --- a/client/src/App/App.css +++ b/client/src/App/App.css @@ -1,6 +1,6 @@ @import "~antd/dist/antd.css"; -.ant-layout-header { +/* .ant-layout-header { position: absolute; top: 0px; left: 0px; @@ -24,4 +24,4 @@ left: 0px; right: 0px; overflow: hidden; -} +} */ diff --git a/client/src/components/current-user-dropdown/current-user-dropdown.component.jsx b/client/src/components/current-user-dropdown/current-user-dropdown.component.jsx index d2bb617b3..5f23bca64 100644 --- a/client/src/components/current-user-dropdown/current-user-dropdown.component.jsx +++ b/client/src/components/current-user-dropdown/current-user-dropdown.component.jsx @@ -1,4 +1,4 @@ -import { useQuery, useApolloClient } from "@apollo/react-hooks"; +import { useApolloClient, useQuery } from "@apollo/react-hooks"; import { Avatar, Col, Dropdown, Icon, Menu, Row } from "antd"; import i18next from "i18next"; import React from "react"; @@ -52,7 +52,7 @@ export default function CurrentUserDropdown() { ); if (loading) return null; - if (error) return ; + if (error) return ; const { currentUser } = data; @@ -62,10 +62,8 @@ export default function CurrentUserDropdown() { - - - {currentUser?.displayName || t("general.labels.unknown")} - + + {currentUser.displayName || t("general.labels.unknown")} diff --git a/client/src/components/footer/footer.component.jsx b/client/src/components/footer/footer.component.jsx index 9061616ef..a8be82b23 100644 --- a/client/src/components/footer/footer.component.jsx +++ b/client/src/components/footer/footer.component.jsx @@ -1,6 +1,5 @@ -import React, { useState } from "react"; -import { Row, Col, Button } from "antd"; -import ChatWindowContainer from "../chat-window/chat-window.container"; +import { Col, Row } from "antd"; +import React from "react"; export default function FooterComponent() { return ( diff --git a/client/src/components/header/header.component.jsx b/client/src/components/header/header.component.jsx index d5f942178..217977bee 100644 --- a/client/src/components/header/header.component.jsx +++ b/client/src/components/header/header.component.jsx @@ -1,44 +1,65 @@ import { useApolloClient } from "@apollo/react-hooks"; import { Col, Icon, Menu, Row } from "antd"; import React from "react"; +import { useTranslation } from "react-i18next"; import { Link } from "react-router-dom"; import CurrentUserDropdown from "../current-user-dropdown/current-user-dropdown.component"; import GlobalSearch from "../global-search/global-search.component"; import ManageSignInButton from "../manage-sign-in-button/manage-sign-in-button.component"; import "./header.styles.scss"; - export default ({ landingHeader, navItems, selectedNavItem }) => { const apolloClient = useApolloClient(); - + const { t } = useTranslation(); const handleClick = e => { apolloClient.writeData({ data: { selectedNavItem: e.key } }); }; return ( - + + mode='horizontal'> - {navItems.map(navItem => ( - - - {navItem.icontype ? : null} - {navItem.title} + + + + + {t("menus.header.home")} + + + + + + + {t("menus.header.activejobs")} - ))} + + + + {t("menus.header.availablejobs")} + + + - {!landingHeader ? ( - null - ) : ( + { + // navItems.map(navItem => ( + // + // + // {navItem.icontype ? : null} + // {navItem.title} + // + // + // )) + } + + {!landingHeader ? null : ( diff --git a/client/src/components/job-lines/job-lines.container.component.jsx b/client/src/components/job-lines/job-lines.container.component.jsx index c5f4a994a..70e74c7c5 100644 --- a/client/src/components/job-lines/job-lines.container.component.jsx +++ b/client/src/components/job-lines/job-lines.container.component.jsx @@ -5,8 +5,7 @@ import AlertComponent from "../../components/alert/alert.component"; import { GET_JOB_LINES_BY_PK } from "../../graphql/jobs-lines.queries"; -export default function JobLinesContainer({ match }) { - const { jobId } = match.params; +export default function JobLinesContainer({ jobId }) { const { loading, error, data } = useQuery(GET_JOB_LINES_BY_PK, { variables: { id: jobId }, diff --git a/client/src/components/job-tombstone/job-tombstone.component.jsx b/client/src/components/job-tombstone/job-tombstone.component.jsx deleted file mode 100644 index 0bb478743..000000000 --- a/client/src/components/job-tombstone/job-tombstone.component.jsx +++ /dev/null @@ -1,217 +0,0 @@ -import React, { useState } from "react"; -import { Link } from "react-router-dom"; -import AlertComponent from "../alert/alert.component"; -import { - Form, - Input, - Row, - Col, - Button, - Typography, - PageHeader, - Descriptions, - Tag, - notification, - Avatar, - Layout -} from "antd"; -import { UPDATE_JOB, CONVERT_JOB_TO_RO } from "../../graphql/jobs.queries"; -import { useMutation } from "@apollo/react-hooks"; -import FormItemPhone from "../form-items-formatted/phone-form-item.component"; -import { useTranslation } from "react-i18next"; -import CarImage from "../../assets/car.svg"; - -const { Content } = Layout; -const formItemLayout = { - // labelCol: { - // xs: { span: 12 }, - // sm: { span: 5 } - // }, - // wrapperCol: { - // xs: { span: 24 }, - // sm: { span: 12 } - // } -}; - -function JobTombstone({ job, ...otherProps }) { - const [jobContext, setJobContext] = useState(job); - const [mutationUpdateJob] = useMutation(UPDATE_JOB); - const [mutationConvertJob] = useMutation(CONVERT_JOB_TO_RO); - const { t } = useTranslation(); - - if (!job) { - return ; - } - - const handleSubmit = e => { - e.preventDefault(); - - otherProps.form.validateFieldsAndScroll((err, values) => { - if (err) { - notification["error"]({ - message: t("jobs.errors.validationtitle"), - description: t("jobs.errors.validation") - }); - } - if (!err) { - mutationUpdateJob({ - variables: { jobId: jobContext.id, job: values } - }).then(r => - notification["success"]({ - message: t("jobs.successes.savetitle") - }) - ); - } - }); - }; - - const handleChange = event => { - const { name, value } = event.target ? event.target : event; - setJobContext({ ...jobContext, [name]: value }); - }; - - const { getFieldDecorator } = otherProps.form; - - const tombstoneTitle = ( -
- - {`${t("jobs.fields.ro_number")} ${ - jobContext.ro_number ? jobContext.ro_number : t("general.labels.na") - }`} -
- ); - - return ( - -
- - {jobContext.job_status ? ( - {jobContext.job_status.name} - ) : null} - - } - extra={[ - , - - ]}> - - - - {jobContext.vehicle?.v_model_yr || t("general.labels.na")}{" "} - {jobContext.vehicle?.v_make_desc || t("general.labels.na")}{" "} - {jobContext.vehicle?.v_model_desc || t("general.labels.na")} |{" "} - {jobContext.vehicle?.plate_no || t("general.labels.na")} - - - - - {jobContext.est_number} - - - - $ {jobContext.claim_total?.toFixed(2)} - - - - $ {jobContext.deductible?.toFixed(2)} - - - - - - Information - { - // - // {getFieldDecorator("est_number", { - // initialValue: jobContext.est_number - // })()} - // - } - - - - Insurance Information - - {getFieldDecorator("est_co_nm", { - initialValue: jobContext.est_co_nm - })()} - - - - {getFieldDecorator("est_ct_ln", { - initialValue: jobContext.est_ct_ln - })()} - - - {getFieldDecorator("est_ct_fn", { - initialValue: jobContext.est_ct_fn - })()} - - - - - {getFieldDecorator("est_ph1", { - initialValue: jobContext.est_ph1 - })( - - )} - - - {getFieldDecorator("est_ea", { - initialValue: jobContext.est_ea, - rules: [ - { - type: "email", - message: "This is not a valid email address." - } - ] - })()} - - - -
-
- ); -} - -export default Form.create({ name: "JobTombstone" })(JobTombstone); diff --git a/client/src/components/jobs-detail-header/jobs-detail-header.component.jsx b/client/src/components/jobs-detail-header/jobs-detail-header.component.jsx new file mode 100644 index 000000000..82d420c6c --- /dev/null +++ b/client/src/components/jobs-detail-header/jobs-detail-header.component.jsx @@ -0,0 +1,117 @@ +import { + Avatar, + Button, + Descriptions, + notification, + PageHeader, + Tag, + Input, + Form, + Checkbox +} from "antd"; +import React from "react"; +import { useTranslation } from "react-i18next"; +import Moment from "react-moment"; +import { Link } from "react-router-dom"; +import CarImage from "../../assets/car.svg"; +import CurrencyFormatter from "../../utils/CurrencyFormatter"; + +export default function JobsDetailHeader({ + job, + mutationConvertJob, + refetch, + getFieldDecorator +}) { + const { t } = useTranslation(); + + const tombstoneTitle = ( +
+ + {`${t("jobs.fields.ro_number")} ${ + job.ro_number ? job.ro_number : t("general.labels.na") + }`} +
+ ); + + const tombstoneSubtitle = ( +
+ {job.owner + ? (job.owner.first_name || "") + " " + (job.owner.last_name || "") + : t("jobs.errors.noowner")} + + {job.vehicle ? ( + + {job.vehicle.v_model_yr || t("general.labels.na")}{" "} + {job.vehicle.v_make_desc || t("general.labels.na")}{" "} + {job.vehicle.v_model_desc || t("general.labels.na")} |{" "} + {job.vehicle.plate_no || t("general.labels.na")} |{" "} + {job.vehicle.v_vin || t("general.labels.na")} + + ) : null} +
+ ); + + const menuExtra = [ + , + + ]; + + return ( + + {job.job_status ? ( + {job.job_status.name} + ) : null} + + } + extra={menuExtra}> + + + {job.claim_total} + + + + $NO BINDING YET + + + + + + + + {job.scheduled_completion ? ( + {job.scheduled_completion} + ) : null} + + + + {job.service_car} + + + + ); +} diff --git a/client/src/components/note-upsert-modal/note-upsert-modal.container.jsx b/client/src/components/note-upsert-modal/note-upsert-modal.container.jsx index 79287a033..ba7e46422 100644 --- a/client/src/components/note-upsert-modal/note-upsert-modal.container.jsx +++ b/client/src/components/note-upsert-modal/note-upsert-modal.container.jsx @@ -37,12 +37,12 @@ export default function NoteUpsertModalContainer({ ] } }).then(r => { + refetch(); + changeVisibility(!visible); notification["success"]({ message: t("notes.successes.create") }); }); - refetch(); - changeVisibility(!visible); }; const updateExistingNote = () => { diff --git a/client/src/graphql/jobs.queries.js b/client/src/graphql/jobs.queries.js index c70285e9b..33f56e24b 100644 --- a/client/src/graphql/jobs.queries.js +++ b/client/src/graphql/jobs.queries.js @@ -1,32 +1,5 @@ import { gql } from "apollo-boost"; -export const GET_ALL_OPEN_JOBS = gql` - query GET_ALL_OPEN_JOBS { - jobs { - id - est_number - ro_number - job_status { - id - name - } - scheduled_completion - scheduled_delivery - vehicle { - id - v_model_yr - v_make_desc - v_model_desc - plate_no - } - owner { - first_name - last_name - } - } - } -`; - export const QUERY_ALL_OPEN_JOBS = gql` query QUERY_ALL_OPEN_JOBS { jobs { @@ -89,30 +62,6 @@ export const QUERY_ALL_OPEN_JOBS = gql` } `; -export const QUERY_JOBS_IN_PRODUCTION = gql` - query QUERY_JOBS_IN_PRODUCTION { - jobs { - id - updated_at - est_number - ro_number - scheduled_completion - scheduled_delivery - vehicle { - id - v_model_yr - v_make_desc - v_model_desc - plate_no - } - owner { - first_name - last_name - } - } - } -`; - export const SUBSCRIPTION_JOBS_IN_PRODUCTION = gql` subscription SUBSCRIPTION_JOBS_IN_PRODUCTION { job_status( @@ -149,6 +98,7 @@ export const SUBSCRIPTION_JOBS_IN_PRODUCTION = gql` export const GET_JOB_BY_PK = gql` query GET_JOB_BY_PK($id: uuid!) { jobs_by_pk(id: $id) { + converted actual_completion actual_delivery actual_in @@ -171,6 +121,8 @@ export const GET_JOB_BY_PK = gql` ro_number scheduled_completion scheduled_in + service_car + special_coverage_policy scheduled_delivery job_status { id diff --git a/client/src/pages/jobs-available/jobs-available.page.component.jsx b/client/src/pages/jobs-available/jobs-available.page.component.jsx new file mode 100644 index 000000000..9dc5b81fe --- /dev/null +++ b/client/src/pages/jobs-available/jobs-available.page.component.jsx @@ -0,0 +1,9 @@ +import React from 'react' + +export default function JobsAvailablePageComponent() { + return ( +
+ JobsAvailablePageComponent +
+ ) +} diff --git a/client/src/pages/jobs-available/jobs-available.page.container.jsx b/client/src/pages/jobs-available/jobs-available.page.container.jsx new file mode 100644 index 000000000..6a146ea6a --- /dev/null +++ b/client/src/pages/jobs-available/jobs-available.page.container.jsx @@ -0,0 +1,10 @@ +import React from 'react' +import JobsAvailablePageComponent from './jobs-available.page.component' + +export default function JobsAvailablePageContainer() { + return ( +
+ +
+ ) +} diff --git a/client/src/pages/jobs-detail/jobs-detail.page.component.jsx b/client/src/pages/jobs-detail/jobs-detail.page.component.jsx new file mode 100644 index 000000000..7e3afddd3 --- /dev/null +++ b/client/src/pages/jobs-detail/jobs-detail.page.component.jsx @@ -0,0 +1,181 @@ +import { Form, Icon, Tabs } from "antd"; +import React from "react"; +import { useTranslation } from "react-i18next"; +import { FaRegStickyNote } from "react-icons/fa"; +import JobLinesContainer from "../../components/job-lines/job-lines.container.component"; +import JobsDetailHeader from "../../components/jobs-detail-header/jobs-detail-header.component"; +import JobsDocumentsContainer from "../../components/jobs-documents/jobs-documents.container"; +import JobNotesContainer from "../../components/jobs-notes/jobs-notes.container"; +import JobsRatesContainer from "../../components/jobs-rates/jobs-rates.container"; + +export default function JobsDetailPage({ + job, + mutationUpdateJob, + mutationConvertJob, + handleSubmit, + handleChange, + getFieldDecorator, + refetch +}) { + const { t } = useTranslation(); + + const formItemLayout = { + labelCol: { + xs: { span: 12 }, + sm: { span: 5 } + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 12 } + } + }; + + // const TEMP = ( + //
+ // {" "} + // + // {getFieldDecorator("est_ct_ln", { + // initialValue: jobContext.est_ct_ln + // })()} + // + // + // {getFieldDecorator("est_ct_fn", { + // initialValue: jobContext.est_ct_fn + // })()} + // + // + // {getFieldDecorator("est_ph1", { + // initialValue: jobContext.est_ph1 + // })( + // + // )} + // + // + // {getFieldDecorator("est_ea", { + // initialValue: jobContext.est_ea, + // rules: [ + // { + // type: "email", + // message: "This is not a valid email address." + // } + // ] + // })()} + // + //
+ // ); + + return ( +
+ + + + + + {t("menus.jobsdetail.claimdetail")} + + } + key='claimdetail'> + Claim detail + + + + + {t("menus.jobsdetail.insurance")} + + } + key='insurance'> + Insurance + + + + + {t("menus.jobsdetail.repairdata")} + + } + key='repairdata'> + + + + + + {t("menus.jobsdetail.financials")} + + } + key='financials'> + + + + + + {t("menus.jobsdetail.partssublet")} + + } + key='partssublet'> + Partssublet + + + + + {t("menus.jobsdetail.labor")} + + } + key='labor'> + Labor + + + + + {t("menus.jobsdetail.dates")} + + } + key='dates'> + Dates + + + + + {t("jobs.labels.documents")} + + } + key='#documents'> + + + + + {t("jobs.labels.notes")} + + } + key='#notes'> + + + + + ); +} diff --git a/client/src/pages/jobs-detail/jobs-detail.page.container.jsx b/client/src/pages/jobs-detail/jobs-detail.page.container.jsx index 9b6cc6f3f..3d6691f66 100644 --- a/client/src/pages/jobs-detail/jobs-detail.page.container.jsx +++ b/client/src/pages/jobs-detail/jobs-detail.page.container.jsx @@ -1,38 +1,79 @@ -import { useQuery } from "@apollo/react-hooks"; +import { Form, notification } from "antd"; import React, { useEffect } from "react"; +import { useMutation, useQuery } from "react-apollo"; import { useTranslation } from "react-i18next"; import AlertComponent from "../../components/alert/alert.component"; import SpinComponent from "../../components/loading-spinner/loading-spinner.component"; -import { GET_JOB_BY_PK } from "../../graphql/jobs.queries"; -import JobsDetailPage from "./jobs-detail.page"; +import { + GET_JOB_BY_PK, + UPDATE_JOB, + CONVERT_JOB_TO_RO +} from "../../graphql/jobs.queries"; +import JobsDetailPage from "./jobs-detail.page.component"; -function JobsDetailPageContainer({ match, location }) { +function JobsDetailPageContainer({ match, form }) { const { jobId } = match.params; - const { hash } = location; const { t } = useTranslation(); - const { loading, error, data } = useQuery(GET_JOB_BY_PK, { + + const { loading, error, data, refetch } = useQuery(GET_JOB_BY_PK, { variables: { id: jobId }, fetchPolicy: "network-only" }); + const [mutationUpdateJob] = useMutation(UPDATE_JOB); + const [mutationConvertJob] = useMutation(CONVERT_JOB_TO_RO); useEffect(() => { - document.title = loading - ? "..." - : t("titles.jobsdetail", { - ro_number: data.jobs_by_pk.ro_number + document.title = + loading && !error + ? "..." + : t("titles.jobsdetail", { + ro_number: data.jobs_by_pk.ro_number + }); + }, [loading, data, t, error]); + + const handleSubmit = e => { + e.preventDefault(); + + form.validateFieldsAndScroll((err, values) => { + if (err) { + notification["error"]({ + message: t("jobs.errors.validationtitle"), + description: t("jobs.errors.validation") }); - }, [loading, data, t]); + } + if (!err) { + mutationUpdateJob({ + variables: { jobId: data.jobs_by_pk.id, job: values } + }).then(r => + notification["success"]({ + message: t("jobs.successes.savetitle") + }) + ); + } + }); + }; + + const handleChange = event => { + //const { name, value } = event.target ? event.target : event; + //setJobContext({ ...jobContext, [name]: value }); + }; if (loading) return ; if (error) return ; - - return ( + return data.jobs_by_pk ? ( + ) : ( + ); } -export default JobsDetailPageContainer; +export default Form.create({ name: "JobsDetailPageContainer" })( + JobsDetailPageContainer +); diff --git a/client/src/pages/jobs-detail/jobs-detail.page.jsx b/client/src/pages/jobs-detail/jobs-detail.page.jsx deleted file mode 100644 index ecc689b03..000000000 --- a/client/src/pages/jobs-detail/jobs-detail.page.jsx +++ /dev/null @@ -1,80 +0,0 @@ -import { Icon, Row, Tabs } from "antd"; -import React from "react"; -import { useTranslation } from "react-i18next"; -import { FaRegStickyNote } from "react-icons/fa"; -import { withRouter } from "react-router-dom"; -import JobLinesContainer from "../../components/job-lines/job-lines.container.component"; -import JobTombstone from "../../components/job-tombstone/job-tombstone.component"; -import JobsDocumentsContainer from "../../components/jobs-documents/jobs-documents.container"; -import JobNotesContainer from "../../components/jobs-notes/jobs-notes.container"; -import JobsRatesContainer from "../../components/jobs-rates/jobs-rates.container"; - -function JobsDetailPage({ jobId, hash, data, match, history }) { - const { t } = useTranslation(); - return ( -
- - - - - { - history.push(p); - }}> - - - {t("jobs.labels.lines")} - - } - key='#lines'> - - - - - {t("jobs.labels.rates")} - - } - key='#rates'> - - - - - {t("jobs.labels.parts")} - - } - key='#parts'> - Estimate Parts - - - - {t("jobs.labels.documents")} - - } - key='#documents'> - - - - - {t("jobs.labels.notes")} - - } - key='#notes'> - - - - -
- ); -} -export default withRouter(JobsDetailPage); diff --git a/client/src/pages/manage/manage.page.jsx b/client/src/pages/manage/manage.page.jsx index 9e450f058..93245792f 100644 --- a/client/src/pages/manage/manage.page.jsx +++ b/client/src/pages/manage/manage.page.jsx @@ -20,6 +20,9 @@ const ProfilePage = lazy(() => import("../profile/profile.container.page")); const JobsDocumentsPage = lazy(() => import("../../components/jobs-documents/jobs-documents.container") ); +const JobsAvailablePage = lazy(() => + import("../jobs-available/jobs-available.page.container") +); const { Header, Content, Footer } = Layout; //This page will handle all routing for the entire application. @@ -43,6 +46,7 @@ export default function Manage({ match }) { + + + diff --git a/client/src/translations/en_us/common.json b/client/src/translations/en_us/common.json index a657b41eb..8584f8721 100644 --- a/client/src/translations/en_us/common.json +++ b/client/src/translations/en_us/common.json @@ -55,6 +55,7 @@ "claim_total": "Claim Total", "clm_no": "Claim #", "clm_total": "Claim Total", + "customerowing": "Customer Owing", "date_closed": "Closed", "date_estimated": "Date Estimated", "date_exported": "Exported", @@ -68,10 +69,13 @@ "ownr_ea": "Email", "phone1": "Phone 1", "phoneshort": "PH", + "repairtotal": "Repair Total", "ro_number": "RO #", "scheduled_completion": "Scheduled Completion", "scheduled_delivery": "Scheduled Delivery", "scheduled_in": "Scheduled In", + "servicecar": "Service Car", + "specialcoveragepolicy": "Special Coverage Policy", "status": "Job Status", "vehicle": "Vehicle" }, @@ -108,6 +112,21 @@ "languageselector": "Language", "profile": "Profile" }, + "header": { + "activejobs": "Active Jobs", + "availablejobs": "Available Jobs", + "home": "Home", + "jobs": "Jobs" + }, + "jobsdetail": { + "claimdetail": "Claim Details", + "dates": "Dates", + "financials": "Financials", + "insurance": "Insurance", + "labor": "Labor", + "partssublet": "Parts/Sublet", + "repairdata": "Repair Data" + }, "profilesidebar": { "profile": "My Profile", "shops": "My Shops" @@ -131,7 +150,7 @@ "newnoteplaceholder": "Add a note..." }, "successes": { - "created": "Note created successfully.", + "create": "Note created successfully.", "deleted": "Note deleted successfully.", "updated": "Note updated successfully." } diff --git a/client/src/translations/es/common.json b/client/src/translations/es/common.json index c102ca788..869653e41 100644 --- a/client/src/translations/es/common.json +++ b/client/src/translations/es/common.json @@ -55,6 +55,7 @@ "claim_total": "Reclamar total", "clm_no": "Reclamación #", "clm_total": "Reclamar total", + "customerowing": "Cliente debido", "date_closed": "Cerrado", "date_estimated": "Fecha estimada", "date_exported": "Exportado", @@ -68,10 +69,13 @@ "ownr_ea": "Email", "phone1": "Teléfono 1", "phoneshort": "PH", + "repairtotal": "Reparación total", "ro_number": "RO #", "scheduled_completion": "Finalización programada", "scheduled_delivery": "Entrega programada", "scheduled_in": "Programado en", + "servicecar": "Auto de servicio", + "specialcoveragepolicy": "Política de cobertura especial", "status": "Estado del trabajo", "vehicle": "Vehículo" }, @@ -108,6 +112,21 @@ "languageselector": "idioma", "profile": "Perfil" }, + "header": { + "activejobs": "Empleos activos", + "availablejobs": "Trabajos disponibles", + "home": "Casa", + "jobs": "Trabajos" + }, + "jobsdetail": { + "claimdetail": "Detalles de la reclamación", + "dates": "fechas", + "financials": "finanzas", + "insurance": "Seguro", + "labor": "Labor", + "partssublet": "Piezas / Subarrendamiento", + "repairdata": "Datos de reparación" + }, "profilesidebar": { "profile": "Mi perfil", "shops": "Mis tiendas" @@ -131,7 +150,7 @@ "newnoteplaceholder": "Agrega una nota..." }, "successes": { - "created": "Nota creada con éxito.", + "create": "Nota creada con éxito.", "deleted": "Nota eliminada con éxito.", "updated": "Nota actualizada con éxito." } diff --git a/client/src/translations/fr/common.json b/client/src/translations/fr/common.json index bca75b8ae..f067a76a3 100644 --- a/client/src/translations/fr/common.json +++ b/client/src/translations/fr/common.json @@ -55,6 +55,7 @@ "claim_total": "Total réclamation", "clm_no": "Prétendre #", "clm_total": "Total réclamation", + "customerowing": "Client propriétaire", "date_closed": "Fermé", "date_estimated": "Date estimée", "date_exported": "Exportés", @@ -68,10 +69,13 @@ "ownr_ea": "Email", "phone1": "Téléphone 1", "phoneshort": "PH", + "repairtotal": "Réparation totale", "ro_number": "RO #", "scheduled_completion": "Achèvement planifié", "scheduled_delivery": "Livraison programmée", "scheduled_in": "Planifié dans", + "servicecar": "Voiture de service", + "specialcoveragepolicy": "Politique de couverture spéciale", "status": "Statut de l'emploi", "vehicle": "Véhicule" }, @@ -108,6 +112,21 @@ "languageselector": "La langue", "profile": "Profil" }, + "header": { + "activejobs": "Emplois actifs", + "availablejobs": "Emplois disponibles", + "home": "Accueil", + "jobs": "Emplois" + }, + "jobsdetail": { + "claimdetail": "Détails de la réclamation", + "dates": "Rendez-vous", + "financials": "Financiers", + "insurance": "Assurance", + "labor": "La main d'oeuvre", + "partssublet": "Pièces / Sous-location", + "repairdata": "Données de réparation" + }, "profilesidebar": { "profile": "Mon profil", "shops": "Mes boutiques" @@ -131,7 +150,7 @@ "newnoteplaceholder": "Ajouter une note..." }, "successes": { - "created": "Remarque créée avec succès.", + "create": "Remarque créée avec succès.", "deleted": "Remarque supprimée avec succès.", "updated": "Remarque mise à jour avec succès." } diff --git a/client/src/utils/CurrencyFormatter.jsx b/client/src/utils/CurrencyFormatter.jsx new file mode 100644 index 000000000..083c2cf70 --- /dev/null +++ b/client/src/utils/CurrencyFormatter.jsx @@ -0,0 +1,13 @@ +import React from "react"; +import NumberFormat from "react-number-format"; + +export default function CurrencyFormatter(props) { + return ( + + ); +} diff --git a/hasura/migrations/1580169338033_alter_table_public_jobs_add_column_service_Car/down.yaml b/hasura/migrations/1580169338033_alter_table_public_jobs_add_column_service_Car/down.yaml new file mode 100644 index 000000000..0af0647d9 --- /dev/null +++ b/hasura/migrations/1580169338033_alter_table_public_jobs_add_column_service_Car/down.yaml @@ -0,0 +1,3 @@ +- args: + sql: ALTER TABLE "public"."jobs" DROP COLUMN "service_Car"; + type: run_sql diff --git a/hasura/migrations/1580169338033_alter_table_public_jobs_add_column_service_Car/up.yaml b/hasura/migrations/1580169338033_alter_table_public_jobs_add_column_service_Car/up.yaml new file mode 100644 index 000000000..c0dcd1261 --- /dev/null +++ b/hasura/migrations/1580169338033_alter_table_public_jobs_add_column_service_Car/up.yaml @@ -0,0 +1,3 @@ +- args: + sql: ALTER TABLE "public"."jobs" ADD COLUMN "service_Car" text NULL; + type: run_sql diff --git a/hasura/migrations/1580169357455_update_permission_user_public_table_jobs/down.yaml b/hasura/migrations/1580169357455_update_permission_user_public_table_jobs/down.yaml new file mode 100644 index 000000000..cdb202414 --- /dev/null +++ b/hasura/migrations/1580169357455_update_permission_user_public_table_jobs/down.yaml @@ -0,0 +1,212 @@ +- args: + role: user + table: + name: jobs + schema: public + type: drop_insert_permission +- args: + permission: + check: + bodyshop: + associations: + _and: + - user: + authid: + _eq: X-Hasura-User-Id + - active: + _eq: true + columns: + - actual_completion + - actual_delivery + - actual_in + - agt_addr1 + - agt_addr2 + - agt_city + - agt_co_id + - agt_co_nm + - agt_ct_fn + - agt_ct_ln + - agt_ct_ph + - agt_ct_phx + - agt_ctry + - agt_ea + - agt_fax + - agt_faxx + - agt_lic_no + - agt_ph1 + - agt_ph1x + - agt_ph2 + - agt_ph2x + - agt_st + - agt_zip + - area_of_damage + - asgn_date + - asgn_no + - asgn_type + - cat_no + - ciecaid + - claim_total + - clm_addr1 + - clm_addr2 + - clm_city + - clm_ct_fn + - clm_ct_ln + - clm_ct_ph + - clm_ct_phx + - clm_ctry + - clm_ea + - clm_fax + - clm_faxx + - clm_no + - clm_ofc_id + - clm_ofc_nm + - clm_ph1 + - clm_ph1x + - clm_ph2 + - clm_ph2x + - clm_st + - clm_title + - clm_total + - clm_zip + - converted + - created_at + - cust_pr + - date_closed + - date_estimated + - date_exported + - date_invoiced + - date_open + - date_scheduled + - ded_amt + - ded_status + - deductible + - est_addr1 + - est_addr2 + - est_city + - est_co_nm + - est_ct_fn + - est_ct_ln + - est_ctry + - est_ea + - est_number + - est_ph1 + - est_st + - est_zip + - federal_tax_rate + - id + - inproduction + - ins_addr1 + - ins_addr2 + - ins_city + - ins_co_id + - ins_co_nm + - ins_ct_fn + - ins_ct_ln + - ins_ct_ph + - ins_ct_phx + - ins_ctry + - ins_ea + - ins_fax + - ins_faxx + - ins_memo + - ins_ph1 + - ins_ph1x + - ins_ph2 + - ins_ph2x + - ins_st + - ins_title + - ins_zip + - insd_addr1 + - insd_addr2 + - insd_city + - insd_co_nm + - insd_ctry + - insd_ea + - insd_fax + - insd_faxx + - insd_fn + - insd_ln + - insd_ph1 + - insd_ph1x + - insd_ph2 + - insd_ph2x + - insd_st + - insd_title + - insd_zip + - invoice_date + - labor_rate_desc + - labor_rate_id + - local_tax_rate + - loss_cat + - loss_date + - loss_desc + - loss_type + - owner_owing + - ownerid + - ownr_addr1 + - ownr_addr2 + - ownr_city + - ownr_co_nm + - ownr_ctry + - ownr_ea + - ownr_fax + - ownr_faxx + - ownr_fn + - ownr_ln + - ownr_ph1 + - ownr_ph1x + - ownr_ph2 + - ownr_ph2x + - ownr_st + - ownr_title + - ownr_zip + - pay_amt + - pay_chknm + - pay_date + - pay_type + - payee_nms + - policy_no + - rate_atp + - rate_la1 + - rate_la2 + - rate_la3 + - rate_la4 + - rate_lab + - rate_lad + - rate_lae + - rate_laf + - rate_lag + - rate_lam + - rate_lar + - rate_las + - rate_lau + - rate_ma2s + - rate_ma2t + - rate_ma3s + - rate_mabl + - rate_macs + - rate_mahw + - rate_mapa + - rate_mash + - rate_matd + - regie_number + - ro_number + - scheduled_completion + - scheduled_delivery + - scheduled_in + - shopid + - state_tax_rate + - statusid + - theft_ind + - tlos_ind + - updated_at + - vehicleid + localPresets: + - key: "" + value: "" + set: {} + role: user + table: + name: jobs + schema: public + type: create_insert_permission diff --git a/hasura/migrations/1580169357455_update_permission_user_public_table_jobs/up.yaml b/hasura/migrations/1580169357455_update_permission_user_public_table_jobs/up.yaml new file mode 100644 index 000000000..8a6eca121 --- /dev/null +++ b/hasura/migrations/1580169357455_update_permission_user_public_table_jobs/up.yaml @@ -0,0 +1,213 @@ +- args: + role: user + table: + name: jobs + schema: public + type: drop_insert_permission +- args: + permission: + check: + bodyshop: + associations: + _and: + - user: + authid: + _eq: X-Hasura-User-Id + - active: + _eq: true + columns: + - id + - created_at + - updated_at + - shopid + - ro_number + - ownerid + - vehicleid + - labor_rate_id + - labor_rate_desc + - rate_lab + - rate_lad + - rate_lae + - rate_lar + - rate_las + - rate_laf + - rate_lam + - rate_lag + - rate_atp + - rate_lau + - rate_la1 + - rate_la2 + - rate_la3 + - rate_la4 + - rate_mapa + - rate_mash + - rate_mahw + - rate_ma2s + - rate_ma3s + - rate_ma2t + - rate_mabl + - rate_macs + - rate_matd + - federal_tax_rate + - state_tax_rate + - local_tax_rate + - est_co_nm + - est_addr1 + - est_addr2 + - est_city + - est_st + - est_zip + - est_ctry + - est_ph1 + - est_ea + - est_ct_ln + - est_ct_fn + - scheduled_in + - actual_in + - scheduled_completion + - actual_completion + - scheduled_delivery + - actual_delivery + - regie_number + - invoice_date + - claim_total + - deductible + - inproduction + - statusid + - ins_co_id + - ins_co_nm + - ins_addr1 + - ins_addr2 + - ins_city + - ins_st + - ins_zip + - ins_ctry + - ins_ph1 + - ins_ph1x + - ins_ph2 + - ins_ph2x + - ins_fax + - ins_faxx + - ins_ct_ln + - ins_ct_fn + - ins_title + - ins_ct_ph + - ins_ct_phx + - ins_ea + - ins_memo + - policy_no + - ded_amt + - ded_status + - asgn_no + - asgn_date + - asgn_type + - clm_no + - clm_ofc_id + - date_estimated + - date_open + - date_scheduled + - date_invoiced + - date_closed + - date_exported + - clm_total + - owner_owing + - converted + - ciecaid + - loss_date + - clm_ofc_nm + - clm_addr1 + - clm_addr2 + - clm_city + - clm_st + - clm_zip + - clm_ctry + - clm_ph1 + - clm_ph1x + - clm_ph2 + - clm_ph2x + - clm_fax + - clm_faxx + - clm_ct_ln + - clm_ct_fn + - clm_title + - clm_ct_ph + - clm_ct_phx + - clm_ea + - payee_nms + - pay_type + - pay_date + - pay_chknm + - pay_amt + - agt_co_id + - agt_co_nm + - agt_addr1 + - agt_addr2 + - agt_city + - agt_st + - agt_zip + - agt_ctry + - agt_ph1 + - agt_ph1x + - agt_ph2 + - agt_ph2x + - agt_fax + - agt_faxx + - agt_ct_ln + - agt_ct_fn + - agt_ct_ph + - agt_ct_phx + - agt_ea + - agt_lic_no + - loss_type + - loss_desc + - theft_ind + - cat_no + - tlos_ind + - cust_pr + - insd_ln + - insd_fn + - insd_title + - insd_co_nm + - insd_addr1 + - insd_addr2 + - insd_city + - insd_st + - insd_zip + - insd_ctry + - insd_ph1 + - insd_ph1x + - insd_ph2 + - insd_ph2x + - insd_fax + - insd_faxx + - insd_ea + - ownr_ln + - ownr_fn + - ownr_title + - ownr_co_nm + - ownr_addr1 + - ownr_addr2 + - ownr_city + - ownr_st + - ownr_zip + - ownr_ctry + - ownr_ph1 + - ownr_ph1x + - ownr_ph2 + - ownr_ph2x + - ownr_fax + - ownr_faxx + - ownr_ea + - area_of_damage + - loss_cat + - est_number + - service_Car + localPresets: + - key: "" + value: "" + set: {} + role: user + table: + name: jobs + schema: public + type: create_insert_permission diff --git a/hasura/migrations/1580169365397_update_permission_user_public_table_jobs/down.yaml b/hasura/migrations/1580169365397_update_permission_user_public_table_jobs/down.yaml new file mode 100644 index 000000000..915f8c6b9 --- /dev/null +++ b/hasura/migrations/1580169365397_update_permission_user_public_table_jobs/down.yaml @@ -0,0 +1,210 @@ +- args: + role: user + table: + name: jobs + schema: public + type: drop_select_permission +- args: + permission: + allow_aggregations: false + columns: + - converted + - inproduction + - asgn_date + - invoice_date + - loss_date + - pay_date + - est_number + - area_of_damage + - claim_total + - clm_total + - ded_amt + - deductible + - federal_tax_rate + - local_tax_rate + - owner_owing + - pay_amt + - rate_atp + - rate_la1 + - rate_la2 + - rate_la3 + - rate_la4 + - rate_lab + - rate_lad + - rate_lae + - rate_laf + - rate_lag + - rate_lam + - rate_lar + - rate_las + - rate_lau + - rate_ma2s + - rate_ma2t + - rate_ma3s + - rate_mabl + - rate_macs + - rate_mahw + - rate_mapa + - rate_mash + - rate_matd + - state_tax_rate + - agt_addr1 + - agt_addr2 + - agt_city + - agt_co_id + - agt_co_nm + - agt_ct_fn + - agt_ct_ln + - agt_ct_ph + - agt_ct_phx + - agt_ctry + - agt_ea + - agt_fax + - agt_faxx + - agt_lic_no + - agt_ph1 + - agt_ph1x + - agt_ph2 + - agt_ph2x + - agt_st + - agt_zip + - asgn_no + - asgn_type + - cat_no + - ciecaid + - clm_addr1 + - clm_addr2 + - clm_city + - clm_ct_fn + - clm_ct_ln + - clm_ct_ph + - clm_ct_phx + - clm_ctry + - clm_ea + - clm_fax + - clm_faxx + - clm_no + - clm_ofc_id + - clm_ofc_nm + - clm_ph1 + - clm_ph1x + - clm_ph2 + - clm_ph2x + - clm_st + - clm_title + - clm_zip + - cust_pr + - ded_status + - est_addr1 + - est_addr2 + - est_city + - est_co_nm + - est_ct_fn + - est_ct_ln + - est_ctry + - est_ea + - est_ph1 + - est_st + - est_zip + - ins_addr1 + - ins_addr2 + - ins_city + - ins_co_id + - ins_co_nm + - ins_ct_fn + - ins_ct_ln + - ins_ct_ph + - ins_ct_phx + - ins_ctry + - insd_addr1 + - insd_addr2 + - insd_city + - insd_co_nm + - insd_ctry + - insd_ea + - insd_fax + - insd_faxx + - insd_fn + - insd_ln + - insd_ph1 + - insd_ph1x + - insd_ph2 + - insd_ph2x + - insd_st + - insd_title + - insd_zip + - ins_ea + - ins_fax + - ins_faxx + - ins_memo + - ins_ph1 + - ins_ph1x + - ins_ph2 + - ins_ph2x + - ins_st + - ins_title + - ins_zip + - labor_rate_desc + - labor_rate_id + - loss_cat + - loss_desc + - loss_type + - ownr_addr1 + - ownr_addr2 + - ownr_city + - ownr_co_nm + - ownr_ctry + - ownr_ea + - ownr_fax + - ownr_faxx + - ownr_fn + - ownr_ln + - ownr_ph1 + - ownr_ph1x + - ownr_ph2 + - ownr_ph2x + - ownr_st + - ownr_title + - ownr_zip + - pay_chknm + - payee_nms + - pay_type + - policy_no + - regie_number + - ro_number + - theft_ind + - tlos_ind + - actual_completion + - actual_delivery + - actual_in + - created_at + - date_closed + - date_estimated + - date_exported + - date_invoiced + - date_open + - date_scheduled + - scheduled_completion + - scheduled_delivery + - scheduled_in + - updated_at + - id + - ownerid + - shopid + - statusid + - vehicleid + computed_fields: [] + filter: + bodyshop: + associations: + _and: + - user: + authid: + _eq: X-Hasura-User-Id + - active: + _eq: true + role: user + table: + name: jobs + schema: public + type: create_select_permission diff --git a/hasura/migrations/1580169365397_update_permission_user_public_table_jobs/up.yaml b/hasura/migrations/1580169365397_update_permission_user_public_table_jobs/up.yaml new file mode 100644 index 000000000..5f1089b37 --- /dev/null +++ b/hasura/migrations/1580169365397_update_permission_user_public_table_jobs/up.yaml @@ -0,0 +1,211 @@ +- args: + role: user + table: + name: jobs + schema: public + type: drop_select_permission +- args: + permission: + allow_aggregations: false + columns: + - converted + - inproduction + - asgn_date + - invoice_date + - loss_date + - pay_date + - est_number + - area_of_damage + - claim_total + - clm_total + - ded_amt + - deductible + - federal_tax_rate + - local_tax_rate + - owner_owing + - pay_amt + - rate_atp + - rate_la1 + - rate_la2 + - rate_la3 + - rate_la4 + - rate_lab + - rate_lad + - rate_lae + - rate_laf + - rate_lag + - rate_lam + - rate_lar + - rate_las + - rate_lau + - rate_ma2s + - rate_ma2t + - rate_ma3s + - rate_mabl + - rate_macs + - rate_mahw + - rate_mapa + - rate_mash + - rate_matd + - state_tax_rate + - agt_addr1 + - agt_addr2 + - agt_city + - agt_co_id + - agt_co_nm + - agt_ct_fn + - agt_ct_ln + - agt_ct_ph + - agt_ct_phx + - agt_ctry + - agt_ea + - agt_fax + - agt_faxx + - agt_lic_no + - agt_ph1 + - agt_ph1x + - agt_ph2 + - agt_ph2x + - agt_st + - agt_zip + - asgn_no + - asgn_type + - cat_no + - ciecaid + - clm_addr1 + - clm_addr2 + - clm_city + - clm_ct_fn + - clm_ct_ln + - clm_ct_ph + - clm_ct_phx + - clm_ctry + - clm_ea + - clm_fax + - clm_faxx + - clm_no + - clm_ofc_id + - clm_ofc_nm + - clm_ph1 + - clm_ph1x + - clm_ph2 + - clm_ph2x + - clm_st + - clm_title + - clm_zip + - cust_pr + - ded_status + - est_addr1 + - est_addr2 + - est_city + - est_co_nm + - est_ct_fn + - est_ct_ln + - est_ctry + - est_ea + - est_ph1 + - est_st + - est_zip + - ins_addr1 + - ins_addr2 + - ins_city + - ins_co_id + - ins_co_nm + - ins_ct_fn + - ins_ct_ln + - ins_ct_ph + - ins_ct_phx + - ins_ctry + - insd_addr1 + - insd_addr2 + - insd_city + - insd_co_nm + - insd_ctry + - insd_ea + - insd_fax + - insd_faxx + - insd_fn + - insd_ln + - insd_ph1 + - insd_ph1x + - insd_ph2 + - insd_ph2x + - insd_st + - insd_title + - insd_zip + - ins_ea + - ins_fax + - ins_faxx + - ins_memo + - ins_ph1 + - ins_ph1x + - ins_ph2 + - ins_ph2x + - ins_st + - ins_title + - ins_zip + - labor_rate_desc + - labor_rate_id + - loss_cat + - loss_desc + - loss_type + - ownr_addr1 + - ownr_addr2 + - ownr_city + - ownr_co_nm + - ownr_ctry + - ownr_ea + - ownr_fax + - ownr_faxx + - ownr_fn + - ownr_ln + - ownr_ph1 + - ownr_ph1x + - ownr_ph2 + - ownr_ph2x + - ownr_st + - ownr_title + - ownr_zip + - pay_chknm + - payee_nms + - pay_type + - policy_no + - regie_number + - ro_number + - service_Car + - theft_ind + - tlos_ind + - actual_completion + - actual_delivery + - actual_in + - created_at + - date_closed + - date_estimated + - date_exported + - date_invoiced + - date_open + - date_scheduled + - scheduled_completion + - scheduled_delivery + - scheduled_in + - updated_at + - id + - ownerid + - shopid + - statusid + - vehicleid + computed_fields: [] + filter: + bodyshop: + associations: + _and: + - user: + authid: + _eq: X-Hasura-User-Id + - active: + _eq: true + role: user + table: + name: jobs + schema: public + type: create_select_permission diff --git a/hasura/migrations/1580169373151_update_permission_user_public_table_jobs/down.yaml b/hasura/migrations/1580169373151_update_permission_user_public_table_jobs/down.yaml new file mode 100644 index 000000000..a1c550dec --- /dev/null +++ b/hasura/migrations/1580169373151_update_permission_user_public_table_jobs/down.yaml @@ -0,0 +1,212 @@ +- args: + role: user + table: + name: jobs + schema: public + type: drop_update_permission +- args: + permission: + columns: + - converted + - inproduction + - asgn_date + - invoice_date + - loss_date + - pay_date + - est_number + - area_of_damage + - claim_total + - clm_total + - ded_amt + - deductible + - federal_tax_rate + - local_tax_rate + - owner_owing + - pay_amt + - rate_atp + - rate_la1 + - rate_la2 + - rate_la3 + - rate_la4 + - rate_lab + - rate_lad + - rate_lae + - rate_laf + - rate_lag + - rate_lam + - rate_lar + - rate_las + - rate_lau + - rate_ma2s + - rate_ma2t + - rate_ma3s + - rate_mabl + - rate_macs + - rate_mahw + - rate_mapa + - rate_mash + - rate_matd + - state_tax_rate + - agt_addr1 + - agt_addr2 + - agt_city + - agt_co_id + - agt_co_nm + - agt_ct_fn + - agt_ct_ln + - agt_ct_ph + - agt_ct_phx + - agt_ctry + - agt_ea + - agt_fax + - agt_faxx + - agt_lic_no + - agt_ph1 + - agt_ph1x + - agt_ph2 + - agt_ph2x + - agt_st + - agt_zip + - asgn_no + - asgn_type + - cat_no + - ciecaid + - clm_addr1 + - clm_addr2 + - clm_city + - clm_ct_fn + - clm_ct_ln + - clm_ct_ph + - clm_ct_phx + - clm_ctry + - clm_ea + - clm_fax + - clm_faxx + - clm_no + - clm_ofc_id + - clm_ofc_nm + - clm_ph1 + - clm_ph1x + - clm_ph2 + - clm_ph2x + - clm_st + - clm_title + - clm_zip + - cust_pr + - ded_status + - est_addr1 + - est_addr2 + - est_city + - est_co_nm + - est_ct_fn + - est_ct_ln + - est_ctry + - est_ea + - est_ph1 + - est_st + - est_zip + - ins_addr1 + - ins_addr2 + - ins_city + - ins_co_id + - ins_co_nm + - ins_ct_fn + - ins_ct_ln + - ins_ct_ph + - ins_ct_phx + - ins_ctry + - insd_addr1 + - insd_addr2 + - insd_city + - insd_co_nm + - insd_ctry + - insd_ea + - insd_fax + - insd_faxx + - insd_fn + - insd_ln + - insd_ph1 + - insd_ph1x + - insd_ph2 + - insd_ph2x + - insd_st + - insd_title + - insd_zip + - ins_ea + - ins_fax + - ins_faxx + - ins_memo + - ins_ph1 + - ins_ph1x + - ins_ph2 + - ins_ph2x + - ins_st + - ins_title + - ins_zip + - labor_rate_desc + - labor_rate_id + - loss_cat + - loss_desc + - loss_type + - ownr_addr1 + - ownr_addr2 + - ownr_city + - ownr_co_nm + - ownr_ctry + - ownr_ea + - ownr_fax + - ownr_faxx + - ownr_fn + - ownr_ln + - ownr_ph1 + - ownr_ph1x + - ownr_ph2 + - ownr_ph2x + - ownr_st + - ownr_title + - ownr_zip + - pay_chknm + - payee_nms + - pay_type + - policy_no + - regie_number + - ro_number + - theft_ind + - tlos_ind + - actual_completion + - actual_delivery + - actual_in + - created_at + - date_closed + - date_estimated + - date_exported + - date_invoiced + - date_open + - date_scheduled + - scheduled_completion + - scheduled_delivery + - scheduled_in + - updated_at + - id + - ownerid + - shopid + - statusid + - vehicleid + filter: + bodyshop: + associations: + _and: + - user: + authid: + _eq: X-Hasura-User-Id + - active: + _eq: true + localPresets: + - key: "" + value: "" + set: {} + role: user + table: + name: jobs + schema: public + type: create_update_permission diff --git a/hasura/migrations/1580169373151_update_permission_user_public_table_jobs/up.yaml b/hasura/migrations/1580169373151_update_permission_user_public_table_jobs/up.yaml new file mode 100644 index 000000000..4f2b760c0 --- /dev/null +++ b/hasura/migrations/1580169373151_update_permission_user_public_table_jobs/up.yaml @@ -0,0 +1,213 @@ +- args: + role: user + table: + name: jobs + schema: public + type: drop_update_permission +- args: + permission: + columns: + - converted + - inproduction + - asgn_date + - invoice_date + - loss_date + - pay_date + - est_number + - area_of_damage + - claim_total + - clm_total + - ded_amt + - deductible + - federal_tax_rate + - local_tax_rate + - owner_owing + - pay_amt + - rate_atp + - rate_la1 + - rate_la2 + - rate_la3 + - rate_la4 + - rate_lab + - rate_lad + - rate_lae + - rate_laf + - rate_lag + - rate_lam + - rate_lar + - rate_las + - rate_lau + - rate_ma2s + - rate_ma2t + - rate_ma3s + - rate_mabl + - rate_macs + - rate_mahw + - rate_mapa + - rate_mash + - rate_matd + - state_tax_rate + - agt_addr1 + - agt_addr2 + - agt_city + - agt_co_id + - agt_co_nm + - agt_ct_fn + - agt_ct_ln + - agt_ct_ph + - agt_ct_phx + - agt_ctry + - agt_ea + - agt_fax + - agt_faxx + - agt_lic_no + - agt_ph1 + - agt_ph1x + - agt_ph2 + - agt_ph2x + - agt_st + - agt_zip + - asgn_no + - asgn_type + - cat_no + - ciecaid + - clm_addr1 + - clm_addr2 + - clm_city + - clm_ct_fn + - clm_ct_ln + - clm_ct_ph + - clm_ct_phx + - clm_ctry + - clm_ea + - clm_fax + - clm_faxx + - clm_no + - clm_ofc_id + - clm_ofc_nm + - clm_ph1 + - clm_ph1x + - clm_ph2 + - clm_ph2x + - clm_st + - clm_title + - clm_zip + - cust_pr + - ded_status + - est_addr1 + - est_addr2 + - est_city + - est_co_nm + - est_ct_fn + - est_ct_ln + - est_ctry + - est_ea + - est_ph1 + - est_st + - est_zip + - ins_addr1 + - ins_addr2 + - ins_city + - ins_co_id + - ins_co_nm + - ins_ct_fn + - ins_ct_ln + - ins_ct_ph + - ins_ct_phx + - ins_ctry + - insd_addr1 + - insd_addr2 + - insd_city + - insd_co_nm + - insd_ctry + - insd_ea + - insd_fax + - insd_faxx + - insd_fn + - insd_ln + - insd_ph1 + - insd_ph1x + - insd_ph2 + - insd_ph2x + - insd_st + - insd_title + - insd_zip + - ins_ea + - ins_fax + - ins_faxx + - ins_memo + - ins_ph1 + - ins_ph1x + - ins_ph2 + - ins_ph2x + - ins_st + - ins_title + - ins_zip + - labor_rate_desc + - labor_rate_id + - loss_cat + - loss_desc + - loss_type + - ownr_addr1 + - ownr_addr2 + - ownr_city + - ownr_co_nm + - ownr_ctry + - ownr_ea + - ownr_fax + - ownr_faxx + - ownr_fn + - ownr_ln + - ownr_ph1 + - ownr_ph1x + - ownr_ph2 + - ownr_ph2x + - ownr_st + - ownr_title + - ownr_zip + - pay_chknm + - payee_nms + - pay_type + - policy_no + - regie_number + - ro_number + - service_Car + - theft_ind + - tlos_ind + - actual_completion + - actual_delivery + - actual_in + - created_at + - date_closed + - date_estimated + - date_exported + - date_invoiced + - date_open + - date_scheduled + - scheduled_completion + - scheduled_delivery + - scheduled_in + - updated_at + - id + - ownerid + - shopid + - statusid + - vehicleid + filter: + bodyshop: + associations: + _and: + - user: + authid: + _eq: X-Hasura-User-Id + - active: + _eq: true + localPresets: + - key: "" + value: "" + set: {} + role: user + table: + name: jobs + schema: public + type: create_update_permission diff --git a/hasura/migrations/1580169467694_alter_table_public_jobs_alter_column_service_Car/down.yaml b/hasura/migrations/1580169467694_alter_table_public_jobs_alter_column_service_Car/down.yaml new file mode 100644 index 000000000..f39fc6f03 --- /dev/null +++ b/hasura/migrations/1580169467694_alter_table_public_jobs_alter_column_service_Car/down.yaml @@ -0,0 +1,6 @@ +- args: + sql: COMMENT ON COLUMN "public"."jobs"."service_Car" IS E'null' + type: run_sql +- args: + sql: alter table "public"."jobs" rename column "service_car" to "service_Car"; + type: run_sql diff --git a/hasura/migrations/1580169467694_alter_table_public_jobs_alter_column_service_Car/up.yaml b/hasura/migrations/1580169467694_alter_table_public_jobs_alter_column_service_Car/up.yaml new file mode 100644 index 000000000..3321b91b3 --- /dev/null +++ b/hasura/migrations/1580169467694_alter_table_public_jobs_alter_column_service_Car/up.yaml @@ -0,0 +1,6 @@ +- args: + sql: COMMENT ON COLUMN "public"."jobs"."service_Car" IS E'' + type: run_sql +- args: + sql: alter table "public"."jobs" rename column "service_Car" to "service_car"; + type: run_sql diff --git a/hasura/migrations/1580169565651_alter_table_public_jobs_add_column_special_coverage_policy/down.yaml b/hasura/migrations/1580169565651_alter_table_public_jobs_add_column_special_coverage_policy/down.yaml new file mode 100644 index 000000000..d0660650b --- /dev/null +++ b/hasura/migrations/1580169565651_alter_table_public_jobs_add_column_special_coverage_policy/down.yaml @@ -0,0 +1,3 @@ +- args: + sql: ALTER TABLE "public"."jobs" DROP COLUMN "special_coverage_policy"; + type: run_sql diff --git a/hasura/migrations/1580169565651_alter_table_public_jobs_add_column_special_coverage_policy/up.yaml b/hasura/migrations/1580169565651_alter_table_public_jobs_add_column_special_coverage_policy/up.yaml new file mode 100644 index 000000000..353cc12bd --- /dev/null +++ b/hasura/migrations/1580169565651_alter_table_public_jobs_add_column_special_coverage_policy/up.yaml @@ -0,0 +1,4 @@ +- args: + sql: ALTER TABLE "public"."jobs" ADD COLUMN "special_coverage_policy" boolean + NOT NULL DEFAULT false; + type: run_sql diff --git a/hasura/migrations/1580169609143_update_permission_user_public_table_jobs/down.yaml b/hasura/migrations/1580169609143_update_permission_user_public_table_jobs/down.yaml new file mode 100644 index 000000000..3717c3ed4 --- /dev/null +++ b/hasura/migrations/1580169609143_update_permission_user_public_table_jobs/down.yaml @@ -0,0 +1,213 @@ +- args: + role: user + table: + name: jobs + schema: public + type: drop_insert_permission +- args: + permission: + check: + bodyshop: + associations: + _and: + - user: + authid: + _eq: X-Hasura-User-Id + - active: + _eq: true + columns: + - id + - created_at + - updated_at + - shopid + - ro_number + - ownerid + - vehicleid + - labor_rate_id + - labor_rate_desc + - rate_lab + - rate_lad + - rate_lae + - rate_lar + - rate_las + - rate_laf + - rate_lam + - rate_lag + - rate_atp + - rate_lau + - rate_la1 + - rate_la2 + - rate_la3 + - rate_la4 + - rate_mapa + - rate_mash + - rate_mahw + - rate_ma2s + - rate_ma3s + - rate_ma2t + - rate_mabl + - rate_macs + - rate_matd + - federal_tax_rate + - state_tax_rate + - local_tax_rate + - est_co_nm + - est_addr1 + - est_addr2 + - est_city + - est_st + - est_zip + - est_ctry + - est_ph1 + - est_ea + - est_ct_ln + - est_ct_fn + - scheduled_in + - actual_in + - scheduled_completion + - actual_completion + - scheduled_delivery + - actual_delivery + - regie_number + - invoice_date + - claim_total + - deductible + - inproduction + - statusid + - ins_co_id + - ins_co_nm + - ins_addr1 + - ins_addr2 + - ins_city + - ins_st + - ins_zip + - ins_ctry + - ins_ph1 + - ins_ph1x + - ins_ph2 + - ins_ph2x + - ins_fax + - ins_faxx + - ins_ct_ln + - ins_ct_fn + - ins_title + - ins_ct_ph + - ins_ct_phx + - ins_ea + - ins_memo + - policy_no + - ded_amt + - ded_status + - asgn_no + - asgn_date + - asgn_type + - clm_no + - clm_ofc_id + - date_estimated + - date_open + - date_scheduled + - date_invoiced + - date_closed + - date_exported + - clm_total + - owner_owing + - converted + - ciecaid + - loss_date + - clm_ofc_nm + - clm_addr1 + - clm_addr2 + - clm_city + - clm_st + - clm_zip + - clm_ctry + - clm_ph1 + - clm_ph1x + - clm_ph2 + - clm_ph2x + - clm_fax + - clm_faxx + - clm_ct_ln + - clm_ct_fn + - clm_title + - clm_ct_ph + - clm_ct_phx + - clm_ea + - payee_nms + - pay_type + - pay_date + - pay_chknm + - pay_amt + - agt_co_id + - agt_co_nm + - agt_addr1 + - agt_addr2 + - agt_city + - agt_st + - agt_zip + - agt_ctry + - agt_ph1 + - agt_ph1x + - agt_ph2 + - agt_ph2x + - agt_fax + - agt_faxx + - agt_ct_ln + - agt_ct_fn + - agt_ct_ph + - agt_ct_phx + - agt_ea + - agt_lic_no + - loss_type + - loss_desc + - theft_ind + - cat_no + - tlos_ind + - cust_pr + - insd_ln + - insd_fn + - insd_title + - insd_co_nm + - insd_addr1 + - insd_addr2 + - insd_city + - insd_st + - insd_zip + - insd_ctry + - insd_ph1 + - insd_ph1x + - insd_ph2 + - insd_ph2x + - insd_fax + - insd_faxx + - insd_ea + - ownr_ln + - ownr_fn + - ownr_title + - ownr_co_nm + - ownr_addr1 + - ownr_addr2 + - ownr_city + - ownr_st + - ownr_zip + - ownr_ctry + - ownr_ph1 + - ownr_ph1x + - ownr_ph2 + - ownr_ph2x + - ownr_fax + - ownr_faxx + - ownr_ea + - area_of_damage + - loss_cat + - est_number + - service_car + localPresets: + - key: "" + value: "" + set: {} + role: user + table: + name: jobs + schema: public + type: create_insert_permission diff --git a/hasura/migrations/1580169609143_update_permission_user_public_table_jobs/up.yaml b/hasura/migrations/1580169609143_update_permission_user_public_table_jobs/up.yaml new file mode 100644 index 000000000..0e582a2c4 --- /dev/null +++ b/hasura/migrations/1580169609143_update_permission_user_public_table_jobs/up.yaml @@ -0,0 +1,214 @@ +- args: + role: user + table: + name: jobs + schema: public + type: drop_insert_permission +- args: + permission: + check: + bodyshop: + associations: + _and: + - user: + authid: + _eq: X-Hasura-User-Id + - active: + _eq: true + columns: + - id + - created_at + - updated_at + - shopid + - ro_number + - ownerid + - vehicleid + - labor_rate_id + - labor_rate_desc + - rate_lab + - rate_lad + - rate_lae + - rate_lar + - rate_las + - rate_laf + - rate_lam + - rate_lag + - rate_atp + - rate_lau + - rate_la1 + - rate_la2 + - rate_la3 + - rate_la4 + - rate_mapa + - rate_mash + - rate_mahw + - rate_ma2s + - rate_ma3s + - rate_ma2t + - rate_mabl + - rate_macs + - rate_matd + - federal_tax_rate + - state_tax_rate + - local_tax_rate + - est_co_nm + - est_addr1 + - est_addr2 + - est_city + - est_st + - est_zip + - est_ctry + - est_ph1 + - est_ea + - est_ct_ln + - est_ct_fn + - scheduled_in + - actual_in + - scheduled_completion + - actual_completion + - scheduled_delivery + - actual_delivery + - regie_number + - invoice_date + - claim_total + - deductible + - inproduction + - statusid + - ins_co_id + - ins_co_nm + - ins_addr1 + - ins_addr2 + - ins_city + - ins_st + - ins_zip + - ins_ctry + - ins_ph1 + - ins_ph1x + - ins_ph2 + - ins_ph2x + - ins_fax + - ins_faxx + - ins_ct_ln + - ins_ct_fn + - ins_title + - ins_ct_ph + - ins_ct_phx + - ins_ea + - ins_memo + - policy_no + - ded_amt + - ded_status + - asgn_no + - asgn_date + - asgn_type + - clm_no + - clm_ofc_id + - date_estimated + - date_open + - date_scheduled + - date_invoiced + - date_closed + - date_exported + - clm_total + - owner_owing + - converted + - ciecaid + - loss_date + - clm_ofc_nm + - clm_addr1 + - clm_addr2 + - clm_city + - clm_st + - clm_zip + - clm_ctry + - clm_ph1 + - clm_ph1x + - clm_ph2 + - clm_ph2x + - clm_fax + - clm_faxx + - clm_ct_ln + - clm_ct_fn + - clm_title + - clm_ct_ph + - clm_ct_phx + - clm_ea + - payee_nms + - pay_type + - pay_date + - pay_chknm + - pay_amt + - agt_co_id + - agt_co_nm + - agt_addr1 + - agt_addr2 + - agt_city + - agt_st + - agt_zip + - agt_ctry + - agt_ph1 + - agt_ph1x + - agt_ph2 + - agt_ph2x + - agt_fax + - agt_faxx + - agt_ct_ln + - agt_ct_fn + - agt_ct_ph + - agt_ct_phx + - agt_ea + - agt_lic_no + - loss_type + - loss_desc + - theft_ind + - cat_no + - tlos_ind + - cust_pr + - insd_ln + - insd_fn + - insd_title + - insd_co_nm + - insd_addr1 + - insd_addr2 + - insd_city + - insd_st + - insd_zip + - insd_ctry + - insd_ph1 + - insd_ph1x + - insd_ph2 + - insd_ph2x + - insd_fax + - insd_faxx + - insd_ea + - ownr_ln + - ownr_fn + - ownr_title + - ownr_co_nm + - ownr_addr1 + - ownr_addr2 + - ownr_city + - ownr_st + - ownr_zip + - ownr_ctry + - ownr_ph1 + - ownr_ph1x + - ownr_ph2 + - ownr_ph2x + - ownr_fax + - ownr_faxx + - ownr_ea + - area_of_damage + - loss_cat + - est_number + - service_car + - special_coverage_policy + localPresets: + - key: "" + value: "" + set: {} + role: user + table: + name: jobs + schema: public + type: create_insert_permission diff --git a/hasura/migrations/1580169617954_update_permission_user_public_table_jobs/down.yaml b/hasura/migrations/1580169617954_update_permission_user_public_table_jobs/down.yaml new file mode 100644 index 000000000..c4be28150 --- /dev/null +++ b/hasura/migrations/1580169617954_update_permission_user_public_table_jobs/down.yaml @@ -0,0 +1,211 @@ +- args: + role: user + table: + name: jobs + schema: public + type: drop_select_permission +- args: + permission: + allow_aggregations: false + columns: + - converted + - inproduction + - asgn_date + - invoice_date + - loss_date + - pay_date + - est_number + - area_of_damage + - claim_total + - clm_total + - ded_amt + - deductible + - federal_tax_rate + - local_tax_rate + - owner_owing + - pay_amt + - rate_atp + - rate_la1 + - rate_la2 + - rate_la3 + - rate_la4 + - rate_lab + - rate_lad + - rate_lae + - rate_laf + - rate_lag + - rate_lam + - rate_lar + - rate_las + - rate_lau + - rate_ma2s + - rate_ma2t + - rate_ma3s + - rate_mabl + - rate_macs + - rate_mahw + - rate_mapa + - rate_mash + - rate_matd + - state_tax_rate + - agt_addr1 + - agt_addr2 + - agt_city + - agt_co_id + - agt_co_nm + - agt_ct_fn + - agt_ct_ln + - agt_ct_ph + - agt_ct_phx + - agt_ctry + - agt_ea + - agt_fax + - agt_faxx + - agt_lic_no + - agt_ph1 + - agt_ph1x + - agt_ph2 + - agt_ph2x + - agt_st + - agt_zip + - asgn_no + - asgn_type + - cat_no + - ciecaid + - clm_addr1 + - clm_addr2 + - clm_city + - clm_ct_fn + - clm_ct_ln + - clm_ct_ph + - clm_ct_phx + - clm_ctry + - clm_ea + - clm_fax + - clm_faxx + - clm_no + - clm_ofc_id + - clm_ofc_nm + - clm_ph1 + - clm_ph1x + - clm_ph2 + - clm_ph2x + - clm_st + - clm_title + - clm_zip + - cust_pr + - ded_status + - est_addr1 + - est_addr2 + - est_city + - est_co_nm + - est_ct_fn + - est_ct_ln + - est_ctry + - est_ea + - est_ph1 + - est_st + - est_zip + - ins_addr1 + - ins_addr2 + - ins_city + - ins_co_id + - ins_co_nm + - ins_ct_fn + - ins_ct_ln + - ins_ct_ph + - ins_ct_phx + - ins_ctry + - insd_addr1 + - insd_addr2 + - insd_city + - insd_co_nm + - insd_ctry + - insd_ea + - insd_fax + - insd_faxx + - insd_fn + - insd_ln + - insd_ph1 + - insd_ph1x + - insd_ph2 + - insd_ph2x + - insd_st + - insd_title + - insd_zip + - ins_ea + - ins_fax + - ins_faxx + - ins_memo + - ins_ph1 + - ins_ph1x + - ins_ph2 + - ins_ph2x + - ins_st + - ins_title + - ins_zip + - labor_rate_desc + - labor_rate_id + - loss_cat + - loss_desc + - loss_type + - ownr_addr1 + - ownr_addr2 + - ownr_city + - ownr_co_nm + - ownr_ctry + - ownr_ea + - ownr_fax + - ownr_faxx + - ownr_fn + - ownr_ln + - ownr_ph1 + - ownr_ph1x + - ownr_ph2 + - ownr_ph2x + - ownr_st + - ownr_title + - ownr_zip + - pay_chknm + - payee_nms + - pay_type + - policy_no + - regie_number + - ro_number + - service_car + - theft_ind + - tlos_ind + - actual_completion + - actual_delivery + - actual_in + - created_at + - date_closed + - date_estimated + - date_exported + - date_invoiced + - date_open + - date_scheduled + - scheduled_completion + - scheduled_delivery + - scheduled_in + - updated_at + - id + - ownerid + - shopid + - statusid + - vehicleid + computed_fields: [] + filter: + bodyshop: + associations: + _and: + - user: + authid: + _eq: X-Hasura-User-Id + - active: + _eq: true + role: user + table: + name: jobs + schema: public + type: create_select_permission diff --git a/hasura/migrations/1580169617954_update_permission_user_public_table_jobs/up.yaml b/hasura/migrations/1580169617954_update_permission_user_public_table_jobs/up.yaml new file mode 100644 index 000000000..cb7febe8c --- /dev/null +++ b/hasura/migrations/1580169617954_update_permission_user_public_table_jobs/up.yaml @@ -0,0 +1,212 @@ +- args: + role: user + table: + name: jobs + schema: public + type: drop_select_permission +- args: + permission: + allow_aggregations: false + columns: + - id + - created_at + - updated_at + - shopid + - ro_number + - ownerid + - vehicleid + - labor_rate_id + - labor_rate_desc + - rate_lab + - rate_lad + - rate_lae + - rate_lar + - rate_las + - rate_laf + - rate_lam + - rate_lag + - rate_atp + - rate_lau + - rate_la1 + - rate_la2 + - rate_la3 + - rate_la4 + - rate_mapa + - rate_mash + - rate_mahw + - rate_ma2s + - rate_ma3s + - rate_ma2t + - rate_mabl + - rate_macs + - rate_matd + - federal_tax_rate + - state_tax_rate + - local_tax_rate + - est_co_nm + - est_addr1 + - est_addr2 + - est_city + - est_st + - est_zip + - est_ctry + - est_ph1 + - est_ea + - est_ct_ln + - est_ct_fn + - scheduled_in + - actual_in + - scheduled_completion + - actual_completion + - scheduled_delivery + - actual_delivery + - regie_number + - invoice_date + - claim_total + - deductible + - inproduction + - statusid + - ins_co_id + - ins_co_nm + - ins_addr1 + - ins_addr2 + - ins_city + - ins_st + - ins_zip + - ins_ctry + - ins_ph1 + - ins_ph1x + - ins_ph2 + - ins_ph2x + - ins_fax + - ins_faxx + - ins_ct_ln + - ins_ct_fn + - ins_title + - ins_ct_ph + - ins_ct_phx + - ins_ea + - ins_memo + - policy_no + - ded_amt + - ded_status + - asgn_no + - asgn_date + - asgn_type + - clm_no + - clm_ofc_id + - date_estimated + - date_open + - date_scheduled + - date_invoiced + - date_closed + - date_exported + - clm_total + - owner_owing + - converted + - ciecaid + - loss_date + - clm_ofc_nm + - clm_addr1 + - clm_addr2 + - clm_city + - clm_st + - clm_zip + - clm_ctry + - clm_ph1 + - clm_ph1x + - clm_ph2 + - clm_ph2x + - clm_fax + - clm_faxx + - clm_ct_ln + - clm_ct_fn + - clm_title + - clm_ct_ph + - clm_ct_phx + - clm_ea + - payee_nms + - pay_type + - pay_date + - pay_chknm + - pay_amt + - agt_co_id + - agt_co_nm + - agt_addr1 + - agt_addr2 + - agt_city + - agt_st + - agt_zip + - agt_ctry + - agt_ph1 + - agt_ph1x + - agt_ph2 + - agt_ph2x + - agt_fax + - agt_faxx + - agt_ct_ln + - agt_ct_fn + - agt_ct_ph + - agt_ct_phx + - agt_ea + - agt_lic_no + - loss_type + - loss_desc + - theft_ind + - cat_no + - tlos_ind + - cust_pr + - insd_ln + - insd_fn + - insd_title + - insd_co_nm + - insd_addr1 + - insd_addr2 + - insd_city + - insd_st + - insd_zip + - insd_ctry + - insd_ph1 + - insd_ph1x + - insd_ph2 + - insd_ph2x + - insd_fax + - insd_faxx + - insd_ea + - ownr_ln + - ownr_fn + - ownr_title + - ownr_co_nm + - ownr_addr1 + - ownr_addr2 + - ownr_city + - ownr_st + - ownr_zip + - ownr_ctry + - ownr_ph1 + - ownr_ph1x + - ownr_ph2 + - ownr_ph2x + - ownr_fax + - ownr_faxx + - ownr_ea + - area_of_damage + - loss_cat + - est_number + - service_car + - special_coverage_policy + computed_fields: [] + filter: + bodyshop: + associations: + _and: + - user: + authid: + _eq: X-Hasura-User-Id + - active: + _eq: true + role: user + table: + name: jobs + schema: public + type: create_select_permission diff --git a/hasura/migrations/1580169626079_update_permission_user_public_table_jobs/down.yaml b/hasura/migrations/1580169626079_update_permission_user_public_table_jobs/down.yaml new file mode 100644 index 000000000..c66a2d708 --- /dev/null +++ b/hasura/migrations/1580169626079_update_permission_user_public_table_jobs/down.yaml @@ -0,0 +1,213 @@ +- args: + role: user + table: + name: jobs + schema: public + type: drop_update_permission +- args: + permission: + columns: + - converted + - inproduction + - asgn_date + - invoice_date + - loss_date + - pay_date + - est_number + - area_of_damage + - claim_total + - clm_total + - ded_amt + - deductible + - federal_tax_rate + - local_tax_rate + - owner_owing + - pay_amt + - rate_atp + - rate_la1 + - rate_la2 + - rate_la3 + - rate_la4 + - rate_lab + - rate_lad + - rate_lae + - rate_laf + - rate_lag + - rate_lam + - rate_lar + - rate_las + - rate_lau + - rate_ma2s + - rate_ma2t + - rate_ma3s + - rate_mabl + - rate_macs + - rate_mahw + - rate_mapa + - rate_mash + - rate_matd + - state_tax_rate + - agt_addr1 + - agt_addr2 + - agt_city + - agt_co_id + - agt_co_nm + - agt_ct_fn + - agt_ct_ln + - agt_ct_ph + - agt_ct_phx + - agt_ctry + - agt_ea + - agt_fax + - agt_faxx + - agt_lic_no + - agt_ph1 + - agt_ph1x + - agt_ph2 + - agt_ph2x + - agt_st + - agt_zip + - asgn_no + - asgn_type + - cat_no + - ciecaid + - clm_addr1 + - clm_addr2 + - clm_city + - clm_ct_fn + - clm_ct_ln + - clm_ct_ph + - clm_ct_phx + - clm_ctry + - clm_ea + - clm_fax + - clm_faxx + - clm_no + - clm_ofc_id + - clm_ofc_nm + - clm_ph1 + - clm_ph1x + - clm_ph2 + - clm_ph2x + - clm_st + - clm_title + - clm_zip + - cust_pr + - ded_status + - est_addr1 + - est_addr2 + - est_city + - est_co_nm + - est_ct_fn + - est_ct_ln + - est_ctry + - est_ea + - est_ph1 + - est_st + - est_zip + - ins_addr1 + - ins_addr2 + - ins_city + - ins_co_id + - ins_co_nm + - ins_ct_fn + - ins_ct_ln + - ins_ct_ph + - ins_ct_phx + - ins_ctry + - insd_addr1 + - insd_addr2 + - insd_city + - insd_co_nm + - insd_ctry + - insd_ea + - insd_fax + - insd_faxx + - insd_fn + - insd_ln + - insd_ph1 + - insd_ph1x + - insd_ph2 + - insd_ph2x + - insd_st + - insd_title + - insd_zip + - ins_ea + - ins_fax + - ins_faxx + - ins_memo + - ins_ph1 + - ins_ph1x + - ins_ph2 + - ins_ph2x + - ins_st + - ins_title + - ins_zip + - labor_rate_desc + - labor_rate_id + - loss_cat + - loss_desc + - loss_type + - ownr_addr1 + - ownr_addr2 + - ownr_city + - ownr_co_nm + - ownr_ctry + - ownr_ea + - ownr_fax + - ownr_faxx + - ownr_fn + - ownr_ln + - ownr_ph1 + - ownr_ph1x + - ownr_ph2 + - ownr_ph2x + - ownr_st + - ownr_title + - ownr_zip + - pay_chknm + - payee_nms + - pay_type + - policy_no + - regie_number + - ro_number + - service_car + - theft_ind + - tlos_ind + - actual_completion + - actual_delivery + - actual_in + - created_at + - date_closed + - date_estimated + - date_exported + - date_invoiced + - date_open + - date_scheduled + - scheduled_completion + - scheduled_delivery + - scheduled_in + - updated_at + - id + - ownerid + - shopid + - statusid + - vehicleid + filter: + bodyshop: + associations: + _and: + - user: + authid: + _eq: X-Hasura-User-Id + - active: + _eq: true + localPresets: + - key: "" + value: "" + set: {} + role: user + table: + name: jobs + schema: public + type: create_update_permission diff --git a/hasura/migrations/1580169626079_update_permission_user_public_table_jobs/up.yaml b/hasura/migrations/1580169626079_update_permission_user_public_table_jobs/up.yaml new file mode 100644 index 000000000..0d44decf8 --- /dev/null +++ b/hasura/migrations/1580169626079_update_permission_user_public_table_jobs/up.yaml @@ -0,0 +1,214 @@ +- args: + role: user + table: + name: jobs + schema: public + type: drop_update_permission +- args: + permission: + columns: + - converted + - inproduction + - special_coverage_policy + - asgn_date + - invoice_date + - loss_date + - pay_date + - est_number + - area_of_damage + - claim_total + - clm_total + - ded_amt + - deductible + - federal_tax_rate + - local_tax_rate + - owner_owing + - pay_amt + - rate_atp + - rate_la1 + - rate_la2 + - rate_la3 + - rate_la4 + - rate_lab + - rate_lad + - rate_lae + - rate_laf + - rate_lag + - rate_lam + - rate_lar + - rate_las + - rate_lau + - rate_ma2s + - rate_ma2t + - rate_ma3s + - rate_mabl + - rate_macs + - rate_mahw + - rate_mapa + - rate_mash + - rate_matd + - state_tax_rate + - agt_addr1 + - agt_addr2 + - agt_city + - agt_co_id + - agt_co_nm + - agt_ct_fn + - agt_ct_ln + - agt_ct_ph + - agt_ct_phx + - agt_ctry + - agt_ea + - agt_fax + - agt_faxx + - agt_lic_no + - agt_ph1 + - agt_ph1x + - agt_ph2 + - agt_ph2x + - agt_st + - agt_zip + - asgn_no + - asgn_type + - cat_no + - ciecaid + - clm_addr1 + - clm_addr2 + - clm_city + - clm_ct_fn + - clm_ct_ln + - clm_ct_ph + - clm_ct_phx + - clm_ctry + - clm_ea + - clm_fax + - clm_faxx + - clm_no + - clm_ofc_id + - clm_ofc_nm + - clm_ph1 + - clm_ph1x + - clm_ph2 + - clm_ph2x + - clm_st + - clm_title + - clm_zip + - cust_pr + - ded_status + - est_addr1 + - est_addr2 + - est_city + - est_co_nm + - est_ct_fn + - est_ct_ln + - est_ctry + - est_ea + - est_ph1 + - est_st + - est_zip + - ins_addr1 + - ins_addr2 + - ins_city + - ins_co_id + - ins_co_nm + - ins_ct_fn + - ins_ct_ln + - ins_ct_ph + - ins_ct_phx + - ins_ctry + - insd_addr1 + - insd_addr2 + - insd_city + - insd_co_nm + - insd_ctry + - insd_ea + - insd_fax + - insd_faxx + - insd_fn + - insd_ln + - insd_ph1 + - insd_ph1x + - insd_ph2 + - insd_ph2x + - insd_st + - insd_title + - insd_zip + - ins_ea + - ins_fax + - ins_faxx + - ins_memo + - ins_ph1 + - ins_ph1x + - ins_ph2 + - ins_ph2x + - ins_st + - ins_title + - ins_zip + - labor_rate_desc + - labor_rate_id + - loss_cat + - loss_desc + - loss_type + - ownr_addr1 + - ownr_addr2 + - ownr_city + - ownr_co_nm + - ownr_ctry + - ownr_ea + - ownr_fax + - ownr_faxx + - ownr_fn + - ownr_ln + - ownr_ph1 + - ownr_ph1x + - ownr_ph2 + - ownr_ph2x + - ownr_st + - ownr_title + - ownr_zip + - pay_chknm + - payee_nms + - pay_type + - policy_no + - regie_number + - ro_number + - service_car + - theft_ind + - tlos_ind + - actual_completion + - actual_delivery + - actual_in + - created_at + - date_closed + - date_estimated + - date_exported + - date_invoiced + - date_open + - date_scheduled + - scheduled_completion + - scheduled_delivery + - scheduled_in + - updated_at + - id + - ownerid + - shopid + - statusid + - vehicleid + filter: + bodyshop: + associations: + _and: + - user: + authid: + _eq: X-Hasura-User-Id + - active: + _eq: true + localPresets: + - key: "" + value: "" + set: {} + role: user + table: + name: jobs + schema: public + type: create_update_permission From 265bc7d486369cb8db69d66c46864d02b50ef3d0 Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Mon, 27 Jan 2020 18:18:55 -0800 Subject: [PATCH 5/9] Refactored some of the job detail form to use context. Created claims component. --- bodyshop_translations.babel | 52 ++++++++++++ .../jobs-detail-claims.component.jsx | 44 ++++++++++ .../jobs-detail-header.component.jsx | 14 +--- .../jobs-detail.page.component.jsx | 82 ++++++++----------- .../jobs-detail.page.container.jsx | 37 ++++----- .../jobs-detail/jobs-detail.page.context.jsx | 3 + client/src/translations/en_us/common.json | 6 ++ client/src/translations/es/common.json | 6 ++ client/src/translations/fr/common.json | 6 ++ 9 files changed, 169 insertions(+), 81 deletions(-) create mode 100644 client/src/components/jobs-detail-claims/jobs-detail-claims.component.jsx create mode 100644 client/src/pages/jobs-detail/jobs-detail.page.context.jsx diff --git a/bodyshop_translations.babel b/bodyshop_translations.babel index ee4afc6cf..6af655c07 100644 --- a/bodyshop_translations.babel +++ b/bodyshop_translations.babel @@ -188,6 +188,32 @@ general + + actions + + + reset + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + labels @@ -387,6 +413,32 @@ + + messages + + + unsavedchanges + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + diff --git a/client/src/components/jobs-detail-claims/jobs-detail-claims.component.jsx b/client/src/components/jobs-detail-claims/jobs-detail-claims.component.jsx new file mode 100644 index 000000000..3aec766b1 --- /dev/null +++ b/client/src/components/jobs-detail-claims/jobs-detail-claims.component.jsx @@ -0,0 +1,44 @@ +import React, { useContext } from "react"; +import { Form, Input } from "antd"; +import FormItemPhone from "../form-items-formatted/phone-form-item.component"; +import JobDetailFormContext from "../../pages/jobs-detail/jobs-detail.page.context"; + +export default function JobsDetailClaims({ job }) { + const form = useContext(JobDetailFormContext); + const { getFieldDecorator, isFieldTouched } = form; + + return ( +
+
+ + {isFieldTouched("est_ct_ln") ? "Yes" : "No"} + {getFieldDecorator("est_ct_ln", { + initialValue: job.est_ct_ln + })()} + + + {getFieldDecorator("est_ct_fn", { + initialValue: job.est_ct_fn + })()} + + + {getFieldDecorator("est_ph1", { + initialValue: job.est_ph1 + })()} + + + {getFieldDecorator("est_ea", { + initialValue: job.est_ea, + + rules: [ + { + type: "email", + message: "This is not a valid email address." + } + ] + })()} + +
+
+ ); +} diff --git a/client/src/components/jobs-detail-header/jobs-detail-header.component.jsx b/client/src/components/jobs-detail-header/jobs-detail-header.component.jsx index 82d420c6c..4d8148ac6 100644 --- a/client/src/components/jobs-detail-header/jobs-detail-header.component.jsx +++ b/client/src/components/jobs-detail-header/jobs-detail-header.component.jsx @@ -1,14 +1,4 @@ -import { - Avatar, - Button, - Descriptions, - notification, - PageHeader, - Tag, - Input, - Form, - Checkbox -} from "antd"; +import { Avatar, Button, Checkbox, Descriptions, notification, PageHeader, Tag } from "antd"; import React from "react"; import { useTranslation } from "react-i18next"; import Moment from "react-moment"; @@ -95,7 +85,7 @@ export default function JobsDetailHeader({ - $NO BINDING YET + ##NO BINDING YET## diff --git a/client/src/pages/jobs-detail/jobs-detail.page.component.jsx b/client/src/pages/jobs-detail/jobs-detail.page.component.jsx index 7e3afddd3..9faa7bdcc 100644 --- a/client/src/pages/jobs-detail/jobs-detail.page.component.jsx +++ b/client/src/pages/jobs-detail/jobs-detail.page.component.jsx @@ -1,24 +1,31 @@ -import { Form, Icon, Tabs } from "antd"; -import React from "react"; +import { Form, Icon, Tabs, Alert, Button } from "antd"; +import React, { useContext } from "react"; import { useTranslation } from "react-i18next"; -import { FaRegStickyNote } from "react-icons/fa"; +import { + FaInfo, + FaRegStickyNote, + FaShieldAlt, + FaHardHat +} from "react-icons/fa"; import JobLinesContainer from "../../components/job-lines/job-lines.container.component"; +import JobsDetailClaims from "../../components/jobs-detail-claims/jobs-detail-claims.component"; import JobsDetailHeader from "../../components/jobs-detail-header/jobs-detail-header.component"; import JobsDocumentsContainer from "../../components/jobs-documents/jobs-documents.container"; import JobNotesContainer from "../../components/jobs-notes/jobs-notes.container"; import JobsRatesContainer from "../../components/jobs-rates/jobs-rates.container"; +import JobDetailFormContext from "./jobs-detail.page.context"; export default function JobsDetailPage({ job, mutationUpdateJob, mutationConvertJob, handleSubmit, - handleChange, - getFieldDecorator, refetch }) { const { t } = useTranslation(); + const { isFieldsTouched, resetFields } = useContext(JobDetailFormContext); + const formItemLayout = { labelCol: { xs: { span: 12 }, @@ -30,69 +37,44 @@ export default function JobsDetailPage({ } }; - // const TEMP = ( - //
- // {" "} - // - // {getFieldDecorator("est_ct_ln", { - // initialValue: jobContext.est_ct_ln - // })()} - // - // - // {getFieldDecorator("est_ct_fn", { - // initialValue: jobContext.est_ct_fn - // })()} - // - // - // {getFieldDecorator("est_ph1", { - // initialValue: jobContext.est_ph1 - // })( - // - // )} - // - // - // {getFieldDecorator("est_ea", { - // initialValue: jobContext.est_ea, - // rules: [ - // { - // type: "email", - // message: "This is not a valid email address." - // } - // ] - // })()} - // - //
- // ); - return (
+ {isFieldsTouched() ? ( + + {t("general.messages.unsavedchanges")} + + + } + closable + /> + ) : null} + - + {t("menus.jobsdetail.claimdetail")} } key='claimdetail'> - Claim detail + - + {t("menus.jobsdetail.insurance")} } @@ -125,7 +107,7 @@ export default function JobsDetailPage({ - + {t("menus.jobsdetail.partssublet")} } @@ -136,7 +118,7 @@ export default function JobsDetailPage({ - + {t("menus.jobsdetail.labor")} } @@ -147,7 +129,7 @@ export default function JobsDetailPage({ - + {t("menus.jobsdetail.dates")} } diff --git a/client/src/pages/jobs-detail/jobs-detail.page.container.jsx b/client/src/pages/jobs-detail/jobs-detail.page.container.jsx index 3d6691f66..7003ea7f0 100644 --- a/client/src/pages/jobs-detail/jobs-detail.page.container.jsx +++ b/client/src/pages/jobs-detail/jobs-detail.page.container.jsx @@ -5,11 +5,12 @@ import { useTranslation } from "react-i18next"; import AlertComponent from "../../components/alert/alert.component"; import SpinComponent from "../../components/loading-spinner/loading-spinner.component"; import { + CONVERT_JOB_TO_RO, GET_JOB_BY_PK, - UPDATE_JOB, - CONVERT_JOB_TO_RO + UPDATE_JOB } from "../../graphql/jobs.queries"; import JobsDetailPage from "./jobs-detail.page.component"; +import JobDetailFormContext from "./jobs-detail.page.context"; function JobsDetailPageContainer({ match, form }) { const { jobId } = match.params; @@ -44,32 +45,30 @@ function JobsDetailPageContainer({ match, form }) { if (!err) { mutationUpdateJob({ variables: { jobId: data.jobs_by_pk.id, job: values } - }).then(r => + }).then(r => { notification["success"]({ message: t("jobs.successes.savetitle") - }) - ); + }); + //TODO: Better way to reset the field decorators? + refetch().then(r => form.resetFields()); + }); } }); }; - const handleChange = event => { - //const { name, value } = event.target ? event.target : event; - //setJobContext({ ...jobContext, [name]: value }); - }; - if (loading) return ; if (error) return ; return data.jobs_by_pk ? ( - + + + ) : ( ); diff --git a/client/src/pages/jobs-detail/jobs-detail.page.context.jsx b/client/src/pages/jobs-detail/jobs-detail.page.context.jsx new file mode 100644 index 000000000..60056c8de --- /dev/null +++ b/client/src/pages/jobs-detail/jobs-detail.page.context.jsx @@ -0,0 +1,3 @@ +import React from "react"; +const JobDetailFormContext = React.createContext(null); +export default JobDetailFormContext; diff --git a/client/src/translations/en_us/common.json b/client/src/translations/en_us/common.json index 8584f8721..49b3b7c52 100644 --- a/client/src/translations/en_us/common.json +++ b/client/src/translations/en_us/common.json @@ -16,6 +16,9 @@ } }, "general": { + "actions": { + "reset": "Reset to original." + }, "labels": { "in": "In", "loading": "Loading...", @@ -28,6 +31,9 @@ "english": "English", "french": "French", "spanish": "Spanish" + }, + "messages": { + "unsavedchanges": "You have unsaved changes." } }, "jobs": { diff --git a/client/src/translations/es/common.json b/client/src/translations/es/common.json index 869653e41..365a7846c 100644 --- a/client/src/translations/es/common.json +++ b/client/src/translations/es/common.json @@ -16,6 +16,9 @@ } }, "general": { + "actions": { + "reset": "Restablecer a original." + }, "labels": { "in": "en", "loading": "Cargando...", @@ -28,6 +31,9 @@ "english": "Inglés", "french": "francés", "spanish": "español" + }, + "messages": { + "unsavedchanges": "Usted tiene cambios no guardados." } }, "jobs": { diff --git a/client/src/translations/fr/common.json b/client/src/translations/fr/common.json index f067a76a3..222e5ce94 100644 --- a/client/src/translations/fr/common.json +++ b/client/src/translations/fr/common.json @@ -16,6 +16,9 @@ } }, "general": { + "actions": { + "reset": "Rétablir l'original." + }, "labels": { "in": "dans", "loading": "Chargement...", @@ -28,6 +31,9 @@ "english": "Anglais", "french": "Francais", "spanish": "Espanol" + }, + "messages": { + "unsavedchanges": "Vous avez des changements non enregistrés." } }, "jobs": { From e8ea15a1a5d61dbb97981684ff5b7a19b9078e7e Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Mon, 27 Jan 2020 19:08:43 -0800 Subject: [PATCH 6/9] Added fields to claim data page. --- bodyshop_translations.babel | 147 ++++++++++++ .../jobs-detail-claims.component.jsx | 103 +++++--- client/src/graphql/jobs.queries.js | 7 + .../jobs-detail.page.container.jsx | 20 +- client/src/translations/en_us/common.json | 7 + client/src/translations/es/common.json | 7 + client/src/translations/fr/common.json | 7 + .../down.yaml | 3 + .../up.yaml | 3 + .../down.yaml | 214 +++++++++++++++++ .../up.yaml | 215 +++++++++++++++++ .../down.yaml | 212 +++++++++++++++++ .../up.yaml | 213 +++++++++++++++++ .../down.yaml | 214 +++++++++++++++++ .../up.yaml | 215 +++++++++++++++++ .../down.yaml | 3 + .../up.yaml | 3 + .../down.yaml | 3 + .../up.yaml | 3 + .../down.yaml | 3 + .../up.yaml | 3 + .../down.yaml | 3 + .../up.yaml | 3 + .../down.yaml | 215 +++++++++++++++++ .../up.yaml | 219 +++++++++++++++++ .../down.yaml | 213 +++++++++++++++++ .../up.yaml | 217 +++++++++++++++++ .../down.yaml | 215 +++++++++++++++++ .../up.yaml | 219 +++++++++++++++++ .../down.yaml | 3 + .../up.yaml | 3 + .../down.yaml | 219 +++++++++++++++++ .../up.yaml | 220 ++++++++++++++++++ .../down.yaml | 217 +++++++++++++++++ .../up.yaml | 218 +++++++++++++++++ .../down.yaml | 219 +++++++++++++++++ .../up.yaml | 220 ++++++++++++++++++ 37 files changed, 4184 insertions(+), 44 deletions(-) create mode 100644 hasura/migrations/1580178912137_alter_table_public_jobs_add_column_csr/down.yaml create mode 100644 hasura/migrations/1580178912137_alter_table_public_jobs_add_column_csr/up.yaml create mode 100644 hasura/migrations/1580178922902_update_permission_user_public_table_jobs/down.yaml create mode 100644 hasura/migrations/1580178922902_update_permission_user_public_table_jobs/up.yaml create mode 100644 hasura/migrations/1580178929598_update_permission_user_public_table_jobs/down.yaml create mode 100644 hasura/migrations/1580178929598_update_permission_user_public_table_jobs/up.yaml create mode 100644 hasura/migrations/1580178936376_update_permission_user_public_table_jobs/down.yaml create mode 100644 hasura/migrations/1580178936376_update_permission_user_public_table_jobs/up.yaml create mode 100644 hasura/migrations/1580179243363_alter_table_public_jobs_add_column_po_number/down.yaml create mode 100644 hasura/migrations/1580179243363_alter_table_public_jobs_add_column_po_number/up.yaml create mode 100644 hasura/migrations/1580179295432_alter_table_public_jobs_add_column_unit_number/down.yaml create mode 100644 hasura/migrations/1580179295432_alter_table_public_jobs_add_column_unit_number/up.yaml create mode 100644 hasura/migrations/1580179755901_alter_table_public_jobs_add_column_kmin/down.yaml create mode 100644 hasura/migrations/1580179755901_alter_table_public_jobs_add_column_kmin/up.yaml create mode 100644 hasura/migrations/1580179762327_alter_table_public_jobs_add_column_kmout/down.yaml create mode 100644 hasura/migrations/1580179762327_alter_table_public_jobs_add_column_kmout/up.yaml create mode 100644 hasura/migrations/1580180067779_update_permission_user_public_table_jobs/down.yaml create mode 100644 hasura/migrations/1580180067779_update_permission_user_public_table_jobs/up.yaml create mode 100644 hasura/migrations/1580180073360_update_permission_user_public_table_jobs/down.yaml create mode 100644 hasura/migrations/1580180073360_update_permission_user_public_table_jobs/up.yaml create mode 100644 hasura/migrations/1580180078983_update_permission_user_public_table_jobs/down.yaml create mode 100644 hasura/migrations/1580180078983_update_permission_user_public_table_jobs/up.yaml create mode 100644 hasura/migrations/1580180567863_alter_table_public_jobs_add_column_referral_source/down.yaml create mode 100644 hasura/migrations/1580180567863_alter_table_public_jobs_add_column_referral_source/up.yaml create mode 100644 hasura/migrations/1580180688551_update_permission_user_public_table_jobs/down.yaml create mode 100644 hasura/migrations/1580180688551_update_permission_user_public_table_jobs/up.yaml create mode 100644 hasura/migrations/1580180694341_update_permission_user_public_table_jobs/down.yaml create mode 100644 hasura/migrations/1580180694341_update_permission_user_public_table_jobs/up.yaml create mode 100644 hasura/migrations/1580180700206_update_permission_user_public_table_jobs/down.yaml create mode 100644 hasura/migrations/1580180700206_update_permission_user_public_table_jobs/up.yaml diff --git a/bodyshop_translations.babel b/bodyshop_translations.babel index 6af655c07..c50ae7d4a 100644 --- a/bodyshop_translations.babel +++ b/bodyshop_translations.babel @@ -856,6 +856,27 @@ + + csr + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + customerowing false @@ -1045,6 +1066,69 @@ + + kmin + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + kmout + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + loss_desc + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + owner false @@ -1150,6 +1234,48 @@ + + ponumber + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + referralsource + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + repairtotal false @@ -1318,6 +1444,27 @@ + + unitnumber + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + vehicle false diff --git a/client/src/components/jobs-detail-claims/jobs-detail-claims.component.jsx b/client/src/components/jobs-detail-claims/jobs-detail-claims.component.jsx index 3aec766b1..5d607eee3 100644 --- a/client/src/components/jobs-detail-claims/jobs-detail-claims.component.jsx +++ b/client/src/components/jobs-detail-claims/jobs-detail-claims.component.jsx @@ -1,44 +1,81 @@ +import { Form, Input, Switch } from "antd"; import React, { useContext } from "react"; -import { Form, Input } from "antd"; -import FormItemPhone from "../form-items-formatted/phone-form-item.component"; +import { useTranslation } from "react-i18next"; import JobDetailFormContext from "../../pages/jobs-detail/jobs-detail.page.context"; +import FormItemPhone from "../form-items-formatted/phone-form-item.component"; export default function JobsDetailClaims({ job }) { const form = useContext(JobDetailFormContext); - const { getFieldDecorator, isFieldTouched } = form; + const { getFieldDecorator } = form; + const { t } = useTranslation(); return (
-
- - {isFieldTouched("est_ct_ln") ? "Yes" : "No"} - {getFieldDecorator("est_ct_ln", { - initialValue: job.est_ct_ln - })()} - - - {getFieldDecorator("est_ct_fn", { - initialValue: job.est_ct_fn - })()} - - - {getFieldDecorator("est_ph1", { - initialValue: job.est_ph1 - })()} - - - {getFieldDecorator("est_ea", { - initialValue: job.est_ea, - - rules: [ - { - type: "email", - message: "This is not a valid email address." - } - ] - })()} - -
+ + {getFieldDecorator("csr", { + initialValue: job.csr + })()} + + + {getFieldDecorator("loss_desc", { + initialValue: job.loss_desc + })()} + + TODO: How to handle different taxes and marking them as exempt? + { + // + // {getFieldDecorator("exempt", { + // initialValue: job.exempt + // })()} + // + } + + {getFieldDecorator("po_number", { + initialValue: job.po_number + })()} + + + {getFieldDecorator("unit_number", { + initialValue: job.unit_number + })()} + + + {getFieldDecorator("special_coverage_policy", { + initialValue: job.special_coverage_policy, + valuePropName: "checked" + })()} + + + {getFieldDecorator("kmin", { + initialValue: job.kmin + })()} + + + {getFieldDecorator("kmout", { + initialValue: job.kmout + })()} + + + {getFieldDecorator("referral_source", { + initialValue: job.referral_source + })()} + + + {getFieldDecorator("est_ph1", { + initialValue: job.est_ph1 + })()} + + + {getFieldDecorator("est_ea", { + initialValue: job.est_ea, + rules: [ + { + type: "email", + message: "This is not a valid email address." + } + ] + })()} +
); } diff --git a/client/src/graphql/jobs.queries.js b/client/src/graphql/jobs.queries.js index 33f56e24b..93c36d10c 100644 --- a/client/src/graphql/jobs.queries.js +++ b/client/src/graphql/jobs.queries.js @@ -122,6 +122,13 @@ export const GET_JOB_BY_PK = gql` scheduled_completion scheduled_in service_car + csr + loss_desc + kmin + kmout + referral_source + unit_number + po_number special_coverage_policy scheduled_delivery job_status { diff --git a/client/src/pages/jobs-detail/jobs-detail.page.container.jsx b/client/src/pages/jobs-detail/jobs-detail.page.container.jsx index 7003ea7f0..e0c49840b 100644 --- a/client/src/pages/jobs-detail/jobs-detail.page.container.jsx +++ b/client/src/pages/jobs-detail/jobs-detail.page.container.jsx @@ -4,11 +4,7 @@ import { useMutation, useQuery } from "react-apollo"; import { useTranslation } from "react-i18next"; import AlertComponent from "../../components/alert/alert.component"; import SpinComponent from "../../components/loading-spinner/loading-spinner.component"; -import { - CONVERT_JOB_TO_RO, - GET_JOB_BY_PK, - UPDATE_JOB -} from "../../graphql/jobs.queries"; +import { CONVERT_JOB_TO_RO, GET_JOB_BY_PK, UPDATE_JOB } from "../../graphql/jobs.queries"; import JobsDetailPage from "./jobs-detail.page.component"; import JobDetailFormContext from "./jobs-detail.page.context"; @@ -24,12 +20,13 @@ function JobsDetailPageContainer({ match, form }) { const [mutationConvertJob] = useMutation(CONVERT_JOB_TO_RO); useEffect(() => { - document.title = - loading && !error - ? "..." - : t("titles.jobsdetail", { - ro_number: data.jobs_by_pk.ro_number - }); + document.title = loading + ? "..." + : error + ? t("titles.app") + : t("titles.jobsdetail", { + ro_number: data.jobs_by_pk.ro_number + }); }, [loading, data, t, error]); const handleSubmit = e => { @@ -58,6 +55,7 @@ function JobsDetailPageContainer({ match, form }) { if (loading) return ; if (error) return ; + return data.jobs_by_pk ? ( Date: Mon, 27 Jan 2020 19:32:48 -0800 Subject: [PATCH 7/9] Fields for insurance tab on claim detail. --- bodyshop_translations.babel | 231 ++++++++++++++++++ .../jobs-detail-insurance.component.jsx | 101 ++++++++ client/src/graphql/jobs.queries.js | 59 +++-- .../jobs-detail.page.component.jsx | 3 +- client/src/translations/en_us/common.json | 11 + client/src/translations/es/common.json | 11 + client/src/translations/fr/common.json | 11 + 7 files changed, 405 insertions(+), 22 deletions(-) create mode 100644 client/src/components/jobs-detail-insurance/jobs-detail-insurance.component.jsx diff --git a/bodyshop_translations.babel b/bodyshop_translations.babel index c50ae7d4a..8b3adf828 100644 --- a/bodyshop_translations.babel +++ b/bodyshop_translations.babel @@ -1066,6 +1066,174 @@
+ + ins_addr1 + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + ins_city + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + ins_co_id + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + ins_co_nm + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + ins_ct_fn + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + ins_ct_ln + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + ins_ea + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + ins_ph1 + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + kmin false @@ -1108,6 +1276,27 @@ + + loss_date + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + loss_desc false @@ -1234,6 +1423,27 @@ + + policy_no + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + ponumber false @@ -1276,6 +1486,27 @@ + + regie_number + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + repairtotal false diff --git a/client/src/components/jobs-detail-insurance/jobs-detail-insurance.component.jsx b/client/src/components/jobs-detail-insurance/jobs-detail-insurance.component.jsx new file mode 100644 index 000000000..15d39bad5 --- /dev/null +++ b/client/src/components/jobs-detail-insurance/jobs-detail-insurance.component.jsx @@ -0,0 +1,101 @@ +import { Form, Input, Button, Icon } from "antd"; +import React, { useContext } from "react"; +import { useTranslation } from "react-i18next"; +import JobDetailFormContext from "../../pages/jobs-detail/jobs-detail.page.context"; +import FormItemPhone from "../form-items-formatted/phone-form-item.component"; + +export default function JobsDetailInsurance({ job }) { + const form = useContext(JobDetailFormContext); + const { getFieldDecorator } = form; + const { t } = useTranslation(); + + return ( +
+ + {getFieldDecorator("ins_co_id", { + initialValue: job.ins_co_id + })()} + + + {getFieldDecorator("policy_no", { + initialValue: job.policy_no + })()} + + + {getFieldDecorator("clm_no", { + initialValue: job.clm_no + })()} + + + {getFieldDecorator("regie_number", { + initialValue: job.regie_number + })()} + + TODO: missing KOL field??? + + {getFieldDecorator("loss_date", { + initialValue: job.loss_date + })()} + + DAMAGE {JSON.stringify(job.area_of_damage)} + CAA # seems not correct based on field mapping Class seems not correct + based on field mapping + + {getFieldDecorator("ins_co_nm", { + initialValue: job.ins_co_nm + })()} + + + {getFieldDecorator("ins_addr1", { + initialValue: job.ins_addr1 + })()} + + + {getFieldDecorator("ins_city", { + initialValue: job.ins_city + })()} + + + {getFieldDecorator("ins_ct_ln", { + initialValue: job.ins_ct_ln + })()} + + + {getFieldDecorator("ins_ct_fn", { + initialValue: job.ins_ct_fn + })()} + + + {getFieldDecorator("ins_ph1", { + initialValue: job.ins_ph1 + })()} + + + {getFieldDecorator("ins_ea", { + initialValue: job.ins_ea, + rules: [ + { + type: "email", + message: "This is not a valid email address." + } + ] + })()} + + + {getFieldDecorator("est_ea", { + initialValue: job.est_ea, + rules: [ + { + type: "email", + message: "This is not a valid email address." + } + ] + })()} + + + +
+ ); +} diff --git a/client/src/graphql/jobs.queries.js b/client/src/graphql/jobs.queries.js index 93c36d10c..2024332b7 100644 --- a/client/src/graphql/jobs.queries.js +++ b/client/src/graphql/jobs.queries.js @@ -98,12 +98,46 @@ export const SUBSCRIPTION_JOBS_IN_PRODUCTION = gql` export const GET_JOB_BY_PK = gql` query GET_JOB_BY_PK($id: uuid!) { jobs_by_pk(id: $id) { + service_car + csr + loss_desc + kmin + kmout + referral_source + unit_number + po_number + special_coverage_policy + scheduled_delivery converted + est_number + ro_number + vehicle { + id + plate_no + v_vin + v_model_yr + v_model_desc + v_make_desc + v_color + } +ins_co_id +policy_no +loss_date +area_of_damage +ins_co_nm +ins_addr1 +ins_city +ins_ct_ln +ins_ct_fn +ins_ea +ins_ph1 + + actual_completion actual_delivery actual_in created_at - est_number + id local_tax_rate owner { @@ -118,19 +152,10 @@ export const GET_JOB_BY_PK = gql` est_ct_fn est_ct_ln regie_number - ro_number + scheduled_completion scheduled_in - service_car - csr - loss_desc - kmin - kmout - referral_source - unit_number - po_number - special_coverage_policy - scheduled_delivery + job_status { id name @@ -138,15 +163,7 @@ export const GET_JOB_BY_PK = gql` updated_at claim_total deductible - vehicle { - id - plate_no - v_vin - v_model_yr - v_model_desc - v_make_desc - v_color - } + } } `; diff --git a/client/src/pages/jobs-detail/jobs-detail.page.component.jsx b/client/src/pages/jobs-detail/jobs-detail.page.component.jsx index 9faa7bdcc..512f5b130 100644 --- a/client/src/pages/jobs-detail/jobs-detail.page.component.jsx +++ b/client/src/pages/jobs-detail/jobs-detail.page.component.jsx @@ -14,6 +14,7 @@ import JobsDocumentsContainer from "../../components/jobs-documents/jobs-documen import JobNotesContainer from "../../components/jobs-notes/jobs-notes.container"; import JobsRatesContainer from "../../components/jobs-rates/jobs-rates.container"; import JobDetailFormContext from "./jobs-detail.page.context"; +import JobsDetailInsurance from "../../components/jobs-detail-insurance/jobs-detail-insurance.component"; export default function JobsDetailPage({ job, @@ -79,7 +80,7 @@ export default function JobsDetailPage({ } key='insurance'> - Insurance +
Date: Tue, 28 Jan 2020 09:33:47 -0800 Subject: [PATCH 8/9] Finished job detail insurance component --- bodyshop_translations.babel | 233 +++++++++++++++++- .../email-form-item.component.jsx | 16 ++ .../jobs-detail-claims.component.jsx | 17 -- .../jobs-detail-insurance.component.jsx | 65 ++++- client/src/graphql/jobs.queries.js | 58 ++--- client/src/translations/en_us/common.json | 11 + client/src/translations/es/common.json | 11 + client/src/translations/fr/common.json | 11 + .../down.yaml | 3 + .../up.yaml | 3 + .../down.yaml | 3 + .../up.yaml | 3 + .../down.yaml | 3 + .../up.yaml | 3 + .../down.yaml | 3 + .../up.yaml | 3 + .../down.yaml | 220 +++++++++++++++++ .../up.yaml | 224 +++++++++++++++++ .../down.yaml | 218 ++++++++++++++++ .../up.yaml | 222 +++++++++++++++++ .../down.yaml | 220 +++++++++++++++++ .../up.yaml | 224 +++++++++++++++++ 22 files changed, 1707 insertions(+), 67 deletions(-) create mode 100644 client/src/components/form-items-formatted/email-form-item.component.jsx create mode 100644 hasura/migrations/1580232207896_alter_table_public_jobs_add_column_selling_dealer/down.yaml create mode 100644 hasura/migrations/1580232207896_alter_table_public_jobs_add_column_selling_dealer/up.yaml create mode 100644 hasura/migrations/1580232216402_alter_table_public_jobs_add_column_servicing_dealer/down.yaml create mode 100644 hasura/migrations/1580232216402_alter_table_public_jobs_add_column_servicing_dealer/up.yaml create mode 100644 hasura/migrations/1580232321960_alter_table_public_jobs_add_column_servicing_dealer_contact/down.yaml create mode 100644 hasura/migrations/1580232321960_alter_table_public_jobs_add_column_servicing_dealer_contact/up.yaml create mode 100644 hasura/migrations/1580232395019_alter_table_public_jobs_add_column_selling_dealer_contact/down.yaml create mode 100644 hasura/migrations/1580232395019_alter_table_public_jobs_add_column_selling_dealer_contact/up.yaml create mode 100644 hasura/migrations/1580232453942_update_permission_user_public_table_jobs/down.yaml create mode 100644 hasura/migrations/1580232453942_update_permission_user_public_table_jobs/up.yaml create mode 100644 hasura/migrations/1580232464001_update_permission_user_public_table_jobs/down.yaml create mode 100644 hasura/migrations/1580232464001_update_permission_user_public_table_jobs/up.yaml create mode 100644 hasura/migrations/1580232469614_update_permission_user_public_table_jobs/down.yaml create mode 100644 hasura/migrations/1580232469614_update_permission_user_public_table_jobs/up.yaml diff --git a/bodyshop_translations.babel b/bodyshop_translations.babel index 8b3adf828..f264b41e4 100644 --- a/bodyshop_translations.babel +++ b/bodyshop_translations.babel @@ -1,4 +1,4 @@ - +