Cargo-Planner Docs

التكامل

إذا كان لديك بالفعل أدوات رقمية لإدارة ما يتم تخزينه في مستودعك، أو كيفية التعامل مع قوائم تحميل العملاء، يمكن لـ Cargo-Planner البناء على ذلك مع القليل من التكامل.

مزامنة مكتبة الشحن

أبسط طريقة للحصول على تكامل مع أدواتك الحالية هي من خلال مكتبة الشحن. جميع تراخيص Cargo-Planner تتضمن مكتبة الشحن، والتي هي في الأساس نظام تخطيط موارد أو نظام إدارة مستودعات بسيط.

إعدادها يجعل من السهل إنشاء قوائم تحميل جديدة في تطبيق الويب الخاص بنا، من خلال عمليات الاستيراد السلسة أو الإكمال التلقائي.

يمكن تشغيل هذه الطريقة أساسًا كوظيفة CRON أو مزامنة يومية، وسيتولى Cargo-Planner جميع جوانب واجهة المستخدم لإنشاء قائمة تحميل.

GIF لإكمال قائمة تحميل تلقائيًا

لكن إعداد مكتبة الشحن يدويًا يمكن أن يكون مهمة شاقة. لذا دعونا نحافظ على تزامنها مع أي أداة تستخدمها حاليًا، مع القليل من التعليمات البرمجية.

// تحقق من صفحة البدء لمعرفة كيفية إنشاء الرمز المميز الخاص بك
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,
  },
  // ... إلخ
];

// مصدر العناصر لدينا مختلف قليلاً
// عن كيفية تمثيله في cargo-planner
// لذلك نحتاج إلى بعض التكيف مع البيانات
for (let i = 0; i < sourceItems.length; i++) {
  let s = sourceItems[i];
  // نريد تخزين كل من معرفنا والعنوان كاسم
  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/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. هذه المرة سنتخطى مكتبة الشحن تمامًا ونتوجه مباشرة إلى قائمة تحميل جديدة.

الجانب السلبي لهذه الطريقة هو أنك تحتاج إلى اختيار ما تريد شحنه، وكمية كل منها قبل استدعاء API. من المحتمل أن يتطلب ذلك بعض واجهة المستخدم.

// نحن نعيد استخدام الثوابت sourceItems و API_TOKEN
// من المثال السابق

let cargoes: ItemData[] = [];

// التحويل من sourceItem إلى تمثيل Cargo-Planner
for (let i = 0; i < source.length; i++) {
  let s = source[i];
  // نريد تخزين كل من معرفنا والعنوان كاسم
  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',
  }),
});

ستكون قائمة التحميل الجديدة مرئية في تطبيق الويب، ولكن الرد سيتضمن رابطًا مباشرًا إلى قائمة التحميل الجديدة.

من الممكن أيضًا اتخاذ خطوة أخرى مع نقطة النهاية إنشاء وحساب، ولكن هذا سيتطلب بعض البيانات الإضافية، مثل الإعدادات والمعدات التي يجب استخدامها.