feat: dodaj scheduled_date na Task i kalendar widget
- Novo polje Task.scheduled_date (DateField, nullable, db_index) za planiranje - Migracija 0009_task_scheduled_date - Celery task notify_upcoming_tasks: dnevno u 08:00 šalje Pusher + email za sutrašnje zadatke - TaskCalendarWidget: react-spring slide panel s lijeve strane, grid prikaz mjeseca, dot indikatori, klik otvara TaskServiceRecordsModal - FleetDashboardShell: import + render kalendara, Planirano stupac u tablici zadataka - TaskCreateModal + TaskServiceRecordsModal: scheduled_date input i prikaz - Admin + serializer + views: scheduled_date filter i prikaz - 47 backend testova prolaze (uključuje 8 novih za notify_upcoming_tasks) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -47,6 +47,7 @@ export default function TaskServiceRecordsModal({
|
||||
title: '',
|
||||
description: '',
|
||||
status: 'aktivan',
|
||||
scheduled_date: '',
|
||||
});
|
||||
|
||||
useEffect(() => {
|
||||
@@ -67,6 +68,7 @@ export default function TaskServiceRecordsModal({
|
||||
title: String(task.title || ''),
|
||||
description: String(task.description || ''),
|
||||
status: String(task.status || 'aktivan'),
|
||||
scheduled_date: String(task.scheduled_date || ''),
|
||||
});
|
||||
}, [task?.id, task?.work_order]);
|
||||
|
||||
@@ -117,7 +119,8 @@ export default function TaskServiceRecordsModal({
|
||||
title,
|
||||
description,
|
||||
status,
|
||||
});
|
||||
scheduled_date: taskForm.scheduled_date || null,
|
||||
});
|
||||
setShowTaskEditor(false);
|
||||
} catch (error) {
|
||||
const conflictCode = error?.details?.code;
|
||||
@@ -130,6 +133,7 @@ export default function TaskServiceRecordsModal({
|
||||
title,
|
||||
description,
|
||||
status,
|
||||
scheduled_date: taskForm.scheduled_date || null,
|
||||
auto_close_work_order: true,
|
||||
});
|
||||
setShowTaskEditor(false);
|
||||
@@ -215,6 +219,10 @@ export default function TaskServiceRecordsModal({
|
||||
<dt className="text-xs text-text-muted">Putni nalog</dt>
|
||||
<dd className="text-text-main">{task.work_order_label || '-'}</dd>
|
||||
</div>
|
||||
<div>
|
||||
<dt className="text-xs text-text-muted">Planirani datum</dt>
|
||||
<dd className="text-text-main">{task.scheduled_date ? formatDate(task.scheduled_date) : '-'}</dd>
|
||||
</div>
|
||||
<div>
|
||||
<dt className="text-xs text-text-muted">Vrijeme izrade</dt>
|
||||
<dd className="text-text-main">{formatDateTime(task.created_at)}</dd>
|
||||
@@ -262,6 +270,16 @@ export default function TaskServiceRecordsModal({
|
||||
))}
|
||||
</select>
|
||||
</label>
|
||||
<label className="flex flex-col gap-1 text-sm">
|
||||
<span className="text-xs text-text-muted">Planirani datum izvršenja</span>
|
||||
<input
|
||||
type="date"
|
||||
value={taskForm.scheduled_date || ''}
|
||||
onInput={(event) => setTaskForm((prev) => ({ ...prev, scheduled_date: event.currentTarget.value }))}
|
||||
disabled={updatingTask}
|
||||
className="rounded-lg border border-border-hairline bg-canvas-elevated px-3 py-2 text-text-main disabled:opacity-60"
|
||||
/>
|
||||
</label>
|
||||
{taskError ? (
|
||||
<div className="rounded-lg border border-red-200 bg-red-50 px-3 py-2 text-sm text-red-700">
|
||||
{taskError}
|
||||
@@ -277,6 +295,7 @@ export default function TaskServiceRecordsModal({
|
||||
title: String(task.title || ''),
|
||||
description: String(task.description || ''),
|
||||
status: String(task.status || 'aktivan'),
|
||||
scheduled_date: String(task.scheduled_date || ''),
|
||||
});
|
||||
}}
|
||||
disabled={updatingTask}
|
||||
|
||||
Reference in New Issue
Block a user