App gestion y pruebas añadidas a la base de datos

This commit is contained in:
adrigongv23 2026-02-19 11:38:01 +01:00
parent 0e0c8d7d1b
commit ec44ae2e46
26 changed files with 209 additions and 3 deletions

View file

@ -11,7 +11,7 @@ class Documento(models.Model):
('suspension', 'Suspensión'),
('motor', 'Motor/Powertrain'),
('electronica', 'Electrónica'),
('general', 'General / Normativa'),
('normativa', 'General / Normativa'),
('software', 'Software')
)

View file

@ -35,6 +35,8 @@ INSTALLED_APPS = [
'users',
'temporadas',
'documentos',
'gestion',
'pruebas',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',

Binary file not shown.

View file

@ -1,3 +1,14 @@
from django.contrib import admin
from .models import Factura, Patrocinador
# Register your models here.
@admin.register(Factura)
class FacturaAdmin(admin.ModelAdmin):
list_display = ('nombre', 'empresa', 'categoria', 'temporada', 'subido_por')
list_filter = ('categoria', 'temporada')
search_fields = ('nombre', 'empresa')
@admin.register(Patrocinador)
class PatrocinadorAdmin(admin.ModelAdmin):
list_display = ('empresa', 'tipo_empresa', 'tipo_patrocinio', 'estado', 'temporada')
list_filter = ('estado', 'tipo_empresa', 'tipo_patrocinio', 'temporada')
search_fields = ('empresa', 'email_contacto')

View file

@ -0,0 +1,45 @@
# Generated by Django 6.0.2 on 2026-02-19 10:14
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
('temporadas', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='Factura',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('nombre', models.CharField(max_length=100, verbose_name='Concepto de la factura')),
('empresa', models.CharField(max_length=100, verbose_name='Empresa / Proveedor')),
('categoria', models.CharField(choices=[('aerodinamica', 'Aerodinámica'), ('chasis', 'Chasis'), ('business', 'Business & Operations'), ('epowertrain', 'E-Powertrain'), ('electronica', 'Electrónica'), ('sdf', 'SDF'), ('motor_transmision', 'Motor & Transmisión'), ('software', 'Software'), ('general', 'General')], max_length=30)),
('descripcion', models.TextField(blank=True, null=True, verbose_name='Breve descripción')),
('archivo', models.FileField(upload_to='facturas/', verbose_name='Foto o PDF de la factura')),
('subido_por', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='Usuario que la sube')),
('temporada', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='temporadas.temporada')),
],
),
migrations.CreateModel(
name='Patrocinador',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('empresa', models.CharField(max_length=100, verbose_name='Nombre de la Empresa')),
('email_contacto', models.EmailField(max_length=254, verbose_name='Correo de contacto')),
('tipo_empresa', models.CharField(max_length=30, verbose_name='Tipo de la Empresa')),
('tipo_patrocinio', models.CharField(choices=[('economico', 'Económico'), ('piezas/materiales', 'Piezas/Materiales'), ('mixto', 'Mixto (Dinero y Piezas)')], max_length=30)),
('detalle_piezas', models.TextField(blank=True, help_text='Detallar qué se ofrece si es en especies', null=True)),
('estado', models.CharField(choices=[('en contacto', 'En contacto'), ('aceptado', 'Aceptado / Activo'), ('denegado', 'Denegado')], default='contacto', max_length=20)),
('contacto_equipo', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='Miembro al cargo')),
('temporada', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='temporadas.temporada')),
],
),
]

View file

