 ¿Qué mejor para entender la gestión de stock de una tienda online que verlo con un caso práctico? Un caso práctico es lo que nos va a presentar Dani Serrano, programador, formador, especialista en PHP, ¿me dejo algo? Un poco tonto también. Bueno, pero eso lo ha dicho él, ¿eh? No, pero es un buen sentido, un buen sentido. Ah, bueno, vale. Y está grabado. Sí, sí. Está grabado, pero yo no he sido. Sí, no es la primera vez. Pues dejo viendo gestión de stock via file transfer con Dani Serrano. ¡Disfrutadlo! Gracias. ¿Qué tal, jóvenes? ¿Cómo está yendo la mañana? Muy bien. Bien, el tema de networking lo llevamos... ¿Quién ha conocido a alguien nuevo hoy? ¿Hay un 1%? ¿Has conocido a alguien nuevo? ¿Tú? Ah, perfecto. 100%, conseguido. ¡Qué susto! Vale, perfecto. 100%. Lo que yo voy a contar es, precisamente, un caso práctico, un caso real que llevamos a cabo hace poquito. Pero quiero que lo desglosemos, que lo veamos en 3 puntos, en 3 pasos súper sencillos. Primero, ¿cuál es el problema? Vamos a plantear el problema que nos encontramos. Después, vamos a pensar y a plantear una solución a este problema, pero a nivel teórico, todavía no estamos haciendo nada, no hemos tocado nada, ni un ordenador hemos tocado. Y después, como tercer punto, vamos a ver cómo podemos llevar a cabo esa implementación de esa solución a la que hemos llegado. Pero, fijaos, los dos puntos que me parecen más importantes y que yo quiero destacar son los primeros y el segundo, entender el problema y entender una solución. Después, la implementación puede haber varias maneras de hacerlo, puedes tú aprender, una vez que sabes lo que quieres hacer, puedes tú aprender hacerlo o incluso puedes buscar a alguien, a un profesional, que sepa hacerlo y te lo haga. Vamos a hacer mucho hincapié en los dos primeros puntos y el tercero, si llegamos, es genial y si no, pues, para después del recreo, ¿vale? Venga, pues, vamos a hablar sobre el problema. Me encuentro un cliente que me dice, Dani, necesito una tienda online, pero ya tengo varias tiendas físicas, da igual donde estén, no importa, y necesito tener todo el stock sincronizado, tanto de la tienda online como de mis tiendas físicas y ahora mismo, ya estoy funcionando, ya estoy trabajando con un sistema X, da igual, no importa, que me lleva la gestión, la sincronización de todas las tiendas físicas. Entonces, nosotros, lo que vamos a hacer es crear esta tienda, en este caso WordPress y BuCommerce, pero tampoco sería importante, y lo que vamos a hacer es crear esta nueva sincronización, esta comunicación entre el sistema X y nuestra tienda online. Vale, si lo llevamos a un esquema, si lo llevamos a algo gráfico, sería algo así, ¿vale? Repito lo mismo. Un sistema X donde ya se están sincronizando los stocks de varias tiendas físicas, y ahora nosotros, con un WordPress, con un BuCommerce, vamos a crear una tienda, y lo que necesitamos es justo trabajar aquí, en estas líneas de aquí, en esta comunicación. Y ya vemos que va a tener que ser bidireccional. Nosotros vamos a tener que enviar información, y a nosotros nos van a enviar también información. Así es como vamos a controlar la gestión del stock, ¿vale? Este sería el problema. Vale, vamos a pensar en la solución. Mi primera pregunta, ¿vale? ¿Cómo hago yo esta comunicación? ¿Cómo funciona este sistema? Yo sé, por experiencia, cómo funciona WordPress, pero no sé el sistema X, no sé cómo funciona. Y la respuesta es, funciona a través de transferencia de ficheros. Podría ser API, podría ser un montón de sistemas. En este caso es a través de sistema de ficheros, ¿de acuerdo? ¿En qué consiste esto? El sistema X me va a enviar a mi sistema, un fichero, que aquí lo vamos a llamar, por ejemplo, ventas, perdón, stocks, donde me va a informar de los productos, de los artículos que yo tengo, qué cantidad hay en stock, pero de todo el global completo, ¿vale? Y yo le voy a tener que informar a este sistema, oye, yo he vendido de este artículo cinco, por ejemplo. Entonces él aglutina toda esa información y a todas las tiendas, ya sea física o online, nos va a enviar otra vez ese ficherito con la actualización. Porque igual que yo vendo cinco unidades del producto uno, la tienda física puede haber vendido otras ocho. Entonces mi stock ya no está del todo bien, ¿vale? Este es el problema. Entonces, si venimos otra vez al esquema que teníamos preparado antes, nos vamos a centrar únicamente en esta parte de aquí, ¿vale? En este recuadro que pinto yo aquí sería esta comunicación es donde nosotros vamos a trabajar, porque es donde realmente tenemos poder de acción. En el resto, no, ¿vale? Seguimos con el esquema. Hacemos ya un pelín con un pelín más de detalle. Esto es lo que vamos a necesitar. Por arriba vemos que hay la comunicación que viene desde el sistema X hasta nuestra tienda, este fichero que vamos a llamar stock, donde vamos a tener esta información. Ahora luego venimos un poquito más sobre este fichero. Y aquí lo importante, fijaos, he puesto el relojito. Es importante, porque no es que lo vayamos a recibir una vez, o dos veces, o una vez a la semana. Lo vamos a recibir cada X tiempo, una hora, cinco minutos, un minuto, lo que sea. Cada X tiempo va a ser algo recurrente, ¿vale? Y pasa exactamente lo mismo con nuestras ventas. Yo me tengo que adaptar a cómo funciona en ellos, pero yo les tengo que enviar cada X tiempo, da igual, un minuto, cinco, diez, ¿vale? Tengo que informarles, he vendido tanto de tanto, ¿vale? Entonces, quedaros con este esquema en la cabeza, porque esta es la solución que nosotros queremos implementar, ¿vale? Entonces, estos dos puntos, el problema y la solución consiste en WordPress, que es donde yo puedo trabajar, como decía antes, y tengo que ser capaz de importar un fichero stock que me están enviando ellos, y yo ser capaz de exportar este otro fichero, ¿vale? Entonces, hasta aquí, ya está, ya hemos terminado. ¿Todo entendido? Si hay alguna duda, si queréis matizar algo, esto es lo importante. Estos dos primeros puntos son los importantes. Problema, entender el problema, planteamos solución, entendemos esta solución particular. ¿Todo ok? Otro 100%, perfecto. Lo tenemos. Venga, pues ahora sí, vamos a ver cómo se implementó esta solución, ¿vale? Quedaros con este esquema que tenemos aquí abajo, quedaros con esta rueda, ¿no? que tenemos que hacer. Venga, pues vamos a ir punto por punto. Sistema X, me tiene que decir cuál es la estructura de ficheros que me va a mandar. Esto, si no habéis trabajado antes con ello, vamos a ver como una tabla, ¿no? Pues artículo, cantidad, precio, título, descripción, tal, imaginaros una tabla, pues con un montón de artículos. Y ya está, del sistema X, sí que necesito algún detalle más, pero lo importante es esto. Y en mi WordPress, en mi sistema, yo necesito exportar un fichero, ¿vale? Pues aquí me adelanto un pelín y os digo que lo vamos a hacer con un plugin que se llama WP All Import. Y por último, que aquí es donde está un poquito más de chicha, tengo que programar las acciones anteriores, pero programar de tiempo, programar de recurrencia, no programar de codificar, ¿vale? Programar de que se ejecute las veces cada X tiempo que yo quiera. Entonces, para esto, vamos a utilizar un plugin que se llama WP All Import. Entonces, para esto, vamos a utilizar el plugin WP Control y aquí sí que un pelín de código a medida, pero no os vayáis porque es una tontería y lo vamos a ver súper sencillo, ¿vale? Los que ya sabéis, ya sabéis, y los que no nos preocupéis porque es sólo una diapositiva, así que no pasa nada. Vale, entonces, tenemos esto en la cabeza. Necesito estructura de ficheros, necesito ser capaz de exportar, necesito ser capaz de importar y además necesito ser capaz de hacerlo cada X tiempo sin morir yo en el intento dándole al click como Homer con el con el pajarito, ¿sabéis lo que os digo? Ahí hay que sobrevivir también. Entonces, vamos a programar. Vamos a, en inglés sería, eschedulizar, ¿vale? El schedule esta sería la palabra. Vale, pues, vamos a ver lo que os decía. Primero, la estructura de ficheros. Fíjaros, a la izquierda tenemos las ventas. El fichero que yo tengo que enviar al sistema X. Podéis fijaros en todos los podéis fijaros en todos los puntos, en todos los campos, perdón, pero los interesantes son estos, artículo y unidades. ¿Qué artículo he vendido y cuántas unidades de este artículo he vendido? ¿Vale? Estos son los importantes. Y si nos vamos al lado derecho, tenemos el fichero stock, que recordad que es el que yo recibo, es el que me manda a mí el sistema, y aquí de nuevo tenemos algunos campos, pero el importante es el artículo y el stock. Porque volviendo al caso de antes, imaginad que yo tengo diez de algo. Yo vendo dos. Le envío la información, pero a la vuelta no me dice que hay ocho, me dice que quedan tres. Porque ha habido otras ventas en las tiendas, ¿vale? Ese es el tema al que queremos llegar. Vale, entonces, repito muy rápido, de estos dos ficheros nos interesa el artículo y la cantidad de unidades que yo vendo y recibir el artículo y la cantidad de stock que queda. El resto de campos, bueno, pues son necesarios para trabajar, para verlo de forma conjunta, pero estrictamente para lo que queremos hacer nosotros, estos son los importantes. Pero necesito todos, ¿vale? Venga, pues ya tenemos la estructura. De momento todo en la cabeza de todavía no hemos hecho nada. Fijaros que es un excel. ¿Vale? Ahora sí, vamos a empezar con la implementación real, digamos, y vamos a utilizar el plugin WP All Import. Fijaos que los dos se llaman prácticamente igual. WP All Import, WP All Export son de los mismos creadores. Perfectamente podrían ser el mismo plugin, pero han decidido separarlo. Bueno, tiene su sentido, pero podríamos pensar que es el mismo plugin, ¿vale? Nosotros lo que vamos a hacer es, dentro de WordPress instalamos este plugin y aquí veis que ya tenemos, pues, una sección nueva donde podemos hacer cosas nuevas. Aquí lo he reducido en una diapositiva, pero serían dos o tres al final, pero esta es la importante. Fijaos, allí a la derecha, en el bloque rojo, yo tengo todos los campos de mi sistema, de mi WordPress, de mi WooCommerce, en este caso. Y en el centro tengo el fichero que yo quiero construir. Lo acabamos de ver en la diapositiva anterior. ¿Vale? Esos dos ficheros. Las líneas, las columnas que hemos visto en la diapositiva anterior, sería esto que tenemos aquí en el centro. ¿Vale? Entonces, no sólo me deja construir este fichero, no sólo me deja importar o exportar este fichero de una forma sencilla, sino que deja hacer otro montón de cosas más, que no me voy a parar, pero sí que quiero destacar una. Fijaos, os lo leo yo porque puede ser que no se lea bien. Aquí a la derecha tenemos cantidad. Sin embargo, yo tengo unidades. ¿Por qué? Porque la especificación técnica del fichero del sistema X me pedía unidades, no cantidad. Entonces, súper fácil. Arrastro, pam. Le doy doble clic o algo así, cambio el nombre y ya está. Esto, si me pongo a hacerlo a código, es un jaleo. Así de sencillo. Y el mismo ejemplo sería para... aquí tengo SKU, pues en mi especificación tenía que ser artículo. No tenía que ser SKU. Perfecto, ya lo tengo. Se pueden hacer barbaridades con este plugin. Pero con esto de momento nos vale. Termino el proceso, que ya os digo súper sencillo, y tendría que hacerlo también para el otro fichero. Aquí sólo estoy poniendo uno. Tendríamos que hacerlo también para el otro fichero. Venga, pues ahora vamos... este sería el fichero que yo acabo de generar gracias a esto que acabamos de ver en la diapositiva anterior. De nuevo, he puesto todos los campos, pero me quedo con los importantes que los tenemos aquí. Artículo y unidades. Del artículo tal, he vendido dos. Del artículo tal, he vendido dos. Y del artículo tal, he vendido uno. Esta es la información que necesita el sistema X de mi tienda. El resto la dirección tal, no sé qué, bueno, pues lo necesitan para otras cosas, pero no para el stock. Vale. Perfecto, pues ya tengo el fichero. Ahora mismo, lo que tengo en este momento en mi WordPress es una funcionalidad nueva con un botoncito donde yo llego, doy al botón y saca este fichero. ¿Cuál es el problema de momento? Que tengo que ir yo con el retoncito a darle el click. Entonces, si te dicen, oye, que esto tiene que salir cada cinco minutos, pues ya tienes la jornada hecha, ¿no? Si tienes que dar cada cinco minutos y dices, bueno, pues trame agua y listo. Entonces, lo que vamos a ver ahora es cómo programarlo, cómo hacer lo que se ejecute de forma recurrente, cómo automatizarlo. Entonces, esto se divide en dos. Por un lado, programar de tema reloj, de tema horario, programar una función que se ejecute cada X tiempo, y después codificar, ahora sí, el código, codificar esta función. Esto es lo que vamos a ver ahora. Venga pues, primero, ya adelantábamos antes, voy a utilizar el plugin que se llama WP control, lo instalo y nuevamente, cositas nuevas para hacer cosas difíciles fácil, ¿vale? La magia del WordPress, la magia de la programación en general. Vale, no me lo digo. Instalamos el nuevo plugin y aquí vamos haciendo es declarar una nueva función que yo le pongo el nombre que a mí me da la gana. Digo, cuando quiero que se haga la primera ejecución, pero esta es la importante, cada cuánto tiempo quiero que se repita esta ejecución, ¿vale? Esta es la realmente importante. Venga pues, cada hora. Venga pues, cada hora. El tiempo que necesitemos, ¿vale? Podemos configurarlo como queramos. Ya tengo el tema de hora. Ahora voy a programar a codificar la función. Este es un detalle, pero fijaros que este nombre, aunque me lo puedo inventar, es importante, ¿vale? Os leo export, orders, file, cron. Venga pues, ahora voy a un cachito de código a crear esta función. Antes de hacer esto, esta función tendrá que ejecutar algo. ¿Qué va a ser? Va a simular este click que yo estaba haciendo. Gracias al plugin que he utilizado, el WP all import o export, de cualquiera de los dos. Tengo esta opción, que si os fijáis, arriba pone Scheduling Scheduling Options, ¿vale? Pues, llego a esta opción, una vez que ya he hecho el paso anterior, que veíamos de las flechitas, y me da estas opciones. Programación manual y me da dos URL. Realmente me da cuatro. Si vosotros os metéis a tal, hay cuatro, pero las importantes son estas dos. Entonces, vamos a quedarnos con esto. Aunque el propio plugin, cuando yo ya he creado una exportación o una importación, me da una URL y otra URL. La primera, Trigger, lanzador, ejecutador. Quiero que empieces la acción, ¿vale? La segunda, Processing. Es como un check. Quiero ver cómo está esta acción. Ha terminado, no ha terminado, ha fallado. Cuánto le quedan, cinco minutos, lo que sea, ¿no? Entonces, aunque hay cuatro, nos quedamos con estas dos. Y ahora sí, tenemos que ir a algún sitio del código. Puede ser el Functions. Cuidado con esto. Puede ser un plugin donde vosotros queráis crear código. Vamos a crear esto. Fijaros, porque parece mucho, pero no es nada. Ahora os lo simplifico. En realidad, son dos acciones. La primera. Fijaos que me salto una. Ahora vuelvo. La primera, Trigger. Estoy ejecutando la URL de la diapositiva anterior que se llamaba Trigger. Aquí lo tenemos al final. No sé si lo leáis bien, pero hay Trigger. ¿Qué pasa? Que por cómo funciona este plugin, a mí me obliga a ejecutar un Trigger y un Processing. No puedo ejecutar dos Triggers seguidos. Entonces, yo lo que hago es ejecutar un Trigger, ejecutar un Processing. ¿Qué pasa? Que la vida es caprichosa y puede ser que en algún momento esto no funcione bien. Entonces, por curarme en salud, lo que hago en la primera línea es ejecutar un Processing. Entonces, realmente la primera línea me sobra, pero no. Ahí está bien. Y la última última que yo tengo aquí es simplemente porque envío un correo a modo notificación, pero esto es cosa de porque yo quiero que funcione así. No es esencialmente de lo que estamos haciendo. Entonces, si lo reducimos serían dos líneas. El Trigger y el Processing. Este sería el código. Perdónadme. Y el nombre de la función. Export Order File Function. Vale. Eso era importante. Ya está. Este es el único código que íbamos a ver. Entonces, ahora sí, ahora sí que tenemos ya implementado. Nos falta hacerlo por la otra. Hemos hecho la de ventas. Nos faltaría hacer la de stock también. Tenemos que repetir el proceso otra vez. Pero ya tendríamos esto conseguido. Un sistema que tenía una especificación de ficheros que se pedía cada hora, vamos a poner que le envíe un fichero y que reciba otro fichero. Vale. Listo. Solucionado. No tenemos que hacer nada más. Simplemente probar que funciona bien, etc. No es simplemente esto. Tendríamos que comprobar que está todo bien. Pero ya está. Esto es la solución. Vale. Y si seguimos ya por terminar de completar el esquema un pelín más, por detallarlo con pelín más, esto es lo que hemos hecho. La creación de los dos archivos ha sido con el plugin WP All Import y WP All Export. Son dos. Vale. Después con el plugin WP Control hemos dicho cada cuánto tiempo quiero que se ejecute la acción que he creado con este plugin. Y luego nuestro pequeñito código lo que hace es hacer que esto sea posible. Vincular una programación a qué acción particular quiero que haga. Vale. Ya está. Vamos a ver. Ya está. ¿Cómo se disqueda? Simplemente. ¿Alguna pregunta? Sí. Podrías... El tríger y el processing te lo podrías llevar a un crón del servidor. Claro. Sí, sin ningún problema. Te ahorras y le instala el plugin. Sí, sí, perfecto. Acordaros que si queréis hacer preguntas os pasamos el micro para que todos os oigan, Dani, como es muy veterano ya pues ya se lanzó a la piscina. Perdón. No, no, que perdonar. Estamos en familia. ¿Más preguntas? Me da que estáis pensando que queréis ya... Al ser, o sea, que se ejecuta cada hora va a tener un desfase de stock ahí, ¿no? Claro. Ahí... ¿Cómo se puede solucionar eso? Reduciendo el tiempo. Pero claro, si se está ejecutando todo el rato o sea, va a consumir mucho recurso del servidor también. No, no, pero se ejecuta una vez cada hora. No, eso tiene un tiempo también. O sea, el pasar el archivo ese tarda tarda a lo mejor siempre un minuto. Y luego depende el archivo, si te vienen 5.000 líneas o 50.000 líneas, claro, claro. Claro, lo utilizo mucho. Le utilizo bastante ese plugin, claro, y estoy viendo, no sé, que a lo mejor puede tener ahí, o sea, que a fin vas a tener fallo de stock por tiempo. ¿Tienes el margen de una hora? Que claro, puede ser que a ti te manden a las 10, te mandan la información de que quedan 5, y la tienda no sé cuál vende esas 5. Ahí ya está la gestión del negocio de cómo distribuye el, oye, que quedan 5, hay que reponer, digamos, y también el cada cuánto tiempo queremos ejecutar esto. Esto es, digamos, una conversación entre el dueño del negocio y del sistema X. ¿Qué hay que reducir y ejecutarlo cada más veces? Claro, también piensa que si lo ejecutas cada más veces, cada, madre mía, si lo ejecutas cada menos tiempo el fichero que te va a venir va a ser menor, porque, por ejemplo, cuando no hay actualizaciones, pues no me envíes el cambio. Entonces, bueno, sí, hay un período de tiempo inevitable que no vas a estar 100% sincronizado, pero por ejemplo, también, yo esto lo tengo programado para que me coja solamente los pedidos completados, no los pedidos. Imagínate, tú abres un pedido, tienes el carrito abierto y te tiras ahí cinco minutos por el motivo que sea. Yo no puedo decirle al sistema que esos tres artículos que tú tienes en el carrito se han vendido, porque no se han vendido. Por ejemplo, cada mejor en las tiendas tiene mucho volumen de ventas, uno es una de las tiendas o todas las tiendas y tal, y a lo mejor ahí se ha acabado el esto de cierto producto. Claro, entonces no... A lo mejor no avisa algún comer, entonces lo vende y luego el esto. Claro. Siempre hay un margen de tiempo que tienes... O lo ejecutas cada segundo. Un caso más o menos parecido, una de las tiendas que tengo pues igual tenemos tienda física y, claro, pues teníamos ahí movida y tal, y bueno, al final lo obtuvimos que hacer con otro programa externo porque igual lo daba bastante y que me ha de lo de cabeza todo eso, pero bueno. También ahora sucede que con el tema APIs se hace mucho más fácil, más rápido. Lo único que hay... Este sistema, el File Transfer es antiguo, digamos, pero sigue estando... Yo lo utilizo bastante para otro tipo de... Claro, y a lo mejor en tiendas y tal, bueno, como está todo muy actualizado, cada vez es más fácil actualizar WordPress y otros sistemas, o tenemos Zapier o tiramos un montón de cosas que hemos visto, pero en cosas tipo bancos para tema transacciones, movimientos, tal, funciona muchísimo el tema de File y el concepto es el mismo. De importadores es el mejor. Bueno, muchas gracias, Dani. Gracias a ti, Jesús. ¿Alguna pregunta más? Pues si no tenemos foto ahora, ¿no? Efectivamente. Si no queréis hacer ninguna pregunta más... ¡Nos vayáis!