Cargo-Planner Docs

통합

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

화물 라이브러리 동기화

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

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

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

적재 목록 자동 완성 GIF

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

// 시작하기 페이지에서 토큰을 생성하는 방법을 확인하세요
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/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 호출 측면에서 이전 예제와 크게 다르지 않습니다. 이번에는 화물 라이브러리를 완전히 건너뛰고 새로운 적재 목록을 바로 생성합니다.

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

// 이전 예제에서 상수 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이 포함됩니다.

또한 생성 및 계산 엔드포인트를 사용하여 이를 한 단계 더 발전시킬 수 있지만, 이는 어떤 설정과 장비를 사용할지와 같은 추가 입력 데이터가 필요합니다.