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")
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")
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
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
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>'