feat: [shipment] 배차정보 다중 행 API 연동 — actions.ts transform 함수 수정
- ShipmentApiData에 vehicle_dispatches 타입 추가 - transformApiToDetail: vehicle_dispatches 배열 매핑 (레거시 단일필드 fallback 유지) - transformCreateFormToApi/transformEditFormToApi: vehicleDispatches → vehicle_dispatches 변환 추가 - transformApiToListItem: 첫 번째 배차의 arrival_datetime 반영
This commit is contained in:
@@ -94,6 +94,16 @@ interface ShipmentApiData {
|
||||
created_at?: string;
|
||||
updated_at?: string;
|
||||
items?: ShipmentItemApiData[];
|
||||
vehicle_dispatches?: Array<{
|
||||
id: number;
|
||||
seq: number;
|
||||
logistics_company?: string;
|
||||
arrival_datetime?: string;
|
||||
tonnage?: string;
|
||||
vehicle_no?: string;
|
||||
driver_contact?: string;
|
||||
remarks?: string;
|
||||
}>;
|
||||
status_label?: string;
|
||||
priority_label?: string;
|
||||
delivery_method_label?: string;
|
||||
@@ -149,7 +159,7 @@ function transformApiToListItem(data: ShipmentApiData): ShipmentItem {
|
||||
canShip: data.can_ship,
|
||||
depositConfirmed: data.deposit_confirmed,
|
||||
invoiceIssued: data.invoice_issued,
|
||||
deliveryTime: data.expected_arrival,
|
||||
deliveryTime: data.vehicle_dispatches?.[0]?.arrival_datetime || data.expected_arrival,
|
||||
// 수신/작성자/출고일 매핑
|
||||
receiver: data.receiver || '',
|
||||
receiverAddress: data.order_info?.delivery_address || data.delivery_address || '',
|
||||
@@ -202,18 +212,28 @@ function transformApiToDetail(data: ShipmentApiData): ShipmentDetail {
|
||||
zipCode: (data as unknown as Record<string, unknown>).zip_code as string | undefined,
|
||||
address: (data as unknown as Record<string, unknown>).address as string | undefined,
|
||||
addressDetail: (data as unknown as Record<string, unknown>).address_detail as string | undefined,
|
||||
// 배차 정보 - 기존 단일 필드에서 구성 (다중 행 API 준비 전까지)
|
||||
vehicleDispatches: data.vehicle_no || data.logistics_company || data.driver_contact
|
||||
? [{
|
||||
id: `vd-${data.id}`,
|
||||
logisticsCompany: data.logistics_company || '-',
|
||||
arrivalDateTime: data.confirmed_arrival || data.expected_arrival || '-',
|
||||
tonnage: data.vehicle_tonnage || '-',
|
||||
vehicleNo: data.vehicle_no || '-',
|
||||
driverContact: data.driver_contact || '-',
|
||||
remarks: '',
|
||||
}]
|
||||
: [],
|
||||
// 배차 정보 - vehicle_dispatches 테이블에서 조회, 없으면 레거시 단일 필드 fallback
|
||||
vehicleDispatches: data.vehicle_dispatches && data.vehicle_dispatches.length > 0
|
||||
? data.vehicle_dispatches.map((vd) => ({
|
||||
id: String(vd.id),
|
||||
logisticsCompany: vd.logistics_company || '-',
|
||||
arrivalDateTime: vd.arrival_datetime || '-',
|
||||
tonnage: vd.tonnage || '-',
|
||||
vehicleNo: vd.vehicle_no || '-',
|
||||
driverContact: vd.driver_contact || '-',
|
||||
remarks: vd.remarks || '',
|
||||
}))
|
||||
: (data.vehicle_no || data.logistics_company || data.driver_contact
|
||||
? [{
|
||||
id: `vd-legacy-${data.id}`,
|
||||
logisticsCompany: data.logistics_company || '-',
|
||||
arrivalDateTime: data.confirmed_arrival || data.expected_arrival || '-',
|
||||
tonnage: data.vehicle_tonnage || '-',
|
||||
vehicleNo: data.vehicle_no || '-',
|
||||
driverContact: data.driver_contact || '-',
|
||||
remarks: '',
|
||||
}]
|
||||
: []),
|
||||
// 제품내용 (그룹핑) - 프론트엔드에서 그룹핑 처리
|
||||
productGroups: [],
|
||||
otherParts: [],
|
||||
@@ -265,7 +285,7 @@ function transformApiToStatsByStatus(data: ShipmentApiStatsByStatusResponse): Sh
|
||||
function transformCreateFormToApi(
|
||||
data: ShipmentCreateFormData
|
||||
): Record<string, unknown> {
|
||||
return {
|
||||
const result: Record<string, unknown> = {
|
||||
lot_no: data.lotNo,
|
||||
scheduled_date: data.scheduledDate,
|
||||
priority: data.priority,
|
||||
@@ -276,6 +296,20 @@ function transformCreateFormToApi(
|
||||
loading_manager: data.loadingManager,
|
||||
remarks: data.remarks,
|
||||
};
|
||||
|
||||
if (data.vehicleDispatches && data.vehicleDispatches.length > 0) {
|
||||
result.vehicle_dispatches = data.vehicleDispatches.map((vd, idx) => ({
|
||||
seq: idx + 1,
|
||||
logistics_company: vd.logisticsCompany || null,
|
||||
arrival_datetime: vd.arrivalDateTime || null,
|
||||
tonnage: vd.tonnage || null,
|
||||
vehicle_no: vd.vehicleNo || null,
|
||||
driver_contact: vd.driverContact || null,
|
||||
remarks: vd.remarks || null,
|
||||
}));
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// ===== Frontend → API 변환 (수정용) =====
|
||||
@@ -287,6 +321,17 @@ function transformEditFormToApi(
|
||||
if (data.scheduledDate !== undefined) result.scheduled_date = data.scheduledDate;
|
||||
if (data.priority !== undefined) result.priority = data.priority;
|
||||
if (data.deliveryMethod !== undefined) result.delivery_method = data.deliveryMethod;
|
||||
if (data.receiver !== undefined) result.receiver = data.receiver;
|
||||
if (data.receiverContact !== undefined) result.receiver_contact = data.receiverContact;
|
||||
// 주소: zipCode + address + addressDetail → delivery_address로 결합
|
||||
if (data.address !== undefined || data.zipCode !== undefined || data.addressDetail !== undefined) {
|
||||
const parts = [
|
||||
data.zipCode ? `[${data.zipCode}]` : '',
|
||||
data.address || '',
|
||||
data.addressDetail || '',
|
||||
].filter(Boolean);
|
||||
result.delivery_address = parts.join(' ');
|
||||
}
|
||||
if (data.loadingManager !== undefined) result.loading_manager = data.loadingManager;
|
||||
if (data.logisticsCompany !== undefined) result.logistics_company = data.logisticsCompany;
|
||||
if (data.vehicleTonnage !== undefined) result.vehicle_tonnage = data.vehicleTonnage;
|
||||
@@ -296,8 +341,21 @@ function transformEditFormToApi(
|
||||
if (data.driverContact !== undefined) result.driver_contact = data.driverContact;
|
||||
if (data.expectedArrival !== undefined) result.expected_arrival = data.expectedArrival;
|
||||
if (data.confirmedArrival !== undefined) result.confirmed_arrival = data.confirmedArrival;
|
||||
if (data.changeReason !== undefined) result.change_reason = data.changeReason;
|
||||
if (data.remarks !== undefined) result.remarks = data.remarks;
|
||||
|
||||
if (data.vehicleDispatches) {
|
||||
result.vehicle_dispatches = data.vehicleDispatches.map((vd, idx) => ({
|
||||
seq: idx + 1,
|
||||
logistics_company: vd.logisticsCompany || null,
|
||||
arrival_datetime: vd.arrivalDateTime || null,
|
||||
tonnage: vd.tonnage || null,
|
||||
vehicle_no: vd.vehicleNo || null,
|
||||
driver_contact: vd.driverContact || null,
|
||||
remarks: vd.remarks || null,
|
||||
}));
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user