Browse Source

Arrenglando views de macrociclos

main
Celestino Rey 8 months ago
parent
commit
eb7785a79c
6 changed files with 116 additions and 124 deletions
  1. +2
    -2
      README.md
  2. +1
    -1
      Yamls/borraPVC.sh
  3. +1
    -1
      Yamls/pvc-entrenadores.sh
  4. +30
    -25
      src/macrociclos/forms.py
  5. +10
    -8
      src/macrociclos/serializers.py
  6. +72
    -87
      src/macrociclos/views.py

+ 2
- 2
README.md View File

@ -18,7 +18,7 @@ Tal y como está la estructura de directorios, deberia detectar automáticamente
## asignación de los volúmenes ## asignación de los volúmenes
### Si la pvc no está creada ### Si la pvc no está creada
oc set volume deployment.apps/entrenadores --add -t pvc --claim-size=300M --name=entrenadores-macrociclos-migrations --claim-name='entrenadores-macroclicos--migrations' --claim-class='lvms-vg1' --mount-path='/app/macroclicos-/migrations'
oc set volume deployment.apps/entrenadores --add -t pvc --claim-size=300M --name=entrenadores-macrociclos-migrations --claim-name='entrenadores-macrociclos--migrations' --claim-class='lvms-vg1' --mount-path='/app/macrociclos-/migrations'
oc set volume deployment.apps/entrenadores --add -t pvc --claim-size=300M --name=entrenadores-media --claim-name='entrenadores-media' --claim-class='lvms-vg1' --mount-path='/app/mediafiles' oc set volume deployment.apps/entrenadores --add -t pvc --claim-size=300M --name=entrenadores-media --claim-name='entrenadores-media' --claim-class='lvms-vg1' --mount-path='/app/mediafiles'
@ -29,7 +29,7 @@ Tal y como está la estructura de directorios, deberia detectar automáticamente
### Si la pvc ya está creada ### Si la pvc ya está creada
oc set volume deployment.apps/entrenadores --add -t pvc --name=entrenadores-macrociclos-migrations --claim-name='entrenadores-macroclicos--migrations' --mount-path='/app/macroclicos-/migrations'
oc set volume deployment.apps/entrenadores --add -t pvc --name=entrenadores-macrociclos-migrations --claim-name='entrenadores-macrociclos--migrations' --mount-path='/app/macrociclos-/migrations'
oc set volume deployment.apps/entrenadores --add -t pvc --name=entrenadores-media --claim-name='entrenadores-media' --mount-path='/app/mediafiles' oc set volume deployment.apps/entrenadores --add -t pvc --name=entrenadores-media --claim-name='entrenadores-media' --mount-path='/app/mediafiles'


+ 1
- 1
Yamls/borraPVC.sh View File

@ -1,5 +1,5 @@
oc delete pvc entrenadores-macroclicos--migrations
oc delete pvc entrenadores-macrociclos--migrations
oc delete pvc entrenadores-media oc delete pvc entrenadores-media


+ 1
- 1
Yamls/pvc-entrenadores.sh View File

@ -1,4 +1,4 @@
oc set volume deployment.apps/entrenadores --add -t pvc --claim-size=300M --name=entrenadores-macrociclos-migrations --claim-name='entrenadores-macroclicos--migrations' --claim-class='lvms-vg1' --mount-path='/app/macroclicos-/migrations'
oc set volume deployment.apps/entrenadores --add -t pvc --claim-size=300M --name=entrenadores-macrociclos-migrations --claim-name='entrenadores-macrociclos--migrations' --claim-class='lvms-vg1' --mount-path='/app/macrociclos-/migrations'
oc set volume deployment.apps/entrenadores --add -t pvc --claim-size=300M --name=entrenadores-media --claim-name='entrenadores-media' --claim-class='lvms-vg1' --mount-path='/app/mediafiles' oc set volume deployment.apps/entrenadores --add -t pvc --claim-size=300M --name=entrenadores-media --claim-name='entrenadores-media' --claim-class='lvms-vg1' --mount-path='/app/mediafiles'


+ 30
- 25
src/macrociclos/forms.py View File

