Cargo-Planner Docs
Integration
Om du redan har digitala verktyg för att hantera vad som lagras i ditt lager, eller hur du hanterar kundernas 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, som 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 autokomplettering.
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.

Men att ställa in Lastbiblioteket manuellt kan vara ganska arbetskrävande. Så låt oss hålla det synkroniserat med vilket verktyg du för närvarande använder, med lite kod.
// Kontrollera Kom igång-sidan 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/last 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 göra lite anpassning av data
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 har 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 bulk-listan av last
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 troligen 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.