Inventory Py: Aplicacion en Python para un Inventario Sencillo con SQLite

Inventory Py es una sencilla aplicacion en Python para manejar un inventario sencillo desde la terminal usando el motor de base de datos SQLite.

Inventory Py es una aplicacion desarrollada puramente para la consola o terminal, con un menu sencillo podemos ver las diferentes opciones.

Dentro de las opciones estan.

  1. Ver inventario
  2. Agregar a Inventario
  3. Disminuir a Inventario
  4. Ver Productos
  5. Agregar Producto
  6. Eliminar Producto
  7. Salir

Desear saber o crear tu propio mira el articulo CRUD mira CRUD con Python y SQLite bien Facil. Y entenderas lo necesario!

Las diferentes opciones despliegan datos o solicitan datos de acuerdo a lo que muestra cada opcion.

En el siguiente video se muestra el funcionamiento de el programa Inventory Py.

Espero les guste el video y se suscriban a mi canal.

Codigo

El codigo esta hecho en Python y estamos usando como base de datos el Motor SQLite.

El siguiente es el codigo fuente para hacer la instalacion.

Si es por primera vez se ejecuta el archivo install.py asi como esta, si se quiere eliminar datos y volver a empezar, entonces debes quitar los comentarios de las opciones drop table product y drop table operation.

# Powered by Evilnapsis
import sqlite3


con  = sqlite3.connect("inventory.db")
cur = con.cursor()

#cur.execute("drop table product")
cur.execute("create table if not exists product (id integer not null primary key, name varchar(255), price_in double, price_out double, created_at datetime)")
print("[+] Tabla Product")

#operation_type 1: entrada ... 2: salida
#cur.execute("drop table operation")
cur.execute("create table if not exists operation (id integer not null primary key, product_id int, operation_type int, q int, created_at datetime)")
print("[+] Tabla Operation")


El siguiente codigo es el codigo ya de la aplicacion al cual llame main.py esta conformado por 7 funciones.

import sqlite3

# Funcion para mostrar el menu
# esta funcion se muestra todo el tiempo
def menu():
	i = 0
	while i!=8:
		print("\n\n-----* INVENTORY PY *-------")
		print("-----    MENU    -------")
		print("1. Ver inventario")
		print("2. Agregar a Inventario")
		print("3. Disminuir Inventario")
		print("4. Ver Productos")
		print("5. Agregar Producto")
		print("6. Eliminar Producto ")
		print("7. Salir")
		i = input("\nOpcion > ")
		i = int(i)
		print("Opcion seleccionada:  ", i)
		print("------------------------------")
		if i == 1:
			ver_inventario()
		elif i==2:
			agregar_inventario()
		elif i==3:
			disminuir_inventario()
		elif i==4:
			ver_productos()
		elif i==5:
			agregar_producto()
		elif i==6:
			eliminar_producto()
		elif i==7:
			print("-- [ Powered by Evilnapsis] --")
			exit()
# Funcion para ver el inventario
def ver_inventario():
	print("\n\n---- VER INVENTARIO -----")
	con = sqlite3.connect("inventory.db")
	cursor = con.cursor()
	cursor2 = con.cursor()
	rows = cursor.execute("select * from product")
	print("ID  |  PRODUCTO | EXISTENCIAS ")
	for r in rows:
		entradas = 0
		salidas = 0
		inventario = 0
		entradas_rows = cursor2.execute("select sum(q) as sumx from operation where operation_type=? and product_id=?", (1,r[0]))
		for er in entradas_rows:
			if er[0]!=None:
				entradas = er[0]
		salidas_rows = cursor2.execute("select sum(q) as sumx from operation where operation_type=? and product_id=?", (2,r[0]))
		for sr in salidas_rows:
			if sr[0]!=None:
				salidas = sr[0]
		inventario = entradas - salidas

		print(r[0], "  |  ", r[1], " | ", inventario)

	con.commit()
	print("------------------------\n\n")
	menu() # Regresar al menu principal

# Funcion para agregar cantidades al inventario de un producto
def agregar_inventario():
	print ("\n\n----- AGREGAR INVENTARIO ----")
	id_product = input("Id del Producto > ")
	quantity = input("Cantidad a Agregar > ")
	id_product = str(id_product)
	quantity  = float(quantity)

	con = sqlite3.connect("inventory.db")
	valores = (id_product, quantity, 1)
	con.execute("insert into operation (product_id, q,operation_type) values (?,?,?)", valores)
	con.commit()
	print("[+] Agregado exitosamente!")
	print("------------------------\n\n")
	menu() # Regresar al menu Principal

