Added shop management page for RBAC. BOD-232

This commit is contained in:
Patrick Fic
2020-08-10 16:34:12 -07:00
parent 83c83ac06e
commit 1715c08296
19 changed files with 743 additions and 10 deletions

View File

@@ -3000,6 +3000,27 @@
</translation>
</translations>
</concept_node>
<concept_node>
<name>rbac</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>
<name>responsibilitycenters</name>
<children>

View File

@@ -19,23 +19,15 @@ export default {
"jobs:available-list": 2,
"jobs:create": 1,
"jobs:intake": 1,
"jobs:line-edit": 3,
"jobs:scoreboard-add": 3,
"jobs:close": 5,
"jobs:documents-upload": 3,
"jobs:documents-view": 2,
"jobs:audit-trail": 5,
"jobs:detail": 1,
"invoices:enter": 2,
"invoices:view": 2,
"invoices:list": 2,
"employees:rate": 5,
"employees:page": 5,
"messaging:affix": 2,
"owners:list": 2,
"owners:detail": 3,
@@ -45,8 +37,6 @@ export default {
"production:board": 1,
"production:list": 1,
"sendemail:send": 1,
"schedule:view": 2,
"scoreboard:view": 3,

View File

@@ -18,6 +18,7 @@ import LayoutFormRow from "../layout-form-row/layout-form-row.component";
import ShopInfoIntakeChecklistComponent from "./shop-info.intake.component";
import ShopInfoSpeedPrint from "./shop-info.speedprint.component";
import FormListMoveArrows from "../form-list-move-arrows/form-list-move-arrows.component";
import ShopInfoRbacComponent from "./shop-info.rbac.component";
export default function ShopInfoComponent({ form, saveLoading }) {
const { t } = useTranslation();
@@ -408,6 +409,9 @@ export default function ShopInfoComponent({ form, saveLoading }) {
>
<ShopInfoSpeedPrint form={form} />
</Collapse.Panel>
<Collapse.Panel key="rbac" header={t("bodyshop.labels.rbac")}>
<ShopInfoRbacComponent form={form} />
</Collapse.Panel>
<Collapse.Panel
key="roStatus"
header={t("bodyshop.labels.jobstatuses")}

View File

@@ -0,0 +1,447 @@
import { Form, InputNumber } from "antd";
import React from "react";
import { useTranslation } from "react-i18next";
import LayoutFormRow from "../layout-form-row/layout-form-row.component";
//TODO Fix up styles.
export default function ShopInfoRbacComponent({ form }) {
const { t } = useTranslation();
return (
<div>
<LayoutFormRow>
<Form.Item
label={t("bodyshop.fields.rbac.accounting:payables")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "accounting:payables"]}
>
<InputNumber />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.rbac.accounting:payments")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "accounting:payments"]}
>
<InputNumber />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.rbac.accounting:receivables")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "accounting:receivables"]}
>
<InputNumber />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.rbac.csi:page")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "csi:page"]}
>
<InputNumber />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.rbac.csi:export")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "csi:export"]}
>
<InputNumber />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.rbac.contracts:create")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "contracts:create"]}
>
<InputNumber />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.rbac.contracts:detail")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "contracts:detail"]}
>
<InputNumber />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.rbac.contracts:list")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "contracts:list"]}
>
<InputNumber />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.rbac.courtesycar:create")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "courtesycar:create"]}
>
<InputNumber />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.rbac.courtesycar:detail")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "courtesycar:detail"]}
>
<InputNumber />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.rbac.courtesycar:list")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "courtesycar:list"]}
>
<InputNumber />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.rbac.jobs:list-active")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "jobs:list-active"]}
>
<InputNumber />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.rbac.jobs:list-all")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "jobs:list-all"]}
>
<InputNumber />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.rbac.jobs:available-list")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "jobs:available-list"]}
>
<InputNumber />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.rbac.jobs:create")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "jobs:create"]}
>
<InputNumber />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.rbac.jobs:intake")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "jobs:intake"]}
>
<InputNumber />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.rbac.jobs:close")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "jobs:close"]}
>
<InputNumber />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.rbac.jobs:detail")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "jobs:detail"]}
>
<InputNumber />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.rbac.invoices:enter")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "invoices:enter"]}
>
<InputNumber />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.rbac.invoices:view")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "invoices:view"]}
>
<InputNumber />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.rbac.invoices:list")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "invoices:list"]}
>
<InputNumber />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.rbac.employees:page")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "employees:page"]}
>
<InputNumber />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.rbac.owners:list")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "owners:list"]}
>
<InputNumber />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.rbac.owners:detail")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "owners:detail"]}
>
<InputNumber />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.rbac.payments:enter")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "payments:enter"]}
>
<InputNumber />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.rbac.payments:list")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "payments:list"]}
>
<InputNumber />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.rbac.production:board")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "production:board"]}
>
<InputNumber />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.rbac.production:list")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "production:list"]}
>
<InputNumber />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.rbac.schedule:view")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "schedule:view"]}
>
<InputNumber />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.rbac.scoreboard:view")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "scoreboard:view"]}
>
<InputNumber />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.rbac.shiftclock:view")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "shiftclock:view"]}
>
<InputNumber />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.rbac.shop:vendors")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "shop:vendors"]}
>
<InputNumber />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.rbac.shop:rbac")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "shop:rbac"]}
>
<InputNumber />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.rbac.shop:templates")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "shop:templates"]}
>
<InputNumber />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.rbac.timetickets:enter")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "timetickets:enter"]}
>
<InputNumber />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.rbac.timetickets:list")}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
name={["md_rbac", "timetickets:list"]}
>
<InputNumber />
</Form.Item>
</LayoutFormRow>
</div>
);
}

View File

@@ -52,6 +52,7 @@ export const QUERY_BODYSHOP = gql`
speedprint
md_parts_locations
md_notes_presets
md_rbac
employees {
id
first_name
@@ -110,6 +111,7 @@ export const UPDATE_SHOP = gql`
speedprint
md_parts_locations
md_notes_presets
md_rbac
employees {
id
first_name

View File

@@ -186,6 +186,7 @@
"jobstatuses": "Job Statuses",
"notemplatesavailable": "No templates available to add.",
"orderstatuses": "Order Statuses",
"rbac": "Role Based Access Control",
"responsibilitycenters": {
"costs": "Cost Centers",
"profits": "Profit Centers",

View File

@@ -186,6 +186,7 @@
"jobstatuses": "",
"notemplatesavailable": "",
"orderstatuses": "",
"rbac": "",
"responsibilitycenters": {
"costs": "",
"profits": "",

View File

@@ -186,6 +186,7 @@
"jobstatuses": "",
"notemplatesavailable": "",
"orderstatuses": "",
"rbac": "",
"responsibilitycenters": {
"costs": "",
"profits": "",

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,6 @@
- args:
cascade: false
read_only: false
sql: ALTER TABLE "public"."bodyshops" ALTER COLUMN "md_notes_presets" SET NOT
NULL;
type: run_sql

View File

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

View File

@@ -0,0 +1,6 @@
- args:
cascade: false
read_only: false
sql: ALTER TABLE "public"."bodyshops" ALTER COLUMN "md_messaging_presets" SET
NOT NULL;
type: run_sql

View File

@@ -0,0 +1,60 @@
- args:
role: user
table:
name: bodyshops
schema: public
type: drop_select_permission
- args:
permission:
allow_aggregations: false
columns:
- accountingconfig
- address1
- address2
- appt_length
- city
- country
- created_at
- email
- federal_tax_id
- id
- inhousevendorid
- insurance_vendor_id
- intakechecklist
- invoice_tax_rates
- logo_img_path
- md_messaging_presets
- md_notes_presets
- md_order_statuses
- md_parts_locations
- md_referral_sources
- md_responsibility_centers
- md_ro_statuses
- messagingservicesid
- production_config
- region_config
- scoreboard_target
- shopname
- shoprates
- speedprint
- ssbuckets
- state
- state_tax_id
- stripe_acct_id
- template_header
- textid
- updated_at
- zip_post
computed_fields: []
filter:
associations:
bodyshop:
associations:
user:
authid:
_eq: X-Hasura-User-Id
role: user
table:
name: bodyshops
schema: public
type: create_select_permission

View File

@@ -0,0 +1,61 @@
- args:
role: user
table:
name: bodyshops
schema: public
type: drop_select_permission
- args:
permission:
allow_aggregations: false
columns:
- accountingconfig
- address1
- address2
- appt_length
- city
- country
- created_at
- email
- federal_tax_id
- id
- inhousevendorid
- insurance_vendor_id
- intakechecklist
- invoice_tax_rates
- logo_img_path
- md_messaging_presets
- md_notes_presets
- md_order_statuses
- md_parts_locations
- md_rbac
- md_referral_sources
- md_responsibility_centers
- md_ro_statuses
- messagingservicesid
- production_config
- region_config
- scoreboard_target
- shopname
- shoprates
- speedprint
- ssbuckets
- state
- state_tax_id
- stripe_acct_id
- template_header
- textid
- updated_at
- zip_post
computed_fields: []
filter:
associations:
bodyshop:
associations:
user:
authid:
_eq: X-Hasura-User-Id
role: user
table:
name: bodyshops
schema: public
type: create_select_permission

View File

@@ -0,0 +1,54 @@
- args:
role: user
table:
name: bodyshops
schema: public
type: drop_update_permission
- args:
permission:
columns:
- accountingconfig
- address1
- address2
- appt_length
- city
- country
- created_at
- email
- federal_tax_id
- id
- inhousevendorid
- insurance_vendor_id
- intakechecklist
- invoice_tax_rates
- logo_img_path
- md_messaging_presets
- md_notes_presets
- md_order_statuses
- md_parts_locations
- md_referral_sources
- md_responsibility_centers
- md_ro_statuses
- production_config
- scoreboard_target
- shopname
- shoprates
- speedprint
- ssbuckets
- state
- state_tax_id
- updated_at
- zip_post
filter:
associations:
bodyshop:
associations:
user:
authid:
_eq: X-Hasura-User-Id
set: {}
role: user
table:
name: bodyshops
schema: public
type: create_update_permission

View File

@@ -0,0 +1,55 @@
- args:
role: user
table:
name: bodyshops
schema: public
type: drop_update_permission
- args:
permission:
columns:
- accountingconfig
- address1
- address2
- appt_length
- city
- country
- created_at
- email
- federal_tax_id
- id
- inhousevendorid
- insurance_vendor_id
- intakechecklist
- invoice_tax_rates
- logo_img_path
- md_messaging_presets
- md_notes_presets
- md_order_statuses
- md_parts_locations
- md_rbac
- md_referral_sources
- md_responsibility_centers
- md_ro_statuses
- production_config
- scoreboard_target
- shopname
- shoprates
- speedprint
- ssbuckets
- state
- state_tax_id
- updated_at
- zip_post
filter:
associations:
bodyshop:
associations:
user:
authid:
_eq: X-Hasura-User-Id
set: {}
role: user
table:
name: bodyshops
schema: public
type: create_update_permission

View File

@@ -478,6 +478,7 @@ tables:
- md_notes_presets
- md_order_statuses
- md_parts_locations
- md_rbac
- md_referral_sources
- md_responsibility_centers
- md_ro_statuses
@@ -526,6 +527,7 @@ tables:
- md_notes_presets
- md_order_statuses
- md_parts_locations
- md_rbac
- md_referral_sources
- md_responsibility_centers
- md_ro_statuses