diff --git a/bodyshop_translations.babel b/bodyshop_translations.babel
index fe6074ad7..3464f1110 100644
--- a/bodyshop_translations.babel
+++ b/bodyshop_translations.babel
@@ -32479,6 +32479,27 @@
+
+ zeroactualnegativeprod
+ false
+
+
+
+
+
+ en-US
+ false
+
+
+ es-MX
+ false
+
+
+ fr-CA
+ false
+
+
+
diff --git a/client/src/components/time-ticket-list/time-ticket-list.component.jsx b/client/src/components/time-ticket-list/time-ticket-list.component.jsx
index 13e9d413f..a6e12ed51 100644
--- a/client/src/components/time-ticket-list/time-ticket-list.component.jsx
+++ b/client/src/components/time-ticket-list/time-ticket-list.component.jsx
@@ -265,6 +265,7 @@ export function TimeTicketList({
+
{totals.productivehrs}
{totals.actualhrs}
diff --git a/client/src/components/time-ticket-modal/time-ticket-modal.component.jsx b/client/src/components/time-ticket-modal/time-ticket-modal.component.jsx
index 68d4e35e4..6d8356f5d 100644
--- a/client/src/components/time-ticket-modal/time-ticket-modal.component.jsx
+++ b/client/src/components/time-ticket-modal/time-ticket-modal.component.jsx
@@ -152,11 +152,33 @@ export function TimeTicketModalComponent({
},
]}
>
-
+
)}
-
+ ({
+ async validator(rule, value) {
+ if (value) {
+ const prodHrs = getFieldValue("productivehrs");
+ if (prodHrs < 0 && value !== 0)
+ return Promise.reject(
+ t("timetickets.labels.zeroactualnegativeprod")
+ );
+ else {
+ return Promise.resolve();
+ }
+ } else {
+ return Promise.resolve();
+ }
+ },
+ }),
+ ]}
+ >
{isEdit && (
diff --git a/client/src/translations/en_us/common.json b/client/src/translations/en_us/common.json
index 3de4f38fa..55da35541 100644
--- a/client/src/translations/en_us/common.json
+++ b/client/src/translations/en_us/common.json
@@ -1793,7 +1793,7 @@
"refinishhours": "R",
"selectview": "Select a View",
"sublets": "Sublets",
- "totalhours": "Total Hrs",
+ "totalhours": "Total Hrs ",
"touchtime": "T/T",
"viewname": "View Name"
},
@@ -1957,7 +1957,8 @@
"shift": "Shift",
"shiftalreadyclockedon": "Active Shift Time Tickets",
"straight_time": "Straight Time",
- "timetickets": "Time Tickets"
+ "timetickets": "Time Tickets",
+ "zeroactualnegativeprod": "Actual hours must be 0 if entering negative productive hours."
},
"successes": {
"clockedin": "Clocked in successfully.",
diff --git a/client/src/translations/es/common.json b/client/src/translations/es/common.json
index 81fc4ef5b..baa184397 100644
--- a/client/src/translations/es/common.json
+++ b/client/src/translations/es/common.json
@@ -1957,7 +1957,8 @@
"shift": "",
"shiftalreadyclockedon": "",
"straight_time": "",
- "timetickets": ""
+ "timetickets": "",
+ "zeroactualnegativeprod": ""
},
"successes": {
"clockedin": "",
diff --git a/client/src/translations/fr/common.json b/client/src/translations/fr/common.json
index b4148f7ec..190d426ec 100644
--- a/client/src/translations/fr/common.json
+++ b/client/src/translations/fr/common.json
@@ -1957,7 +1957,8 @@
"shift": "",
"shiftalreadyclockedon": "",
"straight_time": "",
- "timetickets": ""
+ "timetickets": "",
+ "zeroactualnegativeprod": ""
},
"successes": {
"clockedin": "",