Cargo-Planner Docs

Incluir en su aplicación

Aunque nuestra aplicación web debería cubrir la mayoría de los casos de uso, a veces puede ser de interés agregar funcionalidad de planificación de carga a un sistema WMS o ERP existente, o quizás a su propio portal web personalizado. Puede utilizar la mayoría de la funcionalidad usando nuestra API Rest y el SDK de JavaScript.

Tres maneras de agregar Cargo-Planner a su aplicación

Hay tres maneras de agregar funcionalidad de planificación de carga a su aplicación. Cuál es la más adecuada en su caso de uso es un compromiso entre complejidad, características y personalización.

1. Incrustar en un iframe - sin código (casi)

La forma más fácil de integrar nuestra herramienta de planificación de carga es incrustar la vista en un elemento html iframe.

El mayor inconveniente de este enfoque es que se realizará de una manera no autenticada, lo que significa que los objetos de la lista de carga deben crearse previamente y luego habilitar el acceso de Lectura y Escritura para compartir públicamente. Para hacerlo, necesita crear un nuevo plan de carga (solo necesita crearlo, no necesita completar ningún dato) y luego habilitar el compartir.

Una vez hecho esto, copie el enlace para compartir e incrústelo en un iframe como este:

<iframe
  src="https://app.cargo-planner.com/loadlist/10405cacde654075kjf53bd1f78520/workspace/0?length_dim=IN&weight_dim=LB&primary=1e3a8a"></iframe>

Load plan from API

Tenga en cuenta que puede agregar un parámetro de consulta primario con un color hexadecimal. Proporcione el color de su tema y se integrará mejor con su entorno.

También puede adjuntar un conjunto del parámetro de consulta hide_navigation a true para ocultar la barra de navegación. Esto podría ser útil si, por ejemplo, solo desea mostrar la vista del plan de carga.

2. Subir datos usando la API - mostrar resultado en un iframe

Aunque la solución anterior permite rápidamente adjuntar funcionalidad de planificación de carga a su sitio, los principales inconvenientes son que necesita crear cada lista manualmente. Si tiene múltiples usuarios utilizando su aplicación, puede resultar en un comportamiento extraño ya que la misma lista de carga podría actualizarse simultáneamente.

Otro inconveniente es que los datos de carga deben agregarse manualmente (bueno, aún podría usar las diversas funciones de importación). Es probable que su aplicación ya tenga esta información disponible, por lo tanto, sería genial si uno pudiera subir esta información automáticamente.

La solución es usar nuestra API.

Supongamos que su aplicación tiene el siguiente endpoint:

# /calculate endpoint at your server located at https://example.com

import requests
import json

CARGO_PLANNER_TOKEN = 'Token your-token'

def calculate(request):

    # Estos datos quizás provengan de su sitio web público o de su fuente de datos interna
    data = {
        "loadlist": {
            "name": "Orden de compra 1234",
            "public_access": "RW"
        },
        "calculation": {
            "length_dim": "CM",
            "weight_dim": "KG"
            "container_types": [
                {
                    "id": 1,
                    "payload": 20000
                }
            ],
            "items": [
                {
                    "label": "producto 1",
                    "l": 30,
                    "w": 80,
                    "h": 90,
                    "wt": 70,
                    "qty": 2
                },
                {
                    "label": "producto 2",
                    "l": 50,
                    "w": 40,
                    "h": 50,
                    "wt": 40,
                    "qty": 3
                }
            ],
        }
    }

    # Llamar a nuestra API
    response = requests.post(
        url="https://api.cargo-planner.com/api/2/create_and_calculate/",
        data=json.dumps(data),
        headers={
            'Content-type': 'application/json',
            'Authorization': CARGO_PLANNER_TOKEN
        })
    if response.status_code == 200:
        # Devolver el enlace a su página para el iframe
        return "https://app.cargo-planner.com/loadlist/{}/".format(response.data["id"])
    #...

3. Subir datos usando la API - mostrar el resultado usando nuestro SDK

Para lograr una personalización completa del aspecto y la sensación, al mismo tiempo que se elimina la necesidad de usar un iframe, puede usar nuestro SDK de Javascript.

De esta manera, puede mostrar los diseños 3D de cada contenedor y también presentar las métricas que parecen ser más importantes.

A continuación se muestra un fragmento simple del lado del servidor en Python y un fragmento de Javascript para su aplicación pública:

# /calculate endpoint at your server located at https://example.com

import requests
import json

CARGO_PLANNER_TOKEN = 'Token your-token'

def calculate(request):
    response = requests.post(
        url="https://api.cargo-planner.com/api/2/calculate/",
        data=json.dumps(request.data),
        headers={
            'Content-type': 'application/json',
            'Authorization': CARGO_PLANNER_TOKEN
        })
    if response.status_code == 200:
        return response.json()
    #...
<meta charset="utf-8">
<title>Mi portal de clientes</title>
<script src="https://usermedia.cargoplanner.net/sdk/cargoPlannerSDK.umd.min.js"></script>

<body>
    <h1>Plan de carga</h1>
</body>

<script>

calculate();

async function calculate() {

    // Inicializar motor 3D
    await cargoPlannerSDK.SceneManager.init();

    // Consulte la documentación de la API para más opciones
    let calculationData = {
        length_dim: "M",
        weight_dim: "KG",
        // Tal vez las dimensiones de la carga podrían ingresarse desde un formulario interactivo?
        "items": [
            {
                "label": "Carga 1",
                "l": 1.2,
                "w": 0.8,
                "h": 0.5,
                "wt": 300,
                "qty": 20,
                "layers": 2,
                "color":"#48c9b0"
            },
            {
                "label": "Carga 2",
                "l": 1.2,
                "w": 1.0,
                "h": 0.9,
                "wt": 300,
                "qty": 20,
                "layers": 2,
                "color":"#ec7063"
            },

        ],
        "container_types": [
            {
                "name": "40ft DV",
                "L":    12,
                "W":    2.33,
                "H":    2.38,
                "payload": 22000,
                "door": {
                  H: 2.33,
                  W: 2.28
                }
            }
        ]
    }

    fetch('/calculate/', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
        },
        body: JSON.stringify(calculationData),
    })
    .then(response => response.json())
    .then(data => {
        // Si recibimos alguna solución
        if(data.solutions) {

            // En este momento, cada cálculo da una solución (en el futuro podríamos proporcionar más)
            data.solutions.forEach((solution) => {

                // Revisar cada contenedor
                solution.containers.forEach((container, index) => {

                    // Renderizar el canvas
                    cargoPlannerSDK.SceneManager.createScene(
                        [container],  // datos del contenedor, puede enviar múltiples contenedores a una escena y especificar su posición
                        null,       // Modo interactivo (establecer en null al mostrar múltiples contenedores)
                        400,        // Ancho en píxeles
                        200         // Altura en píxeles
                    ).then((canvas) => {

                        const containerDiv = document.createElement("div");

                        const label = document.createTextNode(`Contenedor ${index+1}: ${container.name} Espacio máximo usado: ${container.items_bb.max.x}, Peso usado: ${container.WT}  `)
                        containerDiv.appendChild(label);
                        containerDiv.appendChild(canvas);

                        document.body.appendChild(containerDiv);
                    });

                });
            });
        }
    });
}

</script>

El ejemplo anterior generará el plan de carga a continuación:

Load plan from API