diff --git a/client/src/components/job-detail-cards/job-detail-cards.component.jsx b/client/src/components/job-detail-cards/job-detail-cards.component.jsx index 6a8cd0fb1..d7442d2dd 100644 --- a/client/src/components/job-detail-cards/job-detail-cards.component.jsx +++ b/client/src/components/job-detail-cards/job-detail-cards.component.jsx @@ -145,7 +145,7 @@ export function JobDetailCards({ setPrintCenterContext }) { data={data ? data.jobs_by_pk : null} /> - + joblines_stats", + // joblines_status + // ); + + const memoizedData = useMemo(() => Calculatedata(joblines_status), [ + joblines_status, + ]); + + console.log("memoizedData :>> ", memoizedData); + const [state, setState] = useState({ activeIndex: 0 }); + + const onPieEnter = (data, index) => { + setState({ + activeIndex: index, + }); + }; return (
- Placeholder piechart. + + +
); } + +const Calculatedata = (data) => { + console.log("calculating data", data); + + if (data.length > 0) { + const statusMapping = {}; + data.map((i) => { + if (!statusMapping[i.status]) + statusMapping[i.status] = { name: i.status || "No Status*", value: 0 }; + statusMapping[i.status].value = statusMapping[i.status].value + i.count; + return null; + }); + return Object.keys(statusMapping).map((key) => { + return statusMapping[key]; + }); + } else { + return [ + { name: "Group A", value: 400 }, + { name: "Group B", value: 300 }, + { name: "Group C", value: 300 }, + { name: "Group D", value: 200 }, + ]; + } +}; + +const renderActiveShape = (props) => { + const RADIAN = Math.PI / 180; + const { + cx, + cy, + midAngle, + innerRadius, + outerRadius, + startAngle, + endAngle, + fill, + payload, + percent, + value, + } = props; + const sin = Math.sin(-RADIAN * midAngle); + const cos = Math.cos(-RADIAN * midAngle); + const sx = cx + (outerRadius + 10) * cos; + const sy = cy + (outerRadius + 10) * sin; + const mx = cx + (outerRadius + 30) * cos; + const my = cy + (outerRadius + 30) * sin; + const ex = mx + (cos >= 0 ? 1 : -1) * 22; + const ey = my; + const textAnchor = cos >= 0 ? "start" : "end"; + + return ( + + + {payload.name} + + + + + + = 0 ? 1 : -1) * 12} + y={ey} + textAnchor={textAnchor} + fill="#333" + >{`Count: ${value}`} + = 0 ? 1 : -1) * 12} + y={ey} + dy={18} + textAnchor={textAnchor} + fill="#999" + > + {`(${(percent * 100).toFixed(2)}%)`} + + + ); +}; diff --git a/client/src/components/scoreboard-chart/scoreboard-chart.component.jsx b/client/src/components/scoreboard-chart/scoreboard-chart.component.jsx index 7a2c32e0e..a5360b19f 100644 --- a/client/src/components/scoreboard-chart/scoreboard-chart.component.jsx +++ b/client/src/components/scoreboard-chart/scoreboard-chart.component.jsx @@ -4,26 +4,14 @@ import { connect } from "react-redux"; import { Area, Bar, - - - CartesianGrid, ComposedChart, - - - - - - - - Legend, Line, - - - - - - - - ResponsiveContainer, Tooltip, XAxis, - YAxis + CartesianGrid, + ComposedChart, + Legend, + Line, + ResponsiveContainer, + Tooltip, + XAxis, + YAxis, } from "recharts"; import { createStructuredSelector } from "reselect"; import { selectBodyshop } from "../../redux/user/user.selectors"; diff --git a/client/src/graphql/jobs.queries.js b/client/src/graphql/jobs.queries.js index 39e33ef1b..4c2cb5add 100644 --- a/client/src/graphql/jobs.queries.js +++ b/client/src/graphql/jobs.queries.js @@ -415,6 +415,11 @@ export const QUERY_JOB_CARD_DETAILS = gql` ownr_ln ownr_ph1 ownr_ea + joblines_status { + part_type + count + status + } owner { id allow_text_message @@ -463,6 +468,7 @@ export const QUERY_JOB_CARD_DETAILS = gql` date_closed date_scheduled date_estimated + notes { id text diff --git a/hasura/migrations/1596730747611_run_sql_migration/down.yaml b/hasura/migrations/1596730747611_run_sql_migration/down.yaml new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/hasura/migrations/1596730747611_run_sql_migration/down.yaml @@ -0,0 +1 @@ +[] diff --git a/hasura/migrations/1596730747611_run_sql_migration/up.yaml b/hasura/migrations/1596730747611_run_sql_migration/up.yaml new file mode 100644 index 000000000..53a7fdfa3 --- /dev/null +++ b/hasura/migrations/1596730747611_run_sql_migration/up.yaml @@ -0,0 +1,14 @@ +- args: + cascade: true + read_only: false + sql: "CREATE OR REPLACE FUNCTION public.parts_status_by_job_id(jobid uuid)\n RETURNS + SETOF joblines\n LANGUAGE plpgsql\n STABLE\nAS $function$\n\nBEGIN\n if jobid + = '' then\n return query select status ,count(1), part_type from joblines + j group by status, part_type ;\n else \n return query select status ,count(1), + part_type from joblines j where j.jobid =jobid group by status, part_type;\n + \ end if;\n\n\tEND\n$function$;" + type: run_sql +- args: + name: parts_status_by_job_id + schema: public + type: track_function diff --git a/hasura/migrations/1596731037543_drop_function_public_parts_status_by_job_id/down.yaml b/hasura/migrations/1596731037543_drop_function_public_parts_status_by_job_id/down.yaml new file mode 100644 index 000000000..51ec77c06 --- /dev/null +++ b/hasura/migrations/1596731037543_drop_function_public_parts_status_by_job_id/down.yaml @@ -0,0 +1,10 @@ +- args: + cascade: false + read_only: false + sql: "CREATE OR REPLACE FUNCTION public.parts_status_by_job_id(jobid uuid)\n RETURNS + SETOF joblines\n LANGUAGE plpgsql\n STABLE\nAS $function$\n\nBEGIN\n if jobid + = '' then\n return query select status ,count(1), part_type from joblines + j group by status, part_type ;\n else \n return query select status ,count(1), + part_type from joblines j where j.jobid =jobid group by status, part_type;\n + \ end if;\n\n\tEND\n$function$;" + type: run_sql diff --git a/hasura/migrations/1596731037543_drop_function_public_parts_status_by_job_id/up.yaml b/hasura/migrations/1596731037543_drop_function_public_parts_status_by_job_id/up.yaml new file mode 100644 index 000000000..cbae152a7 --- /dev/null +++ b/hasura/migrations/1596731037543_drop_function_public_parts_status_by_job_id/up.yaml @@ -0,0 +1,5 @@ +- args: + cascade: false + read_only: false + sql: DROP FUNCTION "public"."parts_status_by_job_id"("pg_catalog"."uuid"); + type: run_sql diff --git a/hasura/migrations/1596731045755_run_sql_migration/down.yaml b/hasura/migrations/1596731045755_run_sql_migration/down.yaml new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/hasura/migrations/1596731045755_run_sql_migration/down.yaml @@ -0,0 +1 @@ +[] diff --git a/hasura/migrations/1596731045755_run_sql_migration/up.yaml b/hasura/migrations/1596731045755_run_sql_migration/up.yaml new file mode 100644 index 000000000..a586e30dd --- /dev/null +++ b/hasura/migrations/1596731045755_run_sql_migration/up.yaml @@ -0,0 +1,14 @@ +- args: + cascade: true + read_only: false + sql: "CREATE OR REPLACE FUNCTION public.parts_status_by_job_id(jobid text)\n RETURNS + SETOF joblines\n LANGUAGE plpgsql\n STABLE\nAS $function$\n\nBEGIN\n if jobid + = '' then\n return query select status ,count(1), part_type from joblines + j group by status, part_type ;\n else \n return query select status ,count(1), + part_type from joblines j where j.jobid =jobid group by status, part_type;\n + \ end if;\n\n\tEND\n$function$;" + type: run_sql +- args: + name: parts_status_by_job_id + schema: public + type: track_function diff --git a/hasura/migrations/1596731075703_drop_function_public_parts_status_by_job_id/down.yaml b/hasura/migrations/1596731075703_drop_function_public_parts_status_by_job_id/down.yaml new file mode 100644 index 000000000..6f0c45314 --- /dev/null +++ b/hasura/migrations/1596731075703_drop_function_public_parts_status_by_job_id/down.yaml @@ -0,0 +1,10 @@ +- args: + cascade: false + read_only: false + sql: "CREATE OR REPLACE FUNCTION public.parts_status_by_job_id(jobid text)\n RETURNS + SETOF joblines\n LANGUAGE plpgsql\n STABLE\nAS $function$\n\nBEGIN\n if jobid + = '' then\n return query select status ,count(1), part_type from joblines + j group by status, part_type ;\n else \n return query select status ,count(1), + part_type from joblines j where j.jobid =jobid group by status, part_type;\n + \ end if;\n\n\tEND\n$function$;" + type: run_sql diff --git a/hasura/migrations/1596731075703_drop_function_public_parts_status_by_job_id/up.yaml b/hasura/migrations/1596731075703_drop_function_public_parts_status_by_job_id/up.yaml new file mode 100644 index 000000000..98fff7d24 --- /dev/null +++ b/hasura/migrations/1596731075703_drop_function_public_parts_status_by_job_id/up.yaml @@ -0,0 +1,5 @@ +- args: + cascade: false + read_only: false + sql: DROP FUNCTION "public"."parts_status_by_job_id"("pg_catalog"."text"); + type: run_sql diff --git a/hasura/migrations/1596731097672_run_sql_migration/down.yaml b/hasura/migrations/1596731097672_run_sql_migration/down.yaml new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/hasura/migrations/1596731097672_run_sql_migration/down.yaml @@ -0,0 +1 @@ +[] diff --git a/hasura/migrations/1596731097672_run_sql_migration/up.yaml b/hasura/migrations/1596731097672_run_sql_migration/up.yaml new file mode 100644 index 000000000..0a659dbd5 --- /dev/null +++ b/hasura/migrations/1596731097672_run_sql_migration/up.yaml @@ -0,0 +1,14 @@ +- args: + cascade: true + read_only: false + sql: "CREATE OR REPLACE FUNCTION public.parts_status_by_job_id(jobIdVar text)\n + RETURNS SETOF joblines\n LANGUAGE plpgsql\n STABLE\nAS $function$\n\nBEGIN\n + \ if jobIdVar = '' then\n return query select status ,count(1), part_type + from joblines j group by status, part_type ;\n else \n return query select + status ,count(1), part_type from joblines j where j.jobid =jobIdVar group by + status, part_type;\n end if;\n\n\tEND\n$function$;" + type: run_sql +- args: + name: parts_status_by_job_id + schema: public + type: track_function diff --git a/hasura/migrations/1596731183831_drop_function_public_parts_status_by_job_id/down.yaml b/hasura/migrations/1596731183831_drop_function_public_parts_status_by_job_id/down.yaml new file mode 100644 index 000000000..64b09ac53 --- /dev/null +++ b/hasura/migrations/1596731183831_drop_function_public_parts_status_by_job_id/down.yaml @@ -0,0 +1,10 @@ +- args: + cascade: false + read_only: false + sql: "CREATE OR REPLACE FUNCTION public.parts_status_by_job_id(jobidvar text)\n + RETURNS SETOF joblines\n LANGUAGE plpgsql\n STABLE\nAS $function$\n\nBEGIN\n + \ if jobIdVar = '' then\n return query select status ,count(1), part_type + from joblines j group by status, part_type ;\n else \n return query select + status ,count(1), part_type from joblines j where j.jobid =jobIdVar group by + status, part_type;\n end if;\n\n\tEND\n$function$;" + type: run_sql diff --git a/hasura/migrations/1596731183831_drop_function_public_parts_status_by_job_id/up.yaml b/hasura/migrations/1596731183831_drop_function_public_parts_status_by_job_id/up.yaml new file mode 100644 index 000000000..98fff7d24 --- /dev/null +++ b/hasura/migrations/1596731183831_drop_function_public_parts_status_by_job_id/up.yaml @@ -0,0 +1,5 @@ +- args: + cascade: false + read_only: false + sql: DROP FUNCTION "public"."parts_status_by_job_id"("pg_catalog"."text"); + type: run_sql diff --git a/hasura/migrations/1596731190786_run_sql_migration/down.yaml b/hasura/migrations/1596731190786_run_sql_migration/down.yaml new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/hasura/migrations/1596731190786_run_sql_migration/down.yaml @@ -0,0 +1 @@ +[] diff --git a/hasura/migrations/1596731190786_run_sql_migration/up.yaml b/hasura/migrations/1596731190786_run_sql_migration/up.yaml new file mode 100644 index 000000000..5a4f1b9e4 --- /dev/null +++ b/hasura/migrations/1596731190786_run_sql_migration/up.yaml @@ -0,0 +1,14 @@ +- args: + cascade: true + read_only: false + sql: "CREATE OR REPLACE FUNCTION public.parts_status_by_job_id(jobIdVar uuid)\n + RETURNS SETOF joblines\n LANGUAGE plpgsql\n STABLE\nAS $function$\n\nBEGIN\n + \ if jobIdVar = '' then\n return query select status ,count(1), part_type + from joblines j group by status, part_type ;\n else \n return query select + status ,count(1), part_type from joblines j where j.jobid =jobIdVar group by + status, part_type;\n end if;\n\n\tEND\n$function$;" + type: run_sql +- args: + name: parts_status_by_job_id + schema: public + type: track_function diff --git a/hasura/migrations/1596731313289_run_sql_migration/down.yaml b/hasura/migrations/1596731313289_run_sql_migration/down.yaml new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/hasura/migrations/1596731313289_run_sql_migration/down.yaml @@ -0,0 +1 @@ +[] diff --git a/hasura/migrations/1596731313289_run_sql_migration/up.yaml b/hasura/migrations/1596731313289_run_sql_migration/up.yaml new file mode 100644 index 000000000..56c08fdc4 --- /dev/null +++ b/hasura/migrations/1596731313289_run_sql_migration/up.yaml @@ -0,0 +1,8 @@ +- args: + cascade: true + read_only: false + sql: "CREATE OR REPLACE FUNCTION public.parts_status_by_job_id(jobidvar uuid)\n + RETURNS SETOF joblines\n LANGUAGE plpgsql\n STABLE\nAS $function$\n\nBEGIN\n + \ \n return query select status ,count(1), part_type from joblines j where + j.jobid =jobIdVar group by status, part_type;\n\n\n\tEND\n$function$;" + type: run_sql diff --git a/hasura/migrations/1596731327292_run_sql_migration/down.yaml b/hasura/migrations/1596731327292_run_sql_migration/down.yaml new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/hasura/migrations/1596731327292_run_sql_migration/down.yaml @@ -0,0 +1 @@ +[] diff --git a/hasura/migrations/1596731327292_run_sql_migration/up.yaml b/hasura/migrations/1596731327292_run_sql_migration/up.yaml new file mode 100644 index 000000000..fb2831454 --- /dev/null +++ b/hasura/migrations/1596731327292_run_sql_migration/up.yaml @@ -0,0 +1,8 @@ +- args: + cascade: true + read_only: false + sql: "CREATE OR REPLACE FUNCTION public.parts_status_by_job_id(jobidvar uuid)\n + RETURNS SETOF joblines\n LANGUAGE plpgsql\n STABLE\nAS $function$\n\nBEGIN\n + \ \n return query select status ,count(1), part_type from joblines j where + j.jobid =jobidvar group by status, part_type;\n\n\n\tEND\n$function$;" + type: run_sql diff --git a/hasura/migrations/1596731474176_drop_function_public_parts_status_by_job_id/down.yaml b/hasura/migrations/1596731474176_drop_function_public_parts_status_by_job_id/down.yaml new file mode 100644 index 000000000..3676c9dbf --- /dev/null +++ b/hasura/migrations/1596731474176_drop_function_public_parts_status_by_job_id/down.yaml @@ -0,0 +1,8 @@ +- args: + cascade: false + read_only: false + sql: "CREATE OR REPLACE FUNCTION public.parts_status_by_job_id(jobidvar uuid)\n + RETURNS SETOF joblines\n LANGUAGE plpgsql\n STABLE\nAS $function$\n\nBEGIN\n + \ \n return query select status ,count(1), part_type from joblines j where + j.jobid =jobidvar group by status, part_type;\n\n\n\tEND\n$function$;" + type: run_sql diff --git a/hasura/migrations/1596731474176_drop_function_public_parts_status_by_job_id/up.yaml b/hasura/migrations/1596731474176_drop_function_public_parts_status_by_job_id/up.yaml new file mode 100644 index 000000000..cbae152a7 --- /dev/null +++ b/hasura/migrations/1596731474176_drop_function_public_parts_status_by_job_id/up.yaml @@ -0,0 +1,5 @@ +- args: + cascade: false + read_only: false + sql: DROP FUNCTION "public"."parts_status_by_job_id"("pg_catalog"."uuid"); + type: run_sql diff --git a/hasura/migrations/1596731602565_run_sql_migration/down.yaml b/hasura/migrations/1596731602565_run_sql_migration/down.yaml new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/hasura/migrations/1596731602565_run_sql_migration/down.yaml @@ -0,0 +1 @@ +[] diff --git a/hasura/migrations/1596731602565_run_sql_migration/up.yaml b/hasura/migrations/1596731602565_run_sql_migration/up.yaml new file mode 100644 index 000000000..f2b2470d6 --- /dev/null +++ b/hasura/migrations/1596731602565_run_sql_migration/up.yaml @@ -0,0 +1,10 @@ +- args: + cascade: true + read_only: false + sql: create view joblines_stats as select jobid, status ,count(1), part_type + from joblines j group by jobid, status, part_type ; + type: run_sql +- args: + name: joblines_stats + schema: public + type: add_existing_table_or_view diff --git a/hasura/migrations/1596731617912_rename_view_public_joblines_stats/down.yaml b/hasura/migrations/1596731617912_rename_view_public_joblines_stats/down.yaml new file mode 100644 index 000000000..eb7771d97 --- /dev/null +++ b/hasura/migrations/1596731617912_rename_view_public_joblines_stats/down.yaml @@ -0,0 +1,5 @@ +- args: + cascade: false + read_only: false + sql: alter view "public"."joblines_status" rename to "joblines_stats"; + type: run_sql diff --git a/hasura/migrations/1596731617912_rename_view_public_joblines_stats/up.yaml b/hasura/migrations/1596731617912_rename_view_public_joblines_stats/up.yaml new file mode 100644 index 000000000..9afff91c8 --- /dev/null +++ b/hasura/migrations/1596731617912_rename_view_public_joblines_stats/up.yaml @@ -0,0 +1,5 @@ +- args: + cascade: false + read_only: false + sql: alter view "public"."joblines_stats" rename to "joblines_status"; + type: run_sql diff --git a/hasura/migrations/1596731720387_create_relationship_job_public_table_joblines_status/down.yaml b/hasura/migrations/1596731720387_create_relationship_job_public_table_joblines_status/down.yaml new file mode 100644 index 000000000..992563b81 --- /dev/null +++ b/hasura/migrations/1596731720387_create_relationship_job_public_table_joblines_status/down.yaml @@ -0,0 +1,6 @@ +- args: + relationship: job + table: + name: joblines_status + schema: public + type: drop_relationship diff --git a/hasura/migrations/1596731720387_create_relationship_job_public_table_joblines_status/up.yaml b/hasura/migrations/1596731720387_create_relationship_job_public_table_joblines_status/up.yaml new file mode 100644 index 000000000..800097652 --- /dev/null +++ b/hasura/migrations/1596731720387_create_relationship_job_public_table_joblines_status/up.yaml @@ -0,0 +1,13 @@ +- args: + name: job + table: + name: joblines_status + schema: public + using: + manual_configuration: + column_mapping: + jobid: id + remote_table: + name: jobs + schema: public + type: create_object_relationship diff --git a/hasura/migrations/1596731789600_create_relationship_joblines_status_public_table_jobs/down.yaml b/hasura/migrations/1596731789600_create_relationship_joblines_status_public_table_jobs/down.yaml new file mode 100644 index 000000000..8a1659e18 --- /dev/null +++ b/hasura/migrations/1596731789600_create_relationship_joblines_status_public_table_jobs/down.yaml @@ -0,0 +1,6 @@ +- args: + relationship: joblines_status + table: + name: jobs + schema: public + type: drop_relationship diff --git a/hasura/migrations/1596731789600_create_relationship_joblines_status_public_table_jobs/up.yaml b/hasura/migrations/1596731789600_create_relationship_joblines_status_public_table_jobs/up.yaml new file mode 100644 index 000000000..fa8844fa1 --- /dev/null +++ b/hasura/migrations/1596731789600_create_relationship_joblines_status_public_table_jobs/up.yaml @@ -0,0 +1,13 @@ +- args: + name: joblines_status + table: + name: jobs + schema: public + using: + manual_configuration: + column_mapping: + id: jobid + remote_table: + name: joblines_status + schema: public + type: create_array_relationship diff --git a/hasura/migrations/1596731930213_update_permission_user_public_table_joblines_status/down.yaml b/hasura/migrations/1596731930213_update_permission_user_public_table_joblines_status/down.yaml new file mode 100644 index 000000000..5e0cc7891 --- /dev/null +++ b/hasura/migrations/1596731930213_update_permission_user_public_table_joblines_status/down.yaml @@ -0,0 +1,6 @@ +- args: + role: user + table: + name: joblines_status + schema: public + type: drop_select_permission diff --git a/hasura/migrations/1596731930213_update_permission_user_public_table_joblines_status/up.yaml b/hasura/migrations/1596731930213_update_permission_user_public_table_joblines_status/up.yaml new file mode 100644 index 000000000..a1969f745 --- /dev/null +++ b/hasura/migrations/1596731930213_update_permission_user_public_table_joblines_status/up.yaml @@ -0,0 +1,26 @@ +- args: + permission: + allow_aggregations: false + backend_only: false + columns: + - jobid + - status + - count + - part_type + computed_fields: [] + filter: + job: + bodyshop: + associations: + _and: + - user: + authid: + _eq: X-Hasura-User-Id + - active: + _eq: true + limit: null + role: user + table: + name: joblines_status + schema: public + type: create_select_permission diff --git a/hasura/migrations/metadata.yaml b/hasura/migrations/metadata.yaml index 72dcdede0..c1b843ed5 100644 --- a/hasura/migrations/metadata.yaml +++ b/hasura/migrations/metadata.yaml @@ -1891,6 +1891,36 @@ tables: _eq: X-Hasura-User-Id - active: _eq: true +- table: + schema: public + name: joblines_status + object_relationships: + - name: job + using: + manual_configuration: + remote_table: + schema: public + name: jobs + column_mapping: + jobid: id + select_permissions: + - role: user + permission: + columns: + - jobid + - status + - count + - part_type + filter: + job: + bodyshop: + associations: + _and: + - user: + authid: + _eq: X-Hasura-User-Id + - active: + _eq: true - table: schema: public name: jobs @@ -1978,6 +2008,14 @@ tables: table: schema: public name: joblines + - name: joblines_status + using: + manual_configuration: + remote_table: + schema: public + name: joblines_status + column_mapping: + id: jobid - name: notes using: foreign_key_constraint_on: