def __init__(self, dias, saldo, **kwargs): """Pantalla para comprar usando efectivo.""" self.user = user_session.get_user() id_log = controlador.insert_log(self.user, 'reservar', UNIDAD) self.reserva, full, state = controlador.reservar_tickets( self.user, dias, id_log, UNIDAD) self.data = {} self.saldo = saldo self.stop = Event() importe = controlador.get_categoria_importe(self.user['id_categoria']) self.faltante = (len(self.reserva) * importe) - saldo self.total_parcial = 0 self.bandera = True self.cargar_datos() self.cargar_threads() if state: if full: for dia in full: mensaje = "\rNo se pudo reservar: \r\n\t%s" % ( dia.strftime('%d/%m/%Y')) WarningPopup(mensaje).open() else: mensaje = "\rHubo un error al reservar \r\nIntente nuevamente" WarningPopup(mensaje).open() self.cancel() super(Compra2Screen, self).__init__(**kwargs)
def imprimir(self): """imprime un ticket de control""" print_status = impresora.check_status() papel_disponible = controlador.get_papel_disponible(UNIDAD) if ((print_status == 1) or (print_status == 2 and papel_disponible >= 1)): user = user_session.get_user() controlador.insert_log(user, 'imprimir', UNIDAD, 'Ticket de prueba') fecha = "dd/mm/aaaa" code = str(int(time())) + "0000000000" nom = user['nombre'] dni = user['dni'] cat = u"control" fac = u"Secretaría de Bienestar" msj = u"Ticket NO VALIDO" sdo = 0 ticket = "XXX" print_thread = Thread(target=impresora.imprimir_ticket_alumno, args=(nom, dni, fac, cat, code, UNIDAD, ticket, fecha, msj, sdo)) print_thread.start() controlador.update_papel_disponible(UNIDAD, 0, 1) elif print_status == 2: mensaje = u"No hay papel" WarningPopup(mensaje).open() else: mensaje = u"Impresora desconectada" WarningPopup(mensaje).open()
def comprar(self): """ Crea y accede a la pantalla de compra de tickets siempre y cuando haya papel en la impresora. """ estado = impresora.check_status() if estado == 1: controlador.update_estado_maquina(UNIDAD, 1) controlador.update_papel_disponible(UNIDAD, 2, 80) if not self.manager.has_screen('compra_1'): self.manager.add_widget(Compra1Screen(name='compra_1')) self.manager.current = 'compra_1' elif estado == 2: user = user_session.get_user() limite = controlador.get_categoria_limite(user['id_categoria']) controlador.update_estado_maquina(UNIDAD, 4) if controlador.get_papel_disponible(UNIDAD) >= limite: if not self.manager.has_screen('compra_1'): self.manager.add_widget(Compra1Screen(name='compra_1')) self.manager.current = 'compra_1' else: controlador.update_estado_maquina(UNIDAD, 2) mensaje = u"\rLa maquina no tiene papel." WarningPopup(mensaje).open() else: controlador.update_estado_maquina(UNIDAD, 5) mensaje = u"\rLa impresora está desconectada." WarningPopup(mensaje).open()
def registrar_usuario(self, estado=1): """Registra los usuarios de acuerdo a lo ingresado en el formulario. Llamando a los metodos insert_usuario y a send_mail""" user = controlador.get_usuario(self.ids.dni.text) if not user: data = {} data['dni'] = self.ids.dni.text data['nombre'] = self.ids.nombre.text data['lu'] = self.ids.lu.text data['email'] = self.ids.mail.text data['id_facultad'] = self.facultades[self.ids.facultad.text] data['id_provincia'] = self.provincias[self.ids.provincia.text] password = utils.generar_pass() data['password'] = utils.ofuscar_pass(password) data['estado'] = estado # 0 bloqueado / 1 registrado data['id_perfil'] = controlador.get_perfil('Alumno') data['id_categoria'] = controlador.get_categoria_id('Regular') # insertamos el usuario en la db controlador.insert_usuario(data, UNIDAD) # Enviamos el mail de confirmación datos_mail = controlador.get_configuracion() mail_thread = Thread( target=mailserver.send_mail, args=(data['nombre'], data['email'], password, datos_mail) ) mail_thread.start() mensaje = "\rGracias por registrarte!!\r\n\r\n" mensaje += "Comprueba tu mail\r\n para completar el registro" WarningPopup(mensaje).open() else: mensaje = "Ya existe un usario con ese DNI" WarningPopup(mensaje).open()
def validar(self): """Valida las entradas de texto y actualiza el perfil de usuario si todo esta bien.""" if not self.ids.email.text: mensaje = u"Su EMAIL no puede estar vacío" self.ids.email.focus = True WarningPopup(mensaje).open() elif len(self.ids.email.text) >= 64: mensaje = u"\rSu EMAIL no puede tener\r\n más de 64 caracteres." self.ids.email.text = "" self.ids.email.focus = True WarningPopup(mensaje).open() elif not self.mailvalidator(self.ids.email.text): mensaje = u"Su EMAIL está mal formado." self.ids.email.text = "" self.ids.email.focus = True WarningPopup(mensaje).open() elif not self.ids.provincia.text: mensaje = u"Debe especificar una PROVINCIA" WarningPopup(mensaje).open() else: mensaje = "Perfil actualizado correctamente" WarningPopup(mensaje).open() self.update_profile() self.manager.current = 'opciones'
def print_ticket_cierre(self, unidad, date): """ Imprime el ticket de cierre de la unidad y del día(date) dado """ total, bills = controlador.get_total(unidad, date) user = user_session.get_user() desc = 'Control - Cierre de la maquina %d del dia %s' % ( unidad, date.strftime('%d/%m/%Y')) id_log = controlador.insert_log(user, 'retiro', unidad, desc) id_ticket = controlador.get_id_ticket_cierre(unidad, date) if not id_ticket: id_ticket = controlador.insert_ticket_cierre(id_log, total, unidad) ticket = controlador.get_ticket_cierre(id_ticket) hora = controlador.get_hora_inicio(unidad, date) print_status = impresora.check_status() papel_disponible = controlador.get_papel_disponible(UNIDAD) if ((print_status == 1) or (print_status == 2 and papel_disponible >= 2)): print_thread = Thread(target=impresora.imprimir_ticket_cierre, args=(user['nombre'], id_ticket, unidad, hora, bills, total, ticket['barcode'], date.strftime('%d/%m/%Y'))) print_thread.start() controlador.update_papel_disponible(UNIDAD, 0, 2) elif print_status == 2: mensaje = u"No hay papel" WarningPopup(mensaje).open() else: mensaje = u"Impresora desconectada" WarningPopup(mensaje).open()
def medio_de_pago(self): """ Función que se ejecuta al presionar continuar. Decide en base al saldo disponible a que pantalla saltar. Si el saldo es mayor al importe necesario para realizar la compra va a la pantalla de confirmación. Si el saldo es menor o insuficiente para realizar la compra va a la pantalla de ingreso de billetes. """ sleep(1) dias = self.controlar_dias() if dias: if self.user['saldo'] >= self.importe: if len(dias) <= self.tickets_posibles: titulo = "Paso 2: Confirmar Pago" self.manager.add_widget( Compra3Screen(dias, titulo, name='compra_3')) self.manager.current = 'compra_3' else: self.manager.add_widget( Compra2Screen(dias, self.user['saldo'], name='compra_2')) self.manager.current = 'compra_2' else: self.manager.add_widget( Compra2Screen(dias, self.user['saldo'], name='compra_2')) self.manager.current = 'compra_2' else: mensaje = "La fecha DESDE debe ser menor a HASTA" WarningPopup(mensaje).open()
def registro(self): """ Ingresa a la pantalla de registro si hay internet. """ if internet_on(): self.manager.current = "formulario" else: msje = u"\rInternet sin conexión\r\n Intente nuevamente." WarningPopup(msje).open()
def leer_billetes(self, cola_billetes): """ Inicia el proceso de lectura de billetes. Cuando detecta un billete actualiza la pantalla para mostrar lo ingresado y permite que el billete se cargue en la maquina. """ while True: try: self.valor = cola_billetes.get(False) except Empty: continue if self.stop.is_set(): return else: if self.valor: if self.valor == -1: self.billete_trabado() sleep(1) else: if self.user['saldo'] + self.valor > 100: Thread(target=self.stack, args=(self.cola_bool, 2)).start() mensaje = "No puede cargar mas de $ 100" WarningPopup(mensaje).open() else: self.update_ingreso(str(self.valor), False) else: self.update_ingreso("no", True) sleep(0.1)
def check_fecha(self): """ Verifica que la fecha sea correcta y menor o igual a la actual. """ year = int(self.ids.year.text) mes = self.ids.mes.values.index(self.ids.mes.text) + 1 dia = int(self.ids.dia.text) unidad = controlador.get_maquina_ubicacion( self.unidades[self.ids.unidad.text]) try: date = datetime(year, mes, dia) if date <= datetime.now(): self.print_ticket_cierre(unidad, date) else: mensaje = u"Fecha Inválida" WarningPopup(mensaje).open() except ValueError: mensaje = u"Fecha Inválida" WarningPopup(mensaje).open()
def validar_anulacion(self): """Verifica que el numero ingresado corresponda a un ticket valido para el usuario y que sea antes de la hora máxima permitida.""" if self.ids.id_ticket.text: if not self.ids.id_ticket.text.isdigit(): self.ids.id_ticket.text = "" self.ids.id_ticket.focus = True mensaje = "\rEl código del ticket\r\n solo tiene números." WarningPopup(mensaje).open() else: fecha = controlador.has_ticket(self.user, self.ids.id_ticket.text) hora_max = controlador.get_hora_anulacion() if fecha: codigo = self.check_hora(fecha, hora_max) if codigo == 1: return fecha.strftime('%d/%m/%Y') # anular elif codigo == 0: self.ids.id_ticket.text = "" self.ids.id_ticket.focus = True mensaje = "\rNo puede anular un ticket\r\n" mensaje += "despues de las %d hs." % (hora_max) WarningPopup(mensaje).open() return 0 # nada else: self.ticket_vencido() self.ids.id_ticket.text = "" self.ids.id_ticket.focus = True mensaje = "\rNo puede anular un ticket\r\n despues" mensaje += " de la fecha\r\n de servicio.\r\n\r\n" mensaje += "Su ticket se venció." WarningPopup(mensaje).open() return 0 # vencer else: self.ids.id_ticket.text = "" self.ids.id_ticket.focus = True mensaje = "El código del ticket\r\n no es valido." WarningPopup(mensaje).open() else: self.ids.id_ticket.text = "" self.ids.id_ticket.focus = True mensaje = "\rEl código del ticket\r\n no puede estar vacío." WarningPopup(mensaje).open()
def cargar(self): """Crea y accede a la pantalla de carga de saldo""" self.user = user_session.get_user() if self.user['saldo'] >= 100: mensaje = "No puede cargar más de $ 100" WarningPopup(mensaje).open() else: if not self.manager.has_screen('carga'): self.manager.add_widget(CargaScreen(name='carga')) self.manager.current = 'carga'
def __init__(self, dias, titulo, **kwargs): """Pantalla para confirmar e imprimir los tickets""" self.user = user_session.get_user() id_log = controlador.insert_log(self.user, 'reservar', UNIDAD) self.reserva, full, state = controlador.reservar_tickets( self.user, dias, id_log, UNIDAD) if state: if full: for dia in full: mensaje = "\rNo se pudo reservar: \r\n\t%s" % ( dia.strftime('%d/%m/%Y')) WarningPopup(mensaje).open() else: mensaje = "\rHubo un error al reservar \r\nIntente nuevamente" WarningPopup(mensaje).open() self.cancel() self.bandera = True self.data = {} self.dias = dias self.titulo = titulo self.cargar_datos() super(Compra3Screen, self).__init__(**kwargs)
def check_fecha(self): """ Verifica que la fecha sea correcta y menor o igual a la actual. """ year = int(self.ids.year.text) mes = self.ids.mes.values.index(self.ids.mes.text) + 1 dia = int(self.ids.dia.text) cant = int(self.ids.cantidad.text) delegacion = self.ids.delegacion.text recibo = self.ids.recibo.text cat = ( self.categorias[self.ids.categorias.text], self.ids.categorias.text ) try: date = datetime(year, mes, dia) if date >= datetime.now(): self.print_ticket_grupal(cant, delegacion, cat, date, recibo) else: mensaje = u"Fecha Inválida" WarningPopup(mensaje).open() except ValueError: mensaje = u"Fecha Inválida" WarningPopup(mensaje).open()
def validar_anulacion(self): """Verifica que el numero ingresado corresponda a un ticket valido para el usuario y que sea antes de la hora máxima permitida.""" if self.ids.id_ticket.text: if not self.ids.id_ticket.text.isdigit(): self.ids.id_ticket.text = "" self.ids.id_ticket.focus = True mensaje = "\rEl código del ticket\r\n solo tiene números." WarningPopup(mensaje).open() else: fecha = controlador.has_ticket_grupal(self.ids.id_ticket.text) if fecha: return fecha.strftime('%d/%m/%Y') # anular else: self.ids.id_ticket.text = "" self.ids.id_ticket.focus = True mensaje = "El código del ticket\r\n no es valido." WarningPopup(mensaje).open() else: self.ids.id_ticket.text = "" self.ids.id_ticket.focus = True mensaje = "\rEl código del ticket\r\n no puede estar vacío." WarningPopup(mensaje).open()
def validar(self): """Valida las entradas y chequea en la base de datos por el par dni - password""" if self.ids.dni.text: if not self.ids.dni.text.isdigit(): self.ids.dni.text = "" self.ids.dni.focus = True mensaje = u"Su DNI solo puede contenter números" WarningPopup(mensaje).open() elif len(self.ids.dni.text) >= 10: mensaje = u"\rSu DNI no puede tener\r\n más de 10 caracteres." self.ids.dni.focus = True WarningPopup(mensaje).open() elif not self.ids.passw.text: mensaje = u"Su PASSWORD no puede estar vacío" self.ids.passw.focus = True WarningPopup(mensaje).open() elif len(self.ids.passw.text) >= 64: mensaje = u"\rSu PASSWORD no puede tener\r\n" mensaje += u"más de 64 caracteres." self.ids.passw.focus = True WarningPopup(mensaje).open() else: dni = self.ids.dni.text password = self.ids.passw.text login = self.validar_login(dni, password) if login: self.clear() user_session.init(controlador.get_usuario(dni), time()) user = user_session.get_user() controlador.insert_log( user, 'ingresar', UNIDAD, 'control - desbloqueo' ) self.manager.current = 'menu_control' self.manager.remove_widget( self.manager.get_screen('bloqueo') ) else: self.ids.passw.text = "" mensaje = u"DNI o PASSWORD incorrecto" WarningPopup(mensaje).open() else: mensaje = u"Su DNI no puede estar vacío" self.ids.dni.focus = True WarningPopup(mensaje).open()
def validar(self): """Valida las entradas y llama al metodo que cambia el password""" if not self.ids.old_pass.text: mensaje = u"Debe ingresar el password actual" self.ids.old_pass.focus = True WarningPopup(mensaje).open() elif not self.ids.new_pass.text: mensaje = u"Debe ingresar el password nuevo" self.ids.new_pass.focus = True WarningPopup(mensaje).open() elif not self.ids.re_new_pass.text: mensaje = u"Debe repetir el password nuevo" self.ids.re_new_pass.focus = True WarningPopup(mensaje).open() else: user = user_session.get_user() response = self.cambiar_pass(user) if response == 1: mensaje = u"Su password se actualizo correctamente" WarningPopup(mensaje).open() self.clear() self.manager.current = self.scr_accept if self.scr_accept == 'profile': controlador.insert_log(user, 'perfil', UNIDAD) user_session.close() self.manager.remove_widget(self.manager.get_screen('pass')) elif response == 2: msje = u"\rEL password actual\r\n no coincide con el antiguo." WarningPopup(msje).open() self.clear() elif response == 3: mensaje = u"\rEl password actual\r\n no debe superar los 15" mensaje += u" caracteres\r\n y no puede contener" mensaje += u" símbolos extraños." WarningPopup(mensaje).open() self.clear() else: mensaje = u"El password nuevo no coincide" WarningPopup(mensaje).open() self.clear()
def retirar(self): """ Controla que se pueda hacer un ticket de cierre para poder retirar el dinero. """ user = user_session.get_user() retiro = controlador.get_log(UNIDAD, 'retiro') hora = controlador.get_hora_inicio(UNIDAD) if not retiro and hora: total, bills = controlador.get_total(UNIDAD) if total: desc = 'Control - 1er Cierre' id_log = controlador.insert_log(user, 'retiro', UNIDAD, desc) id_ticket = controlador.insert_ticket_cierre( id_log, total, UNIDAD) ticket = controlador.get_ticket_cierre(id_ticket) hora = controlador.get_hora_inicio(UNIDAD) print_status = impresora.check_status() papel_disponible = controlador.get_papel_disponible(UNIDAD) if ((print_status == 1) or (print_status == 2 and papel_disponible >= 2)): print_thread = Thread( target=impresora.imprimir_ticket_cierre, args=(user['nombre'], id_ticket, UNIDAD, hora, bills, total, ticket['barcode'])) print_thread.start() elif print_status == 2: mensaje = u"No hay papel" WarningPopup(mensaje).open() else: mensaje = u"Impresora desconectada" WarningPopup(mensaje).open() else: mensaje = u"No hay registros para hoy" WarningPopup(mensaje).open() elif retiro and hora: total, bills = controlador.get_total(UNIDAD) if total: desc = 'Control - Cierre' id_log = controlador.insert_log(user, 'retiro', UNIDAD, desc) total, bills = controlador.get_total(UNIDAD) id_ticket = controlador.get_id_ticket_cierre(UNIDAD) if not id_ticket: id_ticket = controlador.insert_ticket_cierre( id_log, total, UNIDAD) ticket = controlador.get_ticket_cierre(id_ticket) hora = controlador.get_hora_inicio(UNIDAD) print_status = impresora.check_status() papel_disponible = controlador.get_papel_disponible(UNIDAD) if ((print_status == 1) or (print_status == 2 and papel_disponible >= 2)): print_thread = Thread( target=impresora.imprimir_ticket_cierre, args=(user['nombre'], id_ticket, UNIDAD, hora, bills, total, ticket['barcode'])) print_thread.start() controlador.update_papel_disponible(UNIDAD, 0, 2) elif print_status == 2: mensaje = u"No hay papel" WarningPopup(mensaje).open() else: mensaje = u"Impresora desconectada" WarningPopup(mensaje).open() else: mensaje = u"No hay rergistros para hoy" WarningPopup(mensaje).open() else: msje = u"\rNo puede hacer cierre\r\n sin iniciar antes el sistema." WarningPopup(msje).open()
def validar(self): """Valida las entradas de texto y manda a registrar al usuario si todo esta bien.""" if self.ids.dni.text: if not self.ids.dni.text.isdigit(): mensaje = u"Su DNI solo puede contenter números" self.ids.dni.text = "" self.ids.dni.focus = True WarningPopup(mensaje).open() elif len(self.ids.dni.text) >= 10: mensaje = u"\rSu DNI no puede tener\r\n más de 10 caracteres." self.ids.dni.text = "" self.ids.dni.focus = True WarningPopup(mensaje).open() elif not self.ids.nombre.text: mensaje = u"Su NOMBRE no puede estar vacío" self.ids.nombre.focus = True WarningPopup(mensaje).open() elif len(self.ids.nombre.text) >= 45: msje = u"\rSu NOMBRE no puede tener\r\n más de 45 caracteres." self.ids.nombre.text = "" self.ids.nombre.focus = True WarningPopup(msje).open() elif not self.ids.lu.text: mensaje = u"Su LU no puede estar vacía" self.ids.lu.focus = True WarningPopup(mensaje).open() elif not self.ids.lu.text.isdigit(): mensaje = u"Su LU solo puede contenter números" self.ids.lu.text = "" self.ids.lu.focus = True WarningPopup(mensaje).open() elif len(self.ids.lu.text) >= 8: mensaje = u"\rSu LU no puede tener\r\n más de 8 caracteres." self.ids.lu.text = "" self.ids.lu.focus = True WarningPopup(mensaje).open() elif not self.ids.mail.text: mensaje = u"Su EMAIL no puede estar vacío" self.ids.mail.focus = True WarningPopup(mensaje).open() elif len(self.ids.mail.text) >= 64: msje = u"\rSu EMAIL no puede tener\r\n más de 64 caracteres." self.ids.mail.text = "" self.ids.mail.focus = True WarningPopup(msje).open() elif not mailvalidator(self.ids.mail.text): mensaje = u"\rSu EMAIL está mal formado.\r\n Recuerde que este" mensaje += u" mail se usará\r\n para confirmar su registro." self.ids.mail.text = "" self.ids.mail.focus = True WarningPopup(mensaje).open() elif not self.ids.facultad.text: mensaje = u"Debe especificar una FACULTAD" WarningPopup(mensaje).open() elif not self.ids.provincia.text: mensaje = u"Debe especificar una PROVINCIA" WarningPopup(mensaje).open() else: if utils.internet_on(): chequeo = chequear_alumno( self.ids.lu.text, self.ids.dni.text ) if chequeo == 1: self.registrar_usuario() self.clear() self.manager.current = 'splash' elif chequeo == 2: self.registrar_usuario(0) self.clear() self.manager.current = 'splash' else: mensaje = u"Su DNI o LU es incorrecto" WarningPopup(mensaje).open() else: msje = u"\rInternet no disponible\r\n Intente más tarde." WarningPopup(msje).open() else: mensaje = u"Su DNI no puede estar vacío" self.ids.dni.focus = True WarningPopup(mensaje).open()
def validar(self): """Valida las entradas y chequea en la base de datos por el par dni - password""" if self.ids.dni.text: if not self.ids.dni.text.isdigit(): self.ids.dni.text = "" self.ids.dni.focus = True mensaje = u"Su DNI solo puede contenter números" WarningPopup(mensaje).open() elif len(self.ids.dni.text) >= 10: mensaje = u"\rSu DNI no puede exceder\r\n los 10 caracteres." self.ids.dni.focus = True WarningPopup(mensaje).open() elif not self.ids.passw.text: mensaje = u"Su PASSWORD no puede estar vacío" self.ids.passw.focus = True WarningPopup(mensaje).open() elif len(self.ids.passw.text) >= 64: msje = u"\rSu PASSWORD no puede exceder\r\n los 64 caracteres." self.ids.passw.focus = True WarningPopup(msje).open() else: dni = self.ids.dni.text password = self.ids.passw.text login = self.validar_login(dni, password) if login: if login == 2: self.clear() user_session.init(controlador.get_usuario(dni), time()) user = user_session.get_user() controlador.insert_log(user, 'ingresar', UNIDAD) controlador.update_activo(user, 1) self.manager.current = 'menu' elif login == 1: self.clear() user_session.init(controlador.get_usuario(dni), time()) user = user_session.get_user() controlador.insert_log(user, 'ingresar', UNIDAD) self.manager.add_widget( PasswordScreen('splash', 'splash', 'pass')) self.manager.current = 'pass' elif login == 6: self.clear() user_session.init(controlador.get_usuario(dni), time()) user = user_session.get_user() controlador.insert_log(user, 'ingresar', UNIDAD, 'control') self.manager.current = 'menu_control' elif login == 5: self.clear() msje = u"\rYa has iniciado sesión\r\n en otra maquina." WarningPopup(msje).open() else: self.clear() mensaje = u"\rSu cuenta esta bloqueada.\r\n Dirijase" mensaje += u" a la Administración \r\n del Comedor" mensaje += u" Universitario." WarningPopup(mensaje).open() else: self.ids.passw.text = "" mensaje = u"DNI o PASSWORD incorrecto" WarningPopup(mensaje).open() else: mensaje = u"Su DNI no puede estar vacío" self.ids.dni.focus = True WarningPopup(mensaje).open()