@ -1,41 +1,46 @@
from django import forms from django import forms
from .models import Vehiculo, Repostaje
from .models import Entrenador, Deportista, Macrociclo
class VehiculoForm(forms.ModelForm):
class EntrenadorForm(forms.ModelForm):
class Meta: class Meta:
model = Vehiculo
fields = ['marca', 'modelo', 'matricula', 'foto']
model = Entrenador
fields = ['nombre']
marca = forms.CharField(
widget=forms.TextInput(attrs={'class': 'form-control'}))
modelo = forms.CharField(
widget=forms.TextInput(attrs={'class': 'form-control'}))
matricula = forms.CharField(
nombre = forms.CharField(
widget=forms.TextInput(attrs={'class': 'form-control'})) widget=forms.TextInput(attrs={'class': 'form-control'}))
class RepostajeForm(forms.ModelForm):
class DeportistaForm(forms.ModelForm):
class Meta: class Meta:
model = Repostaje
fields = ['fecha', 'vehiculo', 'kms', 'litros', 'importe']
exclude = ['descuento', 'precioxlitro']
model = Deportista
fields = ['nombre', 'entrenador']
fecha = forms.DateField(
widget=forms.DateInput(attrs={'type': 'date', 'class': 'form-control'}))
entrenador = forms.ModelChoiceField(
queryset=Entrenador.objects.all(),
widget=forms.Select(attrs={'class':, 'form-control'}))
vehiculo = forms.ModelChoiceField(
queryset=Vehiculo.objects.all(),
widget=forms.Select(attrs={'class': 'form-control'}))
kms = forms.DecimalField(
widget=forms.TextInput(attrs={'class': 'form-control'}))
class MacrocicloForm(forms.ModelForm):
class Meta:
model = Macrociclo
fields = ['nombre', 'tipo', 'desde', 'hasta', 'deportista', 'entrenador']
litros = forms.DecimalField(
widget=forms.NumberInput(attrs={'class': 'form-control'}))
nombre = forms.CharField(
widget=form.TextInput(attrs={'class':, 'form-control'}))
importe = forms.DecimalField(
widget=forms.NumberInput(attrs={'class': 'form-control'}))
desde = forms.DateField(
widget=forms.DateInput(attrs={'type': 'date', 'class': 'form-control'}))
hasta = forms.DateField(
widget=forms.DateInput(attrs={'type': 'date', 'class': 'form-control'}))
deportista = forms.ModelChoiceField(
queryset=Deportista.objects.all(),
widget=forms.Select(attrs={'class': 'form-control'}))
entrenador = forms.ModelChoiceField(
queryset=Entrenador.objects.all(),
widget=forms.Select(attrs={'class': 'form-control'}))
aplica_descuento = forms.BooleanField(initial=False, required=False)

+ 10
- 8
src/macrociclos/serializers.py View File

@ -1,16 +1,18 @@
from rest_framework import serializers from rest_framework import serializers
from .models import Vehiculo, Repostaje
from .models import Entrenador, Deportista, Macrociclo
class VehiculoSerializer(serializers.ModelSerializer):
class EntrenadorSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = Vehiculo
model = Entrenador
fields = '__all__' # Incluir todos los campos del modelo fields = '__all__' # Incluir todos los campos del modelo
class DeportistaSerializer(serializers.ModelSerializer):
class Meta:
model = Deportista
fields = '__all__' # Incluir todos los campos del modelo
class RepostajeSerializer(serializers.ModelSerializer):
vehiculo_matricula = serializers.CharField(source='vehiculo.matricula', read_only=True)
class MacrocicloSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = Repostaje
fields = ['id', 'fecha', 'kms', 'litros', 'descuento', 'importe', 'precioxlitro', 'kmsrecorridos', 'consumo', 'vehiculo', 'vehiculo_matricula']
model = Macrociclo
fields = '__all__' # Incluir todos los campos del modelo

+ 72
- 87
src/macrociclos/views.py View File

@ -5,88 +5,73 @@ from django.contrib.auth.decorators import login_required
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.decorators import api_view from rest_framework.decorators import api_view
from .models import Vehiculo, Repostaje
from .forms import VehiculoForm, RepostajeForm
from .serializers import VehiculoSerializer, RepostajeSerializer
from .models import Entrenador, Deportista, Macrociclo
from .forms import EntrenadorForm, DeportistaForm, MacrocicloForm
from .serializers import EntrenadorSerializer, DeportistaSerializer, MacrocicloSerializer
@login_required @login_required
def principal(request): def principal(request):
vehiculos = Vehiculo.objects.all()
repostajes = Repostaje.objects.all()
entrenadores = Entrenador.objects.all()
deportistas = Deportista.objects.all()
return render(request, 'repostajes/index.html', {'vehiculos': vehiculos, 'repostajes': repostajes})
return render(request, 'macrociclos/index.html', {'entrenadores': entrenadores, 'deportistas': deportistas})
# Vistas para los vehiculos
# Vistas para los entrenadores
@login_required @login_required
def lista_vehiculos(request):
vehiculos = Vehiculo.objects.all()
return render(request, 'repostajes/lista_vehiculos.html', {'vehiculos': vehiculos})
def lista_entrenadores(request):
entrenadores = Entrenador.objects.all()
return render(request, 'macrociclos/lista_entrenadores.html', {'entrenadores': entrenadores})
@login_required @login_required
def detalle_vehiculo(request, vehiculo_id):
vehiculo = get_object_or_404(Vehiculo, pk=vehiculo_id)
repostajes = Repostaje.objects.filter(vehiculo=vehiculo_id)
return render(request, 'repostajes/detalle_vehiculo.html', {'vehiculo': vehiculo, 'repostajes': repostajes})
@login_required
def nuevo_vehiculo(request):
def nuevo_entrenador(request):
if request.method == 'POST': if request.method == 'POST':
form = VehiculoForm(request.POST, request.FILES)
form = EntrenadorForm(request.POST, request.FILES)
if form.is_valid(): if form.is_valid():
form.save() form.save()
return redirect('repostajes:lista_vehiculos')
return redirect('macrociclos:lista_entrenadores')
else: else:
form = VehiculoForm()
return render(request, 'repostajes/form_vehiculo.html', {'form': form})
form = EntrenadorForm()
return render(request, 'macrociclos/form_entrenador.html', {'form': form})
@login_required @login_required
def editar_vehiculo(request, vehiculo_id):
vehiculo = get_object_or_404(Vehiculo, pk=vehiculo_id)
def editar_entrenador(request, entrenador_id):
entrenador = get_object_or_404(Entrenador, pk=entrenador_id)
if request.method == 'POST': if request.method == 'POST':
form = VehiculoForm(request.POST, request.FILES, instance=vehiculo)
form = EntrenadorForm(request.POST, request.FILES, instance=entrenador)
if form.is_valid(): if form.is_valid():
form.save() form.save()
return redirect('repostajes:lista_vehiculos')
return redirect('macrociclos:lista_entrenadores')
else: else:
form = VehiculoForm(instance=vehiculo)
return render(request, 'repostajes/form_vehiculo.html', {'form': form})
@login_required
def eliminar_vehiculo(request, vehiculo_id):
vehiculo = get_object_or_404(Vehiculo, pk=vehiculo_id)
vehiculo.delete()
return redirect('repostajes:lista_vehiculos')
form = EntrenadorForm(instance=entrenador)
return render(request, 'macrociclos/form_entrenador.html', {'form': form})
# Vistas para los repostajes
@login_required @login_required
def lista_repostajes(request):
repostajes = Repostaje.objects.all()
return render(request, 'repostajes/lista_repostajes.html', {'repostajes': repostajes})
def eliminar_entrenador(request, entrenador_id):
entrenador = get_object_or_404(Entrenador, pk=entrenador_id)
entrenador.delete()
return redirect('macrociclos:lista_entrenadores')
# Vistas para los deportistas
@login_required @login_required
def detalle_repostaje(request, repostaje_id):
repostaje = get_object_or_404(Repostaje, pk=repostaje_id)
return render(request, 'repostajes/detalle_repostaje.html', {'repostaje': repostaje})
def lista_deportistas(request):
deportistas = Deportista.objects.all()
return render(request, 'macrociclos/lista_deportistas.html', {'deportistas': deportistas})
@login_required @login_required
def nuevo_repostaje(request):
def nuevo_entrenador(request):
vehiculos = Vehiculo.objects.all() # vamos a ver si hay vehículos dados de alta
entrenadores = Entrenador.objects.all() # vamos a ver si hay vehículos dados de alta
if vehiculos:
if entrenadores:
if request.method == 'POST': if request.method == 'POST':
form = RepostajeForm(request.POST, request.FILES)
form = DeportistaForm(request.POST, request.FILES)
if form.is_valid(): if form.is_valid():
instancia = form.save(commit=False) instancia = form.save(commit=False)
@ -104,13 +89,13 @@ def nuevo_repostaje(request):
else: else:
instancia.precioxlitro = 0 instancia.precioxlitro = 0
# lee todos los repostajes del vehículo
# repostajes = Repostajes.query.filter_by(vehiculo_id=vehiculo_id).all()
# lee todos los deportistas del vehículo
# deportistas = Deportistas.query.filter_by(entrenador_id=entrenador_id).all()
if Repostaje.objects.filter(vehiculo_id=instancia.vehiculo):
repostajes = Repostaje.objects.filter(vehiculo_id=instancia.vehiculo).order_by('-fecha')[0]
if Deportista.objects.filter(entrenador_id=instancia.entrenador):
deportistas = Deportista.objects.filter(entrenador_id=instancia.entrenador).order_by('-fecha')[0]
instancia.kmsrecorridos = instancia.kms - repostajes.kms
instancia.kmsrecorridos = instancia.kms - deportistas.kms
if instancia.kmsrecorridos > 0: if instancia.kmsrecorridos > 0:
instancia.consumo = round(instancia.litros * 100 / instancia.kmsrecorridos, 2) instancia.consumo = round(instancia.litros * 100 / instancia.kmsrecorridos, 2)
@ -120,68 +105,68 @@ def nuevo_repostaje(request):
instancia.save() instancia.save()
return redirect('repostajes:lista_repostajes')
return redirect('macrociclos:lista_deportistas')
else: else:
form = RepostajeForm()
return render(request, 'repostajes/form_repostaje.html', {'form': form})
form = DeportistaForm()
return render(request, 'macrociclos/form_entrenador.html', {'form': form})
else: else:
return render(request, 'repostajes/index.html')
return render(request, 'macrociclos/index.html')
@login_required @login_required
def editar_repostaje(request, repostaje_id):
repostaje = get_object_or_404(Repostaje, pk=repostaje_id)
def editar_entrenador(request, entrenador_id):
entrenador = get_object_or_404(Deportista, pk=entrenador_id)
if request.method == 'POST': if request.method == 'POST':
form = RepostajeForm(request.POST, request.FILES, instance=repostaje)
form = DeportistaForm(request.POST, request.FILES, instance=entrenador)
if form.is_valid(): if form.is_valid():
form.save() form.save()
return redirect('repostajes:lista_repostajes')
return redirect('macrociclos:lista_deportistas')
else: else:
form = RepostajeForm(instance=repostaje)
return render(request, 'repostajes/form_repostaje.html', {'form': form})
form = DeportistaForm(instance=entrenador)
return render(request, 'macrociclos/form_entrenador.html', {'form': form})
@login_required @login_required
def eliminar_repostaje(request, repostaje_id):
repostaje = Repostaje.objects.get(pk=repostaje_id)
repostaje.delete()
return redirect('repostajes:lista_repostajes')
def eliminar_entrenador(request, entrenador_id):
entrenador = Deportista.objects.get(pk=entrenador_id)
entrenador.delete()
return redirect('macrociclos:lista_deportistas')
@api_view(['GET']) @api_view(['GET'])
def api_lista_vehiculos(request):
"""Devuelve la lista de todos los vehiculos."""
vehiculos = Vehiculo.objects.all()
serializer = VehiculoSerializer(vehiculos, many=True)
def api_lista_entrenadores(request):
"""Devuelve la lista de todos los entrenadores."""
entrenadores = Entrenador.objects.all()
serializer = EntrenadorSerializer(entrenadores, many=True)
return Response(serializer.data) return Response(serializer.data)
@api_view(['GET']) @api_view(['GET'])
def api_detalle_vehiculo(request, vehiculo_id):
"""Devuelve los detalles de un vehiculo específico."""
def api_detalle_entrenador(request, entrenador_id):
"""Devuelve los detalles de un entrenador específico."""
try: try:
vehiculo = Vehiculo.objects.get(id=vehiculo_id)
serializer = VehiculoSerializer(vehiculo)
entrenador = Entrenador.objects.get(id=entrenador_id)
serializer = EntrenadorSerializer(entrenador)
return Response(serializer.data) return Response(serializer.data)
except Vehiculo.DoesNotExist:
return Response({'error': 'Vehiculo no encontrado'}, status=404)
except Entrenador.DoesNotExist:
return Response({'error': 'Entrenador no encontrado'}, status=404)
@api_view(['GET']) @api_view(['GET'])
def api_lista_repostajes(request):
"""Devuelve la lista de todos los repostajes."""
repostajes = Repostaje.objects.all()
serializer = RepostajeSerializer(repostajes, many=True)
def api_lista_deportistas(request):
"""Devuelve la lista de todos los deportistas."""
deportistas = Deportista.objects.all()
serializer = DeportistaSerializer(deportistas, many=True)
return Response(serializer.data) return Response(serializer.data)
@api_view(['GET']) @api_view(['GET'])
def api_detalle_repostaje(request, repostaje_id):
"""Devuelve los detalles de un repostaje específico."""
def api_detalle_entrenador(request, entrenador_id):
"""Devuelve los detalles de un entrenador específico."""
try: try:
repostaje = Repostaje.objects.get(id=repostaje_id)
serializer = RepostajeSerializer(repostaje)
entrenador = Deportista.objects.get(id=entrenador_id)
serializer = DeportistaSerializer(entrenador)
return Response(serializer.data) return Response(serializer.data)
except Repostaje.DoesNotExist:
return Response({'error': 'Repostaje no encontrado'}, status=404)
except Deportista.DoesNotExist:
return Response({'error': 'Deportista no encontrado'}, status=404)

Loading…
Cancel
Save