diff --git a/client/src/components/allocations-employee-label/allocations-employee-label.container.jsx b/client/src/components/allocations-employee-label/allocations-employee-label.container.jsx index 227e7eb0c..bfd004a37 100644 --- a/client/src/components/allocations-employee-label/allocations-employee-label.container.jsx +++ b/client/src/components/allocations-employee-label/allocations-employee-label.container.jsx @@ -4,6 +4,7 @@ import { DELETE_ALLOCATION } from "../../graphql/allocations.queries"; import AllocationsLabelComponent from "./allocations-employee-label.component"; import { notification } from "antd"; import { useTranslation } from "react-i18next"; + export default function AllocationsLabelContainer({ allocation, refetch }) { const [deleteAllocation] = useMutation(DELETE_ALLOCATION); const { t } = useTranslation(); diff --git a/client/src/components/invoice-enter-modal/invoice-enter-modal.component.jsx b/client/src/components/invoice-enter-modal/invoice-enter-modal.component.jsx new file mode 100644 index 000000000..387290e7f --- /dev/null +++ b/client/src/components/invoice-enter-modal/invoice-enter-modal.component.jsx @@ -0,0 +1,71 @@ +import { Modal, Form, Input, InputNumber } from "antd"; +import React from "react"; +import { useTranslation } from "react-i18next"; +import ResetForm from "../form-items-formatted/reset-form-item.component"; + +export default function InvoiceEnterModalComponent({ + visible, + invoice, + handleCancel, + handleSubmit, + form +}) { + const { t } = useTranslation(); + const { getFieldDecorator, isFieldsTouched, resetFields } = form; + + return ( + + {isFieldsTouched() ? : null} +
+ {JSON.stringify(invoice)} + { + // + // {getFieldDecorator("line_desc", { + // initialValue: jobLine.line_desc + // })()} + // + // + // {getFieldDecorator("oem_partno", { + // initialValue: jobLine.oem_partno + // })()} + // + // + // {getFieldDecorator("part_type", { + // initialValue: jobLine.part_type + // })()} + // + // + // {getFieldDecorator("mod_lbr_ty", { + // initialValue: jobLine.mod_lbr_ty + // })()} + // + // + // {getFieldDecorator("op_code_desc", { + // initialValue: jobLine.op_code_desc + // })()} + // + // + // {getFieldDecorator("mod_lb_hrs", { + // initialValue: jobLine.mod_lb_hrs + // })()} + // + // + // {getFieldDecorator("act_price", { + // initialValue: jobLine.act_price + // })()} + // + } +
+
+ ); +} diff --git a/client/src/components/invoice-enter-modal/invoice-enter-modal.container.jsx b/client/src/components/invoice-enter-modal/invoice-enter-modal.container.jsx new file mode 100644 index 000000000..5526af420 --- /dev/null +++ b/client/src/components/invoice-enter-modal/invoice-enter-modal.container.jsx @@ -0,0 +1,114 @@ +import { Form, notification } from "antd"; +import React from "react"; +import { useMutation } from "react-apollo"; +import { useTranslation } from "react-i18next"; +import { connect } from "react-redux"; +import { createStructuredSelector } from "reselect"; +import { + INSERT_NEW_JOB_LINE, + UPDATE_JOB_LINE +} from "../../graphql/jobs-lines.queries"; +import { toggleModalVisible } from "../../redux/modals/modals.actions"; +import { selectInvoiceEnterModal } from "../../redux/modals/modals.selectors"; +import InvoiceEnterModalComponent from "./invoice-enter-modal.component"; + +const mapStateToProps = createStructuredSelector({ + invoiceEnterModal: selectInvoiceEnterModal +}); +const mapDispatchToProps = dispatch => ({ + toggleModalVisible: () => dispatch(toggleModalVisible("invoiceEnter")) +}); + +function InvoiceEnterModalContainer({ + invoiceEnterModal, + toggleModalVisible, + form +}) { + const { t } = useTranslation(); + // const [insertJobLine] = useMutation(INSERT_NEW_JOB_LINE); + // const [updateJobLine] = useMutation(UPDATE_JOB_LINE); + + const handleSubmit = e => { + e.preventDefault(); + + form.validateFieldsAndScroll((err, values) => { + if (err) { + notification["error"]({ + message: t("invoices.errors.validation"), + description: err.message + }); + } + if (!err) { + alert("Closing this modal."); + toggleModalVisible(); + // if (!jobLineEditModal.context.id) { + // insertJobLine({ + // variables: { + // lineInput: [{ jobid: jobLineEditModal.context.jobid, ...values }] + // } + // }) + // .then(r => { + // if (jobLineEditModal.actions.refetch) + // jobLineEditModal.actions.refetch(); + // toggleModalVisible(); + // notification["success"]({ + // message: t("joblines.successes.created") + // }); + // }) + // .catch(error => { + // notification["error"]({ + // message: t("joblines.errors.creating", { + // message: error.message + // }) + // }); + // }); + // } else { + // updateJobLine({ + // variables: { + // lineId: jobLineEditModal.context.id, + // line: values + // } + // }) + // .then(r => { + // notification["success"]({ + // message: t("joblines.successes.updated") + // }); + // }) + // .catch(error => { + // notification["success"]({ + // message: t("joblines.errors.updating", { + // message: error.message + // }) + // }); + // }); + // if (jobLineEditModal.actions.refetch) + // jobLineEditModal.actions.refetch(); + // toggleModalVisible(); + // } + } + }); + }; + + const handleCancel = () => { + toggleModalVisible(); + }; + + return ( + + ); +} + +export default connect( + mapStateToProps, + mapDispatchToProps +)( + Form.create({ name: "InvoiceEnterModalContainer" })( + InvoiceEnterModalContainer + ) +); diff --git a/client/src/components/job-lines-upsert-modal/job-lines-upsert-modal.container.jsx b/client/src/components/job-lines-upsert-modal/job-lines-upsert-modal.container.jsx index ebcae6d30..fa1b732db 100644 --- a/client/src/components/job-lines-upsert-modal/job-lines-upsert-modal.container.jsx +++ b/client/src/components/job-lines-upsert-modal/job-lines-upsert-modal.container.jsx @@ -34,8 +34,8 @@ function JobLinesUpsertModalContainer({ form.validateFieldsAndScroll((err, values) => { if (err) { notification["error"]({ - message: t("jobs.errors.validationtitle"), - description: t("jobs.errors.validation") + message: t("joblines.errors.validation"), + description: err.message }); } if (!err) { diff --git a/client/src/components/jobs-detail-pli/jobs-detail-pli.component.jsx b/client/src/components/jobs-detail-pli/jobs-detail-pli.component.jsx new file mode 100644 index 000000000..6dbe28a0a --- /dev/null +++ b/client/src/components/jobs-detail-pli/jobs-detail-pli.component.jsx @@ -0,0 +1,41 @@ +import React from "react"; +import { connect } from "react-redux"; +import { createStructuredSelector } from "reselect"; +import { + toggleModalVisible, + setModalContext +} from "../../redux/modals/modals.actions"; + +const mapStateToProps = createStructuredSelector({ + //currentUser: selectCurrentUser +}); +const mapDispatchToProps = dispatch => ({ + toggleModalVisible: () => dispatch(toggleModalVisible("invoiceEnter")), + setInvoiceEnterContext: context => + dispatch(setModalContext({ context: context, modal: "invoiceEnter" })) +}); +export default connect( + mapStateToProps, + mapDispatchToProps +)(function JobsDetailPliComponent({ + toggleModalVisible, + setInvoiceEnterContext, + job +}) { + return ( +
+
{ + setInvoiceEnterContext({ + actions: { refetch: null }, + context: { + job + } + }); + }} + > + Enter Invoice +
+
+ ); +}); diff --git a/client/src/components/jobs-detail-pli/jobs-detail-pli.container.jsx b/client/src/components/jobs-detail-pli/jobs-detail-pli.container.jsx new file mode 100644 index 000000000..e6468ddcb --- /dev/null +++ b/client/src/components/jobs-detail-pli/jobs-detail-pli.container.jsx @@ -0,0 +1,7 @@ +import React from "react"; +import JobsDetailPliComponent from "./jobs-detail-pli.component"; + +export default function JobsDetailPliContainer({ job }) { + console.log("job", job); + return ; +} diff --git a/client/src/pages/jobs-detail/jobs-detail.page.component.jsx b/client/src/pages/jobs-detail/jobs-detail.page.component.jsx index 7aa413ccc..5de238e63 100644 --- a/client/src/pages/jobs-detail/jobs-detail.page.component.jsx +++ b/client/src/pages/jobs-detail/jobs-detail.page.component.jsx @@ -1,5 +1,5 @@ import { Form, Icon, Tabs } from "antd"; -import React, { useContext } from "react"; +import React, { lazy, Suspense, useContext } from "react"; import { useTranslation } from "react-i18next"; import { FaHardHat, @@ -8,17 +8,60 @@ import { FaShieldAlt } from "react-icons/fa"; import ResetForm from "../../components/form-items-formatted/reset-form-item.component"; -import JobsLinesContainer from "../../components/job-detail-lines/job-lines.container"; -import JobsDetailClaims from "../../components/jobs-detail-claims/jobs-detail-claims.component"; -import JobsDetailDatesComponent from "../../components/jobs-detail-dates/jobs-detail-dates.component"; -import JobsDetailFinancials from "../../components/jobs-detail-financial/jobs-detail-financial.component"; -import JobsDetailHeader from "../../components/jobs-detail-header/jobs-detail-header.component"; -import JobsDetailInsurance from "../../components/jobs-detail-insurance/jobs-detail-insurance.component"; -import JobsDocumentsContainer from "../../components/jobs-documents/jobs-documents.container"; -import JobNotesContainer from "../../components/jobs-notes/jobs-notes.container"; -import ScheduleJobModalContainer from "../../components/schedule-job-modal/schedule-job-modal.container"; +//import JobsLinesContainer from "../../components/job-detail-lines/job-lines.container"; +//import JobsDetailClaims from "../../components/jobs-detail-claims/jobs-detail-claims.component"; +//import JobsDetailDatesComponent from "../../components/jobs-detail-dates/jobs-detail-dates.component"; +//import JobsDetailFinancials from "../../components/jobs-detail-financial/jobs-detail-financial.component"; +//import JobsDetailHeader from "../../components/jobs-detail-header/jobs-detail-header.component"; +//import JobsDetailInsurance from "../../components/jobs-detail-insurance/jobs-detail-insurance.component"; +//import JobsDocumentsContainer from "../../components/jobs-documents/jobs-documents.container"; +//import JobNotesContainer from "../../components/jobs-notes/jobs-notes.container"; +//import ScheduleJobModalContainer from "../../components/schedule-job-modal/schedule-job-modal.container"; +//import JobLineUpsertModalContainer from "../../components/job-lines-upsert-modal/job-lines-upsert-modal.container"; +//import EnterInvoiceModalContainer from "../../components/invoice-enter-modal/invoice-enter-modal.container"; +import LoadingSpinner from "../../components/loading-spinner/loading-spinner.component"; import JobDetailFormContext from "./jobs-detail.page.context"; -import JobLineUpsertModalContainer from "../../components/job-lines-upsert-modal/job-lines-upsert-modal.container"; +import JobsDetailPliContainer from "../../components/jobs-detail-pli/jobs-detail-pli.container"; + +const JobsLinesContainer = lazy(() => + import("../../components/job-detail-lines/job-lines.container") +); +const JobsDetailClaims = lazy(() => + import("../../components/jobs-detail-claims/jobs-detail-claims.component") +); +const JobsDetailDatesComponent = lazy(() => + import("../../components/jobs-detail-dates/jobs-detail-dates.component") +); +const JobsDetailFinancials = lazy(() => + import( + "../../components/jobs-detail-financial/jobs-detail-financial.component" + ) +); +const JobsDetailHeader = lazy(() => + import("../../components/jobs-detail-header/jobs-detail-header.component") +); +const JobsDetailInsurance = lazy(() => + import( + "../../components/jobs-detail-insurance/jobs-detail-insurance.component" + ) +); +const JobsDocumentsContainer = lazy(() => + import("../../components/jobs-documents/jobs-documents.container") +); +const JobNotesContainer = lazy(() => + import("../../components/jobs-notes/jobs-notes.container") +); +const ScheduleJobModalContainer = lazy(() => + import("../../components/schedule-job-modal/schedule-job-modal.container") +); +const JobLineUpsertModalContainer = lazy(() => + import( + "../../components/job-lines-upsert-modal/job-lines-upsert-modal.container" + ) +); +const EnterInvoiceModalContainer = lazy(() => + import("../../components/invoice-enter-modal/invoice-enter-modal.container") +); export default function JobsDetailPage({ job, @@ -45,7 +88,9 @@ export default function JobsDetailPage({ }; return ( -
+ } + > +
- Partssublet + -
+ ); } diff --git a/client/src/redux/modals/modals.reducer.js b/client/src/redux/modals/modals.reducer.js index a9218ec44..7e79e844b 100644 --- a/client/src/redux/modals/modals.reducer.js +++ b/client/src/redux/modals/modals.reducer.js @@ -1,15 +1,18 @@ import ModalsActionTypes from "./modals.types"; -const INITIAL_STATE = { - jobLineEdit: { - visible: false, - context: {}, - actions: { - refetch: null - } +const baseModal = { + visible: false, + context: {}, + actions: { + refetch: null } }; +const INITIAL_STATE = { + jobLineEdit: { ...baseModal }, + invoiceEnter: { ...baseModal } +}; + const modalsReducer = (state = INITIAL_STATE, action) => { switch (action.type) { case ModalsActionTypes.TOGGLE_MODAL_VISIBLE: diff --git a/client/src/redux/modals/modals.selectors.js b/client/src/redux/modals/modals.selectors.js index bbe7c8ba8..7634faf2b 100644 --- a/client/src/redux/modals/modals.selectors.js +++ b/client/src/redux/modals/modals.selectors.js @@ -7,3 +7,8 @@ export const selectJobLineEditModal = createSelector( modals => modals.jobLineEdit ); +export const selectInvoiceEnterModal = createSelector( + [selectModals], + modals => modals.invoiceEnter +); + diff --git a/hasura/migrations/1582587971597_create_table_public_invoices/down.yaml b/hasura/migrations/1582587971597_create_table_public_invoices/down.yaml new file mode 100644 index 000000000..78d023a7a --- /dev/null +++ b/hasura/migrations/1582587971597_create_table_public_invoices/down.yaml @@ -0,0 +1,5 @@ +- args: + cascade: false + read_only: false + sql: DROP TABLE "public"."invoices"; + type: run_sql diff --git a/hasura/migrations/1582587971597_create_table_public_invoices/up.yaml b/hasura/migrations/1582587971597_create_table_public_invoices/up.yaml new file mode 100644 index 000000000..55008cf33 --- /dev/null +++ b/hasura/migrations/1582587971597_create_table_public_invoices/up.yaml @@ -0,0 +1,28 @@ +- args: + cascade: false + read_only: false + sql: CREATE EXTENSION IF NOT EXISTS pgcrypto; + type: run_sql +- args: + cascade: false + read_only: false + sql: "CREATE TABLE \"public\".\"invoices\"(\"id\" uuid NOT NULL DEFAULT gen_random_uuid(), + \"created_at\" timestamptz NOT NULL DEFAULT now(), \"updated_at\" timestamptz + NOT NULL DEFAULT now(), \"vendorid\" uuid NOT NULL, \"jobid\" uuid NOT NULL, + \"date\" date NOT NULL DEFAULT now(), \"due_date\" date, \"exported\" boolean + NOT NULL DEFAULT false, \"exported_at\" timestamptz, \"is_credit_memo\" boolean + NOT NULL DEFAULT false, \"total\" numeric NOT NULL DEFAULT 0, \"invoice_number\" + text NOT NULL, PRIMARY KEY (\"id\") , FOREIGN KEY (\"jobid\") REFERENCES \"public\".\"jobs\"(\"id\") + ON UPDATE restrict ON DELETE cascade, FOREIGN KEY (\"vendorid\") REFERENCES + \"public\".\"vendors\"(\"id\") ON UPDATE restrict ON DELETE restrict, UNIQUE + (\"jobid\"));\nCREATE OR REPLACE FUNCTION \"public\".\"set_current_timestamp_updated_at\"()\nRETURNS + TRIGGER AS $$\nDECLARE\n _new record;\nBEGIN\n _new := NEW;\n _new.\"updated_at\" + = NOW();\n RETURN _new;\nEND;\n$$ LANGUAGE plpgsql;\nCREATE TRIGGER \"set_public_invoices_updated_at\"\nBEFORE + UPDATE ON \"public\".\"invoices\"\nFOR EACH ROW\nEXECUTE PROCEDURE \"public\".\"set_current_timestamp_updated_at\"();\nCOMMENT + ON TRIGGER \"set_public_invoices_updated_at\" ON \"public\".\"invoices\" \nIS + 'trigger to set value of column \"updated_at\" to current timestamp on row update';" + type: run_sql +- args: + name: invoices + schema: public + type: add_existing_table_or_view diff --git a/hasura/migrations/1582587989233_track_all_relationships/down.yaml b/hasura/migrations/1582587989233_track_all_relationships/down.yaml new file mode 100644 index 000000000..3c27d1b54 --- /dev/null +++ b/hasura/migrations/1582587989233_track_all_relationships/down.yaml @@ -0,0 +1,24 @@ +- args: + relationship: job + table: + name: invoices + schema: public + type: drop_relationship +- args: + relationship: vendor + table: + name: invoices + schema: public + type: drop_relationship +- args: + relationship: invoice + table: + name: jobs + schema: public + type: drop_relationship +- args: + relationship: invoices + table: + name: vendors + schema: public + type: drop_relationship diff --git a/hasura/migrations/1582587989233_track_all_relationships/up.yaml b/hasura/migrations/1582587989233_track_all_relationships/up.yaml new file mode 100644 index 000000000..266395edb --- /dev/null +++ b/hasura/migrations/1582587989233_track_all_relationships/up.yaml @@ -0,0 +1,41 @@ +- args: + name: job + table: + name: invoices + schema: public + using: + foreign_key_constraint_on: jobid + type: create_object_relationship +- args: + name: vendor + table: + name: invoices + schema: public + using: + foreign_key_constraint_on: vendorid + type: create_object_relationship +- args: + name: invoice + table: + name: jobs + schema: public + using: + manual_configuration: + column_mapping: + id: jobid + remote_table: + name: invoices + schema: public + type: create_object_relationship +- args: + name: invoices + table: + name: vendors + schema: public + using: + foreign_key_constraint_on: + column: vendorid + table: + name: invoices + schema: public + type: create_array_relationship diff --git a/hasura/migrations/1582588052326_update_permission_user_public_table_invoices/down.yaml b/hasura/migrations/1582588052326_update_permission_user_public_table_invoices/down.yaml new file mode 100644 index 000000000..dadeb8ce0 --- /dev/null +++ b/hasura/migrations/1582588052326_update_permission_user_public_table_invoices/down.yaml @@ -0,0 +1,6 @@ +- args: + role: user + table: + name: invoices + schema: public + type: drop_insert_permission diff --git a/hasura/migrations/1582588052326_update_permission_user_public_table_invoices/up.yaml b/hasura/migrations/1582588052326_update_permission_user_public_table_invoices/up.yaml new file mode 100644 index 000000000..33a70c629 --- /dev/null +++ b/hasura/migrations/1582588052326_update_permission_user_public_table_invoices/up.yaml @@ -0,0 +1,35 @@ +- args: + permission: + allow_upsert: true + check: + job: + bodyshop: + associations: + _and: + - user: + authid: + _eq: X-Hasura-User-Id + - active: + _eq: true + columns: + - id + - created_at + - updated_at + - vendorid + - jobid + - date + - due_date + - exported + - exported_at + - is_credit_memo + - total + - invoice_number + localPresets: + - key: "" + value: "" + set: {} + role: user + table: + name: invoices + schema: public + type: create_insert_permission diff --git a/hasura/migrations/1582588061657_update_permission_user_public_table_invoices/down.yaml b/hasura/migrations/1582588061657_update_permission_user_public_table_invoices/down.yaml new file mode 100644 index 000000000..9ce2f6b37 --- /dev/null +++ b/hasura/migrations/1582588061657_update_permission_user_public_table_invoices/down.yaml @@ -0,0 +1,6 @@ +- args: + role: user + table: + name: invoices + schema: public + type: drop_select_permission diff --git a/hasura/migrations/1582588061657_update_permission_user_public_table_invoices/up.yaml b/hasura/migrations/1582588061657_update_permission_user_public_table_invoices/up.yaml new file mode 100644 index 000000000..393b945c5 --- /dev/null +++ b/hasura/migrations/1582588061657_update_permission_user_public_table_invoices/up.yaml @@ -0,0 +1,33 @@ +- args: + permission: + allow_aggregations: false + columns: + - exported + - is_credit_memo + - date + - due_date + - total + - invoice_number + - created_at + - exported_at + - updated_at + - id + - jobid + - vendorid + computed_fields: [] + filter: + job: + bodyshop: + associations: + _and: + - user: + authid: + _eq: X-Hasura-User-Id + - active: + _eq: true + limit: null + role: user + table: + name: invoices + schema: public + type: create_select_permission diff --git a/hasura/migrations/1582588071369_update_permission_user_public_table_invoices/down.yaml b/hasura/migrations/1582588071369_update_permission_user_public_table_invoices/down.yaml new file mode 100644 index 000000000..f221ea65f --- /dev/null +++ b/hasura/migrations/1582588071369_update_permission_user_public_table_invoices/down.yaml @@ -0,0 +1,6 @@ +- args: + role: user + table: + name: invoices + schema: public + type: drop_update_permission diff --git a/hasura/migrations/1582588071369_update_permission_user_public_table_invoices/up.yaml b/hasura/migrations/1582588071369_update_permission_user_public_table_invoices/up.yaml new file mode 100644 index 000000000..add508bd2 --- /dev/null +++ b/hasura/migrations/1582588071369_update_permission_user_public_table_invoices/up.yaml @@ -0,0 +1,34 @@ +- args: + permission: + columns: + - exported + - is_credit_memo + - date + - due_date + - total + - invoice_number + - created_at + - exported_at + - updated_at + - id + - jobid + - vendorid + filter: + job: + bodyshop: + associations: + _and: + - user: + authid: + _eq: X-Hasura-User-Id + - active: + _eq: true + localPresets: + - key: "" + value: "" + set: {} + role: user + table: + name: invoices + schema: public + type: create_update_permission diff --git a/hasura/migrations/1582588465637_create_table_public_invoicelines/down.yaml b/hasura/migrations/1582588465637_create_table_public_invoicelines/down.yaml new file mode 100644 index 000000000..3c7b9280f --- /dev/null +++ b/hasura/migrations/1582588465637_create_table_public_invoicelines/down.yaml @@ -0,0 +1,5 @@ +- args: + cascade: false + read_only: false + sql: DROP TABLE "public"."invoicelines"; + type: run_sql diff --git a/hasura/migrations/1582588465637_create_table_public_invoicelines/up.yaml b/hasura/migrations/1582588465637_create_table_public_invoicelines/up.yaml new file mode 100644 index 000000000..cc2bed198 --- /dev/null +++ b/hasura/migrations/1582588465637_create_table_public_invoicelines/up.yaml @@ -0,0 +1,26 @@ +- args: + cascade: false + read_only: false + sql: CREATE EXTENSION IF NOT EXISTS pgcrypto; + type: run_sql +- args: + cascade: false + read_only: false + sql: "CREATE TABLE \"public\".\"invoicelines\"(\"id\" uuid NOT NULL DEFAULT gen_random_uuid(), + \"created_at\" timestamptz NOT NULL DEFAULT now(), \"updated_at\" timestamptz + NOT NULL DEFAULT now(), \"invoiceid\" uuid NOT NULL, \"line_desc\" text, \"actual_price\" + numeric NOT NULL DEFAULT 0, \"actual_cost\" numeric NOT NULL DEFAULT 0, \"cost_center\" + text NOT NULL, \"estlindid\" uuid, PRIMARY KEY (\"id\") , FOREIGN KEY (\"invoiceid\") + REFERENCES \"public\".\"invoices\"(\"id\") ON UPDATE restrict ON DELETE cascade);\nCREATE + OR REPLACE FUNCTION \"public\".\"set_current_timestamp_updated_at\"()\nRETURNS + TRIGGER AS $$\nDECLARE\n _new record;\nBEGIN\n _new := NEW;\n _new.\"updated_at\" + = NOW();\n RETURN _new;\nEND;\n$$ LANGUAGE plpgsql;\nCREATE TRIGGER \"set_public_invoicelines_updated_at\"\nBEFORE + UPDATE ON \"public\".\"invoicelines\"\nFOR EACH ROW\nEXECUTE PROCEDURE \"public\".\"set_current_timestamp_updated_at\"();\nCOMMENT + ON TRIGGER \"set_public_invoicelines_updated_at\" ON \"public\".\"invoicelines\" + \nIS 'trigger to set value of column \"updated_at\" to current timestamp on + row update';" + type: run_sql +- args: + name: invoicelines + schema: public + type: add_existing_table_or_view diff --git a/hasura/migrations/1582588478430_track_all_relationships/down.yaml b/hasura/migrations/1582588478430_track_all_relationships/down.yaml new file mode 100644 index 000000000..b87036054 --- /dev/null +++ b/hasura/migrations/1582588478430_track_all_relationships/down.yaml @@ -0,0 +1,12 @@ +- args: + relationship: invoice + table: + name: invoicelines + schema: public + type: drop_relationship +- args: + relationship: invoicelines + table: + name: invoices + schema: public + type: drop_relationship diff --git a/hasura/migrations/1582588478430_track_all_relationships/up.yaml b/hasura/migrations/1582588478430_track_all_relationships/up.yaml new file mode 100644 index 000000000..c2420cefb --- /dev/null +++ b/hasura/migrations/1582588478430_track_all_relationships/up.yaml @@ -0,0 +1,20 @@ +- args: + name: invoice + table: + name: invoicelines + schema: public + using: + foreign_key_constraint_on: invoiceid + type: create_object_relationship +- args: + name: invoicelines + table: + name: invoices + schema: public + using: + foreign_key_constraint_on: + column: invoiceid + table: + name: invoicelines + schema: public + type: create_array_relationship diff --git a/hasura/migrations/1582588520891_update_permission_user_public_table_invoicelines/down.yaml b/hasura/migrations/1582588520891_update_permission_user_public_table_invoicelines/down.yaml new file mode 100644 index 000000000..8c11bf4b6 --- /dev/null +++ b/hasura/migrations/1582588520891_update_permission_user_public_table_invoicelines/down.yaml @@ -0,0 +1,6 @@ +- args: + role: user + table: + name: invoicelines + schema: public + type: drop_insert_permission diff --git a/hasura/migrations/1582588520891_update_permission_user_public_table_invoicelines/up.yaml b/hasura/migrations/1582588520891_update_permission_user_public_table_invoicelines/up.yaml new file mode 100644 index 000000000..e174b2077 --- /dev/null +++ b/hasura/migrations/1582588520891_update_permission_user_public_table_invoicelines/up.yaml @@ -0,0 +1,33 @@ +- args: + permission: + allow_upsert: true + check: + invoice: + job: + bodyshop: + associations: + _and: + - user: + authid: + _eq: X-Hasura-User-Id + - active: + _eq: true + columns: + - id + - created_at + - updated_at + - invoiceid + - line_desc + - actual_price + - actual_cost + - cost_center + - estlindid + localPresets: + - key: "" + value: "" + set: {} + role: user + table: + name: invoicelines + schema: public + type: create_insert_permission diff --git a/hasura/migrations/1582588525612_update_permission_user_public_table_invoicelines/down.yaml b/hasura/migrations/1582588525612_update_permission_user_public_table_invoicelines/down.yaml new file mode 100644 index 000000000..cf0af8966 --- /dev/null +++ b/hasura/migrations/1582588525612_update_permission_user_public_table_invoicelines/down.yaml @@ -0,0 +1,6 @@ +- args: + role: user + table: + name: invoicelines + schema: public + type: drop_select_permission diff --git a/hasura/migrations/1582588525612_update_permission_user_public_table_invoicelines/up.yaml b/hasura/migrations/1582588525612_update_permission_user_public_table_invoicelines/up.yaml new file mode 100644 index 000000000..14f825a78 --- /dev/null +++ b/hasura/migrations/1582588525612_update_permission_user_public_table_invoicelines/up.yaml @@ -0,0 +1,31 @@ +- args: + permission: + allow_aggregations: false + columns: + - actual_cost + - actual_price + - cost_center + - line_desc + - created_at + - updated_at + - estlindid + - id + - invoiceid + computed_fields: [] + filter: + invoice: + job: + bodyshop: + associations: + _and: + - user: + authid: + _eq: X-Hasura-User-Id + - active: + _eq: true + limit: null + role: user + table: + name: invoicelines + schema: public + type: create_select_permission diff --git a/hasura/migrations/1582588530315_update_permission_user_public_table_invoicelines/down.yaml b/hasura/migrations/1582588530315_update_permission_user_public_table_invoicelines/down.yaml new file mode 100644 index 000000000..5df677663 --- /dev/null +++ b/hasura/migrations/1582588530315_update_permission_user_public_table_invoicelines/down.yaml @@ -0,0 +1,6 @@ +- args: + role: user + table: + name: invoicelines + schema: public + type: drop_update_permission diff --git a/hasura/migrations/1582588530315_update_permission_user_public_table_invoicelines/up.yaml b/hasura/migrations/1582588530315_update_permission_user_public_table_invoicelines/up.yaml new file mode 100644 index 000000000..756147e8f --- /dev/null +++ b/hasura/migrations/1582588530315_update_permission_user_public_table_invoicelines/up.yaml @@ -0,0 +1,32 @@ +- args: + permission: + columns: + - actual_cost + - actual_price + - cost_center + - line_desc + - created_at + - updated_at + - estlindid + - id + - invoiceid + filter: + invoice: + job: + bodyshop: + associations: + _and: + - user: + authid: + _eq: X-Hasura-User-Id + - active: + _eq: true + localPresets: + - key: "" + value: "" + set: {} + role: user + table: + name: invoicelines + schema: public + type: create_update_permission diff --git a/hasura/migrations/1582588553560_update_permission_user_public_table_invoicelines/down.yaml b/hasura/migrations/1582588553560_update_permission_user_public_table_invoicelines/down.yaml new file mode 100644 index 000000000..f5bb498ae --- /dev/null +++ b/hasura/migrations/1582588553560_update_permission_user_public_table_invoicelines/down.yaml @@ -0,0 +1,6 @@ +- args: + role: user + table: + name: invoicelines + schema: public + type: drop_delete_permission diff --git a/hasura/migrations/1582588553560_update_permission_user_public_table_invoicelines/up.yaml b/hasura/migrations/1582588553560_update_permission_user_public_table_invoicelines/up.yaml new file mode 100644 index 000000000..174807864 --- /dev/null +++ b/hasura/migrations/1582588553560_update_permission_user_public_table_invoicelines/up.yaml @@ -0,0 +1,18 @@ +- args: + permission: + filter: + invoice: + job: + bodyshop: + associations: + _and: + - user: + authid: + _eq: X-Hasura-User-Id + - active: + _eq: true + role: user + table: + name: invoicelines + schema: public + type: create_delete_permission