SHARE
TWEET

Untitled

a guest Aug 22nd, 2019 87 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # -*- coding: utf-8 -*-
  2. from __future__ import unicode_literals
  3.  
  4. # Django
  5. from django.shortcuts import render,HttpResponse,HttpResponseRedirect, reverse
  6. from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
  7. from django.shortcuts import get_object_or_404
  8. from django.core.files.storage import FileSystemStorage
  9. from django.conf import settings
  10. from django.contrib.auth.decorators import user_passes_test
  11.  
  12. # Models
  13. from RecepcionSobres.models import Nomina,Sobre,SobreReal,EstadoNomina,RechazoSobre
  14. from Cliente.models import Cliente
  15. from Documentos.models import Documento
  16.  
  17. # Forms
  18. from RecepcionSobres.forms import SubirSobre,SubirDocumentos,SobreRealForm,SubirAnexos
  19.  
  20. # Librerias internas
  21. from utils.googleCloudStorage import upload_blob_from_file
  22. from utils.irisAPI import NotifyRecepcionNomina,NotifyFaltantes,RequestUploadImageNomina
  23.  
  24. # System
  25. import time
  26. import datetime
  27.  
  28. # Permisos
  29. from RecepcionSobres.permisos import adjuntadocumento,adjuntasobre,cargasobre,digitasobre
  30.  
  31. @user_passes_test(digitasobre, login_url='/forbidden/')
  32. def lista_nominas(request):
  33.     #TODO: Se crea una lista con las nóminas recibidas
  34.     oNominas_list = Nomina.objects.filter().exclude(EstadoNomina__codigo="ENV").order_by('fechaCreacion')
  35.     #TODO: Se crea un enlace para ingresar a las distintas nóminas
  36.  
  37.     paginator = Paginator(oNominas_list, 25) # Show 25 contacts per page
  38.     page = request.GET.get('page')
  39.     try:
  40.         oNominas = paginator.page(page)
  41.     except PageNotAnInteger:
  42.         # If page is not an integer, deliver first page.
  43.         oNominas = paginator.page(1)
  44.     except EmptyPage:
  45.         # If page is out of range (e.g. 9999), deliver last page of results.
  46.         oNominas = paginator.page(paginator.num_pages)
  47.  
  48.     return render(request, 'recepcionsobres/lista_interna.html', { 'Nominas':oNominas})
  49.  
  50. @user_passes_test(digitasobre, login_url='/forbidden/')
  51. def lista_total_nominas(request):
  52.     #TODO: Se crea una lista con las nóminas recibidas
  53.     oNominas_list = Nomina.objects.filter().order_by('fechaCreacion')
  54.     #TODO: Se crea un enlace para ingresar a las distintas nóminas
  55.  
  56.     paginator = Paginator(oNominas_list, 25) # Show 25 contacts per page
  57.     page = request.GET.get('page')
  58.     try:
  59.         oNominas = paginator.page(page)
  60.     except PageNotAnInteger:
  61.         # If page is not an integer, deliver first page.
  62.         oNominas = paginator.page(1)
  63.     except EmptyPage:
  64.         # If page is out of range (e.g. 9999), deliver last page of results.
  65.         oNominas = paginator.page(paginator.num_pages)
  66.  
  67.     return render(request, 'recepcionsobres/lista_interna.html', { 'Nominas':oNominas})
  68.  
  69. @user_passes_test(cargasobre, login_url='/forbidden/')
  70. def lista_sobres(request,uuid):
  71.     try:
  72.         oNomina = Nomina.objects.get(codigoInterno=uuid)
  73.         #TODO: Quizá más adelante sea necesario agregar paginamiento. Por ahora da lo mismo
  74.         oSobres = Sobre.objects.filter(Nomina__codigoInterno=uuid).order_by('secuenciaSobreNomina')
  75.         oSobresReal = SobreReal.objects.filter(Sobre__Nomina__codigoInterno=uuid).order_by('Sobre__secuenciaSobreNomina')
  76.         # Redirijo sitio para que procese el siguiente documento
  77.         return render(request, 'recepcionsobres/lista_sobre.html', { 'Sobres':oSobres ,'uuidNomina':uuid,'Nomina':oNomina,'SobresReales':oSobresReal})
  78.     except Exception as error:
  79.         print("ERROR cargarSobres !!! ",error)
  80.         return HttpResponse("cargarSobres no identificado.",error)
  81.  
  82. @user_passes_test(cargasobre, login_url='/forbidden/')
  83. def vistaprevianotificarNomina(request,uuid):
  84.     # Calculo los sobrantes
  85.     cant_sobrantes = Sobre.objects.filter(Nomina__codigoInterno=uuid,esSobrante=True).count()
  86.     # Calculo los faltantes
  87.     cant_faltantes = Sobre.objects.filter(Nomina__codigoInterno=uuid,etapa="Recepcionado").count()
  88.     total = Sobre.objects.filter(Nomina__codigoInterno=uuid).count()
  89.     oNomina = Nomina.objects.get(codigoInterno=uuid)
  90.     return render(request, 'recepcionsobres/notificar.html', { 'sobrantes':cant_sobrantes ,'uuidNomina':uuid,'faltantes':cant_faltantes,'total':total,'Nomina':oNomina})
  91.  
  92. @user_passes_test(digitasobre, login_url='/forbidden/')
  93. def lista_rechazos(request):
  94.     #TODO: Se crea una lista con las nóminas recibidas
  95.     oRechazos_list = RechazoSobre.objects.filter()
  96.     #TODO: Se crea un enlace para ingresar a las distintas nóminas
  97.  
  98.     paginator = Paginator(oRechazos_list, 100) # Show 25 contacts per page
  99.     page = request.GET.get('page')
  100.     try:
  101.         oRechazos = paginator.page(page)
  102.     except PageNotAnInteger:
  103.         # If page is not an integer, deliver first page.
  104.         oRechazos = paginator.page(1)
  105.     except EmptyPage:
  106.         # If page is out of range (e.g. 9999), deliver last page of results.
  107.         oRechazos = paginator.page(paginator.num_pages)
  108.  
  109.     return render(request, 'recepcionsobres/lista_rechazos.html', { 'Rechazos':oRechazos})
  110.  
  111.  
  112. @user_passes_test(cargasobre, login_url='/forbidden/')
  113. def subirImagenesNomina(request,uuid):
  114.     # preparo datos para notificar nomina
  115.     oNomina = Nomina.objects.get(codigoInterno=uuid)
  116.     info = {
  117.         "codigoNomina":oNomina.numeroNomina
  118.     }
  119.     # realizo notificacion
  120.     RequestUploadImageNomina(**info)
  121.     # cambio estado nomina
  122.     oEstadoNomina = EstadoNomina.objects.get(codigo="UPL")
  123.     oNomina.EstadoNomina = oEstadoNomina
  124.     oNomina.save()
  125.     return HttpResponseRedirect(reverse('recepcionfisica:lista_total_nominas', kwargs={}))
  126.  
  127. @user_passes_test(cargasobre, login_url='/forbidden/')
  128. def EliminarDocumento(request,uuid,uuidNomina,uuidDocumento):
  129.     from Documentos.models import Documento
  130.     # Super peligrosa funcion. BORRA DE VERDAD. SOLO USAR CASOS EXTREMOS
  131.     rows = Documento.objects.filter(codigoDocumento=uuidDocumento).delete()
  132.  
  133.     return HttpResponseRedirect(reverse('recepcionfisica:documentos_del_sobre', kwargs={'uuidNomina':uuidNomina,'uuid':uuid}))
  134.     # Vuelvo a lista de nominas
  135.  
  136. @user_passes_test(cargasobre, login_url='/forbidden/')
  137. def PreclasificarDocumento(request,uuid,uuidNomina,uuidDocumento):
  138.     from Documentos.models import Documento
  139.     # Super peligrosa funcion. BORRA DE VERDAD. SOLO USAR CASOS EXTREMOS
  140.     oDocumento = Documento.objects.get(codigoDocumento=uuidDocumento)
  141.     oUsuario = request.user
  142.     oDocumento.ProcessPreclasify(True,False,oUsuario)
  143.  
  144.     return HttpResponseRedirect(reverse('recepcionfisica:documentos_del_sobre', kwargs={'uuidNomina':uuidNomina,'uuid':uuid}))
  145.     # Vuelvo a lista de nominas
  146.  
  147.  
  148.  
  149. @user_passes_test(cargasobre, login_url='/forbidden/')
  150. def notificarNomina(request,uuid):
  151.     # preparo datos para notificar nomina
  152.     oNomina = Nomina.objects.get(codigoInterno=uuid)
  153.     TipoRecepcion = "Completa"
  154.     cant_sobrantes = Sobre.objects.filter(Nomina__codigoInterno=uuid,esSobrante=True).count()
  155.     cant_faltantes = Sobre.objects.filter(Nomina__codigoInterno=uuid,etapa="Recepcionado").count()
  156.     if cant_sobrantes>0:
  157.         TipoRecepcion = "Incompleta"
  158.     if cant_faltantes>0:
  159.         TipoRecepcion = "Incompleta"
  160.     fechaRecepcion = datetime.datetime.now()
  161.     info = {
  162.         "FechaNomina":oNomina.fechaCreacion.strftime("%d%m%Y"),
  163.         "FechaRecepcion":fechaRecepcion.strftime("%d%m%Y"),
  164.         "FechaTimbreNominas":fechaRecepcion.strftime("%d%m%Y"), # Averiguar que pasa con este valor
  165.         "TipoRecepcion":TipoRecepcion,
  166.         "NumeroNomina":oNomina.numeroNomina
  167.     }
  168.     # realizo notificacion
  169.     NotifyRecepcionNomina(**info)
  170.     # cambio estado nomina
  171.     oEstadoNomina = EstadoNomina.objects.get(codigo="ENV")
  172.     oNomina.EstadoNomina = oEstadoNomina
  173.     oNomina.fechaRecepcion = fechaRecepcion
  174.     oNomina.save()
  175.     # disponibilizo los documentos en la lista de digatadores
  176.     oSobres = Sobre.objects.filter(Nomina=oNomina)
  177.     oDocumentos_list =  Documento.objects.filter(Solicitud=oSobres[0].SolicitudReembolso).order_by('fechaRecepcion')
  178.     for oDocumento in oDocumentos_list:
  179.         oDocumento.updateEstado("UNK","Listo para ser digitado")
  180.     # obtengo los faltantes
  181.     faltantes = Sobre.objects.filter(Nomina__codigoInterno=uuid,etapa="Recepcionado")
  182.     for faltante in faltantes:
  183.         # por cada faltante envio notificacion
  184.         data = {
  185.             "FechaNomina":oNomina.fechaCreacion.strftime("%d%m%Y"),
  186.             "FechaFaltante" : fechaRecepcion.strftime("%d%m%Y"),
  187.             "NumeroNomina":oNomina.numeroNomina,
  188.             "NumeroSobre":faltante.numeroSobre,
  189.             "SecuenciaSobreNomina":faltante.secuenciaSobreNomina
  190.         }
  191.         NotifyFaltantes(**data)
  192.  
  193.     # Vuelvo a lista de nominas
  194.     return HttpResponseRedirect(reverse('recepcionfisica:lista_total_nominas', kwargs={}))
  195.  
  196.  
  197.  
  198. @user_passes_test(adjuntasobre, login_url='/forbidden/')
  199. def cargar_sobre(request,uuid,uuidNomina):
  200.     if request.method == 'POST' and request.FILES['sobre']:
  201.  
  202.         form = SubirSobre(request.POST,request.FILES)
  203.         if form.is_valid():
  204.             #TODO: Quiza la subida del archivo debiera ser asincrona
  205.  
  206.             print("request.POST-> ",request.POST)
  207.             myfile = request.FILES['sobre']
  208.             codigoBarra = request.POST.get('codigoBarra')+".pdf"
  209.             print("request.FILES-> ",myfile)
  210.  
  211.             path_storage = settings.GS_PATH
  212.             destination = "%s%s" % (path_storage,codigoBarra)
  213.             print("rdestination-> ",destination)
  214.             upload_blob_from_file(settings.GS_BUCKET_NAME,myfile,destination)
  215.             form.save()
  216.             return HttpResponseRedirect(reverse('recepcionfisica:lista_sobres', kwargs={'uuid':uuidNomina}))
  217.         else:
  218.             print("no es valido ",form.errors)
  219.     else:
  220.         data = {}
  221.         if uuid:
  222.             codigoBarra = Sobre.objects.filter(codigoInterno=uuid).values('numeroSobre')[0]
  223.             print("codigoBarra-> ",codigoBarra, "uuid -> ",uuid , "codigoBarra['numeroSobre']-> ",codigoBarra['numeroSobre'])
  224.             data = {'codigoBarra':codigoBarra['numeroSobre'] }
  225.         if uuidNomina:
  226.             data.update({'uuidNomina':uuidNomina})
  227.         form = SubirSobre(initial=data)
  228.  
  229.  
  230.     #print("Nomina ->",oNomina)
  231.     context = {'form':form }
  232.     return render(request, 'recepcionsobres/subir_sobre.html',context)
  233.  
  234. @user_passes_test(cargasobre, login_url='/forbidden/')
  235. def detalle_sobres(request,uuid):
  236.     """
  237.         Método que hace proceso de completar datos de la misma forma que un documento.
  238.         Por ahora, no pasará nunca por un OCR ni preclasificador
  239.     """
  240.  
  241.     try:
  242.         oSobre = get_object_or_404(Sobre, codigoInterno=uuid)
  243.         oSobreReal = SobreReal.objects.filter(Sobre__codigoInterno=uuid)
  244.         if request.method == 'POST':
  245.                 #TODO: Validar si alguien mas ya estaba modificando el documento. Si es asi, simplemente se debe pasar al siguiente
  246.                 print(" es post !! ",request.POST)
  247.                 form = SobreRealForm(request.POST)
  248.                 if form.is_valid():
  249.                     print("El formulario es valido!!!")
  250.  
  251.                     form.save(oSobre)
  252.                     return HttpResponseRedirect(reverse('recepcionfisica:lista_sobres', kwargs={'uuid':oSobre.Nomina.codigoInterno}))
  253.                 else:
  254.                     print("NO valido!!!" , form.errors)
  255.                     return render(request, 'recepcionsobres/detalle_sobre.html', {'Sobre':oSobre, 'form':form })
  256.                 # create a form instance and populate it with data from the request:
  257.         else:
  258.             #print(dir(oSobreReal))
  259.             #print(type(oSobreReal))
  260.             if oSobreReal:
  261.                 oSobreReal = oSobreReal[0]
  262.                 print("Ya hay un sobre creado aca!! ")
  263.                 #data = {"FechaSobre":oSobre.}
  264.                 data = {'FechaSobre':oSobreReal.FechaSobre, 'rutBeneficiario':oSobreReal.rutBeneficiario, 'celular':oSobreReal.celular,
  265.                         'telefonoFijo':oSobreReal.telefonoFijo, 'nombre':oSobreReal.nombre, 'apellidoPaterno':oSobreReal.apellidoPaterno,
  266.                         'apellidoMaterno':oSobreReal.apellidoMaterno, 'cantidadDocumentos':oSobreReal.cantidadDocumentos, 'numeroBoleta1':oSobreReal.numeroBoleta1,
  267.                         'numeroBoleta2':oSobreReal.numeroBoleta2, 'numeroBoleta3':oSobreReal.numeroBoleta3, 'numeroBoleta4':oSobreReal.numeroBoleta4,
  268.                         'bancoCuenta':oSobreReal.bancoCuenta, 'nombreTitularCuenta':oSobreReal.nombreTitularCuenta, 'numeroCuenta':oSobreReal.numeroCuenta,
  269.                         'rutTitularCuenta':oSobreReal.rutTitularCuenta, 'nombreValeVista':oSobreReal.nombreValeVista, 'apellidoValeVista':oSobreReal.apellidoValeVista,
  270.                         'rutValeVista':oSobreReal.rutValeVista, 'nombreSeguro':oSobreReal.nombreSeguro, 'opcionPago':oSobreReal.opcionPago
  271.                         }
  272.                 if oSobreReal.enfermedad:
  273.                     data.update({'enfermedad': 1})
  274.                 if oSobreReal.accidente:
  275.                     data.update({'accidente': 1})
  276.                 if oSobreReal.ordenMedica:
  277.                     data.update({'ordenMedica': 1})
  278.                 if oSobreReal.detalleCobro:
  279.                     data.update({'detalleCobro': 1})
  280.                 if oSobreReal.declaracionAccidente:
  281.                     data.update({'declaracionAccidente': 1})
  282.                 if oSobreReal.informeMedicoTratante:
  283.                     data.update({'informeMedicoTratante': 1})
  284.                 if oSobreReal.titularCuenta:
  285.                     data.update({'titularCuenta': 1})
  286.                 if oSobreReal.beneficiarioCuenta:
  287.                     data.update({'beneficiarioCuenta': 1})
  288.                 if oSobreReal.autorizaExcedentes:
  289.                     data.update({'autorizaExcedentes': 1})
  290.                 if oSobreReal.autorizaExcedentes:
  291.                     data.update({'tieneSeguro': 1})
  292.  
  293.             """
  294.             FechaSobre = forms.DateField(widget=forms.DateInput(format='%d/%m/%Y'),input_formats=('%d/%m/%Y', ))
  295.             rutBeneficiario = forms.CharField(max_length=20,required=False)
  296.             celular = forms.CharField(max_length=20,required=False)
  297.             telefonoFijo = forms.CharField(max_length=20,required=False)
  298.             nombre = forms.CharField(max_length=100,required=False)
  299.             apellidoPaterno = forms.CharField(max_length=100,required=False)
  300.             apellidoMaterno = forms.CharField(max_length=100,required=False)
  301.             cantidadDocumentos = forms.IntegerField(required=False)
  302.             numeroBoleta1 = forms.CharField(max_length=30,required=False)
  303.             numeroBoleta2 = forms.CharField(max_length=30,required=False)
  304.             numeroBoleta3 = forms.CharField(max_length=30,required=False)
  305.             numeroBoleta4 = forms.CharField(max_length=30,required=False)
  306.             enfermedad = forms.CharField(widget=forms.CheckboxInput(),required=False)
  307.             accidente = forms.CharField(widget=forms.CheckboxInput(),required=False)
  308.             ordenMedica = forms.CharField(widget=forms.CheckboxInput(),required=False)
  309.             detalleCobro = forms.CharField(widget=forms.CheckboxInput(),required=False)
  310.             declaracionAccidente = forms.CharField(widget=forms.CheckboxInput(),required=False)
  311.             informeMedicoTratante = forms.CharField(widget=forms.CheckboxInput(),required=False)
  312.             opcionPago = forms.CharField(max_length=30,required=False)
  313.             titularCuenta = forms.CharField(widget=forms.CheckboxInput(),required=False)
  314.             beneficiarioCuenta = forms.CharField(widget=forms.CheckboxInput(),required=False)
  315.             bancoCuenta = forms.CharField(max_length=30,required=False)
  316.             nombreTitularCuenta = forms.CharField(max_length=30,required=False)
  317.             numeroCuenta = forms.CharField(max_length=30,required=False)
  318.             rutTitularCuenta = forms.CharField(max_length=30,required=False)
  319.             nombreValeVista = forms.CharField(max_length=30,required=False)
  320.             apellidoValeVista = forms.CharField(max_length=30,required=False)
  321.             rutValeVista = forms.CharField(max_length=30,required=False)
  322.             autorizaExcedentes = forms.CharField(widget=forms.CheckboxInput(),required=False)
  323.             tieneSeguro = forms.CharField(widget=forms.CheckboxInput(),required=False)
  324.             nombreSeguro
  325.             """
  326.  
  327.  
  328.  
  329.             form = SobreRealForm(initial=data)
  330.     except Exception as error:
  331.         print("ERROR!!! ",error)
  332.         return HttpResponse("Documento no identificado.",Exception)
  333.     context = {'Sobre':oSobre, 'form':form }
  334.     return render(request, 'recepcionsobres/detalle_sobre.html', context)
  335.  
  336.  
  337.  
  338. @user_passes_test(adjuntadocumento, login_url='/forbidden/')
  339. def subir_documentos(request,uuid,uuidNomina):
  340.     if request.method == 'POST' and request.FILES['documento']:
  341.  
  342.         form = SubirDocumentos(request.POST,request.FILES)
  343.         if form.is_valid():
  344.             myfile = request.FILES['documento']
  345.             print("request.FILES-> ",myfile)
  346.             tiempo = time.time()
  347.             idDocumento = repr(tiempo).replace(".","")
  348.             #TODO: El path no puede estar en duro. Se debe obtener desde el settings
  349.             #destination = "consalud/%s" % (idDocumento+".pdf")
  350.             path_storage = settings.GS_PATH
  351.             destination = "%s%s" % (path_storage,idDocumento+".pdf")
  352.             print("rdestination documento-> ",destination)
  353.             upload_blob_from_file(settings.GS_BUCKET_NAME,myfile,destination)
  354.             form.save(idDocumento)
  355.             return HttpResponseRedirect(reverse('recepcionfisica:lista_sobres', kwargs={'uuid':uuidNomina}))
  356.             #return render(request, 'boleta/subirboleta.html',{'form':form})
  357.         else:
  358.             print("no es valido ",form.errors)
  359.     else:
  360.         form = SubirDocumentos(initial={'uuidSobre':uuid})
  361.  
  362.     context = {'form':form}
  363.     return render(request, 'recepcionsobres/subir_documento.html',context)
  364.  
  365. @user_passes_test(adjuntadocumento, login_url='/forbidden/')
  366. def subir_anexo(request,uuid,uuidNomina,uuidDocumento):
  367.     if request.method == 'POST' and request.FILES['anexo']:
  368.  
  369.         form = SubirAnexos(request.POST,request.FILES)
  370.         if form.is_valid():
  371.             myfile = request.FILES['anexo']
  372.             print("request.FILES-> ",myfile)
  373.             tiempo = time.time()
  374.             idDocumento = repr(tiempo).replace(".","")
  375.             #TODO: El path no puede estar en duro. Se debe obtener desde el settings
  376.             #destination = "consalud/%s" % (idDocumento+".pdf")
  377.             path_storage = settings.GS_PATH
  378.             destination = "%s%s" % (path_storage,idAnexo+".pdf")
  379.             print("rdestination documento-> ",destination)
  380.             upload_blob_from_file(settings.GS_BUCKET_NAME,myfile,destination)
  381.             form.save(idAnexo)
  382.             return HttpResponseRedirect(reverse('recepcionfisica:documentos_del_sobre', kwargs={'uuidNomina':uuidNomina,'uuid':uuid}))
  383.             #return render(request, 'boleta/subirboleta.html',{'form':form})
  384.         else:
  385.             print("no es valido ",form.errors)
  386.     else:
  387.         form = SubirAnexos(initial={'uuidDocumento':uuidDocumento})
  388.  
  389.     context = {'form':form,'uuidNomina':uuidNomina,'uuid':uuid}
  390.     return render(request, 'recepcionsobres/subir_anexo.html',context)
  391.  
  392. def lista_documentos_sobre(request,uuid,uuidNomina):
  393.     oSobre = get_object_or_404(Sobre, codigoInterno=uuid)
  394.     oDocumentos_list =  Documento.objects.filter(Solicitud=oSobre.SolicitudReembolso).order_by('fechaRecepcion')
  395.     paginator = Paginator(oDocumentos_list, 25) # Show 25 contacts per page
  396.     page = request.GET.get('page')
  397.     try:
  398.         oDocumentos = paginator.page(page)
  399.     except PageNotAnInteger:
  400.         # If page is not an integer, deliver first page.
  401.         oDocumentos = paginator.page(1)
  402.     except EmptyPage:
  403.         # If page is out of range (e.g. 9999), deliver last page of results.
  404.         oDocumentos = paginator.page(paginator.num_pages)
  405.     print('uuidNomina:',uuidNomina,' uuid:',uuid)
  406.     return render(request, 'documentos/lista_documentos_sobres.html', { 'Documentos':oDocumentos,'uuidNomina':uuidNomina,'Sobre':oSobre})
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top