#encoding:utf-8 import datetime from datetime import date, timedelta from django.views.generic.base import RedirectView from Zalamero.models import * from rest_framework import viewsets from Zalamero.serializers import * from django.shortcuts import render_to_response from django.contrib.auth.models import User from django.core.mail import send_mail, BadHeaderError, EmailMultiAlternatives from django.template.response import * from django.contrib.auth import * from django.contrib.auth.decorators import * from django.http import * from django.db.models import Q from rest_framework import generics ##lista los usuarios para ser usados en el registro de proyectos y actividades class UserViewSet (viewsets.ModelViewSet): serializer_class = UserSerializer queryset = User.objects.all() queryset = queryset.filter(is_staff = False) queryset = queryset.exclude(username = 'Chismoso') model = User #mustra el listado de las dependnecias class DependenciaViewSet(viewsets.ModelViewSet): model = Dependencia class AreasList(generics.ListAPIView): #model = Areas serializer_class = AreasSerializerList def get_queryset(self): usuario = self.request.user user_area = UsuarioArea.objects.get(usuario = usuario) if str(user_area) == "DG": queryset = Areas.objects.filter(clave__in = ('DRP','CD')) elif str(user_area) == "SUB": queryset = Areas.objects.filter(clave='DG') elif str(user_area) == "DRP": queryset = Areas.objects.filter(clave__in=('DLP','DLS')) elif str(user_area) == "DLS" or str(user_area) == "DLP" : queryset = Areas.objects.filter(clave__in=('D','PC')) else: queryset = Areas.objects.all() return queryset #lista las requisiciones que ya fueron terminadas class RequisicionesTerminadasList(generics.ListAPIView): #model = Areas serializer_class = RequisicionesSerializerList def get_queryset(self): usuario = self.request.user user_area = UsuarioArea.objects.get(usuario = usuario) queryset = Requisiciones.objects.filter(estatus_id=4) return queryset #registro de bitacora al finalizar por compra Directa class BitacoraViewSet(viewsets.ModelViewSet): serializer_class = BitacoraSerializer model = Bitacora def pre_save(self, obj): obj.usuario = self.request.user obj.fecha = datetime.datetime.now() obj.estatus_id = 4 requisiciones = Requisiciones.objects.get(oficioNumero = obj.requisicion) requisiciones.estatus_id = 4 requisiciones.save() obj.areaAnterior_id = requisiciones.area_id return super(BitacoraViewSet,self).pre_save #registro de bitacora class AsignarViewSet(viewsets.ModelViewSet): serializer_class = BitacoraSerializer model = Bitacora def pre_save(self, obj): obj.usuario = self.request.user obj.fecha = datetime.datetime.now() requisiciones = Requisiciones.objects.get(oficioNumero = obj.requisicion) if str(obj.areaAnterior) == 'Desierto' and str(requisiciones.estatus)== 'Pendiente': obj.estatus_id = 2 obj.usuario = self.request.user requisiciones.estatus_id = 2 requisiciones.save() elif str(obj.areaAnterior) == 'Desierto' and str(requisiciones.estatus)== 'Desierto': obj.estatus_id = 2 obj.usuario = self.request.user print obj.usuario requisiciones.estatus_id = 2 requisiciones.area_id = 3 requisiciones.save() else: obj.estatus_id = 1 requisiciones.estatus_id = 1 requisiciones.area = obj.areaAnterior obj.usuario = self.request.user requisiciones.save() obj.lotes = requisiciones.noLotes obj.montoFinal = requisiciones.total obj.areaAnterior = requisiciones.area obj.usuario = self.request.user return super(AsignarViewSet,self).pre_save #registro de comentarios class ComentarioViewSet(viewsets.ModelViewSet): serializer_class = ComentarioSerializer model = Comentario def pre_save(self, obj): obj.usuario = self.request.user obj.fecha = datetime.datetime.now() return super(ComentarioViewSet,self).pre_save #registro de Requisiciones class RequisicionesViewSet(viewsets.ModelViewSet): serializer_class = RequisicionesSerializer model = Requisiciones def pre_save(self, obj): obj.usuario = self.request.user obj.fecha = datetime.datetime.now() obj.estatus_id = 1 return super(RequisicionesViewSet,self).pre_save def post_save(self,obj,created=False): if created: bitacora = Bitacora(requisicion_id = obj.id,montoFinal = obj.total, lotes = obj.noLotes,usuario = obj.usuario,fecha = obj.fecha,areaAnterior = obj.area, estatus = obj.estatus) bitacora.save() #lista las requisiciones en el menu principal class RequisicionesList(generics.ListAPIView): serializer_class = RequisicionesSerializerList def get_queryset(self): username = self.request.user perfil = UsuariosPerfil.objects.get(usuario = username) if str(perfil) == 'Administrador': if str(username) == 'Chismoso': hoy = date.today(); d=date.today()-timedelta(days=10) queryset = Requisiciones.objects.filter(Q(fecha_termino__range=(d,hoy),estatus_id = 4)|Q(estatus_id__in =(1,2,3))) else: queryset = Requisiciones.objects.all().exclude(estatus_id = 4) else: permiso = UsuarioArea.objects.get(usuario = username) queryset = Requisiciones.objects.filter(area = permiso.area).exclude(estatus_id=4) return queryset class ComentariosList(generics.ListAPIView): serializer_class = ComentarioSerializerList def get_queryset(self): requisicion_id = self.request.GET.get('requisicion_id') queryset = Comentario.objects.filter(requisicion_id = requisicion_id) return queryset class BitacoraDatosList(generics.ListAPIView): serializer_class = BitacoraSerializerList def get_queryset(self): requisicion_id = self.request.GET.get('requisicion_id') queryset = Bitacora.objects.filter(requisicion_id = requisicion_id) return queryset #catalogo de estatus class EstatusViewSet(viewsets.ModelViewSet): model = Estatus #mustra el formulario de logueo def login_(request): return TemplateResponse(request,'login.html') #valida el inicio de session def validar(request): username = request.POST['username'] password = request.POST['password'] user = authenticate(username=username, password=password) mensaje = '' if user is not None: if user.is_active: login(request, user ) if user.is_staff: return HttpResponseRedirect( '/home' ) else: if user.username == 'Chismoso': return HttpResponseRedirect('/chismoso') else: return HttpResponseRedirect( '/home' ) else: mensaje = mensaje + 'cuenta desactivada' else: mensaje = mensaje + 'Usuario no valido, verifique sus credenciales' return TemplateResponse(request, 'login.html', {'msj': mensaje}) #termina la session del usuario def logout_user(request): response = logout(request) return HttpResponseRedirect('/') #muestra el home de los usuarios def home(request): perfil = None try: perfil = UsuariosPerfil.objects.get(usuario_id = request.user.id) except: perfil = None try: permiso = UsuarioArea.objects.get(usuario_id = request.user.id) except: permiso = None return render_to_response('index.html',{'usuario':request.user,'perfil':perfil,'area':permiso},context_instance = RequestContext(request)) #lista los usuarios que no an sido asigado en un actividad class UserList(generics.ListAPIView): serializer_class = UserSerializer def get_queryset(self): queryset = User.objects.all().order_by('-id') queryset = queryset.filter(is_staff = False) queryset = queryset.exclude(username = 'Chismoso') actividad = self.request.GET.get('actividad',) if actividad: actividad = int(actividad) if actividad > 0: queryset = queryset.filter(actividad = actividad) else: queryset = queryset.exclude(actividad = abs(actividad)) return queryset class ChismosoView(RedirectView): def get_redirect_url(self, **kwargs): return "static/template_angular/chismoso.html#/chismoso" @login_required def perfil(request, user_id): p = UsuariosPerfil.objects.get(usuario_id = request.user.id) return TemplateResponse(request, 'perfil.html', {'user':request.user,'p':p} )