Commit 0d878e48 authored by Javier Gálvez's avatar Javier Gálvez

Initial commit

parents
Pipeline #25 failed with stages
data
\ No newline at end of file
"""
Este script en python permite crear una base de datos para la gestión de una empresa
en la que los datos son generados aleatoriamente.
Las tablas que componen esta base de datos son:
- clientes
- comerciales
- fabricantes
- facturas
- gastos
- modelos (o productos vendidos)
Así mismo es posible definir ciertos parámetros como:
- el número máximo en cada una de las tablas anteriores,
- las categorías a las que perteneces los productos
- el salario mínimo y máximo de los comerciales
- el importe mínimo y máximo de las facturas
- el incremento máximo que se le añadira a los gastos de personal
Para poder ejecutar este script es necesario antes instalar el paquete `pip`
pip3 install faker
"""
import random
import csv
import datetime
import os
from faker import Faker
from faker.providers import internet, address, person, company, date_time
from dateutil.relativedelta import relativedelta
# Definición de variables ######################################################
maxClientes = 2000 #Número máximo de clientes
maxComerciales = 10 #Número máximo de comerciales
maxFabricantes = 33 #Número máximo de fabricantes
maxModelos = 299 #Número máximo de modelos
maxFacturas = 1000 #Número máximo de facturas
categorias = ["bronce", "plata", "oro", "platino"]
sexo = ["hombre", "mujer"]
parametrosComercial = {
"minSalario": 1000,
"maxSalario": 2000,
"minObjetivo": 10,
"maxObjetivo": 20
}
parametrosFactura = {
"minImporte": 500,
"maxImporte": 5000
}
parametrosGastos = {
"incrementoSalario": 30 #Porcentaje aleatorio que será sumado a los gastos de salario
}
rutaTemporal = "./data"
ficheroClientes = "clientes.csv"
ficheroComerciales = "comerciales.csv"
ficheroFabricantes = "fabricantes.csv"
ficheroModelos = "modelos.csv"
ficheroFacturas = "facturas.csv"
ficheroGastos = "gastos.csv"
if not os.path.exists(rutaTemporal):
os.makedirs(rutaTemporal)
# Definición de funciones ######################################################
def generarPersona():
""" Genera un objeto persona """
genero = random.choice(sexo)
if(genero == "hombre"):
name = fake.name_male()
else:
name = fake.name_female()
persona = {
"nombre": name,
"genero": genero,
"email": fake.email(),
"ciudad": fake.city()
}
return persona
def guardarCSV(objeto, fichero):
""" Guarda el objeto pasado en un fichero CSV """
keys = objeto[0].keys()
with open(rutaTemporal + "/" +fichero, 'w') as output_file:
dict_writer = csv.DictWriter(output_file, keys, delimiter=";")
dict_writer.writeheader()
dict_writer.writerows(objeto)
def generarClientes():
""" Genera un listado de objetos clientes """
clientes = []
for i in range(maxClientes):
persona = generarPersona()
cliente = {
"idcliente": i+1,
"nombre": persona["nombre"],
"email": persona["email"],
"categoria": random.choice(categorias)
}
clientes.append(cliente)
return clientes
def generarComerciales():
""" Genera un listado de objetos comerciales """
comerciales = []
for i in range(maxComerciales):
persona = generarPersona()
salario = random.randrange(parametrosComercial["minSalario"], parametrosComercial["maxSalario"], 50)
objetivo = random.randrange(parametrosComercial["minObjetivo"], parametrosComercial["maxObjetivo"], 1)
realizado = random.randrange(0, objetivo, 1)
comercial = {
"idcomercial": i+1,
"nombre": persona["nombre"],
"area": persona["ciudad"],
"email": persona["email"],
"genero": persona["genero"],
"salario": salario,
"objetivo": objetivo,
"realizado": realizado
}
#print(comercial)
comerciales.append(comercial)
return comerciales
def generarFabricantes():
""" Genera un listado de objetos fabricantes """
fabricantes = []
for i in range(maxFabricantes):
fabricante = {
"idfabricante": i+1,
"nombre": fake.company(),
"anio": fake.year()
}
fabricantes.append(fabricante)
return fabricantes
def generarFacturas():
""" Genera un listado de objetos facturas """
facturas = []
for i in range(maxFacturas):
factura = {
"idfactura": i+1,
"idcomercial": random.randrange(0, maxComerciales, 1),
"idcliente": random.randrange(0, maxClientes, 1),
"idmodelo": random.randrange(0, maxModelos, 1),
"importe": random.randrange(parametrosFactura["minImporte"], parametrosFactura["maxImporte"], 50),
"categoria": random.choice(categorias),
"fecha": fake.date_between(start_date="-1y", end_date="today")
}
facturas.append(factura)
return facturas
def generarModelos():
""" Genera un listado de objetos modelos """
modelos = []
for i in range(maxModelos):
modelo = {
"idmodelo": i+1,
"idfabricante": random.randrange(0, maxFabricantes, 1),
"modelo-ean": fake.ean()
}
modelos.append(modelo)
return modelos
def generarGastos(comerciales):
""" Genera un listado de objetos Gastos """
# Calculamos el coste de los comerciales
gastoComerciales = 0
for comercial in comerciales:
gastoComerciales = gastoComerciales + comercial["salario"]
#print(gastoComerciales)
contador = 1
gastos = []
# obtenemos los meses con los que tenemos que calcular los gastos
today = datetime.datetime.now()
fecha = datetime.datetime.now() - datetime.timedelta(days=1*365)
while fecha <= today:
#print(fecha)
fecha += relativedelta(months=1)
incrementoAleatorio = gastoComerciales * random.randrange(0, parametrosGastos["incrementoSalario"], 5) / 100
gasto = {
"id": contador,
"costepersonal": gastoComerciales + incrementoAleatorio,
"fecha": fecha.strftime("%d/%m/%y")
}
gastos.append(gasto)
contador += 1
return gastos
# Inicialización del motor de simulación Facker ################################
print("Generador de bases de datos de empresas")
fake = Faker("es_ES")
#fake.add_provider(internet)
# Generamos elementos
print("Generando clientes ...", end="")
clientes = generarClientes()
guardarCSV(clientes, ficheroClientes)
print("... hecho")
print("Generando comerciales ...", end="")
comerciales = generarComerciales()
guardarCSV(comerciales, ficheroComerciales)
print("... hecho")
print("Generando fabricantes ...", end="")
fabricantes = generarFabricantes()
guardarCSV(fabricantes, ficheroFabricantes)
print("... hecho")
print("Generando modelos ...", end="")
modelos = generarModelos()
guardarCSV(modelos, ficheroModelos)
print("... hecho")
print("Generando facturas ...", end="")
facturas = generarFacturas()
guardarCSV(facturas, ficheroFacturas)
print("... hecho")
print("Generando gastos ...", end="")
gastos = generarGastos(comerciales)
guardarCSV(gastos, ficheroGastos)
print("... hecho")
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment