hours and minutes to one input for duration

master
alex 2024-01-21 10:29:30 +01:00
parent 07f9240994
commit 93a5094c7c
4 changed files with 59 additions and 36 deletions

View File

@ -16,8 +16,12 @@
"add": "Hinzufügen" "add": "Hinzufügen"
}, },
"unit": { "unit": {
"hours": "Stunden",
"hour": "Stunde",
"minutes": "Minuten", "minutes": "Minuten",
"days": "Tage" "minute": "Minute",
"days": "Tage",
"separator": "und"
}, },
"failed": "Fehlgeschlagen", "failed": "Fehlgeschlagen",
"action": "Aktion", "action": "Aktion",
@ -104,10 +108,7 @@
"serviceActivityPrice": "Preis der Tätigkeit", "serviceActivityPrice": "Preis der Tätigkeit",
"serviceActivityPricePlaceholder": "Geben Sie den Preis der Tätigkeit ein", "serviceActivityPricePlaceholder": "Geben Sie den Preis der Tätigkeit ein",
"serviceActivityPriceUnit": "€", "serviceActivityPriceUnit": "€",
"serviceActivityDurationHours": "Dauer der Tätigkeit (Stunden)", "serviceActivityDurationMinutes": "Dauer der Tätigkeit",
"serviceActivityDurationHoursPlaceholder": "Geben Sie die Dauer der Tätigkeit in Stunden ein",
"serviceActivityDurationHoursUnit": "Stunden",
"serviceActivityDurationMinutes": "Dauer der Tätigkeit (Minuten)",
"serviceActivityDurationMinutesPlaceholder": "Geben Sie die Dauer der Tätigkeit in Minuten ein", "serviceActivityDurationMinutesPlaceholder": "Geben Sie die Dauer der Tätigkeit in Minuten ein",
"serviceActivityDurationMinutesUnit": "Minuten", "serviceActivityDurationMinutesUnit": "Minuten",
"serviceActivityResponsible": "Verantwortliche Mitarbeiter", "serviceActivityResponsible": "Verantwortliche Mitarbeiter",

View File

@ -16,8 +16,12 @@
"add": "Add" "add": "Add"
}, },
"unit": { "unit": {
"minutes": "Minutes", "hours": "hours",
"days": "Days" "hour": "hour",
"minutes": "minutes",
"minute": "minute",
"days": "Days",
"separator": "and"
}, },
"failed": "Failed", "failed": "Failed",
"action": "Action", "action": "Action",
@ -107,9 +111,6 @@
"serviceActivityPrice": "Price of the activity", "serviceActivityPrice": "Price of the activity",
"serviceActivityPricePlaceholder": "Enter the price of the activity", "serviceActivityPricePlaceholder": "Enter the price of the activity",
"serviceActivityPriceUnit": "€", "serviceActivityPriceUnit": "€",
"serviceActivityDurationHours": "Duration of activity (hours)",
"serviceActivityDurationHoursPlaceholder": "Enter the duration of the activity in hours",
"serviceActivityDurationHoursUnit": "Hours",
"serviceActivityDurationMinutes": "Duration of activity (minutes)", "serviceActivityDurationMinutes": "Duration of activity (minutes)",
"serviceActivityDurationMinutesPlaceholder": "Enter the duration of the activity in minutes", "serviceActivityDurationMinutesPlaceholder": "Enter the duration of the activity in minutes",
"serviceActivityDurationMinutesUnit": "Minutes", "serviceActivityDurationMinutesUnit": "Minutes",

View File

