From 42a1d3a9a72e1d8815c1a9ee5ac05d12d53d24de Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Thu, 15 Apr 2021 14:09:22 -0700 Subject: [PATCH] WIP CA_BC_ETFTable decoder --- .../stripe_backup_code.txt | 0 bodyshop_translations.babel | 21 ++++ .../ca-bc-etf-table-modal.container.jsx | 103 ++++++++++++++++++ .../ca-bc-etf-table.modal.component.jsx | 32 ++++++ .../payment-list-paginated.component.jsx | 26 ++++- client/src/graphql/jobs.queries.js | 13 +++ client/src/redux/modals/modals.reducer.js | 1 + client/src/redux/modals/modals.selectors.js | 5 + client/src/translations/en_us/common.json | 1 + client/src/translations/es/common.json | 1 + client/src/translations/fr/common.json | 1 + 11 files changed, 199 insertions(+), 5 deletions(-) rename stripe_backup_code.txt => _reference/stripe_backup_code.txt (100%) create mode 100644 client/src/components/ca-bc-etf-table-modal/ca-bc-etf-table-modal.container.jsx create mode 100644 client/src/components/ca-bc-etf-table-modal/ca-bc-etf-table.modal.component.jsx diff --git a/stripe_backup_code.txt b/_reference/stripe_backup_code.txt similarity index 100% rename from stripe_backup_code.txt rename to _reference/stripe_backup_code.txt diff --git a/bodyshop_translations.babel b/bodyshop_translations.babel index 917e01a10..018208459 100644 --- a/bodyshop_translations.babel +++ b/bodyshop_translations.babel @@ -26454,6 +26454,27 @@ + + ca_bc_etf_table + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + customer false diff --git a/client/src/components/ca-bc-etf-table-modal/ca-bc-etf-table-modal.container.jsx b/client/src/components/ca-bc-etf-table-modal/ca-bc-etf-table-modal.container.jsx new file mode 100644 index 000000000..fb18791bf --- /dev/null +++ b/client/src/components/ca-bc-etf-table-modal/ca-bc-etf-table-modal.container.jsx @@ -0,0 +1,103 @@ +import { useLazyQuery } from "@apollo/client"; +import { Button, Form, Modal } from "antd"; +import React, { useEffect } from "react"; +import { useTranslation } from "react-i18next"; +import { connect } from "react-redux"; +import { createStructuredSelector } from "reselect"; +import { logImEXEvent } from "../../firebase/firebase.utils"; +import { FIND_JOBS_BY_CLAIM } from "../../graphql/jobs.queries"; +import { toggleModalVisible } from "../../redux/modals/modals.actions"; +import { selectCaBcEtfTableConvert } from "../../redux/modals/modals.selectors"; +import { selectBodyshop } from "../../redux/user/user.selectors"; +import CaBcEtfTableModalComponent from "./ca-bc-etf-table.modal.component"; + +const mapStateToProps = createStructuredSelector({ + bodyshop: selectBodyshop, + caBcEtfTableModal: selectCaBcEtfTableConvert, +}); + +const mapDispatchToProps = (dispatch) => ({ + toggleModalVisible: () => + dispatch(toggleModalVisible("ca_bc_eftTableConvert")), +}); + +export function ContractsFindModalContainer({ + caBcEtfTableModal, + toggleModalVisible, + + bodyshop, +}) { + const { t } = useTranslation(); + + const { visible } = caBcEtfTableModal; + + const [form] = Form.useForm(); + + // const [updateJobLines] = useMutation(UPDATE_JOB_LINE); + const [callSearch, { loading,// error, + data }] = useLazyQuery( + FIND_JOBS_BY_CLAIM + ); + + const handleFinish = async (values) => { + logImEXEvent("ca_bc_etf_table_parse"); + + const claimNumbers = []; + values.table.split("\n").forEach((row, idx, arr) => { + if (idx !== 0 && idx !== arr.length - 1) { + //Skip first row as it is header. Skip last row as it is totals. + const { 1: claim, 2: shortclaim } = row.split("\t"); + if (!claim || !shortclaim) return; + const trimmedShortClaim = shortclaim.trim(); + const trimmedClaim = claim.trim(); + + const beginning = trimmedShortClaim?.slice(0, -1); //Get everything except the last char + const last = trimmedShortClaim?.slice(-1); //Get the last digit + const alpha = trimmedClaim?.slice(-1); + + const fullClaim = `${beginning}-${last}-${alpha}`; + if (fullClaim.length > 5) claimNumbers.push(fullClaim); + } + }); + + console.log(`claimNumbers`, claimNumbers); + + callSearch({ variables: { claimNumbers } }); + }; + + useEffect(() => { + if (visible) { + form.resetFields(); + } + }, [visible, form]); + + return ( + toggleModalVisible()} + onOk={() => toggleModalVisible()} + destroyOnClose + forceRender + > +
+ + + {JSON.stringify(data)} + +
+ ); +} + +export default connect( + mapStateToProps, + mapDispatchToProps +)(ContractsFindModalContainer); diff --git a/client/src/components/ca-bc-etf-table-modal/ca-bc-etf-table.modal.component.jsx b/client/src/components/ca-bc-etf-table-modal/ca-bc-etf-table.modal.component.jsx new file mode 100644 index 000000000..cdee9403a --- /dev/null +++ b/client/src/components/ca-bc-etf-table-modal/ca-bc-etf-table.modal.component.jsx @@ -0,0 +1,32 @@ +import { Form, Input } from "antd"; +import React from "react"; +import { useTranslation } from "react-i18next"; +import { connect } from "react-redux"; +import { createStructuredSelector } from "reselect"; +import { selectBodyshop } from "../../redux/user/user.selectors"; + +const mapStateToProps = createStructuredSelector({ + bodyshop: selectBodyshop, +}); + +export default connect(mapStateToProps, null)(PartsReceiveModalComponent); + +export function PartsReceiveModalComponent({ bodyshop, form }) { + const { t } = useTranslation(); + + return ( +
+ + + +
+ ); +} diff --git a/client/src/components/payments-list-paginated/payment-list-paginated.component.jsx b/client/src/components/payments-list-paginated/payment-list-paginated.component.jsx index e058e6c42..a72ad41d3 100644 --- a/client/src/components/payments-list-paginated/payment-list-paginated.component.jsx +++ b/client/src/components/payments-list-paginated/payment-list-paginated.component.jsx @@ -3,31 +3,39 @@ import { Button, Card, Input, Space, Table, Typography } from "antd"; import queryString from "query-string"; import React, { useState } from "react"; import { useTranslation } from "react-i18next"; +import { connect } from "react-redux"; import { Link, useHistory, useLocation } from "react-router-dom"; +import { createStructuredSelector } from "reselect"; +import { setModalContext } from "../../redux/modals/modals.actions"; +import { selectBodyshop } from "../../redux/user/user.selectors"; import CurrencyFormatter from "../../utils/CurrencyFormatter"; import { DateFormatter, DateTimeFormatter } from "../../utils/DateFormatter"; import { alphaSort } from "../../utils/sorters"; - -import { connect } from "react-redux"; -import { createStructuredSelector } from "reselect"; -import { setModalContext } from "../../redux/modals/modals.actions"; -import PrintWrapperComponent from "../print-wrapper/print-wrapper.component"; import { TemplateList } from "../../utils/TemplateConstants"; +import CaBcEtfTableModalContainer from "../ca-bc-etf-table-modal/ca-bc-etf-table-modal.container"; +import PrintWrapperComponent from "../print-wrapper/print-wrapper.component"; const mapStateToProps = createStructuredSelector({ //currentUser: selectCurrentUser + bodyshop: selectBodyshop, }); const mapDispatchToProps = (dispatch) => ({ setPaymentContext: (context) => dispatch(setModalContext({ context: context, modal: "payment" })), + setCaBcEtfTableContext: (context) => + dispatch( + setModalContext({ context: context, modal: "ca_bc_eftTableConvert" }) + ), }); export function PaymentsListPaginated({ setPaymentContext, + setCaBcEtfTableContext, refetch, loading, payments, total, + bodyshop, }) { const search = queryString.parse(useLocation().search); const { page, sortcolumn, sortorder } = search; @@ -193,6 +201,14 @@ export function PaymentsListPaginated({ )} + {bodyshop.region_config === "CA_BC" && ( + <> + + + + )} diff --git a/client/src/graphql/jobs.queries.js b/client/src/graphql/jobs.queries.js index 6dc3dc82f..72f8f6c00 100644 --- a/client/src/graphql/jobs.queries.js +++ b/client/src/graphql/jobs.queries.js @@ -1524,3 +1524,16 @@ export const QUERY_JOB_CHECKLISTS = gql` } } `; + +export const FIND_JOBS_BY_CLAIM = gql` + query FIND_JOBS_BY_CLAIM($claimNumbers: [String!]!) { + jobs(where: { clm_no: { _in: $claimNumbers } }) { + id + ro_number + actual_completion + ownr_fn + ownr_ln + ownr_co_nm + } + } +`; diff --git a/client/src/redux/modals/modals.reducer.js b/client/src/redux/modals/modals.reducer.js index 9d38a2656..a2fde0c7e 100644 --- a/client/src/redux/modals/modals.reducer.js +++ b/client/src/redux/modals/modals.reducer.js @@ -23,6 +23,7 @@ const INITIAL_STATE = { reportCenter: { ...baseModal }, partsReceive: { ...baseModal }, contractFinder: { ...baseModal }, + ca_bc_eftTableConvert: { ...baseModal }, }; const modalsReducer = (state = INITIAL_STATE, action) => { diff --git a/client/src/redux/modals/modals.selectors.js b/client/src/redux/modals/modals.selectors.js index aa642d991..410aebd3b 100644 --- a/client/src/redux/modals/modals.selectors.js +++ b/client/src/redux/modals/modals.selectors.js @@ -70,3 +70,8 @@ export const selectContractFinder = createSelector( [selectModals], (modals) => modals.contractFinder ); + +export const selectCaBcEtfTableConvert = createSelector( + [selectModals], + (modals) => modals.ca_bc_eftTableConvert +); diff --git a/client/src/translations/en_us/common.json b/client/src/translations/en_us/common.json index 88ce2fc46..6de2ea967 100644 --- a/client/src/translations/en_us/common.json +++ b/client/src/translations/en_us/common.json @@ -1583,6 +1583,7 @@ }, "labels": { "balance": "Balance", + "ca_bc_etf_table": "ICBC ETF Table Converter", "customer": "Customer", "edit": "Edit Payment", "electronicpayment": "Use Electronic Payment Processing?", diff --git a/client/src/translations/es/common.json b/client/src/translations/es/common.json index 5d6396e15..47c8d00e0 100644 --- a/client/src/translations/es/common.json +++ b/client/src/translations/es/common.json @@ -1583,6 +1583,7 @@ }, "labels": { "balance": "", + "ca_bc_etf_table": "", "customer": "", "edit": "", "electronicpayment": "", diff --git a/client/src/translations/fr/common.json b/client/src/translations/fr/common.json index 8a391eb43..75fc6ce7c 100644 --- a/client/src/translations/fr/common.json +++ b/client/src/translations/fr/common.json @@ -1583,6 +1583,7 @@ }, "labels": { "balance": "", + "ca_bc_etf_table": "", "customer": "", "edit": "", "electronicpayment": "",