Orders Scheduling - Multiple times a day
This commit is contained in:
parent
14bd8e117b
commit
ae3fb600b2
3 changed files with 46 additions and 7 deletions
|
|
@ -48,7 +48,7 @@ class OrderScheduler():
|
||||||
|
|
||||||
if orders_pool.scheduled:
|
if orders_pool.scheduled:
|
||||||
self.scheduled_pools[orders_pool.id] = self.scheduler.daily(
|
self.scheduled_pools[orders_pool.id] = self.scheduler.daily(
|
||||||
order_time(orders_pool.time),
|
[order_time(t) for t in orders_pool.time.split(",")],
|
||||||
self.scheduled_order,
|
self.scheduled_order,
|
||||||
args=(orders_pool.id,)
|
args=(orders_pool.id,)
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -69,8 +69,9 @@ type FormOrderSetOrder = Omit<OrderSetOrder, "id" | "add_ons"> & {
|
||||||
add_ons: FormOrderSetOrderAddOn[];
|
add_ons: FormOrderSetOrderAddOn[];
|
||||||
};
|
};
|
||||||
|
|
||||||
type FormOrderSet = Omit<OrderSet, "orders" | "punishment_pool_id"> & {
|
type FormOrderSet = Omit<OrderSet, "orders" | "time" | "punishment_pool_id"> & {
|
||||||
orders: FormOrderSetOrder[];
|
orders: FormOrderSetOrder[];
|
||||||
|
time: string[] | string;
|
||||||
punishment_pool_id?: string | number;
|
punishment_pool_id?: string | number;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -98,9 +99,14 @@ export const OrderSet: React.FC = () => {
|
||||||
|
|
||||||
const form = useForm<Partial<FormOrderSet>>({
|
const form = useForm<Partial<FormOrderSet>>({
|
||||||
mode: "uncontrolled",
|
mode: "uncontrolled",
|
||||||
|
cascadeUpdates: true,
|
||||||
initialValues: orderSet
|
initialValues: orderSet
|
||||||
? {
|
? {
|
||||||
...orderSet,
|
...orderSet,
|
||||||
|
time:
|
||||||
|
orderSet.scheduled && orderSet.time.indexOf(",") != -1
|
||||||
|
? [...orderSet.time.split(","), ""]
|
||||||
|
: [orderSet.time, ""],
|
||||||
punishment_pool_id: orderSet.punishment_pool_id
|
punishment_pool_id: orderSet.punishment_pool_id
|
||||||
? `${orderSet.punishment_pool_id}`
|
? `${orderSet.punishment_pool_id}`
|
||||||
: undefined,
|
: undefined,
|
||||||
|
|
@ -113,7 +119,7 @@ export const OrderSet: React.FC = () => {
|
||||||
name: (value: string) =>
|
name: (value: string) =>
|
||||||
value.length < 1 ? "Please enter a name" : null,
|
value.length < 1 ? "Please enter a name" : null,
|
||||||
time: (value: string, values: FormOrderSet) =>
|
time: (value: string, values: FormOrderSet) =>
|
||||||
values.scheduled && (!value || value.length < 1)
|
values.scheduled && (!value || value.length < 1 || !value[0])
|
||||||
? "Please set a time"
|
? "Please set a time"
|
||||||
: null,
|
: null,
|
||||||
probability: (value: number, values: FormOrderSet) =>
|
probability: (value: number, values: FormOrderSet) =>
|
||||||
|
|
@ -140,12 +146,27 @@ export const OrderSet: React.FC = () => {
|
||||||
},
|
},
|
||||||
transformValues: (values) => ({
|
transformValues: (values) => ({
|
||||||
...values,
|
...values,
|
||||||
|
time:
|
||||||
|
values.scheduled && values.time && values.time.length > 0
|
||||||
|
? (values.time as string[]).filter((time) => !!time).join(",")
|
||||||
|
: values.time,
|
||||||
punishment_pool_id: values.punishment_pool_id
|
punishment_pool_id: values.punishment_pool_id
|
||||||
? Number(values.punishment_pool_id)
|
? Number(values.punishment_pool_id)
|
||||||
: undefined,
|
: undefined,
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
form.watch("time", ({ previousValue, value }) => {
|
||||||
|
let newValue = [...(value as string[]).filter((time) => !!time), ""];
|
||||||
|
|
||||||
|
for (let i = 0; i < Math.min(previousValue.length, newValue.length); i++) {
|
||||||
|
if (previousValue[i] !== newValue[i]) {
|
||||||
|
form.setFieldValue("time", newValue);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
const handleSubmit = React.useCallback(
|
const handleSubmit = React.useCallback(
|
||||||
form.onSubmit((values) => {
|
form.onSubmit((values) => {
|
||||||
fetch(`/api/orders/${username}/sets/${set_id || ""}`, {
|
fetch(`/api/orders/${username}/sets/${set_id || ""}`, {
|
||||||
|
|
@ -256,7 +277,20 @@ export const OrderSet: React.FC = () => {
|
||||||
Weekends
|
Weekends
|
||||||
</Chip>
|
</Chip>
|
||||||
</Flex>
|
</Flex>
|
||||||
<TimeInput {...form.getInputProps("time")} label="Time" />
|
<Input.Wrapper
|
||||||
|
label="Time"
|
||||||
|
error={form.getInputProps("time").error}
|
||||||
|
>
|
||||||
|
{(form.getValues().time as string[]).map((time, idx) => (
|
||||||
|
<Flex key={idx} gap="xs">
|
||||||
|
<TimeInput
|
||||||
|
key={time}
|
||||||
|
{...form.getInputProps(`time.${idx}`)}
|
||||||
|
w="10rem"
|
||||||
|
/>
|
||||||
|
</Flex>
|
||||||
|
))}
|
||||||
|
</Input.Wrapper>
|
||||||
<NumberInput
|
<NumberInput
|
||||||
{...form.getInputProps("confirm_delay")}
|
{...form.getInputProps("confirm_delay")}
|
||||||
label="Confirmation Due After"
|
label="Confirmation Due After"
|
||||||
|
|
|
||||||
|
|
@ -83,9 +83,14 @@ export const OrderSets: React.FC<OrderSetProps> = ({
|
||||||
<Title order={4}>{name}</Title>
|
<Title order={4}>{name}</Title>
|
||||||
{scheduled ? (
|
{scheduled ? (
|
||||||
<>
|
<>
|
||||||
<Text>
|
<Flex gap="xs">
|
||||||
Scheduled: <TimeValue value={time} format="12h" />
|
<Text>Scheduled:</Text>
|
||||||
</Text>
|
{time.split(",").map((time) => (
|
||||||
|
<div key={time}>
|
||||||
|
<TimeValue key={time} value={time} format="12h" />
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</Flex>
|
||||||
<Flex gap="md" align="center">
|
<Flex gap="md" align="center">
|
||||||
{weekdays ? (
|
{weekdays ? (
|
||||||
<Badge color="blue">Weekdays</Badge>
|
<Badge color="blue">Weekdays</Badge>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue