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:
|
||||
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,
|
||||
args=(orders_pool.id,)
|
||||
)
|
||||
|
|
|
|||
|
|
@ -69,8 +69,9 @@ type FormOrderSetOrder = Omit<OrderSetOrder, "id" | "add_ons"> & {
|
|||
add_ons: FormOrderSetOrderAddOn[];
|
||||
};
|
||||
|
||||
type FormOrderSet = Omit<OrderSet, "orders" | "punishment_pool_id"> & {
|
||||
type FormOrderSet = Omit<OrderSet, "orders" | "time" | "punishment_pool_id"> & {
|
||||
orders: FormOrderSetOrder[];
|
||||
time: string[] | string;
|
||||
punishment_pool_id?: string | number;
|
||||
};
|
||||
|
||||
|
|
@ -98,9 +99,14 @@ export const OrderSet: React.FC = () => {
|
|||
|
||||
const form = useForm<Partial<FormOrderSet>>({
|
||||
mode: "uncontrolled",
|
||||
cascadeUpdates: true,
|
||||
initialValues: orderSet
|
||||
? {
|
||||
...orderSet,
|
||||
time:
|
||||
orderSet.scheduled && orderSet.time.indexOf(",") != -1
|
||||
? [...orderSet.time.split(","), ""]
|
||||
: [orderSet.time, ""],
|
||||
punishment_pool_id: orderSet.punishment_pool_id
|
||||
? `${orderSet.punishment_pool_id}`
|
||||
: undefined,
|
||||
|
|
@ -113,7 +119,7 @@ export const OrderSet: React.FC = () => {
|
|||
name: (value: string) =>
|
||||
value.length < 1 ? "Please enter a name" : null,
|
||||
time: (value: string, values: FormOrderSet) =>
|
||||
values.scheduled && (!value || value.length < 1)
|
||||
values.scheduled && (!value || value.length < 1 || !value[0])
|
||||
? "Please set a time"
|
||||
: null,
|
||||
probability: (value: number, values: FormOrderSet) =>
|
||||
|
|
@ -140,12 +146,27 @@ export const OrderSet: React.FC = () => {
|
|||
},
|
||||
transformValues: (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
|
||||
? Number(values.punishment_pool_id)
|
||||
: 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(
|
||||
form.onSubmit((values) => {
|
||||
fetch(`/api/orders/${username}/sets/${set_id || ""}`, {
|
||||
|
|
@ -256,7 +277,20 @@ export const OrderSet: React.FC = () => {
|
|||
Weekends
|
||||
</Chip>
|
||||
</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
|
||||
{...form.getInputProps("confirm_delay")}
|
||||
label="Confirmation Due After"
|
||||
|
|
|
|||
|
|
@ -83,9 +83,14 @@ export const OrderSets: React.FC<OrderSetProps> = ({
|
|||
<Title order={4}>{name}</Title>
|
||||
{scheduled ? (
|
||||
<>
|
||||
<Text>
|
||||
Scheduled: <TimeValue value={time} format="12h" />
|
||||
</Text>
|
||||
<Flex gap="xs">
|
||||
<Text>Scheduled:</Text>
|
||||
{time.split(",").map((time) => (
|
||||
<div key={time}>
|
||||
<TimeValue key={time} value={time} format="12h" />
|
||||
</div>
|
||||
))}
|
||||
</Flex>
|
||||
<Flex gap="md" align="center">
|
||||
{weekdays ? (
|
||||
<Badge color="blue">Weekdays</Badge>
|
||||
|
|
|
|||
Loading…
Reference in a new issue