Cargo-Planner Docs

통합

이미 창고에 저장된 물품을 관리하는 디지털 도구가 있거나 고객의 적재 목록을 처리하는 방법이 있다면, Cargo-Planner는 약간의 통합을 통해 이를 기반으로 구축할 수 있습니다.

Cargo 라이브러리 동기화

현재 도구와의 통합을 시작하는 가장 간단한 방법은 Cargo 라이브러리를 사용하는 것입니다. 모든 Cargo-Planner 라이선스에는 Cargo 라이브러리가 포함되어 있으며, 이는 본질적으로 최소한의 WMS 또는 자원 계획 시스템입니다.

이를 설정하면 원활한 가져오기나 자동 완성을 통해 웹 앱에서 새로운 적재 목록을 쉽게 생성할 수 있습니다.

이 방법은 본질적으로 CRON 작업이나 일일 동기화로 실행할 수 있으며, Cargo-Planner는 적재 목록 생성의 모든 UI 측면을 처리합니다.

적재 목록 자동 완성 GIF

하지만 Cargo 라이브러리를 수동으로 설정하는 것은 상당히 까다로울 수 있습니다. 따라서 약간의 코드를 사용하여 현재 사용하는 도구와 동기화 상태를 유지합시다.

// 시작하기 페이지에서 토큰 생성 방법을 확인하세요
const API_TOKEN = 'Token b123...';
const cargoes: CargoPlannerItem[] = [];

// 항목/화물의 소스가 다음과 같다고 가정해 봅시다.
// 모든 것이 밀리미터와 그램으로 정의되어 있습니다.
const sourceItems = [
  {
    id: 511732,
    title: 'Basket Catcher',
    description: '...',
    length: 900,
    width: 900,
    height: 500,
    weight: 20000,
    inner_quantity: 1,
  },
  {
    id: 512789,
    title: 'Putters (10pcs)',
    description: '...',
    length: 210,
    width: 210,
    height: 150,
    weight: 1700,
    inner_quantity: 10,
  },
  // ... 등등
];

// sourceItems는 cargo-planner에서 표현되는 방식과 약간 다릅니다.
// 따라서 데이터를 약간 조정해야 합니다.
for (let i = 0; i < sourceItems.length; i++) {
  let s = sourceItems[i];
  // ID와 제목을 모두 이름으로 저장하고 싶습니다.
  const title = `${s.id} - ${s.title}`;

  let cargo: CargoPlannerItem = {
    name: title,
    length_dim: 'MM',
    // Cargo-Planner는 그램을 허용하지 않으므로 킬로그램으로 변환합니다.
    weight_dim: 'KG',
    data: {
      label: title,
      l: s.length,
      w: s.width,
      h: s.height,
      wt: s.weight / 1000, // 무게 변환
      unit_qty: s.inner_quantity,
    },
  };
  cargoes.push(cargo);
}

// 모든 항목을 생성하기 전에 먼저 cargo-library에 존재하는 모든 것을 제거하고 싶습니다.
// 중복이 발생하지 않도록 합니다.
// 이를 위해 cargo/truncate 엔드포인트를 사용합시다.
fetch('https://api.cargo-planner.com/api/2/cargo/truncate/', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    Authorization: API_TOKEN,
  },
  body: JSON.stringify({ confirm: true }),
});

// 마지막으로 화물 목록을 일괄 생성합니다.
fetch('https://api.cargo-planner.com/api/2/cargo/bulk_create/', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    Authorization: API_TOKEN,
  },
  body: JSON.stringify(cargoes),
});

// Cargo-Planner가 허용하는 간단한 타입 정의
interface CargoPlannerItem {
  name: string;
  data: ItemData;
  length_dim: 'M' | 'DM' | 'CM' | 'MM' | 'FT' | 'IN';
  weight_dim: 'KG' | 'MT' | 'LB';
}
interface ItemData {
  label: string;
  l: number;
  w: number;
  h: number;
  wt: number;
  not_stackable?: boolean | null;
  not_rotatable?: boolean | null;
  tiltable?: boolean | null;
  bottom_only?: boolean | null;
  color?: string | null;
  qty?: number | null;
  unit_qty?: number | null;
}

이제 엑셀 가져오기/내보내기를 다시 할 필요가 없으며, 다음 선적 계획이 훨씬 빨라질 것입니다.

직접 적재 목록 생성

다른 도구에서 직접 적재 목록을 생성하려면, API 호출 측면에서 이전 예제와 크게 다르지 않습니다. 이번에는 Cargo 라이브러리를 완전히 건너뛰고 새로운 적재 목록으로 바로 이동합니다.

이 방법의 단점은 API를 호출하기 전에 무엇을 선적할지, 각각 몇 개를 선적할지를 선택해야 한다는 것입니다. 이는 UI가 약간 필요할 가능성이 큽니다.

// 이전 예제에서 constants sourceItems와 API_TOKEN을 재사용합니다.

let cargoes: ItemData[] = [];

// sourceItem을 Cargo-Planners 표현으로 변환
for (let i = 0; i < source.length; i++) {
  let s = source[i];
  // ID와 제목을 모두 이름으로 저장하고 싶습니다.
  const title = `${s.id} - ${s.title}`;

  let cargo: ItemData = {
    label: title,
    l: s.length,
    w: s.width,
    h: s.height,
    // 그램에서 킬로그램으로 무게 변환
    wt: s.weight / 1000,
    unit_qty: s.inner_quantity,
    // 각 항목을 10개씩 보내고 싶습니다.
    qty: 10,
  };
  cargoes.push(cargo);
}

// 마지막으로 적재 목록을 생성합니다.
fetch('https://api.cargo-planner.com/api/2/loadlist/', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    Authorization: API_TOKEN,
  },
  body: JSON.stringify({
    name: 'Shipment 123',
    data: cargoes,
    etd: '2022-12-01',
    length_dim: 'MM',
    weight_dim: 'KG',
  }),
});

새로운 적재 목록은 웹 앱에서 볼 수 있지만, 응답에는 새로운 적재 목록으로 직접 연결되는 URL이 포함됩니다.

또한 생성 및 계산 엔드포인트를 사용하여 한 단계 더 나아갈 수 있지만, 이를 위해서는 사용할 설정 및 장비와 같은 추가 입력 데이터가 필요합니다.