From 41782fe1204d14b375c2bd19440c5ec4d6dcdb16 Mon Sep 17 00:00:00 2001 From: Allan Carr Date: Fri, 10 Nov 2023 16:01:17 -0800 Subject: [PATCH 1/5] IO-2451 Non Converted Jobs in Lists These lists should be converted jobs only --- .../contract-jobs/contract-jobs.container.jsx | 3 ++- .../jobs-ready-list/jobs-ready-list.component.jsx | 5 +++-- .../tech-lookup-jobs-list.component.jsx | 1 + client/src/graphql/jobs.queries.js | 12 ++++++------ 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/client/src/components/contract-jobs/contract-jobs.container.jsx b/client/src/components/contract-jobs/contract-jobs.container.jsx index 7a7034f16..56bfe5a9d 100644 --- a/client/src/components/contract-jobs/contract-jobs.container.jsx +++ b/client/src/components/contract-jobs/contract-jobs.container.jsx @@ -2,10 +2,10 @@ import { useQuery } from "@apollo/client"; import React from "react"; import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; +import { QUERY_ALL_ACTIVE_JOBS } from "../../graphql/jobs.queries"; import { selectBodyshop } from "../../redux/user/user.selectors"; import AlertComponent from "../alert/alert.component"; import ContractJobsComponent from "./contract-jobs.component"; -import { QUERY_ALL_ACTIVE_JOBS } from "../../graphql/jobs.queries"; const mapStateToProps = createStructuredSelector({ //currentUser: selectCurrentUser @@ -15,6 +15,7 @@ export function ContractJobsContainer({ selectedJobState, bodyshop }) { const { loading, error, data } = useQuery(QUERY_ALL_ACTIVE_JOBS, { variables: { statuses: bodyshop.md_ro_statuses.active_statuses || ["Open"], + isConverted: true, }, fetchPolicy: "network-only", nextFetchPolicy: "network-only", diff --git a/client/src/components/jobs-ready-list/jobs-ready-list.component.jsx b/client/src/components/jobs-ready-list/jobs-ready-list.component.jsx index e3ce7a3cf..678c5e228 100644 --- a/client/src/components/jobs-ready-list/jobs-ready-list.component.jsx +++ b/client/src/components/jobs-ready-list/jobs-ready-list.component.jsx @@ -1,8 +1,8 @@ import { + BranchesOutlined, ExclamationCircleFilled, PauseCircleOutlined, SyncOutlined, - BranchesOutlined, } from "@ant-design/icons"; import { useQuery } from "@apollo/client"; import { Button, Card, Grid, Input, Space, Table, Tooltip } from "antd"; @@ -14,8 +14,8 @@ import { Link, useHistory, useLocation } from "react-router-dom"; import { createStructuredSelector } from "reselect"; import { QUERY_ALL_ACTIVE_JOBS } from "../../graphql/jobs.queries"; import { selectBodyshop } from "../../redux/user/user.selectors"; -import { onlyUnique } from "../../utils/arrayHelper"; import CurrencyFormatter from "../../utils/CurrencyFormatter"; +import { onlyUnique } from "../../utils/arrayHelper"; import { alphaSort } from "../../utils/sorters"; import AlertComponent from "../alert/alert.component"; import ChatOpenButton from "../chat-open-button/chat-open-button.component"; @@ -46,6 +46,7 @@ export function JobsReadyList({ bodyshop }) { const { loading, error, data, refetch } = useQuery(QUERY_ALL_ACTIVE_JOBS, { variables: { statuses: readyStatuses, + isConverted: true, }, fetchPolicy: "network-only", nextFetchPolicy: "network-only", diff --git a/client/src/components/tech-lookup-jobs-list/tech-lookup-jobs-list.component.jsx b/client/src/components/tech-lookup-jobs-list/tech-lookup-jobs-list.component.jsx index 1ab65001a..519aff991 100644 --- a/client/src/components/tech-lookup-jobs-list/tech-lookup-jobs-list.component.jsx +++ b/client/src/components/tech-lookup-jobs-list/tech-lookup-jobs-list.component.jsx @@ -25,6 +25,7 @@ export function TechLookupJobsList({ bodyshop }) { const { loading, error, data, refetch } = useQuery(QUERY_ALL_ACTIVE_JOBS, { variables: { statuses: bodyshop.md_ro_statuses.active_statuses || ["Open", "Open*"], + isConverted: true, }, fetchPolicy: "network-only", nextFetchPolicy: "network-only", diff --git a/client/src/graphql/jobs.queries.js b/client/src/graphql/jobs.queries.js index ad965bd74..21e82350b 100644 --- a/client/src/graphql/jobs.queries.js +++ b/client/src/graphql/jobs.queries.js @@ -1,9 +1,9 @@ import { gql } from "@apollo/client"; export const QUERY_ALL_ACTIVE_JOBS = gql` - query QUERY_ALL_ACTIVE_JOBS($statuses: [String!]!) { + query QUERY_ALL_ACTIVE_JOBS($statuses: [String!]!, $isConverted: Boolean) { jobs( - where: { status: { _in: $statuses } } + where: { status: { _in: $statuses }, converted: { _eq: $isConverted } } order_by: { created_at: desc } ) { iouparent @@ -432,7 +432,6 @@ export const QUERY_JOB_COSTING_DETAILS = gql` status ca_bc_pvrt ca_customer_gst - joblines(where: { removed: { _eq: false } }) { id unq_seq @@ -1001,7 +1000,6 @@ export const QUERY_TECH_JOB_DETAILS = gql` actual_completion actual_delivery actual_in - id ins_co_nm clm_no @@ -1586,7 +1584,6 @@ export const QUERY_ALL_JOB_FIELDS = gql` clm_title clm_total clm_zip - cust_pr ded_amt ded_status @@ -1669,7 +1666,6 @@ export const QUERY_ALL_JOB_FIELDS = gql` parts_tax_rates pay_amt pay_chknm - pay_type payee_nms plate_no @@ -2077,6 +2073,7 @@ export const QUERY_JOB_EXPORT_DMS = gql` } } `; + export const QUERY_RELATED_ROS = gql` query QUERY_RELATED_ROS($jobid: uuid!) { relatedjobs( @@ -2098,6 +2095,7 @@ export const QUERY_RELATED_ROS = gql` } } `; + export const INSERT_RELATED_ROS = gql` mutation INSERT_RELATED_ROS($relationship: relatedjobs_insert_input!) { insert_relatedjobs_one(object: $relationship) { @@ -2115,6 +2113,7 @@ export const INSERT_RELATED_ROS = gql` } } `; + export const DELETE_RELATED_RO = gql` mutation DELETE_RELATED_RO($relationshipid: uuid!) { delete_relatedjobs_by_pk(id: $relationshipid) { @@ -2122,6 +2121,7 @@ export const DELETE_RELATED_RO = gql` } } `; + export const GET_JOB_LINE_ORDERS = gql` query GET_JOB_LINE_ORDERS($joblineid: uuid!) { billlines(where: { joblineid: { _eq: $joblineid } }) { From 04c7bc445b26929dd5964cc127e466ee40d0380b Mon Sep 17 00:00:00 2001 From: Allan Carr Date: Fri, 10 Nov 2023 16:32:38 -0800 Subject: [PATCH 2/5] IO-2448 Search by C/C Plate number --- .../contracts-list.component.jsx | 4 +- .../courtesy-cars-list.component.jsx | 1 + .../1699662574943_run_sql_migration/down.sql | 38 +++++++++++++++++++ .../1699662574943_run_sql_migration/up.sql | 36 ++++++++++++++++++ 4 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 hasura/migrations/1699662574943_run_sql_migration/down.sql create mode 100644 hasura/migrations/1699662574943_run_sql_migration/up.sql diff --git a/client/src/components/contracts-list/contracts-list.component.jsx b/client/src/components/contracts-list/contracts-list.component.jsx index 2d5576565..fa9439c65 100644 --- a/client/src/components/contracts-list/contracts-list.component.jsx +++ b/client/src/components/contracts-list/contracts-list.component.jsx @@ -4,14 +4,14 @@ import queryString from "query-string"; import React, { useState } from "react"; import { useTranslation } from "react-i18next"; import { Link, useHistory, useLocation } from "react-router-dom"; +import { setModalContext } from "../../redux/modals/modals.actions"; import { DateTimeFormatter } from "../../utils/DateFormatter"; import { alphaSort } from "../../utils/sorters"; import ContractsFindModalContainer from "../contracts-find-modal/contracts-find-modal.container"; -import { setModalContext } from "../../redux/modals/modals.actions"; +import moment from "moment"; import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; -import moment from "moment"; import { selectBodyshop } from "../../redux/user/user.selectors"; const mapStateToProps = createStructuredSelector({ diff --git a/client/src/components/courtesy-cars-list/courtesy-cars-list.component.jsx b/client/src/components/courtesy-cars-list/courtesy-cars-list.component.jsx index b2e3059f6..ab85f95bc 100644 --- a/client/src/components/courtesy-cars-list/courtesy-cars-list.component.jsx +++ b/client/src/components/courtesy-cars-list/courtesy-cars-list.component.jsx @@ -174,6 +174,7 @@ export default function CourtesyCarsList({ loading, courtesycars, refetch }) { (c.year || "").toLowerCase().includes(searchText.toLowerCase()) || (c.make || "").toLowerCase().includes(searchText.toLowerCase()) || (c.model || "").toLowerCase().includes(searchText.toLowerCase()) || + (c.plate || "").toLowerCase().includes(searchText.toLowerCase()) || (t(c.status) || "").toLowerCase().includes(searchText.toLowerCase()) ) : courtesycars; diff --git a/hasura/migrations/1699662574943_run_sql_migration/down.sql b/hasura/migrations/1699662574943_run_sql_migration/down.sql new file mode 100644 index 000000000..15712cc8f --- /dev/null +++ b/hasura/migrations/1699662574943_run_sql_migration/down.sql @@ -0,0 +1,38 @@ +-- Could not auto-generate a down migration. +-- Please write an appropriate down migration for the SQL below: +-- CREATE OR REPLACE FUNCTION public.search_cccontracts(search text) +-- RETURNS SETOF cccontracts +-- LANGUAGE plpgsql +-- STABLE +-- AS $function$ +-- BEGIN +-- IF search = '' THEN +-- RETURN query +-- SELECT +-- * +-- FROM +-- cccontracts c; +-- ELSE +-- RETURN query +-- SELECT +-- contracts.* +-- FROM +-- courtesycars cars, +-- jobs jobs, +-- cccontracts contracts +-- WHERE (jobs.ro_number ILIKE '%' || search || '%' +-- OR jobs.ownr_fn ILIKE '%' || search || '%' +-- OR jobs.ownr_ln ILIKE '%' || search || '%' +-- OR jobs.ownr_co_nm ILIKE '%' || search || '%' +-- OR (cast(contracts.agreementnumber as text)) ILIKE '%' || search || '%' +-- OR contracts.driver_fn ILIKE '%' || search || '%' +-- OR contracts.driver_ln ILIKE '%' || search || '%' +-- OR cars.fleetnumber ILIKE '%' || search || '%' +-- OR cars.make ILIKE '%' || search || '%' +-- OR cars.model ILIKE '%' || search || '%' +-- OR cars.plate ILIKE '%' || search || '%') +-- AND contracts.jobid = jobs.id +-- AND contracts.courtesycarid = cars.id; +-- END IF; +-- END +-- $function$; diff --git a/hasura/migrations/1699662574943_run_sql_migration/up.sql b/hasura/migrations/1699662574943_run_sql_migration/up.sql new file mode 100644 index 000000000..ecd8252bd --- /dev/null +++ b/hasura/migrations/1699662574943_run_sql_migration/up.sql @@ -0,0 +1,36 @@ +CREATE OR REPLACE FUNCTION public.search_cccontracts(search text) + RETURNS SETOF cccontracts + LANGUAGE plpgsql + STABLE +AS $function$ +BEGIN + IF search = '' THEN + RETURN query + SELECT + * + FROM + cccontracts c; + ELSE + RETURN query + SELECT + contracts.* + FROM + courtesycars cars, + jobs jobs, + cccontracts contracts + WHERE (jobs.ro_number ILIKE '%' || search || '%' + OR jobs.ownr_fn ILIKE '%' || search || '%' + OR jobs.ownr_ln ILIKE '%' || search || '%' + OR jobs.ownr_co_nm ILIKE '%' || search || '%' + OR (cast(contracts.agreementnumber as text)) ILIKE '%' || search || '%' + OR contracts.driver_fn ILIKE '%' || search || '%' + OR contracts.driver_ln ILIKE '%' || search || '%' + OR cars.fleetnumber ILIKE '%' || search || '%' + OR cars.make ILIKE '%' || search || '%' + OR cars.model ILIKE '%' || search || '%' + OR cars.plate ILIKE '%' || search || '%') + AND contracts.jobid = jobs.id + AND contracts.courtesycarid = cars.id; + END IF; +END +$function$; From 673d0bb7c5db7a413aed0d694414639f01d2ec2a Mon Sep 17 00:00:00 2001 From: Allan Carr Date: Tue, 14 Nov 2023 12:15:09 -0800 Subject: [PATCH 3/5] IO-2453 Clear Bin Location --- .../job-line-location-popup.component.jsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/client/src/components/job-line-location-popup/job-line-location-popup.component.jsx b/client/src/components/job-line-location-popup/job-line-location-popup.component.jsx index 16bb32fed..676ae6f59 100644 --- a/client/src/components/job-line-location-popup/job-line-location-popup.component.jsx +++ b/client/src/components/job-line-location-popup/job-line-location-popup.component.jsx @@ -1,6 +1,6 @@ +import { useMutation } from "@apollo/client"; import { notification, Select } from "antd"; import React, { useEffect, useState } from "react"; -import { useMutation } from "@apollo/client"; import { useTranslation } from "react-i18next"; import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; @@ -56,8 +56,10 @@ export function JobLineLocationPopup({ bodyshop, jobline, disabled }) {