diff --git a/LabModule/app_forms/Maquina.py b/LabModule/app_forms/Maquina.py index 428085e..5819b99 100644 --- a/LabModule/app_forms/Maquina.py +++ b/LabModule/app_forms/Maquina.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -from django.forms import ModelForm from django import forms +from django.forms import ModelForm from LabModule.app_models.Maquina import Maquina @@ -19,14 +19,10 @@ class MaquinaForm(ModelForm): :param ModelForm: Instancia de Django.forms. :type ModelForm: ModelForm. """ - fechaInicialDisp = forms.DateTimeField(input_formats=["%Y-%m-%d %H:%M" - ] ) - fechaFinalDisp = forms.DateTimeField(input_formats=["%Y-%m-%d %H:%M"]) + fechaInicialDisp = forms.DateTimeField(input_formats = ["%Y-%m-%d %H:%M" + ]) + fechaFinalDisp = forms.DateTimeField(input_formats = ["%Y-%m-%d %H:%M"]) + class Meta: model = Maquina exclude = ['mueble'] - - #widgets = { - # 'fechaInicialDisp': forms.DateInput(attrs={'class': 'form-control date '}), - # 'fechaFinalDisp': forms.DateInput(attrs={'class': 'form-control date '}) - #} diff --git a/LabModule/app_forms/Muestra.py b/LabModule/app_forms/Muestra.py index 514c621..ce344e8 100644 --- a/LabModule/app_forms/Muestra.py +++ b/LabModule/app_forms/Muestra.py @@ -5,6 +5,7 @@ from LabModule.app_models.Muestra import Muestra from LabModule.app_models.SolicitudMuestra import SolicitudMuestra + class MuestraForm(ModelForm): """Formulario para crear y modificar muestras. Se encarga de: @@ -30,7 +31,7 @@ class Meta: class MuestraAddForm(forms.Form): - def __init__(self, *args, **kwargs): - maxi = kwargs.pop('maximo') - super(MuestraAddForm, self).__init__(*args, **kwargs) - self.fields['cantidad'] = forms.IntegerField(label="Cantidad", max_value=maxi,min_value=1) \ No newline at end of file + def __init__(self, *args, **kwargs): + maxi = kwargs.pop('maximo') + super(MuestraAddForm, self).__init__(*args, **kwargs) + self.fields['cantidad'] = forms.IntegerField(label = "Cantidad", max_value = maxi, min_value = 1) diff --git a/LabModule/app_forms/Solicitud.py b/LabModule/app_forms/Solicitud.py index 4015bb1..45fadd3 100644 --- a/LabModule/app_forms/Solicitud.py +++ b/LabModule/app_forms/Solicitud.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- -from django import forms import datetime + +from django import forms from django.db.models import Q from django.forms import ModelForm @@ -29,11 +30,11 @@ def verificar_fecha(self, maquina_id, fechaIni, fechaFin): return False return True - def verificarDisponibilidad(self,start,end,fechaIni,fechaFin): - d_end=datetime.datetime.strptime(end, "%Y-%m-%d") - d_start=datetime.datetime.strptime(start, "%Y-%m-%d") - d_fechaIni=datetime.datetime.strptime(fechaIni[:-6], "%Y-%m-%d") - d_fechaFin=datetime.datetime.strptime(fechaFin[:-6], "%Y-%m-%d") - if d_start<=d_fechaIni<=d_end and d_start<=d_fechaFin<=d_end: + def verificarDisponibilidad(self, start, end, fechaIni, fechaFin): + d_end = datetime.datetime.strptime(end, "%Y-%m-%d") + d_start = datetime.datetime.strptime(start, "%Y-%m-%d") + d_fechaIni = datetime.datetime.strptime(fechaIni[:-6], "%Y-%m-%d") + d_fechaFin = datetime.datetime.strptime(fechaFin[:-6], "%Y-%m-%d") + if d_start <= d_fechaIni <= d_end and d_start <= d_fechaFin <= d_end: return True - return False \ No newline at end of file + return False diff --git a/LabModule/app_models/Almacenamiento.py b/LabModule/app_models/Almacenamiento.py index b36c1f1..1fdd924 100644 --- a/LabModule/app_models/Almacenamiento.py +++ b/LabModule/app_models/Almacenamiento.py @@ -49,7 +49,7 @@ class Meta: mueble = models.OneToOneField( Mueble, - null=True, + null = True, on_delete = models.CASCADE, related_name = '%(app_label)s_%(class)s_related' ) @@ -75,7 +75,7 @@ class Meta: ) def __unicode__(self): - return self.idSistema+ self.mueble.__unicode__() + return self.idSistema + self.mueble.__unicode__() def get_id_sistema(self): return self.idSistema diff --git a/LabModule/app_models/Bandeja.py b/LabModule/app_models/Bandeja.py index 75f4697..57e4c02 100644 --- a/LabModule/app_models/Bandeja.py +++ b/LabModule/app_models/Bandeja.py @@ -51,6 +51,7 @@ class Meta: def __unicode__(self): return 'Bandeja: ' + self.almacenamiento.get_id_sistema() + " " + str(self.posicion) + @classmethod - def getBandejas(cls,idLugar): - return Bandeja.objects.filter(almacenamiento=idLugar) \ No newline at end of file + def getBandejas(cls, idLugar): + return Bandeja.objects.filter(almacenamiento = idLugar) diff --git a/LabModule/app_models/Maquina.py b/LabModule/app_models/Maquina.py index c2aa070..c97aea5 100644 --- a/LabModule/app_models/Maquina.py +++ b/LabModule/app_models/Maquina.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- from datetime import datetime, timedelta - from django.db import models from django.urls import reverse from django.utils import timezone @@ -53,22 +52,22 @@ class Meta: ) fechaInicialDisp = models.DateTimeField( - blank=False, - null=True, - verbose_name=_("Fecha Inicial"), - default=timezone.now + blank = False, + null = True, + verbose_name = _("Fecha Inicial"), + default = timezone.now ) fechaFinalDisp = models.DateTimeField( - blank=False, - null=True, - verbose_name=_("Fecha Final"), - default=datetime.now()+timedelta(days=30) + blank = False, + null = True, + verbose_name = _("Fecha Final"), + default = datetime.now() + timedelta(days = 30) ) mueble = models.OneToOneField( Mueble, - null=True, + null = True, on_delete = models.CASCADE, related_name = '%(app_label)s_%(class)s_related' ) diff --git a/LabModule/app_models/Mueble.py b/LabModule/app_models/Mueble.py index 6e82a18..10d9065 100644 --- a/LabModule/app_models/Mueble.py +++ b/LabModule/app_models/Mueble.py @@ -26,7 +26,7 @@ class Meta: estado = models.BooleanField( default = True, verbose_name = _('Activa'), - null=False + null = False ) imagen = models.ImageField( @@ -35,7 +35,7 @@ class Meta: default = 'images/image-not-found.jpg' ) - tipo= models.CharField( + tipo = models.CharField( max_length = 1000, default = 'Desconocido', verbose_name = _("Descripción"), @@ -43,7 +43,7 @@ class Meta: ) def __unicode__(self): - return self.nombre + return self.nombre def get_nombre(self): return self.nombre.capitalize() diff --git a/LabModule/app_models/MuebleEnLab.py b/LabModule/app_models/MuebleEnLab.py index dafa2d7..8a0cdde 100644 --- a/LabModule/app_models/MuebleEnLab.py +++ b/LabModule/app_models/MuebleEnLab.py @@ -10,6 +10,8 @@ class MuebleEnLab(models.Model): class Meta: verbose_name = _("Mueble en Laboratorio") verbose_name_plural = _('Muebles en Laboratorio') + app_label = 'LabModule' + unique_together = ('idLaboratorio', 'posX', 'posY') idLaboratorio = models.ForeignKey( Laboratorio, diff --git a/LabModule/app_models/Muestra.py b/LabModule/app_models/Muestra.py index 3842f72..c9034ad 100644 --- a/LabModule/app_models/Muestra.py +++ b/LabModule/app_models/Muestra.py @@ -1,7 +1,9 @@ # -*- coding: utf-8 -*- from django.db import models from django.utils.translation import gettext_lazy as _ + from LabModule.app_models import Almacenamiento + permissions_sample = ( ('can_addSample', 'muestra||agregar'), ('can_editSample', 'muestra||editar'), @@ -77,9 +79,7 @@ class Meta: null = True, verbose_name = _("Unidad de Medida") ) - alamacenamientos=models.ManyToManyField(Almacenamiento) + alamacenamientos = models.ManyToManyField(Almacenamiento) def __unicode__(self): return 'Muestra: ' + self.nombre - - \ No newline at end of file diff --git a/LabModule/app_models/MuestraEnBandeja.py b/LabModule/app_models/MuestraEnBandeja.py index bbcdbee..8295fe6 100644 --- a/LabModule/app_models/MuestraEnBandeja.py +++ b/LabModule/app_models/MuestraEnBandeja.py @@ -41,7 +41,7 @@ class Meta: def __unicode__(self): return str(self.posX) + ":" + str(self.posY) - + @classmethod - def getPosiciones(cls,bandeja): - return MuestraEnBandeja.objects.filter(idBandeja=bandeja) \ No newline at end of file + def getPosiciones(cls, bandeja): + return MuestraEnBandeja.objects.filter(idBandeja = bandeja) diff --git a/LabModule/app_utils/cursores.py b/LabModule/app_utils/cursores.py index 2b560bd..48201b8 100644 --- a/LabModule/app_utils/cursores.py +++ b/LabModule/app_utils/cursores.py @@ -132,7 +132,7 @@ def dictfetchall(cursor): 'FROM "LabModule_muestra" m\n' 'LEFT JOIN "LabModule_muestraenbandeja" mb\n' 'ON m.id = mb."idMuestra_id"\n' - 'WHERE m.activa = true\n' + 'WHERE m.activa = TRUE\n' 'GROUP BY m.id,\n' ' m.nombre,\n' ' m.valor,\n' diff --git a/LabModule/app_views/Almacenamiento.py b/LabModule/app_views/Almacenamiento.py index fc360f1..b4543c6 100644 --- a/LabModule/app_views/Almacenamiento.py +++ b/LabModule/app_views/Almacenamiento.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- -import json from django.contrib import messages from django.db import connection @@ -8,7 +7,6 @@ from django.shortcuts import redirect from django.shortcuts import render from django.urls import reverse -from django.views.decorators.csrf import csrf_exempt from LabModule.app_forms.Almacenamiento import AlmacenamientoForm from LabModule.app_forms.Mueble import MuebleForm @@ -20,7 +18,7 @@ from LabModule.app_utils.cursores import * -def lugar_add(request, template_name='almacenamientos/agregar.html'): +def lugar_add(request, template_name = 'almacenamientos/agregar.html'): """Comporbar si el usuario puede agregar una máquina y obtener los campos necesarios. Historia de usuario: `ALF-18 `_ : Yo como Jefe de Laboratorio quiero poder agregar nuevas máquinas en el sistema para que puedan ser usadas por los asistentes. @@ -49,17 +47,17 @@ def lugar_add(request, template_name='almacenamientos/agregar.html'): formPos = PosicionesMuebleForm(request.POST or None, request.FILES or None) if request.method == 'POST': return comprobarPostLugar(form, formAlmacenamiento, formPos, request, template_name, section) - context = {'form': form, + context = {'form' : form, 'formAlmacenamiento': formAlmacenamiento, - 'formPos': formPos, - 'mensaje': mensaje, - 'section': section} + 'formPos' : formPos, + 'mensaje' : mensaje, + 'section' : section} return render(request, template_name, context) else: - return HttpResponse('No autorizado', status=401) + return HttpResponse('No autorizado', status = 401) -def lugar_detail(request, pk, template_name='almacenamientos/detalle.html'): +def lugar_detail(request, pk, template_name = 'almacenamientos/detalle.html'): """Desplegar y comprobar los valores a consultar. Historia de usuario: ALF-42-Yo como Jefe de Laboratorio quiero poder ver el detalle de un lugar de almacenamiento para conocer sus características @@ -74,53 +72,53 @@ def lugar_detail(request, pk, template_name='almacenamientos/detalle.html'): if request.user.is_authenticated() and request.user.has_perm("LabModule.can_viewSample"): section = {'title': 'Ver Detalle ', 'agregar': "ver"} - lugar = get_object_or_404(Almacenamiento, pk=pk) + lugar = get_object_or_404(Almacenamiento, pk = pk) mueble = lugar.mueble laboratorio = MuebleEnLab.get_laboratorio(mueble) - bandejas = [bandeja.id for bandeja in Bandeja.objects.filter(almacenamiento=lugar)] - espaciosOcupados = len([m for m in MuestraEnBandeja.objects.filter(idBandeja__in=bandejas)]) + bandejas = [bandeja.id for bandeja in Bandeja.objects.filter(almacenamiento = lugar)] + espaciosOcupados = len([m for m in MuestraEnBandeja.objects.filter(idBandeja__in = bandejas)]) espacioslibres = lugar.get_max_capacidad() - espaciosOcupados - pos = MuebleEnLab.objects.get(idLaboratorio=laboratorio, - idMueble=mueble) + pos = MuebleEnLab.objects.get(idLaboratorio = laboratorio, + idMueble = mueble) - context = {'lugar': lugar, + context = {'lugar' : lugar, 'espaciosOcupados': espaciosOcupados, - 'espacioslibres': espacioslibres, - 'laboratorio': laboratorio, - 'mueble': mueble, - 'pos': pos, - 'section': section} + 'espacioslibres' : espacioslibres, + 'laboratorio' : laboratorio, + 'mueble' : mueble, + 'pos' : pos, + 'section' : section} return render(request, template_name, context) else: - return HttpResponse('No autorizado', status=401) + return HttpResponse('No autorizado', status = 401) -def lugar_update(request, pk, template_name='almacenamientos/agregar.html'): +def lugar_update(request, pk, template_name = 'almacenamientos/agregar.html'): if request.user.is_authenticated() and request.user.has_perm("LabModule.can_editStorage"): section = {'title': 'Modificar Lugar de Almacenamiento', 'agregar': False} - inst_almacenamiento = get_object_or_404(Almacenamiento, pk=pk) + inst_almacenamiento = get_object_or_404(Almacenamiento, pk = pk) inst_mueble = inst_almacenamiento.mueble - inst_ubicacion = get_object_or_404(MuebleEnLab, idMueble=inst_mueble) + inst_ubicacion = get_object_or_404(MuebleEnLab, idMueble = inst_mueble) form = MuebleForm(request.POST or None, request.FILES or None, - instance=inst_mueble) + instance = inst_mueble) formAlmacenamiento = AlmacenamientoForm(request.POST or None, request.FILES or None, - instance=inst_almacenamiento) + instance = inst_almacenamiento) formPos = PosicionesMuebleForm(request.POST or None, request.FILES or None, - instance=inst_ubicacion) + instance = inst_ubicacion) return comprobarPostLugar(form, formAlmacenamiento, formPos, request, template_name, section) else: - return HttpResponse('No autorizado', status=401) + return HttpResponse('No autorizado', status = 401) -def lugar_list(request, template_name='almacenamientos/listar.html'): +def lugar_list(request, template_name = 'almacenamientos/listar.html'): """Desplegar y comprobar los valores a consultar. Historia de usuario: ALF-39 - Yo como Jefe de Laboratorio quiero poder filtrar los lugares de almacenamiento existentes por nombre para visualizar sólo los que me interesan. @@ -136,11 +134,11 @@ def lugar_list(request, template_name='almacenamientos/listar.html'): can_editStorage = request.user.has_perm("LabModule.can_editStorage") lista_almacenamiento = obtener_lugares(not can_editStorage) - context = {'section': section, + context = {'section' : section, 'lista_lugares': lista_almacenamiento} return render(request, template_name, context) else: - return HttpResponse('No autorizado', status=401) + return HttpResponse('No autorizado', status = 401) def comprobarPostLugar(form, formAlmacenamiento, formPos, request, template_name, section): @@ -168,10 +166,10 @@ def comprobarPostLugar(form, formAlmacenamiento, formPos, request, template_name mensaje = "" if form.is_valid() and formPos.is_valid() and formAlmacenamiento.is_valid(): - new_furniture = form.save(commit=False) + new_furniture = form.save(commit = False) new_furniture.tipo = 'almacenamiento' - new_storage = formAlmacenamiento.save(commit=False) - new_storage_loc = formPos.save(commit=False) + new_storage = formAlmacenamiento.save(commit = False) + new_storage_loc = formPos.save(commit = False) idLaboratorio = formPos.cleaned_data['idLaboratorio'] posX = formPos.cleaned_data['posX'] @@ -180,28 +178,28 @@ def comprobarPostLugar(form, formAlmacenamiento, formPos, request, template_name es_ubicacion_libre = formPos.es_ubicacion_libre() if section['agregar'] and not es_ubicacion_libre: - messages.error(request, "El lugar en el que desea guadar ya esta ocupado", extra_tags="danger") + messages.error(request, "El lugar en el que desea guadar ya esta ocupado", extra_tags = "danger") else: if not section['agregar'] and not formPos.es_el_mismo_mueble(new_furniture.id, idLaboratorio, posX, - posY) \ + posY)\ and not es_ubicacion_libre: - messages.error(request, "El lugar en el que desea guadar ya esta ocupado", extra_tags="danger") + messages.error(request, "El lugar en el que desea guadar ya esta ocupado", extra_tags = "danger") else: if not formPos.es_ubicacion_rango(posX, posY): - if 'posX' in formPos.errors and formPos.errors['posX'] is not None \ + if 'posX' in formPos.errors and formPos.errors['posX'] is not None\ and formPos.errors['posX'][0] == 'La columna ya esta ocupada': del formPos.errors['posX'][0] - if 'posY' in formPos.errors and formPos.errors['posY'] is not None \ + if 'posY' in formPos.errors and formPos.errors['posY'] is not None\ and formPos.errors['posY'][0] == 'La fila ya esta ocupada': del formPos.errors['posY'][0] - mensaje = "La posición [" + \ - str(new_storage_loc.posX) + "," + \ + mensaje = "La posición [" +\ + str(new_storage_loc.posX) + "," +\ str(new_storage_loc.posY) + "] no se encuentra en el rango del laboratorio" - messages.error(request, mensaje, extra_tags="danger") + messages.error(request, mensaje, extra_tags = "danger") else: new_furniture.save() new_storage.mueble = new_furniture @@ -213,17 +211,16 @@ def comprobarPostLugar(form, formAlmacenamiento, formPos, request, template_name messages.success(request, "El lugar de almacenamiento se añadió exitosamente") else: messages.success(request, "El lugar de almacenamiento se actualizó correctamente") - return redirect(reverse('lugar-detail', kwargs={'pk': new_storage.pk})) - context = {'form': form, + return redirect(reverse('lugar-detail', kwargs = {'pk': new_storage.pk})) + context = {'form' : form, 'formAlmacenamiento': formAlmacenamiento, - 'formPos': formPos, - 'mensaje': mensaje, - 'section': section, + 'formPos' : formPos, + 'mensaje' : mensaje, + 'section' : section, } return render(request, template_name, context) - def obtener_lugares(cannot_editStorage): """ Obtiene los lugares de almacenamiento para filtrarlos por protocolo diff --git a/LabModule/app_views/Maquina.py b/LabModule/app_views/Maquina.py index 4a19a68..5421b40 100644 --- a/LabModule/app_views/Maquina.py +++ b/LabModule/app_views/Maquina.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- import os -import datetime from django.contrib import messages from django.contrib.auth.models import User from django.core.exceptions import MultipleObjectsReturned @@ -64,8 +63,8 @@ def maquina_add(request, template_name = 'maquinas/agregar.html'): 'formPos' : formPos, 'mensaje' : mensaje, 'section' : section, - 'start': request.GET.get('start', ''), - 'end': request.GET.get('end', '') + 'start' : request.GET.get('start', ''), + 'end' : request.GET.get('end', '') } return render(request, template_name, context) else: @@ -122,7 +121,7 @@ def maquina_update(request, pk, template_name = 'maquinas/agregar.html'): inst_maquina = get_object_or_404(Maquina, pk = pk) inst_mueble = inst_maquina.mueble inst_ubicacion = get_object_or_404(MuebleEnLab, idMueble = inst_mueble) - inst_maquina.fechaInicialDisp=inst_maquina.fechaInicialDisp.strftime("%Y-%m-%d %H:%M") + inst_maquina.fechaInicialDisp = inst_maquina.fechaInicialDisp.strftime("%Y-%m-%d %H:%M") inst_maquina.fechaFinalDisp = inst_maquina.fechaFinalDisp.strftime("%Y-%m-%d %H:%M") form = MuebleForm(request.POST or None, request.FILES or None, @@ -244,14 +243,13 @@ def maquina_request(request, pk, template_name = 'maquinas/solicitar.html'): if form.verificar_fecha(inst_maquina.pk, request.POST['fechaInicial'], request.POST['fechaFinal']) == True: - if form.verificarDisponibilidad(start,end,request.POST['fechaInicial'],request.POST['fechaFinal'])==True: + if form.verificarDisponibilidad(start, end, request.POST['fechaInicial'], + request.POST['fechaFinal']) == True: requestObj = Solicitud() requestObj.descripcion = 'Solicitud de Maquina' requestObj.fechaInicial = request.POST['fechaInicial'] requestObj.fechaFinal = request.POST['fechaFinal'] - - if inst_maquina.con_reserva == True: requestObj.estado = 'creada' else: @@ -273,7 +271,7 @@ def maquina_request(request, pk, template_name = 'maquinas/solicitar.html'): return redirect(reverse('maquina-detail', kwargs = {'pk': pk})) else: - mensaje="Las fechas de solicitud estan por fuera de las fechas de disponibilidad" + mensaje = "Las fechas de solicitud estan por fuera de las fechas de disponibilidad" else: mensaje = "Ya existe una solicitud para estas fechas" @@ -335,28 +333,28 @@ def comprobarPostMaquina(form, formMaquina, formPos, request, template_name, sec es_ubicacion_libre = formPos.es_ubicacion_libre() if section['agregar'] and not es_ubicacion_libre: - messages.error(request, "El lugar en el que desea guadar ya esta ocupado", extra_tags = "danger") + messages.error(request, "El lugar en el que desea guadar ya esta ocupado", extra_tags = "danger") else: if not section['agregar'] and not formPos.es_el_mismo_mueble(new_furniture.id, idLaboratorio, posX, - posY) \ + posY)\ and not es_ubicacion_libre: - messages.error(request, "El lugar en el que desea guadar ya esta ocupado", extra_tags="danger") + messages.error(request, "El lugar en el que desea guadar ya esta ocupado", extra_tags = "danger") else: if not formPos.es_ubicacion_rango(posX, posY): - if 'posX' in formPos.errors and formPos.errors['posX'] is not None \ + if 'posX' in formPos.errors and formPos.errors['posX'] is not None\ and formPos.errors['posX'][0] == 'La columna ya esta ocupada': del formPos.errors['posX'][0] - if 'posY' in formPos.errors and formPos.errors['posY'] is not None \ + if 'posY' in formPos.errors and formPos.errors['posY'] is not None\ and formPos.errors['posY'][0] == 'La fila ya esta ocupada': del formPos.errors['posY'][0] - mensaje = "La posición [" + \ - str(new_machine_loc.posX) + "," + \ + mensaje = "La posición [" +\ + str(new_machine_loc.posX) + "," +\ str(new_machine_loc.posY) + "] no se encuentra en el rango del laboratorio" - messages.error(request, mensaje, extra_tags="danger") + messages.error(request, mensaje, extra_tags = "danger") else: new_furniture.save() new_machine.mueble = new_furniture @@ -368,13 +366,13 @@ def comprobarPostMaquina(form, formMaquina, formPos, request, template_name, sec messages.success(request, "La máquina se añadió exitosamente") else: messages.success(request, "La máquina se actualizó correctamente") - return redirect(reverse('maquina-detail', kwargs={'pk': new_machine.pk})) + return redirect(reverse('maquina-detail', kwargs = {'pk': new_machine.pk})) context = {'form' : form, 'formMaquina': formMaquina, 'formPos' : formPos, 'mensaje' : mensaje, 'section' : section, - 'start': request.GET.get('start', ''), - 'end': request.GET.get('end', '') + 'start' : request.GET.get('start', ''), + 'end' : request.GET.get('end', '') } return render(request, template_name, context) diff --git a/LabModule/app_views/Muestra.py b/LabModule/app_views/Muestra.py index f0f1864..a9f431f 100644 --- a/LabModule/app_views/Muestra.py +++ b/LabModule/app_views/Muestra.py @@ -1,35 +1,31 @@ # -*- coding: utf-8 -*- -import os -import json import copy +import os + +from django.contrib import messages from django.contrib.auth.models import User from django.core.exceptions import MultipleObjectsReturned from django.core.exceptions import ObjectDoesNotExist from django.db import connection from django.http import HttpResponse +from django.shortcuts import get_object_or_404 from django.shortcuts import redirect from django.shortcuts import render -from django.shortcuts import get_object_or_404 from django.urls import reverse -from django.contrib import messages from AresLabControl.settings import BASE_DIR, EMAIL_HOST_USER -from LabModule.app_forms.Muestra import MuestraSolicitudForm from LabModule.app_forms.Muestra import MuestraAddForm - +from LabModule.app_forms.Muestra import MuestraSolicitudForm from LabModule.app_forms.Solicitud import SolicitudForm +from LabModule.app_models.Bandeja import Bandeja +from LabModule.app_models.MuebleEnLab import MuebleEnLab from LabModule.app_models.Muestra import Muestra +from LabModule.app_models.MuestraEnBandeja import MuestraEnBandeja from LabModule.app_models.Paso import Paso from LabModule.app_models.Proyecto import Proyecto from LabModule.app_models.Solicitud import Solicitud from LabModule.app_models.SolicitudMuestra import SolicitudMuestra from LabModule.app_models.Usuario import Usuario -from LabModule.app_models.Bandeja import Bandeja -from LabModule.app_models.Almacenamiento import Almacenamiento -from LabModule.app_models.MuestraEnBandeja import MuestraEnBandeja -from LabModule.app_models.MuebleEnLab import MuebleEnLab - - from LabModule.app_utils.cursores import * from LabModule.app_utils.notificaciones import enviar_correo @@ -193,7 +189,7 @@ def muestra_list(request, template_name = 'muestras/listar.html'): return HttpResponse('No autorizado', status = 401) -def muestra_position(request,pk,template_name='muestras/agregar.html'): +def muestra_position(request, pk, template_name = 'muestras/agregar.html'): """Retornar una lista con las ubicaciones de las muestras que se deben guardar Historia de usuario: ALF-?? - Se encarga de: @@ -205,28 +201,29 @@ def muestra_position(request,pk,template_name='muestras/agregar.html'): :returns: HttpResponse -- La respuesta a la petición, con información de la muestra existente. """ if request.user.is_authenticated() and request.user.has_perm("LabModule.can_addSample"): - section='Guardar muestra' - muestra=get_object_or_404(Muestra,pk=pk) - form=MuestraAddForm(request.POST or None,maximo=disponibilidad_muestra(muestra)) + section = 'Guardar muestra' + muestra = get_object_or_404(Muestra, pk = pk) + form = MuestraAddForm(request.POST or None, maximo = disponibilidad_muestra(muestra)) if request.POST and form.is_valid(): - cantidad=form.cleaned_data['cantidad'] - rta,total=agregar_cantidad(muestra,cantidad) - section="Confirmar ubicación " - context = {'section': section,'muestra':muestra,'detalle_completo':rta} - seriali=[] + cantidad = form.cleaned_data['cantidad'] + rta, total = agregar_cantidad(muestra, cantidad) + section = "Confirmar ubicación " + context = {'section': section, 'muestra': muestra, 'detalle_completo': rta} + seriali = [] for bdg in rta: - ag={} - ag['bandeja']=bdg['bandeja'].id - ag['posX']=bdg['posX'] - ag['posY']=bdg['posY'] + ag = {} + ag['bandeja'] = bdg['bandeja'].id + ag['posX'] = bdg['posX'] + ag['posY'] = bdg['posY'] seriali.append(ag) request.session['a_aprobar'] = seriali - return render(request,'muestras/detalle_guardado.html',context) - context = {'section': section,'form':form,'muestra':muestra} + return render(request, 'muestras/detalle_guardado.html', context) + context = {'section': section, 'form': form, 'muestra': muestra} return render(request, template_name, context) return HttpResponse('No autorizado', status = 401) -def muestra_save(request,pk): + +def muestra_save(request, pk): """Guarda las muestras en la base de datos utilizando la sesión como apoyo :param request: El HttpRequest que se va a responder.cls :type request: HttpRequest. @@ -236,27 +233,27 @@ def muestra_save(request,pk): """ if request.user.is_authenticated() and request.user.has_perm("LabModule.can_addSample"): a_aprobar = request.session.get('a_aprobar') - creadas=copy.copy(a_aprobar) - muestra2=Muestra.objects.get(id=pk) + creadas = copy.copy(a_aprobar) + muestra2 = Muestra.objects.get(id = pk) for muestra in a_aprobar: try: - bandeja=Bandeja.objects.get(id=muestra['bandeja']) - x=muestra['posX'] - y=muestra['posY'] - creada,existia=MuestraEnBandeja.objects.get_or_create(idMuestra=muestra2,idBandeja=bandeja,posX=x,posY=y) + bandeja = Bandeja.objects.get(id = muestra['bandeja']) + x = muestra['posX'] + y = muestra['posY'] + creada, existia = MuestraEnBandeja.objects.get_or_create(idMuestra = muestra2, idBandeja = bandeja, + posX = x, posY = y) if existia: creadas.remove(muestra) else: print(creada) except Exception as e: - print(str(e)) - if not len(creadas)==0: - messages.error(request, 'Algunas de las muestras no pudieron ser guardadas'+str(len(creadas)),extra_tags='alert-danger') + print(str(e)) + if not len(creadas) == 0: + messages.error(request, 'Algunas de las muestras no pudieron ser guardadas' + str(len(creadas)), + extra_tags = 'alert-danger') else: - messages.success(request,'Las muestras se han agregado exitosamente') + messages.success(request, 'Las muestras se han agregado exitosamente') return redirect(reverse('muestra-detail', kwargs = {'pk': pk})) - - def disponibilidad_muestra(muestra): @@ -265,17 +262,19 @@ def disponibilidad_muestra(muestra): :type muestra: Muestra. :returns: int -- El número de espacios dispnibles para guardar la meuestra """ - almacenamiento=muestra.alamacenamientos.all() - total=0 + almacenamiento = muestra.alamacenamientos.all() + total = 0 for alm in almacenamiento: - total+=alm.get_max_capacidad() - bandejas =Bandeja.getBandejas(alm) + total += alm.get_max_capacidad() + bandejas = Bandeja.getBandejas(alm) for bandeja in bandejas: - muestras=MuestraEnBandeja.getPosiciones(bandeja) + muestras = MuestraEnBandeja.getPosiciones(bandeja) for muestra in muestras: - total+=-1 + total += -1 return total -def agregar_cantidad(muestra,cantidad): + + +def agregar_cantidad(muestra, cantidad): """Auxiliar para listar las posiciones en la que se puede guardar una cantidad de la muestra :param muestra: La muestra a la que se va a consultar :type muestra: Muestra @@ -283,38 +282,39 @@ def agregar_cantidad(muestra,cantidad): :type cantidad: Int :returns: int -- El número de espacios dispnibles para guardar la meuestra """ - almacenamiento=muestra.alamacenamientos.all().order_by('idSistema') - alamcenamientosArr=[] - total=0 + almacenamiento = muestra.alamacenamientos.all().order_by('idSistema') + alamcenamientosArr = [] + total = 0 for alm in almacenamiento: - bandejas =Bandeja.getBandejas(alm) - maximo=alm.numX*alm.numY - muebleEnLab=MuebleEnLab.objects.get(idMueble=alm.mueble) + bandejas = Bandeja.getBandejas(alm) + maximo = alm.numX * alm.numY + muebleEnLab = MuebleEnLab.objects.get(idMueble = alm.mueble) for bandeja in bandejas: - gradillasOcupadas=MuestraEnBandeja.getPosiciones(bandeja) - cant=maximo-gradillasOcupadas.count() - if cant>0: - matriz=[[0 for x in range(alm.numX)] for y in range(alm.numY)] + gradillasOcupadas = MuestraEnBandeja.getPosiciones(bandeja) + cant = maximo - gradillasOcupadas.count() + if cant > 0: + matriz = [[0 for x in range(alm.numX)] for y in range(alm.numY)] for gradilla in gradillasOcupadas: - matriz[gradilla.posY-1][gradilla.posX-1]=1 - for y in range(alm.numY): + matriz[gradilla.posY - 1][gradilla.posX - 1] = 1 + for y in range(alm.numY): for x in range(alm.numX): - if matriz[y][x]==0 and total×' + - 'Debe tener fechas de disponibilidad para estar activo'); - - } -});*/ function validarFechas() { if (new Date($("#id_fechaInicialDisp").val()) >= new Date($("#id_fechaFinalDisp").val())) { @@ -29,6 +16,7 @@ function validarFechas() { } return true; } + function iniciarFechas(defaultDateEnd, defaultDateStart, minDateEnd, minDateStart) { $('#id_fechaFinalDisp').datetimepicker({ diff --git a/templates/almacenamientos/agregar.html b/templates/almacenamientos/agregar.html index 1ed23bd..07e3a87 100644 --- a/templates/almacenamientos/agregar.html +++ b/templates/almacenamientos/agregar.html @@ -14,6 +14,38 @@

{{ section.title }}

+ +{% if form.errors %} + {% for error in form.non_field_errors %} +
+ × + + {{ error|escape }} +
+ {% endfor %} +{% endif %} + +{% if formAlmacenamiento.errors %} + {% for error in formAlmacenamiento.non_field_errors %} +
+ × + + {{ error|escape }} +
+ {% endfor %} +{% endif %} + + +{% if formPos.errors %} + {% for error in formPos.non_field_errors %} +
+ × + + {{ error|escape }} +
+ {% endfor %} +{% endif %} +
{% csrf_token %}
@@ -151,7 +183,13 @@

Bandejas

{{ formAlmacenamiento.numZ.label_tag }}
- {{ formAlmacenamiento.numZ|addcss:"form-control" }} + + {% if not section.agregar %} + {{ formAlmacenamiento.numZ|add_class:"form-control"|append_attr:"readonly" }} + {% else %} + {{ formAlmacenamiento.numZ|addcss:"form-control" }} + {% endif %} +
@@ -167,7 +205,13 @@

Bandejas

{{ formAlmacenamiento.numX.label_tag }}
- {{ formAlmacenamiento.numX|addcss:"form-control" }} + + {% if not section.agregar %} + {{ formAlmacenamiento.numX|add_class:"form-control"|append_attr:"readonly" }} + {% else %} + {{ formAlmacenamiento.numX|addcss:"form-control" }} + {% endif %} +
@@ -183,7 +227,12 @@

Bandejas

{{ formAlmacenamiento.numY.label_tag }}
- {{ formAlmacenamiento.numY|addcss:"form-control" }} + + {% if not section.agregar %} + {{ formAlmacenamiento.numY|add_class:"form-control"|append_attr:"readonly" }} + {% else %} + {{ formAlmacenamiento.numY|addcss:"form-control" }} + {% endif %}
diff --git a/templates/base.html b/templates/base.html index 5bbb8d8..5fe9806 100644 --- a/templates/base.html +++ b/templates/base.html @@ -30,6 +30,7 @@ {% endfor %} {% endif %} +
{% block content %} diff --git a/templates/maquinas/agregar.html b/templates/maquinas/agregar.html index 896d4fe..182fcb4 100644 --- a/templates/maquinas/agregar.html +++ b/templates/maquinas/agregar.html @@ -18,7 +18,41 @@

{{ section.title }}

- + +{% if formMaquina.errors %} + {% for error in formMaquina.non_field_errors %} +
+ × + + {{ error|escape }} +
+ {% endfor %} +{% endif %} + +{% if form.errors %} + {% for error in form.non_field_errors %} +
+ × + + {{ error|escape }} +
+ {% endfor %} +{% endif %} + +{% if formPos.errors %} + {% for error in formPos.non_field_errors %} +
+ × + + {{ error|escape }} +
+ {% endfor %} +{% endif %} + + + + {% csrf_token %}
@@ -218,32 +252,32 @@

Ubicación

Fechas de disponibilidad

- {% for error in formMaquina.fechaInicialDisp.errors %} -
-
- {{ error|escape }} -
-
- {% endfor %} -
- Fecha inicial -
-
- {{ formMaquina.fechaInicialDisp|addcss:"form-control date" }} -
- {% for error in formMaquina.fechaFinalDisp.errors %} -
-
- {{ error|escape }} -
-
- {% endfor %} -
- Fecha final + {% for error in formMaquina.fechaInicialDisp.errors %} +
+
+ {{ error|escape }} +
-
- {{ formMaquina.fechaFinalDisp|addcss:"form-control date" }} + {% endfor %} +
+ Fecha inicial +
+
+ {{ formMaquina.fechaInicialDisp|addcss:"form-control date" }} +
+ {% for error in formMaquina.fechaFinalDisp.errors %} +
+
+ {{ error|escape }} +
+ {% endfor %} +
+ Fecha final +
+
+ {{ formMaquina.fechaFinalDisp|addcss:"form-control date" }} +
diff --git a/templates/maquinas/detalle.html b/templates/maquinas/detalle.html index 9c2392e..fe71538 100644 --- a/templates/maquinas/detalle.html +++ b/templates/maquinas/detalle.html @@ -151,29 +151,29 @@

Ubicación

-
-
-
-

Fechas de disponibilidad

-
-
+
+
+
+

Fechas de disponibilidad

+
+
-
- Fecha Inicial -
-
- {{ maquina.fechaInicialDisp}} -
-
- Fecha Final -
-
- {{ maquina.fechaFinalDisp }} -
+
+ Fecha Inicial +
+
+ {{ maquina.fechaInicialDisp }} +
+
+ Fecha Final +
+
+ {{ maquina.fechaFinalDisp }}
+
{% include 'maquinas/calendario.html' %}
diff --git a/templates/maquinas/solicitar.html b/templates/maquinas/solicitar.html index 8d9a327..53e2fee 100644 --- a/templates/maquinas/solicitar.html +++ b/templates/maquinas/solicitar.html @@ -12,10 +12,10 @@ {% block head_title %}{{ block.super }}{{ section.title }}{% endblock %} {% block content %} -{% ifnotequal mensaje 'ok' %} -
× - {{mensaje}}
-{% endifnotequal %} + {% ifnotequal mensaje 'ok' %} +
× + {{ mensaje }}
+ {% endifnotequal %}
-
-
-
-

Fechas de disponibilidad

-
-
+
+
+
+

Fechas de disponibilidad

+
+
-
- Fecha inicial de disponibilidad -
-
- {{ maquina.fechaInicialDisp }} -
+
+ Fecha inicial de disponibilidad +
+
+ {{ maquina.fechaInicialDisp }} +
-
- Fecha final de disponibilidad -
-
- {{ maquina.fechaFinalDisp}} -
+
+ Fecha final de disponibilidad +
+
+ {{ maquina.fechaFinalDisp }}
+
{% csrf_token %} diff --git a/templates/muestras/agregar.html b/templates/muestras/agregar.html index 254d60b..9347512 100644 --- a/templates/muestras/agregar.html +++ b/templates/muestras/agregar.html @@ -3,98 +3,98 @@ {% load lab_module_extras %} {% load humanize %} {% block head_others %} - + {% endblock %} {% block head_title %}{{ block.super }}{{ section.title }}{% endblock %} {% block content %} - - - - -
-
-

Información Básica

-
- -
-
-
-
- -
-
- Id Muestra -
-
- {{ muestra.id }} -
-
- -
-
- Nombre -
-
- {{ muestra.nombre }} -
-
- -
-
- Descripción -
-
- {{ muestra.descripcion }} -
-
- - - -
- -
-
-
- Imágen -
-
-
-
-
- - Imágen Muestra - -
-
-
-
-
-
-
-
- - -
-
-

Localización

-
-
- - {% csrf_token %} - {{ form }} -
-
- - Cancelar -
-
- -
-
+ + + + +
+
+

Información Básica

+
+ +
+
+
+
+ +
+
+ Id Muestra +
+
+ {{ muestra.id }} +
+
+ +
+
+ Nombre +
+
+ {{ muestra.nombre }} +
+
+ +
+
+ Descripción +
+
+ {{ muestra.descripcion }} +
+
+ + +
+ +
+
+
+ Imágen +
+
+
+
+
+ + Imágen Muestra + +
+
+
+
+
+
+
+
+ + +
+
+

Localización

+
+
+
+ {% csrf_token %} + {{ form }} +
+
+ + Cancelar +
+
+
+
+
diff --git a/templates/muestras/detalle_guardado.html b/templates/muestras/detalle_guardado.html index 4528ee2..d391935 100644 --- a/templates/muestras/detalle_guardado.html +++ b/templates/muestras/detalle_guardado.html @@ -3,88 +3,88 @@ {% load lab_module_extras %} {% load humanize %} {% block head_others %} - - - - + + + + {% endblock %} {% block head_title %}{{ block.super }}{{ section.title }}{% endblock %} {% block content %} - + -
- - - - - - - - - - - - - - - {% for muestras in detalle_completo %} - - - - - - - - - - - {% endfor %} - -
Id LaboratorioId AlmacenamientoNombre AlmacenamientoFila LabColumna LabBandejaFila GradillaColumna Gradilla
{{ muestras.muebleEnLab.idLaboratorio.idLaboratorio }}{{ muestras.alma.idSistema }}{{ muestras.alma.get_nombre }}{{ muestras.muebleEnLab.posX }}{{ muestras.muebleEnLab.posY }}{{ muestras.bandeja.posicion }}{{ muestras.posX }}{{ muestras.posY }}
-
+
+ + + + + + + + + + + + + + + {% for muestras in detalle_completo %} + + + + + + + + + + + {% endfor %} + +
Id LaboratorioId AlmacenamientoNombre AlmacenamientoFila LabColumna LabBandejaFila GradillaColumna Gradilla
{{ muestras.muebleEnLab.idLaboratorio.idLaboratorio }}{{ muestras.alma.idSistema }}{{ muestras.alma.get_nombre }}{{ muestras.muebleEnLab.posX }}{{ muestras.muebleEnLab.posY }}{{ muestras.bandeja.posicion }}{{ muestras.posX }}{{ muestras.posY }}
+
-
- -
+
+ +
{% endblock %} {% block scripts_others %} - - - - - + + + + + {% endblock %} \ No newline at end of file diff --git a/templates/muestras/listar.html b/templates/muestras/listar.html index 2e38975..3e9ecd7 100644 --- a/templates/muestras/listar.html +++ b/templates/muestras/listar.html @@ -3,90 +3,90 @@ {% load lab_module_extras %} {% load humanize %} {% block head_others %} - - - - + + + + {% endblock %} {% block head_title %}{{ block.super }}{{ section.title }}{% endblock %} {% block content %} - + -
- - - - - - - - - - - - - {% for muestra in detalle_completo %} - - - - - - - - - {% endfor %} - -
IdNombrePrecioUnidad BaseInventarioAcciones
{{ muestra.id }}{{ muestra.nombre }}{{ muestra.valor | currency }}{{ muestra.unidadBase }}{{ muestra.cant_muestras }} - {% if perms.LabModule.can_viewSample %} - - Ver - {% endif %} - {% if perms.LabModule.can_requestSample %} - - Solicitar - {% endif %} - {% if perms.LabModule.can_addSample %} - - Guardar - {% endif %} -
-
+
+ + + + + + + + + + + + + {% for muestra in detalle_completo %} + + + + + + + + + {% endfor %} + +
IdNombrePrecioUnidad BaseInventarioAcciones
{{ muestra.id }}{{ muestra.nombre }}{{ muestra.valor | currency }}{{ muestra.unidadBase }}{{ muestra.cant_muestras }} + {% if perms.LabModule.can_viewSample %} + + Ver + {% endif %} + {% if perms.LabModule.can_requestSample %} + + Solicitar + {% endif %} + {% if perms.LabModule.can_addSample %} + + Guardar + {% endif %} +
+
{% endblock %} {% block scripts_others %} - - - - - + + + + + {% endblock %} \ No newline at end of file diff --git a/templates/solicitudes/maquinas/detalle.html b/templates/solicitudes/maquinas/detalle.html index 874178d..4492855 100644 --- a/templates/solicitudes/maquinas/detalle.html +++ b/templates/solicitudes/maquinas/detalle.html @@ -100,13 +100,14 @@

Información Solicitud

{% csrf_token %} -
-
- {% if not section|lookup:'aprobar' is None %} - - {% endif %} - Cancelar +
+
+ {% if not section|lookup:'aprobar' is None %} + + {% endif %} + Cancelar +
-
{% endblock %}