Guía Interactiva del Proyecto MRP

Visor Interactivo: Guía MRP Lite para WordPress

🏛️ Arquitectura de Datos

La base del sistema se construye sobre una estructura de datos sólida en WordPress, utilizando Tipos de Contenido Personalizados (CPTs) y Campos Personalizados (ACF) para organizar y detallar toda la información de manera lógica y escalable.

Tipos de Contenido Personalizados (CPTs)

Se definen tres CPTs principales para estructurar los datos: `material`, `producto`, y `plan_produccion`. Este código se añade al archivo `functions.php` o a un plugin personalizado.

function mrp_register_post_types() {
    // CPT para Materiales
    register_post_type( 'material', [
        'labels' => ['name' => 'Materiales', 'singular_name' => 'Material'],
        'public' => true, 'show_ui' => true, 'menu_icon' => 'dashicons-admin-generic', 'supports' => ['title']
    ]);
    // CPT para Productos
    register_post_type( 'producto', [
        'labels' => ['name' => 'Productos', 'singular_name' => 'Producto'],
        'public' => true, 'show_ui' => true, 'menu_icon' => 'dashicons-cart', 'supports' => ['title']
    ]);
    // CPT para Planes de Producción
    register_post_type( 'plan_produccion', [
        'labels' => ['name' => 'Planes de Producción', 'singular_name' => 'Plan'],
        'public' => false, 'show_ui' => true, 'menu_icon' => 'dashicons-clipboard', 'supports' => ['title', 'author'],
        'capabilities' => ['create_posts' => 'create_plan_produccions'], 'map_meta_cap' => true
    ]);
}
add_action( 'init', 'mrp_register_post_types', 0 );

⚙️ Lógica de Negocio (Backend)

El núcleo funcional del sistema reside en el backend. Funciones PHP se encargan de los cálculos de costos y del guardado de los planes de producción, comunicándose con el frontend a través de AJAX para una experiencia de usuario fluida.

Cálculo de Costos de Producto

Una función clave itera sobre la ‘receta’ de un producto para calcular su costo total de producción sumando el costo de cada material.

function calcular_costo_producto( $producto_id ) {
    $costo_total = 0;
    if ( have_rows('receta', $producto_id) ) {
        while ( have_rows('receta', $producto_id) ) {
            the_row();
            $material = get_sub_field('material');
            $cantidad = get_sub_field('cantidad');
            $precio_material = get_field('precio_por_unidad', $material->ID);
            $costo_total += $cantidad * $precio_material;
        }
    }
    return $costo_total;
}

Guardado de Planes (AJAX)

Esta función se activa vía AJAX, recibe los datos del plan, crea un nuevo post `plan_produccion` y guarda los productos seleccionados en sus metadatos.

add_action('wp_ajax_guardar_plan', 'mrp_guardar_plan_callback');
function mrp_guardar_plan_callback() {
    check_ajax_referer('mrp_nonce', 'security');
    
    $productos = $_POST['productos'];
    $plan_id = wp_insert_post([
        'post_title' => 'Plan - ' . date('Y-m-d H:i'),
        'post_type' => 'plan_produccion',
        'post_status' => 'publish'
    ]);

    if ($plan_id) {
        update_field('productos_seleccionados', $productos, $plan_id);
        wp_send_json_success(['message' => 'Plan guardado.']);
    } else {
        wp_send_json_error(['message' => 'Error al guardar.']);
    }
}

🖥️ Interfaz de Operador (Frontend)

La interfaz del operador es una página dedicada donde pueden buscar productos, añadirlos a un plan, especificar cantidades y ver los costos actualizados en tiempo real. Todo se maneja con JavaScript para evitar recargas de página.

<div class="mrp-search-wrapper">
    <label for="product-search">Buscar Producto:</label>
    <input type="text" id="product-search">
    <div id="product-search-results"></div>
</div>

<table id="plan-products-table">
    <thead>
        <tr>
            <th>Producto</th>
            <th>Cantidad</th>
            <th>Costo Unitario</th>
            <th>Costo Total</th>
            <th>Acción</th>
        </tr>
    </thead>
    <tbody><!-- Filas añadidas dinámicamente --></tbody>
</table>

<button id="save-plan-btn">Guardar Plan</button>

📊 Módulos de Visualización

Para dar sentido a los datos, se crean dos módulos de visualización clave: un reporte de Cashflow para analizar la rentabilidad y una vista tipo Gantt simplificada para seguir el progreso de la producción.

Módulo de Cashflow

Esta página consulta todos los planes de producción, permitiendo filtrar por fecha y mostrando una tabla con ingresos, egresos y rentabilidad. Se integra Chart.js para una visualización rápida.

Vista tipo Gantt Sencilla

Una visualización simple con HTML y CSS. Cada plan de producción se representa como una barra horizontal cuya longitud es proporcional al tiempo de producción y cuyo color indica el estado actual del plan.

Plan #1 – Mesas
Completado
Plan #2 – Sillas
En Proceso
Plan #3 – Estantes
Pendiente

🚀 Importación Masiva

Para facilitar la carga inicial de datos, se utiliza el plugin “WP Import Export Lite”. Se define un formato CSV específico que es compatible con los campos personalizados, incluyendo el complejo campo `repeater` para las recetas de productos.

Formato del Archivo CSV para Productos

El truco para importar campos `repeater` es numerar las columnas. Cada par de columnas `receta_X_material` y `receta_X_cantidad` representa una fila en la receta del producto.

post_title codigo precio_venta receta_0_material receta_0_cantidad receta_1_material receta_1_cantidad
Mesa de Roble M-ROB-01 350.50 Roble (kg) 2.5 Tornillos (unidad) 20
Silla de Pino S-PIN-01 80.00 Pino (kg) 1.2 Cola (litro) 0.1

Nota: Si el plugin de importación no soporta este formato, se requeriría un script PHP personalizado como plan alternativo para procesar el CSV.