IO-899 WIP CC Improvements

This commit is contained in:
Patrick Fic
2021-04-13 16:12:43 -07:00
parent 472342481b
commit 18531dad6a
23 changed files with 633 additions and 53 deletions

View File

@@ -1,4 +1,4 @@
<babeledit_project version="1.2" be_version="2.7.1"> <babeledit_project be_version="2.7.1" version="1.2">
<!-- <!--
BabelEdit project file BabelEdit project file
@@ -7876,6 +7876,27 @@
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
<concept_node>
<name>damage</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>damagewaiver</name> <name>damagewaiver</name>
<definition_loaded>false</definition_loaded> <definition_loaded>false</definition_loaded>
@@ -8469,6 +8490,27 @@
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
<concept_node>
<name>cardueforservice</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>
<folder_node> <folder_node>
<name>convertform</name> <name>convertform</name>
<children> <children>
@@ -8537,6 +8579,27 @@
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
<concept_node>
<name>dlexpirebeforereturn</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>driverinformation</name> <name>driverinformation</name>
<definition_loaded>false</definition_loaded> <definition_loaded>false</definition_loaded>
@@ -9564,6 +9627,27 @@
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
<concept_node>
<name>uniquefleet</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>usage</name> <name>usage</name>
<definition_loaded>false</definition_loaded> <definition_loaded>false</definition_loaded>

View File

@@ -6,7 +6,7 @@ import { alphaSort } from "../../utils/sorters";
export default function ContractsCarsComponent({ export default function ContractsCarsComponent({
loading, loading,
data, data,
selectedCar, selectedCarId,
handleSelect, handleSelect,
}) { }) {
const [state, setState] = useState({ const [state, setState] = useState({
@@ -117,7 +117,7 @@ export default function ContractsCarsComponent({
rowSelection={{ rowSelection={{
onSelect: handleSelect, onSelect: handleSelect,
type: "radio", type: "radio",
selectedRowKeys: [selectedCar], selectedRowKeys: [selectedCarId],
}} }}
onRow={(record, rowIndex) => { onRow={(record, rowIndex) => {
return { return {

View File

@@ -13,12 +13,13 @@ export default function ContractCarsContainer({ selectedCarState, form }) {
const [selectedCar, setSelectedCar] = selectedCarState; const [selectedCar, setSelectedCar] = selectedCarState;
const handleSelect = (record) => { const handleSelect = (record) => {
setSelectedCar(record.id); setSelectedCar(record);
form.setFieldsValue({ form.setFieldsValue({
kmstart: record.mileage, kmstart: record.mileage,
dailyrate: record.dailycost, dailyrate: record.dailycost,
fuelout: record.fuel, fuelout: record.fuel,
damage: record.damage,
}); });
}; };
@@ -26,7 +27,7 @@ export default function ContractCarsContainer({ selectedCarState, form }) {
return ( return (
<ContractCarsComponent <ContractCarsComponent
handleSelect={handleSelect} handleSelect={handleSelect}
selectedCar={selectedCar} selectedCarId={selectedCar && selectedCar.id}
loading={loading} loading={loading}
data={data ? data.courtesycars : []} data={data ? data.courtesycars : []}
/> />

View File

@@ -1,4 +1,5 @@
import { Form, Input, InputNumber, Space } from "antd"; import { Form, Input, InputNumber, Space } from "antd";
import { WarningFilled } from "@ant-design/icons";
import React from "react"; import React from "react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import ContractLicenseDecodeButton from "../contract-license-decode-button/contract-license-decode-button.component"; import ContractLicenseDecodeButton from "../contract-license-decode-button/contract-license-decode-button.component";
@@ -12,11 +13,15 @@ import InputPhone, {
} from "../form-items-formatted/phone-form-item.component"; } from "../form-items-formatted/phone-form-item.component";
import LayoutFormRow from "../layout-form-row/layout-form-row.component"; import LayoutFormRow from "../layout-form-row/layout-form-row.component";
import ContractFormJobPrefill from "./contract-form-job-prefill.component"; import ContractFormJobPrefill from "./contract-form-job-prefill.component";
import FormDateTimePicker from "../form-date-time-picker/form-date-time-picker.component";
import moment from "moment";
import { DateFormatter } from "../../utils/DateFormatter";
export default function ContractFormComponent({ export default function ContractFormComponent({
form, form,
create = false, create = false,
selectedJobState, selectedJobState,
selectedCar,
}) { }) {
const { t } = useTranslation(); const { t } = useTranslation();
return ( return (
@@ -48,24 +53,24 @@ export default function ContractFormComponent({
}, },
]} ]}
> >
<FormDatePicker /> <FormDateTimePicker />
</Form.Item> </Form.Item>
<Form.Item <Form.Item
label={t("contracts.fields.scheduledreturn")} label={t("contracts.fields.scheduledreturn")}
name="scheduledreturn" name="scheduledreturn"
> >
<FormDatePicker /> <FormDateTimePicker />
</Form.Item> </Form.Item>
{create ? null : ( {create ? null : (
<Form.Item <Form.Item
label={t("contracts.fields.actualreturn")} label={t("contracts.fields.actualreturn")}
name="actualreturn" name="actualreturn"
> >
<FormDatePicker /> <FormDateTimePicker />
</Form.Item> </Form.Item>
)} )}
</LayoutFormRow> </LayoutFormRow>
<LayoutFormRow> <LayoutFormRow grow>
<Form.Item <Form.Item
label={t("contracts.fields.kmstart")} label={t("contracts.fields.kmstart")}
name="kmstart" name="kmstart"
@@ -78,11 +83,54 @@ export default function ContractFormComponent({
> >
<InputNumber /> <InputNumber />
</Form.Item> </Form.Item>
{create && (
<Form.Item
shouldUpdate={(p, c) =>
p.kmstart !== c.kmstart || p.scheduledreturn !== c.scheduledreturn
}
>
{() => {
const mileageOver =
selectedCar &&
selectedCar.nextservicekm <= form.getFieldValue("kmstart");
const dueForService =
selectedCar &&
selectedCar.nextservicedate &&
moment(selectedCar.nextservicedate).isBefore(
moment(form.getFieldValue("scheduledreturn"))
);
console.log(`dueForService`, dueForService);
if (mileageOver || dueForService)
return (
<Space direction="vertical" style={{ color: "tomato" }}>
<span>
<WarningFilled style={{ marginRight: ".3rem" }} />
{t("contracts.labels.cardueforservice")}
</span>
<span>{`${
selectedCar && selectedCar.nextservicekm
} km`}</span>
<span>
<DateFormatter>
{selectedCar && selectedCar.nextservicedate}
</DateFormatter>
</span>
</Space>
);
return <></>;
}}
</Form.Item>
)}
{create ? null : ( {create ? null : (
<Form.Item label={t("contracts.fields.kmend")} name="kmend"> <Form.Item label={t("contracts.fields.kmend")} name="kmend">
<InputNumber /> <InputNumber />
</Form.Item> </Form.Item>
)} )}
<Form.Item label={t("contracts.fields.damage")} name="damage">
<Input.TextArea />
</Form.Item>
</LayoutFormRow> </LayoutFormRow>
<LayoutFormRow> <LayoutFormRow>
<Form.Item <Form.Item
@@ -135,27 +183,42 @@ export default function ContractFormComponent({
<Input /> <Input />
</Form.Item> </Form.Item>
<Form.Item <Form.Item
label={t("contracts.fields.driver_dlexpiry")} shouldUpdate={(p, c) =>
name="driver_dlexpiry" p.driver_dlexpiry !== c.driver_dlexpiry ||
rules={[ p.scheduledreturn !== c.scheduledreturn
{ }
required: true,
message: t("general.validation.required"),
},
]}
> >
<FormDatePicker /> {() => {
const dlExpiresBeforeReturn = moment(
form.getFieldValue("driver_dlexpiry")
).isBefore(moment(form.getFieldValue("scheduledreturn")));
return (
<div>
<Form.Item
label={t("contracts.fields.driver_dlexpiry")}
name="driver_dlexpiry"
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
>
<FormDatePicker />
</Form.Item>
{dlExpiresBeforeReturn && (
<Space style={{ color: "tomato" }}>
<WarningFilled />
<span>{t("contracts.labels.dlexpirebeforereturn")}</span>
</Space>
)}
</div>
);
}}
</Form.Item> </Form.Item>
<Form.Item
label={t("contracts.fields.driver_dlst")} <Form.Item label={t("contracts.fields.driver_dlst")} name="driver_dlst">
name="driver_dlst"
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
>
<Input /> <Input />
</Form.Item> </Form.Item>
<Form.Item <Form.Item

View File

@@ -149,9 +149,7 @@ export default function CourtesyCarCreateFormComponent({ form, saveLoading }) {
) { ) {
return Promise.resolve(); return Promise.resolve();
} }
return Promise.reject( return Promise.reject(t("courtesycars.labels.uniquefleet"));
t("vendors.validation.unique_vendor_name")
);
} else { } else {
return Promise.resolve(); return Promise.resolve();
} }

View File

@@ -4,6 +4,8 @@ export const INSERT_NEW_CONTRACT = gql`
mutation INSERT_NEW_CONTRACT( mutation INSERT_NEW_CONTRACT(
$contract: [cccontracts_insert_input!]! $contract: [cccontracts_insert_input!]!
$ccId: uuid! $ccId: uuid!
$damage: String
$mileage: numeric
) { ) {
insert_cccontracts(objects: $contract) { insert_cccontracts(objects: $contract) {
returning { returning {
@@ -12,10 +14,16 @@ export const INSERT_NEW_CONTRACT = gql`
} }
update_courtesycars_by_pk( update_courtesycars_by_pk(
pk_columns: { id: $ccId } pk_columns: { id: $ccId }
_set: { status: "courtesycars.status.out" } _set: {
status: "courtesycars.status.out"
mileage: $mileage
damage: $damage
}
) { ) {
status status
id id
damage
mileage
} }
} }
`; `;
@@ -88,6 +96,7 @@ export const QUERY_CONTRACT_BY_PK = gql`
coverage coverage
fuelin fuelin
fuelout fuelout
damage
job { job {
id id

View File

@@ -36,6 +36,9 @@ export const QUERY_AVAILABLE_CC = gql`
year year
dailycost dailycost
mileage mileage
notes
nextservicekm
nextservicedate
} }
} }
`; `;

View File

@@ -45,6 +45,7 @@ export default function ContractCreatePageComponent({
create create
form={form} form={form}
selectedJobState={selectedJobState} selectedJobState={selectedJobState}
selectedCar={selectedCarState[0]}
/> />
</div> </div>
</Col> </Col>

View File

@@ -38,37 +38,40 @@ export function ContractCreatePageContainer({
); );
const [insertContract] = useMutation(INSERT_NEW_CONTRACT); const [insertContract] = useMutation(INSERT_NEW_CONTRACT);
const handleFinish = (values) => { const handleFinish = async (values) => {
if (!!selectedCarState[0] && !!selectedJobState[0]) { if (!!selectedCarState[0] && !!selectedJobState[0]) {
setLoading(true); setLoading(true);
insertContract({ const result = await insertContract({
variables: { variables: {
ccId: selectedCarState[0], ccId: selectedCarState[0].id,
damage: values.damage,
mileage: values.kmstart,
contract: { contract: {
...values, ...values,
status: "contracts.status.out", status: "contracts.status.out",
courtesycarid: selectedCarState[0], courtesycarid: selectedCarState[0].id,
jobid: selectedJobState[0], jobid: selectedJobState[0],
}, },
}, },
}) });
.then((response) => { if (!result.errors) {
notification["success"]({ //Update the courtesy car to have the damage.
message: t("contracts.successes.saved"), notification["success"]({
}); message: t("contracts.successes.saved"),
form.resetFields(); });
form.resetFields();
history.push( form.resetFields();
`/manage/courtesycars/contracts/${response.data.insert_cccontracts.returning[0].id}` form.resetFields();
); history.push(
}) `/manage/courtesycars/contracts/${result.data.insert_cccontracts.returning[0].id}`
.catch((error) =>
notification["error"]({
message: t("contracts.errors.saving", {
error: JSON.stringify(error),
}),
})
); );
} else {
notification["error"]({
message: t("contracts.errors.saving", {
error: JSON.stringify(!result.errors),
}),
});
}
} else { } else {
notification["error"]({ notification["error"]({
message: t("contracts.errors.selectjobandcar"), message: t("contracts.errors.selectjobandcar"),

View File

@@ -501,6 +501,7 @@
"coverage": "Coverage", "coverage": "Coverage",
"dailyfreekm": "Daily Free Mileage", "dailyfreekm": "Daily Free Mileage",
"dailyrate": "Daily Rate", "dailyrate": "Daily Rate",
"damage": "Existing Damage",
"damagewaiver": "Damage Waiver", "damagewaiver": "Damage Waiver",
"driver": "Driver", "driver": "Driver",
"driver_addr1": "Driver Address 1", "driver_addr1": "Driver Address 1",
@@ -531,11 +532,13 @@
"labels": { "labels": {
"agreement": "Agreement {{agreement_num}} - {{status}}", "agreement": "Agreement {{agreement_num}} - {{status}}",
"availablecars": "Available Cars", "availablecars": "Available Cars",
"cardueforservice": "The courtesy car is due for servicing.",
"convertform": { "convertform": {
"applycleanupcharge": "Apply cleanup charge?", "applycleanupcharge": "Apply cleanup charge?",
"refuelqty": "Refuel qty.?" "refuelqty": "Refuel qty.?"
}, },
"correctdataonform": "Please review the information above. If any of it is not correct, you can fix it later.", "correctdataonform": "Please review the information above. If any of it is not correct, you can fix it later.",
"dlexpirebeforereturn": "The driver's license expires before the car is expected to return. ",
"driverinformation": "Driver's Information", "driverinformation": "Driver's Information",
"noteconvertedfrom": "R.O. created from converted Courtesy Car Contract {{agreementnumber}}.", "noteconvertedfrom": "R.O. created from converted Courtesy Car Contract {{agreementnumber}}.",
"populatefromjob": "Populate from Job", "populatefromjob": "Populate from Job",
@@ -599,6 +602,7 @@
"outwith": "Out With", "outwith": "Out With",
"return": "Return Courtesy Car", "return": "Return Courtesy Car",
"status": "Status", "status": "Status",
"uniquefleet": "Enter a unique fleet number.",
"usage": "Usage", "usage": "Usage",
"vehicle": "Vehicle Description" "vehicle": "Vehicle Description"
}, },

View File

@@ -501,6 +501,7 @@
"coverage": "", "coverage": "",
"dailyfreekm": "", "dailyfreekm": "",
"dailyrate": "", "dailyrate": "",
"damage": "",
"damagewaiver": "", "damagewaiver": "",
"driver": "", "driver": "",
"driver_addr1": "", "driver_addr1": "",
@@ -531,11 +532,13 @@
"labels": { "labels": {
"agreement": "", "agreement": "",
"availablecars": "", "availablecars": "",
"cardueforservice": "",
"convertform": { "convertform": {
"applycleanupcharge": "", "applycleanupcharge": "",
"refuelqty": "" "refuelqty": ""
}, },
"correctdataonform": "", "correctdataonform": "",
"dlexpirebeforereturn": "",
"driverinformation": "", "driverinformation": "",
"noteconvertedfrom": "", "noteconvertedfrom": "",
"populatefromjob": "", "populatefromjob": "",
@@ -599,6 +602,7 @@
"outwith": "", "outwith": "",
"return": "", "return": "",
"status": "", "status": "",
"uniquefleet": "",
"usage": "", "usage": "",
"vehicle": "" "vehicle": ""
}, },

View File

@@ -501,6 +501,7 @@
"coverage": "", "coverage": "",
"dailyfreekm": "", "dailyfreekm": "",
"dailyrate": "", "dailyrate": "",
"damage": "",
"damagewaiver": "", "damagewaiver": "",
"driver": "", "driver": "",
"driver_addr1": "", "driver_addr1": "",
@@ -531,11 +532,13 @@
"labels": { "labels": {
"agreement": "", "agreement": "",
"availablecars": "", "availablecars": "",
"cardueforservice": "",
"convertform": { "convertform": {
"applycleanupcharge": "", "applycleanupcharge": "",
"refuelqty": "" "refuelqty": ""
}, },
"correctdataonform": "", "correctdataonform": "",
"dlexpirebeforereturn": "",
"driverinformation": "", "driverinformation": "",
"noteconvertedfrom": "", "noteconvertedfrom": "",
"populatefromjob": "", "populatefromjob": "",
@@ -599,6 +602,7 @@
"outwith": "", "outwith": "",
"return": "", "return": "",
"status": "", "status": "",
"uniquefleet": "",
"usage": "", "usage": "",
"vehicle": "" "vehicle": ""
}, },

View File

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

View File

@@ -0,0 +1,5 @@
- args:
cascade: false
read_only: false
sql: ALTER TABLE "public"."cccontracts" ADD COLUMN "damage" text NULL;
type: run_sql

View File

@@ -0,0 +1,63 @@
- 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:
- actax
- actualreturn
- agreementnumber
- cleanupcharge
- contract_date
- courtesycarid
- coverage
- created_at
- dailyfreekm
- dailyrate
- damagewaiver
- driver_addr1
- driver_addr2
- driver_city
- driver_dlexpiry
- driver_dlnumber
- driver_dlst
- driver_dob
- driver_fn
- driver_ln
- driver_ph1
- driver_state
- driver_zip
- excesskmrate
- federaltax
- fuelin
- fuelout
- id
- jobid
- kmend
- kmstart
- localtax
- refuelcharge
- scheduledreturn
- start
- statetax
- status
- updated_at
set: {}
role: user
table:
name: cccontracts
schema: public
type: create_insert_permission

View File

@@ -0,0 +1,64 @@
- 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:
- actax
- actualreturn
- agreementnumber
- cleanupcharge
- contract_date
- courtesycarid
- coverage
- created_at
- dailyfreekm
- dailyrate
- damage
- damagewaiver
- driver_addr1
- driver_addr2
- driver_city
- driver_dlexpiry
- driver_dlnumber
- driver_dlst
- driver_dob
- driver_fn
- driver_ln
- driver_ph1
- driver_state
- driver_zip
- excesskmrate
- federaltax
- fuelin
- fuelout
- id
- jobid
- kmend
- kmstart
- localtax
- refuelcharge
- scheduledreturn
- start
- statetax
- status
- updated_at
set: {}
role: user
table:
name: cccontracts
schema: public
type: create_insert_permission

View File

@@ -0,0 +1,64 @@
- args:
role: user
table:
name: cccontracts
schema: public
type: drop_select_permission
- args:
permission:
allow_aggregations: true
columns:
- actax
- actualreturn
- agreementnumber
- cleanupcharge
- contract_date
- courtesycarid
- coverage
- created_at
- dailyfreekm
- dailyrate
- damagewaiver
- driver_addr1
- driver_addr2
- driver_city
- driver_dlexpiry
- driver_dlnumber
- driver_dlst
- driver_dob
- driver_fn
- driver_ln
- driver_ph1
- driver_state
- driver_zip
- excesskmrate
- federaltax
- fuelin
- fuelout
- id
- jobid
- kmend
- kmstart
- localtax
- refuelcharge
- scheduledreturn
- start
- statetax
- 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,65 @@
- args:
role: user
table:
name: cccontracts
schema: public
type: drop_select_permission
- args:
permission:
allow_aggregations: true
columns:
- actax
- actualreturn
- agreementnumber
- cleanupcharge
- contract_date
- courtesycarid
- coverage
- created_at
- dailyfreekm
- dailyrate
- damage
- damagewaiver
- driver_addr1
- driver_addr2
- driver_city
- driver_dlexpiry
- driver_dlnumber
- driver_dlst
- driver_dob
- driver_fn
- driver_ln
- driver_ph1
- driver_state
- driver_zip
- excesskmrate
- federaltax
- fuelin
- fuelout
- id
- jobid
- kmend
- kmstart
- localtax
- refuelcharge
- scheduledreturn
- start
- statetax
- 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,63 @@
- args:
role: user
table:
name: cccontracts
schema: public
type: drop_update_permission
- args:
permission:
columns:
- actax
- actualreturn
- agreementnumber
- cleanupcharge
- contract_date
- courtesycarid
- coverage
- created_at
- dailyfreekm
- dailyrate
- damagewaiver
- driver_addr1
- driver_addr2
- driver_city
- driver_dlexpiry
- driver_dlnumber
- driver_dlst
- driver_dob
- driver_fn
- driver_ln
- driver_ph1
- driver_state
- driver_zip
- excesskmrate
- federaltax
- fuelin
- fuelout
- id
- jobid
- kmend
- kmstart
- localtax
- refuelcharge
- scheduledreturn
- start
- statetax
- 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,64 @@
- args:
role: user
table:
name: cccontracts
schema: public
type: drop_update_permission
- args:
permission:
columns:
- actax
- actualreturn
- agreementnumber
- cleanupcharge
- contract_date
- courtesycarid
- coverage
- created_at
- dailyfreekm
- dailyrate
- damage
- damagewaiver
- driver_addr1
- driver_addr2
- driver_city
- driver_dlexpiry
- driver_dlnumber
- driver_dlst
- driver_dob
- driver_fn
- driver_ln
- driver_ph1
- driver_state
- driver_zip
- excesskmrate
- federaltax
- fuelin
- fuelout
- id
- jobid
- kmend
- kmstart
- localtax
- refuelcharge
- scheduledreturn
- start
- statetax
- 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 "driver_dlst" SET NOT NULL;
type: run_sql

View File

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

View File

@@ -892,6 +892,7 @@ tables:
- created_at - created_at
- dailyfreekm - dailyfreekm
- dailyrate - dailyrate
- damage
- damagewaiver - damagewaiver
- driver_addr1 - driver_addr1
- driver_addr2 - driver_addr2
@@ -934,6 +935,7 @@ tables:
- created_at - created_at
- dailyfreekm - dailyfreekm
- dailyrate - dailyrate
- damage
- damagewaiver - damagewaiver
- driver_addr1 - driver_addr1
- driver_addr2 - driver_addr2
@@ -987,6 +989,7 @@ tables:
- created_at - created_at
- dailyfreekm - dailyfreekm
- dailyrate - dailyrate
- damage
- damagewaiver - damagewaiver
- driver_addr1 - driver_addr1
- driver_addr2 - driver_addr2