Automatizando un catering (2/n)

Quiero que los posts sobre esto en el blog sean un poco más técnicos que en redes, así que entraré en detalle de cómo ciertas partes están implementadas cuando sea necesario.

Hoy nos toca hablar sobre paellas:

En el negocio, comenzamos vendiendo paellas. Montar una cocina grande resultó ser mucho más caro de lo esperado y encontramos un cliente que quería solamente paellas. Muchísimas paellas, tanto de pollo como veganas. En estos meses hemos enviado más de 6 toneladas de paellas a Fuerteventura, donde son consumidas por turistas.

Cocinar tantas paellas, a parte del hecho de tener que cocinarlas, conlleva otras actividades. Entre otras:

  • Envasarlas al vacío
  • Etiquetarlas
  • Congelarlas

Ahora mismo no soy capaz de hacer un robot que las envase automáticamente ni las coloque en uno de los 5 congeladores que tenemos, dependiendo de su capacidad (¡ojalá!). Sin embargo, sí que puedo ayudar en el etiquetado.

Generando etiquetas para paellas en Laravel

Aquí llegó mi momento: teníamos que tener etiquetas con un formato específico: nombre del plato, ingredientes, número sanitario de la empresa, fecha de envasado, fecha de caducidad. Evidentemente, no íbamos a hacerlo a papel y boli 😅

Monté un pequeño panel de administración con Filament, mi herramienta de Laravel favorita. Creé una página con un pequeño formulario que nos permite seleccionar qué etiquetas queríamos crear:

Una vez seleccionadas, al pulsar en Crear etiquetas se genera un fichero PDF con las etiquetas:

La creación de las etiquetas no fue muy complicada. Tengo un controlador más o menos así:

class GeneratePaellaLabelsPdfController extends Controller
{
    public function __invoke(Request $request)
    {
        $data = $request->validate([
            'labels' => 'required|array',
            'labels.*.date' => 'required|date',
            'labels.*.type' => 'required|string',
            'labels.*.n' => 'required|integer|min:1',
        ]);

        $labels = [];
        foreach ($data['labels'] as $label) {
            for ($i = 0; $i < $label['n']; $i++) {
                $labels[] = $label;
            }
        }

        return $this->generatePdf($labels);
    }
}

Para generar los PDF, estoy usando Laravel PDF:

Introduction | laravel-pdf
laravel-pdf

Para generar el PDF, utiliza Puppeteer por detrás para abrir un Chrome y exportar la página a PDF. Un poco costoso de recursos, pero mucho más sencillo de manejar que otras opciones como DomPDF. La plantilla de las paellas es algo así:

@foreach (collect($labels)->chunk(10) as $page)
    <div class="page">
        <table class="w-full border-collapse opacity-100">
            <tr>
                <td class="w-1/2 h-[46mm]">
                </td>
            </tr>
            @foreach (collect($page)->chunk(2) as $row)
                <tr>
                    @foreach ($row as $label)
                        <td>
                            {-- Plantilla de la etiqueta en HTML --}
                        </td>
                    @endforeach
                    @if ($row->count() < 2)
                        @for ($i = 0; $i < 2 - $row->count(); $i++)
                            <td class="w-1/2"></td>
                        @endfor
                    @endif
                </tr>
            @endforeach
        </table>
    </div>
@endforeach

Fue un poco rollo cuadrar los tamaños con las etiquetas que compramos, pero nos aceleró bastante el trabajo de no tener que cortarlas manualmente ni nada.

Esto automatiza la propia impresión de etiquetas, así como el cálculo de caducidad y los ingredientes de cada bolsa.

Aunque sea algo muy pequeño, todas las paellas que vendimos nos ayudaron a abrir otra parte del negocio que trae muchas, muchas automatizaciones consigo 🌟