All CC screen improvements + date type changes. BOD-235 BOD-233

This commit is contained in:
Patrick Fic
2020-07-28 17:19:54 -07:00
parent 698833edd9
commit b51f5b0db2
21 changed files with 479 additions and 77 deletions

View File

@@ -1,8 +1,8 @@
import { Slider } from "antd"; import { Slider } from "antd";
import React, { useEffect, useState } from "react"; import React, { useEffect, useState, forwardRef } from "react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
const CourtesyCarFuelComponent = ({ value = 100, onChange }) => { const CourtesyCarFuelComponent = ({ value = 100, onChange }, ref) => {
const [option, setOption] = useState(value); const [option, setOption] = useState(value);
const { t } = useTranslation(); const { t } = useTranslation();
@@ -15,9 +15,9 @@ const CourtesyCarFuelComponent = ({ value = 100, onChange }) => {
const marks = { const marks = {
0: { 0: {
style: { style: {
color: "#f50" color: "#f50",
}, },
label: t("courtesycars.labels.fuel.empty") label: t("courtesycars.labels.fuel.empty"),
}, },
13: t("courtesycars.labels.fuel.18"), 13: t("courtesycars.labels.fuel.18"),
25: t("courtesycars.labels.fuel.14"), 25: t("courtesycars.labels.fuel.14"),
@@ -28,14 +28,15 @@ const CourtesyCarFuelComponent = ({ value = 100, onChange }) => {
88: t("courtesycars.labels.fuel.78"), 88: t("courtesycars.labels.fuel.78"),
100: { 100: {
style: { style: {
color: "#008000" color: "#008000",
}, },
label: <strong>{t("courtesycars.labels.fuel.full")}</strong> label: <strong>{t("courtesycars.labels.fuel.full")}</strong>,
} },
}; };
return ( return (
<Slider <Slider
ref={ref}
marks={marks} marks={marks}
defaultValue={value} defaultValue={value}
onChange={setOption} onChange={setOption}
@@ -43,4 +44,4 @@ const CourtesyCarFuelComponent = ({ value = 100, onChange }) => {
/> />
); );
}; };
export default CourtesyCarFuelComponent; export default forwardRef(CourtesyCarFuelComponent);

View File

@@ -1,12 +1,12 @@
import React, { useState, useEffect } from "react"; import React, { useState, useEffect, forwardRef } from "react";
import { Select } from "antd"; import { Select } from "antd";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
const { Option } = Select; const { Option } = Select;
const CourtesyCarStatusComponent = ({ const CourtesyCarStatusComponent = (
value = "courtesycars.status.in", { value = "courtesycars.status.in", onChange },
onChange ref
}) => { ) => {
const [option, setOption] = useState(value); const [option, setOption] = useState(value);
const { t } = useTranslation(); const { t } = useTranslation();
@@ -18,9 +18,10 @@ const CourtesyCarStatusComponent = ({
return ( return (
<Select <Select
ref={ref}
value={option} value={option}
style={{ style={{
width: 100 width: 100,
}} }}
onChange={setOption} onChange={setOption}
> >
@@ -36,4 +37,4 @@ const CourtesyCarStatusComponent = ({
</Select> </Select>
); );
}; };
export default CourtesyCarStatusComponent; export default forwardRef(CourtesyCarStatusComponent);

View File

@@ -9,7 +9,7 @@ export default function CourtesyCarsList({ loading, courtesycars, refetch }) {
sortedInfo: {}, sortedInfo: {},
filteredInfo: { text: "" }, filteredInfo: { text: "" },
}); });
const [searchText, setSearchText] = useState("");
const { t } = useTranslation(); const { t } = useTranslation();
const columns = [ const columns = [
@@ -36,6 +36,17 @@ export default function CourtesyCarsList({ loading, courtesycars, refetch }) {
dataIndex: "status", dataIndex: "status",
key: "status", key: "status",
sorter: (a, b) => alphaSort(a.status, b.status), sorter: (a, b) => alphaSort(a.status, b.status),
filters: [
{
text: t("courtesycars.status.in"),
value: "courtesycars.status.in",
},
{
text: t("courtesycars.status.out"),
value: "courtesycars.status.out",
},
],
onFilter: (value, record) => value.includes(record.status),
sortOrder: sortOrder:
state.sortedInfo.columnKey === "status" && state.sortedInfo.order, state.sortedInfo.columnKey === "status" && state.sortedInfo.order,
render: (text, record) => t(record.status), render: (text, record) => t(record.status),
@@ -64,17 +75,45 @@ export default function CourtesyCarsList({ loading, courtesycars, refetch }) {
sortOrder: sortOrder:
state.sortedInfo.columnKey === "model" && state.sortedInfo.order, state.sortedInfo.columnKey === "model" && state.sortedInfo.order,
}, },
{
title: t("courtesycars.fields.outwith"),
dataIndex: "outwith",
key: "outwith",
// sorter: (a, b) => alphaSort(a.model, b.model),
sortOrder:
state.sortedInfo.columnKey === "model" && state.sortedInfo.order,
render: (text, record) => (
<div>
{record.cccontracts.length === 1
? record.cccontracts[0].job.ro_number
: null}
</div>
),
},
]; ];
const handleTableChange = (pagination, filters, sorter) => { const handleTableChange = (pagination, filters, sorter) => {
setState({ ...state, filteredInfo: filters, sortedInfo: sorter }); setState({ ...state, filteredInfo: filters, sortedInfo: sorter });
}; };
const tableData = searchText
? courtesycars.filter(
(c) =>
(c.fleetnumber || "")
.toLowerCase()
.includes(searchText.toLowerCase()) ||
(c.vin || "").toLowerCase().includes(searchText.toLowerCase()) ||
(c.year || "").toLowerCase().includes(searchText.toLowerCase()) ||
(c.make || "").toLowerCase().includes(searchText.toLowerCase()) ||
(c.model || "").toLowerCase().includes(searchText.toLowerCase()) ||
(t(c.status) || "").toLowerCase().includes(searchText.toLowerCase())
)
: courtesycars;
return ( return (
<Table <Table
loading={loading} loading={loading}
title={() => ( title={() => (
<div className='imex-table-header'> <div className="imex-table-header">
<Button onClick={() => refetch()}> <Button onClick={() => refetch()}>
<SyncOutlined /> <SyncOutlined />
</Button> </Button>
@@ -82,21 +121,21 @@ export default function CourtesyCarsList({ loading, courtesycars, refetch }) {
<Button>{t("courtesycars.actions.new")}</Button> <Button>{t("courtesycars.actions.new")}</Button>
</Link> </Link>
<Input.Search <Input.Search
className='imex-table-header__search' className="imex-table-header__search"
placeholder={t("general.labels.search")} placeholder={t("general.labels.search")}
onChange={(e) => { onChange={(e) => {
//setSearchText(e.target.value); setSearchText(e.target.value);
}} }}
//value={searchText} value={searchText}
enterButton enterButton
/> />
</div> </div>
)} )}
size='small' size="small"
pagination={{ position: "top" }} pagination={{ position: "top" }}
columns={columns.map((item) => ({ ...item }))} columns={columns.map((item) => ({ ...item }))}
rowKey='id' rowKey="id"
dataSource={courtesycars} dataSource={tableData}
onChange={handleTableChange} onChange={handleTableChange}
/> />
); );

View File

@@ -55,6 +55,17 @@ export const QUERY_ALL_CC = gql`
status status
vin vin
year year
cccontracts(
where: { status: { _eq: "contracts.status.out" } }
order_by: { contract_date: desc }
limit: 1
) {
id
job {
id
ro_number
}
}
} }
} }
`; `;

View File

@@ -33,7 +33,6 @@ export function InvoicesListPage({
const search = queryString.parse(useLocation().search); const search = queryString.parse(useLocation().search);
const { page } = search; const { page } = search;
const selectedInvoice = search.invoiceid;
const columns = [ const columns = [
{ {
title: t("invoices.fields.vendorname"), title: t("invoices.fields.vendorname"),
@@ -131,18 +130,6 @@ export function InvoicesListPage({
history.push({ search: queryString.stringify(search) }); history.push({ search: queryString.stringify(search) });
}; };
const handleOnRowClick = (record) => {
if (record) {
if (record.id) {
search.invoiceid = record.id;
history.push({ search: queryString.stringify(search) });
}
} else {
delete search.invoiceid;
history.push({ search: queryString.stringify(search) });
}
};
return ( return (
<div> <div>
<Typography.Title level={4}> <Typography.Title level={4}>

View File

@@ -8,6 +8,7 @@ import InvoiceDetailEditContainer from "../../components/invoice-detail-edit/inv
import { QUERY_ALL_INVOICES_PAGINATED } from "../../graphql/invoices.queries"; import { QUERY_ALL_INVOICES_PAGINATED } from "../../graphql/invoices.queries";
import { setBreadcrumbs } from "../../redux/application/application.actions"; import { setBreadcrumbs } from "../../redux/application/application.actions";
import InvoicesPageComponent from "./invoices.page.component"; import InvoicesPageComponent from "./invoices.page.component";
import AlertComponent from "../../components/alert/alert.component";
const mapDispatchToProps = (dispatch) => ({ const mapDispatchToProps = (dispatch) => ({
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)), setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
@@ -45,6 +46,7 @@ export function InvoicesPageContainer({ setBreadcrumbs }) {
} }
); );
if (error) return <AlertComponent message={error.message} type="error" />;
return ( return (
<div> <div>
<InvoicesPageComponent <InvoicesPageComponent

View File

@@ -0,0 +1,5 @@
- args:
cascade: false
read_only: false
sql: ALTER TABLE "public"."cccontracts" DROP COLUMN "contract_date";
type: run_sql

View File

@@ -0,0 +1,6 @@
- args:
cascade: false
read_only: false
sql: ALTER TABLE "public"."cccontracts" ADD COLUMN "contract_date" date NOT NULL
DEFAULT now();
type: run_sql

View File

@@ -0,0 +1,52 @@
- args:
role: user
table:
name: cccontracts
schema: public
type: drop_insert_permission
- args:
permission:
check:
courtesycar:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
columns:
- id
- created_at
- updated_at
- agreementnumber
- courtesycarid
- jobid
- status
- start
- scheduledreturn
- actualreturn
- kmstart
- kmend
- driver_dlnumber
- driver_dlexpiry
- driver_dlst
- driver_fn
- driver_ln
- driver_addr1
- driver_addr2
- driver_city
- driver_state
- driver_zip
- driver_ph1
- driver_dob
- cc_num
- cc_expiry
- cc_cardholder
set: {}
role: user
table:
name: cccontracts
schema: public
type: create_insert_permission

View File

@@ -0,0 +1,53 @@
- args:
role: user
table:
name: cccontracts
schema: public
type: drop_insert_permission
- args:
permission:
check:
courtesycar:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
columns:
- actualreturn
- agreementnumber
- cc_cardholder
- cc_expiry
- cc_num
- contract_date
- courtesycarid
- created_at
- driver_addr1
- driver_addr2
- driver_city
- driver_dlexpiry
- driver_dlnumber
- driver_dlst
- driver_dob
- driver_fn
- driver_ln
- driver_ph1
- driver_state
- driver_zip
- id
- jobid
- kmend
- kmstart
- scheduledreturn
- start
- status
- updated_at
set: {}
role: user
table:
name: cccontracts
schema: public
type: create_insert_permission

View File

@@ -0,0 +1,53 @@
- args:
role: user
table:
name: cccontracts
schema: public
type: drop_select_permission
- args:
permission:
allow_aggregations: false
columns:
- actualreturn
- driver_dlexpiry
- driver_dob
- scheduledreturn
- start
- agreementnumber
- kmend
- kmstart
- cc_cardholder
- cc_expiry
- cc_num
- driver_addr1
- driver_addr2
- driver_city
- driver_dlnumber
- driver_dlst
- driver_fn
- driver_ln
- driver_ph1
- driver_state
- driver_zip
- status
- created_at
- updated_at
- courtesycarid
- id
- jobid
computed_fields: []
filter:
courtesycar:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
role: user
table:
name: cccontracts
schema: public
type: create_select_permission

View File

@@ -0,0 +1,54 @@
- args:
role: user
table:
name: cccontracts
schema: public
type: drop_select_permission
- args:
permission:
allow_aggregations: false
columns:
- actualreturn
- agreementnumber
- cc_cardholder
- cc_expiry
- cc_num
- contract_date
- courtesycarid
- created_at
- driver_addr1
- driver_addr2
- driver_city
- driver_dlexpiry
- driver_dlnumber
- driver_dlst
- driver_dob
- driver_fn
- driver_ln
- driver_ph1
- driver_state
- driver_zip
- id
- jobid
- kmend
- kmstart
- scheduledreturn
- start
- status
- updated_at
computed_fields: []
filter:
courtesycar:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
role: user
table:
name: cccontracts
schema: public
type: create_select_permission

View File

@@ -0,0 +1,52 @@
- args:
role: user
table:
name: cccontracts
schema: public
type: drop_update_permission
- args:
permission:
columns:
- actualreturn
- driver_dlexpiry
- driver_dob
- scheduledreturn
- start
- agreementnumber
- kmend
- kmstart
- cc_cardholder
- cc_expiry
- cc_num
- driver_addr1
- driver_addr2
- driver_city
- driver_dlnumber
- driver_dlst
- driver_fn
- driver_ln
- driver_ph1
- driver_state
- driver_zip
- status
- created_at
- updated_at
- courtesycarid
- id
- jobid
filter:
courtesycar:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
set: {}
role: user
table:
name: cccontracts
schema: public
type: create_update_permission

View File

@@ -0,0 +1,53 @@
- args:
role: user
table:
name: cccontracts
schema: public
type: drop_update_permission
- args:
permission:
columns:
- actualreturn
- agreementnumber
- cc_cardholder
- cc_expiry
- cc_num
- contract_date
- courtesycarid
- created_at
- driver_addr1
- driver_addr2
- driver_city
- driver_dlexpiry
- driver_dlnumber
- driver_dlst
- driver_dob
- driver_fn
- driver_ln
- driver_ph1
- driver_state
- driver_zip
- id
- jobid
- kmend
- kmstart
- scheduledreturn
- start
- status
- updated_at
filter:
courtesycar:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
set: {}
role: user
table:
name: cccontracts
schema: public
type: create_update_permission

View File

@@ -0,0 +1,5 @@
- args:
cascade: false
read_only: false
sql: ALTER TABLE "public"."cccontracts" ALTER COLUMN "scheduledreturn" TYPE date;
type: run_sql

View File

@@ -0,0 +1,5 @@
- args:
cascade: false
read_only: false
sql: ALTER TABLE "public"."cccontracts" ALTER COLUMN "scheduledreturn" TYPE timestamptz;
type: run_sql

View File

@@ -0,0 +1,5 @@
- args:
cascade: false
read_only: false
sql: ALTER TABLE "public"."cccontracts" ALTER COLUMN "actualreturn" TYPE date;
type: run_sql

View File

@@ -0,0 +1,5 @@
- args:
cascade: false
read_only: false
sql: ALTER TABLE "public"."cccontracts" ALTER COLUMN "actualreturn" TYPE timestamptz;
type: run_sql

View File

@@ -0,0 +1,5 @@
- args:
cascade: false
read_only: false
sql: ALTER TABLE "public"."cccontracts" ALTER COLUMN "start" TYPE date;
type: run_sql

View File

@@ -0,0 +1,5 @@
- args:
cascade: false
read_only: false
sql: ALTER TABLE "public"."cccontracts" ALTER COLUMN "start" TYPE timestamptz;
type: run_sql

View File

@@ -564,64 +564,66 @@ tables:
- active: - active:
_eq: true _eq: true
columns: columns:
- id
- created_at
- updated_at
- agreementnumber
- courtesycarid
- jobid
- status
- start
- scheduledreturn
- actualreturn - actualreturn
- kmstart - agreementnumber
- kmend - cc_cardholder
- driver_dlnumber - cc_expiry
- driver_dlexpiry - cc_num
- driver_dlst - contract_date
- driver_fn - courtesycarid
- driver_ln - created_at
- driver_addr1 - driver_addr1
- driver_addr2 - driver_addr2
- driver_city - driver_city
- driver_dlexpiry
- driver_dlnumber
- driver_dlst
- driver_dob
- driver_fn
- driver_ln
- driver_ph1
- driver_state - driver_state
- driver_zip - driver_zip
- driver_ph1 - id
- driver_dob - jobid
- cc_num - kmend
- cc_expiry - kmstart
- cc_cardholder - scheduledreturn
- start
- status
- updated_at
select_permissions: select_permissions:
- role: user - role: user
permission: permission:
columns: columns:
- actualreturn - actualreturn
- driver_dlexpiry
- driver_dob
- scheduledreturn
- start
- agreementnumber - agreementnumber
- kmend
- kmstart
- cc_cardholder - cc_cardholder
- cc_expiry - cc_expiry
- cc_num - cc_num
- contract_date
- courtesycarid
- created_at
- driver_addr1 - driver_addr1
- driver_addr2 - driver_addr2
- driver_city - driver_city
- driver_dlexpiry
- driver_dlnumber - driver_dlnumber
- driver_dlst - driver_dlst
- driver_dob
- driver_fn - driver_fn
- driver_ln - driver_ln
- driver_ph1 - driver_ph1
- driver_state - driver_state
- driver_zip - driver_zip
- status
- created_at
- updated_at
- courtesycarid
- id - id
- jobid - jobid
- kmend
- kmstart
- scheduledreturn
- start
- status
- updated_at
filter: filter:
courtesycar: courtesycar:
bodyshop: bodyshop:
@@ -637,32 +639,33 @@ tables:
permission: permission:
columns: columns:
- actualreturn - actualreturn
- driver_dlexpiry
- driver_dob
- scheduledreturn
- start
- agreementnumber - agreementnumber
- kmend
- kmstart
- cc_cardholder - cc_cardholder
- cc_expiry - cc_expiry
- cc_num - cc_num
- contract_date
- courtesycarid
- created_at
- driver_addr1 - driver_addr1
- driver_addr2 - driver_addr2
- driver_city - driver_city
- driver_dlexpiry
- driver_dlnumber - driver_dlnumber
- driver_dlst - driver_dlst
- driver_dob
- driver_fn - driver_fn
- driver_ln - driver_ln
- driver_ph1 - driver_ph1
- driver_state - driver_state
- driver_zip - driver_zip
- status
- created_at
- updated_at
- courtesycarid
- id - id
- jobid - jobid
- kmend
- kmstart
- scheduledreturn
- start
- status
- updated_at
filter: filter:
courtesycar: courtesycar:
bodyshop: bodyshop: