#encoding:utf-8 # Create your views here. from __future__ import unicode_literals import json from operator import attrgetter from datetime import datetime from django.contrib import messages from django.contrib.auth.decorators import login_required, permission_required, user_passes_test from django.contrib.auth.models import User, Group from django.core.exceptions import PermissionDenied, ImproperlyConfigured from django.core.mail import send_mail from django.core.urlresolvers import reverse from django.db.models import Max, Q, Count from django.http import HttpResponseRedirect, HttpResponse, Http404 from django.shortcuts import render_to_response from django.template.response import TemplateResponse from django.template import RequestContext from django.utils.decorators import method_decorator from django.views.generic import ListView, DetailView, View from django.views.generic.base import TemplateView from django.views.generic.edit import CreateView, UpdateView, FormView #import paginator as paginator from pure_pagination import Paginator, EmptyPage, PageNotAnInteger from rest_framework import status from rest_framework.generics import ListAPIView from rest_framework.response import Response from rest_framework.views import APIView from rest_framework.permissions import IsAuthenticated from oficios.forms import * from oficios.models import * from directorio.models import * from oficios.serializers import UserSerializer, OficioSerializer, OficiosRecibidosSerializer, \ OficiosRecibidosCCPSerializer, OficiosAsignadosSerializer, OficiosAsignadosCCPSerializer, OficiosEnviadosSerializer from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger def tiene_adscripcion(user): return hasattr(user, 'funcionario') or hasattr(user, 'adscripcion') def es_admin_dependencia(user): g = Group.objects.get(name='admindep') return g in user.groups.all() def get_dependencias_hijas(adscripcion): dependencias = [adscripcion] for d in adscripcion.adscripcion_set.all(): for h in get_dependencias_hijas(d): dependencias.append(h) return dependencias class DataTableView(APIView): model = None serializer = None queryset = None def get_queryset(self): if self.queryset: return self.queryset elif self.model: self.queryset = self.model.objects.all() return self.queryset else: raise ImproperlyConfigured('Debe especificar un queryset o un modelo') def get_serializer(self): if not self.serializer: raise ImproperlyConfigured('Debe especificar un serializer para la vista') else: return self.serializer def get_filter(self, filter_string, queryset): raise ImproperlyConfigured('Debe implementar la función get_filter') def get(self, request, *args, **kwargs): queryset = self.get_queryset() iTotalRecords = queryset.count() sSearch = request.GET.get('sSearch') if sSearch: queryset = self.get_filter(sSearch, queryset) iTotalDisplayRecords = queryset.count() sEcho = request.GET.get('sEcho') iDisplayStart = request.GET.get('iDisplayStart') if iDisplayStart: queryset = queryset[iDisplayStart:] iDisplayLength = request.GET.get('iDisplayLength') if iDisplayLength: queryset = queryset[:iDisplayLength] self.serializer = self.get_serializer() serializer = self.serializer(queryset, many=True) data = { "sEcho": sEcho, "iTotalRecords": iTotalRecords, "iTotalDisplayRecords": iTotalDisplayRecords, "aaData": serializer.data } return Response(data, status=status.HTTP_200_OK) ERROR_MESSAGE = 'Por favor, corrija el siguiente error:' def get_perm_oficio(oficio, usuario): """ Este método determina si el oficio dado es accesible para el usuario dado. True cuando el oficio ha sido asignado o enviado al usuario así cuando el usuario de captura del oficio es el usuario en cuestión. """ permiso = False # Verificar si el oficio fue enviado al usuario if oficio.envio_set.exists(): for envio in oficio.envio_set.all(): if envio.usuarios_reciben.filter(username=usuario.username): permiso = True # Verificar si el oficio fue asignado al usuario if oficio.asignacion_set.exists(): if oficio.asignacion_set.filter(usuarios_asignados=usuario).exists(): permiso = True # Verificar si el oficio fue creado por el usuario if oficio.propietario == usuario: permiso = True return permiso class MisOficios(TemplateView): template_name = 'oficios/mis_oficios.html' def get_context_data(self, **kwargs): context = super(MisOficios, self).get_context_data(**kwargs) context['oficios'] = 'active' context['oficio_bc'] = 'active' return context class MisOficiosAPIView(DataTableView): serializer = OficioSerializer queryset = Oficio.objects.all() def get_filter(self, filter_string, queryset): return queryset.filter( Q(no_oficio__icontains=filter_string) | Q(fecha_oficio__icontains=filter_string) | Q(folio__icontains=filter_string) | Q(asunto__icontains=filter_string) | Q(dedicado__icontains=filter_string) ) def get_queryset(self): return Oficio.objects.filter(Q(propietario=self.request.user,persona_registro=self.request.user.id)) class MisOficiosAdminDependencia(TemplateView): """ Vista que muestra una lista de los oficios capturados por la dependencia del usuario. Debe pertenecer al grupo admin_dependencia. """ template_name = 'oficios/misoficios_admin_dependencia.html' @method_decorator(user_passes_test(tiene_adscripcion)) @method_decorator(user_passes_test(es_admin_dependencia)) @method_decorator(login_required) def dispatch(self, *args, **kwargs): return super(MisOficiosAdminDependencia, self).dispatch(*args, **kwargs) def get_context_data(self, **kwargs): context = super(MisOficiosAdminDependencia, self).get_context_data(**kwargs) context['oficios'] = 'active' context['oficio_bc'] = 'active' return context class MisOficiosAdminDependenciaAPIView(DataTableView): serializer = OficioSerializer permission_classes = (IsAuthenticated,) def get_filter(self, filter_string, queryset): return queryset.filter( Q(no_oficio__icontains=filter_string) | Q(asunto__icontains=filter_string) | Q(descripcion__icontains=filter_string) ) def get_queryset(self): if not tiene_adscripcion(self.request.user): raise Exception('El usuario No tiene asociada una dependencia') if not es_admin_dependencia(self.request.user): raise Exception('No tiene los permisos necesarios para ver esta página.') if hasattr(self.request.user, 'funcionario'): adscripcion = self.request.user.funcionario.adscripcion elif hasattr(self.request.user, 'adscripcion'): adscripcion = self.request.user.adscripcion dependencias = get_dependencias_hijas(adscripcion) return Oficio.objects.filter( Q(propietario__funcionario__adscripcion__in=dependencias) | Q(propietario__adscripcion__in=dependencias) ) #original de huan class OficioDetail(DetailView): """ Vista que muestra los detalles de un oficio. Si get_perm_oficio es falso, debe mostrar un error 403 """ template_name = 'oficios/oficio_detail.html' model = Oficio @method_decorator(login_required) def dispatch(self, *args, **kwargs): self.object = self.get_object() # Verificar si el usuario tiene permiso sobre el oficio if not get_perm_oficio(self.object, self.request.user): raise PermissionDenied return super(OficioDetail, self).dispatch(*args, **kwargs) def get_context_data(self, **kwargs): context = super(OficioDetail, self).get_context_data(**kwargs) context['oficios'] = 'active' context['envios'] = self.object.envio_set.all() context['asignaciones'] = self.object.asignacion_set.all() recepcioc = RecepcionCopia.objects.filter(envio__oficio=self.object) context['copias'] = recepcioc return context #hibrido perverso class OficioDetail2(DetailView): """ Vista que muestra los detalles de un oficio. Si get_perm_oficio es falso, debe mostrar un error 403 """ template_name = 'oficios/oficio_detail2.html' model = Oficio @method_decorator(login_required) def dispatch(self, *args, **kwargs): self.object = self.get_object() # Verificar si el usuario tiene permiso sobre el oficio return super(OficioDetail2, self).dispatch(*args, **kwargs) def get_context_data(self, **kwargs): context = super(OficioDetail2, self).get_context_data(**kwargs) context['oficios'] = 'active' context['envios'] = self.object.envio_set.all() context['asignaciones'] = self.object.asignacion_set.all() return context class OficioCreate(CreateView): """ Vista para crear un oficio. El usuario que crea el oficio será asignado a la propiedad propietario del objeto oficio. Folio será autoincrementable para el usuario. """ model = Oficio form_class = OficioForm def get(self, request, *args, **kwargs): initial = {} folio = 1 oficios = Oficio.objects.filter(propietario=self.request.user) if oficios.exists(): folio = 1 + oficios.filter(propietario=self.request.user).aggregate(Max('folio'))['folio__max'] initial['folio'] = folio self.initial = initial return super(OficioCreate, self).get(self, request, *args, **kwargs) def form_valid(self, form): ###Agregado oficios1 = Oficio.objects.filter(propietario=self.request.user) if oficios1.exists(): folio = 1 + Oficio.objects.filter(propietario=self.request.user).aggregate(Max('folio'))['folio__max'] else: folio = 1 ### form.instance.propietario = self.request.user form.instance.persona_registro = self.request.user.id ###Agregado form.instance.folio = folio ### messages.success(self.request, 'Oficio %s agregado correctamente' % form.instance) return super(OficioCreate, self).form_valid(form) def form_invalid(self, form): messages.error(self.request, ERROR_MESSAGE) return super(OficioCreate, self).form_invalid(form) def get_context_data(self, **kwargs): context = super(OficioCreate, self).get_context_data(**kwargs) context['oficios'] = 'active' return context class OficioUpdate(UpdateView): """ Vista para actualizar el oficio. """ model = Oficio form_class = OficioForm @method_decorator(login_required) @method_decorator(permission_required('oficios.change_oficio', raise_exception=True)) def dispatch(self, *args, **kwargs): self.object = self.get_object() if not self.object.propietario == self.request.user or self.object.envio_set.exists(): raise PermissionDenied return super(OficioUpdate, self).dispatch(*args, **kwargs) def form_valid(self, form): messages.success(self.request, 'Oficio %s actualizado correctamente' % form.instance) return super(OficioUpdate, self).form_valid(form) def form_invalid(self, form): messages.error(self.request, ERROR_MESSAGE) return super(OficioUpdate, self).form_invalid(form) def get_context_data(self, **kwargs): context = super(OficioUpdate, self).get_context_data(**kwargs) context['oficios'] = 'active' return context class OficiosRecibidos(TemplateView): template_name = 'oficios/oficios_recibidos.html' # validando la peticion @method_decorator(login_required) def dispatch(self, request, *args, **kwargs): return super(OficiosRecibidos, self).dispatch(request, *args, **kwargs) #Se encarga de pasarle el contexto (context) a la vista. def get_context_data(self, **kwargs): context = super(OficiosRecibidos, self).get_context_data(**kwargs) context['oficios'] = 'active' context['bandeja_entrada_bc'] = 'active' return context class OficiosRecibidosAPIView(DataTableView): serializer = OficiosRecibidosSerializer def get_queryset(self): return self.request.user.recepcion_set.all().order_by('envio') def get_filter(self, filter_string, queryset): return queryset.filter( Q(envio__usuario_envia__adscripcion__nombre__icontains=filter_string) | Q(envio__usuario_envia__empresa__nombre__icontains=filter_string) | Q(envio__usuario_envia__funcionario__nombre__icontains=filter_string) | Q(envio__usuario_envia__funcionario__apellido_paterno__icontains=filter_string) | Q(envio__usuario_envia__funcionario__apellido_materno__icontains=filter_string) | Q(envio__usuario_envia__personafisica__nombre__icontains=filter_string) | Q(envio__usuario_envia__personafisica__apellido_paterno__icontains=filter_string) | Q(envio__usuario_envia__personafisica__apellido_materno__icontains=filter_string) | Q(envio__usuario_envia__first_name=filter_string) | Q(envio__usuario_envia__last_name=filter_string) | Q(envio__oficio__no_oficio__icontains=filter_string) | Q(envio__oficio__asunto__icontains=filter_string) | Q(envio__oficio__descripcion__icontains=filter_string) ) class OficiosEnviadosAPIView(DataTableView): serializer = OficiosEnviadosSerializer def get_queryset(self): return self.request.user.recepcion_set.all().order_by('envio') def get_filter(self, filter_string, queryset): return queryset.filter( Q(usuario_recibe__adscripcion__nombre__icontains=filter_string) | Q(usuario_recibe__empresa__nombre__icontains=filter_string) | Q(usuario_recibe__funcionario__nombre__icontains=filter_string) | Q(usuario_recibe__funcionario__apellido_paterno__icontains=filter_string) | Q(usuario_recibe__funcionario__apellido_materno__icontains=filter_string) | Q(usuario_recibe__personafisica__nombre__icontains=filter_string) | Q(usuario_recibe__personafisica__apellido_paterno__icontains=filter_string) | Q(usuario_recibe__personafisica__apellido_materno__icontains=filter_string) | Q(usuario_recibe__first_name=filter_string) | Q(usuario_recibe__last_name=filter_string) | Q(envio__oficio__no_oficio__icontains=filter_string) | Q(envio__oficio__asunto__icontains=filter_string) | Q(envio__oficio__descripcion__icontains=filter_string) ) class OficiosRecibidosCCPAPIView(DataTableView): serializer = OficiosRecibidosCCPSerializer def get_queryset(self): return self.request.user.recepcioncopia_set.all().order_by('envio') def get_filter(self, filter_string, queryset): return queryset.filter( Q(envio__usuario_envia__adscripcion__nombre__icontains=filter_string) | Q(envio__usuario_envia__empresa__nombre__icontains=filter_string) | Q(envio__usuario_envia__funcionario__nombre__icontains=filter_string) | Q(envio__usuario_envia__funcionario__apellido_paterno__icontains=filter_string) | Q(envio__usuario_envia__funcionario__apellido_materno__icontains=filter_string) | Q(envio__usuario_envia__personafisica__nombre__icontains=filter_string) | Q(envio__usuario_envia__personafisica__apellido_paterno__icontains=filter_string) | Q(envio__usuario_envia__personafisica__apellido_materno__icontains=filter_string) | Q(envio__usuario_envia__first_name=filter_string) | Q(envio__usuario_envia__last_name=filter_string) | Q(envio__oficio__no_oficio__icontains=filter_string) | Q(envio__oficio__asunto__icontains=filter_string) | Q(envio__oficio__descripcion__icontains=filter_string) ) class OficiosRecibidosAdminDependencia(TemplateView): """ Vista para ver los oficios que han sido enviados a la dependencia. """ template_name = 'oficios/oficios_recibidos2.html' @method_decorator(user_passes_test(tiene_adscripcion)) @method_decorator(user_passes_test(es_admin_dependencia)) @method_decorator(login_required) def dispatch(self, *args, **kwargs): return super(OficiosRecibidosAdminDependencia, self).dispatch(*args, **kwargs) def get_context_data(self, **kwargs): context = super(OficiosRecibidosAdminDependencia, self).get_context_data(**kwargs) context['oficios'] = 'active' context['bandeja_entrada_bc'] = 'active' return context class OficiosRecibidosAdminDependenciaAPIView(DataTableView): serializer = OficiosRecibidosSerializer permission_classes = (IsAuthenticated,) def get_filter(self, filter_string, queryset): return queryset.filter( Q(envio__usuario_envia__adscripcion__nombre__icontains=filter_string) | Q(envio__usuario_envia__empresa__nombre__icontains=filter_string) | Q(envio__usuario_envia__funcionario__nombre__icontains=filter_string) | Q(envio__usuario_envia__funcionario__apellido_paterno__icontains=filter_string) | Q(envio__usuario_envia__funcionario__apellido_materno__icontains=filter_string) | Q(envio__usuario_envia__personafisica__nombre__icontains=filter_string) | Q(envio__usuario_envia__personafisica__apellido_paterno__icontains=filter_string) | Q(envio__usuario_envia__personafisica__apellido_materno__icontains=filter_string) | Q(envio__usuario_envia__first_name__icontains=filter_string) | Q(envio__usuario_envia__last_name__icontains=filter_string) | Q(envio__oficio__no_oficio__icontains=filter_string) | Q(envio__oficio__asunto__icontains=filter_string) | Q(envio__oficio__descripcion__icontains=filter_string) ) def get_queryset(self): if not tiene_adscripcion(self.request.user): raise Exception('El usuario No tiene asociada una dependencia') if not es_admin_dependencia(self.request.user): raise Exception('No tiene los permisos necesarios para ver esta página.') if hasattr(self.request.user, 'funcionario'): adscripcion = self.request.user.funcionario.adscripcion elif hasattr(self.request.user, 'adscripcion'): adscripcion = self.request.user.adscripcion dependencias = get_dependencias_hijas(adscripcion) return Recepcion.objects.filter( Q(usuario_recibe__funcionario__adscripcion__in=dependencias) | Q(usuario_recibe__adscripcion__in=dependencias) ) class MarcarLeido(View): """docstring for MarcarLeido""" @method_decorator(login_required) def dispatch(self, *args, **kwargs): return super(MarcarLeido, self).dispatch(*args, **kwargs) def get(self, request, *args, **kwargs): x = request.GET.get('ccp') if x == '1': recepcion = RecepcionCopia.objects.get(pk=request.GET.get('recepcion')) else: recepcion = Recepcion.objects.get(pk=request.GET.get('recepcion')) if not recepcion.usuario_recibe == request.user: raise PermissionDenied if not recepcion.leido is True: recepcion.leido = True recepcion.fecha_leido = datetime.now() recepcion.save() return HttpResponse('ok') #original huan class RecepcionDetail(DetailView): """docstring for RecepcionDetail""" model = Recepcion template_name = 'oficios/recepcion_detail.html' @method_decorator(login_required) def dispatch(self, *args, **kwargs): return super(RecepcionDetail, self).dispatch(*args, **kwargs) def get(self, request, *args, **kwargs): self.object = self.get_object() recepcion = self.object recepcion.leido = True recepcion.save() if not request.user == self.object.usuario_recibe: raise PermissionDenied return super(RecepcionDetail, self).get(request, *args, **kwargs) def get_context_data(self, **kwargs): context = super(RecepcionDetail, self).get_context_data(**kwargs) recepcion = Recepcion.objects.get(id=self.kwargs['pk']) try: respuesta = Oficio.objects.get(oficio_responde=recepcion.envio.oficio) except Oficio.DoesNotExist: respuesta = None ##Inicia Apartado para generar el boton de siguiente folio_actual = int(self.object.id) f_s = self.request.GET.get('s') if f_s != None: siguiente = f_s else: siguiente = 0 todas_recepciones = self.request.user.recepcion_set.all().order_by('envio') if int(todas_recepciones[:1].get().id) == int(folio_actual): recepcion_siguiente = 0 contador = 0 for t in todas_recepciones: if contador == 1: recepcion_siguiente = t.id if contador == 2: siguiente = t.id contador += 1 elif todas_recepciones[:1].get().id > folio_actual and siguiente == 0: recepcion_siguiente = todas_recepciones[:1].get().id elif siguiente != 0: todas_recepciones = self.request.user.recepcion_set.all().filter(id__lt=folio_actual).order_by('envio') # Recepcion.objects.filter(usuario_asignado=self.request.user,id__lt=folio_actual).order_by('-id') if todas_recepciones.count() > 0: contador = 0 for t in todas_recepciones: if contador == 0: recepcion_siguiente = t.id if contador == 1: siguiente = t.id contador += 1 else: recepcion_siguiente = 0 else: recepcion_siguiente = siguiente for t in todas_recepciones: if t.id < siguiente: siguiente = t.id context['oficios'] = 'active' context['form_respuesta'] = OficioForm context['respuesta'] = respuesta context["recepcion_id"] = recepcion_siguiente context["anterior"] = folio_actual context['siguiente'] = siguiente usuario = self.request.user if usuario.is_staff and recepcion.envio.oficio.persona_registro==usuario.id: # Este fragmento valida que el usuario tenga privilegios bandera = True else: bandera = False context["permiso"] = bandera context["id_eliminar"] = self.kwargs["pk"] context["bandera"]= bandera return context ###Elimina la recepcion y todos los oficios relacionados## class EliminarRecepcionView(View): """docstring for RecepcionDetail""" model = Recepcion #template_name = 'oficios/recepcion_detail.html' @method_decorator(login_required) def dispatch(self, *args, **kwargs): return super(EliminarRecepcionView, self).dispatch(*args, **kwargs) def get(self, request, *args, **kwargs): # self.object = self.get_object() # recepcion = self.object # recepcion.leido = True # recepcion.save() # if not request.user == self.object.usuario_recibes: # raise PermissionDenied recepcion = Recepcion.objects.get(pk=self.kwargs['pk']) if recepcion.envio.oficio.persona_registro == self.request.user.id: envio = Envio.objects.filter(id=recepcion.envio.id) respuesta = Oficio.objects.filter(oficio_responde=recepcion.envio.oficio) asignaciones = Asignacion.objects.filter(oficio=recepcion.envio.oficio) for a in asignaciones: recepcionac = RecepcionAsignacionCopia.objects.filter(asignacion=a).delete() asignacion_oficio = RecepcionAsignacion.objects.filter(asignacion=a).delete() recepcion.delete() envio.delete() respuesta.delete() asignaciones.delete() oficio = Oficio.objects.filter(id = recepcion.envio.oficio.id).delete() messages.success(self.request,"Registro Eliminado") return HttpResponseRedirect(reverse('oficios:oficios-recibidos')) else: messages.error(self.request, "No se puede eliminar un oficio de otro propietario") return HttpResponseRedirect(reverse('oficios:oficios-recibidos')) def get_context_data(self, **kwargs): context = super(EliminarRecepcionView, self).get_context_data(**kwargs) return context class RecepcionCopiaDetail(DetailView): """docstring for RecepcionDetail""" model = RecepcionCopia # template_name = 'oficios/recepcion_detail.html' @method_decorator(login_required) def dispatch(self, *args, **kwargs): return super(RecepcionCopiaDetail, self).dispatch(*args, **kwargs) def get(self, request, *args, **kwargs): self.object = self.get_object() if not request.user == self.object.usuario_recibe: raise PermissionDenied return super(RecepcionCopiaDetail, self).get(request, *args, **kwargs) def get_context_data(self, **kwargs): context = super(RecepcionCopiaDetail, self).get_context_data(**kwargs) context['oficios'] = 'active' ##Inicia Apartado apra Boton siguiente folio_actual = int(self.object.id) f_s = self.request.GET.get('s') if f_s != None: siguiente = f_s else: siguiente = 0 todas_recepciones = self.request.user.recepcioncopia_set.all().order_by('envio') if int(todas_recepciones[:1].get().id) == int(folio_actual): recepcion_siguiente = 0 contador = 0 for t in todas_recepciones: if contador == 1: recepcion_siguiente = t.id if contador == 2: siguiente = t.id contador += 1 elif todas_recepciones[:1].get().id > folio_actual and siguiente == 0: recepcion_siguiente = todas_recepciones[:1].get().id elif siguiente != 0: todas_recepciones = self.request.user.recepcioncopia_set.all().filter(id__lt=folio_actual).order_by('envio') # Recepcion.objects.filter(usuario_asignado=self.request.user,id__lt=folio_actual).order_by('-id') if todas_recepciones.count() > 0: contador = 0 for t in todas_recepciones: if contador == 0: recepcion_siguiente = t.id if contador == 1: siguiente = t.id contador += 1 else: recepcion_siguiente = 0 else: recepcion_siguiente = siguiente for t in todas_recepciones: if t.id < siguiente: siguiente = t.id context["recepcion_id"] = recepcion_siguiente context["anterior"] = folio_actual context['siguiente'] = siguiente return context #hibrido perverso class RecepcionDetail2(DetailView): """docstring for RecepcionDetail""" model = Recepcion template_name = 'oficios/recepcion_detail2.html' @method_decorator(login_required) def dispatch(self, *args, **kwargs): return super(RecepcionDetail2, self).dispatch(*args, **kwargs) def get(self, request, *args, **kwargs): self.object = self.get_object() recepcion = self.object recepcion.leido=True recepcion.save() return super(RecepcionDetail2, self).get(request, *args, **kwargs) def get_context_data(self, **kwargs): context = super(RecepcionDetail2, self).get_context_data(**kwargs) context['oficios'] = 'active' context['form_respuesta'] = OficioForm return context class EnvioDetail(DetailView): """ Vista para ver un envio de oficio. """ model = Envio @method_decorator(login_required) def dispatch(self, *args, **kwargs): # verificar si el envio es para el usuario. self.object = self.get_object() if not self.object.usuarios_reciben.filter(username=self.request.user.username): if not self.object.usuario_envia == self.request.user: raise PermissionDenied return super(EnvioDetail, self).dispatch(*args, **kwargs) def get_context_data(self, **kwargs): context = super(EnvioDetail, self).get_context_data(**kwargs) ##Inicia Apartado apra Boton siguiente folio_actual = int(self.object.id) f_s = self.request.GET.get('s') if f_s != None: siguiente = f_s else: siguiente = 0 todas_recepciones = Envio.objects.filter(usuario_envia=self.request.user).exclude(oficio__oficio_responde_id__gt=0 ) if int(todas_recepciones[:1].get().id) == int(folio_actual): recepcion_siguiente = 0 contador = 0 for t in todas_recepciones: if contador == 1: recepcion_siguiente = t.id if contador == 2: siguiente = t.id contador += 1 elif todas_recepciones[:1].get().id > folio_actual and siguiente == 0: recepcion_siguiente = todas_recepciones[:1].get().id elif siguiente != 0: todas_recepciones = Envio.objects.filter(usuario_envia=self.request.user).filter(id__lt=folio_actual).exclude(oficio__oficio_responde_id__gt=0) # Recepcion.objects.filter(usuario_asignado=self.request.user,id__lt=folio_actual).order_by('-id') if todas_recepciones.count() > 0: contador = 0 for t in todas_recepciones: if contador == 0: recepcion_siguiente = t.id if contador == 1: siguiente = t.id contador += 1 else: recepcion_siguiente = 0 else: recepcion_siguiente = siguiente for t in todas_recepciones: if t.id < siguiente: siguiente = t.id context['oficios'] = 'active' context["recepcion_id"] = recepcion_siguiente context["anterior"] = folio_actual context['siguiente'] = siguiente return context class EnvioCreate(CreateView): """ Vista para enviar un oficio. """ model = Envio form_class = EnvioForm @method_decorator(login_required) @method_decorator(permission_required('oficios.add_envio', raise_exception=True)) def dispatch(self, *args, **kwargs): return super(EnvioCreate, self).dispatch(*args, **kwargs) def get(self, request, *args, **kwargs): if request.GET.get('oficio'): initial = {} oficio = Oficio.objects.get(pk=request.GET.get('oficio')) # if not oficio.propietario == request.user: # raise PermissionDenied initial['hoficio'] = oficio.id self.no_oficio = oficio.no_oficio self.initial = initial return super(EnvioCreate, self).get(request, *args, **kwargs) def form_valid(self, form): form.instance.usuario_envia = self.request.user form.instance.oficio = Oficio.objects.get(pk=form.cleaned_data['hoficio']) self.object = form.save(commit=False) self.object.save() for usuario in form.cleaned_data['para'].split(','): u = User.objects.get(username=usuario) recepcion = Recepcion(envio=self.object, usuario_recibe=u) recepcion.save() uapp = self.request.user.first_name cuapp = uapp.replace("ÁÉÍÓÚáéíóúÑñ", "AEIOUaeiouNn") uapm = self.request.user.last_name cuapm = uapm.replace("ÁÉÍÓÚáéíóúÑñ", "AEIOUaeiouNn") asunto = form.instance.oficio.asunto asu = asunto.replace("ÁÉÍÓÚáéíóúÑñ", "AEIOUaeiouNn") subject = self.request.POST.get('subject', 'Nuevo Oficio Enviado') message = self.request.POST.get('message', 'Se le ha enviado un nuevo oficio, \n con fecha: '+str(form.instance.oficio.fecha_oficio)+' \n de parte de: '+cuapp+' '+cuapm+',\n con asunto: '+asu) from_email = self.request.POST.get('from_email', 'dgtic@tabasco.gob.mx') var_email = str(u.email) if subject and message and from_email: try: send_mail(subject, message, from_email, [var_email]) messages.success(self.request, 'Se envio exitosamente el correo') except Exception: #messages.error(self.request, 'error: '+str(e)) pass ccp = form.cleaned_data.get('ccp') if ccp: for usuarios in ccp.split(','): u = User.objects.get(username=usuarios) recepcionc = RecepcionCopia(envio=self.object, usuario_recibe=u) recepcionc.save() messages.success(self.request, 'El oficio ha sido enviado') return HttpResponseRedirect(reverse('oficios:asignacion-list')) def form_invalid(self, form): messages.error(self.request, ERROR_MESSAGE) return super(EnvioCreate, self).form_invalid(form) def get_context_data(self, **kwargs): context = super(EnvioCreate, self).get_context_data(**kwargs) context['oficios'] = 'active' context['oficio'] = self.no_oficio return context class EnvioMultipleCreate(FormView): """ Vista para enviar un oficio. """ model = Envio form_class = EnvioForm template_name = 'oficios/envio_multiple_form.html' #@method_decorator(login_required) #@method_decorator(permission_required('oficios.add_envio', raise_exception=True)) # def dispatch(self, *args, **kwargs): # return super(EnvioMultipleCreate, self).dispatch(*args, **kwargs) def get(self, request, *args, **kwargs): if request.GET.get('oficio'): initial = {} # oficio = Oficio.objects.get(pk=request.GET.get('oficio')) # # if not oficio.propietario == request.user: # raise PermissionDenied # # initial['hoficio'] = oficio.id # self.no_oficio = oficio.no_oficio self.initial = initial return super(EnvioMultipleCreate, self).get(request, *args, **kwargs) def post(self, request, *args, **kwargs): oficios = self.request.POST.get('oficios').split(',') for o_id in oficios: envio = Envio() obj_oficio = Oficio.objects.get(pk=o_id) envio.usuario_envia = self.request.user envio.oficio = obj_oficio envio.save() for usuario in self.request.POST.get('para').split(','): u = User.objects.get(username=usuario) recepcion = Recepcion(envio=envio, usuario_recibe=u) recepcion.save() uapp = self.request.user.first_name cuapp = uapp.replace("ÁÉÍÓÚáéíóúÑñ", "AEIOUaeiouNn") uapm = self.request.user.last_name cuapm = uapm.replace("ÁÉÍÓÚáéíóúÑñ", "AEIOUaeiouNn") asunto = obj_oficio.asunto asu = asunto.replace("ÁÉÍÓÚáéíóúÑñ", "AEIOUaeiouNn") subject = self.request.POST.get('subject', 'Nuevo Oficio Enviado') message = self.request.POST.get('message', 'Se le ha enviado un nuevo oficio, \n con fecha: ' + str( obj_oficio.fecha_oficio) + ' \n de parte de: ' + cuapp + ' ' + cuapm + ',\n con asunto: ' + asu) from_email = self.request.POST.get('from_email', 'dgtic@tabasco.gob.mx') var_email = str(u.email) if subject and message and from_email: try: send_mail(subject, message, from_email, [var_email]) messages.success(self.request, 'Se envio exitosamente el correo') except Exception: # messages.error(self.request, 'error: '+str(e)) pass ccp = self.request.POST.get('ccp') if ccp: for usuarios in ccp.split(','): u = User.objects.get(username=usuarios) recepcionc = RecepcionCopia(envio=envio, usuario_recibe=u) recepcionc.save() messages.success(self.request, 'El oficio ha sido enviado') return HttpResponseRedirect(reverse('oficios:misoficios')) #def form_valid(self, form): # form.instance.usuario_envia = self.request.user # form.instance.oficio = Oficio.objects.get(pk=form.cleaned_data['hoficio']) # self.object = form.save(commit=False) # self.object.save() # # for usuario in form.cleaned_data['para'].split(','): # u = User.objects.get(username=usuario) # recepcion = Recepcion(envio=self.object, usuario_recibe=u) # recepcion.save() # # uapp = self.request.user.first_name # cuapp = uapp.replace("ÁÉÍÓÚáéíóúÑñ", "AEIOUaeiouNn") # uapm = self.request.user.last_name # cuapm = uapm.replace("ÁÉÍÓÚáéíóúÑñ", "AEIOUaeiouNn") # asunto = form.instance.oficio.asunto # asu = asunto.replace("ÁÉÍÓÚáéíóúÑñ", "AEIOUaeiouNn") # subject = self.request.POST.get('subject', 'Nuevo Oficio Enviado') # message = self.request.POST.get('message', 'Se le ha enviado un nuevo oficio, \n con fecha: '+str(form.instance.oficio.fecha_oficio)+' \n de parte de: '+cuapp+' '+cuapm+',\n con asunto: '+asu) # from_email = self.request.POST.get('from_email', 'dgtic@tabasco.gob.mx') # var_email = str(u.email) # if subject and message and from_email: # try: # send_mail(subject, message, from_email, [var_email]) # messages.success(self.request, 'Se envio exitosamente el correo') # # except Exception: # #messages.error(self.request, 'error: '+str(e)) # pass # # ccp = form.cleaned_data.get('ccp') # # if ccp: # # for usuarios in ccp.split(','): # # u = User.objects.get(username=usuarios) # # recepcionc = RecepcionCopia(envio=self.object, usuario_recibe=u) # # recepcionc.save() # # # # messages.success(self.request, 'El oficio ha sido enviado') # # return HttpResponseRedirect(reverse('oficios:asignacion-list')) # def form_invalid(self, form): # messages.error(self.request, ERROR_MESSAGE) # return super(EnvioMultipleCreate, self).form_invalid(form) def get_context_data(self, **kwargs): context = super(EnvioMultipleCreate, self).get_context_data(**kwargs) context['oficios'] = 'active' context['oficio_list'] = self.request.GET.get('oficio') return context class OficiosEnviados(ListView): """ Vista para ver los oficios que el usuario ha enviado. """ model = Envio @method_decorator(login_required) def dispatch(self, *args, **kwargs): return super(OficiosEnviados, self).dispatch(*args, **kwargs) def get_queryset(self): return Envio.objects.filter(usuario_envia=self.request.user)[:100] def get_context_data(self, **kwargs): context = super(OficiosEnviados, self).get_context_data(**kwargs) context['oficios'] = 'active' context['oficios_enviados_bc'] = 'active' return context class OficioRecibir(CreateView): """ Vista para dar de alta un oficio recibido. """ model = Envio form_class = RecepcionForm template_name = 'oficios/oficiorecibir_form.html' @method_decorator(login_required) @method_decorator(permission_required('oficios.add_envio')) def dispatch(self, *args, **kwargs): return super(OficioRecibir, self).dispatch(*args, **kwargs) def form_valid(self, form): usuario_envia = User.objects.get(username=form.cleaned_data['de']) form.instance.usuario_envia = usuario_envia self.object = form.save(commit=False) self.object.save() recepcion = Recepcion(envio=self.object, usuario_recibe=self.request.user) recepcion.save() messages.success(self.request, 'Oficio marcado como recibido satisfactoriamente.') return HttpResponseRedirect(self.get_success_url()) def form_invalid(self, form): messages.error(self.request, ERROR_MESSAGE) return super(OficioRecibir, self).form_invalid(form) def get_context_data(self, **kwargs): context = super(OficioRecibir, self).get_context_data(**kwargs) context['oficios'] = 'active' return context @login_required def OficioRecepcion(request): if request.method == 'POST': recepcion_form = RecepcionForm(request.POST, request.FILES) oficio_form = OficioForm(request.POST, request.FILES) # if not oficio_form.is_valid(): # return Httpresponse(json.dumps(oficio_form.errors)) # if not recepcion_form.is_valid(): # return HttpResponse(json.dumps(recepcion_form.errors)) if oficio_form.is_valid() and recepcion_form.is_valid(): folio = 1 propietario = User.objects.get(username=recepcion_form.cleaned_data['hde']) oficios1 = Oficio.objects.filter(propietario=propietario) if oficios1.exists(): folio += 1 + Oficio.objects.filter(propietario=propietario).aggregate(Max('folio'))['folio__max'] oficio_form.instance.propietario = propietario oficio_form.instance.folio = folio oficio_form.instance.persona_registro = request.user.id oficio_form.instance.save() ofi = oficio_form.save() recepcion_form.instance.usuario_envia = propietario recepcion_form.instance.oficio = ofi recepcion_form.instance.save() fecha = recepcion_form.cleaned_data['fecha_recepcion'] recepcion = Recepcion( envio=recepcion_form.instance, usuario_recibe=request.user, fecha_recepcion=fecha ) recepcion.save() messages.success(request, 'Oficio marcado como recibido satisfactoriamente.') return HttpResponseRedirect('/oficios/inbox/') else: messages.error(request, ERROR_MESSAGE) else: recepcion_form = RecepcionForm() oficio_form = OficioForm() oficios = 'active' return render_to_response( 'oficios/oficiorecibir_form2.html', { 'oficios': oficios, 'oficio_form': oficio_form, 'recepcion_form': recepcion_form }, context_instance=RequestContext(request) ) class MarcarRevisado(View): """docstring for MarcarRevisado""" @method_decorator(login_required) def dispatch(self, *args, **kwargs): return super(MarcarRevisado, self).dispatch(*args, **kwargs) def get(self, request, *args, **kwargs): x = request.GET.get('ccp') if x == '1': asignacion = RecepcionAsignacionCopia.objects.get(pk=request.GET.get('asignacion')) else: asignacion = RecepcionAsignacion.objects.get(pk=request.GET.get('asignacion')) if not request.user == asignacion.usuario_asignado: raise PermissionDenied if not asignacion.revisado is True: asignacion.revisado = True asignacion.fecha_revisado = datetime.now() asignacion.save() return HttpResponse('ok') class AsignacionDetail(DetailView): """ Vista para ver el detalle de una asignación de oficio """ model = Asignacion template_name = 'oficios/asignacion_detail.html' @method_decorator(login_required) def dispatch(self, *args, **kwargs): return super(AsignacionDetail, self).dispatch(*args, **kwargs) def get_context_data(self, **kwargs): context = super(AsignacionDetail, self).get_context_data(**kwargs) asignacion = Asignacion.objects.get(id=self.kwargs['pk']) try: respuesta = Oficio.objects.get(oficio_responde=asignacion.oficio) except Oficio.DoesNotExist: respuesta = None ##Inicia Apartado para generar el boton de siguiente folio_actual = int(self.object.id) f_s = self.request.GET.get('s') if f_s != None: siguiente = f_s else: siguiente = 0 todas_recepciones = self.model.objects.filter(usuario_asigna=self.request.user) if int(todas_recepciones[:1].get().id) == int(folio_actual): recepcion_siguiente = 0 contador = 0 for t in todas_recepciones: if contador == 1: recepcion_siguiente = t.id if contador == 2: siguiente = t.id contador += 1 elif todas_recepciones[:1].get().id > folio_actual and siguiente == 0: recepcion_siguiente = todas_recepciones[:1].get().id elif siguiente != 0: todas_recepciones = self.model.objects.filter(usuario_asigna=self.request.user).filter(id__lt=folio_actual) if todas_recepciones.count() > 0: contador = 0 for t in todas_recepciones: if contador == 0: recepcion_siguiente = t.id if contador == 1: siguiente = t.id recepcion_siguiente = t.id contador += 1 else: recepcion_siguiente = 0 else: recepcion_siguiente = siguiente for t in todas_recepciones: if t.id < siguiente: siguiente = t.id context['respuesta'] = respuesta context['oficios'] = 'active' recepcioc = RecepcionAsignacionCopia.objects.filter(asignacion = asignacion) context['copias'] = recepcioc context["recepcion_id"] = recepcion_siguiente context["anterior"] = folio_actual context['siguiente'] = siguiente return context def AsignacionList(request): object_list = Asignacion.objects.filter(usuario_asigna=request.user) envios = Envio.objects.filter(usuario_envia=request.user).exclude(oficio__oficio_responde_id__gt=0 ) paginator = Paginator(object_list, 10) page = request.GET.get('page') try: object_list = paginator.page(page) except PageNotAnInteger: # If page is not an integer, deliver first page. object_list = paginator.page(1) except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of results. object_list = paginator.page(paginator.num_pages) return render_to_response( 'oficios/asignacion_list2.html', { 'envios': envios, 'object_list': object_list, 'oficios': 'active', 'asignacion_list_bc': 'active', #'object_list': object_list }, context_instance=RequestContext(request) ) class OficioAsignar(CreateView): """ Vista para Asignar un oficio """ model = Asignacion form_class = ReasignacionForm @method_decorator(login_required) @method_decorator(permission_required('oficios.add_asignacion', raise_exception=True)) def dispatch(self, *args, **kwargs): return super(OficioAsignar, self).dispatch(*args, **kwargs) def get(self, request, *args, **kwargs): initial = {} oficio = None if request.GET.get('recepcion'): request.session['recepcion'] = request.GET.get('recepcion') request.session['asignacion'] = None recepcion = Recepcion.objects.get(pk=request.GET.get('recepcion')) oficio = recepcion.envio.oficio initial['recepcion'] = request.GET.get('recepcion') elif request.GET.get('asignacion'): request.session['asignacion'] = request.GET.get('asignacion') request.session['recepcion'] = None asignacion = RecepcionAsignacion.objects.get(pk=request.session.get('asignacion')) oficio = asignacion.asignacion.oficio initial['asignacion'] = request.GET.get('asignacion') initial['hoficio'] = oficio.id self.no_oficio = oficio.no_oficio self.initial = initial return super(OficioAsignar, self).get(request, *args, **kwargs) def post(self, request, *args, **kwargs): initial = {} oficio = None if request.session.get('recepcion'): recepcion = Recepcion.objects.get(pk=request.session.get('recepcion')) request.session['asignacion'] = None oficio = recepcion.envio.oficio initial['recepcion'] = request.session.get('recepcion') if request.session.get('asignacion'): asignacion = RecepcionAsignacion.objects.get(pk=request.session.get('asignacion')) request.session['recepcion'] = None oficio = asignacion.asignacion.oficio initial['asignacion'] = request.session.get('asignacion') recepciona = RecepcionAsignacion.objects.get(pk=request.session.get('asignacion')) recepciona.revisado = True recepciona.save() initial['hoficio'] = oficio.id self.no_oficio = oficio.no_oficio self.initial = initial return super(OficioAsignar, self).post(request, *args, **kwargs) def form_valid(self, form): form.instance.usuario_asigna = self.request.user form.instance.oficio = Oficio.objects.get(pk=form.cleaned_data['hoficio']) self.object = form.save(commit=False) self.object.save() if form.cleaned_data['recepcion'] is not None: recepcion = Recepcion.objects.get(pk=form.cleaned_data['recepcion']) recepcion.estatus = 2 recepcion.fecha_atendido = datetime.now() recepcion.save() if form.cleaned_data['asignacion'] is not None: asignacion = RecepcionAsignacion.objects.get(pk=form.cleaned_data['asignacion']) asignacion.estatus = 2 asignacion.fecha_atendido = datetime.now() asignacion.save() for usuario in form.cleaned_data['asignar_a'].split(','): u = User.objects.get(username=usuario) asignacion = RecepcionAsignacion(asignacion=self.object, usuario_asignado=u) asignacion.save() uapp = self.request.user.first_name cuapp = uapp.replace("ÁÉÍÓÚáéíóúÑñ", "AEIOUaeiouNn") uapm = self.request.user.last_name cuapm = uapm.replace("ÁÉÍÓÚáéíóúÑñ", "AEIOUaeiouNn") asunto = form.instance.oficio.asunto asu = asunto.replace("ÁÉÍÓÚáéíóúÑñ", "AEIOUaeiouNn") subject = self.request.POST.get('subject', 'Nuevo Oficio Asignado') message = self.request.POST.get('message', 'Se le ha asignado un nuevo oficio, con fecha: '+str(form.instance.oficio.fecha_oficio)+' de parte de: '+cuapp+' '+cuapm+', con asunto: '+asu) from_email = self.request.POST.get('from_email', 'dgtic@tabasco.gob.mx') var_email = str(u.email) if subject and message and from_email: try: send_mail(subject, message, from_email, [var_email]) messages.success(self.request, 'Se envio exitosamente el correo') except Exception: pass ccp = form.cleaned_data.get('ccp') if ccp: for usuarios in ccp.split(','): u = User.objects.get(username=usuarios) recepcionac = RecepcionAsignacionCopia(asignacion=self.object, usuario_asignado=u) recepcionac.save() messages.success(self.request, 'El oficio ha sido asignado') return HttpResponseRedirect(reverse('oficios:asignacion-list')) def form_invalid(self, form): messages.error(self.request, 'Error al registrar, Favor de Verificar los Campos') return HttpResponseRedirect(self.request.META.get('HTTP_REFERER')) # return render_to_response("oficios/asignacion_form.html", {'form': form}, RequestContext(self.request)) def get_context_data(self, *args, **kwargs): context = super(OficioAsignar, self).get_context_data(*args, **kwargs) context['directorio'] = 'active' #if hasattr(self, "no_oficio"): context['oficio'] = self.no_oficio return context class OficiosPendientes(ListView): """ Vista para ver los oficios que han sido asignados al usuario """ template_name = 'oficios/pendientes.html' @method_decorator(login_required) def dispatch(self, *args, **kwargs): return super(OficiosPendientes, self).dispatch(*args, **kwargs) def get_queryset(self): return self.request.user.recepcionasignacion_set.filter(estatus=1) def get_context_data(self, **kwargs): context = super(OficiosPendientes, self).get_context_data(**kwargs) context['oficios'] = 'active' context['oficios_pendientes_bc'] = 'active' return context class OficiosPendientesDetail(DetailView): """docstring for OficiosPendientesDetail""" model = RecepcionAsignacion template_name = 'oficios/pendientes_detail.html' @method_decorator(login_required) def dispatch(self, *args, **kwargs): return super(OficiosPendientesDetail, self).dispatch(*args, **kwargs) def get(self, request, *args, **kwargs): self.object = self.get_object() leido = self.get_object() leido.revisado=True #leido.save() # if self.object.estatus != 1: # raise Http404 return super(OficiosPendientesDetail, self).get(request, *args, **kwargs) def get_context_data(self, **kwargs): context = super(OficiosPendientesDetail, self).get_context_data(**kwargs) objeto_asignacion = self.get_object() folio_actual = int(objeto_asignacion.id) f_s = self.request.GET.get('s') if f_s !=None: siguiente = f_s else: siguiente=0 todas_recepciones = RecepcionAsignacion.objects.filter(estatus=1,usuario_asignado=self.request.user).order_by('-id') if int(todas_recepciones[:1].get().id) == int(folio_actual): recepcion_siguiente = 0 contador = 0 for t in todas_recepciones: if contador == 1: recepcion_siguiente= t.id if contador == 2: siguiente = t.id contador += 1 elif todas_recepciones[:1].get().id > folio_actual and siguiente == 0: recepcion_siguiente = todas_recepciones[:1].get().id elif siguiente !=0: todas_recepciones = RecepcionAsignacion.objects.filter(estatus=1,usuario_asignado=self.request.user,id__lt=folio_actual).order_by('-id') if todas_recepciones.count() > 0: contador = 0 for t in todas_recepciones: if contador == 0: recepcion_siguiente = t.id if contador == 1: siguiente = t.id contador += 1 else: recepcion_siguiente=0 else: recepcion_siguiente = siguiente for t in todas_recepciones: if t.id < siguiente: siguiente=t.id context["recepcion_id"] = recepcion_siguiente context["anterior"]=folio_actual context['siguiente'] = siguiente context['oficios'] = 'active' context['copias'] = RecepcionAsignacionCopia.objects.filter(asignacion=objeto_asignacion.asignacion) return context class OficiosPendientesCopiaDetail(DetailView): """docstring for OficiosPendientesDetail""" model = RecepcionAsignacionCopia template_name = 'oficios/pendientes_detail2.html' @method_decorator(login_required) def dispatch(self, *args, **kwargs): return super(OficiosPendientesCopiaDetail, self).dispatch(*args, **kwargs) def get(self, request, *args, **kwargs): return super(OficiosPendientesCopiaDetail, self).get(request, *args, **kwargs) def get_context_data(self, **kwargs): context = super(OficiosPendientesCopiaDetail, self).get_context_data(**kwargs) context['oficios'] = 'active' ##Inicia Apartado para generar el boton de siguiente folio_actual = int(self.object.id) f_s = self.request.GET.get('s') if f_s != None: siguiente = f_s else: siguiente = 0 todas_recepciones = self.request.user.recepcionasignacioncopia_set.all().order_by('asignacion') if int(todas_recepciones[:1].get().id) == int(folio_actual): recepcion_siguiente = 0 contador = 0 for t in todas_recepciones: if contador == 1: recepcion_siguiente = t.id if contador == 2: siguiente = t.id contador += 1 elif todas_recepciones[:1].get().id > folio_actual and siguiente == 0: recepcion_siguiente = todas_recepciones[:1].get().id elif siguiente != 0: todas_recepciones = self.request.user.recepcionasignacioncopia_set.all().filter(id__lt=folio_actual).order_by('asignacion') # Recepcion.objects.filter(usuario_asignado=self.request.user,id__lt=folio_actual).order_by('-id') if todas_recepciones.count() > 0: contador = 0 for t in todas_recepciones: if contador == 0: recepcion_siguiente = t.id if contador == 1: siguiente = t.id contador += 1 else: recepcion_siguiente = 0 else: recepcion_siguiente = siguiente for t in todas_recepciones: if t.id < siguiente: siguiente = t.id context["recepcion_id"] = recepcion_siguiente context["anterior"] = folio_actual context['siguiente'] = siguiente return context class OficiosAsignadosAMi(TemplateView): template_name = 'oficios/asignados_a_mi.html' def get_context_data(self, **kwargs): context = super(OficiosAsignadosAMi, self).get_context_data(**kwargs) context['oficios'] = 'active' context['oficios_asignados_bc'] = 'active' return context class OficiosAsignadosPendientesAPIView(DataTableView): serializer = OficiosAsignadosSerializer def get_queryset(self): return self.request.user.recepcionasignacion_set.filter(estatus=1).order_by('asignacion') def get_filter(self, filter_string, queryset): return queryset.filter( Q(asignacion__usuario_asigna__adscripcion__nombre__icontains=filter_string) | Q(asignacion__usuario_asigna__empresa__nombre__icontains=filter_string) | Q(asignacion__usuario_asigna__funcionario__nombre__icontains=filter_string) | Q(asignacion__usuario_asigna__funcionario__apellido_paterno__icontains=filter_string) | Q(asignacion__usuario_asigna__funcionario__apellido_materno__icontains=filter_string) | Q(asignacion__usuario_asigna__personafisica__nombre__icontains=filter_string) | Q(asignacion__usuario_asigna__personafisica__apellido_paterno__icontains=filter_string) | Q(asignacion__usuario_asigna__personafisica__apellido_materno__icontains=filter_string) | Q(asignacion__usuario_asigna__first_name=filter_string) | Q(asignacion__usuario_asigna__last_name=filter_string) | Q(asignacion__oficio__no_oficio__icontains=filter_string) | Q(asignacion__oficio__asunto__icontains=filter_string) | Q(asignacion__oficio__descripcion__icontains=filter_string) ) class OficiosAsignadosAtendidosAPIView(DataTableView): serializer = OficiosAsignadosSerializer def get_queryset(self): return self.request.user.recepcionasignacion_set.filter( Q(estatus=3) | Q(estatus=2) ).order_by('asignacion') def get_filter(self, filter_string, queryset): return queryset.filter( Q(asignacion__usuario_asigna__adscripcion__nombre__icontains=filter_string) | Q(asignacion__usuario_asigna__empresa__nombre__icontains=filter_string) | Q(asignacion__usuario_asigna__funcionario__nombre__icontains=filter_string) | Q(asignacion__usuario_asigna__funcionario__apellido_paterno__icontains=filter_string) | Q(asignacion__usuario_asigna__funcionario__apellido_materno__icontains=filter_string) | Q(asignacion__usuario_asigna__personafisica__nombre__icontains=filter_string) | Q(asignacion__usuario_asigna__personafisica__apellido_paterno__icontains=filter_string) | Q(asignacion__usuario_asigna__personafisica__apellido_materno__icontains=filter_string) | Q(asignacion__usuario_asigna__first_name=filter_string) | Q(asignacion__usuario_asigna__last_name=filter_string) | Q(asignacion__oficio__no_oficio__icontains=filter_string) | Q(asignacion__oficio__asunto__icontains=filter_string) | Q(asignacion__oficio__descripcion__icontains=filter_string) ) class OficiosAsignadosCCPAPIView(DataTableView): serializer = OficiosAsignadosCCPSerializer def get_filter(self, filter_string, queryset): return queryset.filter(Q(asignacion__usuario_asigna__adscripcion__nombre__icontains=filter_string) | Q(asignacion__usuario_asigna__empresa__nombre__icontains=filter_string) | Q(asignacion__usuario_asigna__funcionario__nombre__icontains=filter_string) | Q(asignacion__usuario_asigna__funcionario__apellido_paterno__icontains=filter_string) | Q(asignacion__usuario_asigna__funcionario__apellido_materno__icontains=filter_string) | Q(asignacion__usuario_asigna__personafisica__nombre__icontains=filter_string) | Q(asignacion__usuario_asigna__personafisica__apellido_paterno__icontains=filter_string) | Q(asignacion__usuario_asigna__personafisica__apellido_materno__icontains=filter_string) | Q(asignacion__usuario_asigna__username=filter_string) | Q(asignacion__usuario_asigna__first_name=filter_string) | Q(asignacion__usuario_asigna__last_name=filter_string) | Q(asignacion__oficio__no_oficio__icontains=filter_string) | Q(asignacion__oficio__asunto__icontains=filter_string) | Q(asignacion__oficio__descripcion__icontains=filter_string)) def get_queryset(self): return self.request.user.recepcionasignacioncopia_set.all().order_by('asignacion') class OficiosAtendidos(ListView): """ Vista que muestra los oficios resueltos y reasignados del usuario """ template_name = 'oficios/atendidos_bk.html' @method_decorator(login_required) def dispatch(self, *args, **kwargs): return super(OficiosAtendidos, self).dispatch(*args, **kwargs) def get_queryset(self): return self.request.user.recepcionasignacion_set.filter(Q(estatus=3) | Q(estatus=2)).order_by('asignacion') def get_context_data(self, **kwargs): context = super(OficiosAtendidos, self).get_context_data(**kwargs) context['oficios'] = 'active' context['oficios_atendidos_bc'] = 'active' query1 = self.request.user.recepcionasignacion_set.filter(estatus=1).order_by('asignacion') query2 = self.request.user.recepcionasignacioncopia_set.order_by('asignacion') context['asignaciones'] = sorted(chain(query1, query2), key=attrgetter('asignacion.id'), reverse=True) return context class OficiosAtendidosDetail(DetailView): """docstring for OficiosAtendidosDetail""" model = RecepcionAsignacion template_name = 'oficios/atendidos_detail.html' @method_decorator(login_required) def dispatch(self, *args, **kwargs): return super(OficiosAtendidosDetail, self).dispatch(*args, **kwargs) def get(self, request, *args, **kwargs): self.object = self.get_object() recepcion = self.get_object() recepcion.revisado=True recepcion.save() # if not (self.object.estatus == 3 or self.object.estatus == 2): # raise Http404 # messages.success(self.request, 'Registro guardado correctamente') # return HttpResponseRedirect(reverse('oficios:oficios-atendidos')) return super(OficiosAtendidosDetail, self).get(request, *args, **kwargs) def get_context_data(self, **kwargs): recepcion = RecepcionAsignacion.objects.get(id=self.kwargs['pk']) try: print(recepcion.asignacion.oficio.id) respuesta = Oficio.objects.get(oficio_responde=recepcion.asignacion.oficio) except Oficio.DoesNotExist: respuesta = None context = super(OficiosAtendidosDetail, self).get_context_data(**kwargs) ##Inicia Apartado para generar el boton de siguiente folio_actual = int(self.object.id) f_s = self.request.GET.get('s') if f_s != None: siguiente = f_s else: siguiente = 0 todas_recepciones = self.request.user.recepcionasignacion_set.filter(Q(estatus=3)|Q(estatus=2)).order_by('asignacion') if int(todas_recepciones[:1].get().id) == int(folio_actual): recepcion_siguiente = 0 contador = 0 for t in todas_recepciones: if contador == 1: recepcion_siguiente = t.id if contador == 2: siguiente = t.id contador += 1 elif todas_recepciones[:1].get().id > folio_actual and siguiente == 0: recepcion_siguiente = todas_recepciones[:1].get().id elif siguiente != 0: todas_recepciones = self.request.user.recepcionasignacion_set.filter(Q(estatus=3)|Q(estatus=2)).filter(id__lt=folio_actual).order_by('asignacion') # Recepcion.objects.filter(usuario_asignado=self.request.user,id__lt=folio_actual).order_by('-id') if todas_recepciones.count() > 0: contador = 0 for t in todas_recepciones: if contador == 0: recepcion_siguiente = t.id if contador == 1: siguiente = t.id contador += 1 else: recepcion_siguiente = 0 else: recepcion_siguiente = siguiente for t in todas_recepciones: if t.id < siguiente: siguiente = t.id context['oficios'] = 'active' context['respuesta']=respuesta context['respuesta'] = respuesta context["recepcion_id"] = recepcion_siguiente context["anterior"] = folio_actual context['siguiente'] = siguiente usuario = self.request.user if usuario.is_superuser and respuesta==None: #Este fragmento valida que el oficio no tenga respuesta con otro oficio, tambien valida que el usuario tenga privilegios bandera=True else: bandera=False context["bandera"] = bandera return context class AtenderOficio(View): """docstring for AtenderOficio""" @method_decorator(login_required) @method_decorator(permission_required('oficios.change_oficio', raise_exception=True)) def dispatch(self, *args, **kwargs): return super(AtenderOficio, self).dispatch(*args, **kwargs) def get(self, request, *args, **kwargs): if request.GET.get('asignacion'): asignacion = RecepcionAsignacion.objects.get(pk=request.GET.get('asignacion')) if asignacion.estatus != 3: observacion = request.GET.get('observacion') asignacion.estatus = 3 asignacion.observaciones = observacion asignacion.fecha_atendido = datetime.now() #asignacion.save() elif request.GET.get('recepcion'): recepcion = Recepcion.objects.get(pk=request.GET.get('recepcion')) observacion = request.GET.get('observacion') if recepcion.estatus != 3: recepcion.estatus = 3 recepcion.fecha_atendido = datetime.now() recepcion.observaciones = observacion #recepcion.save() return HttpResponse('ok') class AtenderSinRespuesta(View): """docstring for AtenderOficio""" @method_decorator(login_required) @method_decorator(permission_required('oficios.change_oficio', raise_exception=True)) def dispatch(self, *args, **kwargs): return super(AtenderSinRespuesta, self).dispatch(*args, **kwargs) def get(self, request, *args, **kwargs): if request.GET.get('asignacion'): asignacion = RecepcionAsignacion.objects.get(pk=request.GET.get('asignacion')) if asignacion.estatus != 3: observacion = request.GET.get('observacion') asignacion.estatus = 3 asignacion.observaciones = observacion asignacion.fecha_atendido = datetime.now() asignacion.save() elif request.GET.get('recepcion'): recepcion = Recepcion.objects.get(pk=request.GET.get('recepcion')) observacion = request.GET.get('observacion') if recepcion.estatus != 3: recepcion.estatus = 3 recepcion.fecha_atendido = datetime.now() recepcion.observaciones = observacion recepcion.save() return HttpResponse('ok') @login_required def graficar(request): # Total de oficios registrados mis_oficios = Oficio.objects.all().filter(propietario=request.user) conteo_mis_oficios = mis_oficios.count() # Total de los oficios enviados enviados = Envio.objects.all().filter(usuario_envia=request.user) enviados2 = enviados.values('oficio').annotate(dcount=Count('oficio')) conteo_enviados = enviados2.count() # Total de los oficios recibidos leidos recibidos_leidos = Recepcion.objects.all().filter(usuario_recibe=request.user, leido=True) conteo_recibidos_leidos = recibidos_leidos.count() # Total de los oficios recibidos recibidos = Recepcion.objects.all().filter(usuario_recibe=request.user) conteo_recibidos = recibidos.count() # Total de los oficios asignados por el usuario, Estatus: Asignado = 1 asignaciones_atender = RecepcionAsignacion.objects.all().filter(asignacion__usuario_asigna=request.user, estatus=1) conteo_asignaciones_atender = asignaciones_atender.count() # Total de los oficios asignados por el usuario, Estatus Atendido = 3 asignaciones_atendidos = RecepcionAsignacion.objects.all().filter(asignacion__usuario_asigna=request.user, estatus=3) conteo_asignaciones_atendidos = asignaciones_atendidos.count() # Total de los oficios asignados por el usuario asignaciones = RecepcionAsignacion.objects.all().filter(asignacion__usuario_asigna=request.user) conteo_asignaciones = asignaciones.count() # Total de los oficios asignados al usuario por atender, Estatus: 1 = Asignado asignados_atender = RecepcionAsignacion.objects.all().filter(usuario_asignado=request.user, estatus=1) conteo_asignados_atender = asignados_atender.count() #conteo de los oficios asignados al usuario atendido, Estatus: 3 = Atendido asignados_atendidos = RecepcionAsignacion.objects.all().filter(usuario_asignado=request.user, estatus=3) conteo_asignados_atendidos = asignados_atendidos.count() # Total de los oficios asignados al usuario asignados = RecepcionAsignacion.objects.all().filter(usuario_asignado=request.user) conteo_asignados = asignados.count() oficio_bc = 'active' paquete = { 'oficio_bc': oficio_bc, 'inicio': 'active', 'conteo_mis_oficios': conteo_mis_oficios, 'conteo_recibidos_leidos': conteo_recibidos_leidos, 'conteo_recibidos': conteo_recibidos, 'conteo_enviados': conteo_enviados, 'conteo_asignaciones': conteo_asignaciones, 'conteo_asignaciones_atender': conteo_asignaciones_atender, 'conteo_asignaciones_atendidos': conteo_asignaciones_atendidos, 'conteo_asignados': conteo_asignados, 'conteo_asignados_atender': conteo_asignados_atender, 'conteo_asignados_atendidos': conteo_asignados_atendidos } return render_to_response('oficios/oficio_graficas.html', paquete, context_instance=RequestContext(request)) @login_required def perfil(request, user_id): return TemplateResponse(request, 'perfil.html') class ResponderConOficio(CreateView): """docstring for ResponderConOficio""" model = Oficio form_class = RespuestaOficio def render_to_json_response(self, context, **kwargs): data = json.dumps(context) kwargs['content_type'] = "application/json" return HttpResponse(data, **kwargs) def get(self, request, *args, **kwargs): oficio_verificar_respuesta = Oficio.objects.filter(oficio_responde=request.GET.get('oficio')) if oficio_verificar_respuesta.exists() : messages.error(self.request,"El Oficio ya fue respondido con otro oficio") return HttpResponseRedirect(reverse("oficios:oficios-atendidos")) initial = {} if request.GET.get('oficio'): initial['oficioAResponder'] = request.GET.get('oficio') if request.GET.get('usuario_recibe'): initial['usuario_recibe'] = request.GET.get('usuario_recibe') self.initial = initial return super(ResponderConOficio, self).get(request, *args, **kwargs) def form_valid(self, form): """ 1. Verificar usuario envia y usuario recibe 2. Guardar oficio 3. Crear envio 4. Crear recepcion """ oficio_responde = Oficio.objects.get(pk=form.cleaned_data['oficioAResponder']) #usuario_recibe = User.objects.get(pk=form.cleaned_data['usuario_recibe']) form.instance.es_respuesta = True form.instance.oficio_responde = oficio_responde form.instance.propietario = self.request.user form.instance.persona_registro = self.request.user.id usuario_envia = self.request.user folio = 1 num_oficio_maximo = Oficio.objects.filter(propietario=self.request.user).aggregate(Max('folio'))['folio__max'] if num_oficio_maximo: folio += num_oficio_maximo form.instance.folio = folio # response = super(ResponderConOficio, self).form_valid(form) self.object = form.save() # envio = Envio(usuario_envia=usuario_envia, oficio=self.object) # envio.save() # recepcion = Recepcion(envio=envio, usuario_recibe=usuario_recibe) # recepcion.save() if self.request.POST.get('asignacion'): asignacion = RecepcionAsignacion.objects.get(pk=self.request.POST.get('asignacion')) asignacion.revisado = True if asignacion.estatus != 3: observacion = self.request.GET.get('observacion') asignacion.estatus = 3 asignacion.observaciones = observacion asignacion.fecha_atendido = datetime.now() asignacion.save() elif self.request.GET.get('recepcion'): recepcion = Recepcion.objects.get(pk=self.request.GET.get('recepcion')) observacion = self.request.GET.get('observacion') if recepcion.estatus != 3: recepcion.estatus = 3 recepcion.fecha_atendido = datetime.now() recepcion.observaciones = observacion recepcion.save() return HttpResponseRedirect(reverse('oficios:asignacion-list')) def form_invalid(self, form): return super(ResponderConOficio, self).form_invalid(form) def get_context_data(self, **kwargs): context = super(ResponderConOficio, self).get_context_data(**kwargs) context['respuesta'] = 'Responder Oficio' context["asignacion"] = self.request.GET.get("asignacion") print(self.request.GET.get("asignacion")) return context def respondermesa(request, pk): instanciaoficio = Oficio.objects.get(pk=pk) if request.method == 'POST': form = MesaAyudaForm(request.POST, request.FILES) if form.is_valid(): instanciamesa = form.save(commit=False) instanciamesa.oficio_responde = instanciaoficio instanciamesa.save() messages.success(request, 'Se actualizo exitosamente el registro') return HttpResponseRedirect(reverse('oficios:asignacion-list')) else: messages.error(request, 'corrija los siguientes errores') else: form = MesaAyudaForm() return render_to_response( 'oficios/mesa_form.html', { 'form': form }, context_instance=RequestContext(request) ) class UsuariosListAPIView(ListAPIView): model = User serializer_class = UserSerializer def get_queryset(self): queryset = super(UsuariosListAPIView, self).get_queryset() search = self.request.QUERY_PARAMS.get('search') if search: queryset = User.objects.filter( Q(username__icontains=search) | Q(username__icontains=search) | # Buscar funcionario Q(funcionario__nombre__icontains=search) | Q(funcionario__apellido_paterno__icontains=search) | Q(funcionario__apellido_materno__icontains=search) | # Buscar adscripcion Q(adscripcion__nombre=search) | Q(adscripcion__siglas=search) | # Buscar empresa Q(empresa__nombre=search) | # Buscar persona Q(personafisica__nombre__icontains=search) | Q(personafisica__apellido_paterno__icontains=search) | Q(personafisica__apellido_materno__icontains=search) ) return queryset.exclude(is_active=False) #################################################################################### '''PARAMETROS: request: Request de la vista modelo: Modelo a utilizar en la paginación paginas: Cantidad de paginas del paginador nonRepPag: Identificador del result list ''' def Paginador_asignacion(self, request, modelo, asignacion, nonRegPag): #Retorna el objeto paginator para comenzar el trabajo result_list = Paginator(modelo, asignacion) try: #Tomamos el valor de parametro page, usando GET page = int(request.GET.get('page')); except: page = 1 #Si es menor o igual a 0 igualo en 1 if page <= 0: page = 1 #Si el parámetro es mayor a la cantidad #de paginas le igualo el parámetro con las cant de paginas if(page > result_list.num_pages): page = result_list.num_pages #Verificamos si esta dentro del rango if (result_list.num_pages >= page): #Obtengo el listado correspondiente al page asigna = result_list.page(page) Contexto = {nonRegPag: asigna.object_list, #Asignamos registros de la pagina 'page': page, #Pagina Actual 'pages': result_list.num_pages, #Cantidad de Paginas 'has_next': asigna.has_next(), #True si hay proxima pagina 'has_prev': asigna.has_previous(), #true si hay Pagina anterior 'next_page': page+1, #Proxima pagina 'prev_page': page-1, #Pagina Anterior 'firstPage': 1, } return Contexto ###############################Asignacion Multiple################################################### class OficioAsignarMultiple(FormView): """ Vista para Asignar un oficio """ #model = Asignacion form_class = ReasignacionForm template_name = 'oficios/asignacion_multiple_form.html' @method_decorator(login_required) @method_decorator(permission_required('oficios.add_asignacion', raise_exception=True)) def dispatch(self, *args, **kwargs): return super(OficioAsignarMultiple, self).dispatch(*args, **kwargs) def get(self, request, *args, **kwargs): initial = {} oficio = None if request.GET.get('recepcion'): request.session['recepcion'] = request.GET.get('recepcion') request.session['asignacion'] = None #recepcion = Recepcion.objects.get(pk=request.GET.get('recepcion')) #oficio = recepcion.envio.oficio initial['recepcion'] = request.GET.get('recepcion') elif request.GET.get('asignacion'): request.session['asignacion'] = request.GET.get('asignacion') request.session['recepcion'] = None asignacion = RecepcionAsignacion.objects.get(pk=request.session.get('asignacion')) oficio = asignacion.asignacion.oficio initial['asignacion'] = request.GET.get('asignacion') #initial['hoficio'] = oficio.id #self.no_oficio = oficio.no_oficio self.initial = initial return super(OficioAsignarMultiple, self).get(request, *args, **kwargs) def post(self, request, *args, **kwargs): usarios_asignados=self.request.POST.get('asignar_a') bandera=False if usarios_asignados: bandera=True if self.request.POST.get('recepcion') is not None and bandera == True: id_recepcion = self.request.POST.get('recepcion').split(',') for id in id_recepcion: asignacion = Asignacion() recepcion = Recepcion.objects.get(pk=id) asignacion.usuario_asigna = self.request.user asignacion.oficio = recepcion.envio.oficio asignacion.observaciones = self.request.POST.get('observaciones') asignacion.save() recepcion.estatus = 2 recepcion.fecha_atendido = datetime.now() recepcion.save() for usuario in self.request.POST.get('asignar_a').split(','): u = User.objects.get(username=usuario) asignacion_recepcion = RecepcionAsignacion(asignacion=asignacion, usuario_asignado=u) asignacion_recepcion.save() ccp = self.request.POST.get('ccp') if ccp: for usuarios in ccp.split(','): u = User.objects.get(username=usuarios) recepcionac = RecepcionAsignacionCopia(asignacion=asignacion, usuario_asignado=u) recepcionac.save() messages.success(self.request, 'El o los oficios ha sido asignado') return HttpResponseRedirect(reverse('oficios:asignacion-list')) else: messages.error(self.request, 'Error no se Asignaron oficios') # # uapp = self.request.user.first_name # cuapp = uapp.replace("ÁÉÍÓÚáéíóúÑñ", "AEIOUaeiouNn") # uapm = self.request.user.last_name # cuapm = uapm.replace("ÁÉÍÓÚáéíóúÑñ", "AEIOUaeiouNn") # asunto = form.instance.oficio.asunto # asu = asunto.replace("ÁÉÍÓÚáéíóúÑñ", "AEIOUaeiouNn") # subject = self.request.POST.get('subject', 'Nuevo Oficio Asignado') # message = self.request.POST.get('message', 'Se le ha asignado un nuevo oficio, con fecha: '+str(form.instance.oficio.fecha_oficio)+' de parte de: '+cuapp+' '+cuapm+', con asunto: '+asu) # from_email = self.request.POST.get('from_email', 'dgtic@tabasco.gob.mx') # var_email = str(u.email) # if subject and message and from_email: # try: # # send_mail(subject, message, from_email, [var_email]) # messages.success(self.request, 'Se envio exitosamente el correo') # # except Exception: # # pass # initial = {} # oficio = None # # if request.session.get('recepcion'): # recepcion = Recepcion.objects.get(pk=request.session.get('recepcion')) # request.session['asignacion'] = None # oficio = recepcion.envio.oficio # initial['recepcion'] = request.session.get('recepcion')pipo # # if request.session.get('asignacion'): # asignacion = RecepcionAsignacion.objects.get(pk=request.session.get('asignacion')) # request.session['recepcion'] = None # oficio = asignacion.asignacion.oficio # initial['asignacion'] = request.session.get('asignacion') # # initial['hoficio'] = oficio.id # self.no_oficio = oficio.no_oficio # self.initial = initial return super(OficioAsignarMultiple, self).post(request, *args, **kwargs) def form_valid(self, form): #print self.request.POST # form.instance.usuario_asigna = self.request.user # form.instance.oficio = Oficio.objects.get(pk=form.cleaned_data['hoficio']) # self.object = form.save(commit=False) # self.object.save() # # if form.cleaned_data['recepcion'] is not None: # recepcion = Recepcion.objects.get(pk=form.cleaned_data['recepcion']) # recepcion.estatus = 2 # recepcion.fecha_atendido = datetime.now() # recepcion.save() # # if form.cleaned_data['asignacion'] is not None: # asignacion = RecepcionAsignacion.objects.get(pk=form.cleaned_data['asignacion']) # asignacion.estatus = 2 # asignacion.fecha_atendido = datetime.now() # asignacion.save() # # for usuario in form.cleaned_data['asignar_a'].split(','): # u = User.objects.get(username=usuario) # asignacion = RecepcionAsignacion(asignacion=self.object, usuario_asignado=u) # asignacion.save() # # uapp = self.request.user.first_name # cuapp = uapp.replace("ÁÉÍÓÚáéíóúÑñ", "AEIOUaeiouNn") # uapm = self.request.user.last_name # cuapm = uapm.replace("ÁÉÍÓÚáéíóúÑñ", "AEIOUaeiouNn") # asunto = form.instance.oficio.asunto # asu = asunto.replace("ÁÉÍÓÚáéíóúÑñ", "AEIOUaeiouNn") # subject = self.request.POST.get('subject', 'Nuevo Oficio Asignado') # message = self.request.POST.get('message', 'Se le ha asignado un nuevo oficio, con fecha: '+str(form.instance.oficio.fecha_oficio)+' de parte de: '+cuapp+' '+cuapm+', con asunto: '+asu) # from_email = self.request.POST.get('from_email', 'dgtic@tabasco.gob.mx') # var_email = str(u.email) # if subject and message and from_email: # try: # # send_mail(subject, message, from_email, [var_email]) # messages.success(self.request, 'Se envio exitosamente el correo') # # except Exception: # # pass # # ccp = form.cleaned_data.get('ccp') # if ccp: # for usuarios in ccp.split(','): # u = User.objects.get(username=usuarios) # recepcionac = RecepcionAsignacionCopia(asignacion=self.object, usuario_asignado=u) # recepcionac.save() # # messages.success(self.request, 'El oficio ha sido asignado') return HttpResponseRedirect(reverse('oficios:asignacion-list')) def form_invalid(self, form): return super(OficioAsignarMultiple, self).form_invalid(form) def get_context_data(self, *args, **kwargs): context = super(OficioAsignarMultiple, self).get_context_data(*args, **kwargs) context['directorio'] = 'active' context["recepcion"] = self.request.GET.get('recepcion') #if hasattr(self, "no_oficio"): #context['oficio'] = self.no_oficio return context #######################################################OficiosAsignadosamiMultiple######################################### class OficioAsignadosAmiMultiple(FormView): """ Vista para Asignar un oficio """ #model = Asignacion form_class = ReasignacionForm template_name = 'oficios/asignacion_multiple_form.html' @method_decorator(login_required) @method_decorator(permission_required('oficios.add_asignacion', raise_exception=True)) def dispatch(self, *args, **kwargs): return super(OficioAsignadosAmiMultiple, self).dispatch(*args, **kwargs) def get(self, request, *args, **kwargs): initial = {} oficio = None if request.GET.get('recepcion'): request.session['recepcion'] = request.GET.get('recepcion') request.session['asignacion'] = None #recepcion = Recepcion.objects.get(pk=request.GET.get('recepcion')) #oficio = recepcion.envio.oficio initial['recepcion'] = request.GET.get('recepcion') elif request.GET.get('asignacion'): request.session['asignacion'] = request.GET.get('asignacion') request.session['recepcion'] = None asignacion = RecepcionAsignacion.objects.get(pk=request.session.get('asignacion')) oficio = asignacion.asignacion.oficio initial['asignacion'] = request.GET.get('asignacion') #initial['hoficio'] = oficio.id #self.no_oficio = oficio.no_oficio self.initial = initial return super(OficioAsignadosAmiMultiple, self).get(request, *args, **kwargs) def post(self, request, *args, **kwargs): usarios_asignados=self.request.POST.get('asignar_a') bandera=False if usarios_asignados: bandera=True if self.request.POST.get('recepcion') is not None and bandera == True: id_recepcion = self.request.POST.get('recepcion').split(',') for id in id_recepcion: asignacion = Asignacion() recepcion = RecepcionAsignacion.objects.get(pk=id) asignacion.usuario_asigna = self.request.user asignacion.oficio = recepcion.asignacion.oficio asignacion.observaciones = self.request.POST.get('observaciones') asignacion.save() recepcion.estatus = 2 recepcion.fecha_atendido = datetime.now() recepcion.save() for usuario in self.request.POST.get('asignar_a').split(','): u = User.objects.get(username=usuario) asignacion_recepcion = RecepcionAsignacion(asignacion=asignacion, usuario_asignado=u) asignacion_recepcion.save() ccp = self.request.POST.get('ccp') if ccp: for usuarios in ccp.split(','): u = User.objects.get(username=usuarios) recepcionac = RecepcionAsignacionCopia(asignacion=asignacion, usuario_asignado=u) recepcionac.save() messages.success(self.request, 'El o los oficios ha sido asignado') return HttpResponseRedirect(reverse('oficios:asignacion-list')) else: messages.error(self.request, 'Error no se Asignaron oficios') return super(OficioAsignadosAmiMultiple, self).post(request, *args, **kwargs) def form_invalid(self, form): return super(OficioAsignadosAmiMultiple, self).form_invalid(form) def get_context_data(self, *args, **kwargs): context = super(OficioAsignadosAmiMultiple, self).get_context_data(*args, **kwargs) context['directorio'] = 'active' context["recepcion"] = self.request.GET.get('recepcion') #if hasattr(self, "no_oficio"): #context['oficio'] = self.no_oficio return context