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-Planners
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',
  }),
});

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

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