示例#1
0
 def post(self, request, *args, **kwargs):
     response_data = {u'Exito': False, u'Error': None, u'Resultados': None, u'Errores': None}
     archivo = request.FILES[u'archivo']
     largo = len(archivo.name) - 5
     extension = archivo.name[largo:]
     if extension == u'.xlsx':
         workbook = load_workbook(archivo)
         hojas = workbook.worksheets
         for hoja in hojas:
             if hoja.max_column != 20:
                 response_data[u'Error'] = u'<strong>' \
                                           u'<p class="text-center text-danger">' \
                                           u'El archivo excel no tiene el formato requerido.' \
                                           u'</p>' \
                                           u'</strong>'
             elif hoja.max_column == 20:
                 response_data[u'Exito'] = True
                 filas = []
                 titulos = [u'Numero de Empleado (del 0 al 9999) *', u'Nombre *', u'Apellido Paterno *',
                            u'Apellido Materno', u'Correo Electronico *', u'Hora de Entrada (24 HRS HH:MM) *',
                            u'Hora de Salida (24 HRS HH:MM) *', u'Fecha de Nacimiento (AAAA-MM-DD)', u'CURP', u'RFC',
                            u'Pais', u'Estado', u'Municipio', u'Ciudad', u'Asentamiento', u'Calle',
                            u'Numero Exterior', u'Numero Interior', u'Codigo Postal', u'Datos Adicionales']
                 vacio = [None, None, None, None, None, None, None, None, None, None,
                          None, None, None, None, None, None, None, None, None, None]
                 for rows in hoja.iter_rows('A1:T' + str(hoja.max_row)):
                     row = []
                     for cell in rows:
                         row.append(cell.value)
                     filas.append(row)
                 contador = 0
                 errores = []
                 resultados = u''
                 for fila in filas:
                     if fila != titulos and fila != vacio:
                         guardado = u'fallido'
                         if fila[0] is not None:
                             str_numero_empleado = convertirnumeroempleadoentero(int(fila[0]))
                             try:
                                 DatosUsuarioEmpleado.objects.get(numero_empleado__iexact=str_numero_empleado)
                                 guardado = u'modificado'
                             except Exception:
                                 guardado = u'creado'
                         error = self.guardar(fila, request)
                         if error[u'NoGuardado']:
                             guardado = u'fallido'
                         resultados += unicode(self.resultado(self, contador, guardado, fila, error))
                         errores.append({u'id': unicode(contador)+u'_resultado', u'error': error[u'errores']})
                         contador += 1
                 response_data[u'Errores'] = errores
                 response_data[u'Resultados'] = resultados
     else:
         response_data[u'Error'] = u'<strong>' \
                                   u'<p class="text-center text-danger">' \
                                   u'El archivo cargado no es un excel (.xlsx).' \
                                   u'</p>' \
                                   u'</strong>'
     return HttpResponse(json.dumps(response_data), content_type="application/json")
示例#2
0
 def clean_numero_empleado(self):
     numero_empleado_entero = int(self.data['numero_empleado_entero'])
     if 0 <= numero_empleado_entero <= 9999:
         numero_empleado = convertirnumeroempleadoentero(
             numero_empleado_entero)
         try:
             instancia = DatosUsuarioEmpleado.objects.get(
                 numero_empleado__iexact=numero_empleado)
             if instancia != self.instance:
                 raise forms.ValidationError(
                     "Ya existe un empleado con este número de empleado.")
             else:
                 return numero_empleado
         except DatosUsuarioEmpleado.DoesNotExist:
             return numero_empleado
     else:
         raise forms.ValidationError(
             "El número de empleado debe estar entre 0 y 9999")
