Se encuentra usted aquí

Tutorial 1: Control de Inventario en Drupal

Imagen de Nicolás Moncada Henríquez
En este tutorial se desarrollará un control de inventario simple, utilizando distintos módulos contribuidos que se pueden descargar desde aquí. La versión de Drupal será el 6, aunque los pasos son muy parecidos para ser aplicados en Drupal 7.

En este tutorial se desarrollará un control de inventario simple, utilizando distintos módulos contribuidos que se pueden descargar desde aquí. La versión de Drupal será el 6, aunque los pasos son muy parecidos para ser aplicados en Drupal 7.

Antes de desarrollar el sistema vamos a abordar el problema a solucionar de la siguiente forma: Existe un inventario (solo uno por esta vez) en el cual se necesita tener controlado el stock de unos productos, para ello se debe definir una cantidad mínima que se quiere tener en inventario, de tal forma que si la cantidad real es igual o inferior al indicador anterior, entonces el sistema dará aviso.

Para el desarrollo del tutorial utilizaremos los siguientes módulos contribuidos

Tipo de Contenido y Campos

Creamos el tipo contenido "Producto" y le adicionamos los siguientes campos:

  • Cantidad: Se refiere a la cantidad real que posee el inventario y es numérico.
  • Cantidad Mínima: Como su nombre lo indica, cuanto es lo mínimo que nos gustaría tener en inventario dicho producto, también es numérico.
  • Stock Crítico: Es un indicador, es "Si" cuando Cantidad es menor o igual que Cantidad Mínima, esto para no sobre cargar la base de datos con sustracciones cada vez que queramos desplegar una vista con stock crítico. Este valor podría ser numérico (0 o 1) pero para esta ocación lo haremos texto para escribir "Si" o "No".

Adicionalmente pueden agregar precio, peso, descripción, imagenes, etc...

El campo Stock Crítico es de uso interno, de hecho debería ser un campo oculto ya que Rules se encargará de definir su valor, para ello podrían hacerlo de dos formas:

  • Habilitando el Módulo Content Permissions (viene con el CCK) y en los permisos asignar los campos que pueden ser modificados por los roles
  • Creando un pequeño módulo y en el implementar el hook_form_alter (mi_modulo_form_alter), aquí podemos hacer cualquier cosa con el formulario.

Views

Con views crearemos dos vistas, una con todos los productos cuyo indicador Stock Crítico es "No" y otro con "Si", de esta forma tenemos separado los productos que estan o no con stock crítico.

configurando views control de inventario

Rules

Aquí es donde se define el cuando colocar el producto en stock crítico y cuando no, para eso debemos identificar todos los tipos de eventos, condiciones y acciones que serán aplicados en nuestro problema.

Evento

Nos referimos a un evento cuando creamos, actualizamos o eliminamos un contenido como también cuando se hacen comentarios, tambien existen eventos de sistemas, etc. Para esta oportunidad nos interesa cuando se va a guardar un contenido (producto para nosotros), independiente si se va a crear o actualizar ya que en ambos casos se guarda.

Condiciones

Las condiciones son las siguientes:

  • c.a) Si Cantidad <= Cantidad Mínima
  • c.b) Si Cantidad > Cantidad Mínima

Acción

Para cada condición descrita anteriormente viene consigo una acción, las cuales son

  • Para "c.a" la acción es establecer al atributo Stock Crítico el valor "Si"
  • Para "c.b" lo contrario

