IO-828 IO-134
This commit is contained in:
@@ -10211,6 +10211,48 @@
|
|||||||
</translation>
|
</translation>
|
||||||
</translations>
|
</translations>
|
||||||
</concept_node>
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>storageexceeded</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>storageexceeded_title</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
<concept_node>
|
<concept_node>
|
||||||
<name>upload</name>
|
<name>upload</name>
|
||||||
<definition_loaded>false</definition_loaded>
|
<definition_loaded>false</definition_loaded>
|
||||||
@@ -10232,6 +10274,69 @@
|
|||||||
</translation>
|
</translation>
|
||||||
</translations>
|
</translations>
|
||||||
</concept_node>
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>upload_limitexceeded</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>upload_limitexceeded_title</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>usage</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
</children>
|
</children>
|
||||||
</folder_node>
|
</folder_node>
|
||||||
<folder_node>
|
<folder_node>
|
||||||
@@ -19828,6 +19933,27 @@
|
|||||||
</translation>
|
</translation>
|
||||||
</translations>
|
</translations>
|
||||||
</concept_node>
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>deleteintake</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
<concept_node>
|
<concept_node>
|
||||||
<name>deliverchecklist</name>
|
<name>deliverchecklist</name>
|
||||||
<definition_loaded>false</definition_loaded>
|
<definition_loaded>false</definition_loaded>
|
||||||
|
|||||||
@@ -1,14 +1,15 @@
|
|||||||
import { UploadOutlined } from "@ant-design/icons";
|
import { UploadOutlined } from "@ant-design/icons";
|
||||||
import { Upload } from "antd";
|
import { notification, Progress, Result, Space, Upload } from "antd";
|
||||||
import React from "react";
|
import React, { useMemo } from "react";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
import { connect } from "react-redux";
|
import { connect } from "react-redux";
|
||||||
import { createStructuredSelector } from "reselect";
|
import { createStructuredSelector } from "reselect";
|
||||||
import {
|
import {
|
||||||
selectBodyshop,
|
selectBodyshop,
|
||||||
selectCurrentUser,
|
selectCurrentUser,
|
||||||
} from "../../redux/user/user.selectors";
|
} from "../../redux/user/user.selectors";
|
||||||
|
import formatBytes from "../../utils/formatbytes";
|
||||||
import { handleUpload } from "./documents-upload.utility";
|
import { handleUpload } from "./documents-upload.utility";
|
||||||
|
|
||||||
const mapStateToProps = createStructuredSelector({
|
const mapStateToProps = createStructuredSelector({
|
||||||
currentUser: selectCurrentUser,
|
currentUser: selectCurrentUser,
|
||||||
bodyshop: selectBodyshop,
|
bodyshop: selectBodyshop,
|
||||||
@@ -22,10 +23,46 @@ export function DocumentsUploadComponent({
|
|||||||
tagsArray,
|
tagsArray,
|
||||||
billId,
|
billId,
|
||||||
callbackAfterUpload,
|
callbackAfterUpload,
|
||||||
|
totalSize,
|
||||||
}) {
|
}) {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
|
||||||
|
const pct = useMemo(() => {
|
||||||
|
return parseInt(
|
||||||
|
(totalSize / ((bodyshop && bodyshop.jobsizelimit) || 1)) * 100
|
||||||
|
);
|
||||||
|
}, [bodyshop, totalSize]);
|
||||||
|
|
||||||
|
if (pct > 100)
|
||||||
|
return (
|
||||||
|
<Result
|
||||||
|
status="error"
|
||||||
|
title={t("documents.labels.storageexceeded_title")}
|
||||||
|
subTitle={t("documents.labels.storageexceeded")}
|
||||||
|
></Result>
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Upload.Dragger
|
<Upload.Dragger
|
||||||
multiple={true}
|
multiple={true}
|
||||||
|
beforeUpload={(file, fileList) => {
|
||||||
|
const newFiles = fileList.reduce((acc, val) => acc + val.size, 0);
|
||||||
|
const shouldStopUpload =
|
||||||
|
(totalSize + newFiles) / ((bodyshop && bodyshop.jobsizelimit) || 1) >=
|
||||||
|
1;
|
||||||
|
|
||||||
|
//Check to see if old files plus newly uploaded ones will be too much.
|
||||||
|
if (shouldStopUpload) {
|
||||||
|
notification.open({
|
||||||
|
key: "cannotuploaddocuments",
|
||||||
|
type: "error",
|
||||||
|
message: t("documents.labels.upload_limitexceeded_title"),
|
||||||
|
description: t("documents.labels.upload_limitexceeded"),
|
||||||
|
});
|
||||||
|
return Upload.LIST_IGNORE;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}}
|
||||||
customRequest={(ev) =>
|
customRequest={(ev) =>
|
||||||
handleUpload(ev, {
|
handleUpload(ev, {
|
||||||
bodyshop: bodyshop,
|
bodyshop: bodyshop,
|
||||||
@@ -39,11 +76,6 @@ export function DocumentsUploadComponent({
|
|||||||
accept="audio/*, video/*, image/*, .pdf, .doc, .docx, .xls, .xlsx"
|
accept="audio/*, video/*, image/*, .pdf, .doc, .docx, .xls, .xlsx"
|
||||||
// showUploadList={false}
|
// showUploadList={false}
|
||||||
>
|
>
|
||||||
{
|
|
||||||
// <Button type="primary">
|
|
||||||
// <UploadOutlined />
|
|
||||||
// </Button>
|
|
||||||
}
|
|
||||||
{children || (
|
{children || (
|
||||||
<>
|
<>
|
||||||
<p className="ant-upload-drag-icon">
|
<p className="ant-upload-drag-icon">
|
||||||
@@ -52,6 +84,16 @@ export function DocumentsUploadComponent({
|
|||||||
<p className="ant-upload-text">
|
<p className="ant-upload-text">
|
||||||
Click or drag files to this area to upload.
|
Click or drag files to this area to upload.
|
||||||
</p>
|
</p>
|
||||||
|
<Space wrap className="ant-upload-text">
|
||||||
|
<Progress type="dashboard" percent={pct} size="small" />
|
||||||
|
<span>
|
||||||
|
{t("documents.labels.usage", {
|
||||||
|
percent: pct,
|
||||||
|
used: formatBytes(totalSize),
|
||||||
|
total: formatBytes(bodyshop && bodyshop.jobsizelimit),
|
||||||
|
})}
|
||||||
|
</span>
|
||||||
|
</Space>
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
</Upload.Dragger>
|
</Upload.Dragger>
|
||||||
|
|||||||
@@ -134,6 +134,7 @@ export const uploadToCloudinary = async (
|
|||||||
type: fileType,
|
type: fileType,
|
||||||
extension: extension,
|
extension: extension,
|
||||||
bodyshopid: bodyshop.id,
|
bodyshopid: bodyshop.id,
|
||||||
|
size: file.size || cloudinaryUploadResponse.data.bytes,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -16,6 +16,8 @@ function JobsDocumentsComponent({
|
|||||||
refetch,
|
refetch,
|
||||||
billId,
|
billId,
|
||||||
billsCallback,
|
billsCallback,
|
||||||
|
totalSize,
|
||||||
|
bodyshop,
|
||||||
}) {
|
}) {
|
||||||
const [galleryImages, setgalleryImages] = useState({ images: [], other: [] });
|
const [galleryImages, setgalleryImages] = useState({ images: [], other: [] });
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
@@ -104,7 +106,7 @@ function JobsDocumentsComponent({
|
|||||||
}, [data, setgalleryImages, t]);
|
}, [data, setgalleryImages, t]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="clea rfix">
|
<div>
|
||||||
<Row gutter={[16, 16]}>
|
<Row gutter={[16, 16]}>
|
||||||
<Col span={24}>
|
<Col span={24}>
|
||||||
<Space wrap>
|
<Space wrap>
|
||||||
@@ -126,6 +128,7 @@ function JobsDocumentsComponent({
|
|||||||
<Card>
|
<Card>
|
||||||
<DocumentsUploadComponent
|
<DocumentsUploadComponent
|
||||||
jobId={jobId}
|
jobId={jobId}
|
||||||
|
totalSize={totalSize}
|
||||||
billId={billId}
|
billId={billId}
|
||||||
callbackAfterUpload={billsCallback || refetch}
|
callbackAfterUpload={billsCallback || refetch}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ export default function JobsDocumentsContainer({
|
|||||||
return (
|
return (
|
||||||
<JobDocuments
|
<JobDocuments
|
||||||
data={(data && data.documents) || documentsList || []}
|
data={(data && data.documents) || documentsList || []}
|
||||||
|
totalSize={data && data.documents_aggregate.aggregate.sum.size}
|
||||||
billId={billId}
|
billId={billId}
|
||||||
jobId={jobId}
|
jobId={jobId}
|
||||||
refetch={refetch}
|
refetch={refetch}
|
||||||
|
|||||||
@@ -178,7 +178,6 @@ export function JobsList({ bodyshop, refetch, loading, jobs, total }) {
|
|||||||
];
|
];
|
||||||
|
|
||||||
const handleTableChange = (pagination, filters, sorter) => {
|
const handleTableChange = (pagination, filters, sorter) => {
|
||||||
console.log("filters :>> ", filters);
|
|
||||||
search.page = pagination.current;
|
search.page = pagination.current;
|
||||||
search.sortcolumn = sorter.columnKey;
|
search.sortcolumn = sorter.columnKey;
|
||||||
search.sortorder = sorter.order;
|
search.sortorder = sorter.order;
|
||||||
|
|||||||
@@ -34,6 +34,15 @@ export function TechClockOffButton({
|
|||||||
(e) => e.id === technician && technician.id
|
(e) => e.id === technician && technician.id
|
||||||
)[0];
|
)[0];
|
||||||
|
|
||||||
|
console.log(
|
||||||
|
"emps :>> ",
|
||||||
|
emps,
|
||||||
|
"e",
|
||||||
|
bodyshop && bodyshop.employees,
|
||||||
|
"tech",
|
||||||
|
technician
|
||||||
|
);
|
||||||
|
|
||||||
const handleFinish = async (values) => {
|
const handleFinish = async (values) => {
|
||||||
logImEXEvent("tech_clock_out_job");
|
logImEXEvent("tech_clock_out_job");
|
||||||
|
|
||||||
|
|||||||
@@ -81,6 +81,7 @@ export const QUERY_BODYSHOP = gql`
|
|||||||
md_payment_types
|
md_payment_types
|
||||||
md_hour_split
|
md_hour_split
|
||||||
sub_status
|
sub_status
|
||||||
|
jobsizelimit
|
||||||
employees {
|
employees {
|
||||||
id
|
id
|
||||||
first_name
|
first_name
|
||||||
@@ -160,6 +161,7 @@ export const UPDATE_SHOP = gql`
|
|||||||
md_payment_types
|
md_payment_types
|
||||||
md_hour_split
|
md_hour_split
|
||||||
sub_status
|
sub_status
|
||||||
|
jobsizelimit
|
||||||
employees {
|
employees {
|
||||||
id
|
id
|
||||||
first_name
|
first_name
|
||||||
|
|||||||
@@ -2,15 +2,18 @@ import { gql } from "@apollo/client";
|
|||||||
|
|
||||||
export const GET_DOCUMENTS_BY_JOB = gql`
|
export const GET_DOCUMENTS_BY_JOB = gql`
|
||||||
query GET_DOCUMENTS_BY_JOB($jobId: uuid!) {
|
query GET_DOCUMENTS_BY_JOB($jobId: uuid!) {
|
||||||
documents(
|
documents_aggregate(where: { jobid: { _eq: $jobId } }) {
|
||||||
where: { jobid: { _eq: $jobId } }
|
aggregate {
|
||||||
order_by: { updated_at: desc }
|
sum {
|
||||||
) {
|
size
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
documents(order_by: { updated_at: desc }) {
|
||||||
id
|
id
|
||||||
name
|
name
|
||||||
key
|
key
|
||||||
type
|
type
|
||||||
extension
|
|
||||||
bill {
|
bill {
|
||||||
id
|
id
|
||||||
invoice_number
|
invoice_number
|
||||||
|
|||||||
@@ -53,7 +53,24 @@ export const QUERY_ALL_ACTIVE_JOBS = gql`
|
|||||||
`;
|
`;
|
||||||
|
|
||||||
export const QUERY_PARTS_QUEUE = gql`
|
export const QUERY_PARTS_QUEUE = gql`
|
||||||
query QUERY_PARTS_QUEUE($statuses: [String!]!) {
|
query QUERY_PARTS_QUEUE(
|
||||||
|
$statuses: [String!]!
|
||||||
|
$offset: Int
|
||||||
|
$limit: Int
|
||||||
|
$order: [jobs_order_by!]
|
||||||
|
) {
|
||||||
|
jobs_aggregate(
|
||||||
|
where: {
|
||||||
|
_and: [
|
||||||
|
{ status: { _in: $statuses } }
|
||||||
|
{ queued_for_parts: { _eq: true } }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
) {
|
||||||
|
aggregate {
|
||||||
|
count(distinct: true)
|
||||||
|
}
|
||||||
|
}
|
||||||
jobs(
|
jobs(
|
||||||
where: {
|
where: {
|
||||||
_and: [
|
_and: [
|
||||||
@@ -61,17 +78,14 @@ export const QUERY_PARTS_QUEUE = gql`
|
|||||||
{ queued_for_parts: { _eq: true } }
|
{ queued_for_parts: { _eq: true } }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
order_by: { updated_at: asc }
|
offset: $offset
|
||||||
|
limit: $limit
|
||||||
|
order_by: $order
|
||||||
) {
|
) {
|
||||||
ownr_fn
|
ownr_fn
|
||||||
ownr_ln
|
ownr_ln
|
||||||
ownr_ph1
|
ownr_ph1
|
||||||
ownr_ea
|
ownr_ea
|
||||||
owner {
|
|
||||||
id
|
|
||||||
allow_text_message
|
|
||||||
preferred_contact
|
|
||||||
}
|
|
||||||
plate_no
|
plate_no
|
||||||
plate_st
|
plate_st
|
||||||
v_vin
|
v_vin
|
||||||
@@ -83,28 +97,13 @@ export const QUERY_PARTS_QUEUE = gql`
|
|||||||
actual_completion
|
actual_completion
|
||||||
actual_delivery
|
actual_delivery
|
||||||
actual_in
|
actual_in
|
||||||
|
|
||||||
id
|
id
|
||||||
ins_co_nm
|
|
||||||
ins_ct_fn
|
|
||||||
ins_ct_ln
|
|
||||||
ins_ph1
|
|
||||||
ins_ea
|
|
||||||
est_co_nm
|
|
||||||
est_ph1
|
|
||||||
est_ea
|
|
||||||
est_ct_fn
|
|
||||||
est_ct_ln
|
|
||||||
clm_no
|
clm_no
|
||||||
clm_total
|
clm_total
|
||||||
owner_owing
|
owner_owing
|
||||||
ro_number
|
ro_number
|
||||||
scheduled_completion
|
|
||||||
scheduled_in
|
|
||||||
scheduled_delivery
|
|
||||||
status
|
status
|
||||||
updated_at
|
updated_at
|
||||||
ded_amt
|
|
||||||
vehicleid
|
vehicleid
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { Button, Card, Input, Space, Table } from "antd";
|
|||||||
import React, { useState } from "react";
|
import React, { useState } from "react";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { connect } from "react-redux";
|
import { connect } from "react-redux";
|
||||||
import { Link } from "react-router-dom";
|
import { Link, useHistory } from "react-router-dom";
|
||||||
import { createStructuredSelector } from "reselect";
|
import { createStructuredSelector } from "reselect";
|
||||||
import AlertComponent from "../../components/alert/alert.component";
|
import AlertComponent from "../../components/alert/alert.component";
|
||||||
import JobRemoveFromPartsQueue from "../../components/job-remove-from-parst-queue/job-remove-from-parts-queue.component";
|
import JobRemoveFromPartsQueue from "../../components/job-remove-from-parst-queue/job-remove-from-parts-queue.component";
|
||||||
@@ -14,23 +14,37 @@ import { onlyUnique } from "../../utils/arrayHelper";
|
|||||||
import CurrencyFormatter from "../../utils/CurrencyFormatter";
|
import CurrencyFormatter from "../../utils/CurrencyFormatter";
|
||||||
import { TimeAgoFormatter } from "../../utils/DateFormatter";
|
import { TimeAgoFormatter } from "../../utils/DateFormatter";
|
||||||
import { alphaSort } from "../../utils/sorters";
|
import { alphaSort } from "../../utils/sorters";
|
||||||
|
import { useLocation } from "react-router-dom";
|
||||||
|
import queryString from "query-string";
|
||||||
|
import _ from "lodash";
|
||||||
|
|
||||||
const mapStateToProps = createStructuredSelector({
|
const mapStateToProps = createStructuredSelector({
|
||||||
bodyshop: selectBodyshop,
|
bodyshop: selectBodyshop,
|
||||||
});
|
});
|
||||||
|
|
||||||
export function PartsQueuePageComponent({ bodyshop }) {
|
export function PartsQueuePageComponent({ bodyshop }) {
|
||||||
|
const searchParams = queryString.parse(useLocation().search);
|
||||||
|
const { page, sortcolumn, sortorder, statusFilters } = searchParams;
|
||||||
|
const history = useHistory();
|
||||||
|
|
||||||
const { loading, error, data, refetch } = useQuery(QUERY_PARTS_QUEUE, {
|
const { loading, error, data, refetch } = useQuery(QUERY_PARTS_QUEUE, {
|
||||||
variables: {
|
variables: {
|
||||||
statuses: bodyshop.md_ro_statuses.active_statuses || ["Open", "Open*"],
|
offset: page ? (page - 1) * 25 : 0,
|
||||||
|
limit: 25,
|
||||||
|
statuses: (statusFilters && JSON.parse(statusFilters)) ||
|
||||||
|
bodyshop.md_ro_statuses.active_statuses || ["Open", "Open*"],
|
||||||
|
order: sortcolumn && [
|
||||||
|
{
|
||||||
|
[sortcolumn || "updated_at"]: sortorder
|
||||||
|
? sortorder === "descend"
|
||||||
|
? "desc"
|
||||||
|
: "asc"
|
||||||
|
: "desc",
|
||||||
|
},
|
||||||
|
],
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const [state, setState] = useState({
|
|
||||||
sortedInfo: {},
|
|
||||||
filteredInfo: { text: "" },
|
|
||||||
});
|
|
||||||
|
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const [searchText, setSearchText] = useState("");
|
const [searchText, setSearchText] = useState("");
|
||||||
|
|
||||||
@@ -68,7 +82,17 @@ export function PartsQueuePageComponent({ bodyshop }) {
|
|||||||
: [];
|
: [];
|
||||||
|
|
||||||
const handleTableChange = (pagination, filters, sorter) => {
|
const handleTableChange = (pagination, filters, sorter) => {
|
||||||
setState({ ...state, filteredInfo: filters, sortedInfo: sorter });
|
searchParams.page = pagination.current;
|
||||||
|
searchParams.sortcolumn = sorter.columnKey;
|
||||||
|
searchParams.sortorder = sorter.order;
|
||||||
|
if (filters.status) {
|
||||||
|
searchParams.statusFilters = JSON.stringify(
|
||||||
|
_.flattenDeep(filters.status)
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
delete searchParams.statusFilters;
|
||||||
|
}
|
||||||
|
history.push({ search: queryString.stringify(searchParams) });
|
||||||
};
|
};
|
||||||
|
|
||||||
const columns = [
|
const columns = [
|
||||||
@@ -77,8 +101,7 @@ export function PartsQueuePageComponent({ bodyshop }) {
|
|||||||
dataIndex: "ro_number",
|
dataIndex: "ro_number",
|
||||||
key: "ro_number",
|
key: "ro_number",
|
||||||
sorter: (a, b) => alphaSort(a.ro_number, b.ro_number),
|
sorter: (a, b) => alphaSort(a.ro_number, b.ro_number),
|
||||||
sortOrder:
|
sortOrder: sortcolumn === "ro_number" && sortorder,
|
||||||
state.sortedInfo.columnKey === "ro_number" && state.sortedInfo.order,
|
|
||||||
|
|
||||||
render: (text, record) => (
|
render: (text, record) => (
|
||||||
<Link to={"/manage/jobs/" + record.id}>
|
<Link to={"/manage/jobs/" + record.id}>
|
||||||
@@ -90,9 +113,8 @@ export function PartsQueuePageComponent({ bodyshop }) {
|
|||||||
title: t("jobs.fields.owner"),
|
title: t("jobs.fields.owner"),
|
||||||
dataIndex: "owner",
|
dataIndex: "owner",
|
||||||
key: "owner",
|
key: "owner",
|
||||||
sorter: (a, b) => alphaSort(a.ownr_ln, b.ownr_ln),
|
// sorter: (a, b) => alphaSort(a.ownr_ln, b.ownr_ln),
|
||||||
sortOrder:
|
// sortOrder: sortcolumn === "owner" && sortorder,
|
||||||
state.sortedInfo.columnKey === "owner" && state.sortedInfo.order,
|
|
||||||
render: (text, record) => {
|
render: (text, record) => {
|
||||||
return record.owner ? (
|
return record.owner ? (
|
||||||
<Link to={"/manage/owners/" + record.owner.id}>
|
<Link to={"/manage/owners/" + record.owner.id}>
|
||||||
@@ -112,8 +134,7 @@ export function PartsQueuePageComponent({ bodyshop }) {
|
|||||||
dataIndex: "status",
|
dataIndex: "status",
|
||||||
key: "status",
|
key: "status",
|
||||||
sorter: (a, b) => alphaSort(a.status, b.status),
|
sorter: (a, b) => alphaSort(a.status, b.status),
|
||||||
sortOrder:
|
sortOrder: sortcolumn === "status" && sortorder,
|
||||||
state.sortedInfo.columnKey === "status" && state.sortedInfo.order,
|
|
||||||
filters:
|
filters:
|
||||||
(jobs &&
|
(jobs &&
|
||||||
jobs
|
jobs
|
||||||
@@ -156,8 +177,7 @@ export function PartsQueuePageComponent({ bodyshop }) {
|
|||||||
dataIndex: "plate_no",
|
dataIndex: "plate_no",
|
||||||
key: "plate_no",
|
key: "plate_no",
|
||||||
sorter: (a, b) => alphaSort(a.plate_no, b.plate_no),
|
sorter: (a, b) => alphaSort(a.plate_no, b.plate_no),
|
||||||
sortOrder:
|
sortOrder: sortcolumn === "plate_no" && sortorder,
|
||||||
state.sortedInfo.columnKey === "plate_no" && state.sortedInfo.order,
|
|
||||||
render: (text, record) => {
|
render: (text, record) => {
|
||||||
return record.plate_no ? record.plate_no : "";
|
return record.plate_no ? record.plate_no : "";
|
||||||
},
|
},
|
||||||
@@ -168,8 +188,7 @@ export function PartsQueuePageComponent({ bodyshop }) {
|
|||||||
key: "clm_no",
|
key: "clm_no",
|
||||||
ellipsis: true,
|
ellipsis: true,
|
||||||
sorter: (a, b) => alphaSort(a.clm_no, b.clm_no),
|
sorter: (a, b) => alphaSort(a.clm_no, b.clm_no),
|
||||||
sortOrder:
|
sortOrder: sortcolumn === "clm_no" && sortorder,
|
||||||
state.sortedInfo.columnKey === "clm_no" && state.sortedInfo.order,
|
|
||||||
render: (text, record) => {
|
render: (text, record) => {
|
||||||
return record.clm_no ? (
|
return record.clm_no ? (
|
||||||
<span>{record.clm_no}</span>
|
<span>{record.clm_no}</span>
|
||||||
@@ -183,8 +202,7 @@ export function PartsQueuePageComponent({ bodyshop }) {
|
|||||||
dataIndex: "clm_total",
|
dataIndex: "clm_total",
|
||||||
key: "clm_total",
|
key: "clm_total",
|
||||||
sorter: (a, b) => a.clm_total - b.clm_total,
|
sorter: (a, b) => a.clm_total - b.clm_total,
|
||||||
sortOrder:
|
sortOrder: sortcolumn === "clm_total" && sortorder,
|
||||||
state.sortedInfo.columnKey === "clm_total" && state.sortedInfo.order,
|
|
||||||
render: (text, record) => {
|
render: (text, record) => {
|
||||||
return record.clm_total ? (
|
return record.clm_total ? (
|
||||||
<CurrencyFormatter>{record.clm_total}</CurrencyFormatter>
|
<CurrencyFormatter>{record.clm_total}</CurrencyFormatter>
|
||||||
@@ -232,7 +250,12 @@ export function PartsQueuePageComponent({ bodyshop }) {
|
|||||||
>
|
>
|
||||||
<Table
|
<Table
|
||||||
loading={loading}
|
loading={loading}
|
||||||
pagination={false}
|
pagination={{
|
||||||
|
position: "top",
|
||||||
|
pageSize: 25,
|
||||||
|
current: parseInt(page || 1),
|
||||||
|
total: data && data.jobs_aggregate.aggregate.count,
|
||||||
|
}}
|
||||||
columns={columns}
|
columns={columns}
|
||||||
rowKey="id"
|
rowKey="id"
|
||||||
dataSource={jobs}
|
dataSource={jobs}
|
||||||
|
|||||||
@@ -658,7 +658,12 @@
|
|||||||
"confirmdelete": "Are you sure you want to delete these documents. This CANNOT be undone.",
|
"confirmdelete": "Are you sure you want to delete these documents. This CANNOT be undone.",
|
||||||
"doctype": "Document Type",
|
"doctype": "Document Type",
|
||||||
"newjobid": "Assign to Job",
|
"newjobid": "Assign to Job",
|
||||||
"upload": "Upload"
|
"storageexceeded": "You've exceeded your storage limit for this job. Please remove documents, or increase your storage plan.",
|
||||||
|
"storageexceeded_title": "Storage Limit Exceeded",
|
||||||
|
"upload": "Upload",
|
||||||
|
"upload_limitexceeded": "Uploading all selected files will exceed the job storage limit for your shop. ",
|
||||||
|
"upload_limitexceeded_title": "Unable to upload file(s)",
|
||||||
|
"usage": "of job storage used. ({{used}} / {{total}})"
|
||||||
},
|
},
|
||||||
"successes": {
|
"successes": {
|
||||||
"delete": "Document deleted successfully.",
|
"delete": "Document deleted successfully.",
|
||||||
@@ -1197,6 +1202,7 @@
|
|||||||
"waived": "Waived"
|
"waived": "Waived"
|
||||||
},
|
},
|
||||||
"deleteconfirm": "Are you sure you want to delete this job? This cannot be undone. ",
|
"deleteconfirm": "Are you sure you want to delete this job? This cannot be undone. ",
|
||||||
|
"deleteintake": "Delete Intake",
|
||||||
"deliverchecklist": "Deliver Checklist",
|
"deliverchecklist": "Deliver Checklist",
|
||||||
"difference": "Difference",
|
"difference": "Difference",
|
||||||
"diskscan": "Scan Disk for Estimates",
|
"diskscan": "Scan Disk for Estimates",
|
||||||
|
|||||||
@@ -658,7 +658,12 @@
|
|||||||
"confirmdelete": "",
|
"confirmdelete": "",
|
||||||
"doctype": "",
|
"doctype": "",
|
||||||
"newjobid": "",
|
"newjobid": "",
|
||||||
"upload": "Subir"
|
"storageexceeded": "",
|
||||||
|
"storageexceeded_title": "",
|
||||||
|
"upload": "Subir",
|
||||||
|
"upload_limitexceeded": "",
|
||||||
|
"upload_limitexceeded_title": "",
|
||||||
|
"usage": ""
|
||||||
},
|
},
|
||||||
"successes": {
|
"successes": {
|
||||||
"delete": "Documento eliminado con éxito.",
|
"delete": "Documento eliminado con éxito.",
|
||||||
@@ -1197,6 +1202,7 @@
|
|||||||
"waived": ""
|
"waived": ""
|
||||||
},
|
},
|
||||||
"deleteconfirm": "",
|
"deleteconfirm": "",
|
||||||
|
"deleteintake": "",
|
||||||
"deliverchecklist": "",
|
"deliverchecklist": "",
|
||||||
"difference": "",
|
"difference": "",
|
||||||
"diskscan": "",
|
"diskscan": "",
|
||||||
|
|||||||
@@ -658,7 +658,12 @@
|
|||||||
"confirmdelete": "",
|
"confirmdelete": "",
|
||||||
"doctype": "",
|
"doctype": "",
|
||||||
"newjobid": "",
|
"newjobid": "",
|
||||||
"upload": "Télécharger"
|
"storageexceeded": "",
|
||||||
|
"storageexceeded_title": "",
|
||||||
|
"upload": "Télécharger",
|
||||||
|
"upload_limitexceeded": "",
|
||||||
|
"upload_limitexceeded_title": "",
|
||||||
|
"usage": ""
|
||||||
},
|
},
|
||||||
"successes": {
|
"successes": {
|
||||||
"delete": "Le document a bien été supprimé.",
|
"delete": "Le document a bien été supprimé.",
|
||||||
@@ -1197,6 +1202,7 @@
|
|||||||
"waived": ""
|
"waived": ""
|
||||||
},
|
},
|
||||||
"deleteconfirm": "",
|
"deleteconfirm": "",
|
||||||
|
"deleteintake": "",
|
||||||
"deliverchecklist": "",
|
"deliverchecklist": "",
|
||||||
"difference": "",
|
"difference": "",
|
||||||
"diskscan": "",
|
"diskscan": "",
|
||||||
|
|||||||
10
client/src/utils/formatbytes.js
Normal file
10
client/src/utils/formatbytes.js
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
export default function formatBytes(a, b = 2) {
|
||||||
|
if (0 === a || !a) return "0 Bytes";
|
||||||
|
const c = 0 > b ? 0 : b,
|
||||||
|
d = Math.floor(Math.log(a) / Math.log(1024));
|
||||||
|
return (
|
||||||
|
parseFloat((a / Math.pow(1024, d)).toFixed(c)) +
|
||||||
|
" " +
|
||||||
|
["Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"][d]
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
- args:
|
||||||
|
cascade: false
|
||||||
|
read_only: false
|
||||||
|
sql: ALTER TABLE "public"."documents" DROP COLUMN "size";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
- args:
|
||||||
|
cascade: false
|
||||||
|
read_only: false
|
||||||
|
sql: ALTER TABLE "public"."documents" ADD COLUMN "size" integer NOT NULL DEFAULT
|
||||||
|
0;
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
- args:
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: documents
|
||||||
|
schema: public
|
||||||
|
type: drop_insert_permission
|
||||||
|
- args:
|
||||||
|
permission:
|
||||||
|
check:
|
||||||
|
_or:
|
||||||
|
- job:
|
||||||
|
bodyshop:
|
||||||
|
associations:
|
||||||
|
_and:
|
||||||
|
- user:
|
||||||
|
authid:
|
||||||
|
_eq: X-Hasura-User-Id
|
||||||
|
- active:
|
||||||
|
_eq: true
|
||||||
|
- bodyshop:
|
||||||
|
associations:
|
||||||
|
_and:
|
||||||
|
- user:
|
||||||
|
authid:
|
||||||
|
_eq: X-Hasura-User-Id
|
||||||
|
- active:
|
||||||
|
_eq: true
|
||||||
|
columns:
|
||||||
|
- billid
|
||||||
|
- bodyshopid
|
||||||
|
- created_at
|
||||||
|
- extension
|
||||||
|
- id
|
||||||
|
- jobid
|
||||||
|
- key
|
||||||
|
- name
|
||||||
|
- type
|
||||||
|
- updated_at
|
||||||
|
- uploaded_by
|
||||||
|
set: {}
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: documents
|
||||||
|
schema: public
|
||||||
|
type: create_insert_permission
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
- args:
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: documents
|
||||||
|
schema: public
|
||||||
|
type: drop_insert_permission
|
||||||
|
- args:
|
||||||
|
permission:
|
||||||
|
check:
|
||||||
|
_or:
|
||||||
|
- job:
|
||||||
|
bodyshop:
|
||||||
|
associations:
|
||||||
|
_and:
|
||||||
|
- user:
|
||||||
|
authid:
|
||||||
|
_eq: X-Hasura-User-Id
|
||||||
|
- active:
|
||||||
|
_eq: true
|
||||||
|
- bodyshop:
|
||||||
|
associations:
|
||||||
|
_and:
|
||||||
|
- user:
|
||||||
|
authid:
|
||||||
|
_eq: X-Hasura-User-Id
|
||||||
|
- active:
|
||||||
|
_eq: true
|
||||||
|
columns:
|
||||||
|
- billid
|
||||||
|
- bodyshopid
|
||||||
|
- created_at
|
||||||
|
- extension
|
||||||
|
- id
|
||||||
|
- jobid
|
||||||
|
- key
|
||||||
|
- name
|
||||||
|
- size
|
||||||
|
- type
|
||||||
|
- updated_at
|
||||||
|
- uploaded_by
|
||||||
|
set: {}
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: documents
|
||||||
|
schema: public
|
||||||
|
type: create_insert_permission
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
- args:
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: documents
|
||||||
|
schema: public
|
||||||
|
type: drop_select_permission
|
||||||
|
- args:
|
||||||
|
permission:
|
||||||
|
allow_aggregations: false
|
||||||
|
columns:
|
||||||
|
- billid
|
||||||
|
- bodyshopid
|
||||||
|
- created_at
|
||||||
|
- extension
|
||||||
|
- id
|
||||||
|
- jobid
|
||||||
|
- key
|
||||||
|
- name
|
||||||
|
- type
|
||||||
|
- updated_at
|
||||||
|
- uploaded_by
|
||||||
|
computed_fields: []
|
||||||
|
filter:
|
||||||
|
_or:
|
||||||
|
- job:
|
||||||
|
bodyshop:
|
||||||
|
associations:
|
||||||
|
_and:
|
||||||
|
- user:
|
||||||
|
authid:
|
||||||
|
_eq: X-Hasura-User-Id
|
||||||
|
- active:
|
||||||
|
_eq: true
|
||||||
|
- bodyshop:
|
||||||
|
associations:
|
||||||
|
_and:
|
||||||
|
- user:
|
||||||
|
authid:
|
||||||
|
_eq: X-Hasura-User-Id
|
||||||
|
- active:
|
||||||
|
_eq: true
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: documents
|
||||||
|
schema: public
|
||||||
|
type: create_select_permission
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
- args:
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: documents
|
||||||
|
schema: public
|
||||||
|
type: drop_select_permission
|
||||||
|
- args:
|
||||||
|
permission:
|
||||||
|
allow_aggregations: false
|
||||||
|
columns:
|
||||||
|
- billid
|
||||||
|
- bodyshopid
|
||||||
|
- created_at
|
||||||
|
- extension
|
||||||
|
- id
|
||||||
|
- jobid
|
||||||
|
- key
|
||||||
|
- name
|
||||||
|
- size
|
||||||
|
- type
|
||||||
|
- updated_at
|
||||||
|
- uploaded_by
|
||||||
|
computed_fields: []
|
||||||
|
filter:
|
||||||
|
_or:
|
||||||
|
- job:
|
||||||
|
bodyshop:
|
||||||
|
associations:
|
||||||
|
_and:
|
||||||
|
- user:
|
||||||
|
authid:
|
||||||
|
_eq: X-Hasura-User-Id
|
||||||
|
- active:
|
||||||
|
_eq: true
|
||||||
|
- bodyshop:
|
||||||
|
associations:
|
||||||
|
_and:
|
||||||
|
- user:
|
||||||
|
authid:
|
||||||
|
_eq: X-Hasura-User-Id
|
||||||
|
- active:
|
||||||
|
_eq: true
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: documents
|
||||||
|
schema: public
|
||||||
|
type: create_select_permission
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
- args:
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: documents
|
||||||
|
schema: public
|
||||||
|
type: drop_select_permission
|
||||||
|
- args:
|
||||||
|
permission:
|
||||||
|
allow_aggregations: false
|
||||||
|
columns:
|
||||||
|
- billid
|
||||||
|
- bodyshopid
|
||||||
|
- created_at
|
||||||
|
- extension
|
||||||
|
- id
|
||||||
|
- jobid
|
||||||
|
- key
|
||||||
|
- name
|
||||||
|
- size
|
||||||
|
- type
|
||||||
|
- updated_at
|
||||||
|
- uploaded_by
|
||||||
|
computed_fields: []
|
||||||
|
filter:
|
||||||
|
_or:
|
||||||
|
- job:
|
||||||
|
bodyshop:
|
||||||
|
associations:
|
||||||
|
_and:
|
||||||
|
- user:
|
||||||
|
authid:
|
||||||
|
_eq: X-Hasura-User-Id
|
||||||
|
- active:
|
||||||
|
_eq: true
|
||||||
|
- bodyshop:
|
||||||
|
associations:
|
||||||
|
_and:
|
||||||
|
- user:
|
||||||
|
authid:
|
||||||
|
_eq: X-Hasura-User-Id
|
||||||
|
- active:
|
||||||
|
_eq: true
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: documents
|
||||||
|
schema: public
|
||||||
|
type: create_select_permission
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
- args:
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: documents
|
||||||
|
schema: public
|
||||||
|
type: drop_select_permission
|
||||||
|
- args:
|
||||||
|
permission:
|
||||||
|
allow_aggregations: true
|
||||||
|
columns:
|
||||||
|
- billid
|
||||||
|
- bodyshopid
|
||||||
|
- created_at
|
||||||
|
- extension
|
||||||
|
- id
|
||||||
|
- jobid
|
||||||
|
- key
|
||||||
|
- name
|
||||||
|
- size
|
||||||
|
- type
|
||||||
|
- updated_at
|
||||||
|
- uploaded_by
|
||||||
|
computed_fields: []
|
||||||
|
filter:
|
||||||
|
_or:
|
||||||
|
- job:
|
||||||
|
bodyshop:
|
||||||
|
associations:
|
||||||
|
_and:
|
||||||
|
- user:
|
||||||
|
authid:
|
||||||
|
_eq: X-Hasura-User-Id
|
||||||
|
- active:
|
||||||
|
_eq: true
|
||||||
|
- bodyshop:
|
||||||
|
associations:
|
||||||
|
_and:
|
||||||
|
- user:
|
||||||
|
authid:
|
||||||
|
_eq: X-Hasura-User-Id
|
||||||
|
- active:
|
||||||
|
_eq: true
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: documents
|
||||||
|
schema: public
|
||||||
|
type: create_select_permission
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
- args:
|
||||||
|
cascade: false
|
||||||
|
read_only: false
|
||||||
|
sql: ALTER TABLE "public"."bodyshops" DROP COLUMN "jobsizelimit";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
- args:
|
||||||
|
cascade: false
|
||||||
|
read_only: false
|
||||||
|
sql: ALTER TABLE "public"."bodyshops" ADD COLUMN "jobsizelimit" integer NOT NULL
|
||||||
|
DEFAULT 26214400;
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
- args:
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: bodyshops
|
||||||
|
schema: public
|
||||||
|
type: drop_select_permission
|
||||||
|
- args:
|
||||||
|
permission:
|
||||||
|
allow_aggregations: false
|
||||||
|
columns:
|
||||||
|
- accountingconfig
|
||||||
|
- address1
|
||||||
|
- address2
|
||||||
|
- appt_alt_transport
|
||||||
|
- appt_colors
|
||||||
|
- appt_length
|
||||||
|
- bill_tax_rates
|
||||||
|
- city
|
||||||
|
- country
|
||||||
|
- created_at
|
||||||
|
- default_adjustment_rate
|
||||||
|
- deliverchecklist
|
||||||
|
- email
|
||||||
|
- enforce_class
|
||||||
|
- federal_tax_id
|
||||||
|
- id
|
||||||
|
- imexshopid
|
||||||
|
- inhousevendorid
|
||||||
|
- insurance_vendor_id
|
||||||
|
- intakechecklist
|
||||||
|
- logo_img_path
|
||||||
|
- md_categories
|
||||||
|
- md_classes
|
||||||
|
- md_hour_split
|
||||||
|
- md_ins_cos
|
||||||
|
- md_labor_rates
|
||||||
|
- md_messaging_presets
|
||||||
|
- md_notes_presets
|
||||||
|
- md_order_statuses
|
||||||
|
- md_parts_locations
|
||||||
|
- md_payment_types
|
||||||
|
- md_rbac
|
||||||
|
- md_referral_sources
|
||||||
|
- md_responsibility_centers
|
||||||
|
- md_ro_statuses
|
||||||
|
- messagingservicesid
|
||||||
|
- phone
|
||||||
|
- prodtargethrs
|
||||||
|
- production_config
|
||||||
|
- region_config
|
||||||
|
- schedule_end_time
|
||||||
|
- schedule_start_time
|
||||||
|
- scoreboard_target
|
||||||
|
- shopname
|
||||||
|
- shoprates
|
||||||
|
- speedprint
|
||||||
|
- ssbuckets
|
||||||
|
- state
|
||||||
|
- state_tax_id
|
||||||
|
- stripe_acct_id
|
||||||
|
- sub_status
|
||||||
|
- target_touchtime
|
||||||
|
- template_header
|
||||||
|
- textid
|
||||||
|
- updated_at
|
||||||
|
- use_fippa
|
||||||
|
- workingdays
|
||||||
|
- zip_post
|
||||||
|
computed_fields: []
|
||||||
|
filter:
|
||||||
|
associations:
|
||||||
|
user:
|
||||||
|
authid:
|
||||||
|
_eq: X-Hasura-User-Id
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: bodyshops
|
||||||
|
schema: public
|
||||||
|
type: create_select_permission
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
- args:
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: bodyshops
|
||||||
|
schema: public
|
||||||
|
type: drop_select_permission
|
||||||
|
- args:
|
||||||
|
permission:
|
||||||
|
allow_aggregations: false
|
||||||
|
columns:
|
||||||
|
- accountingconfig
|
||||||
|
- address1
|
||||||
|
- address2
|
||||||
|
- appt_alt_transport
|
||||||
|
- appt_colors
|
||||||
|
- appt_length
|
||||||
|
- bill_tax_rates
|
||||||
|
- city
|
||||||
|
- country
|
||||||
|
- created_at
|
||||||
|
- default_adjustment_rate
|
||||||
|
- deliverchecklist
|
||||||
|
- email
|
||||||
|
- enforce_class
|
||||||
|
- federal_tax_id
|
||||||
|
- id
|
||||||
|
- imexshopid
|
||||||
|
- inhousevendorid
|
||||||
|
- insurance_vendor_id
|
||||||
|
- intakechecklist
|
||||||
|
- jobsizelimit
|
||||||
|
- logo_img_path
|
||||||
|
- md_categories
|
||||||
|
- md_classes
|
||||||
|
- md_hour_split
|
||||||
|
- md_ins_cos
|
||||||
|
- md_labor_rates
|
||||||
|
- md_messaging_presets
|
||||||
|
- md_notes_presets
|
||||||
|
- md_order_statuses
|
||||||
|
- md_parts_locations
|
||||||
|
- md_payment_types
|
||||||
|
- md_rbac
|
||||||
|
- md_referral_sources
|
||||||
|
- md_responsibility_centers
|
||||||
|
- md_ro_statuses
|
||||||
|
- messagingservicesid
|
||||||
|
- phone
|
||||||
|
- prodtargethrs
|
||||||
|
- production_config
|
||||||
|
- region_config
|
||||||
|
- schedule_end_time
|
||||||
|
- schedule_start_time
|
||||||
|
- scoreboard_target
|
||||||
|
- shopname
|
||||||
|
- shoprates
|
||||||
|
- speedprint
|
||||||
|
- ssbuckets
|
||||||
|
- state
|
||||||
|
- state_tax_id
|
||||||
|
- stripe_acct_id
|
||||||
|
- sub_status
|
||||||
|
- target_touchtime
|
||||||
|
- template_header
|
||||||
|
- textid
|
||||||
|
- updated_at
|
||||||
|
- use_fippa
|
||||||
|
- workingdays
|
||||||
|
- zip_post
|
||||||
|
computed_fields: []
|
||||||
|
filter:
|
||||||
|
associations:
|
||||||
|
user:
|
||||||
|
authid:
|
||||||
|
_eq: X-Hasura-User-Id
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: bodyshops
|
||||||
|
schema: public
|
||||||
|
type: create_select_permission
|
||||||
@@ -750,6 +750,7 @@ tables:
|
|||||||
- inhousevendorid
|
- inhousevendorid
|
||||||
- insurance_vendor_id
|
- insurance_vendor_id
|
||||||
- intakechecklist
|
- intakechecklist
|
||||||
|
- jobsizelimit
|
||||||
- logo_img_path
|
- logo_img_path
|
||||||
- md_categories
|
- md_categories
|
||||||
- md_classes
|
- md_classes
|
||||||
@@ -1488,6 +1489,7 @@ tables:
|
|||||||
- jobid
|
- jobid
|
||||||
- key
|
- key
|
||||||
- name
|
- name
|
||||||
|
- size
|
||||||
- type
|
- type
|
||||||
- updated_at
|
- updated_at
|
||||||
- uploaded_by
|
- uploaded_by
|
||||||
@@ -1503,6 +1505,7 @@ tables:
|
|||||||
- jobid
|
- jobid
|
||||||
- key
|
- key
|
||||||
- name
|
- name
|
||||||
|
- size
|
||||||
- type
|
- type
|
||||||
- updated_at
|
- updated_at
|
||||||
- uploaded_by
|
- uploaded_by
|
||||||
@@ -1525,6 +1528,7 @@ tables:
|
|||||||
_eq: X-Hasura-User-Id
|
_eq: X-Hasura-User-Id
|
||||||
- active:
|
- active:
|
||||||
_eq: true
|
_eq: true
|
||||||
|
allow_aggregations: true
|
||||||
update_permissions:
|
update_permissions:
|
||||||
- role: user
|
- role: user
|
||||||
permission:
|
permission:
|
||||||
|
|||||||
Reference in New Issue
Block a user