diff --git a/README.md b/README.md index 7a84824..c816fb7 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Tal y como está la estructura de directorios, deberia detectar automáticamente ## asignación de los volúmenes ### 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' @@ -29,7 +29,7 @@ Tal y como está la estructura de directorios, deberia detectar automáticamente ### 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' diff --git a/Yamls/borraPVC.sh b/Yamls/borraPVC.sh index 3eedced..53d67bd 100644 --- a/Yamls/borraPVC.sh +++ b/Yamls/borraPVC.sh @@ -1,5 +1,5 @@ -oc delete pvc entrenadores-macroclicos--migrations +oc delete pvc entrenadores-macrociclos--migrations oc delete pvc entrenadores-media diff --git a/Yamls/pvc-entrenadores.sh b/Yamls/pvc-entrenadores.sh index 40a477a..6a6fd43 100644 --- a/Yamls/pvc-entrenadores.sh +++ b/Yamls/pvc-entrenadores.sh @@ -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' diff --git a/src/macrociclos/forms.py b/src/macrociclos/forms.py index 5f14278..1a64903 100644 --- a/src/macrociclos/forms.py +++ b/src/macrociclos/forms.py @@ -1,41 +1,46 @@ 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: - 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'})) -class RepostajeForm(forms.ModelForm): +class DeportistaForm(forms.ModelForm): 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) diff --git a/src/macrociclos/serializers.py b/src/macrociclos/serializers.py index f3583e4..946f5ab 100644 --- a/src/macrociclos/serializers.py +++ b/src/macrociclos/serializers.py @@ -1,16 +1,18 @@ 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: - model = Vehiculo + model = Entrenador 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: - 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 diff --git a/src/macrociclos/views.py b/src/macrociclos/views.py index bb82618..10303a2 100644 --- a/src/macrociclos/views.py +++ b/src/macrociclos/views.py @@ -5,88 +5,73 @@ from django.contrib.auth.decorators import login_required from rest_framework.response import Response 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 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 -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 -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': - form = VehiculoForm(request.POST, request.FILES) + form = EntrenadorForm(request.POST, request.FILES) if form.is_valid(): form.save() - return redirect('repostajes:lista_vehiculos') + return redirect('macrociclos:lista_entrenadores') 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 -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': - form = VehiculoForm(request.POST, request.FILES, instance=vehiculo) + form = EntrenadorForm(request.POST, request.FILES, instance=entrenador) if form.is_valid(): form.save() - return redirect('repostajes:lista_vehiculos') + return redirect('macrociclos:lista_entrenadores') 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 -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 -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 -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': - form = RepostajeForm(request.POST, request.FILES) + form = DeportistaForm(request.POST, request.FILES) if form.is_valid(): instancia = form.save(commit=False) @@ -104,13 +89,13 @@ def nuevo_repostaje(request): else: 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: instancia.consumo = round(instancia.litros * 100 / instancia.kmsrecorridos, 2) @@ -120,68 +105,68 @@ def nuevo_repostaje(request): instancia.save() - return redirect('repostajes:lista_repostajes') + return redirect('macrociclos:lista_deportistas') else: - form = RepostajeForm() - return render(request, 'repostajes/form_repostaje.html', {'form': form}) + form = DeportistaForm() + return render(request, 'macrociclos/form_entrenador.html', {'form': form}) else: - return render(request, 'repostajes/index.html') + return render(request, 'macrociclos/index.html') @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': - form = RepostajeForm(request.POST, request.FILES, instance=repostaje) + form = DeportistaForm(request.POST, request.FILES, instance=entrenador) if form.is_valid(): form.save() - return redirect('repostajes:lista_repostajes') + return redirect('macrociclos:lista_deportistas') 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 -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']) -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) @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: - vehiculo = Vehiculo.objects.get(id=vehiculo_id) - serializer = VehiculoSerializer(vehiculo) + entrenador = Entrenador.objects.get(id=entrenador_id) + serializer = EntrenadorSerializer(entrenador) 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']) -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) @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: - repostaje = Repostaje.objects.get(id=repostaje_id) - serializer = RepostajeSerializer(repostaje) + entrenador = Deportista.objects.get(id=entrenador_id) + serializer = DeportistaSerializer(entrenador) 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)