@ -351,7 +351,12 @@ function Service({
> >
<p>{activity.description}</p> <p>{activity.description}</p>
<p>Preis: {activity.price} </p> <p>Preis: {activity.price} </p>
<p>Dauer: {activity.duration} Minuten</p> <p>
Dauer: {activity.duration} Minuten{" "}
<Typography.Text type="secondary">
{durationToHoursAndMinutes(t, activity.duration)}
</Typography.Text>
</p>
</Card> </Card>
); );
}) })
@ -366,6 +371,37 @@ function Service({
); );
} }
function durationToHoursAndMinutes(t, duration) {
const MINUTES_IN_HOUR = 60;
const singularHourText = t("common.unit.hour");
const pluralHourText = t("common.unit.hours");
const singularMinuteText = t("common.unit.minute");
const pluralMinuteText = t("common.unit.minutes");
const hours = Math.floor(duration / MINUTES_IN_HOUR);
const minutes = duration % MINUTES_IN_HOUR;
if (hours === 0 && minutes < 61) {
return "";
}
let response = "";
if (hours === 0) {
response = `${minutes} ${
minutes === 1 ? singularMinuteText : pluralMinuteText
}`;
} else if (minutes === 0) {
response = `${hours} ${hours === 1 ? singularHourText : pluralHourText}`;
} else {
response = `${hours} ${hours === 1 ? singularHourText : pluralHourText} ${t(
"common.unit.separator"
)} ${minutes} ${minutes === 1 ? singularMinuteText : pluralMinuteText}`;
}
return `(${response})`;
}
// this modal is used to create and edit services // this modal is used to create and edit services
function ModalAddEditService({ function ModalAddEditService({
storeId, storeId,
@ -550,11 +586,9 @@ function ModalAddEditServiceActivity({
serviceActivityDescription: serviceActivityDescription:
addEditServiceActivityModalOptions.activity.description, addEditServiceActivityModalOptions.activity.description,
serviceActivityPrice: addEditServiceActivityModalOptions.activity.price, serviceActivityPrice: addEditServiceActivityModalOptions.activity.price,
serviceActivityDurationHours: Math.floor(
addEditServiceActivityModalOptions.activity.duration / 60
),
serviceActivityDurationMinutes: serviceActivityDurationMinutes:
addEditServiceActivityModalOptions.activity.duration % 60, addEditServiceActivityModalOptions.activity.duration,
}); });
setSelectedEmployeesRowKeys( setSelectedEmployeesRowKeys(
@ -600,9 +634,7 @@ function ModalAddEditServiceActivity({
name: values.serviceActivityName, name: values.serviceActivityName,
description: values.serviceActivityDescription, description: values.serviceActivityDescription,
price: values.serviceActivityPrice, price: values.serviceActivityPrice,
duration: duration: values.serviceActivityDurationMinutes,
values.serviceActivityDurationHours * 60 +
values.serviceActivityDurationMinutes,
userIds: userIds:
selectedEmployeesRowKeys.length === users.length selectedEmployeesRowKeys.length === users.length
? [] ? []
@ -637,14 +669,11 @@ function ModalAddEditServiceActivity({
const formServiceActivityPrice = form.getFieldValue( const formServiceActivityPrice = form.getFieldValue(
"serviceActivityPrice" "serviceActivityPrice"
); );
const formServiceActivityDurationHours = form.getFieldValue(
"serviceActivityDurationHours"
);
const formServiceActivityDurationMinutes = form.getFieldValue( const formServiceActivityDurationMinutes = form.getFieldValue(
"serviceActivityDurationMinutes" "serviceActivityDurationMinutes"
); );
// if the service name didn't change, don't send a request // if the service didn't change, don't send a request
if ( if (
addEditServiceActivityModalOptions.activity.name === addEditServiceActivityModalOptions.activity.name ===
formServiceActivityName && formServiceActivityName &&
@ -653,7 +682,6 @@ function ModalAddEditServiceActivity({
addEditServiceActivityModalOptions.activity.price === addEditServiceActivityModalOptions.activity.price ===
formServiceActivityPrice && formServiceActivityPrice &&
addEditServiceActivityModalOptions.activity.duration === addEditServiceActivityModalOptions.activity.duration ===
formServiceActivityDurationHours * 60 +
formServiceActivityDurationMinutes && formServiceActivityDurationMinutes &&
(selectedEmployeesRowKeys.length === users.length || (selectedEmployeesRowKeys.length === users.length ||
addEditServiceActivityModalOptions.activity addEditServiceActivityModalOptions.activity
@ -694,15 +722,12 @@ function ModalAddEditServiceActivity({
body.price = formServiceActivityPrice; body.price = formServiceActivityPrice;
} }
let formDuration = let formDuration = formServiceActivityDurationMinutes;
formServiceActivityDurationHours * 60 +
formServiceActivityDurationMinutes;
if ( if (
formDuration !== formDuration !==
addEditServiceActivityModalOptions.activity.duration addEditServiceActivityModalOptions.activity.duration
) { ) {
validateFields.push("serviceActivityDurationHours");
validateFields.push("serviceActivityDurationMinutes"); validateFields.push("serviceActivityDurationMinutes");
body.duration = formDuration; body.duration = formDuration;
} }
@ -740,8 +765,6 @@ function ModalAddEditServiceActivity({
<ServiceActivityPriceFormInput formItemName="serviceActivityPrice" /> <ServiceActivityPriceFormInput formItemName="serviceActivityPrice" />
<ServiceActivityDurationHoursFormInput formItemName="serviceActivityDurationHours" />
<ServiceActivityDurationMinutesFormInput formItemName="serviceActivityDurationMinutes" /> <ServiceActivityDurationMinutesFormInput formItemName="serviceActivityDurationMinutes" />
<Space direction="vertical" style={{ width: "100%" }}> <Space direction="vertical" style={{ width: "100%" }}>
@ -870,7 +893,7 @@ function ServiceActivityPriceFormInput({ formItemName }) {
/> />
); );
} }
/*
function ServiceActivityDurationHoursFormInput({ function ServiceActivityDurationHoursFormInput({
formItemName, formItemName,
setIsInputValid, setIsInputValid,
@ -897,7 +920,7 @@ function ServiceActivityDurationHoursFormInput({
/> />
); );
} }
*/
function ServiceActivityDurationMinutesFormInput({ function ServiceActivityDurationMinutesFormInput({
formItemName, formItemName,
setIsInputValid, setIsInputValid,

View File

@ -70,14 +70,12 @@ export const Constants = {
MAX_STORE_SERVICE_ACTIVITY_DESCRIPTION_LENGTH: 1024, MAX_STORE_SERVICE_ACTIVITY_DESCRIPTION_LENGTH: 1024,
MIN_STORE_SERVICE_ACTIVITY_PRICE: 0, MIN_STORE_SERVICE_ACTIVITY_PRICE: 0,
MAX_STORE_SERVICE_ACTIVITY_PRICE: 10000000, MAX_STORE_SERVICE_ACTIVITY_PRICE: 10000000,
MIN_STORE_SERVICE_ACTIVITY_DURATION_HOURS: 0,
MAX_STORE_SERVICE_ACTIVITY_DURATION_HOURS: 23,
MIN_STORE_SERVICE_ACTIVITY_DURATION_MINUTES: 0, MIN_STORE_SERVICE_ACTIVITY_DURATION_MINUTES: 0,
MAX_STORE_SERVICE_ACTIVITY_DURATION_MINUTES: 59, MAX_STORE_SERVICE_ACTIVITY_DURATION_MINUTES: 60 * 24, // 24 hours in minutes
MIN_CALENDAR_FUTURE_BOOKING_DAYS: 0, MIN_CALENDAR_FUTURE_BOOKING_DAYS: 0,
MAX_CALENDAR_FUTURE_BOOKING_DAYS: 365, MAX_CALENDAR_FUTURE_BOOKING_DAYS: 365,
MIN_CALENDAR_EARLIEST_BOOKING_TIME: 0, MIN_CALENDAR_EARLIEST_BOOKING_TIME: 0,
MAX_CALENDAR_EARLIEST_BOOKING_TIME: 60 * 24, // 24 hours MAX_CALENDAR_EARLIEST_BOOKING_TIME: 60 * 24, // 24 hours in minutes
}, },
DELAY_ACCOUNT_NAME_CHECK: 250, DELAY_ACCOUNT_NAME_CHECK: 250,
MAX_AVATAR_SIZE: 5 * 1024 * 1024, MAX_AVATAR_SIZE: 5 * 1024 * 1024,