- {`Joy Ride Status: ${enableJoyRide}`}
{`${InstanceRenderManager({
imex: t('titles.imexonline'),
rome: t('titles.romeonline'),
promanager: t('titles.promanager'),
- })} ${import.meta.env.VITE_APP_GIT_SHA || 'Local Build'} - ${
+ })} - ${
import.meta.env.VITE_APP_GIT_SHA_DATE
}`}
diff --git a/client/src/redux/user/user.sagas.js b/client/src/redux/user/user.sagas.js
index 6f00c390d..6d6921d0d 100644
--- a/client/src/redux/user/user.sagas.js
+++ b/client/src/redux/user/user.sagas.js
@@ -47,6 +47,7 @@ import client from "../../utils/GraphQLClient";
import {QUERY_EULA} from "../../graphql/bodyshop.queries";
import day from "../../utils/day";
import InstanceRenderManager from "../../utils/instanceRenderMgr";
+import { Userpilot } from "userpilot";
const fpPromise = FingerprintJS.load();
@@ -227,6 +228,15 @@ export function* signInSuccessSaga({payload}) {
window.$crisp.push(['set', 'user:nickname', [payload.displayName || payload.email]]);
window.$crisp.push(['set', 'session:segments', [['user']]]);
},
+ promanager: () =>{
+ Userpilot.identify(
+ payload.email,
+ {
+ email: payload.email,
+ }
+ );
+ console.log("*** Userpilot identified.")
+ }
});
} catch (error) {
diff --git a/client/src/translations/en_us/common.json b/client/src/translations/en_us/common.json
index 08a6737cf..14a98d82a 100644
--- a/client/src/translations/en_us/common.json
+++ b/client/src/translations/en_us/common.json
@@ -1165,6 +1165,7 @@
"loadingshop": "Loading shop data...",
"loggingin": "Authorizing...",
"markedexported": "Manually marked as exported.",
+ "media": "Media",
"message": "Message",
"monday": "Monday",
"na": "N/A",
@@ -2174,6 +2175,7 @@
"insurance": "Insurance Information",
"labor": "Labor",
"lifecycle": "Lifecycle",
+ "parts": "Parts",
"partssublet": "Parts & Bills",
"rates": "Rates",
"repairdata": "Repair Data",
diff --git a/client/src/translations/es/common.json b/client/src/translations/es/common.json
index 7c4416b16..ba11bb4a3 100644
--- a/client/src/translations/es/common.json
+++ b/client/src/translations/es/common.json
@@ -2174,6 +2174,7 @@
"insurance": "",
"labor": "Labor",
"lifecycle": "",
+ "parts": "",
"partssublet": "Piezas / Subarrendamiento",
"rates": "",
"repairdata": "Datos de reparación",
diff --git a/client/src/translations/fr/common.json b/client/src/translations/fr/common.json
index c219fbd89..1117003e0 100644
--- a/client/src/translations/fr/common.json
+++ b/client/src/translations/fr/common.json
@@ -2174,6 +2174,7 @@
"insurance": "",
"labor": "La main d'oeuvre",
"lifecycle": "",
+ "parts": "",
"partssublet": "Pièces / Sous-location",
"rates": "",
"repairdata": "Données de réparation",
diff --git a/client/vite.config.js b/client/vite.config.js
index 2ec487ccb..a5d9f6734 100644
--- a/client/vite.config.js
+++ b/client/vite.config.js
@@ -105,6 +105,9 @@ export default defineConfig({
react(),
// CompressionPlugin(), //Cloudfront already compresses assets, so not needed.
],
+ define:{
+ "APP_VERSION": JSON.stringify(process.env.npm_package_version)
+ },
server: {
host: true,
port: 3000,
diff --git a/hasura/metadata/tables.yaml b/hasura/metadata/tables.yaml
index 38dff43fa..a9ee63e81 100644
--- a/hasura/metadata/tables.yaml
+++ b/hasura/metadata/tables.yaml
@@ -832,6 +832,13 @@
table:
name: ioevents
schema: public
+ - name: ioevents
+ using:
+ foreign_key_constraint_on:
+ column: bodyshopid
+ table:
+ name: ioevents
+ schema: public
- name: jobs
using:
foreign_key_constraint_on:
@@ -867,6 +874,13 @@
table:
name: tasks
schema: public
+ - name: tasks
+ using:
+ foreign_key_constraint_on:
+ column: bodyshopid
+ table:
+ name: tasks
+ schema: public
- name: timetickets
using:
foreign_key_constraint_on:
@@ -3353,6 +3367,13 @@
table:
name: tasks
schema: public
+ - name: tasks
+ using:
+ foreign_key_constraint_on:
+ column: jobid
+ table:
+ name: tasks
+ schema: public
- name: timetickets
using:
foreign_key_constraint_on:
@@ -5057,6 +5078,13 @@
table:
name: tasks
schema: public
+ - name: tasks
+ using:
+ foreign_key_constraint_on:
+ column: partsorderid
+ table:
+ name: tasks
+ schema: public
insert_permissions:
- role: user
permission:
diff --git a/hasura/migrations/1710532848432_create_table_public_tasks/down.sql b/hasura/migrations/1710532848432_create_table_public_tasks/down.sql
new file mode 100644
index 000000000..ba949320f
--- /dev/null
+++ b/hasura/migrations/1710532848432_create_table_public_tasks/down.sql
@@ -0,0 +1 @@
+DROP TABLE "public"."tasks";
diff --git a/hasura/migrations/1710532848432_create_table_public_tasks/up.sql b/hasura/migrations/1710532848432_create_table_public_tasks/up.sql
new file mode 100644
index 000000000..f5e9db3c6
--- /dev/null
+++ b/hasura/migrations/1710532848432_create_table_public_tasks/up.sql
@@ -0,0 +1,18 @@
+CREATE TABLE "public"."tasks" ("id" uuid NOT NULL DEFAULT gen_random_uuid(), "created_at" timestamptz NOT NULL DEFAULT now(), "updated_at" timestamptz NOT NULL DEFAULT now(), "title" text NOT NULL, "description" Text, "deleted" boolean NOT NULL DEFAULT false, "deleted_at" timestamptz, "due_date" timestamptz, "created_by" text NOT NULL, "assigned_to" Text, "completed" boolean NOT NULL DEFAULT false, "completed_at" timestamptz, "remind_at" timestamptz, "priority" numeric, "bodyshopid" UUID NOT NULL, "jobid" UUID NOT NULL, "joblineid" UUID, "partsorderid" UUID, "billid" UUID, PRIMARY KEY ("id") , FOREIGN KEY ("created_by") REFERENCES "public"."users"("email") ON UPDATE restrict ON DELETE restrict, FOREIGN KEY ("assigned_to") REFERENCES "public"."users"("email") ON UPDATE restrict ON DELETE restrict, FOREIGN KEY ("bodyshopid") REFERENCES "public"."bodyshops"("id") ON UPDATE restrict ON DELETE restrict, FOREIGN KEY ("jobid") REFERENCES "public"."jobs"("id") ON UPDATE cascade ON DELETE cascade, FOREIGN KEY ("joblineid") REFERENCES "public"."joblines"("id") ON UPDATE set null ON DELETE set null, FOREIGN KEY ("partsorderid") REFERENCES "public"."parts_orders"("id") ON UPDATE set null ON DELETE set null, FOREIGN KEY ("billid") REFERENCES "public"."bills"("id") ON UPDATE set null ON DELETE set null);
+CREATE OR REPLACE FUNCTION "public"."set_current_timestamp_updated_at"()
+RETURNS TRIGGER AS $$
+DECLARE
+ _new record;
+BEGIN
+ _new := NEW;
+ _new."updated_at" = NOW();
+ RETURN _new;
+END;
+$$ LANGUAGE plpgsql;
+CREATE TRIGGER "set_public_tasks_updated_at"
+BEFORE UPDATE ON "public"."tasks"
+FOR EACH ROW
+EXECUTE PROCEDURE "public"."set_current_timestamp_updated_at"();
+COMMENT ON TRIGGER "set_public_tasks_updated_at" ON "public"."tasks"
+IS 'trigger to set value of column "updated_at" to current timestamp on row update';
+CREATE EXTENSION IF NOT EXISTS pgcrypto;
diff --git a/server/accounting/pbs/pbs-job-export.js b/server/accounting/pbs/pbs-job-export.js
index 69945505e..013d49c1d 100644
--- a/server/accounting/pbs/pbs-job-export.js
+++ b/server/accounting/pbs/pbs-job-export.js
@@ -16,7 +16,7 @@ const CalculateAllocations =
const CdkBase = require("../../web-sockets/web-socket");
const moment = require("moment-timezone");
const Dinero = require("dinero.js");
-const { default: InstanceManager } = require("../../utils/instanceMgr").default;
+const InstanceManager = require("../../utils/instanceMgr").default;
const axios = AxiosLib.create();
axios.interceptors.request.use((x) => {
@@ -661,7 +661,7 @@ async function InsertAccountPostingData(socket) {
.toISOString(), //"0001-01-01T00:00:00.0000000Z",
Description: socket.txEnvelope.story,
//AdditionalInfo: "String",
- Source: InstanceManager({imex: t("titles.imexonline"), rome:t("titles.romeonline")}),
+ Source: InstanceManager({imex: "ImEX Online", rome:"Rome Online"}),
Lines: wips,
},
},