diff --git a/Proyecto/espacios_obligados/forms.py b/Proyecto/espacios_obligados/forms.py
index 07db616..567790e 100644
--- a/Proyecto/espacios_obligados/forms.py
+++ b/Proyecto/espacios_obligados/forms.py
@@ -1,5 +1,5 @@
from django import forms
-from .models import Entidad, Sede, Provincias
+from .models import Entidad, Sede, Provincias, DEA
from leaflet.forms.widgets import LeafletWidget
from django.contrib.gis.geos import Point
from django.contrib.gis import forms as gis_forms
@@ -34,4 +34,64 @@ def save(self, commit=True):
sede.ubicacion = coordenadas
if commit:
sede.save()
- return sede
\ No newline at end of file
+ return sede
+
+
+
+class EditSedeForm(forms.ModelForm):
+
+ ubicacion = gis_forms.PointField(widget=LeafletWidget())
+ class Meta:
+ model = Sede
+ fields = ['nombre', 'cant_personas_externas', 'superficie', 'cant_personal', 'direccion', 'ubicacion']
+
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+ self.fields['ubicacion'].required = False
+
+ def clean_ubicacion(self):
+ ubicacion = self.cleaned_data.get('ubicacion')
+ if not ubicacion:
+ raise forms.ValidationError('Debe seleccionar una ubicación en el mapa.')
+ return ubicacion
+
+ def save(self, commit=True):
+ sede = super().save(commit=False)
+ coordenadas = self.cleaned_data.get('ubicacion')
+ if coordenadas:
+ sede.ubicacion = coordenadas
+ if commit:
+ sede.save()
+ return sede
+
+
+class DeclaracionJuradaForm(forms.ModelForm):
+ personal_capacitado = forms.BooleanField(required=False, widget=forms.CheckboxInput(attrs={'class': 'form-check-input'}))
+ senaletica = forms.BooleanField(required=False, widget=forms.CheckboxInput(attrs={'class': 'form-check-input'}))
+ protocolo_accion = forms.BooleanField(required=False, widget=forms.CheckboxInput(attrs={'class': 'form-check-input'}))
+ sistema_emergencia = forms.BooleanField(required=False, widget=forms.CheckboxInput(attrs={'class': 'form-check-input'}))
+ deas_decreto = forms.IntegerField(required=False, widget=forms.NumberInput(attrs={'class': 'form-control'}))
+
+ class Meta:
+ model = Sede
+ fields = ['personal_capacitado', 'senaletica', 'protocolo_accion', 'sistema_emergencia', 'deas_decreto']
+
+
+class DEAForm(forms.ModelForm):
+ marca = forms.CharField(required=False, widget=forms.TextInput(attrs={'class': 'form-control'}))
+ modelo = forms.CharField(required=False, widget=forms.TextInput(attrs={'class': 'form-control'}))
+ numero_serie = forms.CharField(required=False, widget=forms.TextInput(attrs={'class': 'form-control'}))
+ nombre_representativo = forms.CharField(required=False, widget=forms.TextInput(attrs={'class': 'form-control'}))
+
+ class Meta:
+ model = DEA
+ fields = ['marca', 'modelo', 'numero_serie', 'nombre_representativo']
+
+
+class DEAEditForm(forms.ModelForm):
+ numero_serie = forms.CharField(required=False, widget=forms.TextInput(attrs={'class': 'form-control'}))
+ nombre_representativo = forms.CharField(required=False, widget=forms.TextInput(attrs={'class': 'form-control'}))
+
+ class Meta:
+ model = DEA
+ fields = ['numero_serie', 'nombre_representativo']
diff --git a/Proyecto/espacios_obligados/migrations/__init__.py b/Proyecto/espacios_obligados/migrations/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/Proyecto/espacios_obligados/models.py b/Proyecto/espacios_obligados/models.py
index 9393448..60518bc 100644
--- a/Proyecto/espacios_obligados/models.py
+++ b/Proyecto/espacios_obligados/models.py
@@ -10,6 +10,7 @@ class Entidad(models.Model):
cuit = models.CharField(max_length=200)
sector = models.CharField(max_length=200)
tipo = models.CharField(max_length=200)
+
def __str__(self):
return self.razon_social
@@ -22,15 +23,42 @@ class Sede(models.Model):
ubicacion = gis_models.PointField()
cant_personal = models.IntegerField(default=0)
direccion = models.CharField(max_length=200)
+
+ # Declaración Jurada
+
+ personal_capacitado = models.BooleanField(default=False)
+ senaletica = models.BooleanField(default=False)
+ protocolo_accion = models.BooleanField(default=False)
+ sistema_emergencia = models.BooleanField(default=False)
+ deas_registrados = models.ManyToManyField('DEA', blank=True)
+ deas_decreto = models.IntegerField(default=0)
+
+
provincia = models.ForeignKey(Provincias, on_delete=models.CASCADE)
entidad = models.ForeignKey(Entidad, on_delete=models.CASCADE)
+
def __str__(self):
return self.nombre
-class EspacioObligado(models.Model):
- nombre = models.CharField(max_length=200)
+class DEA(models.Model):
+ dea_sede = models.ForeignKey(Sede, on_delete=models.CASCADE)
+ aprobacion_ANMAT = models.BooleanField(default=False)
+ marca = models.CharField(max_length=200)
+ modelo = models.CharField(max_length=200)
+ numero_serie = models.CharField(max_length=200)
+ nombre_representativo = models.CharField(max_length=200)
+ estado = models.CharField(max_length=10, choices=[('activo', 'Activo'), ('inactivo', 'Inactivo')], default='activo')
+
+ def __str__(self):
+ return self.sede.nombre
+
+
+class HistorialDEA(models.Model):
+ dea = models.ForeignKey(DEA, on_delete=models.CASCADE)
+ dia = models.DateField()
+ servicio = models.CharField(max_length=200)
+ observaciones = models.CharField(max_length=200, blank=True, null=True)
- sede = models.ForeignKey(Sede, on_delete=models.CASCADE)
def __str__(self):
- return self.nombre
\ No newline at end of file
+ return self.dea.nombre_representativo
diff --git a/Proyecto/espacios_obligados/templates/administrar_entidad_sede.html b/Proyecto/espacios_obligados/templates/administrar_entidad_sede.html
new file mode 100644
index 0000000..4b8a4f4
--- /dev/null
+++ b/Proyecto/espacios_obligados/templates/administrar_entidad_sede.html
@@ -0,0 +1,23 @@
+
+
+
diff --git a/Proyecto/espacios_obligados/templates/dea/editar_dea.html b/Proyecto/espacios_obligados/templates/dea/editar_dea.html
new file mode 100644
index 0000000..6f92a96
--- /dev/null
+++ b/Proyecto/espacios_obligados/templates/dea/editar_dea.html
@@ -0,0 +1,11 @@
+{% extends "ProyectoApp/base.html" %}
+{% load static %}
+{% block content %}
+Editar DEA
+
+Atrás
+{% endblock %}
\ No newline at end of file
diff --git a/Proyecto/espacios_obligados/templates/dea/listar_deas.html b/Proyecto/espacios_obligados/templates/dea/listar_deas.html
new file mode 100644
index 0000000..888431d
--- /dev/null
+++ b/Proyecto/espacios_obligados/templates/dea/listar_deas.html
@@ -0,0 +1,25 @@
+{% extends "ProyectoApp/base.html" %}
+{% load static %}
+{% block content %}
+Registrar Nuevo DEA
+
+ {% for dea in deas %}
+
+
+
+
Marca: {{ dea.marca }}
+
Modelo: {{ dea.modelo }}
+
Editar
+
Validar
+ {% if dea.aprobacion_ANMAT %}
+
Validado
+ {% else %}
+
No Validado
+ {% endif %}
+
+
+ {% endfor %}
+
+{% endblock %}
\ No newline at end of file
diff --git a/Proyecto/espacios_obligados/templates/dea/registrar_dea.html b/Proyecto/espacios_obligados/templates/dea/registrar_dea.html
new file mode 100644
index 0000000..171ef34
--- /dev/null
+++ b/Proyecto/espacios_obligados/templates/dea/registrar_dea.html
@@ -0,0 +1,16 @@
+{% extends "ProyectoApp/base.html" %}
+{% load static %}
+{% block content %}
+
+Registrar DEA
+
+Atrás
+{% endblock %}
\ No newline at end of file
diff --git a/Proyecto/espacios_obligados/templates/listar_mis_entidades_sedes.html b/Proyecto/espacios_obligados/templates/listar_mis_entidades_sedes.html
index 3889fdb..a2a38b6 100644
--- a/Proyecto/espacios_obligados/templates/listar_mis_entidades_sedes.html
+++ b/Proyecto/espacios_obligados/templates/listar_mis_entidades_sedes.html
@@ -4,6 +4,7 @@ Lista de mis Entidades-Sedes
{% for espacio in entidades_sedes %}
- {{ espacio.nombre }}
+ Administrar
{% endfor %}
{% endblock %}
\ No newline at end of file
diff --git a/Proyecto/espacios_obligados/templates/sede/declaracion_jurada.html b/Proyecto/espacios_obligados/templates/sede/declaracion_jurada.html
new file mode 100644
index 0000000..a32085e
--- /dev/null
+++ b/Proyecto/espacios_obligados/templates/sede/declaracion_jurada.html
@@ -0,0 +1,36 @@
+{% extends "ProyectoApp/base.html" %}
+{% load static %}
+{% block title %}Declaración Jurada{% endblock %}
+{% block content %}
+
+
+Atrás
+{% endblock %}
diff --git a/Proyecto/espacios_obligados/templates/sede/editar_sede.html b/Proyecto/espacios_obligados/templates/sede/editar_sede.html
new file mode 100644
index 0000000..305fab6
--- /dev/null
+++ b/Proyecto/espacios_obligados/templates/sede/editar_sede.html
@@ -0,0 +1,16 @@
+{% extends "ProyectoApp/base.html" %}
+{% load leaflet_tags %}
+{% load static %}
+{% block content %}
+
+ {% leaflet_js plugins="forms" %}
+ {% leaflet_css plugins="forms" %}
+
+Editar Sede {{ sede.nombre }}
+
+Atrás
+{% endblock %}
diff --git a/Proyecto/espacios_obligados/urls.py b/Proyecto/espacios_obligados/urls.py
index 1418778..bf9eada 100644
--- a/Proyecto/espacios_obligados/urls.py
+++ b/Proyecto/espacios_obligados/urls.py
@@ -6,4 +6,11 @@
path('registrar_sede//', views.registrar_sede, name='registrar_sede'),
path('listar_sedes//', views.listar_sedes, name='listar_sedes'),
path('listar_mis_entidades_sedes/', views.listar_mis_entidades_sedes, name='listar_mis_entidades_sedes'),
+ path('administrar_entidad_sede//', views.administrar_entidad_sede, name='administrar_entidad_sede'),
+ path('editar_sede//', views.editar_sede, name='editar_sede'),
+ path('declaracion_jurada//', views.declaracion_jurada, name='declaracion_jurada'),
+ path('registrar_dea//', views.registrar_dea, name='registrar_dea'),
+ path('listar_deas//', views.listar_deas, name='listar_deas'),
+ path('editar_dea//', views.editar_dea, name='editar_dea'),
+ path('validar_dea//', views.verificar_aprobacion_ANMAT, name='validar_dea'),
]
diff --git a/Proyecto/espacios_obligados/views.py b/Proyecto/espacios_obligados/views.py
index 02293f5..372f20b 100644
--- a/Proyecto/espacios_obligados/views.py
+++ b/Proyecto/espacios_obligados/views.py
@@ -1,8 +1,10 @@
from django.shortcuts import render, redirect
-from .models import Entidad, Sede, Provincias
-from .forms import EntidadForm, SedeForm
+from .models import *
+from .forms import *
from django.contrib.gis.geos import Point
from usuarios.models import Representante
+import requests
+from django.http import JsonResponse
# Create your views here.
@@ -57,3 +59,119 @@ def listar_mis_entidades_sedes(request):
return render(request, 'listar_mis_entidades_sedes.html', {'entidades_sedes': entidades_sedes})
+def administrar_entidad_sede(request, sede_id):
+ sede = Sede.objects.get(id=sede_id)
+ return render(request, 'administrar_entidad_sede.html', {'sede': sede})
+
+
+def editar_sede(request, sede_id):
+ sede = Sede.objects.get(id=sede_id)
+ if request.method == 'POST':
+ form = EditSedeForm(request.POST, instance=sede)
+ if form.is_valid():
+ sede = form.save(commit=False)
+ coordenadas = form.cleaned_data.get('ubicacion')
+ if coordenadas:
+ latitud = coordenadas.y
+ longitud = coordenadas.x
+ sede.ubicacion = Point(longitud, latitud)
+ sede.save()
+
+ return redirect('listar_mis_entidades_sedes')
+ else:
+ form = EditSedeForm(instance=sede)
+ return render(request, 'sede/editar_sede.html', {'form': form, 'sede': sede})
+
+
+def declaracion_jurada(request, sede_id):
+ sede = Sede.objects.get(id=sede_id)
+ if request.method == 'POST':
+ form = DeclaracionJuradaForm(request.POST, instance=sede)
+ if form.is_valid():
+ ddjj = form.save(commit=False)
+ ddjj.save()
+ return redirect('listar_mis_entidades_sedes')
+ else:
+ form = DeclaracionJuradaForm(instance=sede)
+ return render(request, 'sede/declaracion_jurada.html', {'form': form, 'sede': sede})
+
+
+
+def registrar_dea(request, sede_id):
+ sede = Sede.objects.get(id=sede_id)
+ if request.method == 'POST':
+ form = DEAForm(request.POST)
+ if form.is_valid():
+ dea = form.save(commit=False)
+ dea.dea_sede = sede
+ dea.save()
+
+ sede.deas_registrados.add(dea)
+
+ return redirect('listar_mis_entidades_sedes')
+ else:
+ form = DEAForm()
+ return render(request, 'dea/registrar_dea.html', {'form': form, 'sede': sede})
+
+
+def listar_deas(request, sede_id):
+ sede = Sede.objects.get(id=sede_id)
+ deas = DEA.objects.filter(dea_sede=sede)
+ return render(request, 'dea/listar_deas.html', {'sede': sede, 'deas': deas})
+
+
+def editar_dea(request, dea_id):
+ dea = DEA.objects.get(id=dea_id)
+ sede_id = dea.dea_sede.id
+ if request.method == 'POST':
+ form = DEAEditForm(request.POST, instance=dea)
+ if form.is_valid():
+ dea = form.save(commit=False)
+ dea.save()
+ return redirect('listar_deas', sede_id=sede_id)
+ else:
+ form = DEAEditForm(instance=dea)
+ return render(request, 'dea/editar_dea.html', {'form': form, 'sede':sede_id, 'dea': dea})
+
+
+
+
+def verificar_aprobacion_ANMAT(request, dea_id):
+
+ try:
+ # Obtén el DEA con el ID especificado
+ dea = DEA.objects.get(id=dea_id)
+
+ # URL de la API para obtener la lista de modelos del DEA con el ID especificado
+ url = f'https://api.claudioraverta.com/deas/{dea.marca}/modelos/'
+
+ # Realizar una solicitud GET a la API
+ response = requests.get(url)
+
+ # Comprobar si la respuesta tiene el código de estado 200 (OK)
+ if response.status_code == 200:
+ # Analizar la respuesta JSON
+ modelos = response.json()
+
+ # Verificar si el modelo está en la lista de modelos aprobados por ANMAT
+ if any(modelo.get("nombre") == dea.modelo for modelo in modelos):
+ # El DEA con el modelo especificado está aprobado por ANMAT
+ # Ahora, debes actualizar el campo aprobacion_ANMAT en tu modelo DEA
+
+ # Establece el campo aprobacion_ANMAT en True
+ dea.aprobacion_ANMAT = True
+ dea.save()
+
+ return JsonResponse({'success': True}) # Aprobado por ANMAT y campo actualizado
+
+ else:
+ return JsonResponse({'success': False, 'message': f'El DEA { dea.marca } { dea.modelo } no está aprobado por ANMAT'})
+
+ else:
+ return JsonResponse({'success': False, 'message': f'Error en la solicitud a la API: {response.status_code}'})
+
+ except DEA.DoesNotExist:
+ return JsonResponse({'success': False, 'message': 'No se encontró el DEA con el ID especificado'})
+
+ except requests.exceptions.RequestException as e:
+ return JsonResponse({'success': False, 'message': f'Error en la solicitud a la API: {str(e)}'})
diff --git a/Proyecto/usuarios/migrations/__init__.py b/Proyecto/usuarios/migrations/__init__.py
new file mode 100644
index 0000000..e69de29