diff --git a/src/components/driver/DriverDeliveryDetail.jsx b/src/components/driver/DriverDeliveryDetail.jsx
index 700c487..8a1cf69 100644
--- a/src/components/driver/DriverDeliveryDetail.jsx
+++ b/src/components/driver/DriverDeliveryDetail.jsx
@@ -74,21 +74,18 @@ export const DriverDeliveryDetail = ({ order, onStatusChange }) => {
const orderItems = Array.isArray(order.items) ? order.items.map(splitItem) : [];
const currentStatus = order.status;
- const IN_TRANSIT_STATUSES = ["Загружен", "В пути"];
- const isOnRoute = IN_TRANSIT_STATUSES.includes(currentStatus);
let actionButtons = [];
if (currentStatus === "Назначен водитель") {
- actionButtons = [
- { value: "Загружен", label: "Загружено" },
- { value: "Проблема доставки", label: "Проблема" },
- ];
- } else if (isOnRoute) {
actionButtons = [
{ value: "Доставлен", label: "Доставлено" },
{ value: "Проблема доставки", label: "Проблема" },
];
- } else if (currentStatus === "Доставлен" || currentStatus === "Вывезено" || currentStatus === "Проблема доставки" || currentStatus === "Закрыт" || currentStatus === "Отменён") {
+ } else if (currentStatus === "Доставлен") {
+ actionButtons = [
+ { value: "Назначен водитель", label: "Вернуть в работу" },
+ ];
+ } else if (currentStatus === "Проблема доставки" || currentStatus === "Закрыт" || currentStatus === "Отменён") {
actionButtons = [];
} else {
actionButtons = availableTransitions.map((status) => ({
diff --git a/src/components/driver/DriverShipmentPanel.jsx b/src/components/driver/DriverShipmentPanel.jsx
index cf85859..b5a93a6 100644
--- a/src/components/driver/DriverShipmentPanel.jsx
+++ b/src/components/driver/DriverShipmentPanel.jsx
@@ -138,11 +138,17 @@ export const DriverShipmentPanel = ({ order, onShipmentChange, onSaveShipment, i
const [comments, setComments] = React.useState(initialComments);
const [commentInput, setCommentInput] = React.useState("");
- // Sync state when order data changes (e.g. after save)
+ // Sync state ONLY when order ID changes (navigating to different order), not on every order data update
+ const orderId = order?.id;
+ const prevOrderId = React.useRef(orderId);
React.useEffect(() => {
- setShippedItems(initialShippedIds);
- setComments(initialComments);
- }, [initialShippedIds, initialComments]);
+ if (prevOrderId.current !== orderId) {
+ prevOrderId.current = orderId;
+ setShippedItems(initialShippedIds);
+ setComments(initialComments);
+ setJustSaved(false);
+ }
+ }, [orderId, initialShippedIds, initialComments]);
// Track last saved shipment data for visual display
React.useEffect(() => {
@@ -170,7 +176,7 @@ export const DriverShipmentPanel = ({ order, onShipmentChange, onSaveShipment, i
};
const currentDeliveryStatus = order?.deliveryStatus || order?.delivery_status;
- const isStatusFinal = ["delivered", "problem", "picked_up"].includes(currentDeliveryStatus);
+ const isStatusFinal = ["delivered", "problem", "picked_up", "loaded", "on_route", "driver_assigned"].includes(currentDeliveryStatus);
const unshipAll = () => {
if (isStatusFinal && onResetStatus) {
@@ -250,7 +256,7 @@ export const DriverShipmentPanel = ({ order, onShipmentChange, onSaveShipment, i
Отгрузить всё
diff --git a/src/components/orders/OrderDetailPanel.jsx b/src/components/orders/OrderDetailPanel.jsx
index 3d8cc74..dd1b570 100644
--- a/src/components/orders/OrderDetailPanel.jsx
+++ b/src/components/orders/OrderDetailPanel.jsx
@@ -1102,7 +1102,7 @@ export const OrderDetailPanel = ({
if (onChangeDeliveryStatus) {
onChangeDeliveryStatus({
orderGroupId: order.id,
- status: "loaded",
+ status: "driver_assigned",
}).then((response) => {
if (!response.success) {
setFormMessage(response.error || "Не удалось сбросить статус");
@@ -1136,15 +1136,15 @@ export const OrderDetailPanel = ({
{(() => {
const currentStatus = order.deliveryStatus || order.delivery_status;
- const IN_TRANSIT_STATUSES = ["loaded", "on_route"];
- const isOnRoute = IN_TRANSIT_STATUSES.includes(currentStatus);
const isPickup = (order.deliveryType || order.delivery_type) === "pickup" || currentStatus === "pickup";
-
+
let statusOptions = [];
- if (currentStatus === "delivered" || currentStatus === "picked_up" || currentStatus === "problem" || currentStatus === "cancelled" || currentStatus === "paid_storage") {
+ if (currentStatus === "delivered" || currentStatus === "picked_up" || currentStatus === "problem") {
+ // Final statuses — show "Return to work" instead
+ statusOptions = [];
+ } else if (currentStatus === "cancelled" || currentStatus === "paid_storage") {
statusOptions = [];
} else {
- // Primary button matches delivery type, secondary requires confirmation
if (isPickup) {
statusOptions = [
{ value: "picked_up", label: "Вывезено", mismatch: false },
@@ -1160,7 +1160,6 @@ export const OrderDetailPanel = ({
}
}
- // "Return to work" button for final statuses
const canReturn = ["delivered", "picked_up", "problem"].includes(currentStatus);
if (statusOptions.length === 0 && !canReturn) return null;
@@ -1201,7 +1200,7 @@ export const OrderDetailPanel = ({
disabled={isSavingStatusChange}
onClick={() => {
setPendingStatus({
- value: "loaded",
+ value: "driver_assigned",
label: "Вернуть в работу",
mismatch: false,
deliveryType: "delivery",
diff --git a/src/components/orders/SmsStatusCard.jsx b/src/components/orders/SmsStatusCard.jsx
index 3f56c95..7be2971 100644
--- a/src/components/orders/SmsStatusCard.jsx
+++ b/src/components/orders/SmsStatusCard.jsx
@@ -22,6 +22,7 @@ const NOTIF_LABELS = {
paid_storage_sending: "Отправляется…",
paid_storage_sent: "Платное хранение: отправлено",
draft: "Черновик",
+ confirmed: "Согласовано",
};
const NOTIF_TONES = {
@@ -36,6 +37,7 @@ const NOTIF_TONES = {
paid_storage_sending: "info",
paid_storage_sent: "accent",
draft: "neutral",
+ confirmed: "accent",
};
// ── Helpers ──────────────────────────────────────────────────────────────────
diff --git a/src/constants/deliveryWorkflow.js b/src/constants/deliveryWorkflow.js
index 15f1491..dbad65b 100644
--- a/src/constants/deliveryWorkflow.js
+++ b/src/constants/deliveryWorkflow.js
@@ -240,10 +240,10 @@ export const ORDER_STATUS_TRANSITIONS = {
"Ожидает согласования доставки": ["Доставка согласована", "Самовывоз", "Требуется адрес", "Проблема доставки", "Отменён"],
"Доставка согласована": ["Назначен водитель", "Ожидает согласования доставки", "Проблема доставки", "Самовывоз", "Требуется адрес"],
"Передан логисту": ["Доставка согласована", "Платное хранение", "Проблема доставки", "Отменён"],
- "Назначен водитель": ["Загружен", "Проблема доставки"],
+ "Назначен водитель": ["Доставлен", "Проблема доставки"],
Загружен: ["Доставлен", "Проблема доставки"],
"В пути": ["Доставлен", "Проблема доставки"],
- Доставлен: ["Закрыт"],
+ Доставлен: ["Закрыт", "Назначен водитель"],
"Проблема доставки": ["Ожидает согласования доставки", "Назначен водитель", "Отменён", "Закрыт"],
"Платное хранение": ["Доставка согласована", "Отменён", "Закрыт"],
"Самовывоз": ["Доставка согласована", "Закрыт", "Отменён", "Платное хранение"],
@@ -270,7 +270,7 @@ export const ROLE_TRANSITION_TARGETS = {
"Закрыт",
"Отменён",
],
- driver: ["Загружен", "Доставлен", "Проблема доставки"],
+ driver: ["Доставлен", "Проблема доставки"],
admin: ORDER_STATUSES,
};
@@ -291,7 +291,7 @@ export const LOGISTICS_STATUSES = [
"Проблема доставки",
];
-export const DRIVER_STATUSES = ["Назначен водитель", "Загружен", "Доставлен"];
+export const DRIVER_STATUSES = ["Назначен водитель", "Доставлен"];
export const getOrderStatusComment = (status) => ORDER_STATUS_META[status]?.comment || "Комментарий не задан.";
diff --git a/src/services/orderGroupViews.js b/src/services/orderGroupViews.js
index 398b3bc..ce748ce 100644
--- a/src/services/orderGroupViews.js
+++ b/src/services/orderGroupViews.js
@@ -39,7 +39,7 @@ export const DRIVER_VISIBLE_DELIVERY_STATUSES = [
"paid_storage",
];
-export const DRIVER_ACTIVE_DELIVERY_STATUSES = ["driver_assigned", "loaded", "on_route", "problem"];
+export const DRIVER_ACTIVE_DELIVERY_STATUSES = ["driver_assigned", "problem"];
const HALF_DAY_LABELS = {
morning: "Первая половина дня",