示例#3
0
 def post(self, request, *args, **kwargs):
     pais = pais_default
     id_empleado = kwargs.get('pk', 0)
     tsp = transaction.savepoint()
     try:
         if id_empleado == 0:
             request.POST._mutable = True
             numero_empleado = convertirnumeroempleadoentero(int(request.POST[u'numero_empleado_entero']))
             request.POST[u'numero_empleado'] = numero_empleado
             request.POST._mutable = False
             grupo = self.request.POST.get('grupo', 0)
             form = self.form_class(request.POST)
             form2 = self.second_form_class(request.POST)
             form3 = self.third_form_class(request.POST)
             if form.is_valid() and form2.is_valid() and form3.is_valid():
                 # creando el empleado
                 empleado = form.save()
                 # creando la direccion
                 direccion = form2.save()
                 direccion.pais = pais
                 direccion.save()
                 # relacionando el empleado con la direccion
                 empleado.direccion = direccion
                 empleado.save()
                 # creando el datosusuarioempleado
                 datos = form3.save()
                 # creando el usuario
                 email = self.request.POST.get('email')
                 usuario = self.fourth_model(username=str(int(datos.numero_empleado)), email=email)
                 usuario.first_name = empleado.nombre
                 if empleado.apellido_materno == '':
                     usuario.last_name = empleado.apellido_paterno
                 else:
                     usuario.last_name = empleado.apellido_paterno + ' ' + empleado.apellido_materno
                 usuario.set_password(datos.numero_empleado)
                 passwordhasheada = hashlib.md5(datos.numero_empleado).hexdigest()
                 password = self.fifth_model(password=passwordhasheada)
                 password.save()
                 grupos = traergrupos(grupo)
                 usuario.save()
                 usuario.groups.clear()
                 for grupo in grupos:
                     usuario.groups.add(grupo)
                 usuario.save()
                 # relacionando el usuario y el empleado con los datos
                 datos.password = password
                 datos.usuario = usuario
                 datos.empleado = empleado
                 datos.save()
                 if tsp:
                     transaction.savepoint_commit(tsp)
                 return HttpResponseRedirect(self.get_success_url())
             else:
                 return self.render_to_response(
                     self.get_context_data(form=form, form2=form2, form3=form3))
         else:
             request.POST._mutable = True
             numero_empleado = convertirnumeroempleadoentero(int(request.POST[u'numero_empleado_entero']))
             request.POST[u'numero_empleado'] = numero_empleado
             request.POST._mutable = False
             grupo = self.request.POST.get('grupo', 0)
             datos = self.third_model.objects.get(id=id_empleado)
             cambiar_password = False
             if datos.usuario.check_password(datos.numero_empleado):
                 cambiar_password = True
             password = datos.password
             empleado = self.model.objects.get(id=datos.empleado.id)
             direccion = self.second_model.objects.get(id=datos.empleado.direccion.id)
             username = datos.usuario.username
             user = self.fourth_model.objects.get(username=username)
             form = self.form_class(request.POST, instance=empleado)
             form2 = self.second_form_class(request.POST, instance=direccion)
             form3 = self.third_form_class(request.POST, instance=datos)
             if form.is_valid() and form2.is_valid() and form3.is_valid():
                 # guadando cambios en empleado y direccion
                 empleado = form.save()
                 direccion = form2.save()
                 direccion.pais = pais
                 direccion.save()
                 empleado.direccion = direccion
                 empleado.save()
                 # guardando cambios en datos
                 datos = form3.save()
                 # guadando cambios en usuario
                 if cambiar_password:
                     # Si el número de empleado cambia tambien cambian las contraseñas
                     user.set_password(datos.numero_empleado)
                     passwordhasheada = hashlib.md5(datos.numero_empleado).hexdigest()
                     password.password = passwordhasheada
                     password.save()
                 user.username = str(int(datos.numero_empleado))
                 user.first_name = empleado.nombre
                 user.email = self.request.POST.get('email')
                 if empleado.apellido_materno == '':
                     user.last_name = empleado.apellido_paterno
                 else:
                     user.last_name = empleado.apellido_paterno + ' ' + empleado.apellido_materno
                 grupos = traergrupos(grupo)
                 user.groups.clear()
                 for grupo in grupos:
                     user.groups.add(grupo)
                 user.save()
                 # guadando cambios en datos y reestableciendo el numero de empleado en caso de haber sido cambiado
                 datos.password = password
                 datos.usuario = user
                 datos.empleado = empleado
                 datos.save()
                 if tsp:
                     transaction.savepoint_commit(tsp)
                 return HttpResponseRedirect(self.get_success_url())
             else:
                 return self.render_to_response(
                     self.get_context_data(form=form, form2=form2, form3=form3))
     except self.model.DoesNotExist:
         raise Exception('500')
     except self.second_model.DoesNotExist:
         raise Exception('500')
     except self.third_model.DoesNotExist:
         raise Exception('500')
     except self.fourth_model.DoesNotExist:
         raise Exception('500')
     except self.fifth_model.DoesNotExist:
         raise Exception('500')
     except Exception, e:
         raise e
