Cargo-Planner Docs

統合

もしすでに倉庫に保管されているものを管理するためのデジタルツールを持っている場合や、顧客のロードリストをどのように処理するかについて、Cargo-Plannerは少しの統合でそれを活用することができます。

貨物ライブラリの同期

現在のツールと統合を進める最も簡単な方法は、Cargo Library を通じて行うことです。すべてのCargo-PlannerライセンスにはCargo Libraryが含まれており、これは本質的に最小限のWMSまたはリソース計画システムです。

これを設定することで、スムーズなインポートや自動補完を通じて、私たちのウェブアプリで新しいロードリストを簡単に作成できます。

この方法は基本的にCRONジョブや日次同期として実行でき、Cargo-Plannerはロードリスト作成のすべてのUI側面を担当します。

ロードリストの自動補完のGIF

しかし、Cargo Libraryを手動で設定するのはかなりの作業になることがあります。そこで、現在使用しているツールと少しのコードで同期させましょう。

// トークンの作成方法については、Getting Startedページを参照してください
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,
  },
  // ... etc
];

// 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;
}

これで、Excelのインポート/エクスポートを再度行う必要がなくなり、次の出荷の計画がはるかに速くなります。

ロードリストを直接作成する

他のツールから直接ロードリストを作成したい場合、APIコールに関しては前の例とあまり変わりません。今回はCargo Libraryを完全にスキップし、新しいロードリストを直接作成します。

この方法の欠点は、APIを呼び出す前に何を出荷するか、各アイテムの数量を選択する必要があることです。これには少しのUIが必要になる可能性があります。

// 前の例から定数sourceItemsとAPI_TOKENを再利用しています

let cargoes: ItemData[] = [];

// sourceItemからCargo-Plannerの表現への変換
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が含まれます。

また、Create and calculateエンドポイントを使用してさらに一歩進めることも可能ですが、これには使用する設定や機器などの追加の入力データが必要です。