diff --git a/client/src/pages/tech-shift-clock/tech-shift-clock.component.jsx b/client/src/pages/tech-shift-clock/tech-shift-clock.component.jsx
index 52e0e99c7..2dad65e64 100644
--- a/client/src/pages/tech-shift-clock/tech-shift-clock.component.jsx
+++ b/client/src/pages/tech-shift-clock/tech-shift-clock.component.jsx
@@ -1,7 +1,14 @@
-import React from "react";
+import React, { useEffect } from "react";
+import { useTranslation } from "react-i18next";
import TimeTicketShift from "../../components/time-ticket-shift/time-ticket-shift.container";
export default function TechShiftClock() {
+ const { t } = useTranslation();
+
+ useEffect(() => {
+ document.title = t("titles.techshiftclock");
+ }, [t]);
+
return (
diff --git a/client/src/translations/en_us/common.json b/client/src/translations/en_us/common.json
index 09798f0a5..919f7e297 100644
--- a/client/src/translations/en_us/common.json
+++ b/client/src/translations/en_us/common.json
@@ -1001,10 +1001,13 @@
},
"labels": {
"actions": "Actions",
+ "active": "Active",
"endmustbeafterstart": "End date must be after start date.",
"flat_rate": "Flat Rate",
+ "inactive": "Inactive",
"name": "Name",
"rate_type": "Rate Type",
+ "status": "Status",
"straight_time": "Straight Time"
},
"successes": {
@@ -1704,6 +1707,7 @@
"estimator": "Estimator",
"filehandler": "File Handler",
"insurance": "Insurance Details",
+ "more": "More",
"notes": "Notes",
"parts": "Parts",
"totals": "Totals",
@@ -2024,7 +2028,7 @@
"joblookup": "Job Lookup",
"login": "Login",
"logout": "Logout",
- "productionboard": "Production Board - Visual",
+ "productionboard": "Production Visual",
"productionlist": "Production List",
"shiftclockin": "Shift Clock"
}
@@ -2621,6 +2625,7 @@
"open_orders": "Open Orders by Date",
"open_orders_csr": "Open Orders by CSR",
"open_orders_estimator": "Open Orders by Estimator",
+ "open_orders_excel": "Open Orders - Excel",
"open_orders_ins_co": "Open Orders by Insurance Company",
"open_orders_referral": "Open Orders by Referral Source",
"open_orders_specific_csr": "Open Orders filtered by CSR",
@@ -2901,7 +2906,7 @@
"parts-queue": "Parts Queue | $t(titles.app)",
"payments-all": "Payments | $t(titles.app)",
"phonebook": "Phonebook | $t(titles.app)",
- "productionboard": "Production - Board",
+ "productionboard": "Production Board - Visual | $t(titles.app)",
"productionlist": "Production Board - List | $t(titles.app)",
"profile": "My Profile | $t(titles.app)",
"readyjobs": "Ready Jobs | $t(titles.app)",
@@ -2913,6 +2918,10 @@
"shop-csi": "CSI Responses | $t(titles.app)",
"shop-templates": "Shop Templates | $t(titles.app)",
"shop_vendors": "Vendors | $t(titles.app)",
+ "techconsole": "Technician Console | $t(titles.app)",
+ "techjoblookup": "Technician Job Lookup | $t(titles.app)",
+ "techjobclock": "Technician Job Clock | $t(titles.app)",
+ "techshiftclock": "Technician Shift Clock | $t(titles.app)",
"temporarydocs": "Temporary Documents | $t(titles.app)",
"timetickets": "Time Tickets | $t(titles.app)",
"ttapprovals": "",
diff --git a/client/src/translations/es/common.json b/client/src/translations/es/common.json
index da9f6b4e0..a798f790c 100644
--- a/client/src/translations/es/common.json
+++ b/client/src/translations/es/common.json
@@ -1001,10 +1001,13 @@
},
"labels": {
"actions": "",
+ "active": "",
"endmustbeafterstart": "",
"flat_rate": "",
+ "inactive": "",
"name": "",
"rate_type": "",
+ "status": "",
"straight_time": ""
},
"successes": {
@@ -1704,6 +1707,7 @@
"estimator": "Estimador",
"filehandler": "File Handler",
"insurance": "detalles del seguro",
+ "more": "Más",
"notes": "Notas",
"parts": "Partes",
"totals": "Totales",
@@ -2621,6 +2625,7 @@
"open_orders": "",
"open_orders_csr": "",
"open_orders_estimator": "",
+ "open_orders_excel": "",
"open_orders_ins_co": "",
"open_orders_referral": "",
"open_orders_specific_csr": "",
@@ -2894,7 +2899,7 @@
"jobs-intake": "",
"jobsavailable": "Empleos disponibles | $t(titles.app)",
"jobsdetail": "Trabajo {{ro_number}} | $t(titles.app)",
- "jobsdocuments": "Documentos de trabajo {{ro_number}} | $ t (títulos.app)",
+ "jobsdocuments": "Documentos de trabajo {{ro_number}} | $t(titles.app)",
"manageroot": "Casa | $t(titles.app)",
"owners": "Todos los propietarios | $t(titles.app)",
"owners-detail": "",
@@ -2913,6 +2918,10 @@
"shop-csi": "",
"shop-templates": "",
"shop_vendors": "Vendedores | $t(titles.app)",
+ "techconsole": "$t(titles.app)",
+ "techjoblookup": "$t(titles.app)",
+ "techjobclock": "$t(titles.app)",
+ "techshiftclock": "$t(titles.app)",
"temporarydocs": "",
"timetickets": "",
"ttapprovals": "",
diff --git a/client/src/translations/fr/common.json b/client/src/translations/fr/common.json
index a4c1dc686..b65abaf04 100644
--- a/client/src/translations/fr/common.json
+++ b/client/src/translations/fr/common.json
@@ -1001,10 +1001,13 @@
},
"labels": {
"actions": "",
+ "active": "",
"endmustbeafterstart": "",
"flat_rate": "",
+ "inactive": "",
"name": "",
"rate_type": "",
+ "status": "",
"straight_time": ""
},
"successes": {
@@ -1704,6 +1707,7 @@
"estimator": "Estimateur",
"filehandler": "Gestionnaire de fichiers",
"insurance": "Détails de l'assurance",
+ "more": "Plus",
"notes": "Remarques",
"parts": "les pièces",
"totals": "Totaux",
@@ -2621,6 +2625,7 @@
"open_orders": "",
"open_orders_csr": "",
"open_orders_estimator": "",
+ "open_orders_excel": "",
"open_orders_ins_co": "",
"open_orders_referral": "",
"open_orders_specific_csr": "",
@@ -2894,7 +2899,7 @@
"jobs-intake": "",
"jobsavailable": "Emplois disponibles | $t(titles.app)",
"jobsdetail": "Travail {{ro_number}} | $t(titles.app)",
- "jobsdocuments": "Documents de travail {{ro_number}} | $ t (titres.app)",
+ "jobsdocuments": "Documents de travail {{ro_number}} | $t(titles.app)",
"manageroot": "Accueil | $t(titles.app)",
"owners": "Tous les propriétaires | $t(titles.app)",
"owners-detail": "",
@@ -2913,6 +2918,10 @@
"shop-csi": "",
"shop-templates": "",
"shop_vendors": "Vendeurs | $t(titles.app)",
+ "techconsole": "$t(titles.app)",
+ "techjoblookup": "$t(titles.app)",
+ "techjobclock": "$t(titles.app)",
+ "techshiftclock": "$t(titles.app)",
"temporarydocs": "",
"timetickets": "",
"ttapprovals": "",
diff --git a/client/src/utils/TemplateConstants.js b/client/src/utils/TemplateConstants.js
index 365b2431e..eeb937c3a 100644
--- a/client/src/utils/TemplateConstants.js
+++ b/client/src/utils/TemplateConstants.js
@@ -2026,6 +2026,19 @@ export const TemplateList = (type, context) => {
},
group: "customers",
},
+ open_orders_excel: {
+ title: i18n.t("reportcenter.templates.open_orders_excel"),
+ subject: i18n.t("reportcenter.templates.open_orders_excel"),
+ key: "open_orders_excel",
+ //idtype: "vendor",
+ reporttype: "excel",
+ disabled: false,
+ rangeFilter: {
+ object: i18n.t("reportcenter.labels.objects.jobs"),
+ field: i18n.t("jobs.fields.date_open"),
+ },
+ group: "jobs",
+ },
}
: {}),
...(!type || type === "courtesycarcontract"
diff --git a/hasura/metadata/tables.yaml b/hasura/metadata/tables.yaml
index 9867b3f8e..f4e4d99a7 100644
--- a/hasura/metadata/tables.yaml
+++ b/hasura/metadata/tables.yaml
@@ -2423,6 +2423,73 @@
_eq: X-Hasura-User-Id
- active:
_eq: true
+- table:
+ name: eula_acceptances
+ schema: public
+ object_relationships:
+ - name: eula
+ using:
+ foreign_key_constraint_on: eulaid
+ - name: user
+ using:
+ foreign_key_constraint_on: useremail
+ insert_permissions:
+ - role: user
+ permission:
+ check:
+ user:
+ authid:
+ _eq: X-Hasura-User-Id
+ columns:
+ - address
+ - buisness_name
+ - date_accepted
+ - eulaid
+ - first_name
+ - last_name
+ - phone_number
+ - useremail
+ select_permissions:
+ - role: user
+ permission:
+ columns:
+ - address
+ - buisness_name
+ - first_name
+ - last_name
+ - phone_number
+ - useremail
+ - created_at
+ - date_accepted
+ - updated_at
+ - eulaid
+ - id
+ filter:
+ user:
+ authid:
+ _eq: X-Hasura-User-Id
+- table:
+ name: eulas
+ schema: public
+ array_relationships:
+ - name: eula_acceptances
+ using:
+ foreign_key_constraint_on:
+ column: eulaid
+ table:
+ name: eula_acceptances
+ schema: public
+ select_permissions:
+ - role: user
+ permission:
+ columns:
+ - id
+ - created_at
+ - updated_at
+ - effective_date
+ - end_date
+ - content
+ filter: {}
- table:
name: exportlog
schema: public
@@ -5888,6 +5955,13 @@
table:
name: email_audit_trail
schema: public
+ - name: eula_acceptances
+ using:
+ foreign_key_constraint_on:
+ column: useremail
+ table:
+ name: eula_acceptances
+ schema: public
- name: exportlogs
using:
foreign_key_constraint_on:
diff --git a/hasura/migrations/1705522419599_create_table_public_eulas/down.sql b/hasura/migrations/1705522419599_create_table_public_eulas/down.sql
new file mode 100644
index 000000000..bea9117e2
--- /dev/null
+++ b/hasura/migrations/1705522419599_create_table_public_eulas/down.sql
@@ -0,0 +1 @@
+DROP TABLE "public"."eulas";
diff --git a/hasura/migrations/1705522419599_create_table_public_eulas/up.sql b/hasura/migrations/1705522419599_create_table_public_eulas/up.sql
new file mode 100644
index 000000000..31eaa5f8d
--- /dev/null
+++ b/hasura/migrations/1705522419599_create_table_public_eulas/up.sql
@@ -0,0 +1,18 @@
+CREATE TABLE "public"."eulas" ("id" uuid NOT NULL DEFAULT gen_random_uuid(), "created_at" timestamptz NOT NULL DEFAULT now(), "updated_at" timestamptz NOT NULL DEFAULT now(), "effective_date" timestamptz NOT NULL, "end_date" timestamptz, "content" text NOT NULL, PRIMARY KEY ("id") );
+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_eulas_updated_at"
+BEFORE UPDATE ON "public"."eulas"
+FOR EACH ROW
+EXECUTE PROCEDURE "public"."set_current_timestamp_updated_at"();
+COMMENT ON TRIGGER "set_public_eulas_updated_at" ON "public"."eulas"
+IS 'trigger to set value of column "updated_at" to current timestamp on row update';
+CREATE EXTENSION IF NOT EXISTS pgcrypto;
diff --git a/hasura/migrations/1705522869369_create_table_public_eula_acceptances/down.sql b/hasura/migrations/1705522869369_create_table_public_eula_acceptances/down.sql
new file mode 100644
index 000000000..29d08ee95
--- /dev/null
+++ b/hasura/migrations/1705522869369_create_table_public_eula_acceptances/down.sql
@@ -0,0 +1 @@
+DROP TABLE "public"."eula_acceptances";
diff --git a/hasura/migrations/1705522869369_create_table_public_eula_acceptances/up.sql b/hasura/migrations/1705522869369_create_table_public_eula_acceptances/up.sql
new file mode 100644
index 000000000..18dc09e8e
--- /dev/null
+++ b/hasura/migrations/1705522869369_create_table_public_eula_acceptances/up.sql
@@ -0,0 +1,18 @@
+CREATE TABLE "public"."eula_acceptances" ("id" uuid NOT NULL DEFAULT gen_random_uuid(), "created_at" timestamptz NOT NULL DEFAULT now(), "updated_at" timestamptz NOT NULL DEFAULT now(), "eulaid" uuid NOT NULL, "date_accepted" timestamptz NOT NULL, "first_name" text NOT NULL, "last_name" text NOT NULL, "address" text NOT NULL, "phone_number" Text NOT NULL, "buisness_name" Text NOT NULL, "useremail" text NOT NULL, PRIMARY KEY ("id") , FOREIGN KEY ("eulaid") REFERENCES "public"."eulas"("id") ON UPDATE restrict ON DELETE restrict, FOREIGN KEY ("useremail") REFERENCES "public"."users"("email") ON UPDATE restrict ON DELETE restrict);
+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_eula_acceptances_updated_at"
+BEFORE UPDATE ON "public"."eula_acceptances"
+FOR EACH ROW
+EXECUTE PROCEDURE "public"."set_current_timestamp_updated_at"();
+COMMENT ON TRIGGER "set_public_eula_acceptances_updated_at" ON "public"."eula_acceptances"
+IS 'trigger to set value of column "updated_at" to current timestamp on row update';
+CREATE EXTENSION IF NOT EXISTS pgcrypto;