示例#4
0
 def post(self, request, *args, **kwargs):
     pais = pais_default
     nombre_usuario = self.request.user.username
     tsp = transaction.savepoint()
     try:
         request.POST._mutable = True
         numero_empleado = convertirnumeroempleadoentero(
             int(request.POST[u'numero_empleado_entero']))
         request.POST[u'numero_empleado'] = numero_empleado
         request.POST._mutable = False
         usuario = self.fourth_model.objects.get(username=nombre_usuario)
         form = self.form_class(request.POST)
         form2 = self.second_form_class(request.POST)
         form3 = self.third_form_class(request.POST)
         if form.is_valid() and form2.is_valid() and form3.is_valid():
             # asignando grupos de permisos
             grupo = 0
             if usuario.is_superuser:
                 grupo = 3
             grupos = traergrupos(grupo)
             usuario.groups.clear()
             for grupo in grupos:
                 usuario.groups.add(grupo)
             # creando el empleado
             empleado = form.save()
             # creando la direccion
             direccion = form2.save()
             direccion.pais = pais
             direccion.save()
             # relacionando el empleado con la direccion
             empleado.direccion = direccion
             empleado.save()
             # creando el datosusuarioempleado
             datos = form3.save()
             # creando el usuario
             email = self.request.POST.get('email')
             usuario.email = email
             usuario.first_name = empleado.nombre
             if empleado.apellido_materno == '':
                 usuario.last_name = empleado.apellido_paterno
             else:
                 usuario.last_name = empleado.apellido_paterno + ' ' + empleado.apellido_materno
             usuario.username = str(int(datos.numero_empleado))
             usuario.set_password(datos.numero_empleado)
             usuario.is_superuser = False
             usuario.is_staff = False
             usuario.save()
             # encriptar password
             passwordhasheada = hashlib.md5(
                 datos.numero_empleado).hexdigest()
             password = self.fifth_model(password=passwordhasheada)
             password.save()
             # relacionando el usuario y el empleado con los datos
             datos.password = password
             datos.usuario = usuario
             datos.empleado = empleado
             datos.save()
             if tsp:
                 transaction.savepoint_commit(tsp)
                 """try:
                     mensaje = 'Bienvenid@ a Control de Acceso, ' \
                               'su nombre de usuario, y numero de empleado, y contraseña ahora son: %s' \
                               % (numero_empleado,)
                     correo = EmailMessage('Registro Completo en Control de Acceso',
                                           mensaje,
                                           to=[email])
                     correo.send()
                 except Exception, e:
                     print e"""
             return HttpResponseRedirect(self.get_success_url() +
                                         datos.numero_empleado)
         else:
             return self.render_to_response(
                 self.get_context_data(form=form, form2=form2, form3=form3))
     except self.model.DoesNotExist:
         raise Exception('500')
     except self.second_model.DoesNotExist:
         raise Exception('500')
     except self.third_model.DoesNotExist:
         raise Exception('500')
     except self.fourth_model.DoesNotExist:
         raise Exception('500')
     except self.fifth_model.DoesNotExist:
         raise Exception('500')
     except Exception, e:
         raise e