Así, teniendo bien definido esto, se procede a configurarlo en Rules, para ello vamos a crear un set de regla en Rule sets y despues crear una regla en Triggered rules donde escogemos el evento que disparará nuestro set de regla, entonces:

  1. Vamos a administrador -- Rules -- Rule sets y damos en agregar nuevo set de regla. En Label definan un nombre representativo para nuestro problema, aquí vamos a definir el indicador del stock crítico del producto, entonces podría ser "Definir Indicador Stock Crítico"; Categoría es opcional y en Argumentos hacemos lo siguiente:
    • En Data Type seleccionar Contenido
    • En Label podrían cambiar "Contenido" por "Producto"
    • En Machine readable name colocar "producto"

    Ya dando en guardar el sistema nos mostrará la lista de set de reglas. Ingresamos al nuevo set de regla que habremos creado y nos mostrará la configuración que le habíamos dado y abajo aparece Active rules e Inactive rules, aquí tenemos que agregar dos reglas para el set, una para la condición "c.a" y otra para la condición "c.b", entonces dando en Agregar Regla:

    1. Regla 1:En Label ponemos "Cuando Cantidad es Mayor", en Rul Sets debería estar seleccionado "Definir Indicador Stock Crítico" o el nombre que le habían puesto al set de regla y dejamos el checkbox seleccionado. Una vez guardado debemos establecer la condición (+ Add a condition), en Select the condition to add seleccionamos Numeric Comparison y damos siguiente, si quieren dejen Label como esta y dejamos deseleccionado el checkbox Negate, en Number 1 escribimos (Aquí nos ayuda el módulo Token) el token del campo "Cantidad", por ejemplo [producto:field_cantidad-raw], en Operación elegir Mayor que y en Number 2 escribir el token del campo "Cantidad Mínima", por ejemplo [producto:field_cantidad_minima_-raw]

      Ahora debemos asignar la acción si se cumple esta condición, entonces en DO agregamos una nueva acción, escogemos Populate a Field y damos siguiente, en Contenido escogemos "Producto" y en Field el campo "Stock Crítico" y damos en siguiente, ahora toca definir el valor que tendrá dicho campo, dado que la condición era "si la cantidad es mayor que el mínimo entonces no hay stock crítico", por lo tanto colocamos "No". También pueden agregar otras acciones como emitir un mensaje de que el producto paso a stock normal, etc. Al final tendrían que tener algo así:
    2. Regla 2: Repetimos los mismo pasos que el anterior, salvo que ya no es "Cuando Cantidad es Mayor" si no que "Cuando Cantidad no es Mayor", en condiciones también seleccionamos el Numeric Comparison con los mismos tokens escritos, con el Operación seleccionando Mayor que, pero activamos el checkbox Negative, así se esta diciendo que "No es Mayor que". En acción volvemos a hacer lo mismo pero en vez de colocar "No" se coloca "Si".

    Ya con esto tenemos nuestro Set de Regla terminado, ahora debemos proceder a crear el disparador

  2. Vamos a administrador -- Rules -- Triggered rules y damos en agregar nueva regla, le ponemos en Label el nombre más adecuado, por ejemplo "Definir Stock al guardar un producto" ya que nuestro evento será Content is going to be saved, le dan la categoría que quieran y dejan seleccionado el checkbox, finalmente dan en Guardar. Entonces, siguiendo con ON event Content is going to be saved, tenemos que especificar el tipo de contenido agreando una condición, en Select the condition to add seleccionamos Content has type y damos siguiente, dejamos por defecto todo salvo en tipos de contenidos, donde seleccionamos "Producto" y damos en Guardar. Ya con esto solo basta con identificar la acción, y en la lista desplegable tenemos que buscar nuestro set de regla que la llamamos "Definir Indicador Stock Crítico" y damos en siguiente y guardamos.

Ya con todo esto configurado podrían hacer pruebas y ver como el valor "Stock Crítico" varía entre "Si" y "No" cambiando el valor de "Cantidad" o "Cantidad Mínima"

Comentarios

amigo buenas tardes.
queria saber como se hace un inventario para un video club pero descontando cantidad de peliculas (cuando un cliente la compra o la alquila) y agregando peliculas (proveedor).
que cuando el usuario pregunte por una pelicula el administrador del sitio va y busca la pelicula para ver si hay o no en el stock y si la hay agregarla a ese usuario y descontarla del inventario de forma automatica, y si el usuario la trae al dia de nuevo k se sume al inventario, caso contrario si la llegase a comprar automaticamente se descontaria. muchas gracias por este tutorial me quedo faltando algo hacer para k me muestre los resultados asi como tu. de resto funciona bn pero kisiera k me kedara como a ti.

Este aporte es invaluable para los que estamos interiorizando en desarrollar con Drupal , por favor , debes seguir subiendo cosas así , intentare aplicar esto para inventar un sistemita de lista de precios, lo que me gustaria saber si es posible conectar con un lector de cçodigo de barras , lo investigare , reitero mis gracias por tu publicacion.