@ -1,3 +1,63 @@
from django.db import models
from users.models import CustomUser
from temporadas.models import Temporada
# Create your models here.
class Factura(models.Model):
CATEGORIAS = (
('aerodinamica', 'Aerodinámica'),
('chasis', 'Chasis'),
('business', 'Business & Operations'),
('epowertrain', 'E-Powertrain'),
('electronica', 'Electrónica'),
('sdf', 'SDF'),
('motor_transmision', 'Motor & Transmisión'),
('software', 'Software'),
('general', 'General'),
)
nombre = models.CharField(max_length=100, verbose_name="Concepto de la factura")
empresa = models.CharField(max_length=100, verbose_name="Empresa / Proveedor")
categoria = models.CharField(max_length=30, choices=CATEGORIAS)
descripcion = models.TextField(blank=True, null=True, verbose_name="Breve descripción")
# Puede ser foto (jpg/png) o pdf
archivo = models.FileField(upload_to='facturas/', verbose_name="Foto o PDF de la factura")
# Relaciones
subido_por = models.ForeignKey(CustomUser, on_delete=models.SET_NULL, null=True, verbose_name="Usuario que la sube")
temporada = models.ForeignKey(Temporada, on_delete=models.CASCADE)
def __str__(self):
return f"{self.nombre} - {self.empresa}"
class Patrocinador(models.Model):
TIPO_PATROCINIO = (
('economico', 'Económico'),
('piezas/materiales', 'Piezas/Materiales'),
('mixto', 'Mixto (Dinero y Piezas)'),
)
ESTADOS = (
('en contacto', 'En contacto'),
('aceptado', 'Aceptado / Activo'),
('denegado', 'Denegado'),
)
empresa = models.CharField(max_length=100, verbose_name="Nombre de la Empresa")
email_contacto = models.EmailField(verbose_name="Correo de contacto")
tipo_empresa = models.CharField(max_length=30, verbose_name="Tipo de la Empresa")
tipo_patrocinio = models.CharField(max_length=30, choices=TIPO_PATROCINIO)
# Solo se rellena si el patrocinio es de piezas
detalle_piezas = models.TextField(blank=True, null=True, help_text="Detallar qué se ofrece si es en especies")
estado = models.CharField(max_length=20, choices=ESTADOS, default='contacto')
# Relaciones
contacto_equipo = models.ForeignKey(CustomUser, on_delete=models.SET_NULL, null=True, verbose_name="Miembro al cargo")
temporada = models.ForeignKey(Temporada, on_delete=models.CASCADE)
def __str__(self):
return self.empresa

View file

Binary file not shown.

View file

@ -0,0 +1,8 @@
from django.contrib import admin
from .models import TestGeneral
@admin.register(TestGeneral)
class TestGeneralAdmin(admin.ModelAdmin):
list_display = ('nombre', 'fecha_inicio', 'fecha_fin', 'categoria', 'temporada')
list_filter = ('categoria', 'temporada')
search_fields = ('nombre', 'descripcion', 'resultados')

View file

@ -0,0 +1,5 @@
from django.apps import AppConfig
class PruebasConfig(AppConfig):
name = 'pruebas'

View file

@ -0,0 +1,34 @@
# Generated by Django 6.0.2 on 2026-02-19 10:14
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
('temporadas', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='TestGeneral',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('nombre', models.CharField(max_length=150, verbose_name='Nombre del Test')),
('descripcion', models.TextField(verbose_name='Objetivo / Descripción del test')),
('fecha_inicio', models.DateField()),
('fecha_fin', models.DateField()),
('categoria', models.CharField(choices=[('aerodinamica', 'Aerodinámica'), ('chasis', 'Chasis'), ('business', 'Business & Operations'), ('epowertrain', 'E-Powertrain'), ('electronica', 'Electrónica'), ('sdf', 'SDF'), ('motor_transmision', 'Motor & Transmisión'), ('general', 'General')], default='general', max_length=30)),
('resultados', models.TextField(blank=True, null=True, verbose_name='Conclusiones y Resultados')),
('temporada', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='temporadas.temporada')),
],
options={
'verbose_name': 'Test General',
'verbose_name_plural': 'Tests Generales',
'ordering': ['-fecha_inicio'],
},
),
]

View file

@ -0,0 +1,35 @@
from django.db import models
from temporadas.models import Temporada
class TestGeneral(models.Model):
CATEGORIAS_TEST = (
('aerodinamica', 'Aerodinámica'),
('chasis', 'Chasis'),
('business', 'Business & Operations'),
('epowertrain', 'E-Powertrain'),
('electronica', 'Electrónica'),
('sdf', 'SDF'),
('motor_transmision', 'Motor & Transmisión'),
('general', 'General'),
)
nombre = models.CharField(max_length=150, verbose_name="Nombre del Test")
descripcion = models.TextField(verbose_name="Objetivo / Descripción del test")
fecha_inicio = models.DateField()
fecha_fin = models.DateField()
categoria = models.CharField(max_length=30, choices=CATEGORIAS_TEST, default='general')
resultados = models.TextField(blank=True, null=True, verbose_name="Conclusiones y Resultados")
# Relación
temporada = models.ForeignKey(Temporada, on_delete=models.CASCADE)
class Meta:
verbose_name = "Test General"
verbose_name_plural = "Tests Generales"
ordering = ['-fecha_inicio']
def __str__(self):
return f"{self.nombre} ({self.fecha_inicio})"

View file

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

View file

@ -0,0 +1,3 @@
from django.shortcuts import render
# Create your views here.