# -*- encoding: utf-8 -*- from django.conf import settings from django.contrib import messages from django.core.exceptions import ImproperlyConfigured from django.http import HttpResponseRedirect from django.shortcuts import render_to_response, get_object_or_404, render from django.contrib.auth import login, authenticate, logout from django.contrib.auth.decorators import login_required from django.views.decorators.cache import never_cache from django.views.decorators.csrf import csrf_exempt from django.db.models import Q from django.views.generic import TemplateView,FormView,UpdateView from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from django.template.response import * from proveedores.forms import * from rest_framework.views import APIView, Response, status from rest_framework.generics import ListAPIView from .serializers import ProveedoresSerializer,RubrosSerializers, CamarasSerializers,UserSerializers,SucursalesSerializers,ProveedoresSerializerdata, \ TelefonoSerializer, SociosSerializers,ProveedoresrapidosSerializer, ProveedoresWSOSerializer from django.template import RequestContext import requests import json from django.utils.encoding import smart_str from django.db import transaction from pyjasperclient import JasperClient from django.views.generic import View from datetime import datetime, date, timedelta, time from django.core import serializers from dateutil.relativedelta import relativedelta from django.core.urlresolvers import reverse_lazy, reverse from suds.client import Client, WebFault #Libreria Necesaria para el wrapper de Hacienda Publica headers = {"Authorization": settings.PUD_TOKEN} #TOKEN PARA CONECTARSE CON EL PADRON DE DEPENDENCIAS @login_required(login_url='/') @transaction.autocommit def domicilio_sucursal(request,pul_sucursal,id): """ :param request: :param pul_sucursal: :param id: :return: Domicilio actualizado de la sucursal del proveedor """ obj = Sucursal.objects.get(pk=id) if request.method == 'POST': form = FormSucursal(request.POST,instance= obj) if form.is_valid(): form.save() modificacion_sucursal = historial_save(obj.proveedor.id,3,'MODIFICACION DE SUCURSAL','MODIFICACION DE SUCURSAL','MODIFICACION DE SUCURSAL',request.user.id,obj.proveedor.status.id) if modificacion_sucursal: print("Se modifico la sucursal exisosamante") bitacora_sucursal = Bitacora.objects.create(usuario_id = request.user.id,movimiento_id = 3,descripcion = 'MODIFICO LA SUCURSAL DEL PROVEEDOR %s'%(obj.proveedor.id)) if bitacora_sucursal: print("Se guardo en la bitacora") msj = "Sucursal actualizada correctamente" messages.success(request,msj) return HttpResponseRedirect('/editar_domicilio/%s/%s' %(pul_sucursal,id)) else: form = FormSucursal(instance= obj) return render_to_response('edit_sucursal.html',{'domicilio':pul_sucursal,'form':form,'obj':obj},context_instance=RequestContext(request)) def index(request): return TemplateResponse(request, 'index.html') def validar(request): """ :param request: :return: Usuario login del sistema """ 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) usuario = request.user return HttpResponseRedirect('/principal/') else: mensaje = mensaje + 'Usuario no valido, Verifique su Password y User' return TemplateResponse(request, 'index.html', {'msj': mensaje}) def logout_user(request): response = logout(request) return HttpResponseRedirect('/index') @login_required(login_url='/') def principal(request): total = Proveedores.objects.all().count() vigentes = Proveedores.objects.filter(status_id = 1).count() no_vigentes = Proveedores.objects.filter(status_id = 2).count() inhabilidato = Proveedores.objects.filter(status_id = 3).count() baja = Proveedores.objects.filter(status_id = 4).count() registro_tramite = Proveedores.objects.filter(status_id = 5).count() cancelado = Proveedores.objects.filter(status_id = 6).count() alta = Historial.objects.filter(movimiento__id = 1,fecha = date.today()).count() renovacion = Historial.objects.filter(movimiento__id = 2,fecha = date.today()).count() modificacion = Historial.objects.filter(movimiento__id = 3,fecha = date.today()).count() activacion = Bitacora.objects.filter(movimiento__id = 5,fecha = date.today()).count() contexto = {'principal': 'active', 'dia':date.today(), 'vigentes':vigentes, 'total':total, 'no_vigentes':no_vigentes, 'inhabilidato':inhabilidato, 'baja':baja, 'registro_tramite':registro_tramite, 'cancelado':cancelado, 'alta':alta, 'renovacion':renovacion, 'modificacion':modificacion, 'activacion':activacion} return render_to_response('principal.html', contexto, context_instance=RequestContext(request)) @login_required(login_url='/') def proveedor_finanzas(request): contexto = {'msj': 'Esta Vista es de Finanzas','rep':'active'} return render_to_response('proveedor_finanzas.html', contexto, context_instance=RequestContext(request)) @login_required(login_url='/') @transaction.autocommit def proveedorCreate(request): if request.user.tipo_usuario == 4 or request.user.tipo_usuario == 5: return HttpResponseRedirect('/error-403/') """ :param request: :return: EL objeto save to proveedor """ camaras = CamaraForm() if request.method == 'POST': socios = request.POST.getlist('p_scnt[]') proveedor = ProveedoresForm(request.POST) nombre = request.POST.getlist('nombre[]') telefono = request.POST.getlist('telefonos[]') total = (0-1) total2 = (0-1) try: s = socios[0] except IndexError: s = "" try: t = telefono[0] except IndexError: t = "" for so in socios: convertir = so.split(",") for nuevo in range(len(convertir)): total = len(convertir[nuevo])-1 for n in nombre: aux = n.split(",") for d in range(0,(len(aux)),2): total2 = len(aux[d])-1 if proveedor.is_valid(): try: confirmar = Proveedores.objects.filter(razon_social =request.POST.get('razon_social') , razon_comercial =request.POST.get('razon_comercial') , rfc=request.POST.get('rfc')) if confirmar.count() == 0: c2 = Proveedores.objects.filter(rfc=request.POST.get('rfc')) if c2.count() == 0: pro = proveedor.save(commit=False) pro.fecha_registro = date.today() pro.tipo_persona = request.POST.get('tipo_persona') pro.tipo_representante = request.POST.get('tipo_representante') if request.POST.get('numero_exterior'): number_ext = request.POST.get('numero_exterior') else: number_ext = "" if request.POST.get('numero_interior'): number_int = request.POST.get('numero_interior') else: number_int = "" param = { "pul_calle": request.POST.get('calle'), "pul_numero_exterior": str(number_ext), "pul_numero_interior": str(number_int), "pul_ciudad": request.POST.get('ciudad'), "pul_codigo_postal": request.POST.get('codigo_postal'), "pul_estado": request.POST.get('estado'), "pul_municipio": request.POST.get('municipio'), "pul_localidad": request.POST.get('asentamiento') } token = settings.PUL_TOKEN headers = {'Authorization': token} asentamiento = requests.post(settings.PUL+'api/api-save-direccion/', params=param, headers=headers,verify=False, stream=True) if asentamiento.status_code != 500: direccion_id = asentamiento.json() codigo = direccion_id["status"] direccion = direccion_id["pul_direccion_id"] mensaje = direccion_id["mensaje"] if codigo == 403 or codigo == 401 : msj = mensaje messages.error(request,msj) return HttpResponseRedirect('/proveedor/nuevo/') else: pro.pul_direccion_id = direccion pro.tipo_domicilio = request.POST.get('tipo_dom') pro.status_id = 5 pro.secretario_rm_id = 1 pro.fecha_inicia_recepcion = date.today() + timedelta(days=6) pro.fecha_termina_recepcion = date.today() + timedelta(days=30) pro.save() proveedor.save_m2m() ultimo = pro.id else: msj = "Ya existe el proveedor con rfr %s" %(request.POST.get('rfc')) messages.warning(request,msj) return HttpResponseRedirect('/proveedor/nuevo/') else: msj = "Ya existe el proveedor con esas credenciales" messages.warning(request,msj) return HttpResponseRedirect('/proveedor/nuevo/') except Exception as pro: print pro msj = "No se pudo guardar el Proveedor" messages.error(request,msj) return HttpResponseRedirect('/proveedor/nuevo/') try: Historial.objects.create(proveedor_id=ultimo,movimiento_id=1,otro="SE REGISTRO EN EL SISTEMA",usuario_id= request.user.id,status_id =5) Bitacora.objects.create(usuario_id = request.user.id,movimiento_id = 1,descripcion = 'DIO DE ALTA AL PROVEEDOR %s '%(ultimo) ) except Exception as h: print h msj = "No se pudo guardar el Historial" messages.error(request,msj) return HttpResponseRedirect('/proveedor/nuevo/') if telefono: if t!="": for tel in telefono: try: aux = Telefonos() aux.telefonos = tel aux.proveedor_id = ultimo aux.save() except Exception as t: print t msj = "No se pudo guardar el número de Telefono" messages.error(request,msj) return HttpResponseRedirect('/proveedor/nuevo/') if socios: if s!="": for s in socios: try: aux2 = Socios() aux2.nombre_completo = s aux2.proveedor_id = ultimo aux2.save() except Exception as s: print s msj ="No se pudo guardar los socios" messages.error(request,msj) return HttpResponseRedirect('/proveedor/nuevo/') if total2>=0: for n in nombre: aux = n.split(",") for d in range(0,(len(aux)),3): try: suc = Sucursal() suc.pul_direccion_id = aux[d] suc.nombre_sucursal = aux[d+1] suc.telefonos = aux[d+2] suc.proveedor_id = ultimo suc.save() except Exception as su: print su msj ="No se pudo guardar la Sucursal" messages.error(request,msj) return HttpResponseRedirect('/proveedor/nuevo/') msj = 'EL proveedor se ha registrado al Padŕon Exitosamente, con Número %d' %(ultimo) messages.success(request, msj) return HttpResponseRedirect('/proveedor/nuevo/') else: proveedor = ProveedoresForm() camaras = CamaraForm() return render_to_response('proveedor_nuevo.html',{'proveedor':proveedor, 'var': 'active', 'pro':'active','camaras':camaras},context_instance = RequestContext(request)) def ajax_requests(request): q=request.GET['q'] resp=[dict(id=c.pk,text=c.razon_social) for c in Proveedores.objects.filter(Q(id__icontains= q)| Q(razon_social__icontains=q)| Q(razon_comercial__icontains=q)).order_by('id')] return HttpResponse(json.dumps(resp), content_type="application/json") @csrf_exempt def consulta_detalle_modificacion(request): """ :param request: :return: Detalle del Historial de Proveedor """ if request.is_ajax(): q=request.POST['q'] if q is not None: historial = Historial.objects.get(pk = q) list = [] list.append({ 'antes': str(historial.antes.encode('utf-8')), 'despues': str(historial.despues.encode('utf-8')), 'otro': str(historial.otro.encode('utf-8')), 'usuario': str(historial.usuario) }) resultados = json.dumps(list) return HttpResponse(resultados,mimetype="application/javascript") def historial_save(id_proveedor,movimiento,antes,despues,otro,usuario,status): """ :param id_proveedor: :param movimiento: :param antes: :param despues: :param otro: :param usuario: :param status: :return: True si guardar el Historial del proveedor """ regreso = False try: his = Historial() his.proveedor_id=id_proveedor his.movimiento_id=movimiento his.antes=antes his.despues=despues his.otro =otro his.usuario_id= usuario his.status_id = status his.save() regreso = True except Exception as h: regreso = False print(h) return regreso @login_required(login_url='/') @transaction.autocommit def proveedorUpdate(request, id_proveedor): if request.user.tipo_usuario == 4 or request.user.tipo_usuario == 5: return HttpResponseRedirect('/error-403/') """ :param request: :param id_proveedor: :return: El objeto actualizado (proveedor) """ obj = Proveedores.objects.get(pk= id_proveedor) socios = Socios.objects.filter(proveedor= id_proveedor).order_by('id') sucursales = Sucursal.objects.filter(proveedor = id_proveedor).order_by('id') telefonos = Telefonos.objects.filter(proveedor_id = id_proveedor).order_by('id') actuales = obj.rubros.all().order_by('id') if request.method == 'POST': nuevos = request.POST.getlist('rubros') lista2 =[] cambio = [] quedan = [] cam = '' nue ='' elim ='' qe = '' siempre = '' bandera = False bandera_otro = False status_acomparar = obj.status.id for qe2 in nuevos: quedan.append(qe2) for x in actuales: lista2.append(x.id) lista3 =[] for y in nuevos: lista3.append(int(y)) r = Rubros.objects.filter(id__in = quedan).values_list('id', flat=True).order_by('id') contador = 0 if len(actuales) == len(nuevos): for q in range(len(actuales)): if int(r[q]) != int(lista2[q]): contador = contador +1 if contador>=1: if lista2 not in lista3: resu = [a for a in lista3 if a not in lista2] for fg in resu: cambio.append(fg) suc1 = Rubros.objects.filter(id__in= cambio) for h in suc1: cam = cam+' '+smart_str(h.id).replace(" ", "")+'-'+smart_str(h.nombre).replace(" ", "") aux = actuales.exclude(id__in = lista3) for c in aux: rubros = Rubros.objects.filter(id = c.id) nue=nue+' '+smart_str(c.id).replace(" ", "")+'-'+smart_str(c.nombre).replace(" ", "") try: hrubro = Historial() hrubro.proveedor_id = id_proveedor hrubro.movimiento_id=3 hrubro.antes= nue hrubro.despues = cam hrubro.otro = "CAMBIO DE RUBROS" hrubro.usuario_id = request.user.id hrubro.status_id = int(obj.status_id) hrubro.save() if status_acomparar != 5: bandera = True bandera_otro = True except Exception as rhisto: print rhisto msj = 'Error al Cambiar de Rubros' messages.warning(request, msj) return HttpResponseRedirect('/editar/%s' %(id_proveedor)) else: print "todo normal" elif len(nuevos)< len(actuales): if lista2 not in lista3: aux = actuales.exclude(id__in = lista3) for c in aux: elim=elim+' '+smart_str(c.id).replace(" ", "")+'-'+smart_str(c.nombre).replace(" ", "") quedan_ru = Rubros.objects.filter(id__in= quedan).order_by('id') for qur in quedan_ru: qe=qe+' '+smart_str(qur.id).replace(" ", "")+'-'+smart_str(qur.nombre).replace(" ", "") sim = Rubros.objects.filter(id__in=lista2).order_by('id') for li in sim: siempre=siempre+' '+smart_str(li.id).replace(" ", "")+'-'+smart_str(li.nombre).replace(" ", "") try: hrubro = Historial() hrubro.proveedor_id = id_proveedor hrubro.movimiento_id=4 hrubro.antes= siempre hrubro.despues = qe hrubro.otro = "ELIMINO EL RUBRO "+elim hrubro.usuario_id = request.user.id hrubro.status_id = int(obj.status_id) hrubro.save() if status_acomparar != 5: bandera = True bandera_otro = True except Exception as rhisto2: print rhisto2 msj = 'Error al Eliminar Rubros' messages.warning(request, msj) return HttpResponseRedirect('/editar/%s' %(id_proveedor)) else: print "se agrego rubros" despu2 = "" antes = "" if lista2 not in lista3: resu = [a for a in lista3 if a not in lista2] for fg in resu: cambio.append(fg) rub2 = Rubros.objects.filter(id__in= cambio).order_by('id') for ac in obj.rubros.all().order_by('id'): antes = antes +" "+ str(ac) for recorrer in rub2: despu2 = despu2 + recorrer.clave + "-" +recorrer.nombre + " " try: hrubro = Historial() hrubro.proveedor_id = id_proveedor hrubro.movimiento_id=3 hrubro.antes= str(antes) hrubro.despues = antes+" "+despu2.encode('utf-8') hrubro.otro = "SE AGREGO EL RUBRO "+despu2.encode('utf-8') hrubro.usuario_id = request.user.id hrubro.status_id = int(obj.status_id) hrubro.save() if status_acomparar != 5: bandera = True bandera_otro = True except Exception as rhisto23: print rhisto23 msj = 'Error al agregar Rubros' messages.warning(request, msj) return HttpResponseRedirect('/editar/%s' %(id_proveedor)) representante = request.POST.get('representante') direccion = request.POST.get('direccion_id') socios = request.POST.getlist('p_scnt[]') telefono = request.POST.getlist('telefonos[]') nombre = request.POST.getlist('nombre[]') status = request.POST.get('status') repre = request.POST.get('representante_legal') total = (0-1) total2 = (0-1) if status == None: status = int(obj.status.id) try: b = socios[0] except IndexError: b = "" try: c = telefono[0] except IndexError: c = "" for so in socios: convertir = so.split(",") for nuevo in range(len(convertir)): total = len(convertir[nuevo])-1 for n in nombre: aux = n.split(",") for d in range(0,(len(aux)),2): total2 = len(aux[d])-1 if request.user.tipo_usuario == 2 or request.user.tipo_usuario == 3: proveedor = ProveedoresEForm(request.POST, instance=obj) else: proveedor = ProveedoresEForm2(request.POST, instance=obj) li = [] if obj.razon_social != request.POST.get('razon_social'): li.append(obj.razon_social) li.append(request.POST.get('razon_social')) li.append('CAMBIO DE RAZON SOCIAL') bandera_otro = True if obj.razon_comercial != request.POST.get('razon_comercial'): li.append(obj.razon_comercial) li.append(request.POST.get('razon_comercial')) li.append('CAMBIO DE RAZON COMERCIAL') bandera_otro = True if obj.rfc != request.POST.get('rfc'): li.append(obj.rfc) li.append(request.POST.get('rfc')) li.append('CAMBIO DE RFC') bandera_otro = True if obj.correo != request.POST.get('correo'): li.append(obj.correo) li.append(request.POST.get('correo')) li.append('CAMBIO DE EMAIL') bandera_otro = True if obj.numero_imms != request.POST.get('numero_imms'): li.append(obj.numero_imms) li.append(request.POST.get('numero_imms')) li.append('CAMBIO DE IMSS') bandera_otro = True aux_status = False aux_repre = False try: if request.user.tipo_usuario == 2 or request.user.tipo_usuario == 3: if int(obj.status.id) != int(status): aux_status=True antes_status = obj.status despues_status = Estatus.objects.get(pk= status) esta = obj.status.id bandera_otro = True except: msj = 'El estatus no puede quedar vacio!' messages.warning(request, msj) return HttpResponseRedirect('/editar/%s' %(id_proveedor)) try: if smart_str(obj.representante_legal) != smart_str(repre): aux_repre = True repre_antes = smart_str(obj.representante_legal) repre_despues = smart_str(repre) bandera_otro = True if status_acomparar != 5: bandera = True except Exception as p: print p msj = 'Error de Codificacion UTF8' messages.warning(request, msj) return HttpResponseRedirect('/editar/%s' %(id_proveedor)) if aux_repre: try: r = Historial() r.proveedor_id = obj.id r.movimiento_id=3 r.antes= repre_antes r.despues = repre_despues r.otro = "CAMBIO DE REPRESENTANTE O APODERADO LEGAL" r.usuario_id = request.user.id r.status_id = obj.status_id r.save() except Exception as repres: print repres msj = 'Error al Guardar el Representante' messages.warning(request, msj) return HttpResponseRedirect('/editar/%s' %(id_proveedor)) if aux_status: bandera_otro = True if status_acomparar != 5: bandera = True try: hstatus = Historial() hstatus.proveedor_id = obj.id hstatus.movimiento_id=3 hstatus.antes= antes_status hstatus.despues = despues_status hstatus.otro = "CAMBIO DE ESTATUS" hstatus.usuario_id = request.user.id hstatus.status_id = int(esta) hstatus.save() except Exception as esta: print esta msj = 'NO se pudo guardar el status en el historial' messages.warning(request, msj) return HttpResponseRedirect('/editar/%s' %(id_proveedor)) if len(li)>0: bandera_otro = True if status_acomparar != 5: bandera = True for d in range(0,(len(li)),3): try: his = Historial() his.proveedor_id=obj.id his.movimiento_id=3 his.antes=li[d] his.despues=li[d+1] his.otro =li[d+2] his.usuario_id= request.user.id his.status_id = status his.save() except Exception as hist: print hist msj = 'Error al Guardar Historial' messages.warning(request, msj) return HttpResponseRedirect('/editar/%s' %(id_proveedor)) if total2>=0: bandera_otro = True add_sucursal = historial_save(obj.id,3,'SE AGREGO SUCURSAL','SE AGREGO SUCURSAL','SE AGREGO SUCURSAL',request.user.id,obj.status.id) if add_sucursal and status_acomparar != 5: bandera = True for n in nombre: aux = n.split(",") for d in range(0,(len(aux)),3): try: suc = Sucursal() suc.pul_direccion_id = aux[d] suc.nombre_sucursal = aux[d+1] suc.telefonos = aux[d+2] suc.proveedor_id = obj.id suc.save() except Exception as sucx: print sucx msj = 'Error al Guardar la Sucursal' messages.warning(request, msj) return HttpResponseRedirect('/editar/%s' %(id_proveedor)) if socios: if b!="": n = "" a ="" bandera_otro = True for c in Socios.objects.filter(proveedor = obj.id): a = a + c.nombre_completo + " , " for nue in socios: n = n + nue + " , " add_socios = historial_save(obj.id,3,a,a+" "+n,'SE AGREGO SOCIOS',request.user.id,obj.status.id) if add_socios and status_acomparar != 5: bandera = True for s in socios: try: aux2 = Socios() aux2.nombre_completo = s aux2.proveedor_id = obj.id aux2.save() except Exception as ms: print ms msj = 'Error al Guardar al Socio' messages.warning(request, msj) return HttpResponseRedirect('/editar/%s' %(id_proveedor)) if telefono: if c!="": tn = "" ta = "" bandera_otro = True for t in Telefonos.objects.filter(proveedor = obj.id): ta = ta + t.telefonos + " , " for tx in telefono: tn = tn + tx + " , " add_telefonos = historial_save(obj.id,3,ta,ta+" "+tn,'SE AGREGO TELEFONOS',request.user.id,obj.status.id) if add_telefonos and status_acomparar != 5: bandera = True for tel in telefono: try: aux = Telefonos() aux.telefonos = tel aux.proveedor_id = obj.id aux.save() except Exception as mt: print mt msj = 'Error al Guardar Telefono' messages.warning(request, msj) return HttpResponseRedirect('/editar/%s' %(id_proveedor)) if proveedor.is_valid(): des = date.today() + relativedelta(years=1) try: pro = proveedor.save(commit=False) pro.tipo_persona = request.POST.get('tipo_persona') pro.tipo_representante = request.POST.get('tipo_representante') pro.tipo_domicilio = request.POST.get('tipo_dom') if request.user.tipo_usuario == 3 and request.user.is_superuser: pro.prioridad = request.POST.get('prioridad') insta = Proveedores.objects.get(pk = obj.id) # if bandera == True: # if status_acomparar != 5: # history = historial_save(obj.id,2,obj.fecha_final,des,'RENOVACION',request.user.id,obj.status.id) # pro.fecha_final = date.today() + timedelta(days=365) # pro.status_id = 1 # pro.fecha_actualizacion = date.today() # pro.fecha_inicia_recepcion = date.today() + timedelta(days=6) # pro.fecha_termina_recepcion = date.today() + timedelta(days=30) # if history: # print("Se guardo bien el historial de la renovacion") if representante: pro.representante_legal=representante if request.POST.get('numero_exterior'): number_ext = request.POST.get('numero_exterior') else: number_ext = "" if request.POST.get('numero_interior'): number_int = request.POST.get('numero_interior') else: number_int = "" param = { "pul_direccion_id":request.POST.get('direccion_id'), "pul_calle": request.POST.get('calle'), "pul_numero_exterior": str(number_ext), "pul_numero_interior": str(number_int), "pul_ciudad": request.POST.get('ciudad'), "pul_codigo_postal": request.POST.get('codigo_postal'), "pul_estado": request.POST.get('estado'), "pul_municipio": request.POST.get('municipio'), "pul_localidad": request.POST.get('asentamiento') } token = settings.PUL_TOKEN headers = {'Authorization': token} asentamiento = requests.post(settings.PUL+'api/api-save-editar-direccion/', params=param, headers=headers,verify=False, stream=True) if asentamiento.status_code != 500: direccion_id = asentamiento.json() codigo = direccion_id["status"] direccion = direccion_id["pul_direccion_id"] mensaje = direccion_id["mensaje"] if codigo == 403 or codigo == 401 : msj = mensaje messages.warning(request, msj) return HttpResponseRedirect('/editar/%s' %(id_proveedor)) else: pro.pul_direccion_id = direccion if int(insta.status.id) == 5 and pro.status.id != 5 and pro.fecha_actualizacion == None and pro.fecha_final == None: #EL proveedor es nuevo y lo activo un super user pro.fecha_final = date.today() + relativedelta(years=1) pro.fecha_actualizacion = date.today() if int(insta.status.id) == 5 and pro.fecha_final == None and pro.fecha_actualizacion != None: if int(pro.status.id)!=5: pro.fecha_final = date.today() + relativedelta(years=1) pro.fecha_actualizacion = date.today() print("entro por admin") #pro.fecha_actualizacion = date.today() + timedelta(days=365) pro.save() proveedor.save_m2m() ultimo = pro.id if bandera_otro == False: historial_limpio = historial_save(obj.id,3,'MODIFICACION GENERAL','MODIFICACION GENERAL','MODIFICACION',request.user.id,obj.status.id) # if historial_limpio and obj.status.id !=5: # renovacion_lim = historial_save(obj.id,2,obj.fecha_final,des,'RENOVACION',request.user.id,obj.status.id) # print("Se guardo el historial de manera limpia, modificacion general") except Exception as mp: print mp msj = 'No se pudo modificar el proveedor' messages.warning(request, msj) return HttpResponseRedirect('/editar/%s' %(id_proveedor)) try: historial2 = Bitacora.objects.create(usuario_id = request.user.id,movimiento_id = 3,descripcion = 'MODIFICO AL PROVEEDOR %s '%(ultimo) ) except Exception as hitorial: print hitorial msj = 'Error al Guardar la Bitacora' messages.warning(request, msj) return HttpResponseRedirect('/editar/%s' %(id_proveedor)) msj = 'Proveedor Editado Correctamente' messages.success(request, msj) return HttpResponseRedirect('/editar/%s/' %(obj.id)) else: if request.user.tipo_usuario == 2 or request.user.tipo_usuario == 3: proveedor = ProveedoresEForm(instance=obj) else: proveedor = ProveedoresEForm2(instance=obj) if request.user.tipo_usuario == 3 and request.user.is_superuser: proveedor = ProveedoresOcultoForm(instance = obj) return render_to_response('proveedor_editar.html', {'proveedor':proveedor, 'var': 'active', 'pro':'active', 'obj':obj, 'socios':socios, 'telefonos':telefonos, 'sucursales':sucursales }, context_instance=RequestContext(request)) @login_required(login_url='/') @transaction.autocommit def registro_camaras(request): if request.user.tipo_usuario == 4 or request.user.tipo_usuario == 5: return HttpResponseRedirect('/error-403/') """ :param request: :return: objeto guarado de la camara """ if request.method== 'POST': form = CamaraForm(request.POST) clave = request.POST.get('clave') nombre = request.POST.get('nombre') if form.is_valid(): camara = Camaras.objects.filter(clave = clave, nombre = nombre) if camara.count() == 0: c = form.save(commit=False) c.cat_estatus = Estatus.objects.get(pk = 1) c.save() form.save() msj = 'Camara registrada correctamente' messages.success(request, msj) Bitacora.objects.create(usuario_id = request.user.id,movimiento_id = 1,descripcion = 'DIO DE ALTA A LA CAMARA %s'%(nombre)) return HttpResponseRedirect('/registro_camaras/') else: msj = 'La Camara ya se encuentra registrada' messages.info(request, msj) return HttpResponseRedirect('/registro_camaras/') else: form = CamaraForm() return render_to_response("camara_nuevo.html",{'form':form,'camara':'active','c':True},context_instance=RequestContext(request)) @login_required(login_url='/') @transaction.autocommit def registro_rubro(request): if request.user.tipo_usuario == 4 or request.user.tipo_usuario == 5: return HttpResponseRedirect('/error-403/') """ :param request: :return: Objeto guardado del rubro """ if request.method== 'POST': form = RubroForm(request.POST) clave = request.POST.get('clave') nombre = request.POST.get('nombre') if form.is_valid(): rubros = Rubros.objects.filter(clave = clave, nombre = nombre) if rubros.count() == 0: r =form.save(commit=False) r.cat_estatus = Estatus.objects.get(pk = 1) r.save() msj = 'Rubro registrado correctamente' messages.success(request, msj) Bitacora.objects.create(usuario_id = request.user.id,movimiento_id = 1,descripcion = 'DIO DE ALTA AL RUBRO %s'%(nombre)) return HttpResponseRedirect('/registro_rubro/') else: msj = 'El Rubro ya se encuentra registrado' messages.info(request, msj) return HttpResponseRedirect('/registro_rubro/') else: form = RubroForm() return render_to_response("rubro_nuevo.html",{'form':form,'camara':'active','r':True},context_instance=RequestContext(request)) @login_required(login_url='/') @transaction.autocommit def consulta_camaras(request): camaras = Camaras.objects.all().order_by('-id') filtrado = 10 #Comienza en 10 if 'filtrado' in request.GET: filtrado = request.GET.get('filtrado') paginator = Paginator(camaras,filtrado) page = request.GET.get('page') try: camaras = paginator.page(page) except PageNotAnInteger: camaras = paginator.page(1) except EmptyPage: camaras = paginator.page(paginator.num_pages) return render_to_response('camara_consulta.html',{'camaras':camaras,'camara':'active','filtrado':filtrado},context_instance=RequestContext(request)) @login_required(login_url='/') @transaction.autocommit def editar_camaras(request, id): if request.user.tipo_usuario == 4 or request.user.tipo_usuario == 5: return HttpResponseRedirect('/error-403/') obj = Camaras.objects.get(pk=id) if request.method== 'POST': form = CamaraForm(request.POST,instance=obj) if form.is_valid(): Bitacora.objects.create(usuario_id = request.user.id,movimiento_id = 3,descripcion = 'MODIFICO LA CAMARA%s'%(obj.nombre)) form.save() msj = 'Camara editada Correctamente' messages.success(request, msj) return HttpResponseRedirect('/registro_camaras/') else: form = CamaraForm(instance=obj) return render_to_response("camara_nuevo.html",{'form':form,'camara':'active'},context_instance=RequestContext(request)) @login_required(login_url='/') @transaction.autocommit def editar_rubros(request, id): if request.user.tipo_usuario == 4 or request.user.tipo_usuario == 5: return HttpResponseRedirect('/error-403/') obj = Rubros.objects.get(pk=id) if request.method== 'POST': form = RubroForm(request.POST,instance=obj) if form.is_valid(): Bitacora.objects.create(usuario_id = request.user.id,movimiento_id = 3,descripcion = 'MODIFICO AL RUBRO %s'%(obj.nombre)) form.save() msj = 'Rubro editado Correctamente' messages.success(request, msj) return HttpResponseRedirect('/rubros/') else: form = RubroForm(instance=obj) return render_to_response("rubro_nuevo.html",{'form':form,'camara':'active'},context_instance=RequestContext(request)) @login_required(login_url='/') @transaction.autocommit def borrar_camara(request,id): camara = Camaras.objects.get(pk=id) historial2 = Bitacora.objects.create(usuario_id = request.user.id,movimiento_id = 4,descripcion = 'Elimino la Camara %s '%(camara.nombre) ) camara.cat_estatus = Estatus.objects.get(pk=2) camara.save() msj = 'Camara Corresponsal se ha Eliminado Exitosamente' messages.success(request, msj) return HttpResponseRedirect('/consulta_camaras/') def ajax_camara(request): if request.is_ajax(): q=request.GET['q'] resp=[dict(id=c.pk,text=c.nombre) for c in Camaras.objects.filter(nombre__contains=q)[:10]] return HttpResponse(json.dumps(resp), content_type="application/json") @login_required(login_url='/') @transaction.autocommit def borrar_rubro(request, id): rubro = Rubros.objects.get(pk=id) historial2 = Bitacora.objects.create(usuario_id = request.user.id,movimiento_id = 4,descripcion = 'ELIMINO EL RUBRO %s '%(rubro.nombre) ) rubro.cat_estatus = Estatus.objects.get(pk=2) rubro.save() msj = 'El Rubro se ha Eliminado Exitosamente' messages.success(request, msj) return HttpResponseRedirect('/rubros/') class ProveedorDatailApiView(APIView): serializer_class = ProveedoresSerializer def get(self,request,id=None): if id != None: proveedor = get_object_or_404(Proveedores,pk = id) response = self.serializer_class(proveedor) return Response(response.data) class ProveedorListRapidoApiView(ListAPIView): """ @wrapeer ws : Listado de los proveedores @id_proveedor : Filtra por el id del proveedor @busqueda : buscar varios criterios @id_rubro : buscar por los rubros a los que esta asociado el proveedor @nombre_rubro : busca proveedor por el nombre de los rubros a los que pertenecen """ serializer_class = ProveedoresrapidosSerializer # paginate_by = 50 # paginate_by_param = 'rpp' # max_paginate_by = 100 def get_queryset(self): id_proveedor = self.request.GET.get("id_proveedor") busqueda = self.request.GET.get("busqueda") id_rubro = self.request.GET.get("id_rubro") nombre_rubro = self.request.GET.get("nombre_rubro") queryset = Proveedores.objects.filter(status_id=1).order_by("id") if busqueda and id_rubro: queryset = queryset.filter(razon_social__icontains=busqueda,rubros__id=id_rubro) if busqueda: queryset = queryset.filter( Q(id__icontains=busqueda) | Q(razon_social__icontains=busqueda) | Q(razon_comercial__icontains=busqueda) | Q(rfc__icontains=busqueda) ) if nombre_rubro: queryset = queryset.filter(rubros__nombre__icontains = nombre_rubro) if id_proveedor: queryset=queryset.filter(id=id_proveedor) if id_rubro: queryset = queryset.filter(rubros__id=id_rubro) return queryset class ProveedorWSOApiView(ListAPIView): """ @wrapeer ws : Listado de los proveedores @id_proveedor : Filtra por el id del proveedor @busqueda : buscar varios criterios @id_rubro : buscar por los rubros a los que esta asociado el proveedor @nombre_rubro : busca proveedor por el nombre de los rubros a los que pertenecen """ serializer_class = ProveedoresWSOSerializer paginate_by = 10 def get_queryset(self): id_proveedor = self.request.GET.get("id_proveedor") busqueda = self.request.GET.get("busqueda") id_rubro = self.request.GET.get("id_rubro") nombre_rubro = self.request.GET.get("nombre_rubro") queryset = Proveedores.objects.all().exclude(prioridad=0).order_by('prioridad','id') if busqueda and id_rubro: queryset = queryset.filter(razon_social__icontains=busqueda,rubros__id=id_rubro) if busqueda: queryset = queryset.filter( Q(id__icontains=busqueda) | Q(razon_social__icontains=busqueda) | Q(razon_comercial__icontains=busqueda) | Q(rfc__icontains=busqueda) ) if nombre_rubro: queryset = queryset.filter(rubros__nombre__icontains = nombre_rubro) if id_proveedor: queryset=queryset.filter(id=id_proveedor) if id_rubro: queryset = queryset.filter(rubros__id=id_rubro) return queryset class SucursalListApiView(ListAPIView): serializer_class = SucursalesSerializers def get_queryset(self): id_proveedor = self.request.GET.get("id_proveedor") queryset = Sucursal.objects.all() if id_proveedor: queryset=queryset.filter(proveedor_id=id_proveedor) return queryset class RubrosListApiview(ListAPIView): serializer_class = RubrosSerializers # paginate_by =50 # paginate_by_param = 'rpp' # max_paginate_by=100 def get_queryset(self): busqueda = self.request.GET.get("busqueda") id_rubro = self.request.GET.get('id_rubro') queryset = Rubros.objects.all().order_by("id") if busqueda: queryset=queryset.filter(nombre__icontains = busqueda) if id_rubro: queryset = queryset.filter(id = id_rubro) return queryset @login_required(login_url='/') @transaction.autocommit def eliminar_socio(request,id,proveedor): px = Proveedores.objects.get(pk = proveedor) socio = Socios.objects.get(pk= id,proveedor_id = proveedor) socio_eliminado = socio.nombre_completo # dexa = date.today() + timedelta(days=365) # if px.status.id != 5: # historyx = historial_save(px.id,2,px.fecha_final,dexa,'RENOVACION',request.user.id,px.status.id) historial2 = Bitacora.objects.create(usuario_id = request.user.id,movimiento_id = 4,descripcion = 'ELIMINO AL SOCIO %s '%(socio.nombre_completo) ) socio.delete() history1x = historial_save(px.id,4,socio_eliminado,'SOCIO ELIMINADO','SOCIO ELIMINADO',request.user.id,px.status.id) msj = 'El Socio se ha Eliminado Exitosamente' messages.success(request, msj) return HttpResponseRedirect('/editar/%s/'%(proveedor)) @login_required(login_url='/') @transaction.autocommit def eliminar_telefono(request,id,proveedor): p = Proveedores.objects.get(pk = proveedor) socio = Telefonos.objects.get(pk=id) telefono_eliminado = socio.telefonos # desx = date.today() + timedelta(days=365) # if p.status.id != 5: # history1 = historial_save(p.id,2,p.fecha_final,desx,'RENOVACION',request.user.id,p.status.id) historial2 = Bitacora.objects.create(usuario_id = request.user.id,movimiento_id = 4,descripcion = 'ELIMINO EL TELEFONO %s '%(socio.telefonos) ) socio.delete() history1 = historial_save(p.id,4,telefono_eliminado,'TELEFONO ELIMINADO','TELEFONO ELIMINADO',request.user.id,p.status.id) msj = 'El Telefono se ha Eliminado Exitosamente' messages.success(request, msj) return HttpResponseRedirect('/editar/%s/'%(proveedor)) @login_required(login_url='/') @transaction.autocommit def eliminar_sucursal(request, id, proveedor): obj = Proveedores.objects.get(pk = proveedor) sucursal = Sucursal.objects.get(pk= id) nom_suc = sucursal.nombre_sucursal historial2 = Bitacora.objects.create(usuario_id = request.user.id,movimiento_id = 4,descripcion = 'ELIMINO LA SUCURSAL %s DEL PROVEEDOR %s '%(sucursal.nombre_sucursal, proveedor) ) sucursal.delete() # des2 = date.today() + timedelta(days=365) # if obj.status.id != 5: # print("esta en otros status diferente de 5 y se renovara al cambiar numero de telefono") # history1 = historial_save(obj.id,2,obj.fecha_final,des2,'RENOVACION',request.user.id,obj.status.id) history1 = historial_save(obj.id,4,nom_suc,'ELIMINACION DE SUCURSAL','ELIMINACION DE SUCURSAL',request.user.id,obj.status.id) msj = 'La Sucursal se ha Eliminado Exitosamente' messages.success(request, msj) return HttpResponseRedirect('/editar/%s/' %(proveedor) ) @login_required(login_url='/') @transaction.autocommit def renovar_proveedor(request, id_proveedor): sumada = date.today() + relativedelta(years=1) objpro = get_object_or_404(Proveedores, pk=id_proveedor) hstatus = Historial() hstatus.proveedor_id = objpro.id hstatus.movimiento_id=2 hstatus.antes= objpro.fecha_final hstatus.despues = sumada hstatus.otro = "RENOVACION" hstatus.usuario_id = request.user.id hstatus.status_id = objpro.status.id hstatus.save() historial2 = Bitacora.objects.create(usuario_id = request.user.id,movimiento_id = 2,descripcion = 'RENOVO AL PROVEEDOR %s '%(objpro.id) ) objpro.fecha_final = sumada objpro.status_id = 1 objpro.fecha_actualizacion = date.today() objpro.fecha_inicia_recepcion = date.today() + timedelta(days=6) objpro.fecha_termina_recepcion = date.today() + timedelta(days=30) objpro.save() msj = 'El proveedor se ha renovado Exitosamente' messages.success(request, msj) return HttpResponseRedirect("/editar/%s/" %(id_proveedor)) @login_required(login_url='/') @transaction.autocommit def activar_proveedor(request,id_proveedor): pro = Proveedores.objects.get(pk=id_proveedor) nuevo = Estatus.objects.get(pk=1) historial = Historial() historial.proveedor_id = pro.id historial.movimiento_id = 3 historial.antes = "ESTABA EN %s" %(pro.status) historial.despues ="SE ACTIVO CON ESTATUS %s" %(nuevo) historial.otro ="ACTIVACION" historial.usuario_id = request.user.id historial.status_id =pro.status.id historial.save() historial2 = Bitacora.objects.create(usuario_id = request.user.id,movimiento_id = 5,descripcion = 'ACTIVO AL PROVEEDOR %s '%(pro.id) ) pro.status_id = 1 pro.fecha_actualizacion = date.today() pro.fecha_final = date.today() + relativedelta(years=1) pro.save() msj = 'El proveedor se ha activado Exitosamente' messages.success(request, msj) return HttpResponseRedirect('/proveedores/') @login_required(login_url='/') @transaction.autocommit def reinscripcion_proveedor(request,id_proveedor): pro = Proveedores.objects.get(pk=id_proveedor) nuevo = Estatus.objects.get(pk=5) historial = Historial() historial.proveedor_id = pro.id historial.movimiento_id = 3 historial.antes = "ESTABA EN %s" %(pro.status) historial.despues ="SE REINSCRIBIO %s" %(nuevo) historial.otro ="REINSCRIPION" historial.usuario_id = request.user.id historial.status_id =pro.status.id historial.save() historial2 = Bitacora.objects.create(usuario_id = request.user.id,movimiento_id = 6,descripcion = 'REINSCRIBIO AL PROVEEDOR %s '%(pro.id) ) pro.status_id = 5 pro.fecha_final = None if pro.fecha_actualizacion and pro.fecha_registro != None: pro.fecha_actualizacion = date.today() if pro.fecha_registro and pro.fecha_actualizacion == None: pro.fecha_registro = date.today() pro.fecha_inicia_recepcion = date.today() + timedelta(days=6) pro.fecha_termina_recepcion = date.today() + timedelta(days=30) pro.save() msj = 'El proveedor se ha activado Exitosamente' messages.success(request, msj) return HttpResponseRedirect('/proveedores/') @login_required(login_url="/") def rubros_proveedor(request): rubross = Rubros.objects.all() if 'rubros' in request.GET: rubros = request.GET.get('rubros') proveedor = Proveedores.objects.filter(rubros__id__exact=rubros,status_id=1) valor = 1 obj = Rubros.objects.get(id = rubros) imprime = True else: proveedor = Proveedores.objects.none() rubros = 0 valor = 2 imprime = False obj = 0 filtrado = 10 #Comienza en 10 if 'filtrado' in request.GET: filtrado = request.GET.get('filtrado') paginator = Paginator(proveedor, filtrado) page = request.GET.get('page') try: proveedor = paginator.page(page) except PageNotAnInteger: proveedor = paginator.page(1) except EmptyPage: proveedor = paginator.page(paginator.num_pages) contexto = {'rubross': rubross, 'rubros': rubros, 'proveedores': proveedor, 'proveedor': 'active','filtrado':filtrado,'valor':valor,'rep':'active','obj':obj,'imprime':imprime} return render_to_response("rubros_proveedor.html", contexto, context_instance=RequestContext(request)) @login_required(login_url='/') def proveedor_historial(request,id_proveedor): his = int (id_proveedor) proveedores = Proveedores.objects.all().order_by('id') if 'proveedor' in request.GET: prove2 = request.GET.get('proveedor') proveedor = Proveedores.objects.get(id = prove2) prohistorial = Historial.objects.filter(proveedor_id=prove2).exclude(usuario__in= (337,345,284)).order_by('-fecha','-hora') valor = 1 elif his: if his > 0: prove2 = his proveedor = Proveedores.objects.get(id = prove2) prohistorial = Historial.objects.filter(proveedor_id=prove2).exclude(usuario__in= (337,345,284)).order_by('-fecha','-hora') valor = 1 else: prohistorial = Historial.objects.none() prove2 = 0 valor = 0 proveedor = 0 filtrado = 10 if 'filtrado' in request.GET: filtrado = request.GET.get('filtrado') paginator = Paginator(prohistorial, filtrado) page = request.GET.get('page') try: prohistorial = paginator.page(page) except PageNotAnInteger: prohistorial = paginator.page(1) except EmptyPage: prohistorial = paginator.page(paginator.num_pages) contexto = {'prohistorial': prohistorial, 'prove2': prove2,'proveedores':proveedores, 'proveedor': 'active','valor':valor,'filtrado':filtrado,'rep':'active','proveedor':proveedor} return render_to_response("proveedor_historial.html", contexto, context_instance=RequestContext(request)) @login_required(login_url="/") def proveedores_rubros(request): proveedoresrubros = Proveedores.objects.all().order_by('id') rubrossolos = Rubros.objects.all() filtrado = 10 #Comienza en 10 if 'filtrado' in request.GET: filtrado = request.GET.get('filtrado') paginator = Paginator(proveedoresrubros, filtrado) page = request.GET.get('page') try: proveedoresrubros = paginator.page(page) except PageNotAnInteger: proveedoresrubros = paginator.page(1) except EmptyPage: proveedoresrubros = paginator.page(paginator.num_pages) #Termiina la paginacion contexto = {'proveedoresrubros': proveedoresrubros, 'filtrado': filtrado, 'proveedor': 'active','rep':'active'} return render_to_response('proveedor_rubros.html', contexto, context_instance=RequestContext(request)) @login_required(login_url='/') def proveedor_reporteDiario(request): if request.user.tipo_usuario == 4 or request.user.tipo_usuario == 5: return HttpResponseRedirect('/error-403/') status = Estatus.objects.all().exclude(pk=5) if 'inicio' in request.GET and 'final' in request.GET and 'estatus' in request.GET: inicio = request.GET.get('inicio') final = request.GET.get('final') estatus = request.GET.get('estatus') if inicio == '' or final == '' or estatus=='': msj ="Seleccione Fecha de Inicio y Fecha de Final para realizar la consulta" messages.warning(request, msj) return HttpResponseRedirect('/reporteDiario/') pro = Proveedores.objects.filter(fecha_registro__range=(inicio,final), status_id=estatus).order_by('id') valor = 1 else: pro = Proveedores.objects.none() inicio = 0 final = 0 estatus =0 valor = 2 filtrado = 10 #Comienza en 10 if 'filtrado' in request.GET: filtrado = request.GET.get('filtrado') paginator = Paginator(pro, filtrado) page = request.GET.get('page') try: pro = paginator.page(page) except PageNotAnInteger: pro = paginator.page(1) except EmptyPage: pro = paginator.page(paginator.num_pages) ctx = {'pro': pro, 'var': 'active','inicio':inicio,'final':final,'estatus':estatus,'valor':valor,'filtrado':filtrado,'rep':'active','status':status} return render_to_response('proveedor_reporte_diario.html', ctx, context_instance=RequestContext(request)) @login_required(login_url='/') def proveedor_reportealtarenovacion(request): if request.user.tipo_usuario == 4 or request.user.tipo_usuario == 5: return HttpResponseRedirect('/error-403/') lista = [1,2] movimiento = Movimientos.objects.filter(id__in = lista) if 'inicio' in request.GET and 'final' in request.GET and 'opc' in request.GET: inicio = request.GET.get('inicio') final = request.GET.get('final') opc = request.GET.get('opc') if inicio == '' or final == '' or opc=='': msj ="Seleccione Fecha de Inicio y Fecha Final para realizar una consulta" messages.warning(request,msj) return HttpResponseRedirect('/reportealtarenovacion/') pro = Historial.objects.filter(fecha__range=(inicio, final), movimiento_id=opc).order_by('fecha') valor = 1 else: pro = Historial.objects.none() inicio = 0 final = 0 opc =0 valor = 2 filtrado = 10 #Comienza en 10 if 'filtrado' in request.GET: filtrado = request.GET.get('filtrado') paginator = Paginator(pro, filtrado) page = request.GET.get('page') try: pro = paginator.page(page) except PageNotAnInteger: pro = paginator.page(1) except EmptyPage: pro = paginator.page(paginator.num_pages) ctx = {'pro': pro, 'var': 'active','inicio':inicio,'final':final,'opc':opc,'valor':valor,'filtrado':filtrado,'rep':'active','movimiento':movimiento} return render_to_response('proveedor_reporte_alta_renovacion.html', ctx, context_instance=RequestContext(request)) @login_required(login_url='/') def proveedor_detalles(request, id_proveedor): proveedor = Proveedores.objects.get(id=id_proveedor) socios = Socios.objects.filter(proveedor_id = id_proveedor) telefonos = Telefonos.objects.filter(proveedor_id = id_proveedor) rubros = proveedor.rubros.all() sucursal = Sucursal.objects.filter(proveedor_id = id_proveedor) ctx = {'sucursal':sucursal,'telefonos':telefonos,'proveedores': proveedor, 'rubros': rubros,'socios':socios,'pro':'active'} return render_to_response('proveedor_detalles.html', ctx, context_instance=RequestContext(request)) @login_required(login_url='/') @transaction.autocommit def registro_usuarios(request): if request.user.tipo_usuario == 4: return HttpResponseRedirect('/error-403/') if request.method == 'POST': formulario_user = FormRegistroUsuario(request.POST) dependencia = request.POST.get("dependencia") unidad_admin = request.POST.get("unidad_admin") usuario = request.POST.get('username') if formulario_user.is_valid(): i = formulario_user.save(commit=False) if dependencia: i.dependencia = dependencia if unidad_admin: i.unidad_admin = unidad_admin i.save() Bitacora.objects.create(usuario_id = request.user.id,movimiento_id = 1,descripcion = 'DIO DE ALTA AL USUARIO %s'%(usuario)) #formulario_user.save() msj = 'El usuario fue registrado correctamente' messages.success(request, msj) return HttpResponseRedirect('/registroUsuarios/') else: formulario_user = FormRegistroUsuario() dependenciasw = {'dependencias': settings.DEPENDENCIAS.json()} contexto = {'formulario_user': formulario_user, 'reg_personas': 'active','dependencias':dependenciasw["dependencias"]} return render_to_response('registros_usuarios.html', contexto, context_instance=RequestContext(request)) @login_required(login_url='/') @transaction.autocommit def editar_usuarios(request,id): if request.user.tipo_usuario == 4 or request.user.tipo_usuario == 1: return HttpResponseRedirect('/error-403/') obj = User.objects.get(pk=id) if request.method == 'POST': formulario_user = FormEditUsuario(request.POST,instance=obj) dependencia = request.POST.get("dependencia") unidad_admin = request.POST.get("unidad_admin") if formulario_user.is_valid(): i = formulario_user.save(commit=False) if dependencia: i.dependencia = dependencia else: i.dependencia = None if unidad_admin: i.unidad_admin = unidad_admin else: i.unidad_admin = None i.save() Bitacora.objects.create(usuario_id = request.user.id,movimiento_id = 3,descripcion = 'MODIFICO AL USUARIO %s'%(obj.username)) msj = 'El usuario fue editado correctamente' messages.success(request, msj) return HttpResponseRedirect('/user/') else: formulario_user = FormEditUsuario(instance= obj ) dependenciasw = {'dependencias': settings.DEPENDENCIAS.json()} contexto = {'formulario_user': formulario_user, 'reg_personas': 'active','dependencias':dependenciasw["dependencias"],'dep':obj.dependencia,'admin':obj.unidad_admin,'usuario':obj} return render_to_response('editar_usuarios.html', contexto, context_instance=RequestContext(request)) @csrf_exempt def validar_usuario(request): results = "" if request.is_ajax(): q = request.POST['q'] if q is not None: results = User.objects.filter(username=q).order_by('username') return render_to_response('validar_usuario.html', {'results': results}, context_instance=RequestContext(request)) 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 ActivarProveedorView(View, JasperMix, ): def get(self, request, *args, **kwargs): id_proveedor = kwargs.get('id_provedor') pro = Proveedores.objects.get(pk=id_proveedor) nuevo = Estatus.objects.get(pk=1) historial = Historial() historial.proveedor_id = pro.id historial.movimiento_id = 3 historial.antes = "ESTABA EN %s" %(pro.status) historial.despues ="SE ACTIVO CON ESTATUS %s" %(nuevo) historial.otro ="ACTIVACION" historial.usuario_id = request.user.id historial.status_id =pro.status.id historial.save() historial2 = Bitacora.objects.create(usuario_id = request.user.id,movimiento_id = 5,descripcion = 'ACTIVO AL PROVEEDOR %s '%(pro.id) ) pro.status_id = 1 pro.fecha_actualizacion = date.today() pro.fecha_final = date.today() + relativedelta(years=1) pro.save() try: self.generateReport('/proveedores/produccion/entrega_recepcion_proveedor', settings.MEDIA_ROOT + 'entrega_recepcion_proveedor.pdf',{'id_proveedor': str(id_proveedor), }, 'pdf') return HttpResponseRedirect('/media/entrega_recepcion_proveedor.pdf') except Exception, e: messages.error(request, 'ocurrio un error durante la carga del pdf ' + str(e)) return HttpResponseRedirect('/editar/%s/' %(id_proveedor)) class EntregaRecepcionView(View, JasperMix, ): def get(self, request, *args, **kwargs): id_proveedor = kwargs.get('id_provedor') try: self.generateReport('/proveedores/produccion/entrega_recepcion_proveedor', settings.MEDIA_ROOT + 'entrega_recepcion_proveedor2.pdf',{'id_proveedor': str(id_proveedor), }, 'pdf') return HttpResponseRedirect('/media/entrega_recepcion_proveedor2.pdf') except Exception, e: messages.error(request, 'ocurrio un error durante la carga del pdf ' + str(e)) return HttpResponseRedirect('/editar/%s/'%(id_proveedor)) class NotificacionProveedores(View, JasperMix, ): def get(self, request, *args, **kwargs): try: self.generateReport('/proveedores/produccion/notificacion_proveedor', settings.MEDIA_ROOT + 'notificacion_proveedor.pdf') return HttpResponseRedirect('/media/notificacion_proveedor.pdf') except Exception, e: messages.error(request, 'ocurrio un error durante la carga del pdf ' + str(e)) return HttpResponseRedirect('/proveedores/') class CedulaView(View, JasperMix, ): def get(self, request, *args, **kwargs): id_proveedor = kwargs.get('id_provedor') fecha_im = Proveedores.objects.get(pk = id_proveedor) fecha_im.fecha_impresion_cedula = date.today() fecha_im.save() try: self.generateReport('/proveedores/produccion/cedula', settings.MEDIA_ROOT + 'cedula.pdf',{'id_proveedor': str(id_proveedor), }, 'pdf') return HttpResponseRedirect('/media/cedula.pdf') except Exception, e: messages.error(request, 'ocurrio un error durante la carga del pdf ' + str(e)) return HttpResponseRedirect('/proveedores/') # class CedulaView(View, JasperMix, ): # def get(self, request, *args, **kwargs): # id_proveedor = kwargs.get('id_provedor') # fecha_im = Proveedores.objects.get(pk = id_proveedor) # fecha_im.fecha_impresion_cedula = date.today() # fecha_im.save() # try: # url = 'http://10.2.8.36/jasperserver/flow.html?_flowId=viewReportFlow&standAlone=true&ParentFolderUri=%2Fproveedores%2Fproduccion&reportUnit=%2Fproveedores%2Fproduccion%2Fcedula&j_username=jasperadmin&j_password=jasperadmin&id_proveedor='+id_proveedor+'&output=pdf' # return HttpResponseRedirect(url) # except Exception, e: # messages.error(request, 'ocurrio un error durante la carga del pdf ' + str(e)) # return HttpResponseRedirect('/proveedores/') class HistorialProveedor(View, JasperMix, ): def get(self, request, *args, **kwargs): id_proveedor = kwargs.get('id_provedor') try: self.generateReport('/proveedores/produccion/reporte_historial', settings.MEDIA_ROOT + 'reporte_historial.pdf',{'id_proveedor': str(id_proveedor), }, 'pdf') return HttpResponseRedirect('/media/reporte_historial.pdf') except Exception, e: messages.error(request, 'ocurrio un error durante la carga del pdf ' + str(e)) return HttpResponseRedirect('/proveedores/') class ReporteRubrosProveedores(View, JasperMix, ): def get(self, request, *args, **kwargs): id_rubro = kwargs.get('id_rubros') try: self.generateReport('/proveedores/produccion/reporte_rubro_proveedores', settings.MEDIA_ROOT + 'reporte_rubro_proveedores.pdf',{'id_rubro':str(id_rubro), }, 'pdf') return HttpResponseRedirect('/media/reporte_rubro_proveedores.pdf') except Exception, e: messages.error(request, 'ocurrio un error durante la carga del pdf ' + str(e)) return HttpResponseRedirect('/RubrosProveedor/') class ReporteDiarioProveedor (View, JasperMix, ): def get(self, request, *args, **kwargs): try: uno = kwargs.get('inicio') dos = uno.encode('utf8') tres = datetime.strptime(dos, '%Y-%m-%d').strftime('%d-%m-%Y') fecha1 = tres #datetime.datetime.strptime(dated, '%d-%m-%Y') once =kwargs.get('final') doce = once.encode('utf8') trece = datetime.strptime(doce, '%Y-%m-%d').strftime('%d-%m-%Y') fecha2 = trece #datetime.datetime.strptime(dated, '%d-%m-%Y') status = kwargs.get('estatus') url = 'http://10.2.8.36/jasperserver/flow.html?_flowId=viewReportFlow&standAlone=true&ParentFolderUri=%2Fproveedores%2Fproduccion&reportUnit=%2Fproveedores%2Fproduccion%2Freporte_diario&j_username=jasperadmin&j_password=jasperadmin&fecha_1='+fecha1+'&fecha_2='+fecha2+'&estatus='+str(status)+'&output=pdf' return HttpResponseRedirect(url) except: msj = "Seleccione Fecha de Inicio y Fecha Final para realizar una consulta" messages.error(request, msj) return HttpResponseRedirect('/reporteDiario/') """ from io import BytesIO from reportlab.pdfgen import canvas import requests class ReporteDiarioProveedor(View, JasperMix): def get(self, request, *args, **kwargs): uno = kwargs.get('inicio') dos = uno.encode('utf8') tres = datetime.strptime(dos, '%Y-%m-%d').strftime('%d-%m-%Y') fecha1 = tres #datetime.datetime.strptime(dated, '%d-%m-%Y') once =kwargs.get('final') doce = once.encode('utf8') trece = datetime.strptime(doce, '%Y-%m-%d').strftime('%d-%m-%Y') fecha2 = trece #datetime.datetime.strptime(dated, '%d-%m-%Y') status = kwargs.get('estatus') print fecha1 print fecha2 print status url = 'http://10.2.8.36/jasperserver/flow.html?_flowId=viewReportFlow&standAlone=true&ParentFolderUri=%2Fproveedores%2Fproduccion&reportUnit=%2Fproveedores%2Fproduccion%2Freporte_diario&j_username=jasperadmin&j_password=jasperadmin&fecha_1='+fecha1+'&fecha_2='+fecha2+'&estatus='+str(status)+'&output=pdf' # url = 'http://10.2.8.36/jasperserver/flow.html?_flowId=viewReportFlow&standAlone=true&ParentFolderUri=%2F r= requests.get(url=url) response = HttpResponse(mime_type='application/pdf') response['Content-Disposition'] = 'filename=Acuse_'+ fecha1 + '_' + status +'.pdf' buffer = BytesIO(r.content) # Create the PDF object, using the BytesIO object as its "file." p = canvas.Canvas(buffer) # Get the value of the BytesIO buffer and write it to the response. pdf = buffer.getvalue() buffer.close() response.write(pdf) return response """ class AltaRenovacion (View, JasperMix, ): def get(self, request, *args, **kwargs): try: uno=kwargs.get('inicio') dos = uno.encode('utf8') tres = datetime.strptime(dos, '%Y-%m-%d').strftime('%d-%m-%Y') fecha1 = tres #datetime.datetime.strptime(dated, '%d-%m-%Y') once =kwargs.get('final') doce = once.encode('utf8') trece = datetime.strptime(doce, '%Y-%m-%d').strftime('%d-%m-%Y') fecha2 = trece #datetime.datetime.strptime(dated, '%d-%m-%Y') opc = kwargs.get('opc') url = 'http://10.2.8.36/jasperserver/flow.html?_flowId=viewReportFlow&standAlone=true&ParentFolderUri=%2Fproveedores%2Fproduccion&reportUnit=%2Fproveedores%2Fproduccion%2Freporte_alta_renovacion&j_username=jasperadmin&j_password=jasperadmin&fecha1='+fecha1+'&fecha2='+fecha2+'&opc='+str(opc)+'&output=pdf' return HttpResponseRedirect(url) except: msj = "Seleccione Fecha de Inicio y Fecha Final para realizar una consulta" messages.error(request,msj) return HttpResponseRedirect('/reportealtarenovacion/') class FinanzasE (View, JasperMix, ): def get(self, request, *args, **kwargs): uno = request.GET.get('inicio') tipo = request.GET.get('tipo') if uno: dos = uno.encode('utf8') tres = datetime.strptime(dos, '%Y-%m-%d').strftime('%d-%m-%Y') fecha = tres #datetime.datetime.strptime(dated, '%d-%m-%Y') url = 'http://10.2.8.36/jasperserver/flow.html?_flowId=viewReportFlow&standAlone=true&ParentFolderUri=%2Fproveedores%2Fproduccion&reportUnit=%2Fproveedores%2Fproduccion%2Freporte_finanzas&j_username=jasperadmin&j_password=jasperadmin&fecha='+fecha+'&tipo='+tipo+'&output=xls' return HttpResponseRedirect(url) else: return HttpResponseRedirect('/finanzas/') return HttpResponseRedirect('/principal/') class ReporteCatalogoProveedores(View, JasperMix, ): def get(self, request, *args, **kwargs): try: self.generateReport('/proveedores/produccion/reporte_cat_proveedores', settings.MEDIA_ROOT + 'reporte_cat_proveedores.pdf') return HttpResponseRedirect('/media/reporte_cat_proveedores.pdf') except Exception, e: messages.error(request, 'ocurrio un error durante la carga del pdf ' + str(e)) return HttpResponseRedirect('/proveedores/') class CatalogoRubros(View, JasperMix, ): def get(self, request, *args, **kwargs): try: self.generateReport('/proveedores/produccion/reporte_cat_rubros', settings.MEDIA_ROOT + 'reporte_cat_rubros.pdf') return HttpResponseRedirect('/media/reporte_cat_rubros.pdf') except Exception, e: messages.error(request, 'ocurrio un error durante la carga del pdf ' + str(e)) return HttpResponseRedirect('/proveedores/') class ProveedoresRubros(View, JasperMix, ): def get(self, request, *args, **kwargs): try: self.generateReport('/proveedores/produccion/reporte_proveedor_rubros', settings.MEDIA_ROOT + 'reporte_proveedor_rubros.pdf') return HttpResponseRedirect('/media/reporte_proveedor_rubros.pdf') except Exception, e: messages.error(request, 'ocurrio un error durante la carga del pdf ' + str(e)) return HttpResponseRedirect('/proveedores/') class DataTableView(APIView): model = None serializer = None queryset = None def get_queryset(self): if self.queryset: return self.queryset elif self.model: self.queryset = self.model.objects.all() return self.queryset else: raise ImproperlyConfigured('Debe especificar un queryset o un modelo') def get_serializer(self): if not self.serializer: raise ImproperlyConfigured('Debe especificar un serializer para la vista') else: return self.serializer def get_filter(self, filter_string, queryset): raise ImproperlyConfigured('Debe implementar la función get_filter') def get(self, request, *args, **kwargs): queryset = self.get_queryset() iTotalRecords = queryset.count() sSearch = request.GET.get('sSearch') if sSearch: queryset = self.get_filter(sSearch, queryset) iTotalDisplayRecords = queryset.count() sEcho = request.GET.get('sEcho') iDisplayStart = request.GET.get('iDisplayStart') if iDisplayStart: queryset = queryset[iDisplayStart:] iDisplayLength = request.GET.get('iDisplayLength') if iDisplayLength: queryset = queryset[:iDisplayLength] self.serializer = self.get_serializer() serializer = self.serializer(queryset, many=True) data = { "sEcho": sEcho, "iTotalRecords": iTotalRecords, "iTotalDisplayRecords": iTotalDisplayRecords, "aaData": serializer.data } return Response(data, status=status.HTTP_200_OK) class ListaProveedoresView(TemplateView,View): template_name = 'proveedor_consulta.html' def get(self, request, *args, **kwargs): if not request.user.is_authenticated(): return HttpResponseRedirect('/') return render(request, self.template_name,{'pro':'active'}) def get_context_data(self, **kwargs): context = super(ListaProveedoresView,self).get_context_data(**kwargs) context["pro"] = "active" return context class ProveedoresDataTablesAPIView(DataTableView): model = Proveedores serializer = ProveedoresSerializerdata def get_queryset(self): queryset = Proveedores.objects.all().order_by('status','id') return queryset def get_filter(self, filter_string, queryset): if filter_string: queryset = queryset.filter( Q(id__icontains= filter_string)| Q(razon_social__icontains=filter_string) | Q(rfc__icontains = filter_string)| Q(razon_comercial__icontains=filter_string) ) return queryset class CamarasDataTablesAPIView(DataTableView): model = Camaras serializer = CamarasSerializers def get_queryset(self): queryset = Camaras.objects.filter(cat_estatus__id = 1).order_by('id') return queryset def get_filter(self, filter_string, queryset): if filter_string: queryset = queryset.filter( Q(nombre__icontains=filter_string)| Q(clave = filter_string) ) return queryset class ListaCamarasView(TemplateView): template_name = 'camara_consulta.html' def get(self, request, *args, **kwargs): if not request.user.is_authenticated(): return HttpResponseRedirect('/') return render(request, self.template_name) class RubrosDataTablesAPIView(DataTableView): model = Rubros serializer = RubrosSerializers def get_queryset(self): queryset = Rubros.objects.all().order_by('id') return queryset def get_filter(self, filter_string, queryset): if filter_string: queryset = queryset.filter( Q(nombre__icontains=filter_string)| Q(clave = filter_string) ) return queryset class ListaRubrosView(TemplateView): template_name = 'rubro_consulta.html' def get(self, request, *args, **kwargs): if not request.user.is_authenticated(): return HttpResponseRedirect('/') return render(request, self.template_name,{'camara':'active'}) def get_context_data(self, **kwargs): context = super(ListaRubrosView, self).get_context_data(**kwargs) context['camara'] = "active" return context class UserTablesAPIView(DataTableView): """ @wrapers de ws para filtrar los usuarios de cada dependencias @:return lista de objetos por ciertos parametros de busqueda """ model = User serializer = UserSerializers def get_queryset(self): queryset = User.objects.all().order_by('username').exclude(pk=1) return queryset def get_filter(self, filter_string, queryset): if filter_string: # uAdministrativasID = [] # param = {'bscr': filter_string} # unidadesAdministrativas = requests.get(settings.PUD2 + '/api/dependencias/', params=param,headers=headers) # for value in unidadesAdministrativas.json(): # uAdministrativasID.append(value['id']) queryset = queryset.filter( Q(nombre__icontains=filter_string)| Q(apepat__icontains=filter_string) | Q(apemat__icontains = filter_string)| Q(username__icontains=filter_string) # Q(unidad_admin__in =uAdministrativasID)| # Q(dependencia__in =uAdministrativasID) ) return queryset class ListaUserView(TemplateView): template_name = 'user_consulta.html' def get(self, request, *args, **kwargs): if not request.user.is_authenticated(): return HttpResponseRedirect('/') if request.user.tipo_usuario == 4 or request.user.tipo_usuario == 1: return HttpResponseRedirect('/error-403/') return render(request, self.template_name,{'reg_personas':'active'}) def get_context_data(self, **kwargs): context = super(ListaUserView, self).get_context_data(**kwargs) context['reg_personas'] = "active" return context @csrf_exempt def modificacion_telefono(request): """ :vista que actualiza el Telefono del Proveedor :param request: :return: estatus : True o False, y Objeto Actualizado """ if request.is_ajax(): q=request.POST['q'] id_te = request.POST['id_te'] proveedor = request.POST['proveedor_id'] if q is not None and id_te is not None: bandera = None tele = None try: # des = date.today() + timedelta(days=365) validar_renovacion = Proveedores.objects.get(pk = proveedor) # if validar_renovacion.status.id != 5: # print("esta en otros status diferente de 5 y se renovara al cambiar numero de telefono") # history1 = historial_save(validar_renovacion.id,2,validar_renovacion.fecha_final,des,'RENOVACION',request.user.id,validar_renovacion.status.id) telefono = Telefonos.objects.get(pk = id_te) ant = telefono.telefonos telefono.telefonos = q telefono.save() bandera = True tele = Telefonos.objects.get(pk = id_te) history1 = historial_save(validar_renovacion.id,3,ant,tele.telefonos,'MODIFICACION DE TELEFONO',request.user.id,validar_renovacion.status.id) historial2 = Bitacora.objects.create(usuario_id = request.user.id,movimiento_id = 3,descripcion = 'MODIFOCO EL TELEFONO %s DEL PROVEEDOR %s'%(telefono.telefonos,telefono.proveedor.id) ) except: bandera = False tele = False list = [] list.append({ 'estatu': str(bandera), 'telefonos':str(tele) }) resultados = json.dumps(list) return HttpResponse(resultados,mimetype="application/javascript") @csrf_exempt def modificacion_socio(request): """ :vista que actualiza el socio :param request: :return: estatus : True o False, y Objeto Actualizado """ if request.is_ajax(): q=request.POST['q'] id_socio = request.POST['id_socio'] proveedor2 = request.POST['proveedor_id2'] if q is not None and id_socio is not None: bandera = None tele = None try: # des2 = date.today() + timedelta(days=365) validar_renovacion2 = Proveedores.objects.get(pk = proveedor2) # if validar_renovacion2.status.id != 5: # print("esta en otros status diferente de 5 y se renovara al cambiar numero de telefono") # history1 = historial_save(validar_renovacion2.id,2,validar_renovacion2.fecha_final,des2,'RENOVACION',request.user.id,validar_renovacion2.status.id) socio = Socios.objects.get(pk = id_socio) ant = socio.nombre_completo socio.nombre_completo = q socio.save() bandera = True tele = Socios.objects.get(pk = id_socio) history1 = historial_save(validar_renovacion2.id,3,ant,tele.nombre_completo,'MODIFICACION DE SOCIO',request.user.id,validar_renovacion2.status.id) historial3 = Bitacora.objects.create(usuario_id = request.user.id,movimiento_id = 3,descripcion = 'MODIFICO EL SOCIO %s DEL PROVEEDOR %s'%(socio.nombre_completo,socio.proveedor.id)) except: bandera = False tele = False list = [] list.append({ 'estatu': str(bandera), 'socio':str(tele) }) resultados = json.dumps(list) return HttpResponse(resultados,mimetype="application/javascript") class ApiPUDUadminView(APIView): """ Retorna las unidades administrativas existentes en padron unico de dependencias con los siguientes criterios de busqueda *"pud_padre_id" para filtrar las unidades administrativas de una dependencia *"pud_uadmin_id" para filtrar por id de la unidad administrativa """ def get(self, request): pud_padre = self.request.GET.get("pud_padre_id") pud_uadmin = self.request.GET.get("pud_uadmin_id") respuesta = list() r = None headers = {"Authorization": settings.PUD_TOKEN} if pud_padre: param = {'pud_padre_id': pud_padre} r = requests.get(settings.PUD2 + 'api/u_administrativa/', params=param, headers=headers) if pud_uadmin: param = {'pud_uadmin_id': pud_uadmin} r = requests.get(settings.PUD2 + 'api/u_administrativa/', params=param, headers=headers) if not pud_padre and not pud_uadmin: r = requests.get(settings.PUD2 + 'api/u_administrativa/', headers=headers) if r.status_code == 200: respuesta = r.json() elif r.status_code == 403: respuesta = r.json return Response(respuesta) class LoginView(APIView): """ @wrapper de ws para login externo @:parameter Username, Password @:return True si se logra la validacion en el login """ error_messages = { 'invalid': "Usuario o contraseña invalido", 'disabled': "Lo siento, tu cuenta esta suspendida" } @never_cache def _error_response(self, message_key): data = { 'success': False, 'mensaje': self.error_messages[message_key], 'id': None, } return Response(data) def get(self, request, *args, **kwargs): if request.user.is_authenticated(): return Response({'user_id': request.user.id,'username':request.user.username,'success':True}) return Response({'user_id': None,'username':None,'success':False}) 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: mensaje = 'Bienvenido' login(request, user) success = True data = { 'Id': user.id, 'UserName': user.username, 'IsSuperUser':user.is_superuser, 'Token':'stry6788tttt' } response_data = {} response_data['success'] = success response_data['mensaje'] = mensaje response_data['data'] = data return Response(response_data) else: return self._error_response('disabled') else: return self._error_response('invalid') class LogOutUserExterno(APIView): def get(self,request,*args,**kwargs): logout(request) return Response({"Mensaje":" te has deslogueado","success":False}) class TelefonosApiView(ListAPIView): serializer_class = TelefonoSerializer def get_queryset(self): query_set = Telefonos.objects.all() proveedor_id = self.request.GET.get('proveedor_id') if proveedor_id: query_set = query_set.filter(proveedor_id = proveedor_id) return query_set class SociosApiView(ListAPIView): serializer_class = SociosSerializers def get_queryset(self): query_set = Socios.objects.all() proveedor_id = self.request.GET.get('proveedor_id') if proveedor_id: query_set = query_set.filter(proveedor_id = proveedor_id) return query_set def rubros_valida(request): if request.is_ajax(): if request.method=='GET': respuest="este se envio via get" elif request.method=='POST': id_proveedor = request.POST['num_proveedor'] objeto_proveedor = Proveedores.objects.get(pk = id_proveedor) fecha_registro = objeto_proveedor.fecha_registro fecha_actualizacion = objeto_proveedor.fecha_actualizacion mensaje = {} fecha_para_cambio = None hoy = date.today() # Asigna fecha actual if fecha_registro and not fecha_actualizacion: fecha_para_cambio = fecha_registro + timedelta(days=180) if hoy >= fecha_para_cambio: mensaje['mensaje'] = "Ya se puede realizar los cambios de rubros" mensaje['estatus'] = True else: mensaje['mensaje'] = "No puede cambiar los rubros en este momento" mensaje['estatus'] = False if fecha_actualizacion: fecha_para_cambio = fecha_actualizacion + timedelta(days=180) if hoy >= fecha_para_cambio: mensaje['mensaje'] = "Ya se puede realizar los cambios de rubros" mensaje['estatus'] = True else: mensaje['mensaje'] = "No puede cambiar los rubros en este momento" mensaje['estatus'] = False regresa = json.dumps(mensaje) return HttpResponse(regresa,mimetype="application/javascript") @csrf_exempt def AddCamaras(request): if request.is_ajax(): if request.method=='POST': try: clave = request.POST['clave'] nombre = request.POST['nombre'] descripcion = request.POST['descripcion'] Camaras.objects.create(clave = clave, nombre = nombre, descripcion = descripcion, cat_estatus_id = 1 ) Bitacora.objects.create(usuario_id = request.user.id,movimiento_id = 1,descripcion = 'DIO DE ALTA LA CAMARA %s'%(nombre)) participante = 1 except Exception as ha: print(ha) participante = 0 return HttpResponse(participante,content_type="application/javascript") @csrf_exempt def getcamara(request): if request.is_ajax(): if request.method=='POST': participante=serializers.serialize("json",Camaras.objects.all().order_by('-id'),fields=('id','clave','nombre')) return HttpResponse(participante,content_type="application/javascript") def valida_rubros_cambio(request): if request.is_ajax(): if request.method=='GET': respuest="este se envio via get" elif request.method=='POST': usuario = request.POST['usu'] password = request.POST['pass'] user = authenticate(username=usuario, password=password) mensaje = {} if user is not None: if user.is_active: if user.tipo_usuario == 3: mensaje["estatus"] = True mensaje["mensaje"] = "Tiene privilegios para realizar la operacíon" else: mensaje["estatus"] = False mensaje["mensaje"] = "No cuenta con los privilegios para realizar la operacion" else: mensaje["estatus"] = False mensaje["mensaje"] = "La cuenta esta desactivada" else: mensaje["estatus"] = False mensaje["mensaje"] = "Credenciales Incorrectas, Intente Nuevamente !" regresa = json.dumps(mensaje) return HttpResponse(regresa,mimetype="application/javascript") class ResetPassView(APIView): error_messages = { 'invalid': "Usuario o contraseña invalido", 'disabled': "Lo siento, tu cuenta esta suspendida", 'newp':"Asegurese de enviar la nueva contraseña", 'found':"El usuario no existe" } @never_cache def _error_response(self, message_key): data = { 'success': False, 'mensaje': self.error_messages[message_key], 'id': None, } return Response(data) def get(self, request, *args, **kwargs): if request.user.is_authenticated(): return Response({'user_id': request.user.id,'username':request.user.username,'success':True}) return Response({'user_id': None,'username':None,'success':False}) def post(self, request, *args, **kwargs): id_usuario = request.DATA.get('Id_usuario') password_actual = request.DATA.get('Password_actual') new_pass = request.DATA.get('newpass') try: u = User.objects.get(pk = id_usuario) valida = True except User.DoesNotExist: valida = False if valida == True: user = authenticate(username=u.username, password=password_actual) if user is not None: if user.is_active: if new_pass: nuevo = User.objects.get(pk = user.id) nuevo.set_password(new_pass) nuevo.save() Bitacora.objects.create(usuario_id = self.request.user.id,movimiento_id = 3,descripcion = 'MODIFICO LA CONTRASENA DEL USUARIO %s'%(user.username)) mensaje = 'Bienvenido' login(request, user) success = True data = { 'Id': user.id, 'UserName': nuevo.username } response_data = {} response_data['success'] = success response_data['mensaje'] = mensaje response_data['data'] = data return Response(response_data) return self._error_response('newp') else: return self._error_response('disabled') else: return self._error_response('invalid') else: return self._error_response('found') class Error403(TemplateView): template_name = '403.html' class CambioPaswordView(FormView): form_class = RestablecerPassForm template_name = 'user_pass_reset.html' def get_success_url(self): return reverse('proveedores:cambiar-pass-usuario', kwargs={'pk': self.kwargs['pk']}) def form_valid(self, form): password = self.request.POST.get('passwor') pass_confirma = self.request.POST.get('pass_confirma') if str(password) == str(pass_confirma): user = User.objects.get(pk = self.kwargs['pk']) user.set_password(pass_confirma) user.save() Bitacora.objects.create(usuario_id = self.request.user.id,movimiento_id = 3,descripcion = 'MODIFICO LA CONTRASENA DEL USUARIO %s'%(user.username)) messages.success(self.request, "La contraseña fue actualizada exitosamente.", extra_tags='msg') else: messages.info(self.request, "Las contraseñas no coinciden.", extra_tags='msg') return super(CambioPaswordView, self).form_valid(form) def get_context_data(self, **kwargs): context = super(CambioPaswordView, self).get_context_data(**kwargs) context["usuarios"] = "active" context['reg_personas'] = 'active' context['usuario']=User.objects.get(pk = self.kwargs['pk']) return context def obtener_datos_proveedor(request): """ wrapper de ws de hacienda publica para obtener informacion del proveedor :param rfc: :return json_hacienda: """ resultado = {} adeudo_estatal = [] adeudo_fiscal = [] adeudo_vehicular = [] rfc = request.GET.get("rfc") hp_server = Client("https://haciendapublica.spf.tabasco.gob.mx/ws/ProveedorWS?wsdl") authentication = hp_server.factory.create('AuthSoapHd') authentication.UserName = "wshaciendapublica" authentication.Password = "0ql6GLukyb" hp_server.set_options(soapheaders=authentication) if rfc: json_proveedor = hp_server.service.getAdeudosFiscales(str(rfc)) if json_proveedor.codigoError == 1: try: if json_proveedor.estatusAdeudoEstatal == "SI": for x in json_proveedor.adeudoEstatal: json_adeudo_estatal = {} json_adeudo_estatal['periodo'] = str(x.periodo) adeudo_estatal.append(json_adeudo_estatal) if json_proveedor.estatusMultaFiscal == "SI": for y in json_proveedor.adeudoMultaFiscal: json_multa_fiscal = {} json_multa_fiscal['texto'] = str(y) adeudo_fiscal.append(json_multa_fiscal) if json_proveedor.estatusAdeudoVehicular == "SI": for z in json_proveedor.adeudoVehicular: json_adeudo_vehicular = {} json_adeudo_vehicular['placa'] = str(z.placa) adeudo_vehicular.append(json_adeudo_vehicular) except: pass resultado["estatusInscripcion"] = json_proveedor.estatusInscripcion resultado["nombreContribuyente"] = json_proveedor.nombreContribuyente try: resultado["estatusContribuyente"] = json_proveedor.estatusContribuyente except: resultado["estatusContribuyente"] = "" resultado["estatusAdeudoVehicular"] = adeudo_vehicular resultado["estatusAdeudoEstatal"] = adeudo_estatal resultado["estatusMultaFiscal"] = adeudo_fiscal resultado["codigoError"] = json_proveedor.codigoError resultado["mensaje"] = "Success" data = json.dumps(resultado) else: resultado["codigoError"] = json_proveedor.codigoError resultado["mensaje"] = json_proveedor.mensajeError data = json.dumps(resultado) else: resultado["codigoError"] = 404 resultado["mensaje"] = "No se envio ninguna RFC" data = json.dumps(resultado) return HttpResponse(data, content_type="application/json") class RenovacionManual(UpdateView): model = Proveedores template_name = 'proveedor_renovacion.html' form_class = ProveedoresRenovacionForm def get_success_url(self): return reverse('proveedores:renovar-manual', kwargs={'pk': self.kwargs['pk']}) def form_invalid(self, form): messages.error(self.request,"Ocurrio un error de validacion") return super(RenovacionManual,self).form_invalid(form) def form_valid(self, form): fecha_final = self.object.fecha_actualizacion + relativedelta(years=1) form.instance.fecha_final = fecha_final form.instance.status = Estatus.objects.get(pk=1) messages.success(self.request,"El proveedor se renovó correctamente") return super(RenovacionManual,self).form_valid(form) def get_context_data(self, **kwargs): t = super(RenovacionManual,self).get_context_data(**kwargs) t['renovacion'] = "active" return t class DatosDomicilio(APIView): def get(self, request, *args, **kwargs): token = settings.PUL_TOKEN headers = {'Authorization': token} localidad = self.request.GET.get('localidad_id') asentamiento_actual = requests.get(settings.PUL + 'api/direccion/' + str(localidad) + '/',headers=headers, verify=False, stream=True) return Response(asentamiento_actual.json()) #FINISH PUD V1.0.0 #DIRECCION GENERAL DE TECNOLOGIAS DE LA INFORMACION Y COMUNICACION #BY ARFC