Cargo-Planner Docs

Integration

Om du redan har digitala verktyg för att hantera vad som lagras i ditt lager, eller hur du hanterar kundens lastlistor, kan Cargo-Planner bygga vidare på det med lite integration.

Lastbibliotekssynkronisering

Det enklaste sättet att få en integration att fungera med dina nuvarande verktyg är genom Lastbiblioteket. Alla Cargo-Planner-licenser inkluderar Lastbiblioteket, vilket i huvudsak är ett minimalt WMS eller resursplaneringssystem.

Att ha det inställt gör det enkelt att skapa nya lastlistor i vår webbapp, genom smidiga importer eller automatisk komplettering.

Denna metod kan i princip köras som ett CRON-jobb eller daglig synkronisering, och Cargo-Planner tar hand om alla UI-aspekter av att skapa en lastlista.

GIF av automatisk komplettering av en lastlista

Men att ställa in Lastbiblioteket manuellt kan vara en ganska stor uppgift. Så låt oss hålla det i synk med vilket verktyg du för närvarande använder, med lite kod.

// Kontrollera sidan Kom igång för att ta reda på hur du skapar din token
const API_TOKEN = 'Token b123...';
const cargoes: CargoPlannerItem[] = [];

// låt oss låtsas att vi har en källa av artiklar/laster som ser ut så här,
// där allt är definierat i millimeter och gram.
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
];

// Våra sourceItems är lite annorlunda
// från hur det representeras i cargo-planner
// så vi behöver anpassa datan lite
for (let i = 0; i < sourceItems.length; i++) {
  let s = sourceItems[i];
  // vi vill ha både vårt ID och titel lagrade som namnet
  const title = `${s.id} - ${s.title}`;

  let cargo: CargoPlannerItem = {
    name: title,
    length_dim: 'MM',
    // Cargo-Planner accepterar inte gram, så vi konverterar till kilogram
    weight_dim: 'KG',
    data: {
      label: title,
      l: s.length,
      w: s.width,
      h: s.height,
      wt: s.weight / 1000, // viktkonverteringen
      unit_qty: s.inner_quantity,
    },
  };
  cargoes.push(cargo);
}

// Innan vi skapar alla artiklar vill vi först
// ta bort allt som finns i lastbiblioteket,
// så vi inte får några dubbletter.
// Låt oss använda cargo/truncate endpoint för detta
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 }),
});

// Och slutligen skapar vi listan över laster i bulk
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),
});

// förenklade typdefinitioner av vad Cargo-Planner accepterar
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;
}

Nu behöver vi inte gå igenom Excel-importer/exporter igen, och planeringen av nästa försändelse kommer att gå mycket snabbare.

Skapa lastlistor direkt

Om du vill skapa lastlistor direkt från dina andra verktyg är det inte mycket annorlunda från det tidigare exemplet när det gäller API-anrop. Denna gång kommer vi att hoppa över Lastbiblioteket helt och gå direkt till en ny lastlista.

Nackdelen med denna metod är att du behöver välja vad som ska skickas, och hur många av varje innan du anropar API:et. Detta kommer troligtvis att kräva lite UI.

// vi återanvänder konstanterna sourceItems och API_TOKEN
// från det tidigare exemplet

let cargoes: ItemData[] = [];

// Konverteringen från sourceItem till Cargo-Planners representation
for (let i = 0; i < source.length; i++) {
  let s = source[i];
  // vi vill ha både vårt ID och titel lagrade som namnet
  const title = `${s.id} - ${s.title}`;

  let cargo: ItemData = {
    label: title,
    l: s.length,
    w: s.width,
    h: s.height,
    // viktkonverteringen från gram till kilogram
    wt: s.weight / 1000,
    unit_qty: s.inner_quantity,
    // vi vill skicka 10 av varje artikel
    qty: 10,
  };
  cargoes.push(cargo);
}

// Och slutligen skapar vi en lastlista
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',
  }),
});

Den nya lastlistan kommer att vara synlig i webbappen, men svaret kommer att innehålla en URL som länkar direkt till den nya lastlistan.

Det är också möjligt att ta detta ett steg längre med Skapa och beräkna endpoint, men detta kommer att kräva lite mer indata, såsom vilka inställningar och utrustning som ska användas.