Update
This commit is contained in:
@@ -9,8 +9,6 @@ interface WaybillWidgetProps {
|
||||
date: string;
|
||||
}
|
||||
|
||||
let durationOrder;
|
||||
|
||||
const WaybillWidget: React.FC<WaybillWidgetProps> = ({ vehicleId, date }) => {
|
||||
const [entries, setEntries] = useState<WaybillEntry[]>([]);
|
||||
const [orders, setOrders] = useState<Order[]>([]);
|
||||
@@ -21,7 +19,7 @@ const WaybillWidget: React.FC<WaybillWidgetProps> = ({ vehicleId, date }) => {
|
||||
const [selectedTimeSlot, setSelectedTimeSlot] = useState<string | null>(null);
|
||||
const [duration, setDuration] = useState<number>(2);
|
||||
|
||||
// Часовые интервалы с 8:00 до 20:00
|
||||
|
||||
const timeSlots = Array.from({ length: 13 }, (_, i) => {
|
||||
const hour = i + 8;
|
||||
return `${hour.toString().padStart(2, '0')}:00`;
|
||||
@@ -30,22 +28,23 @@ const WaybillWidget: React.FC<WaybillWidgetProps> = ({ vehicleId, date }) => {
|
||||
const loadData = async () => {
|
||||
try {
|
||||
const response = await ordersApi.getOrders();
|
||||
setOrders(response.data);
|
||||
setOrders((response.data as any).data.items);
|
||||
setLoading(true);
|
||||
setError(null);
|
||||
|
||||
// Загружаем записи путевого листа
|
||||
const entriesResponse = await waybillApi.getEntries();
|
||||
const entriesResponse = (await waybillApi.getEntries() as any).data;
|
||||
|
||||
const vehicleEntries = entriesResponse.data.filter(
|
||||
entry => entry.vehicleId === vehicleId && entry.date === date
|
||||
(entry: { vehicleId: number; date: string; }) => entry.vehicleId === vehicleId && entry.date === date
|
||||
);
|
||||
setEntries(vehicleEntries);
|
||||
|
||||
// Загружаем доступные заказы
|
||||
const ordersResponse = await ordersApi.getOrders();
|
||||
const assignedOrderIds = new Set(vehicleEntries.map(entry => entry.orderId));
|
||||
const available = ordersResponse.data.filter(
|
||||
order => !assignedOrderIds.has(order.id) && order.status !== 'completed'
|
||||
|
||||
const ordersResponse = (await ordersApi.getOrders() as any).data.data.items;
|
||||
|
||||
const assignedOrderIds = new Set(vehicleEntries.map((entry: { orderId: any; }) => entry.orderId));
|
||||
const available = ordersResponse.filter(
|
||||
(order: Order) => !assignedOrderIds.has(order.id) && order.status !== 'completed'
|
||||
);
|
||||
setAvailableOrders(available);
|
||||
|
||||
@@ -71,13 +70,12 @@ const WaybillWidget: React.FC<WaybillWidgetProps> = ({ vehicleId, date }) => {
|
||||
};
|
||||
|
||||
const getOrderInfo = (orderId: number, allOrders: Order[]): Order | undefined => {
|
||||
// Ищем заказ среди всех заказов
|
||||
|
||||
const foundOrder = allOrders.find(order => order.id === orderId);
|
||||
if (foundOrder) {
|
||||
return foundOrder;
|
||||
}
|
||||
|
||||
// Если заказ не найден, но есть в путевом листе - создаем базовый объект
|
||||
const waybillEntry = entries.find(entry => entry.orderId === orderId);
|
||||
if (waybillEntry) {
|
||||
const basicOrder: Order = {
|
||||
@@ -92,7 +90,6 @@ const WaybillWidget: React.FC<WaybillWidgetProps> = ({ vehicleId, date }) => {
|
||||
return basicOrder;
|
||||
}
|
||||
|
||||
// Если заказ не найден нигде
|
||||
return undefined;
|
||||
};
|
||||
|
||||
@@ -100,7 +97,7 @@ const WaybillWidget: React.FC<WaybillWidgetProps> = ({ vehicleId, date }) => {
|
||||
if (selectedOrder) {
|
||||
try {
|
||||
const startHour = parseInt(timeSlot.split(':')[0]);
|
||||
const endHour = startHour + duration; // Используем выбранную длительность
|
||||
const endHour = startHour + duration;
|
||||
|
||||
const newEntry: Omit<WaybillEntry, 'id'> = {
|
||||
vehicleId,
|
||||
@@ -109,6 +106,7 @@ const WaybillWidget: React.FC<WaybillWidgetProps> = ({ vehicleId, date }) => {
|
||||
endTime: `${endHour.toString().padStart(2, '0')}:00`,
|
||||
date
|
||||
};
|
||||
console.log('Sending waybill entry:', newEntry);
|
||||
|
||||
await waybillApi.createEntry(newEntry);
|
||||
setSelectedOrder(null);
|
||||
@@ -128,7 +126,7 @@ const WaybillWidget: React.FC<WaybillWidgetProps> = ({ vehicleId, date }) => {
|
||||
if (selectedTimeSlot) {
|
||||
try {
|
||||
const startHour = parseInt(selectedTimeSlot.split(':')[0]);
|
||||
const endHour = startHour + duration; // Используем выбранную длительность
|
||||
const endHour = startHour + duration;
|
||||
|
||||
const newEntry: Omit<WaybillEntry, 'id'> = {
|
||||
vehicleId,
|
||||
@@ -137,6 +135,7 @@ const WaybillWidget: React.FC<WaybillWidgetProps> = ({ vehicleId, date }) => {
|
||||
endTime: `${endHour.toString().padStart(2, '0')}:00`,
|
||||
date
|
||||
};
|
||||
console.log('Sending waybill entry:', newEntry);
|
||||
|
||||
await waybillApi.createEntry(newEntry);
|
||||
setSelectedTimeSlot(null);
|
||||
@@ -172,7 +171,6 @@ const WaybillWidget: React.FC<WaybillWidgetProps> = ({ vehicleId, date }) => {
|
||||
<h5 className="mb-0">Путевой лист на {new Date(date).toLocaleDateString()}</h5>
|
||||
</div>
|
||||
<div className="card-body">
|
||||
{/* Состояние выбора */}
|
||||
<div className="alert alert-info mb-3">
|
||||
{selectedOrder && !selectedTimeSlot && (
|
||||
<div>
|
||||
@@ -220,7 +218,6 @@ const WaybillWidget: React.FC<WaybillWidgetProps> = ({ vehicleId, date }) => {
|
||||
</p>
|
||||
)}
|
||||
</div>
|
||||
{/* Таблица временных интервалов */}
|
||||
<div className="table-responsive mb-4">
|
||||
<table className="table table-bordered">
|
||||
<thead>
|
||||
@@ -275,7 +272,6 @@ const WaybillWidget: React.FC<WaybillWidgetProps> = ({ vehicleId, date }) => {
|
||||
</table>
|
||||
</div>
|
||||
|
||||
{/* Список доступных заказов */}
|
||||
<div className="available-orders">
|
||||
<h6>Доступные заказы:</h6>
|
||||
<div className="row">
|
||||
|
||||
Reference in New Issue
Block a user