IO-899 Refactor ccc paginated query
This commit is contained in:
@@ -6,7 +6,6 @@ import { useTranslation } from "react-i18next";
|
|||||||
import { Link, useHistory, useLocation } from "react-router-dom";
|
import { Link, useHistory, useLocation } from "react-router-dom";
|
||||||
import { DateTimeFormatter } from "../../utils/DateFormatter";
|
import { DateTimeFormatter } from "../../utils/DateFormatter";
|
||||||
import { alphaSort } from "../../utils/sorters";
|
import { alphaSort } from "../../utils/sorters";
|
||||||
import TimeTicketsDatesSelector from "../ticket-tickets-dates-selector/time-tickets-dates-selector.component";
|
|
||||||
|
|
||||||
export default function ContractsList({ loading, contracts, refetch, total }) {
|
export default function ContractsList({ loading, contracts, refetch, total }) {
|
||||||
const [state, setState] = useState({
|
const [state, setState] = useState({
|
||||||
@@ -126,11 +125,6 @@ export default function ContractsList({ loading, contracts, refetch, total }) {
|
|||||||
<Card
|
<Card
|
||||||
extra={
|
extra={
|
||||||
<Space wrap>
|
<Space wrap>
|
||||||
<Button onClick={() => refetch()}>
|
|
||||||
<SyncOutlined />
|
|
||||||
</Button>
|
|
||||||
|
|
||||||
<TimeTicketsDatesSelector />
|
|
||||||
{search.search && (
|
{search.search && (
|
||||||
<>
|
<>
|
||||||
<Typography.Title level={4}>
|
<Typography.Title level={4}>
|
||||||
@@ -146,6 +140,9 @@ export default function ContractsList({ loading, contracts, refetch, total }) {
|
|||||||
</Button>
|
</Button>
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
|
<Button onClick={() => refetch()}>
|
||||||
|
<SyncOutlined />
|
||||||
|
</Button>
|
||||||
<Input.Search
|
<Input.Search
|
||||||
placeholder={search.searh || t("general.labels.search")}
|
placeholder={search.searh || t("general.labels.search")}
|
||||||
onSearch={(value) => {
|
onSearch={(value) => {
|
||||||
|
|||||||
@@ -144,23 +144,16 @@ export const QUERY_CONTRACT_BY_PK = gql`
|
|||||||
|
|
||||||
export const QUERY_ACTIVE_CONTRACTS_PAGINATED = gql`
|
export const QUERY_ACTIVE_CONTRACTS_PAGINATED = gql`
|
||||||
query QUERY_ACTIVE_CONTRACTS_PAGINATED(
|
query QUERY_ACTIVE_CONTRACTS_PAGINATED(
|
||||||
|
$search: String
|
||||||
$offset: Int
|
$offset: Int
|
||||||
$limit: Int
|
$limit: Int
|
||||||
$order: [cccontracts_order_by!]!
|
$order: [cccontracts_order_by!]!
|
||||||
$start: timestamptz
|
|
||||||
$end: timestamptz
|
|
||||||
) {
|
) {
|
||||||
cccontracts(
|
search_cccontracts(
|
||||||
|
args: { search: $search }
|
||||||
offset: $offset
|
offset: $offset
|
||||||
limit: $limit
|
limit: $limit
|
||||||
order_by: $order
|
order_by: $order
|
||||||
where: {
|
|
||||||
_or: [
|
|
||||||
{ actualreturn: { _lte: $end } }
|
|
||||||
{ actualreturn: { _is_null: true } }
|
|
||||||
]
|
|
||||||
start: { _gte: $start }
|
|
||||||
}
|
|
||||||
) {
|
) {
|
||||||
agreementnumber
|
agreementnumber
|
||||||
courtesycarid
|
courtesycarid
|
||||||
@@ -171,7 +164,6 @@ export const QUERY_ACTIVE_CONTRACTS_PAGINATED = gql`
|
|||||||
jobid
|
jobid
|
||||||
job {
|
job {
|
||||||
id
|
id
|
||||||
|
|
||||||
ro_number
|
ro_number
|
||||||
ownr_fn
|
ownr_fn
|
||||||
ownr_ln
|
ownr_ln
|
||||||
@@ -190,7 +182,7 @@ export const QUERY_ACTIVE_CONTRACTS_PAGINATED = gql`
|
|||||||
plate
|
plate
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cccontracts_aggregate {
|
search_cccontracts_aggregate(args: { search: $search }) {
|
||||||
aggregate {
|
aggregate {
|
||||||
count(distinct: true)
|
count(distinct: true)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,18 +1,17 @@
|
|||||||
import { useQuery } from "@apollo/client";
|
import { useQuery } from "@apollo/client";
|
||||||
|
import queryString from "query-string";
|
||||||
import React, { useEffect } from "react";
|
import React, { useEffect } from "react";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { connect } from "react-redux";
|
import { connect } from "react-redux";
|
||||||
|
import { useLocation } from "react-router-dom";
|
||||||
import AlertComponent from "../../components/alert/alert.component";
|
import AlertComponent from "../../components/alert/alert.component";
|
||||||
|
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
||||||
import { QUERY_ACTIVE_CONTRACTS_PAGINATED } from "../../graphql/cccontracts.queries";
|
import { QUERY_ACTIVE_CONTRACTS_PAGINATED } from "../../graphql/cccontracts.queries";
|
||||||
import {
|
import {
|
||||||
setBreadcrumbs,
|
setBreadcrumbs,
|
||||||
setSelectedHeader,
|
setSelectedHeader,
|
||||||
} from "../../redux/application/application.actions";
|
} from "../../redux/application/application.actions";
|
||||||
import ContractsPageComponent from "./contracts.page.component";
|
import ContractsPageComponent from "./contracts.page.component";
|
||||||
import queryString from "query-string";
|
|
||||||
import { useLocation } from "react-router-dom";
|
|
||||||
import moment from "moment";
|
|
||||||
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
|
||||||
|
|
||||||
const mapDispatchToProps = (dispatch) => ({
|
const mapDispatchToProps = (dispatch) => ({
|
||||||
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
||||||
@@ -21,17 +20,13 @@ const mapDispatchToProps = (dispatch) => ({
|
|||||||
|
|
||||||
export function ContractsPageContainer({ setBreadcrumbs, setSelectedHeader }) {
|
export function ContractsPageContainer({ setBreadcrumbs, setSelectedHeader }) {
|
||||||
const searchParams = queryString.parse(useLocation().search);
|
const searchParams = queryString.parse(useLocation().search);
|
||||||
const { page, sortcolumn, sortorder, start, end } = searchParams;
|
const { search, page, sortcolumn, sortorder } = searchParams;
|
||||||
|
|
||||||
const { loading, error, data, refetch } = useQuery(
|
const { loading, error, data, refetch } = useQuery(
|
||||||
QUERY_ACTIVE_CONTRACTS_PAGINATED,
|
QUERY_ACTIVE_CONTRACTS_PAGINATED,
|
||||||
{
|
{
|
||||||
variables: {
|
variables: {
|
||||||
//search: search || "",
|
search: search || "",
|
||||||
start: start
|
|
||||||
? moment(start)
|
|
||||||
: moment().startOf("week").subtract(7, "days"),
|
|
||||||
end: end ? moment(end) : moment().endOf("week"),
|
|
||||||
offset: page ? (page - 1) * 25 : 0,
|
offset: page ? (page - 1) * 25 : 0,
|
||||||
limit: 25,
|
limit: 25,
|
||||||
order: [
|
order: [
|
||||||
@@ -62,14 +57,12 @@ export function ContractsPageContainer({ setBreadcrumbs, setSelectedHeader }) {
|
|||||||
if (error) return <AlertComponent message={error.message} type="error" />;
|
if (error) return <AlertComponent message={error.message} type="error" />;
|
||||||
return (
|
return (
|
||||||
<RbacWrapper action="contracts:list">
|
<RbacWrapper action="contracts:list">
|
||||||
<div>
|
<ContractsPageComponent
|
||||||
<ContractsPageComponent
|
loading={loading}
|
||||||
loading={loading}
|
refetch={refetch}
|
||||||
refetch={refetch}
|
data={data ? data.search_cccontracts : []}
|
||||||
data={data ? data.cccontracts : []}
|
total={data ? data.search_cccontracts_aggregate.aggregate.count : 0}
|
||||||
total={data ? data.cccontracts_aggregate.aggregate.count : 0}
|
/>
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</RbacWrapper>
|
</RbacWrapper>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
[]
|
||||||
21
hasura/migrations/1618357029467_run_sql_migration/up.yaml
Normal file
21
hasura/migrations/1618357029467_run_sql_migration/up.yaml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
- args:
|
||||||
|
cascade: false
|
||||||
|
read_only: false
|
||||||
|
sql: "CREATE OR REPLACE FUNCTION public.search_cccontracts (search text)\n\tRETURNS
|
||||||
|
SETOF jobs\n\tLANGUAGE plpgsql\n\tSTABLE\n\tAS $function$\nBEGIN\n\tIF search
|
||||||
|
= '' THEN\n\t\tRETURN query\n\t\tSELECT\n\t\t\t*\n\t\tFROM\n\t\t\tcccontracts
|
||||||
|
c;\n\tELSE\n\t\tRETURN query\n\t\tSELECT\n\t\t\t*\n\t\tFROM\n\t\t\tcccontracts
|
||||||
|
contracts,\n\t\t\tcourtesycars cars,\n\t\t\tjobs jobs\n\t\tWHERE (jobs.ro_number
|
||||||
|
ILIKE '%' || search || '%'\n\t\t\tOR jobs.ownr_fn ILIKE '%' || search || '%'\n\t\t\tOR
|
||||||
|
jobs.ownr_ln ILIKE '%' || search || '%'\n\t\t\tOR jobs.ownr_co_nm ILIKE '%'
|
||||||
|
|| search || '%'\n\t\t\tOR contracts.agreementnumber ILIKE '%' || search ||
|
||||||
|
'%'\n\t\t\tOR contracts.driver_fn ILIKE '%' || search || '%'\n\t\t\tOR contracts.driver_ln
|
||||||
|
ILIKE '%' || search || '%'\n\t\t\tOR cars.fleetnumber ILIKE '%' || search ||
|
||||||
|
'%'\n\t\t\tOR cars.make ILIKE '%' || search || '%'\n\t\t\tOR cars.model ILIKE
|
||||||
|
'%' || search || '%')\n\t\t\tAND contracts.jobid = jobs.id\n\t\t\tAND contracts.courtesycarid
|
||||||
|
= cars.id;\n\t\t\t\n\tEND IF;\nEND\n$function$;"
|
||||||
|
type: run_sql
|
||||||
|
- args:
|
||||||
|
name: search_cccontracts
|
||||||
|
schema: public
|
||||||
|
type: track_function
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
[]
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
- args:
|
||||||
|
cascade: false
|
||||||
|
read_only: false
|
||||||
|
sql: drop function public.search_cccontracts;
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
[]
|
||||||
21
hasura/migrations/1618357269948_run_sql_migration/up.yaml
Normal file
21
hasura/migrations/1618357269948_run_sql_migration/up.yaml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
- args:
|
||||||
|
cascade: true
|
||||||
|
read_only: false
|
||||||
|
sql: "CREATE OR REPLACE FUNCTION public.search_cccontracts(search text)\n RETURNS
|
||||||
|
SETOF jobs\n LANGUAGE plpgsql\n STABLE\nAS $function$\nBEGIN\n\tIF search =
|
||||||
|
'' THEN\n\t\tRETURN query\n\t\tSELECT\n\t\t\t*\n\t\tFROM\n\t\t\tcccontracts
|
||||||
|
c;\n\tELSE\n\t\tRETURN query\n\t\tSELECT\n\t\t\t*\n\t\tFROM\n\t\tcourtesycars
|
||||||
|
cars,\n\t\t\tjobs jobs,\n\t\t\tcccontracts contracts\n\t\t\t\n\t\tWHERE (jobs.ro_number
|
||||||
|
ILIKE '%' || search || '%'\n\t\t\tOR jobs.ownr_fn ILIKE '%' || search || '%'\n\t\t\tOR
|
||||||
|
jobs.ownr_ln ILIKE '%' || search || '%'\n\t\t\tOR jobs.ownr_co_nm ILIKE '%'
|
||||||
|
|| search || '%'\n\t\t\tOR contracts.agreementnumber ILIKE '%' || search ||
|
||||||
|
'%'\n\t\t\tOR contracts.driver_fn ILIKE '%' || search || '%'\n\t\t\tOR contracts.driver_ln
|
||||||
|
ILIKE '%' || search || '%'\n\t\t\tOR cars.fleetnumber ILIKE '%' || search ||
|
||||||
|
'%'\n\t\t\tOR cars.make ILIKE '%' || search || '%'\n\t\t\tOR cars.model ILIKE
|
||||||
|
'%' || search || '%')\n\t\t\tAND contracts.jobid = jobs.id\n\t\t\tAND contracts.courtesycarid
|
||||||
|
= cars.id;\n\t\t\t\n\tEND IF;\nEND\n$function$;"
|
||||||
|
type: run_sql
|
||||||
|
- args:
|
||||||
|
name: search_cccontracts
|
||||||
|
schema: public
|
||||||
|
type: track_function
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
[]
|
||||||
21
hasura/migrations/1618357338608_run_sql_migration/up.yaml
Normal file
21
hasura/migrations/1618357338608_run_sql_migration/up.yaml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
- args:
|
||||||
|
cascade: false
|
||||||
|
read_only: false
|
||||||
|
sql: "drop function public.search_cccontracts;\nCREATE OR REPLACE FUNCTION public.search_cccontracts(search
|
||||||
|
text)\n RETURNS SETOF cccontracts\n LANGUAGE plpgsql\n STABLE\nAS $function$\nBEGIN\n\tIF
|
||||||
|
search = '' THEN\n\t\tRETURN query\n\t\tSELECT\n\t\t\t*\n\t\tFROM\n\t\t\tcccontracts
|
||||||
|
c;\n\tELSE\n\t\tRETURN query\n\t\tSELECT\n\t\t\t*\n\t\tFROM\n\t\tcourtesycars
|
||||||
|
cars,\n\t\t\tjobs jobs,\n\t\t\tcccontracts contracts\n\t\t\t\n\t\tWHERE (jobs.ro_number
|
||||||
|
ILIKE '%' || search || '%'\n\t\t\tOR jobs.ownr_fn ILIKE '%' || search || '%'\n\t\t\tOR
|
||||||
|
jobs.ownr_ln ILIKE '%' || search || '%'\n\t\t\tOR jobs.ownr_co_nm ILIKE '%'
|
||||||
|
|| search || '%'\n\t\t\tOR contracts.agreementnumber ILIKE '%' || search ||
|
||||||
|
'%'\n\t\t\tOR contracts.driver_fn ILIKE '%' || search || '%'\n\t\t\tOR contracts.driver_ln
|
||||||
|
ILIKE '%' || search || '%'\n\t\t\tOR cars.fleetnumber ILIKE '%' || search ||
|
||||||
|
'%'\n\t\t\tOR cars.make ILIKE '%' || search || '%'\n\t\t\tOR cars.model ILIKE
|
||||||
|
'%' || search || '%')\n\t\t\tAND contracts.jobid = jobs.id\n\t\t\tAND contracts.courtesycarid
|
||||||
|
= cars.id;\n\t\t\t\n\tEND IF;\nEND\n$function$;"
|
||||||
|
type: run_sql
|
||||||
|
- args:
|
||||||
|
name: search_cccontracts
|
||||||
|
schema: public
|
||||||
|
type: track_function
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
[]
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
- args:
|
||||||
|
cascade: false
|
||||||
|
read_only: false
|
||||||
|
sql: drop function public.search_cccontracts;
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
[]
|
||||||
21
hasura/migrations/1618358164400_run_sql_migration/up.yaml
Normal file
21
hasura/migrations/1618358164400_run_sql_migration/up.yaml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
- args:
|
||||||
|
cascade: false
|
||||||
|
read_only: false
|
||||||
|
sql: "CREATE OR REPLACE FUNCTION public.search_cccontracts(search text)\n RETURNS
|
||||||
|
SETOF cccontracts\n LANGUAGE plpgsql\n STABLE\nAS $function$\nBEGIN\n\tIF search
|
||||||
|
= '' THEN\n\t\tRETURN query\n\t\tSELECT\n\t\t\t*\n\t\tFROM\n\t\t\tcccontracts
|
||||||
|
c;\n\tELSE\n\t\tRETURN query\n\t\tSELECT\n\t\t\t*\n\t\tFROM\n\t\tcourtesycars
|
||||||
|
cars,\n\t\t\tjobs jobs,\n\t\t\tcccontracts contracts\n\t\t\t\n\t\tWHERE (jobs.ro_number
|
||||||
|
ILIKE '%' || search || '%'\n\t\t\tOR jobs.ownr_fn ILIKE '%' || search || '%'\n\t\t\tOR
|
||||||
|
jobs.ownr_ln ILIKE '%' || search || '%'\n\t\t\tOR jobs.ownr_co_nm ILIKE '%'
|
||||||
|
|| search || '%'\n\t\t\tOR (cast(contracts.agreementnumber as text)) ILIKE '%'
|
||||||
|
|| search || '%'\n\t\t\tOR contracts.driver_fn ILIKE '%' || search || '%'\n\t\t\tOR
|
||||||
|
contracts.driver_ln ILIKE '%' || search || '%'\n\t\t\tOR cars.fleetnumber ILIKE
|
||||||
|
'%' || search || '%'\n\t\t\tOR cars.make ILIKE '%' || search || '%'\n\t\t\tOR
|
||||||
|
cars.model ILIKE '%' || search || '%')\n\t\t\tAND contracts.jobid = jobs.id\n\t\t\tAND
|
||||||
|
contracts.courtesycarid = cars.id;\n\t\t\t\n\tEND IF;\nEND\n$function$;"
|
||||||
|
type: run_sql
|
||||||
|
- args:
|
||||||
|
name: search_cccontracts
|
||||||
|
schema: public
|
||||||
|
type: track_function
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
[]
|
||||||
21
hasura/migrations/1618358356468_run_sql_migration/up.yaml
Normal file
21
hasura/migrations/1618358356468_run_sql_migration/up.yaml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
- args:
|
||||||
|
cascade: true
|
||||||
|
read_only: false
|
||||||
|
sql: "DROP FUNCTION public.search_cccontracts;\n\nCREATE OR REPLACE FUNCTION public.search_cccontracts(search
|
||||||
|
text)\n RETURNS SETOF cccontracts\n LANGUAGE plpgsql\n STABLE\nAS $function$\nBEGIN\n\tIF
|
||||||
|
search = '' THEN\n\t\tRETURN query\n\t\tSELECT\n\t\t\t*\n\t\tFROM\n\t\t\tcccontracts
|
||||||
|
c;\n\tELSE\n\t\tRETURN query\n\t\tSELECT\n\t\t\tcontracts.*\n\t\tFROM\n\t\tcourtesycars
|
||||||
|
cars,\n\t\t\tjobs jobs,\n\t\t\tcccontracts contracts\n\t\t\t\n\t\tWHERE (jobs.ro_number
|
||||||
|
ILIKE '%' || search || '%'\n\t\t\tOR jobs.ownr_fn ILIKE '%' || search || '%'\n\t\t\tOR
|
||||||
|
jobs.ownr_ln ILIKE '%' || search || '%'\n\t\t\tOR jobs.ownr_co_nm ILIKE '%'
|
||||||
|
|| search || '%'\n\t\t\tOR (cast(contracts.agreementnumber as text)) ILIKE '%'
|
||||||
|
|| search || '%'\n\t\t\tOR contracts.driver_fn ILIKE '%' || search || '%'\n\t\t\tOR
|
||||||
|
contracts.driver_ln ILIKE '%' || search || '%'\n\t\t\tOR cars.fleetnumber ILIKE
|
||||||
|
'%' || search || '%'\n\t\t\tOR cars.make ILIKE '%' || search || '%'\n\t\t\tOR
|
||||||
|
cars.model ILIKE '%' || search || '%')\n\t\t\tAND contracts.jobid = jobs.id\n\t\t\tAND
|
||||||
|
contracts.courtesycarid = cars.id;\n\t\t\t\n\tEND IF;\nEND\n$function$;"
|
||||||
|
type: run_sql
|
||||||
|
- args:
|
||||||
|
name: search_cccontracts
|
||||||
|
schema: public
|
||||||
|
type: track_function
|
||||||
@@ -4226,6 +4226,9 @@ functions:
|
|||||||
- function:
|
- function:
|
||||||
schema: public
|
schema: public
|
||||||
name: search_bills
|
name: search_bills
|
||||||
|
- function:
|
||||||
|
schema: public
|
||||||
|
name: search_cccontracts
|
||||||
- function:
|
- function:
|
||||||
schema: public
|
schema: public
|
||||||
name: search_jobs
|
name: search_jobs
|
||||||
|
|||||||
Reference in New Issue
Block a user