Cargo-Planner Docs

Entegrasyon

Eğer zaten depolarınızda sakladıklarınızı yönetmek veya müşteri yük listelerini nasıl ele aldığınızı dijital araçlarla yönetiyorsanız, Cargo-Planner biraz entegrasyon ile bunun üzerine inşa edebilir.

Kargo Kütüphanesi Senkronizasyonu

Mevcut araçlarınızla bir entegrasyon başlatmanın en basit yolu Kargo Kütüphanesi aracılığıyladır. Tüm Cargo-Planner lisansları, esasen minimal bir WMS veya kaynak planlama sistemi olan Kargo Kütüphanesi’ni içerir.

Kurulumu, web uygulamamızda yeni yük listeleri oluşturmayı, sorunsuz ithalatlar veya otomatik tamamlama yoluyla kolaylaştırır.

Bu yöntem esasen bir CRON işi veya günlük senkronizasyon olarak çalıştırılabilir ve Cargo-Planner yük listesi oluşturmanın tüm UI yönlerini halleder.

Bir yük listesini otomatik tamamlama GIF'i

Ancak Kargo Kütüphanesi’ni manuel olarak kurmak oldukça zahmetli olabilir. Bu yüzden, biraz kod ile şu anda kullandığınız araçla senkronize tutalım.

// Token oluşturmayı öğrenmek için Başlarken sayfasına bakın
const API_TOKEN = 'Token b123...';
const cargoes: CargoPlannerItem[] = [];

// Eşyaların/kargoların böyle göründüğü bir kaynağımız varmış gibi yapalım,
// burada her şey milimetre ve gram cinsinden tanımlanmıştır.
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,
  },
  // ... vb.
];

// sourceItems'ımız cargo-planner'da temsil edildiğinden biraz farklı
// bu yüzden verilerin biraz uyarlanması gerekiyor
for (let i = 0; i < sourceItems.length; i++) {
  let s = sourceItems[i];
  // hem ID'mizi hem de başlığımızı isim olarak saklamak istiyoruz
  const title = `${s.id} - ${s.title}`;

  let cargo: CargoPlannerItem = {
    name: title,
    length_dim: 'MM',
    // Cargo-Planner gram kabul etmez, bu yüzden kilogram'a çeviriyoruz
    weight_dim: 'KG',
    data: {
      label: title,
      l: s.length,
      w: s.width,
      h: s.height,
      wt: s.weight / 1000, // ağırlık dönüşümü
      unit_qty: s.inner_quantity,
    },
  };
  cargoes.push(cargo);
}

// Tüm öğeleri oluşturmadan önce
// kargo kütüphanesinde var olan her şeyi kaldırmak istiyoruz,
// böylece herhangi bir kopya olmayacak.
// Bunun için cargo/truncate endpoint'ini kullanalım
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 }),
});

// Ve son olarak kargo listesini toplu olarak oluşturuyoruz
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'ın kabul ettiği basitleştirilmiş tip tanımları
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;
}

Artık Excel ithalat/ihracat işlemlerinden tekrar geçmemiz gerekmeyecek ve bir sonraki sevkiyatı planlamak çok daha hızlı olacak.

Yük listelerini doğrudan oluşturma

Yük listelerini diğer araçlarınızdan doğrudan oluşturmak istiyorsanız, bu API çağrıları açısından önceki örnekten çok farklı değildir. Bu sefer Kargo Kütüphanesi’ni tamamen atlayacağız ve doğrudan yeni bir yük listesi oluşturacağız.

Bu yöntemin dezavantajı, API’yi çağırmadan önce neyi göndereceğinizi ve her birinden kaç tane göndereceğinizi seçmeniz gerektiğidir. Bu muhtemelen biraz UI gerektirecektir.

// önceki örnekten constants sourceItems ve API_TOKEN'ı yeniden kullanıyoruz

let cargoes: ItemData[] = [];

// sourceItem'dan Cargo-Planner temsilciliğine dönüşüm
for (let i = 0; i < source.length; i++) {
  let s = source[i];
  // hem ID'mizi hem de başlığımızı isim olarak saklamak istiyoruz
  const title = `${s.id} - ${s.title}`;

  let cargo: ItemData = {
    label: title,
    l: s.length,
    w: s.width,
    h: s.height,
    // ağırlık dönüşümü gramdan kilograma
    wt: s.weight / 1000,
    unit_qty: s.inner_quantity,
    // her öğeden 10 tane göndermek istiyoruz
    qty: 10,
  };
  cargoes.push(cargo);
}

// Ve son olarak bir yük listesi oluşturuyoruz
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',
  }),
});

Yeni yük listesi web uygulamasında görünecek, ancak yanıt doğrudan yeni yük listesine bağlanan bir URL içerecektir.

Bu işlemi bir adım daha ileri götürmek de mümkündür, ancak bu, hangi ayarların ve ekipmanın kullanılacağını gibi daha fazla girdi verisi gerektirecektir.