# encoding:utf-8 from decimal import Decimal from django.core.urlresolvers import reverse_lazy from rest_framework import generics, mixins from Minos.settings import ULRHP, USERNAME_HP, PASSWORD_HP, EMAIL_HOST_USER,HOST_DEPLOY from anuencias_tecnicas.serializers import * from datetime import date, datetime, time, timedelta import pytz from django.http import HttpResponse, HttpResponseRedirect, response from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from django.db import transaction # from django.utils import simplejson from django.template.response import TemplateResponse from django.shortcuts import render_to_response from django.template import RequestContext from django.contrib.auth import authenticate, login, logout from django.contrib.auth.decorators import login_required from django.contrib import messages from django.forms.models import inlineformset_factory from django.core.mail import send_mail,send_mass_mail, BadHeaderError # libreria para correo from django import http from django.template.loader import get_template from django.template import Context # import ho.pisa as pisa import cStringIO as StringIO import cgi from django.conf import settings from pyjasperclient import JasperClient from django.views.generic import ListView, DetailView, View from django.views.generic.edit import CreateView, UpdateView from anuencias_tecnicas.models import Perfil from anuencias_tecnicas.models import * from anuencias_tecnicas.forms import * from django.db.models import Q import urllib2 import json from django.core.mail import EmailMessage from django.core import serializers from rest_framework.views import APIView, Response, status from rest_framework import viewsets from rest_framework.generics import GenericAPIView, ListAPIView from django import forms from django.views.decorators.cache import never_cache from django.views.decorators.csrf import csrf_exempt import requests from django.utils.decorators import method_decorator from suds.client import Client, WebFault #Libreria Necesaria para el wrapper de Hacienda Publica # Create your views here. def Mantenimiento(request): return TemplateResponse(request, 'index2.html') def login_(request): mensaje="La DGTIC le informa que ésta versión del sistema estará fuera de operación a partir del día viernes 26 de Mayo a las 12:00 pm, por lo tanto deberán capturar, o concluir sus trámites antes de las 11:30 am." mensaje2 ="La nueva versión del sistema estará disponible el Lunes 29 de Mayo a través de la siguiente dirección de internet: " direccion="anuenciastecnicas.tabasco.gob.mx" mensaje3="Deberán solicitar sus nuevos usuarios dirigiendo oficio a la Dirección General de Tecnologías de la Información y Comunicación en el cual deberán proporcionar los siguientes datos para cada usuario:" curp="CURP" nombre="NOMBRE COMPLETO" correo="CORREO ELECTRÓNICO" dependencia="DEPENDENCIA" puesto="PUESTO" return TemplateResponse(request, 'index.html',{'aviso': mensaje,'aviso2':mensaje2,'direccion':direccion,'mensaje3':mensaje3,'curp':curp,'nombre':nombre,'correo':correo,'dependnecia':dependencia,'puesto':puesto}) def validarView(request): username = request.POST['username'] password = request.POST['password'] user = authenticate(username=username, password=password) mensaje = '' aviso='' if user is not None: if user.is_active: p = Perfil.objects.get(usuario_id=user.id) login(request, user) menuactivo1 = 'active' return HttpResponseRedirect('/tablero/0', {'menuactivo1': menuactivo1}) else: mensaje = mensaje + 'cuenta desactivada' else: mensaje = mensaje + 'Usuario no valido, verifique sus credenciales' msj = mensaje return TemplateResponse(request, 'index.html', {'msj': mensaje,'aviso':aviso}) @login_required def anuenciasView(request): p = Perfil.objects.get(usuario_id=request.user.id) return TemplateResponse(request, 'anuencias.html', {'p': p}) def logout_user(request): response = logout(request) return HttpResponseRedirect('/') def obtiene_estatus_id(cadena_busqueda): try: e_ = estatus.objects.get(clave=cadena_busqueda) except estatus.DoesNotExist: e_ = None return e_ ###El siguiente codigo agrega y actualiza una anuencia ############ @login_required def anuenciasAddView(request, anuencia_id=0): px = None provedore_id=request.POST.getlist('proveedores') list_proveedores=ProveedorView.objects.filter(pk__in=provedore_id) try: p = Perfil.objects.get(usuario_id=request.user.id) except Exception, e: msj = e.message messages.error(request, msj) return TemplateResponse(request, 'index.html') menuactivo2 = 'active' uno = 0 if request.method == 'POST': estatus_segun_captura = obtiene_estatus_id('S') if p.tipo.clave == 'R': estatus_segun_captura = obtiene_estatus_id('CR') if p.tipo.clave == 'A': estatus_segun_captura = obtiene_estatus_id('CA') # if p.tipo.clave=='A': if anuencia_id == '0': i = anuencia_datos(activo=True, usuario=request.user, fecha_registro=datetime.now(), fecha_ultimo_cambio=datetime.now(), estatus=estatus_segun_captura,fecha_modificacion_dependencia = datetime.now()) else: i = anuencia_datos.objects.get(pk=anuencia_id) i.activo = True i.usuario = request.user i.estatus = estatus_segun_captura formulario = anuenciasForm(request.POST, request.FILES, instance=i) if anuencia_id != '0': if formulario.is_valid(): try: a = formulario.save(commit=False) a.fecha_modificacion_dependencia = datetime.now() a.save() #CONSULTA Y LISTA LOS ID DE LOS PROVEEDORES DE LA TABLA ANUENCIA_PROVEEDOR consulta_nueva_lista=[] consulta = anuencia_proveedor.objects.filter(anuencia_id=a.id) for con in consulta: consulta_nueva_lista.append(con.proveedor_id) print(consulta_nueva_lista) #SE RECORRE LA LISTA DE LOS PROVEEDORES ENCIADOS DESDE EL FORMULARIO provedor_nueva_lista=[] for pro in provedore_id: provedor_nueva_lista.append(int(pro)) print(provedor_nueva_lista) for p in provedor_nueva_lista: if p in consulta_nueva_lista: pass print('este proveedor existe') else: resgistro=anuencia_proveedor.objects.create(anuencia=a, proveedor_id=p) print('se registro nuevo proveedor') for co in consulta_nueva_lista: if co in provedor_nueva_lista: pass print('existe en ambas listas los proveedores') else: eliminar = anuencia_proveedor.objects.get(anuencia=a, proveedor_id=co) print('lista vieja: ',consulta_nueva_lista, 'lista nueva: ',provedor_nueva_lista, 'se eliminara: ', co) eliminar.delete() #REGISTRA TODOS LOS PROVEDORES EN LA ANUENCIA # for x in list_proveedores.all(): # proveedor=ProveedorView.objects.get(id=x.id) # registro=anuencia_proveedor.objects.create(anuencia=a,proveedor_id=proveedor.id) msj = 'El registro %s se ha Actualizado .' % (a.id) messages.success(request, msj) return HttpResponseRedirect('/tablero/0') except Exception, e: msj = e.message messages.error(request, msj) if 'guardar' in request.POST: messages.error(request, 'guardar') return HttpResponseRedirect('/tablero/0') elif 'guardar_y_agregar_otro' in request.POST: messages.error(request, 'guardar y agregar otro') return HttpResponseRedirect('/agregar/0') else: msj = 'Por favor, corrija el siguiente error.' messages.error(request, msj) else: if formulario.is_valid(): try: d = date.today() cont = anuencia_datos.objects.filter(fecha_registro__year=d.year).count() ac = str(d.year) cont_f = cont + 1 cadena = 'SA/CMAIG/A' nueva = cadena + ac[-2:] + "-" + str(cont_f) + "/" + str(d.year) a = formulario.save(commit=False) a.fecha_modificacion_dependencia = datetime.now() a.oficio_dgtic = nueva a.fecha_ultimo_cambio = datetime.now() a.save() for x in list_proveedores.all(): proveedor=ProveedorView.objects.get(id=x.id) registro=anuencia_proveedor.objects.create(anuencia=a,proveedor_id=proveedor.id) perfiles_usuarios_id = Perfil.objects.values('usuario_id').filter(tipo_id=3) subject = 'Anuencia nueva ' + str(a.id) message = "Link para visualizar el borrador: " +HOST_DEPLOY+'/borrador/' + str(a.id) # se realiza una lista con todos los correos de los usuarios de perfil 1 lista_correos = [] for usuarios_id in perfiles_usuarios_id: correos = User.objects.values('email').filter(pk=usuarios_id['usuario_id']) for correo in correos: print(correo) if correo['email'] == '': correo = 'temporal@hotmail.com' lista_correos.append(correo) print(correo) else: lista_correos.append(correo['email']) print(correo) try: # se envia un correo a todas las direcciones de correo de la lista de correos datatuple = (subject, message, 'dgic@tabasco.gob.mx', lista_correos) datatuple = tuple((subject, message, 'dgic@tabasco.gob.mx', [cor]) for cor in lista_correos) print(datatuple) send_mass_mail(datatuple) except Exception as e: print(e) msj = 'El registro %s se ha guardado, por favor ingrese el Detalle.' % (a.id) messages.success(request, msj) return HttpResponseRedirect('/detalle/add/%s?' % (a.id)) except Exception, e: msj = e.message c = e messages.error(request, msj) if 'guardar' in request.POST: messages.error(request, 'guardar') return HttpResponseRedirect('/tablero/0') elif 'guardar_y_agregar_otro' in request.POST: messages.error(request, 'guardar y agregar otro') return HttpResponseRedirect('/agregar/0') else: msj = 'Por favor, corrija el siguiente error.' messages.error(request, msj) else: try: px = None if anuencia_id != '0': idx_anuencia = anuencia_datos.objects.get(pk = anuencia_id) proveedores_actuales = anuencia_proveedor.objects.filter(anuencia = idx_anuencia).values_list('proveedor_id',flat=True) px = proveedores_actuales if p.tipo.clave == 'S' or p.tipo.clave == 'V': dpe = usuario_dependencia.objects.get(usuario__id=request.user.id) anuenciasolicitanteForm.base_fields['dependencias'].queryset = catalogoDependencias.objects.filter(id=dpe.dependencia.id) formulario = anuenciasolicitanteForm() elif p.tipo.clave == 'R' or p.tipo.clave == 'A' or p.tipo.clave == 'RL': anuenciasForm.base_fields['dependencias'].queryset = catalogoDependencias.objects.all() formulario = anuenciasForm() if anuencia_id != '0' and p.tipo.clave == 'S': formulario = anuenciasolicitanteForm(instance=anuencia_datos.objects.get(id=anuencia_id)) uno = 1 if anuencia_id != '0' and p.tipo.clave == 'R': formulario = anuenciasForm(instance=anuencia_datos.objects.get(id=anuencia_id)) uno = 1 if anuencia_id != '0' and p.tipo.clave == 'A': formulario = anuenciasForm(instance=anuencia_datos.objects.get(id=anuencia_id)), uno = 1 if anuencia_id != '0' and p.tipo.clave == 'V': formulario = anuenciasForm(instance=anuencia_datos.objects.get(id=anuencia_id)) uno = 1 except Exception as e: print(e) return TemplateResponse(request, 'agregar.html', { 'p': p, 'menuactivo2': menuactivo2, 'formulario': formulario, 'var': uno, 'anuencia_id': anuencia_id, 'array_proveedores': px, }) ###el siguiente codigo sirve para mostrar el detalle de la anuencia ##### @login_required def anuenciasDetalleView(request, anuencia_id): try: p = Perfil.objects.get(usuario_id=request.user.id) email_destino = User.objects.get(id=180) except Exception, e: msj = e.message messages.error(request, msj) return TemplateResponse(request, 'index.html') anuencia = anuencia_datos.objects.get(pk=anuencia_id) detalle = anuencia_detalle.objects.filter(anuencia_id=anuencia_id) obs = observaciones.objects.filter(anuencia=anuencia_id) e = estatus.objects.all() menuactivo2 = 'active' if request.method == 'POST': precio = request.POST.get('precio') estudio = request.POST.get('estudio') observacion_data = request.POST.get('observacion_data') if p.tipo.clave == 'R': if precio: c = cambiar_estatus(anuencia_id, 'N') if c == '': anuencia.precio_mercado = True anuencia.fecha_validacion_precio = datetime.now() anuencia.rstatus ='ffa000' anuencia.estatus_id = 8 anuencia.save() try: msj = str('La Anuencia numero %s fue Enviada a Autorización.' % (anuencia.id)) subject = request.POST.get('subject', 'Información de Anuencia') message = request.POST.get('message', msj) from_email = request.POST.get('from_email', 'dgtic@tabasco.com.mx') var_email = str("pablocag@gmail.com") if subject and message and from_email: try: send_mail(subject, message, from_email, [var_email]) messages.info(request, 'La Anuencia fue Validada y enviada a Autorizacion' % ( anuencia.no_oficio)) return HttpResponseRedirect('/tablero/0') except BadHeaderError: return HttpResponse('Invalid header found.') else: return HttpResponse('Los Datos Ingresados son incorrectos.') msj = 'La Anuencia Fue Autorizada.' messages.success(request, msj) return HttpResponseRedirect('/tablero/0') except: msj = 'La Anuencia Fue Autorizada.' messages.success(request, msj) return HttpResponseRedirect('/tablero/0') else: c = cambiar_estatus(anuencia_id, 'N') if c == '': anuencia.precio_mercado = False anuencia.fecha_validacion_precio = datetime.now() anuencia.rstatus ='ffa000' anuencia.estatus_id = 8 anuencia.observacion_data = observacion_data anuencia.save() try: msj = str('La Anuencia numero %s fue Enviada a Autorización.' % (anuencia.id)) subject = request.POST.get('subject', 'Información de Anuencia') message = request.POST.get('message', msj) from_email = request.POST.get('from_email', 'dgtic@tabasco.com.mx') var_email = str("pablocag@gmail.com") if subject and message and from_email: try: send_mail(subject, message, from_email, [var_email]) messages.info(request, 'La Anuencia fue Validada y enviada a Autorizacion' % ( anuencia.no_oficio)) return HttpResponseRedirect('/tablero/0') except BadHeaderError: return HttpResponse('Invalid header found.') else: return HttpResponse('Los Datos Ingresados son incorrectos.') msj = 'La Anuencia Fue Autorizada.' messages.success(request, msj) return HttpResponseRedirect('/tablero/0') except: msj = 'La Anuencia Fue Autorizada.' messages.success(request, msj) return HttpResponseRedirect('/tablero/0') elif p.tipo.clave == 'A': if estudio: anuencia.analisis_factibilidad = True anuencia.rstatus = '09b71a' anuencia.estatus_id = 12 anuencia.fecha_autorizacion = datetime.now() anuencia.save() try: subject = 'La Anuencia %s Fue Autorizada' %anuencia.id to = [email_destino.email] from_email = EMAIL_HOST_USER ctx={ 'first_name': p.usuario.first_name, 'last_name': p.usuario.last_name, 'anuencia_id' : anuencia.id, 'fecha': datetime.now(), } mess = get_template('email_aut.html').render(Context(ctx)) msg = EmailMessage(subject, mess, to=to, from_email=from_email) msg.content_subtype = 'html' msg.send() msj = 'La Anuencia Fue Autorizada.' messages.success(request, msj) return HttpResponseRedirect('/tablero/0') except: msj = 'La Anuencia Fue Autorizada.' messages.success(request, msj) return HttpResponseRedirect('/tablero/0') else: anuencia.analisis_factibilidad = False anuencia.rstatus = 'DC143C' anuencia.estatus_id = 27 anuencia.fecha_autorizacion = datetime.now() anuencia.save() msj = 'La Anuencia no aprobo el estudio de factibilidad.' messages.warning(request, msj) return HttpResponseRedirect('/tablero/0') return render_to_response('detalle.html', { 'p': p, 'menuactivo2': menuactivo2, 'anuencia_id': anuencia_id, 'anuencia': anuencia, 'detalle': detalle, 'estatus': e, 'tipo_u': p.tipo.clave, 'obs':obs },context_instance=RequestContext(request)) ##agrega el Oficio de la dgtic las anuencias## @login_required def terminarView(request, anuencia_id): try: p = Perfil.objects.get(usuario_id=request.user.id) except Exception, e: msj = e.message messages.error(request, msj) return TemplateResponse(request, 'index.html') menuactivo2 = 'active' uno = 0 datos = anuencia_datos.objects.get(pk=anuencia_id) usuario = datos.usuario_id if request.method == 'POST': estatus_segun_captura = obtiene_estatus_id('S') if p.tipo.clave == 'R': estatus_segun_captura = obtiene_estatus_id('FC') if p.tipo.clave == 'A': estatus_segun_captura = obtiene_estatus_id('CA') # if p.tipo.clave=='A': if anuencia_id == '0': i = anuencia_datos(activo=True, usuario=usuario, fecha_registro=datetime.now(), estatus=estatus_segun_captura) else: i = anuencia_datos.objects.get(pk=anuencia_id) i.activo = True i.fecha_registro = datetime.now() i.estatus = estatus_segun_captura formulario = anuenciasForm(request.POST, request.FILES, instance=i) if anuencia_id != '0': if formulario.is_valid(): try: a = formulario.save() msj = 'El registro %s se ha Actualizado .' % (a.id) messages.success(request, msj) return HttpResponseRedirect('/tablero/0') except Exception, e: msj = e.message messages.error(request, msj) if 'guardar' in request.POST: messages.error(request, 'guardar') return HttpResponseRedirect('/tablero/0') elif 'guardar_y_agregar_otro' in request.POST: messages.error(request, 'guardar y agregar otro') return HttpResponseRedirect('/agregar/0') else: msj = 'Por favor, corrija el siguiente error.' messages.error(request, msj) else: if formulario.is_valid(): try: a = formulario.save() msj = 'El registro %s se ha guardado, por favor ingrese el Detalle.' % (a.id) messages.success(request, msj) return HttpResponseRedirect('/detalle/add/%s?' % (a.id)) except Exception, e: msj = e.message messages.error(request, msj) if 'guardar' in request.POST: messages.error(request, 'guardar') return HttpResponseRedirect('/tablero/0') elif 'guardar_y_agregar_otro' in request.POST: messages.error(request, 'guardar y agregar otro') return HttpResponseRedirect('/agregar/0') else: msj = 'Por favor, corrija el siguiente error.' messages.error(request, msj) else: if p.tipo.clave == 'S': dpe = usuario_dependencia.objects.get(usuario__id=request.user.id) anuenciasolicitanteForm.base_fields['dependencias'].queryset = catalogoDependencias.objects.filter( id=dpe.dependencia.id) formulario = anuenciasolicitanteForm() elif p.tipo.clave == 'R' or p.tipo.clave == 'A': anuenciasForm.base_fields['dependencias'].queryset = catalogoDependencias.objects.all() formulario = anuenciasForm() if anuencia_id != '0' and p.tipo.clave == 'S': formulario = anuenciasolicitanteForm(instance=anuencia_datos.objects.get(id=anuencia_id)) uno = 1 if anuencia_id != '0' and p.tipo.clave == 'R': formulario = anuenciasForm(instance=anuencia_datos.objects.get(id=anuencia_id)) uno = 1 if anuencia_id != '0' and p.tipo.clave == 'A': formulario = anuenciasForm(instance=anuencia_datos.objects.get(id=anuencia_id)) uno = 1 return TemplateResponse(request, 'agregar.html', { 'p': p, 'menuactivo2': menuactivo2, 'formulario': formulario, 'var': uno, 'anuencia_id': anuencia_id }) ##El siguiente agrega el Oficio de la dgtic las anuencias### @login_required def finalizarView(request, anuencia_id): try: p = Perfil.objects.get(usuario_id=request.user.id) except Exception, e: msj = e.message messages.error(request, msj) return TemplateResponse(request, 'index.html') menuactivo2 = 'active' uno = 0 datos = anuencia_datos.objects.get(pk=anuencia_id) usuario = datos.usuario_id if request.method == 'POST': estatus_segun_captura = obtiene_estatus_id('S') if p.tipo.clave == 'R': estatus_segun_captura = obtiene_estatus_id('A') if p.tipo.clave == 'A': estatus_segun_captura = obtiene_estatus_id('CA') # if p.tipo.clave=='A': if anuencia_id == '0': i = anuencia_datos(activo=True, usuario=usuario, fecha_registro=datetime.now(), estatus=estatus_segun_captura) else: i = anuencia_datos.objects.get(pk=anuencia_id) i.activo = True i.fecha_registro = datetime.now() i.estatus = estatus_segun_captura formulario = FinalizarForm(request.POST, request.FILES, instance=i) if anuencia_id != '0': if formulario.is_valid(): try: a = formulario.save() msj = 'El registro %s se ha Actualizado .' % (a.id) messages.success(request, msj) return HttpResponseRedirect('/tablero/0') except Exception, e: msj = e.message messages.error(request, msj) if 'guardar' in request.POST: messages.error(request, 'guardar') return HttpResponseRedirect('/tablero/0') elif 'guardar_y_agregar_otro' in request.POST: messages.error(request, 'guardar y agregar otro') return HttpResponseRedirect('/agregar/0') else: msj = 'Por favor, corrija el siguiente error.' messages.error(request, msj) else: if formulario.is_valid(): try: a = formulario.save() msj = 'El registro %s se ha guardado, por favor ingrese el Detalle.' % (a.id) messages.success(request, msj) return HttpResponseRedirect('/detalle/add/%s?' % (a.id)) except Exception, e: msj = e.message messages.error(request, msj) if 'guardar' in request.POST: messages.error(request, 'guardar') return HttpResponseRedirect('/tablero/0') elif 'guardar_y_agregar_otro' in request.POST: messages.error(request, 'guardar y agregar otro') return HttpResponseRedirect('/agregar/0') else: msj = 'Por favor, corrija el siguiente error.' messages.error(request, msj) else: if p.tipo.clave == 'S': dpe = usuario_dependencia.objects.get(usuario__id=request.user.id) anuenciasolicitanteForm.base_fields['dependencias'].queryset = catalogoDependencias.objects.filter( id=dpe.dependencia.id) formulario = anuenciasolicitanteForm() elif p.tipo.clave == 'R' or p.tipo.clave == 'A': anuenciasForm.base_fields['dependencias'].queryset = catalogoDependencias.objects.all() formulario = anuenciasForm() if anuencia_id != '0' and p.tipo.clave == 'S': formulario = anuenciasolicitanteForm(instance=anuencia_datos.objects.get(id=anuencia_id)) uno = 1 if anuencia_id != '0' and p.tipo.clave == 'R': formulario = FinalizarForm(instance=anuencia_datos.objects.get(id=anuencia_id)) uno = 1 if anuencia_id != '0' and p.tipo.clave == 'A': formulario = FinalizarForm(instance=anuencia_datos.objects.get(id=anuencia_id)) uno = 1 return TemplateResponse(request, 'agregar.html', { 'p': p, 'menuactivo2': menuactivo2, 'formulario': formulario, 'var': uno, 'anuencia_id': anuencia_id }) ###vista para mostrar las anuencias en el tablero principal##### @login_required def tableroView(request, estatus_id=0): proveedores = proveedor_proveedorview.objects.all() valor = 0 try: p = Perfil.objects.get(usuario_id=request.user.id) except Exception, e: msj = e.message if msj.find('Perfil matching query does not exist. Lookup parameters were') != -1: msj = 'No existe el perfil para este usuario' messages.error(request, msj) return TemplateResponse(request, 'index.html') inner_qs = Perfil.objects.values_list('usuario_id').filter(direccion_id=p.direccion_id) anuencias_estadisticas = anuencia_datos.objects.filter(usuario_id=-1) if p.tipo.clave == 'R' or p.tipo.clave == 'A' or p.tipo.clave == 'V' or p.tipo.clave == 'RL': anuencias_estadisticas = anuencia_datos.objects.all() if p.tipo.clave == 'S': d = date.today() anuencias_estadisticas = anuencia_datos.objects.filter(usuario_id=p.usuario_id, fecha_registro__year=d.year) anuenciasS = anuencias_estadisticas.filter(estatus__clave='S') anuenciasN = anuencias_estadisticas.filter(estatus__clave__in=('N')) anuenciasR = anuencias_estadisticas.filter(estatus__clave__in=('R')) anuenciasU = anuencias_estadisticas.filter(estatus__clave__in=('U')) anuenciasV = anuencias_estadisticas.filter(estatus__clave__in=('V')) anuenciasA = anuencias_estadisticas.filter(estatus__clave__in=('A')) anuenciasC = anuencias_estadisticas.filter(estatus__clave__in=('C')) anuenciasE = anuencias_estadisticas.filter(estatus__clave__in=('E')) anuenciasP = anuencias_estadisticas.filter(estatus__clave='CR') anuenciasCA = anuencias_estadisticas.filter(estatus__clave='CA') anuenciasF = anuencias_estadisticas.filter(estatus__clave='F') anuenciasFC = anuencias_estadisticas.filter(estatus__clave='FC') anuenciasL = anuencias_estadisticas.filter(estatus__clave='L') anuenciasS.percent = 0 anuenciasN.percent = 0 anuenciasR.percent = 0 anuenciasU.percent = 0 anuenciasV.percent = 0 anuenciasA.percent = 0 anuenciasC.percent = 0 anuenciasE.percent = 0 anuenciasP.percent = 0 anuenciasCA.percent = 0 anuenciasF.percent = 0 anuenciasFC.percent = 0 anuenciasL.percent = 0 if anuencias_estadisticas.count() != 0: anuenciasS.percent = str(anuenciasS.count() * 100.00 / anuencias_estadisticas.count()) anuenciasN.percent = str(anuenciasN.count() * 100.00 / anuencias_estadisticas.count()) anuenciasR.percent = str(anuenciasR.count() * 100.00 / anuencias_estadisticas.count()) anuenciasU.percent = str(anuenciasU.count() * 100.00 / anuencias_estadisticas.count()) anuenciasV.percent = str(anuenciasV.count() * 100.00 / anuencias_estadisticas.count()) anuenciasA.percent = str(anuenciasA.count() * 100.00 / anuencias_estadisticas.count()) anuenciasC.percent = str(anuenciasC.count() * 100.00 / anuencias_estadisticas.count()) anuenciasE.percent = str(anuenciasE.count() * 100.00 / anuencias_estadisticas.count()) anuenciasP.percent = str(anuenciasP.count() * 100.00 / anuencias_estadisticas.count()) anuenciasCA.percent = str(anuenciasCA.count() * 100.00 / anuencias_estadisticas.count()) anuenciasF.percent = str(anuenciasF.count() * 100.00 / anuencias_estadisticas.count()) anuenciasFC.percent = str(anuenciasFC.count() * 100.00 / anuencias_estadisticas.count()) anuenciasL.percent = str(anuenciasL.count() * 100.00 / anuencias_estadisticas.count()) e = estatus.objects.all() cantidad_revisa = anuenciasP.count() anuencias = anuencia_datos.objects.all().order_by('-fecha_registro') if p.tipo.clave == 'R' or p.tipo.clave == 'V': anuencias = anuencias.filter(Q(estatus__clave__in=('N', 'V','P','I')) | Q(estatus__clave__in=('E', 'S', 'CR', 'U'), usuario=p.usuario_id)) if p.tipo.clave == 'S': anuencias = anuencias.filter( Q(estatus__clave__in=('E', 'S', 'U', 'N', 'V'), usuario=p.usuario_id, fecha_registro__year=d.year)) if p.tipo.clave == 'A': anuencias = anuencias.filter(Q(estatus__clave__in=('U')) | Q(estatus__clave__in=('CA'), usuario=p.usuario_id)) if p.tipo.clave == 'RL': anuencias = anuencias.filter(Q(estatus__clave__in=('L'))) bscr = request.GET.get('bscr') dep = request.GET.get('dep') fecha = request.GET.get('fecha') fecha2 = request.GET.get('fecha2') palabra = request.GET.get('palabra') rpp = request.GET.get('rpp') proveedor= request.GET.get('prov') id_anuencia= request.GET.get('id_anuencia') if id_anuencia: anuencias = anuencias.filter(id = id_anuencia) if rpp != None: rpp = rpp else: rpp = 10 if bscr != None: anuencias = anuencias.filter( Q(id__icontains=bscr) | Q(no_oficio__icontains=bscr) | Q(contacto_tecnico__icontains=bscr) | Q(telefono_fax__icontains=bscr) | Q(extension__icontains=bscr) | Q(correo_electronico__icontains=bscr) | Q(no_requisicion__icontains=bscr) | Q(justificacion__icontains=bscr) | Q(estatus__nombre__icontains=bscr) | Q(fecha_solicitud__icontains=bscr) | Q(justificacion__icontains=bscr) | Q(anuencia_detalle__descripcion__icontains=bscr) ).distinct() valor = 1 elif dep != None: anuencias = anuencias.filter( dependencias__clave__icontains=dep ).distinct() elif proveedor != None: filtro_proveedor= ProveedorView.filter( Q(razon_social__icontains=proveedor) | Q(razon_comercial__icontains=proveedor) ).distinct() if fecha != '' and fecha != None and fecha2 != '' and fecha2 != None: anuencias = anuencias.filter(fecha_registro__range=(fecha, fecha2)) valor = 2 elif fecha != '' and fecha != None: anuencias = anuencias.filter(fecha_registro=fecha) if dep != None and palabra != None: anuencias = anuencias.filter( Q(dependencias__clave__icontains=dep, anuencia_detalle__descripcion__icontains=palabra)) valor = 3 if palabra != None: anuencias = anuencias.filter( Q(anuencia_detalle__descripcion__icontains=palabra) | Q(justificacion__icontains=palabra)) paginator = Paginator(anuencias, rpp) page = request.GET.get('page') total = anuencias.count() try: anuencias = paginator.page(page) except PageNotAnInteger: anuencias = paginator.page(1) except EmptyPage: anuencias = paginator.page(paginator.num_pages) e = estatus.objects.all() menuactivo2 = 'active' return TemplateResponse(request, 'tablero.html', { 'p': p, 'menuactivo2': menuactivo2, 'datos': anuencias, 'fecha': fecha, 'dep': dep, 'estatus': e, 'palabra': palabra, 'rpp': rpp, 'bscr': bscr, 'total': total, 'id_status': estatus_id, 'anuencias': anuencias, 'anuenciasS': anuenciasS, 'anuenciasN': anuenciasN, 'anuenciasR': anuenciasR, 'anuenciasU': anuenciasU, 'anuenciasV': anuenciasV, 'anuenciasA': anuenciasA, 'anuenciasC': anuenciasC, 'anuenciasE': anuenciasE, 'anuenciasP': anuenciasP, 'anuenciasCA': anuenciasCA, 'anuenciasF': anuenciasF, 'anuenciasFC': anuenciasFC, 'anuenciasL': anuenciasL, 'revisa': cantidad_revisa, 'valor': valor, 'proveedores': proveedores } ) @login_required def Actualhistorico(request): valor = 0 usuario = request.user try: p = Perfil.objects.get(usuario=usuario) except Exception, e: msj = 'No existe el perfil para este usuario' messages.error(request, msj) return TemplateResponse(request, 'index.html') d = date.today() anuencias = anuencia_datos.objects.filter(fecha_registro__year=d.year).order_by('-id') proveedores = proveedor_proveedorview.objects.all() if p.tipo.clave == 'S': anuencias = anuencias.filter(usuario=usuario) bscr_a = request.GET.get('bscr_a') dep = request.GET.get('dep') fecha_a = request.GET.get('fecha_a') fecha2a = request.GET.get('fecha2a') palabra_1 = request.GET.get('palabra') id_anuencia = request.GET.get('id_anuencia') rpp = request.GET.get('rpp') if rpp != None: rpp = rpp else: rpp = 10 if id_anuencia: anuencias = anuencias.filter(id = id_anuencia) if bscr_a != None: anuencias = anuencias.filter( Q(id__icontains=bscr_a) | Q(no_oficio__icontains=bscr_a) | Q(contacto_tecnico__icontains=bscr_a) | Q(telefono_fax__icontains=bscr_a) | Q(extension__icontains=bscr_a) | Q(correo_electronico__icontains=bscr_a) | Q(no_requisicion__icontains=bscr_a) | Q(justificacion__icontains=bscr_a) | Q(estatus__nombre__icontains=bscr_a) | Q(fecha_solicitud__icontains=bscr_a) | Q(justificacion__icontains=bscr_a) | Q(anuencia_detalle__descripcion__icontains=bscr_a) ).distinct() valor = 1 elif dep != None: anuencias = anuencias.filter( dependencias__clave__icontains=dep ).distinct() if fecha_a != '' and fecha_a != None and fecha2a != '' and fecha2a != None: anuencias = anuencias.filter(fecha_registro__range=(fecha_a, fecha2a)) valor = 2 elif fecha_a != '' and fecha_a != None: anuencias = anuencias.filter(fecha_registro=fecha_a) if dep != None and palabra_1 != None: anuencias = anuencias.filter( Q(dependencias__clave__icontains=dep, anuencia_detalle__descripcion__icontains=palabra_1)) valor = 3 if palabra_1 != None: anuencias = anuencias.filter( Q(anuencia_detalle__descripcion__icontains=palabra_1) | Q(justificacion__icontains=palabra_1)) paginator = Paginator(anuencias, rpp) page = request.GET.get('page') total = anuencias.count() try: anuencias = paginator.page(page) except PageNotAnInteger: anuencias = paginator.page(1) except EmptyPage: anuencias = paginator.page(paginator.num_pages) return render_to_response('historico_actual.html', {'datos': anuencias, 'p': p, 'total': total, 'palabra': palabra_1, 'valor': valor, 'rpp': rpp, 'fecha_a': fecha_a, 'fecha2a': fecha2a, 'bscr_a': bscr_a, 'dep': dep, 'proveedores':proveedores}, context_instance=RequestContext(request)) # ###historico##### @login_required def historico(request): proveedores = proveedor_proveedorview.objects.all() valor = 0 usuario = request.user try: p = Perfil.objects.get(usuario=usuario) except Exception, e: msj = 'No existe el perfil para este usuario' messages.error(request, msj) return TemplateResponse(request, 'index.html') anuencias = anuencia_datos.objects.all().order_by('-id') if p.tipo.clave == 'S': anuencias = anuencias.filter(usuario=usuario) bscr = request.GET.get('bscr') dep = request.GET.get('dep') fecha = request.GET.get('fecha') fecha2 = request.GET.get('fecha2') palabra = request.GET.get('palabra') rpp = request.GET.get('rpp') id_anuencia = request.GET.get('id_anuencia') if rpp != None: rpp = rpp else: rpp = 10 if id_anuencia: anuencias = anuencias.filter(id = id_anuencia) if bscr != None: anuencias = anuencias.filter( Q(id__icontains=bscr) | Q(no_oficio__icontains=bscr) | Q(contacto_tecnico__icontains=bscr) | Q(telefono_fax__icontains=bscr) | Q(extension__icontains=bscr) | Q(correo_electronico__icontains=bscr) | Q(no_requisicion__icontains=bscr) | Q(justificacion__icontains=bscr) | Q(estatus__nombre__icontains=bscr) | Q(fecha_solicitud__icontains=bscr) | Q(justificacion__icontains=bscr) | Q(anuencia_detalle__descripcion__icontains=bscr) ).distinct() valor = 1 elif dep != None: anuencias = anuencias.filter( dependencias__clave__icontains=dep ).distinct() if fecha != '' and fecha != None and fecha2 != '' and fecha2 != None: anuencias = anuencias.filter(fecha_registro__range=(fecha, fecha2)) valor = 2 elif fecha != '' and fecha != None: anuencias = anuencias.filter(fecha_registro=fecha) if dep != None and palabra != None: anuencias = anuencias.filter( Q(dependencias__clave__icontains=dep, anuencia_detalle__descripcion__icontains=palabra)) valor = 3 if palabra != None: anuencias = anuencias.filter( Q(anuencia_detalle__descripcion__icontains=palabra) | Q(justificacion__icontains=palabra)) paginator = Paginator(anuencias, rpp) page = request.GET.get('page') total = anuencias.count() try: anuencias = paginator.page(page) except PageNotAnInteger: anuencias = paginator.page(1) except EmptyPage: anuencias = paginator.page(paginator.num_pages) return render_to_response('historico.html', {'datos': anuencias, 'p': p, 'total': total, 'palabra': palabra, 'valor': valor, 'rpp': rpp, 'fecha': fecha, 'fecha2': fecha2, 'bscr': bscr, 'dep': dep, 'proveedores':proveedores}, context_instance=RequestContext(request)) # muestra las anuencias pendientes de finalizar que estan autorizadas @login_required def pendientes(request): proveedores = proveedor_proveedorview.objects.all() valor = 0 # consulta el perfil del usuario try: p = Perfil.objects.get(usuario_id=request.user.id) except Exception, e: msj = e.message if msj.find('Perfil matching query does not exist. Lookup parameters were') != -1: msj = 'No existe el perfil para este usuario' messages.error(request, msj) return TemplateResponse(request, 'index.html') # consulta las anuencias dependiendo del perfil del usuario pendientes = None rpp = 0 if p.tipo.clave == 'R' or p.tipo.clave == 'A' or p.tipo.clave == 'V': anuencias = anuencia_datos.objects.filter(Q(estatus__clave='FC')| Q(estatus__clave='O')).order_by('-id') bscr = request.GET.get('bscr') dep = request.GET.get('dep') fecha = request.GET.get('fecha') fecha2 = request.GET.get('fecha2') palabra = request.GET.get('palabra') rpp = request.GET.get('rpp') id_anuencia = request.GET.get('id_anuencia') impreso = request.GET.get('impreso',0) if int(impreso) == 1: estatus = True elif int(impreso) == 2: estatus = False else: estatus=False if id_anuencia: anuencias = anuencias.filter(id = id_anuencia) if rpp != None: rpp = rpp else: rpp = 10 if bscr != None: anuencias = anuencias.filter( Q(id__icontains=bscr) | Q(no_oficio__icontains=bscr) | Q(contacto_tecnico__icontains=bscr) | Q(telefono_fax__icontains=bscr) | Q(extension__icontains=bscr) | Q(correo_electronico__icontains=bscr) | Q(no_requisicion__icontains=bscr) | Q(justificacion__icontains=bscr) | Q(estatus__nombre__icontains=bscr) | Q(fecha_solicitud__icontains=bscr) | Q(justificacion__icontains=bscr) | Q(anuencia_detalle__descripcion__icontains=bscr) ).distinct() valor = 1 elif dep != None: anuencias = anuencias.filter( dependencias__clave__icontains=dep ).distinct() if fecha != '' and fecha != None and fecha2 != '' and fecha2 != None: anuencias = anuencias.filter(fecha_registro__range=(fecha, fecha2)) valor = 2 elif fecha != '' and fecha != None: anuencias = anuencias.filter(fecha_registro=fecha) if dep != None and palabra != None: anuencias = anuencias.filter( Q(dependencias__clave__icontains=dep, anuencia_detalle__descripcion__icontains=palabra)) valor = 3 if palabra != None: anuencias = anuencias.filter( Q(anuencia_detalle__descripcion__icontains=palabra) | Q(justificacion__icontains=palabra)) if impreso: anuencias = anuencias.filter( se_imprimio=estatus ) for a in anuencias: if a.se_imprimio: print(a.id) paginator = Paginator(anuencias, rpp) page = request.GET.get('page') total = anuencias.count() try: anuencias = paginator.page(page) except PageNotAnInteger: anuencias = paginator.page(1) except EmptyPage: anuencias = paginator.page(paginator.num_pages) return render_to_response('pendientes.html', {'datos': anuencias, 'rpp': rpp, 'p': p, 'dep': dep, 'bscr': bscr, 'valor': valor, 'fecha': fecha, 'fecha2': fecha2, 'total': total, 'proveedores':proveedores,'impreso':impreso}, context_instance=RequestContext(request)) #################################### @login_required def anuenciasAgregarDetalleView(request, anuencia_id, detalle_id=0, id_p=0): consecutivo = 0 i = None variable = 0 d = date.today() try: # muestra el perifil del usuario p = Perfil.objects.get(usuario_id=request.user.id) dpe = usuario_dependencia.objects.get(usuario__id=request.user.id) if p.tipo.clave == 'S': anuencias_detalleForm.base_fields['proyecto'].queryset = addProyectos.objects.filter( dependencia__id=dpe.dependencia.id) if p.tipo.clave == 'R' or p.tipo.clave == 'A': anuencias_detalleForm.base_fields['proyecto'].queryset = addProyectos.objects.all() except Exception, e: msj = e.message messages.error(request, msj) return TemplateResponse(request, 'index.html') anuencia = anuencia_datos.objects.get(pk=anuencia_id) anuencia.fecha_modificacion_dependencia = datetime.now() anuencia.save() detalle = anuencia_detalle.objects.filter(anuencia_id=anuencia_id).order_by('-id') # envia los detalles al template if request.method == 'POST': # Guardarel formulario if detalle_id == 0: formulario = anuencias_detalleForm(request.POST) if request.POST.get('sin_iva') == 'on': cantidad = int(request.POST.get('cantidad')) precio = Decimal(request.POST.get('precio')) print(cantidad) v = formulario.save(commit=False) v.anuencia_id = anuencia_id v.fecha_registro = datetime.now() v.fecha_ultimo_cambio = datetime.now() v.activo = True v.usuario = request.user v.total = precio * cantidad v.save() msj = 'El Detalle se Guardo Correctamente' messages.success(request, msj) return HttpResponseRedirect('/detalle/add/%s' % (anuencia_id)) else: v = formulario.save(commit=False) v.anuencia_id = anuencia_id v.fecha_registro = datetime.now() v.fecha_ultimo_cambio = datetime.now() v.activo = True v.usuario = request.user v.total = request.POST.get('final') v.save() msj = 'El Detalle se Guardo Correctamente' messages.success(request, msj) return HttpResponseRedirect('/detalle/add/%s' % (anuencia_id)) else: detalle_actual = anuencia_detalle.objects.get(id=detalle_id) i = anuencia_detalle( anuencia_id=anuencia_id, id=detalle_id, fecha_registro=anuencia.fecha_registro, fecha_ultimo_cambio=datetime.now(), observaciones=detalle_actual.observaciones, usuario=request.user) formulario = anuencias_detalleForm(request.POST, instance=i) if formulario.is_valid(): formulario.save() msj = 'El Detalle se actualizó Correctemente' messages.success(request, msj) return HttpResponseRedirect('/detalle/add/%s' % (anuencia_id)) else: msj = "Error al actualizar" messages.error(request, msj) else: if detalle_id != 0: i = anuencia_detalle.objects.get(pk=detalle_id) variable = 1 formulario = anuencias_detalleForm(instance=i) # para generar el numero de lote siguiente_lote = anuencia_detalle.objects.values().filter(anuencia_id=anuencia_id).order_by('-id') if siguiente_lote.count() != 0: ultimo = int(siguiente_lote[0]['no_lote']); cadena = str(ultimo) if ultimo >= 10: consecutivo = ultimo + 1 if ultimo < 9: cadena = str(ultimo + 1) consecutivo = '0' + cadena if ultimo == 9: consecutivo = ultimo + 1 else: consecutivo = '01' return render_to_response('agregar_detalle.html', {'formulario': formulario, 'p': p, 'menuactivo2': 'active', 'user': request.user, 'siguiente_lote': consecutivo, 'detalle': detalle, 'anuencia': anuencia, 'var': variable, 'dependencia': dpe.dependencia.id}, context_instance=RequestContext(request)) #############################Editar detalle solo para Revision############################################### @login_required def editadetalleRevision(request, anuencia_id, detalle_id=0): d = date.today() i = anuencia_detalle.objects.get(id=detalle_id) variable = 0 try: p = Perfil.objects.get(usuario_id=request.user.id) dpe = usuario_dependencia.objects.get(usuario__id=request.user.id) anuencias_detalleForm.base_fields['proyecto'].queryset = addProyectos.objects.all() except Exception, e: msj = e.message messages.error(request, msj) return TemplateResponse(request, 'index.html') anuencia = anuencia_datos.objects.get(pk=anuencia_id) if request.method == 'POST': # Guardarel formulario detalle_actual = anuencia_detalle.objects.get(id=detalle_id) i = anuencia_detalle( anuencia_id=anuencia_id, id=detalle_id, fecha_registro=anuencia.fecha_registro, fecha_ultimo_cambio=datetime.now(), observaciones=detalle_actual.observaciones, usuario=request.user) formulario = anuencias_detalleForm(request.POST, instance=i) if formulario.is_valid(): formulario.save() msj = 'El Detalle se actualizó Correctemente' messages.success(request, msj) return HttpResponseRedirect('/calificar/%s' % (anuencia_id)) else: msj = "Error al actualizar" messages.error(request, msj) else: formulario = anuencias_detalleForm(instance=i) variable = 1 return render_to_response('editdetallerevision.html', {'formulario': formulario, 'p': p, 'menuactivo2': 'active', 'user': request.user, 'anuencia': anuencia, 'var': variable, 'dependencia': dpe.dependencia.id}, context_instance=RequestContext(request)) ############################################################################# @login_required def anuenciasCalificarView(request, anuencia_id): p = Perfil.objects.get(usuario_id=request.user.id) anuencia = anuencia_datos.objects.get(pk=anuencia_id) detalle = anuencia_detalle.objects.filter(anuencia_id=anuencia_id).order_by('id') correo = "mrc5622@gmail.com" email_destino = User.objects.get(id=180) if correo != '': correo = correo else: correo = "yo@tabasco.gob.mx" if request.method == 'POST': formulario2 = anuencias_detalle_autorizacionForm(request.POST) if formulario2.is_valid(): en_revision = False total_articulos_autorizados = 0 for item in detalle: if 'observaciones' + str(item.id) in request.POST: item.observaciones = request.POST.get('observaciones' + str(item.id)) if 'autorizado' + str(item.id) in request.POST: item.autorizado = request.POST.get('autorizado' + str(item.id)) en_revision = True total_articulos_autorizados += 1 else: item.autorizado = False item.fecha_ultimo_cambio = datetime.now() item.save() if detalle.count() == total_articulos_autorizados: e = obtiene_estatus_id('L') anuencia.estatus = e anuencia.fecha_ultimo_cambio = datetime.now() anuencia.rstatus = "9370db" anuencia.fecha_calificacion = datetime.now() anuencia.documentacion = True anuencia.save() try: subject = 'La documentación de la Anuencia %s fue validada.' %anuencia.id to = [email_destino.email] from_email = EMAIL_HOST_USER ctx={ 'fist_name': p.usuario.first_name, 'last_name': p.usuario.last_name, 'anuencia_id': anuencia.id, 'fecha_calif':anuencia.fecha_calificacion } mess = get_template('email.html').render(Context(ctx)) msg = EmailMessage(subject, mess, to=to, from_email = from_email) msg.content_subtype = 'html' msg.send() messages.info(request, 'La Anuencia se Reviso satisfactoriamente, quedando %s' % e.nombre) return HttpResponseRedirect('/tablero/0') except: messages.info(request, 'La Anuencia se Reviso satisfactoriamente, quedando %s' % e.nombre) return HttpResponseRedirect('/tablero/0') else: e = obtiene_estatus_id('E') anuencia.estatus = e anuencia.fecha_ultimo_cambio = datetime.now() anuencia.save() msj = str('Su anuencia con numero de oficio %s, fue rechazada Favor de verificarlo en el Sistema .' % ( anuencia.no_oficio)) subject = request.POST.get('subject', 'Informacion de Anuencia') message = request.POST.get('message', msj) from_email = request.POST.get('from_email', 'dgtic@tabasco.gob.mx') var_email = str(correo) for item in detalle: if 'observaciones' + str(item.id) in request.POST: observacion = request.POST.get('observaciones' + str(item.id)) observaciones.objects.create(observacion = observacion,lote = item.id,fecha = datetime.now(),anuencia_id = anuencia_id,usuario=request.user,estatus_id =anuencia.estatus_id ) if subject and message and from_email: try: send_mail(subject, message, from_email, [var_email]) messages.info(request, 'La Anuencia se Reviso satisfactoriamente, quedando %s' % e.nombre) return HttpResponseRedirect('/tablero/0') except BadHeaderError: return HttpResponse('Invalid header found.') else: return HttpResponse('Make sure all fields are entered and valid.') msj = 'La anuencia se Reviso, quedando %s' messages.info(request, msj % e.nombre) return HttpResponseRedirect('/tablero/0') else: formulario2 = anuencias_detalle_autorizacionForm() return TemplateResponse(request, 'calificar.html', { 'p': p, 'menuactivo2': 'active', 'anuencia': anuencia, 'detalle': detalle, }) #####muestra el perfil del usuario###### @login_required def perfil(request, user_id): p = Perfil.objects.get(usuario_id=request.user.id) return TemplateResponse(request, 'perfil.html', {'user': request.user, 'p': p}) def cambiar_estatus(anuencia_id, estatus_nuevo): try: a = anuencia_datos.objects.get(pk=anuencia_id) a.estatus = obtiene_estatus_id(estatus_nuevo) # valores ={'folio': anuencia_id, 'no_oficio': a.no_oficio,'asunto':'Solicitud de Dictamen Técnico','fecha_oficio':d,'propietario':'1','prioridad':'0'} # r = requests.post("http://10.11.28.36:8001/oficios/api/oficio_anuencia/", data = valores)#activar para sistema oficios a.save() r = '' return r except Exception, e: r = e return r # return r activar para sistema de oficios @login_required def envio_a_revision(request, anuencia_id): c = cambiar_estatus(anuencia_id, 'N') # c = cambiar_estatus(anuencia_id, 'V')##activar para conectar con oficios print(c) if c == '': r = revision(anuencia_id=anuencia_id, usuario=request.user, fecha_registro=datetime.now(), fecha_ultimo_cambio=datetime.now()) r.fecha_ultimo_cambio = datetime.now() r.save() anuencia = anuencia_datos.objects.get(pk=anuencia_id) anuencia.fecha_recepcion = datetime.now() anuencia.rstatus = "ffff00" anuencia.no_revision = int(anuencia.no_revision)+1 anuencia.fecha_modificacion_dependencia = datetime.now() anuencia.save() messages.success(request, 'la anuencia se ha enviado para su revision') # consulta de todos los usuarios que tengan perfil 1 perfiles_usuarios_id = Perfil.objects.values('usuario_id').filter(tipo_id=1) dato = User.objects.values('first_name','last_name').filter(username=r.usuario) print(dato) for aux in dato: nombre_persona= aux['first_name'] +' '+ aux['last_name'] subject='Nueva anuencia por validar del usuario '+ nombre_persona message='Se a recivido una nueva anuencia por parte del usuario '+nombre_persona # se realiza una lista con todos los correos de los usuarios de perfil 1 lista_correos=[] for usuarios_id in perfiles_usuarios_id: correos = User.objects.values('email').filter(pk=usuarios_id['usuario_id']) for correo in correos: print(correo) if correo['email']=='': correo='temporal@hotmail.com' lista_correos.append(correo) print(correo) else: lista_correos.append(correo['email']) print(correo) try: # se envia un correo a todas las direcciones de correo de la lista de correos datatuple=(subject, message, 'dgic@tabasco.gob.mx',lista_correos) datatuple=tuple((subject, message,'dgic@tabasco.gob.mx', [cor]) for cor in lista_correos) print(datatuple) send_mass_mail(datatuple) except Exception as e: print(e) else: messages.error(request, c) return HttpResponseRedirect('/tablero/0') @login_required def envio_a_autorizacion(request, anuencia_id): c = cambiar_estatus(anuencia_id, 'U') if c == '': r = autorizacion(anuencia_id=anuencia_id, usuario=request.user, fecha_registro=datetime.now(), fecha_ultimo_cambio=datetime.now()) r.fecha_ultimo_cambio = datetime.now() r.save() messages.success(request, 'la anuencia se ha enviado para su autorizacion') else: messages.error(request, c) return HttpResponseRedirect('/tablero/0') ###cambia el estatus a validacion de precios @login_required def envio_a_validacion_precio(request, anuencia_id): c = cambiar_estatus(anuencia_id, 'P') anuencia = anuencia_datos.objects.get(pk=anuencia_id) anuencia.fecha_validacion = datetime.now() anuencia.lineamientos = True anuencia.rstatus = 'bdb76b' anuencia.save() if c == '': r = autorizacion(anuencia_id=anuencia_id, usuario=request.user, fecha_registro=datetime.now(), fecha_ultimo_cambio=datetime.now()) r.fecha_ultimo_cambio = datetime.now() r.save() messages.success(request, 'la anuencia se ha enviado para validación de precios') else: messages.error(request, c) return HttpResponseRedirect('/tablero/0') @login_required def autorizar_view(request, anuencia_id): c = cambiar_estatus(anuencia_id, 'U') anuencia = anuencia_datos.objects.get(pk=anuencia_id) anuencia.fecha_validacion = datetime.now() anuencia.lineamientos = True anuencia.save() correo = anuencia.correo_electronico if c == '': try: msj = str('Su Anuencia con numero de oficio %s fue Validada por Lineamiento.' % (anuencia.no_oficio)) subject = request.POST.get('subject', 'Informacion de Anuencia') message = request.POST.get('message', msj) from_email = request.POST.get('from_email', 'dgic@tabasco.gob.mx') var_email = str(correo) if subject and message and from_email: try: send_mail(subject, message, from_email, [var_email]) messages.info(request, 'La Anuencia con numero de oficio %s fue validada por Lineamiento' % (anuencia.no_oficio)) return HttpResponseRedirect('/tablero/0') except BadHeaderError: return HttpResponse('Invalid header found.') else: return HttpResponse('Los Datos Ingresados son incorrectos.') except: messages.info(request, 'La Anuencia fue Validada y enviada a Autorizacion') return HttpResponseRedirect('/tablero/0') else: messages.error(request, c) return HttpResponseRedirect('/tablero/0') @login_required def anuenciasBorrarDetalleView(request, anuencia_id, detalle_id=0, id_p=0): anuencia_detalle.objects.get(pk=detalle_id).delete() return HttpResponseRedirect('/detalle/add/%s' % anuencia_id) @login_required def anuenciaRechazarLineamientoView(request): anuencia_id = request.POST.get('anuencia_id') observacion = request.POST.get('observacion') anuencia = anuencia_datos.objects.get(pk=anuencia_id) anuencia.fecha_validacion = datetime.now() anuencia.rstatus = 'A52A2A' anuencia.save() observacion_linea = observaciones.objects.create(observacion=observacion, fecha=datetime.now(), anuencia_id=anuencia_id, usuario_id=request.user.id, estatus_id=25) correo = anuencia.correo_electronico c = cambiar_estatus(anuencia_id, 'I') if c == '': try: msj = str('La Anuencia con numero de oficio %s fue Rechazada Por El departamento de Lineamiento.' % (anuencia.no_oficio)) subject = request.POST.get('subject', 'Informacion de Anuencia') message = request.POST.get('message', msj) from_email = request.POST.get('from_email', 'dgtic@tabasco.gob.mx') var_email = str(correo) if subject and message and from_email: try: send_mail(subject, message, from_email, [var_email]) messages.info(request, 'La Anuencia fue Rechazada por el area de Lineamientos') return HttpResponseRedirect('/tablero/0') except BadHeaderError: return HttpResponse('Invalid header found.') else: return HttpResponse('Make sure all fields are entered and valid.') except: messages.info(request, 'La Anuencia fue rechazada por el area de lineamietos') return HttpResponseRedirect('/tablero/0') messages.success(request, 'la anuencia se ha rechazado') else: messages.error(request, c) return HttpResponseRedirect('/tablero/0') @login_required def anuenciaRechazarView(request, anuencia_id): anuencia = anuencia_datos.objects.get(pk=anuencia_id) correo = anuencia.correo_electronico c = cambiar_estatus(anuencia_id, 'E') if c == '': try: msj = str('Su Anuencia con numero de oficio %s fue Rechazada.' % (anuencia.no_oficio)) subject = request.POST.get('subject', 'Informacion de Anuencia') message = request.POST.get('message', msj) from_email = request.POST.get('from_email', 'dgtic@tabasco.gob.mx') var_email = str(correo) if subject and message and from_email: try: send_mail(subject, message, from_email, [var_email]) messages.info(request, 'La Anuencia fue Rechazada') return HttpResponseRedirect('/tablero/0') except BadHeaderError: return HttpResponse('Invalid header found.') else: return HttpResponse('Make sure all fields are entered and valid.') except: messages.info(request, 'La Anuencia fue Rechazada') return HttpResponseRedirect('/tablero/0') messages.success(request, 'la anuencia se ha rechazado') else: messages.error(request, c) return HttpResponseRedirect('/tablero/0') @login_required def anuenciaCancelarView(request, anuencia_id): c = cambiar_estatus(anuencia_id, 'C') if c == '': messages.success(request, 'la anuencia se ha cancelado') else: messages.error(request, c) return HttpResponseRedirect('/tablero/0') @login_required def agregarproyecto(request): p = Perfil.objects.get(usuario=request.user) if request.method == 'POST': clave = request.POST['clave'] # contar_p = addProyectos.objects.filter(clave=clave).count() # if contar_p == 0: formulario = agregarproyectoForm(request.POST, request.FILES) if formulario.is_valid(): formulario.save() messages.success(request, 'Proyecto Guardado') return HttpResponseRedirect('/altaproyecto') # else: # messages.error(request, 'El Proyecto con la clave %s ya fue Registrado' % (clave)) # return HttpResponseRedirect('/altaproyecto') else: formulario = agregarproyectoForm() return render_to_response('proyectosadd.html', {'formulario': formulario, 'p': p}, context_instance=RequestContext(request)) @login_required def registrarpartida(request): p = Perfil.objects.get(usuario=request.user) print(p) if request.method == 'POST': clave = request.POST.get("clave") nombre = request.POST.get("nombre") ejercicio = request.POST.get("ejercicio") partida = addPartidas(clave=clave, nombre=nombre, ejercicio=ejercicio) partida.save() msj = "La partida Partida %s - %s fue Guardada Correctamente" % (partida.clave, partida.nombre) messages.success(request, msj) return HttpResponseRedirect('/altapartidas') else: msj = "Error" messages.error(request, msj) return render_to_response('altaspartidas.html', context_instance=RequestContext(request)) @login_required def agregarpartida(request): p = Perfil.objects.get(usuario=request.user) if request.method == 'POST': formulario = agregarpartidasForm(request.POST) try: if formulario.is_valid(): clave = request.POST["clave"] nombre = request.POST["nombre"] ejercicio = request.POST["ejercicio"] partida = addPartidas(clave = clave,nombre = nombre,ejercicio = ejercicio) partida.save() proyecto = request.POST.getlist('proyectos') for p in proyecto: print p partida.proyectos.add(p) partida.save() messages.success(request, 'Partida Guardada Correctamente') return HttpResponseRedirect('altapartidas') # if formulario.is_valid(): # for partida in request.POST.getlist('partidas'): # print partida # proyecto = request.POST.get('proyectos') # print(proyecto) # partida_id = addPartidas.objects.get(id=partida) # proyecto_id = addProyectos.objects.get(id=proyecto) # proyecto_id.addpartidas_set.add(partida_id) # messages.success(request, 'La Partida Fue Asignada al Proyecto Correctamente') # return HttpResponseRedirect('altapartidas') except: pass else: formulario = agregarpartidasForm() return render_to_response('altaspartidas.html', {'formulario': formulario, 'p': p}, context_instance=RequestContext(request)) @login_required def addDetalle(request): if request.method == 'POST': formulario1 = addDetalleproyectoForm(request.POST, request.FILES) if formulario1.is_valid() and formulario2.is_valid(): formulario1.save() return response_to_response('/altadetalle') else: formulario1 = addDetalleproyectoForm() return render_to_response('addDetalle.html', {'formulario': formulario1}, context_instance=RequestContext(request)) from django.views.decorators.csrf import csrf_exempt @csrf_exempt def muestrapartida(request): if request.is_ajax(): if request.method == 'GET': respuest = "este se envio via get" elif request.method == 'POST': id_proyecto = request.POST['id_proyecto'] partidas = serializers.serialize("json", addPartidas.objects.all().filter(proyectos=id_proyecto), fields=('id', 'clave', 'nombre')) return HttpResponse(partidas, mimetype="application/javascript") @csrf_exempt def getProyectos(request): if request.is_ajax(): if request.method == 'GET': respuest = "este se envio via get" elif request.method == 'POST': id_dependencia = request.POST['dependencia'] proyectos = serializers.serialize("json", addProyectos.objects.filter(dependencia__id=id_dependencia), fields=('id', 'clave', 'nombre')) return HttpResponse(proyectos, mimetype="application/javascript") @login_required def prueba(request): if request.is_ajax(): if request.method == 'GET': respuest = "este se envio via get" elif request.method == 'POST': clave = request.POST['clave'] partidas = serializers.serialize("json", addPartidas.objects.all().filter(clave=clave), fields=('nombre')) return HttpResponse(partidas, mimetype="application/javascript") @login_required def autorizacionView(request, anuencia_id): anuencia_id = anuencia_id # url = "http://127.0.0.1:60023/viewer/preview?__report=%2Fvar%2Flib%2Ftomcat6%2Fwebapps%2Fbirt%2Fdictamen.rptdesign&__format=pdf&__svg=false&__locale=es_MX&__timezone=US%2FIndiana-Starke&__masterpage=true&__rtl=false&__cubememsize=10&__resourceFolder=%2Fvar%2Flib%2Ftomcat6%2Fwebapps%2Fbirt&__dpi=96&__emitterid=org.eclipse.birt.report.engine.emitter.pdf&166040612&" url = "http://10.2.8.40:8080/birt/frameset?__report=dictamen.rptdesign&__format=pdf" url += "&anuencia_id=" + anuencia_id return HttpResponseRedirect(url) class AnuenciasList(generics.ListAPIView): serializer_class = anuencia_datosSerializer @csrf_exempt def get_queryset(self): dt = datetime.combine(date.today(), time(23, 59, 59)) hoy = date.today() d = hoy - timedelta(days=3) # queryset = anuencia_datos.objects.filter(fecha_ultimo_cambio__range=(d,dt),estatus_id__in=(12,8,7)).order_by('-id') queryset = anuencia_datos.objects.filter(Q(fecha_ultimo_cambio__range=(d, dt), estatus__clave__in=('FC',)) | Q( estatus__clave__in=('N', 'U'))).order_by('-id') return queryset class AnuenciasAsignacionList(generics.ListAPIView): serializer_class = anuencia_datosSerializer @csrf_exempt def get_queryset(self): dt = datetime.combine(date.today(), time(23, 59, 59)) hoy = date.today() d = hoy - timedelta(days=3) queryset = anuencia_datos.objects.filter(Q(estatus__clave__in=('V',))).order_by('-id') return queryset class AnuenciasAtendidasList(generics.ListAPIView): serializer_class = anuencia_datosSerializer @csrf_exempt def get_queryset(self): hoy = date.today() inicio = '2014-01-01' queryset = anuencia_datos.objects.filter(Q(fecha_ultimo_cambio__range=(inicio, hoy), estatus_id=4)).order_by( '-id') return queryset @login_required def finalizados(request): hoy = date.today() inicio = '2014-01-01' datos = anuencia_datos.objects.filter(Q(fecha_ultimo_cambio__range=(inicio, hoy), estatus_id=4)).order_by('-id') paginator = Paginator(datos, 10) # Show 25 contacts per page page = request.GET.get('page') try: datos = paginator.page(page) except PageNotAnInteger: datos = paginator.page(1) except EmptyPage: datos = paginator.page(paginator.num_pages) return render_to_response('terminados.html', {'datos': datos}, context_instance=RequestContext(request)) @login_required def DetallefinalizadosView(request, anuencia_id): anuencia = anuencia_datos.objects.get(pk=anuencia_id) detalle = anuencia_detalle.objects.filter(anuencia_id=anuencia_id) e = estatus.objects.all() menuactivo2 = 'active' return TemplateResponse(request, 'detalle.html', { 'menuactivo2': menuactivo2, 'anuencia_id': anuencia_id, 'anuencia': anuencia, 'detalle': detalle, 'estatus': e }) @login_required def getanuencias(request): if request.method == 'POST': formulario1 = addDetalleproyectoForm(request.POST, request.FILES) if formulario1.is_valid() and formulario2.is_valid(): formulario1.save() return response_to_response('/altadetalle') else: formulario1 = addDetalleproyectoForm() return render_to_response('addDetalle.html', {'formulario': formulario1}, context_instance=RequestContext(request)) # class AnuenciasViewSet(generics.UpdateAPIView): # serializer_class = anuencia_datosSerializer # model = anuencia_datos # @method_decorator(csrf_exempt) # def dispatch(self,*args,**kwargs): # return super(AnuenciasViewSet,self).dispatch(*args,**kwargs) # def put(self,obj): # obj.fecha_recepcion = datetime.now() # return super(AnuenciasViewSet,self).put(obj) # class AnuenciasViewSet(generics.UpdateAPIView): # serializer_class = anuencia_datosSerializer # model = anuencia_datos # @method_decorator(csrf_exempt) # def dispatch(self, *args, **kwargs): # return super(AnuenciasViewSet, self).dispatch(*args, **kwargs) # def put(self, request, *args, **kwargs): # return super(AnuenciasViewSet, self).put(request, *args, **kwargs) class AnuenciasViewSet(mixins.UpdateModelMixin, GenericAPIView): serializer_class = None model = anuencia_datos def put(self, request, *args, **kwargs): return self.update(request, *args, **kwargs) def patch(self, request, *args, **kwargs): return self.partial_update(request, *args, **kwargs) 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 DictamenView(View, JasperMix): def get(self,request,*args,**kwargs): resultado = '' if request.user.first_name: nombres = request.user.first_name.split(' ') for nombre in nombres: if nombre not in('de', 'las', 'la', 'del', 'los', 'y'): resultado = resultado + nombre[0].lower() if request.user.last_name: apellidos = request.user.last_name.split(' ') for apellido in apellidos: if apellido not in('de', 'las', 'la', 'del', 'los', 'y'): resultado = resultado + apellido[0].lower() iniciales = resultado anuencia_id = kwargs.get('anuencia_id') self.generateReport('/anuencias/dictamen/dictamen2',settings.MEDIA_ROOT+'/dictamenes/dictamen.pdf',{'anuencia_id':str(anuencia_id),'iniciales':str(iniciales),},'pdf') return HttpResponseRedirect('/media/dictamenes/dictamen'+'.pdf') class BorradorView(View, JasperMix): def get(self, request, *args, **kwargs): anuencia_id = kwargs.get('anuencia_id') self.generateReport('/anuencias/dictamen/borrador', settings.MEDIA_ROOT + '/dictamenes/borrador.pdf', {'anuencia_id': str(anuencia_id), }, 'pdf') return HttpResponseRedirect('/media/dictamenes/borrador' + '.pdf') class RechazadoView(View, JasperMix): def get(self, request, *args, **kwargs): anuencia_id = kwargs.get('anuencia_id') self.generateReport('/anuencias/dictamen/rechazado', settings.MEDIA_ROOT + '/dictamenes/rechazado.pdf', {'anuencia_id': str(anuencia_id), }, 'pdf') return HttpResponseRedirect('/media/dictamenes/rechazado' + '.pdf') class DictamenOficio(View, JasperMix): def get(self, request, *args, **kwargs): anuencia_id = kwargs.get('anuencia_id') print settings.MEDIA_ROOT + '/dictamenes/oficioCMAIG.pdf' self.generateReport('/anuencias/oficioCMAIG', settings.MEDIA_ROOT + '/dictamenes/oficioCMAIG.pdf', {'anuencia_id': str(anuencia_id), }, 'pdf') return HttpResponseRedirect('/media/dictamenes/oficioCMAIG' + '.pdf') class oficioRechazadoLineamiento(View, JasperMix): def get(self, request, *args, **kwargs): anuencia_id = kwargs.get('anuencia_id') print settings.MEDIA_ROOT + '/dictamenes/oficioRechazadoLineamiento.pdf' self.generateReport('/anuencias/oficio_rechazo_lineamientos', settings.MEDIA_ROOT + '/dictamenes/oficioRechazadoLineamiento.pdf', {'anuencia_id': str(anuencia_id), }, 'pdf') return HttpResponseRedirect('/media/dictamenes/oficioRechazadoLineamiento' + '.pdf') """ API para iniciar sesion desde el Sistema de Compras""" class UserComprasApiview(APIView): error_messages = { 'invalid': "Usuario o contraseña no valido", 'disabled': "Lo siente tu usuario ha sido desactivado", 'no': "usuario no registrado", 'variables': "Informacion Incorrecta" } @never_cache def _error_response(self, message_key): data = { 'success': False, 'mensaje': self.error_messages[message_key], } return Response(data) def get(self, request, *args, **kwargs): if request.user.is_authenticated(): p = Perfil.objects.get(usuario_id=request.user.id) return Response({'user_id': p.usuario.username}) else: return Response({'user_id': "none"}) def post(self, request, *args, **kwargs): username = request.DATA.get('UserName') password = request.DATA.get('Password') user = authenticate(username=username, password=password) if user is not None: if user.is_active: p = Perfil.objects.get(usuario_id=user.id) mensaje = p.usuario.username login(request, user) success = True response_data = {'success': success, 'usuario': mensaje} return Response(response_data) return self._error_response('disabled') else: return self._error_response('invalid') """ Servicio para Generar Anuencias y sus respectivos lotes desde el sistema de compras """ class ApiAgregarAnuencia(APIView): def post(self, request): d = date.today() respuesta = None aux = request.DATA['contenedor'] aux = json.loads(aux) # Validamos que la lista contenga articulos validar = aux['articulos'] if len(validar) != 0: # Recibimos los datos de la lista que pertenecen a la requisicion try: usuario = aux['requisiciones'][0]['usuario'] fecha_registro = aux['requisiciones'][0]['fecha_registro'] justificacion = aux['requisiciones'][0]['observacion'] autoriza = aux['requisiciones'][0]['autoriza'] solicitante = aux['requisiciones'][0]['solicitante'] num_oficio = aux['requisiciones'][0]['num_oficio'] requisicion = aux['requisiciones'][0]['requisicion'] # Si contiene una justificacion se procede a generar la aunencia if justificacion != '': user = User.objects.get(username=usuario) user_dep = usuario_dependencia.objects.get(usuario_id=user.id) cont = anuencia_datos.objects.filter(fecha_registro__year=d.year).count() ac = str(d.year) no_of = str(num_oficio) cont_tec = solicitante ju = justificacion req = requisicion cont_f = cont + 1 cadena = 'SA/DGTIC/A' nueva = cadena + ac[-2:] + "-" + str(cont_f) + "/" + str(d.year) fecha_ultimo_cambio = datetime.now() anuencia_datos.objects.create( fecha_registro=d, fecha_ultimo_cambio=fecha_ultimo_cambio, activo=True, usuario_id=user.id, fecha_solicitud=fecha_registro, dependencias_id=user_dep.dependencia_id, no_oficio=no_of, contacto_tecnico=cont_tec, telefono_fax="0000000", extension="000", correo_electronico=user.email, no_requisicion=req, estatus_id=1, justificacion=ju, puesto_responsable=autoriza, oficio_dgtic=nueva ) # Se obtiene el ID de la ultima Anuencia generada anuencia = anuencia_datos.objects.latest('id') # Iniciamos el recorrido de los Articulos for x in aux['articulos']: cl = 0 articulo = (x['articulo']) c_partida = (x['partida_clave']) precio = (x['precio']) nombre_p = (x['proyecto_nombre']) clave_p = (x['proyecto_clave']) p_nombre = (x['partida_nombre']) cantidad = (x['cantidad']) descripcion = (x['caracteristica']) precio = str(precio) precio = Decimal(precio) i = str(1.16) iva = Decimal(i) precio_t = Decimal(precio * iva) # Definimos una variable para el numero de lotes consecutivos consecutivo = 0 siguiente_lote = anuencia_detalle.objects.values().filter(anuencia_id=anuencia.id).order_by( '-id') if siguiente_lote.count() != 0: ultimo = int(siguiente_lote[0]['no_lote']) cadena = str(ultimo) if ultimo >= 10: consecutivo = ultimo + 1 if ultimo < 9: cadena = str(ultimo + 1) consecutivo = '0' + cadena if ultimo == 9: consecutivo = ultimo + 1 else: consecutivo = '01' try: partida = addPartidas.objects.filter(clave=c_partida, nombre=p_nombre, ejercicio='2015')[0] except addPartidas.DoesNotExist: partida = None try: proyecto = addProyectos.objects.get(clave=clave_p, nombre=nombre_p, dependencia_id=user_dep.dependencia_id) except addProyectos.DoesNotExist: proyecto = None if partida == None and proyecto == None: l_partida = addPartidas.objects.create( clave=c_partida, nombre=p_nombre, ejercicio=2015 ) ultima_partida = addPartidas.objects.latest('id') ultima_partida = ultima_partida.id addProyectos.objects.create( dependencia_id=user_dep.dependencia_id, clave=clave_p, nombre=nombre_p, ejercicio=2015 ) ultimo_proyecto = addProyectos.objects.latest('id') ultimo_proyecto = ultimo_proyecto.id l_partida.proyectos.add(ultimo_proyecto) l_partida.save() anuencia_detalle.objects.create( fecha_registro=d, fecha_ultimo_cambio=fecha_ultimo_cambio, activo=True, usuario_id=user.id, anuencia_id=anuencia.id, proyecto_id=ultimo_proyecto, partida_id=ultima_partida, no_lote=consecutivo, articulo=articulo, categoria_id=13, descripcion=descripcion, cantidad=cantidad, precio=precio, iva=16, total=precio_t, url='', autorizado=False ) elif partida == None and proyecto != None: u_partida = addPartidas.objects.create( clave=c_partida, nombre=p_nombre, ejercicio=2015 ) ultima_partida = addPartidas.objects.latest('id') ultima_partida = ultima_partida.id u_partida.proyectos.add(proyecto.id) u_partida.save() anuencia_detalle.objects.create( fecha_registro=d, fecha_ultimo_cambio=fecha_ultimo_cambio, activo=True, usuario_id=user.id, anuencia_id=anuencia.id, proyecto_id=proyecto.id, partida_id=ultima_partida, no_lote=consecutivo, articulo=articulo, categoria_id=13, descripcion=descripcion, cantidad=cantidad, precio=precio, iva=16, total=precio_t, url='', autorizado=False ) elif partida == None and proyecto != None: u_partida = addPartidas.objects.create( clave=c_partida, nombre=p_nombre, ejercicio=2015 ) ultima_partida = addPartidas.objects.latest('id') ultima_partida = ultima_partida.id u_partida.proyectos.add(proyecto.id) u_partida.save() anuencia_detalle.objects.create( fecha_registro=d, fecha_ultimo_cambio=fecha_ultimo_cambio, activo=True, usuario_id=user.id, anuencia_id=anuencia.id, proyecto_id=proyecto.id, partida_id=ultima_partida, no_lote=consecutivo, articulo=articulo, categoria_id=13, descripcion=descripcion, cantidad=cantidad, precio=precio, iva=16, total=precio_t, url='', autorizado=False ) elif partida != None and proyecto == None: addProyectos.objects.create( dependencia_id=user_dep.dependencia_id, clave=clave_p, nombre=nombre_p, ejercicio=2015 ) ultimo_proyecto = addProyectos.objects.latest('id') ultimo_proyecto = ultimo_proyecto.id partida.proyectos.add(ultimo_proyecto) partida.save() anuencia_detalle.objects.create( fecha_registro=d, fecha_ultimo_cambio=fecha_ultimo_cambio, activo=True, usuario_id=user.id, anuencia_id=anuencia.id, proyecto_id=ultimo_proyecto, partida_id=partida.id, no_lote=consecutivo, articulo=articulo, categoria_id=13, descripcion=descripcion, cantidad=cantidad, precio=precio, iva=16, total=precio_t, url='', autorizado=False ) else: anuencia_detalle.objects.create( fecha_registro=d, fecha_ultimo_cambio=fecha_ultimo_cambio, activo=True, usuario_id=user.id, anuencia_id=anuencia.id, proyecto_id=proyecto.id, partida_id=partida.id, no_lote=consecutivo, articulo=articulo, categoria_id=13, descripcion=descripcion, cantidad=cantidad, precio=precio, iva=16, total=precio_t, url='', autorizado=False ) respuesta = {'code': 200, 'mensaje': 'La anuencia se ha guardado con exito.', 'status': 'true', 'id_anuencia': anuencia.id} else: respuesta = {'code': 403, 'mensaje': 'La anuencia no se pudo guardar porque el campo observación esta vacio.', 'status': 'false', 'id_anuencia': 0} except Exception as erro: print (str(erro)) else: print("sin articulos") respuesta = {'code': 403, 'mensaje': 'Su requisición no contiene productos.', 'status': 'false', 'id_anuencia': 0} return Response(respuesta) class ProyectosAPIView(ListAPIView): serializer_class = proyectosSerializer queryset = addProyectos.objects.all() def filter_queryset(self, queryset): q = self.request.QUERY_PARAMS.get('q') id = self.request.QUERY_PARAMS.get('id') if q: queryset = queryset.filter( Q(id__icontains=q) | Q(nombre__icontains=q) | Q(clave__icontains=q) ) if id: queryset = queryset.filter(id=id) return queryset class PartidasAPIView(ListAPIView): serializer_class = partidasSerializer queryset = addPartidas.objects.distinct('clave') def filter_queryset(self, queryset): q = self.request.QUERY_PARAMS.get('q') id = self.request.QUERY_PARAMS.get('id') if q: queryset = queryset.filter( Q(id__icontains=q) | Q(nombre__icontains=q) | Q(clave__icontains=q) ) if id: queryset = queryset.filter(id=id) return queryset def obtener_estatus_requisicion(request): """ wrapper de ws de hacienda publica para obtener el estatus de la requisición enviando el numero de folio de la requisión. :param no_requisicion: :return: """ dato = {} folio = request.GET.get("folio_requi") hp_server = Client(ULRHP) authentication = hp_server.factory.create('AuthSoapHd') authentication.UserName = USERNAME_HP authentication.Password = PASSWORD_HP hp_server.set_options(soapheaders=authentication) try: estatus = hp_server.service.getEstatusFolio(folio) dato['dato']=estatus except WebFault, e: dato['dato'] = 'La requisicion con folio %s no existe'%folio data = json.dumps(dato) return HttpResponse(data, content_type="application/json") def GuardarImpresion(request): """ cambia el estatus a impreso ne la anuencia. :param id_anuencia: :return: """ dato = {} id_anuencia = request.GET.get("id_anuencia") try: anuencia = anuencia_datos.objects.get(id=id_anuencia) anuencia.se_imprimio=True anuencia.save() dato['dato']="Anuencia Actualizada Correctamente" except Exception as e: dato['dato'] = 'error al cambiar el estatus a impreso' data = json.dumps(dato) return HttpResponse(data, content_type="application/json")