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å till en integration med dina nuvarande verktyg är genom Lastbiblioteket. Alla Cargo-Planner-licenser inkluderar Lastbiblioteket, vilket i princip ä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 ifyllnad.
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 krävande. Så låt oss hålla det synkroniserat med vilket verktyg du för närvarande använder, med lite kod.
// Kolla in sidan Komma 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/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 lagrat 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 av last 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 leverans 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. Den här gången kommer vi att hoppa över Lastbiblioteket helt och hållet 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 lagrat 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: 'Leverans 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.