# Funcion para Disminuir cantidades o existencias al inventario de un producto
def disminuir_inventario():
	print ("\n\n----- DISMINUIR INVENTARIO ----")
	id_product = input("Id del Producto > ")
	quantity = input("Cantidad a Disminuir > ")
	id_product = str(id_product)
	quantity  = float(quantity)

	con = sqlite3.connect("inventory.db")
	cursor2 = con.cursor()

	entradas = 0
	salidas = 0
	inventario = 0
	entradas_rows = cursor2.execute("select sum(q) as sumx from operation where operation_type=? and product_id=?", (1,id_product))
	for er in entradas_rows:
		if er[0]!=None:
			entradas = er[0]
	salidas_rows = cursor2.execute("select sum(q) as sumx from operation where operation_type=? and product_id=?", (2,id_product))
	for sr in salidas_rows:
		if sr[0]!=None:
			salidas = sr[0]
	inventario = entradas - salidas
	if quantity>inventario:
		print("No se puede dejar Disminuir mas de las existencias")
	else:
		valores = (id_product, quantity, 2)
		con.execute("insert into operation (product_id, q,operation_type) values (?,?,?)", valores)
		con.commit()
	print("[-] Disminuido exitosamente!")
	print("------------------------\n\n")
	menu() # Regresar al menu Principal

# Funcion para agregar un producto a la base de datos
def agregar_producto():
	print ("\n\n----- AGREGAR PRODUCTO ----")
	name = input("Nombre del Producto > ")
	price_in = input("Precio de Compra > ")
	price_out = input("Precio de Venta > ")
	name = str(name)
	price_in  = float(price_in)
	price_out = float(price_out)
	con = sqlite3.connect("inventory.db")
	valores = (name, price_in, price_out, "NOW()")
	con.execute("insert into product (name, price_in, price_out,created_at) values (?,?,?,?)", valores)
	con.commit()
	print("[+] Agregado exitosamente!")
	print("------------------------\n\n")
	menu() # Regresar al menu Principal

# Funcion para ver productos
def ver_productos():
	print("\n\n---- VER PRODUCTOS -----")
	con = sqlite3.connect("inventory.db")
	cursor = con.cursor()
	rows = cursor.execute("select * from product")
	print("ID  |  PRODUCTO | EXISTENCIAS ")
	for r in rows:
		print(r[0], "  |  ", r[1], " | ", r[2], " | ", r[3])

	con.commit()
	print("------------------------\n\n")
	menu() # Regresar al menu principal

# Funcion para eliminar productos de la BD
def eliminar_producto():
	print ("\n\n----- ELIMINAR PRODUCTO ----")
	id_product = input("Id del Producto > ")
	id_product = str(id_product)
	con = sqlite3.connect("inventory.db")
	cursor = con.cursor()
	cursor.execute("delete from operation where product_id=?", (id_product))
	cursor.execute("delete from product where id=?", (id_product))
	con.commit()
	print("[-] Eliminado exitosamente!")
	print("------------------------\n\n")
	menu() # Regresar al menu Principal

# Llamar al menu por primera vez
menu()



El formato de crear las consultas SQL permite pasar las variables como parametros, asi las consultas preparadas solo sustituyen los datos de los simbolos de interrogacion ? por las variables, correspondiente en el orden.

Todo el codigo parte de la funcion MENU que muestra las opciones y recibe un numero como opcion, despues de finalizar cada accion se regresa de nuevo a la funcion MENU.

En el video de arriba se muestra todo el funcionamiento del proyecto.

Descargar

Para descargar el proyecto puedes usar el siguiente enlace.

Link: https://www.dropbox.com/s/fkqumccln8p7p7x/inventory-py.zip

Solo tienes que descomprimir y ejecutar el script con el comando.

python3 inventario.py

Si tambien quieres llevar el control de tus tareas por hacer mira Tasks Py: Aplicacion para gestion de tareas por hacer con python y Sqlite. Asi tendras una mejor organizacion.

Leave a Reply

Your email address will not be published. Required fields are marked *

Discover more from Evilnapsis

Subscribe now to keep reading and get access to the full archive.

Continue reading