# Create your views here. 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.views.generic import ListView, DetailView, View from pyjasperclient import JasperClient import json from django.views.decorators.cache import never_cache from django.views.decorators.csrf import csrf_exempt from django.utils.decorators import method_decorator class DependenciaViewSet(viewsets.ModelViewSet): model = Dependencia from django.core.mail import send_mail, BadHeaderError, EmailMultiAlternatives class ProyectoViewSet(viewsets.ModelViewSet): serializer_class = ProyectoSerializer model = Proyecto @method_decorator(csrf_exempt) def dispatch(self, *args, **kwargs): return super(ProyectoViewSet, self).dispatch(*args, **kwargs) def pre_save(self, obj): perfil = UsuariosPerfil.objects.get(usuario = self.request.user) if str(perfil) == 'Responsables': obj.estatus_id = 5 obj.creador = self.request.user obj.fecha_termino = datetime.datetime.now() return super(ProyectoViewSet, self).pre_save(obj) def post_save(self, obj, created=False): ''' #agregar a la columna porcentaje actividades = Actividad.objects.filter(proyecto = self.id, estatus=True)#.annotate(por=Sum('porcentaje')) porcentaje = 0 if actividades: porcentaje = actividades[0].porcentaje * actividades.count() return porcentaje ''' if created: # subject = 'Proyecto asignado (%s)' % obj.nombre correos = ",".join(["'"+s.email+"'" for s in obj.responsable.all()]) usuarios = ",\n".join([ s.first_name + " " +s.last_name for s in obj.responsable.all()]) text_content = '' message = 'Se le ha asignado un nuevo proyecto de nombre "%s" al usuario o usuarios %s.

' %(obj.nombre,usuarios) message = message + 'Si desea ingresar al sistema en este momento, de clic en la liga siguiente para ver los detalles.

' message = message + '       Ingresar al sistema de Proyectos' #from_email = 'dgtic@tabasco.gob.mx' try: for responsablefor in obj.responsable.all(): subject,from_email, to = 'Proyecto asignado (%s)' % obj.nombre, 'dgtic@tabasco.gob.mx',responsablefor.email msg = EmailMultiAlternatives(subject,text_content,from_email,[to]) msg.attach_alternative(message,"text/html") msg.send() #send_mail(subject, message, from_email, [str(responsablefor.email)]) except BadHeaderError: pass class ProyectosViewSet(viewsets.ModelViewSet): serializer_class = ProyectoSerializer model = Proyecto def pre_save(self, obj): obj.creador = self.request.user obj.fecha_termino = datetime.datetime.now() obj.estatus = Estatus.objects.get(pk=4) return super(ProyectosViewSet, self).pre_save(obj) 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(obj) class ActividadViewSet(viewsets.ModelViewSet): serializer_class = ActividadSerializer model = Actividad def pre_save(self, obj): obj.fecha = datetime.datetime.now() return super(ActividadViewSet, self).pre_save(obj) def post_save(self, obj, created=False): actividades = Actividad.objects.filter(proyecto=obj.proyecto) if actividades.count() > 0: for actividad in actividades: actividad.porcentaje = str(100.00 / actividades.count()) actividad.save() else: obj.porcentaje = 100.00 if created: subject = 'Actividad asignada (%s)' % obj.descripcion correos = ",".join(["'"+s.email+"'" for s in obj.usuario.all()]) usuarios = ",\n".join([ s.first_name + " " +s.last_name for s in obj.usuario.all()]) message = 'Se le ha asignado la actividad "%s"\n' %(obj.descripcion) message = message + 'a los usuarios %s.\n\n' %(usuarios) from_email = 'dgtic@tabasco.gob.mx' try: for usuariofor in obj.usuario.all(): send_mail(subject, message, from_email, [str(usuariofor.email)]) except BadHeaderError: pass class EstatusViewSet(viewsets.ModelViewSet): model = Estatus from django.template.response import * def index(request): return TemplateResponse(request,'index.html') def prueba(request): return TemplateResponse(request,'pruebaa.html') class IndexView(RedirectView): def get_redirect_url(self, **kwargs): return "/static/zalamero/app/index.html" class ChismosoView(RedirectView): def get_redirect_url(self, **kwargs): return "/static/zalamero/app/templates/index.html#/chismoso" @csrf_exempt def login_(request): return TemplateResponse(request,'login.html') from django.contrib.auth import * from django.contrib.auth.decorators import * from django.http import * def validar(request): act = ActualizarProyectos(request) username = request.POST.get('username') password = request.POST.get('password') user = authenticate(username=username, password=password) mensaje = '' if user is not None: if user.is_active: login(request, user ) # return HttpResponse ( dependencia.objects.filter(usuarios__in=[user.id]).count() ) if user.is_staff: return HttpResponseRedirect( '/home' ) #return HttpResponseRedirect( '/static/zalamero/app/index.html' ) 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}) def logout_user(request): response = logout(request) return HttpResponseRedirect('/') def home(request): perfil = None try: perfil = UsuariosPerfil.objects.get(usuario_id = request.user.id) x = str(perfil) except: perfil = None x = None return render_to_response('index.html',{'usuario':request.user,'perfil':perfil,'x':x},context_instance = RequestContext(request)) from django.contrib.auth.models import User class UserViewSet (viewsets.ModelViewSet): serializer_class = UserSerializer queryset = User.objects.all() queryset = queryset.filter(is_staff = False) queryset = queryset.exclude(username = 'Chismoso') model = User from rest_framework import generics class ComentarioList(generics.ListAPIView): serializer_class = ComentarioSerializerList def get_queryset(self): proyecto = self.request.GET.get('proyecto_id') queryset = Comentario.objects.filter(proyecto_id = proyecto) return queryset from django.db.models import Q #lista los proyectos en el menu principal class ProyectoList(generics.ListAPIView): serializer_class = ProyectoSerializerList @method_decorator(never_cache) def dispatch(self, *args, **kwargs): return super(ProyectoList, self).dispatch(*args, **kwargs) def get_queryset(self): username = self.request.user perfil = UsuariosPerfil.objects.get(usuario = username) tipo = str(perfil) usuario = str(username) if tipo == 'Administrador': if usuario == 'Chismoso': hoy = date.today(); d=date.today()-timedelta(days=10) queryset = Proyecto.objects.filter(Q(fecha__range=(d,hoy),estatus_id = 4)| Q(estatus_id__in = (1,2,3))) else: queryset = Proyecto.objects.all().exclude(estatus_id = 4) elif tipo == 'Usuarios': queryset = Proyecto.objects.filter(Q(responsable = username) | Q(actividad__actividadesusuario__usuario = username.id)).distinct().exclude(estatus_id =4) else: queryset = Proyecto.objects.filter(Q(responsable = username)|Q(creador = self.request.user)).exclude(estatus_id =4) proyecto = self.request.GET.get('proyecto', '') if proyecto: queryset = queryset.filter(id=proyecto) creador = self.request.GET.get('creador', '') if creador: queryset = queryset.filter(creador_id=creador) dependencia = self.request.GET.get('dependencia', '') if dependencia: queryset = queryset.filter(dependencia_id=dependencia) responsable = self.request.GET.get('responsable', '') if responsable: queryset = queryset.filter(responsable=responsable) estatus = self.request.GET.get('estatus', '') if estatus: if estatus == '0': queryset = queryset.filter(estatus_id__in = (1,2,3)).order_by('fecha_estimada_entrega') else: queryset = queryset.filter(estatus_id__in = (estatus)) return queryset #lista los proyectos terminados class ProyectosTerminadosList(generics.ListAPIView): serializer_class = ProyectoSerializerList def get_queryset(self): username = self.request.user perfil = UsuariosPerfil.objects.get(usuario = username) tipo = str(perfil) if tipo == 'Administrador': queryset = Proyecto.objects.filter(estatus_id=4).order_by('-id') elif tipo == 'Usuarios': queryset = Proyecto.objects.filter(Q(responsable = username) | Q(actividad__actividadesusuario__usuario = username.id)).distinct().exclude(estatus_id = 3).exclude(estatus_id = 2).exclude(estatus_id = 1) else: queryset = Proyecto.objects.filter(Q(responsable = username,estatus_id = 4)) return queryset class ActividadList(generics.ListAPIView): """vista para rest url consulta de actividades""" serializer_class = ActividadSerializerlist def get_queryset(self): usuario = self.request.user perfil = UsuariosPerfil.objects.get(usuario = usuario) tipo = str(perfil) if tipo =='Administrador' or tipo == 'Responsables': queryset = Actividad.objects.all() else: queryset = Actividad.objects.filter(usuario = usuario) proyecto = self.request.GET.get('proyecto', '') if proyecto: queryset = queryset.filter(proyecto_id=proyecto) usuario = self.request.GET.get('usuario', '') if usuario: queryset = queryset.filter(usuario__in=(usuario)) estatus = self.request.GET.get('estatus', '') if estatus: queryset = queryset.filter(estatus = estatus) return queryset class ActividadesUsuarioViewSet(viewsets.ModelViewSet): serializer_class = ActividadesUsuarioSerializer model = ActividadesUsuario def post_save(self, obj, created=False): actividades = ActividadesUsuario.objects.filter(actividad=obj.actividad) if actividades.count() > 0: for actividad in actividades: actividad.porcentaje = str(100.00 / actividades.count()) actividad.save() else: obj.porcentaje = 100.00 # class ActividadesList(generics.ListAPIView): # serializer_class = ActividadesSerializer # def get_queryset(self): # """ # This view should return a list of all the purchases for # the user as determined by the username portion of the URL. # """ # proyecto_id = self.kwargs['proyecto_id'] # return Actividad.objects.filter(proyecto=proyecto_id) class TerminarActividadViewSet(generics.RetrieveUpdateAPIView): serializer_class = TerminarActividadesSerializer pk_url_kwarg = 'actividad_id' model = ActividadesUsuario def pre_save(self, obj): obj.usuario = self.request.user return super(TerminarActividadViewSet,self).pre_save(obj) class ActividadesUsuarioList(generics.ListAPIView): serializer_class = ActividadesUsuarioSerializerlist def get_queryset(self): queryset = ActividadesUsuario.objects.all() actividad = self.request.GET.get('actividad') act_responsable = self.request.user if actividad: queryset=ActividadesUsuario.objects.filter(actividad__proyecto=actividad,usuario=self.request.user) usuario = self.request.GET.get('usuario', '') if usuario: queryset = queryset.filter(usuario__in=(usuario)) return queryset class ActividadesUsuarioListAdmin(generics.ListAPIView): serializer_class = ActividadesUsuarioSerializerlist def get_queryset(self): queryset = ActividadesUsuario.objects.all() actividad = self.request.GET.get('actividad') if actividad: queryset=queryset.filter(actividad=actividad) return queryset 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 @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} ) class JasperMix(object): #clase para invocar el reporte url = settings.JASPERSERVER username = 'jasperadmin' password = 'jasperadmin' def generateReport(self, path, namefile, params={}, tipo=None): """ Gennara reportes atravez del jasperserver :param path: :param namefile: :param params: :param tipo: default is PDF """ j = JasperClient(self.url, self.username, self.password) ret = j.runReport(path, ("PDF" if not tipo else tipo), params) f = file(namefile, 'w') f.write(ret['data']) f.close() class reporte_directorView(View, JasperMix): def get(self,request,*args,**kwargs): user = kwargs.get('id') self.generateReport('/reportes_zalamero/director_reporte',settings.MEDIA_ROOT+'/reportes/reporte_director.pdf',{'user_id':str(user),},'pdf') return HttpResponseRedirect('/media/reportes/reporte_director'+'.pdf') class reporteView(View, JasperMix): def get(self,request,*args,**kwargs): user = kwargs.get('id') self.generateReport('/reportes_zalamero/reporte',settings.MEDIA_ROOT+'/reportes/reporte.pdf',{'user_id':str(user),},'pdf') return HttpResponseRedirect('/media/reportes/reporte'+'.pdf') def ActualizarProyectos(request): proyectos = Proyecto.objects.filter(estatus_id__in = (1,2,3)) fecha_actual = date.today() for p in proyectos: proyecto = p.fecha_estimada_entrega + timedelta(days=3) proyecto2 = p.fecha_estimada_entrega + timedelta(days = 7) if proyecto < fecha_actual: pr = Proyecto.objects.get(id = p.id) pr.estatus_id = 2 pr.save() elif proyecto2 < fecha_actual: pr = Proyecto.objects.get(id = p.id) pr.estatus_id = 3 pr.save() # class ReporteRubrosProveedores(View, JasperMix, ): # def get(self, request, *args, **kwargs): # id_rubros = kwargs.get('id_rubros') # try: # self.generateReport('/proveedores/local/rubros', settings.MEDIA_ROOT + 'rubros.pdf',{'rubro_id':str(id_rubros), }, 'pdf') # return HttpResponseRedirect('/media/rubros.pdf') # except Exception, e: # messages.error(request, 'ocurrio un error durante la carga del pdf ' + str(e)) # return HttpResponseRedirect('/RubrosProveedor/')