示例#5
0
 def guardar(self, fila, request):
     tsp = transaction.savepoint()
     pais = pais_default
     error = {u'empleado_errores': None, u'datosusuarioempleado_errores': None, u'errores': None,
              u'NoGuardado': False}
     errores = u''
     errores_empleado = u''
     errores_direccion = u''
     try:
         numero_empleado = None
         if fila[0] is not None:
             numero_empleado = convertirnumeroempleadoentero(int(fila[0]))
         sinonulos = [1, 2, 5, 6, 7]
         for f in sinonulos:  # Campos requeridos que si traen algo se vuelvan unicode
             if fila[f] is not None:
                 fila[f] = unicode(fila[f])
         sinulos = [3, 4, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
         for f in sinulos:  # Campos que pueden ser nulos pero es mejor que esten blancos
             if fila[f] is None:
                 fila[f] = u''
             else:
                 fila[f] = unicode(fila[f])
         if fila[7] is not None:  # Fecha de nacimiento cortando para que solo quede yyyy-mm-dd
             fila[7] = fila[7][:10]
         try:
             instancia = DatosUsuarioEmpleado.objects.get(numero_empleado__iexact=numero_empleado)
             instancia_empleado = instancia.empleado
             instancia_direccion = instancia.empleado.direccion
             datos = RegistrarEditarVariosForm(instance=instancia)
             empleado = EmpleadoForm(instance=instancia_empleado)
             direccion = DireccionForm(instance=instancia_direccion)
             usuario = instancia.usuario
         except Exception:
             datos = RegistrarEditarVariosForm()
             empleado = EmpleadoForm()
             direccion = DireccionForm()
             usuario = None
         formsdict = {
             u'csrfmiddlewaretoken': request.POST[u'csrfmiddlewaretoken'],
             u'numero_empleado_entero': fila[0],
             u'numero_empleado': numero_empleado,
             u'email': fila[4],
             u'hora_entrada': fila[5],
             u'hora_salida': fila[6],
             u'nombre': fila[1],
             u'apellido_paterno': fila[2],
             u'apellido_materno': fila[3],
             u'fecha_nacimiento': fila[7],
             u'curp': fila[8],
             u'rfc': fila[9],
             u'pais': fila[10],
             u'estado': fila[11],
             u'municipio': fila[12],
             u'ciudad': fila[13],
             u'asentamiento': fila[14],
             u'calle': fila[15],
             u'numero_exterior': fila[16],
             u'numero_interior': fila[17],
             u'codigo_postal': fila[18],
             u'datos_adicionales': fila[19]
         }
         formsqdict = QueryDict('', mutable=True, encoding='utf-8')
         formsqdict.update(formsdict)
         empleado_verificar_remplazo = EmpleadoForm()
         direccion_verificar_remplazo = DireccionForm()
         empleado_verificar_remplazo.cleaned_data = empleado_verificar_remplazo.data = formsqdict
         direccion_verificar_remplazo.cleaned_data = direccion_verificar_remplazo.data = formsqdict
         empleado_verificar_remplazo.is_bound = direccion_verificar_remplazo.is_bound = True
         reemplazar = False
         if not empleado_verificar_remplazo.is_valid():
             errores_empleado = unicode(empleado_verificar_remplazo.errors)
             formsdict = self.reemplazarempleado(empleado_verificar_remplazo, formsdict)
             reemplazar = True
         if not direccion_verificar_remplazo.is_valid():
             errores_direccion = unicode(direccion_verificar_remplazo.errors)
             formsdict = self.reemplazardireccion(direccion_verificar_remplazo, formsdict)
             reemplazar = True
         if reemplazar:
             errores += errores_empleado + errores_direccion
             formsqdict = QueryDict('', mutable=True, encoding='utf-8')
             formsqdict.update(formsdict)
         datos.cleaned_data = datos.data = formsqdict
         empleado.cleaned_data = empleado.data = formsqdict
         direccion.cleaned_data = direccion.data = formsqdict
         datos.is_bound = True
         empleado.is_bound = True
         direccion.is_bound = True
         if empleado.is_valid() and direccion.is_valid() and datos.is_valid():
             empleado = empleado.save()
             direccion = direccion.save()
             direccion.pais = pais
             direccion.save()
             empleado.direccion = direccion
             empleado.save()
             datos = datos.save()
             if usuario is None:
                 usuario = User(username=str(int(numero_empleado)), email=fila[4])
                 usuario.set_password(numero_empleado)
                 usuario.save()
                 passwordhasheada = hashlib.md5(numero_empleado).hexdigest()
                 password = PasswordCliente(password=passwordhasheada)
                 password.save()
                 datos.password = password
                 grupos = traergrupos(0)
                 usuario.groups.clear()
                 for grupo in grupos:
                     usuario.groups.add(grupo)
                 usuario.save()
             else:
                 usuario.email = fila[4]
                 usuario.save()
             usuario.first_name = empleado.nombre
             if empleado.apellido_materno == '':
                 usuario.last_name = empleado.apellido_paterno
             else:
                 usuario.last_name = empleado.apellido_paterno + ' ' + empleado.apellido_materno
             usuario.save()
             datos.usuario = usuario
             datos.empleado = empleado
             datos.save()
             puntoscontrol = traerpuntoscontrol(request.POST.getlist(u'puntocontrol'))
             for puntocontrol in puntoscontrol:
                 datos.puntocontrol.add(puntocontrol)
             datos.save()
             if tsp:
                 transaction.savepoint_commit(tsp)
         else:
             error[u'NoGuardado'] = True
             if not empleado.is_valid():
                 error[u'empleado_errores'] = empleado
                 error_empleado = unicode(empleado.errors)
                 if errores_empleado == u'':
                     errores += error_empleado
             if not direccion.is_valid():
                 error_direccion = unicode(direccion.errors)
                 if errores_direccion == u'':
                     errores += error_direccion
             if not datos.is_valid():
                 error[u'datosusuarioempleado_errores'] = datos
                 errores += unicode(datos.errors)
     except Exception, e:
         errores += u'<ul class="errorlist">' \
                    u'<li>Error interno del servidor' \
                    u'<ul class="errorlist">' \
                    u'<li>' + unicode(e.message) +\
                    u'</li></ul></li></ul>'