Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- from __future__ import unicode_literals
- # Django
- from django.shortcuts import render,HttpResponse,HttpResponseRedirect, reverse
- from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
- from django.shortcuts import get_object_or_404
- from django.core.files.storage import FileSystemStorage
- from django.conf import settings
- from django.contrib.auth.decorators import user_passes_test
- # Models
- from RecepcionSobres.models import Nomina,Sobre,SobreReal,EstadoNomina,RechazoSobre
- from Cliente.models import Cliente
- from Documentos.models import Documento
- # Forms
- from RecepcionSobres.forms import SubirSobre,SubirDocumentos,SobreRealForm,SubirAnexos
- # Librerias internas
- from utils.googleCloudStorage import upload_blob_from_file
- from utils.irisAPI import NotifyRecepcionNomina,NotifyFaltantes,RequestUploadImageNomina
- # System
- import time
- import datetime
- # Permisos
- from RecepcionSobres.permisos import adjuntadocumento,adjuntasobre,cargasobre,digitasobre
- @user_passes_test(digitasobre, login_url='/forbidden/')
- def lista_nominas(request):
- #TODO: Se crea una lista con las nóminas recibidas
- oNominas_list = Nomina.objects.filter().exclude(EstadoNomina__codigo="ENV").order_by('fechaCreacion')
- #TODO: Se crea un enlace para ingresar a las distintas nóminas
- paginator = Paginator(oNominas_list, 25) # Show 25 contacts per page
- page = request.GET.get('page')
- try:
- oNominas = paginator.page(page)
- except PageNotAnInteger:
- # If page is not an integer, deliver first page.
- oNominas = paginator.page(1)
- except EmptyPage:
- # If page is out of range (e.g. 9999), deliver last page of results.
- oNominas = paginator.page(paginator.num_pages)
- return render(request, 'recepcionsobres/lista_interna.html', { 'Nominas':oNominas})
- @user_passes_test(digitasobre, login_url='/forbidden/')
- def lista_total_nominas(request):
- #TODO: Se crea una lista con las nóminas recibidas
- oNominas_list = Nomina.objects.filter().order_by('fechaCreacion')
- #TODO: Se crea un enlace para ingresar a las distintas nóminas
- paginator = Paginator(oNominas_list, 25) # Show 25 contacts per page
- page = request.GET.get('page')
- try:
- oNominas = paginator.page(page)
- except PageNotAnInteger:
- # If page is not an integer, deliver first page.
- oNominas = paginator.page(1)
- except EmptyPage:
- # If page is out of range (e.g. 9999), deliver last page of results.
- oNominas = paginator.page(paginator.num_pages)
- return render(request, 'recepcionsobres/lista_interna.html', { 'Nominas':oNominas})
- @user_passes_test(cargasobre, login_url='/forbidden/')
- def lista_sobres(request,uuid):
- try:
- oNomina = Nomina.objects.get(codigoInterno=uuid)
- #TODO: Quizá más adelante sea necesario agregar paginamiento. Por ahora da lo mismo
- oSobres = Sobre.objects.filter(Nomina__codigoInterno=uuid).order_by('secuenciaSobreNomina')
- oSobresReal = SobreReal.objects.filter(Sobre__Nomina__codigoInterno=uuid).order_by('Sobre__secuenciaSobreNomina')
- # Redirijo sitio para que procese el siguiente documento
- return render(request, 'recepcionsobres/lista_sobre.html', { 'Sobres':oSobres ,'uuidNomina':uuid,'Nomina':oNomina,'SobresReales':oSobresReal})
- except Exception as error:
- print("ERROR cargarSobres !!! ",error)
- return HttpResponse("cargarSobres no identificado.",error)
- @user_passes_test(cargasobre, login_url='/forbidden/')
- def vistaprevianotificarNomina(request,uuid):
- # Calculo los sobrantes
- cant_sobrantes = Sobre.objects.filter(Nomina__codigoInterno=uuid,esSobrante=True).count()
- # Calculo los faltantes
- cant_faltantes = Sobre.objects.filter(Nomina__codigoInterno=uuid,etapa="Recepcionado").count()
- total = Sobre.objects.filter(Nomina__codigoInterno=uuid).count()
- oNomina = Nomina.objects.get(codigoInterno=uuid)
- return render(request, 'recepcionsobres/notificar.html', { 'sobrantes':cant_sobrantes ,'uuidNomina':uuid,'faltantes':cant_faltantes,'total':total,'Nomina':oNomina})
- @user_passes_test(digitasobre, login_url='/forbidden/')
- def lista_rechazos(request):
- #TODO: Se crea una lista con las nóminas recibidas
- oRechazos_list = RechazoSobre.objects.filter()
- #TODO: Se crea un enlace para ingresar a las distintas nóminas
- paginator = Paginator(oRechazos_list, 100) # Show 25 contacts per page
- page = request.GET.get('page')
- try:
- oRechazos = paginator.page(page)
- except PageNotAnInteger:
- # If page is not an integer, deliver first page.
- oRechazos = paginator.page(1)
- except EmptyPage:
- # If page is out of range (e.g. 9999), deliver last page of results.
- oRechazos = paginator.page(paginator.num_pages)
- return render(request, 'recepcionsobres/lista_rechazos.html', { 'Rechazos':oRechazos})
- @user_passes_test(cargasobre, login_url='/forbidden/')
- def subirImagenesNomina(request,uuid):
- # preparo datos para notificar nomina
- oNomina = Nomina.objects.get(codigoInterno=uuid)
- info = {
- "codigoNomina":oNomina.numeroNomina
- }
- # realizo notificacion
- RequestUploadImageNomina(**info)
- # cambio estado nomina
- oEstadoNomina = EstadoNomina.objects.get(codigo="UPL")
- oNomina.EstadoNomina = oEstadoNomina
- oNomina.save()
- return HttpResponseRedirect(reverse('recepcionfisica:lista_total_nominas', kwargs={}))
- @user_passes_test(cargasobre, login_url='/forbidden/')
- def EliminarDocumento(request,uuid,uuidNomina,uuidDocumento):
- from Documentos.models import Documento
- # Super peligrosa funcion. BORRA DE VERDAD. SOLO USAR CASOS EXTREMOS
- rows = Documento.objects.filter(codigoDocumento=uuidDocumento).delete()
- return HttpResponseRedirect(reverse('recepcionfisica:documentos_del_sobre', kwargs={'uuidNomina':uuidNomina,'uuid':uuid}))
- # Vuelvo a lista de nominas
- @user_passes_test(cargasobre, login_url='/forbidden/')
- def PreclasificarDocumento(request,uuid,uuidNomina,uuidDocumento):
- from Documentos.models import Documento
- # Super peligrosa funcion. BORRA DE VERDAD. SOLO USAR CASOS EXTREMOS
- oDocumento = Documento.objects.get(codigoDocumento=uuidDocumento)
- oUsuario = request.user
- oDocumento.ProcessPreclasify(True,False,oUsuario)
- return HttpResponseRedirect(reverse('recepcionfisica:documentos_del_sobre', kwargs={'uuidNomina':uuidNomina,'uuid':uuid}))
- # Vuelvo a lista de nominas
- @user_passes_test(cargasobre, login_url='/forbidden/')
- def notificarNomina(request,uuid):
- # preparo datos para notificar nomina
- oNomina = Nomina.objects.get(codigoInterno=uuid)
- TipoRecepcion = "Completa"
- cant_sobrantes = Sobre.objects.filter(Nomina__codigoInterno=uuid,esSobrante=True).count()
- cant_faltantes = Sobre.objects.filter(Nomina__codigoInterno=uuid,etapa="Recepcionado").count()
- if cant_sobrantes>0:
- TipoRecepcion = "Incompleta"
- if cant_faltantes>0:
- TipoRecepcion = "Incompleta"
- fechaRecepcion = datetime.datetime.now()
- info = {
- "FechaNomina":oNomina.fechaCreacion.strftime("%d%m%Y"),
- "FechaRecepcion":fechaRecepcion.strftime("%d%m%Y"),
- "FechaTimbreNominas":fechaRecepcion.strftime("%d%m%Y"), # Averiguar que pasa con este valor
- "TipoRecepcion":TipoRecepcion,
- "NumeroNomina":oNomina.numeroNomina
- }
- # realizo notificacion
- NotifyRecepcionNomina(**info)
- # cambio estado nomina
- oEstadoNomina = EstadoNomina.objects.get(codigo="ENV")
- oNomina.EstadoNomina = oEstadoNomina
- oNomina.fechaRecepcion = fechaRecepcion
- oNomina.save()
- # disponibilizo los documentos en la lista de digatadores
- oSobres = Sobre.objects.filter(Nomina=oNomina)
- oDocumentos_list = Documento.objects.filter(Solicitud=oSobres[0].SolicitudReembolso).order_by('fechaRecepcion')
- for oDocumento in oDocumentos_list:
- oDocumento.updateEstado("UNK","Listo para ser digitado")
- # obtengo los faltantes
- faltantes = Sobre.objects.filter(Nomina__codigoInterno=uuid,etapa="Recepcionado")
- for faltante in faltantes:
- # por cada faltante envio notificacion
- data = {
- "FechaNomina":oNomina.fechaCreacion.strftime("%d%m%Y"),
- "FechaFaltante" : fechaRecepcion.strftime("%d%m%Y"),
- "NumeroNomina":oNomina.numeroNomina,
- "NumeroSobre":faltante.numeroSobre,
- "SecuenciaSobreNomina":faltante.secuenciaSobreNomina
- }
- NotifyFaltantes(**data)
- # Vuelvo a lista de nominas
- return HttpResponseRedirect(reverse('recepcionfisica:lista_total_nominas', kwargs={}))
- @user_passes_test(adjuntasobre, login_url='/forbidden/')
- def cargar_sobre(request,uuid,uuidNomina):
- if request.method == 'POST' and request.FILES['sobre']:
- form = SubirSobre(request.POST,request.FILES)
- if form.is_valid():
- #TODO: Quiza la subida del archivo debiera ser asincrona
- print("request.POST-> ",request.POST)
- myfile = request.FILES['sobre']
- codigoBarra = request.POST.get('codigoBarra')+".pdf"
- print("request.FILES-> ",myfile)
- path_storage = settings.GS_PATH
- destination = "%s%s" % (path_storage,codigoBarra)
- print("rdestination-> ",destination)
- upload_blob_from_file(settings.GS_BUCKET_NAME,myfile,destination)
- form.save()
- return HttpResponseRedirect(reverse('recepcionfisica:lista_sobres', kwargs={'uuid':uuidNomina}))
- else:
- print("no es valido ",form.errors)
- else:
- data = {}
- if uuid:
- codigoBarra = Sobre.objects.filter(codigoInterno=uuid).values('numeroSobre')[0]
- print("codigoBarra-> ",codigoBarra, "uuid -> ",uuid , "codigoBarra['numeroSobre']-> ",codigoBarra['numeroSobre'])
- data = {'codigoBarra':codigoBarra['numeroSobre'] }
- if uuidNomina:
- data.update({'uuidNomina':uuidNomina})
- form = SubirSobre(initial=data)
- #print("Nomina ->",oNomina)
- context = {'form':form }
- return render(request, 'recepcionsobres/subir_sobre.html',context)
- @user_passes_test(cargasobre, login_url='/forbidden/')
- def detalle_sobres(request,uuid):
- """
- Método que hace proceso de completar datos de la misma forma que un documento.
- Por ahora, no pasará nunca por un OCR ni preclasificador
- """
- try:
- oSobre = get_object_or_404(Sobre, codigoInterno=uuid)
- oSobreReal = SobreReal.objects.filter(Sobre__codigoInterno=uuid)
- if request.method == 'POST':
- #TODO: Validar si alguien mas ya estaba modificando el documento. Si es asi, simplemente se debe pasar al siguiente
- print(" es post !! ",request.POST)
- form = SobreRealForm(request.POST)
- if form.is_valid():
- print("El formulario es valido!!!")
- form.save(oSobre)
- return HttpResponseRedirect(reverse('recepcionfisica:lista_sobres', kwargs={'uuid':oSobre.Nomina.codigoInterno}))
- else:
- print("NO valido!!!" , form.errors)
- return render(request, 'recepcionsobres/detalle_sobre.html', {'Sobre':oSobre, 'form':form })
- # create a form instance and populate it with data from the request:
- else:
- #print(dir(oSobreReal))
- #print(type(oSobreReal))
- if oSobreReal:
- oSobreReal = oSobreReal[0]
- print("Ya hay un sobre creado aca!! ")
- #data = {"FechaSobre":oSobre.}
- data = {'FechaSobre':oSobreReal.FechaSobre, 'rutBeneficiario':oSobreReal.rutBeneficiario, 'celular':oSobreReal.celular,
- 'telefonoFijo':oSobreReal.telefonoFijo, 'nombre':oSobreReal.nombre, 'apellidoPaterno':oSobreReal.apellidoPaterno,
- 'apellidoMaterno':oSobreReal.apellidoMaterno, 'cantidadDocumentos':oSobreReal.cantidadDocumentos, 'numeroBoleta1':oSobreReal.numeroBoleta1,
- 'numeroBoleta2':oSobreReal.numeroBoleta2, 'numeroBoleta3':oSobreReal.numeroBoleta3, 'numeroBoleta4':oSobreReal.numeroBoleta4,
- 'bancoCuenta':oSobreReal.bancoCuenta, 'nombreTitularCuenta':oSobreReal.nombreTitularCuenta, 'numeroCuenta':oSobreReal.numeroCuenta,
- 'rutTitularCuenta':oSobreReal.rutTitularCuenta, 'nombreValeVista':oSobreReal.nombreValeVista, 'apellidoValeVista':oSobreReal.apellidoValeVista,
- 'rutValeVista':oSobreReal.rutValeVista, 'nombreSeguro':oSobreReal.nombreSeguro, 'opcionPago':oSobreReal.opcionPago
- }
- if oSobreReal.enfermedad:
- data.update({'enfermedad': 1})
- if oSobreReal.accidente:
- data.update({'accidente': 1})
- if oSobreReal.ordenMedica:
- data.update({'ordenMedica': 1})
- if oSobreReal.detalleCobro:
- data.update({'detalleCobro': 1})
- if oSobreReal.declaracionAccidente:
- data.update({'declaracionAccidente': 1})
- if oSobreReal.informeMedicoTratante:
- data.update({'informeMedicoTratante': 1})
- if oSobreReal.titularCuenta:
- data.update({'titularCuenta': 1})
- if oSobreReal.beneficiarioCuenta:
- data.update({'beneficiarioCuenta': 1})
- if oSobreReal.autorizaExcedentes:
- data.update({'autorizaExcedentes': 1})
- if oSobreReal.autorizaExcedentes:
- data.update({'tieneSeguro': 1})
- """
- FechaSobre = forms.DateField(widget=forms.DateInput(format='%d/%m/%Y'),input_formats=('%d/%m/%Y', ))
- rutBeneficiario = forms.CharField(max_length=20,required=False)
- celular = forms.CharField(max_length=20,required=False)
- telefonoFijo = forms.CharField(max_length=20,required=False)
- nombre = forms.CharField(max_length=100,required=False)
- apellidoPaterno = forms.CharField(max_length=100,required=False)
- apellidoMaterno = forms.CharField(max_length=100,required=False)
- cantidadDocumentos = forms.IntegerField(required=False)
- numeroBoleta1 = forms.CharField(max_length=30,required=False)
- numeroBoleta2 = forms.CharField(max_length=30,required=False)
- numeroBoleta3 = forms.CharField(max_length=30,required=False)
- numeroBoleta4 = forms.CharField(max_length=30,required=False)
- enfermedad = forms.CharField(widget=forms.CheckboxInput(),required=False)
- accidente = forms.CharField(widget=forms.CheckboxInput(),required=False)
- ordenMedica = forms.CharField(widget=forms.CheckboxInput(),required=False)
- detalleCobro = forms.CharField(widget=forms.CheckboxInput(),required=False)
- declaracionAccidente = forms.CharField(widget=forms.CheckboxInput(),required=False)
- informeMedicoTratante = forms.CharField(widget=forms.CheckboxInput(),required=False)
- opcionPago = forms.CharField(max_length=30,required=False)
- titularCuenta = forms.CharField(widget=forms.CheckboxInput(),required=False)
- beneficiarioCuenta = forms.CharField(widget=forms.CheckboxInput(),required=False)
- bancoCuenta = forms.CharField(max_length=30,required=False)
- nombreTitularCuenta = forms.CharField(max_length=30,required=False)
- numeroCuenta = forms.CharField(max_length=30,required=False)
- rutTitularCuenta = forms.CharField(max_length=30,required=False)
- nombreValeVista = forms.CharField(max_length=30,required=False)
- apellidoValeVista = forms.CharField(max_length=30,required=False)
- rutValeVista = forms.CharField(max_length=30,required=False)
- autorizaExcedentes = forms.CharField(widget=forms.CheckboxInput(),required=False)
- tieneSeguro = forms.CharField(widget=forms.CheckboxInput(),required=False)
- nombreSeguro
- """
- form = SobreRealForm(initial=data)
- except Exception as error:
- print("ERROR!!! ",error)
- return HttpResponse("Documento no identificado.",Exception)
- context = {'Sobre':oSobre, 'form':form }
- return render(request, 'recepcionsobres/detalle_sobre.html', context)
- @user_passes_test(adjuntadocumento, login_url='/forbidden/')
- def subir_documentos(request,uuid,uuidNomina):
- if request.method == 'POST' and request.FILES['documento']:
- form = SubirDocumentos(request.POST,request.FILES)
- if form.is_valid():
- myfile = request.FILES['documento']
- print("request.FILES-> ",myfile)
- tiempo = time.time()
- idDocumento = repr(tiempo).replace(".","")
- #TODO: El path no puede estar en duro. Se debe obtener desde el settings
- #destination = "consalud/%s" % (idDocumento+".pdf")
- path_storage = settings.GS_PATH
- destination = "%s%s" % (path_storage,idDocumento+".pdf")
- print("rdestination documento-> ",destination)
- upload_blob_from_file(settings.GS_BUCKET_NAME,myfile,destination)
- form.save(idDocumento)
- return HttpResponseRedirect(reverse('recepcionfisica:lista_sobres', kwargs={'uuid':uuidNomina}))
- #return render(request, 'boleta/subirboleta.html',{'form':form})
- else:
- print("no es valido ",form.errors)
- else:
- form = SubirDocumentos(initial={'uuidSobre':uuid})
- context = {'form':form}
- return render(request, 'recepcionsobres/subir_documento.html',context)
- @user_passes_test(adjuntadocumento, login_url='/forbidden/')
- def subir_anexo(request,uuid,uuidNomina,uuidDocumento):
- if request.method == 'POST' and request.FILES['anexo']:
- form = SubirAnexos(request.POST,request.FILES)
- if form.is_valid():
- myfile = request.FILES['anexo']
- print("request.FILES-> ",myfile)
- tiempo = time.time()
- idDocumento = repr(tiempo).replace(".","")
- #TODO: El path no puede estar en duro. Se debe obtener desde el settings
- #destination = "consalud/%s" % (idDocumento+".pdf")
- path_storage = settings.GS_PATH
- destination = "%s%s" % (path_storage,idAnexo+".pdf")
- print("rdestination documento-> ",destination)
- upload_blob_from_file(settings.GS_BUCKET_NAME,myfile,destination)
- form.save(idAnexo)
- return HttpResponseRedirect(reverse('recepcionfisica:documentos_del_sobre', kwargs={'uuidNomina':uuidNomina,'uuid':uuid}))
- #return render(request, 'boleta/subirboleta.html',{'form':form})
- else:
- print("no es valido ",form.errors)
- else:
- form = SubirAnexos(initial={'uuidDocumento':uuidDocumento})
- context = {'form':form,'uuidNomina':uuidNomina,'uuid':uuid}
- return render(request, 'recepcionsobres/subir_anexo.html',context)
- def lista_documentos_sobre(request,uuid,uuidNomina):
- oSobre = get_object_or_404(Sobre, codigoInterno=uuid)
- oDocumentos_list = Documento.objects.filter(Solicitud=oSobre.SolicitudReembolso).order_by('fechaRecepcion')
- paginator = Paginator(oDocumentos_list, 25) # Show 25 contacts per page
- page = request.GET.get('page')
- try:
- oDocumentos = paginator.page(page)
- except PageNotAnInteger:
- # If page is not an integer, deliver first page.
- oDocumentos = paginator.page(1)
- except EmptyPage:
- # If page is out of range (e.g. 9999), deliver last page of results.
- oDocumentos = paginator.page(paginator.num_pages)
- print('uuidNomina:',uuidNomina,' uuid:',uuid)
- return render(request, 'documentos/lista_documentos_sobres.html', { 'Documentos':oDocumentos,'uuidNomina':uuidNomina,'Sobre':oSobre})
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement