def _create_compra(self, revendedor_cpf, codigo): """Create Compra for test""" compra = Compra() compra.codigo = codigo compra.valor = 1600 compra.data = str_date_to_date('2020-02-10') compra.revendedor_cpf = revendedor_cpf compra.put(self.session)
def update_purchase(self): # Get input from fields using get method id_purchase = self.select_byid.get() condition = self.game_condition.get() price = self.game_price.get() purchase_date = self.purchase_date.get() employee = self.employee_id.get() game_id = self.game_id.get() # Create videogame instance purchase = Compra(id_compra=id_purchase, fecha_compra=purchase_date, estado_compra=condition, precio_compra=price, codigo_videojuego=game_id, codigo_empleado=employee) CompraDao.actualizar(purchase) confirm = messagebox.askyesno( parent=self.root, message='Compra actualizada correctamente, ¿Desea modificar otra?', icon='question', title='Videojuego actualizado') if (confirm == True): self.select_byid.delete(0, END) self.reset_form() else: self.cancel_to_main()
def test_delete(self): """Compra delete""" self._create_compra('456.213.789-88', 'AAA-4444') compras = Compra.get_all(self.session) self.session.commit() self.assertEqual(len(compras), 1) response = self.client().delete('/compra/{compra_codigo}'.format( compra_codigo='AAA-4444')) self.assertEqual(response.status, '204 NO CONTENT') compras = Compra.get_all(self.session) self.session.commit() self.assertEqual(len(compras), 0) response = self.client().delete('/compra/{compra_codigo}'.format( compra_codigo='AAA-0000')) self.assertEqual(response.status, '404 NOT FOUND') self._create_compra('153.509.460-56', 'FBS-1014') response = self.client().delete('/compra/{compra_codigo}'.format( compra_codigo='FBS-1014')) self.assertEqual(response.status, '423 LOCKED')
def add_purchase(self): # Get input fields .get condition = self.game_condition.get() date = self.purchase_date.get() total = self.game_price.get() id_game = self.game_id.get() id_employee = self.employee_id.get() # Create Purchase instance purchase = Compra(fecha_compra=date, estado_compra=condition,precio_compra=total, codigo_videojuego=id_game, codigo_empleado=id_employee) CompraDao.insertar(purchase)
def recuperar(cls, id_compra): with CursorDelPool() as cursor: logger.debug(cursor.mogrify(cls.__SELECT_ONE)) values = (id_compra, ) cursor.execute(cls.__SELECT_ONE, values) registro = cursor.fetchone() compra = Compra(registro[0], registro[1], registro[2], registro[3], registro[4], registro[5]) return compra
def onSave(self): empleado = self.ui.combo_empleado.currentData()[0] if self.unique() == False: QMessageBox.warning(self, 'Atencion', 'Libros repetidos dentro de la misma compra') return compra = Compra(empleado=empleado, fecha=date.today()).save()[0] for index, combo in enumerate(self.combos): LibroCompra(libro=combo.currentData()[0], compra=compra['folio'], cantidadlibros=self.spins[index].value()).save() self.done(0)
def get(self): """Get all Compras""" session = DBSessionManagement().get_db_session() try: compras = [] for compra in Compra.get_all(session): compras.append(compra.to_json()) session.commit() return compras except Exception as error: session.rollback() return str(error), 500
def seleccionar(cls): with CursorDelPool() as cursor: #logger.debug(cursor.mogrify(cls.__SELECT)) logger.debug("Llega aqui") cursor.execute(cls.__SELECT) registros = cursor.fetchall() logger.debug("TAMBIEN AQUI") compras = [] for registro in registros: compra = Compra(registro[0], registro[1], registro[2], registro[3], registro[4], registro[5]) compras.append(compra) return compras
def buscar(cls, id_empleado): with CursorDelPool() as cursor: logger.debug(cursor.mogrify(cls.__SEARCH)) values = (id_empleado, ) cursor.execute(cls.__SEARCH, values) registros = cursor.fetchall() compras = [] for registro in registros: compra = Compra(registro[0], registro[1], registro[2], registro[3], registro[4], registro[5]) compras.append(compra) return compras
def test_post(self): """Create new Compra""" json_body = { "codigo": "FFF-1000", "valor": 1000, "data": '2020-02-20', "revendedor_cpf": "377.432.218-40" } response = self.client().post('/compras', json=json_body) self.assertEqual(response.status, '204 NO CONTENT') compras = Compra.get_all(self.session) self.assertGreater(len(compras), 0) self.assertEqual(compras[0].codigo, 'FFF-1000') self.session.commit()
def delete(self, compra_codigo): """Delete Compra""" session = DBSessionManagement().get_db_session() try: compra = Compra.get_by_codigo(session, compra_codigo) if not compra: session.rollback() return 'Compra not found', 404 if compra.status != 'Em validação': session.rollback() return 'Compra locked to update', 423 compra.delete(session) return '', 204 except Exception as error: session.rollback() return str(error), 500
def post(self): """Create a new Compra""" session = DBSessionManagement().get_db_session() try: params = request.get_json() required_params = ['codigo', 'valor', 'data', 'revendedor_cpf'] if not post_params_is_valid(params, required_params): return 'Bad request', 400 compra = Compra() compra.codigo = params['codigo'] compra.valor = params['valor'] compra.data = str_date_to_date(params['data']).date() compra.revendedor_cpf = params['revendedor_cpf'] compra.put(session) return '', 204 except Exception as error: session.rollback() return str(error), 500
def put(self, compra_codigo): """Update Compra""" session = DBSessionManagement().get_db_session() try: params = request.get_json() compra = Compra.get_by_codigo(session, compra_codigo) if not compra: session.rollback() return 'Compra not found', 404 if compra.status != 'Em validação': session.rollback() return 'Compra locked to update', 423 set_value_if_exist(params, 'codigo', compra) set_value_if_exist(params, 'valor', compra) set_value_if_exist(params, 'revendedor_cpf', compra) if 'data' in params: compra.data = str_date_to_date(params['data']) compra.put(session) return '', 204 except Exception as error: session.rollback() return str(error), 500
def onVentaEliminar(self): for item in self.ui.table_venta.selectedIndexes(): compra = Compra() compra.folio = self.ventas[item.row()]['folio'] compra.delete() self.onVentaMostrar()
def test_create(self): """Compra creation""" compra = Compra() compra.codigo = 'AAA-1000' compra.valor = 2000.00 compra.data = date(2020, 2, 11) compra.revendedor_cpf = '377.432.218-40' compra.put(self.session) self.assertEqual(compra.cashback_percentual, float(20)) self.assertEqual(compra.cashback_valor, 400) self.assertEqual(compra.status, 'Em validação') compra = Compra() compra.codigo = 'AAA-1001' compra.valor = float_to_decimal(1340.50) compra.data = date(2020, 2, 11) compra.revendedor_cpf = '153.509.460-56' compra.put(self.session) self.assertEqual(compra.cashback_percentual, float(15)) self.assertEqual(compra.cashback_valor, float_to_decimal(201.07)) self.assertEqual(compra.status, 'Aprovado')
def __init__(self): super(MainWindow, self).__init__() # modelos self.editorial = Editorial() self.genero = Genero() self.autor = Autor() self.libro = Libro() self.sucursal = Sucursal() self.supervisor = Supervisor() self.empleado = Empleado() self.venta = Compra() self.existencia = LibroSucursal() self.ui = Ui_MainWindow() self.ui.setupUi(self) self.exit = False self.showMessageBox.connect(self.onNotify) self.exitThread.connect(self.customExit) self.canExit = False self.worker = Worker(self, 'existencias') self.thread = QThread() self.worker.moveToThread(self.thread) self.thread.started.connect(self.worker._listener) self.thread.start() # connections self.ui.push_editorial_nuevo.clicked.connect(self.onEditorialNuevo) self.ui.push_editorial_mostrar.clicked.connect(self.onEditorialMostrar) self.ui.push_editorial_eliminar.clicked.connect( self.onEditorialEliminar) self.ui.push_editorial_buscar.clicked.connect(self.onEditorialBuscar) self.ui.push_genero_mostrar.clicked.connect(self.onGeneroMostrar) self.ui.push_genero_guardar.clicked.connect(self.onGeneroGuardar) self.ui.push_genero_eliminar.clicked.connect(self.onGeneroEliminar) self.ui.push_genero_buscar.clicked.connect(self.onGeneroBuscar) self.ui.push_autor_mostrar.clicked.connect(self.onAutorMostrar) self.ui.push_autor_guardar.clicked.connect(self.onAutorGuardar) self.ui.push_autor_eliminar.clicked.connect(self.onAutorEliminar) self.ui.push_autor_buscar.clicked.connect(self.onAutorBuscar) self.ui.push_libro_nuevo.clicked.connect(self.onLibroNuevo) self.ui.push_libro_mostrar.clicked.connect(self.onLibroMostrar) self.ui.push_libro_eliminar.clicked.connect(self.onLibroEliminar) self.ui.push_libro_buscar.clicked.connect(self.onLibroBuscar) self.ui.push_sucursal_nuevo.clicked.connect(self.onSucursalNuevo) self.ui.push_sucursal_mostrar.clicked.connect(self.onSucursalMostrar) self.ui.push_sucursal_eliminar.clicked.connect(self.onSucursalEliminar) self.ui.push_sucursal_buscar.clicked.connect(self.onSucursalBuscar) self.ui.push_sucursal_inactiva.clicked.connect(self.onSucursalInactiva) self.ui.push_empleado_nuevo.clicked.connect(self.onEmpleadoNuevo) self.ui.push_empleado_mostrar.clicked.connect(self.onEmpleadoMostrar) self.ui.push_empleado_eliminar.clicked.connect(self.onEmpleadoEliminar) self.ui.push_empleado_buscar.clicked.connect(self.onEmpleadoBuscar) self.ui.push_supervisor_mostrar.clicked.connect( self.onSupervisorMostrar) self.ui.push_empleado_inactivos.clicked.connect( self.onEmpleadoInactivo) self.ui.push_venta_nuevo.clicked.connect(self.onVentaNuevo) self.ui.push_venta_mostrar.clicked.connect(self.onVentaMostrar) self.ui.push_venta_eliminar.clicked.connect(self.onVentaEliminar) self.ui.push_venta_buscar.clicked.connect(self.onVentaBuscar) self.ui.push_existencia_nuevo.clicked.connect(self.onExistenciaNuevo) self.ui.push_existencia_mostrar.clicked.connect( self.onExistenciaMostrar) self.ui.push_existencia_buscar.clicked.connect(self.onExistenciaBuscar) # double clicks self.ui.table_libro.doubleClicked.connect(self.onLibroEdit) self.ui.table_editorial.doubleClicked.connect(self.onEditorialEdit) self.ui.table_existencia.doubleClicked.connect(self.onExistenciaEdit) self.ui.table_empleado.doubleClicked.connect(self.onEmpleadoEdit) self.ui.table_sucursal.doubleClicked.connect(self.onSucursalEdit) self.ui.table_venta.doubleClicked.connect(self.onVentaEdit) # no edit self.ui.table_editorial.setEditTriggers( QAbstractItemView.NoEditTriggers) self.ui.table_libro.setEditTriggers(QAbstractItemView.NoEditTriggers) self.ui.table_existencia.setEditTriggers( QAbstractItemView.NoEditTriggers) self.ui.table_empleado.setEditTriggers( QAbstractItemView.NoEditTriggers) self.ui.table_venta.setEditTriggers(QAbstractItemView.NoEditTriggers) self.ui.table_sucursal.setEditTriggers( QAbstractItemView.NoEditTriggers) # edit self.ui.table_autor.itemChanged.connect(self.onAutorChange) self.ui.table_genero.itemChanged.connect(self.onGeneroChange) self.onEditorialMostrar() self.onLibroMostrar() self.onExistenciaMostrar() self.onAutorMostrar() self.onEmpleadoMostrar() self.onGeneroMostrar() self.onVentaMostrar() self.onSucursalMostrar()
def test_get_by_codigo(self): """Compra by codigo""" compra1 = Compra() compra1.codigo = 'AAA-1000' compra1.valor = 2000.00 compra1.data = date(2020, 2, 11) compra1.revendedor_cpf = '377.432.218-40' compra1.put(self.session) compra2 = Compra() compra2.codigo = 'AAA-1001' compra2.valor = 2055.13 compra2.data = date(2020, 3, 11) compra2.revendedor_cpf = '377.432.218-40' compra2.put(self.session) compra = Compra.get_by_codigo(self.session, 'AAA-1001') self.assertEqual(float(compra.valor), 2055.13)
def test_delete(self): """Delete Compra""" compra = Compra() compra.codigo = 'AAA-1000' compra.valor = 2000.00 compra.data = date(2020, 2, 11) compra.revendedor_cpf = '377.432.218-40' compra.put(self.session) self.assertEqual(len(Compra.get_all(self.session)), 1) compra.delete(self.session) self.assertEqual(len(Compra.get_all(self.session)), 0)
def del_purchase_by_id(self, id_purchase): purchase = Compra(id_compra=id_purchase) CompraDao.eliminar(purchase)
class MainWindow(QMainWindow): showMessageBox = Signal(str) exitThread = Signal() def __init__(self): super(MainWindow, self).__init__() # modelos self.editorial = Editorial() self.genero = Genero() self.autor = Autor() self.libro = Libro() self.sucursal = Sucursal() self.supervisor = Supervisor() self.empleado = Empleado() self.venta = Compra() self.existencia = LibroSucursal() self.ui = Ui_MainWindow() self.ui.setupUi(self) self.exit = False self.showMessageBox.connect(self.onNotify) self.exitThread.connect(self.customExit) self.canExit = False self.worker = Worker(self, 'existencias') self.thread = QThread() self.worker.moveToThread(self.thread) self.thread.started.connect(self.worker._listener) self.thread.start() # connections self.ui.push_editorial_nuevo.clicked.connect(self.onEditorialNuevo) self.ui.push_editorial_mostrar.clicked.connect(self.onEditorialMostrar) self.ui.push_editorial_eliminar.clicked.connect( self.onEditorialEliminar) self.ui.push_editorial_buscar.clicked.connect(self.onEditorialBuscar) self.ui.push_genero_mostrar.clicked.connect(self.onGeneroMostrar) self.ui.push_genero_guardar.clicked.connect(self.onGeneroGuardar) self.ui.push_genero_eliminar.clicked.connect(self.onGeneroEliminar) self.ui.push_genero_buscar.clicked.connect(self.onGeneroBuscar) self.ui.push_autor_mostrar.clicked.connect(self.onAutorMostrar) self.ui.push_autor_guardar.clicked.connect(self.onAutorGuardar) self.ui.push_autor_eliminar.clicked.connect(self.onAutorEliminar) self.ui.push_autor_buscar.clicked.connect(self.onAutorBuscar) self.ui.push_libro_nuevo.clicked.connect(self.onLibroNuevo) self.ui.push_libro_mostrar.clicked.connect(self.onLibroMostrar) self.ui.push_libro_eliminar.clicked.connect(self.onLibroEliminar) self.ui.push_libro_buscar.clicked.connect(self.onLibroBuscar) self.ui.push_sucursal_nuevo.clicked.connect(self.onSucursalNuevo) self.ui.push_sucursal_mostrar.clicked.connect(self.onSucursalMostrar) self.ui.push_sucursal_eliminar.clicked.connect(self.onSucursalEliminar) self.ui.push_sucursal_buscar.clicked.connect(self.onSucursalBuscar) self.ui.push_sucursal_inactiva.clicked.connect(self.onSucursalInactiva) self.ui.push_empleado_nuevo.clicked.connect(self.onEmpleadoNuevo) self.ui.push_empleado_mostrar.clicked.connect(self.onEmpleadoMostrar) self.ui.push_empleado_eliminar.clicked.connect(self.onEmpleadoEliminar) self.ui.push_empleado_buscar.clicked.connect(self.onEmpleadoBuscar) self.ui.push_supervisor_mostrar.clicked.connect( self.onSupervisorMostrar) self.ui.push_empleado_inactivos.clicked.connect( self.onEmpleadoInactivo) self.ui.push_venta_nuevo.clicked.connect(self.onVentaNuevo) self.ui.push_venta_mostrar.clicked.connect(self.onVentaMostrar) self.ui.push_venta_eliminar.clicked.connect(self.onVentaEliminar) self.ui.push_venta_buscar.clicked.connect(self.onVentaBuscar) self.ui.push_existencia_nuevo.clicked.connect(self.onExistenciaNuevo) self.ui.push_existencia_mostrar.clicked.connect( self.onExistenciaMostrar) self.ui.push_existencia_buscar.clicked.connect(self.onExistenciaBuscar) # double clicks self.ui.table_libro.doubleClicked.connect(self.onLibroEdit) self.ui.table_editorial.doubleClicked.connect(self.onEditorialEdit) self.ui.table_existencia.doubleClicked.connect(self.onExistenciaEdit) self.ui.table_empleado.doubleClicked.connect(self.onEmpleadoEdit) self.ui.table_sucursal.doubleClicked.connect(self.onSucursalEdit) self.ui.table_venta.doubleClicked.connect(self.onVentaEdit) # no edit self.ui.table_editorial.setEditTriggers( QAbstractItemView.NoEditTriggers) self.ui.table_libro.setEditTriggers(QAbstractItemView.NoEditTriggers) self.ui.table_existencia.setEditTriggers( QAbstractItemView.NoEditTriggers) self.ui.table_empleado.setEditTriggers( QAbstractItemView.NoEditTriggers) self.ui.table_venta.setEditTriggers(QAbstractItemView.NoEditTriggers) self.ui.table_sucursal.setEditTriggers( QAbstractItemView.NoEditTriggers) # edit self.ui.table_autor.itemChanged.connect(self.onAutorChange) self.ui.table_genero.itemChanged.connect(self.onGeneroChange) self.onEditorialMostrar() self.onLibroMostrar() self.onExistenciaMostrar() self.onAutorMostrar() self.onEmpleadoMostrar() self.onGeneroMostrar() self.onVentaMostrar() self.onSucursalMostrar() # Nuevo @Slot() def onEditorialNuevo(self): editorial = EditorialWindow() editorial.exec_() self.onEditorialMostrar() @Slot() def onLibroNuevo(self): libro = LibroWindow() libro.exec_() self.onLibroMostrar() @Slot() def onSucursalNuevo(self): sucursal = SucursalWindow() sucursal.exec_() self.onSucursalMostrar() @Slot() def onSupervisorNuevo(self): supervisor = SupervisorWindow() supervisor.exec_() self.onSupervisorMostrar() @Slot() def onEmpleadoNuevo(self): empleado = EmpleadoWindow() empleado.exec_() self.onEmpleadoMostrar() @Slot() def onVentaNuevo(self): venta = VentaWindow() venta.exec_() self.onVentaMostrar() @Slot() def onExistenciaNuevo(self): venta = ExistenciaWindow() venta.exec_() self.onExistenciaMostrar() @Slot() def onGeneroGuardar(self): tipo = self.ui.edit_genero_nuevo.text() cat = Genero(tipo) cat.save() self.ui.edit_genero_nuevo.clear() self.onGeneroMostrar() @Slot() def onAutorGuardar(self): nombre = self.ui.edit_autor_guardar.text() autor = Autor(nombre) autor.save() self.ui.edit_autor_guardar.clear() self.onAutorMostrar() # mostrar @Slot() def onEditorialMostrar(self): self.editoriales = self.editorial.getAll() self.setEditoriales() def setEditoriales(self): headers = ['Nombre', 'Pais'] self.ui.table_editorial.setRowCount(len(self.editoriales)) self.ui.table_editorial.setColumnCount(len(headers)) self.ui.table_editorial.setHorizontalHeaderLabels(headers) for row, editorial in enumerate(self.editoriales): self.ui.table_editorial.setItem( row, 0, QTableWidgetItem(editorial['nombre'])) self.ui.table_editorial.setItem( row, 1, QTableWidgetItem(editorial['paisorigen'])) @Slot() def onGeneroMostrar(self): allGenero = self.genero.getAll() self.generos = allGenero self.setGeneros() def setGeneros(self): headers = ['Tipo'] self.ui.table_genero.setRowCount(len(self.generos)) self.ui.table_genero.setColumnCount(len(headers)) self.ui.table_genero.setHorizontalHeaderLabels(headers) for row, categoria in enumerate(self.generos): self.ui.table_genero.setItem(row, 0, QTableWidgetItem(categoria['tipo'])) @Slot() def onAutorMostrar(self): all = self.autor.getAll() self.autores = all self.setAutores() def setAutores(self): headers = ['Nombre'] self.ui.table_autor.setRowCount(len(self.autores)) self.ui.table_autor.setColumnCount(len(headers)) self.ui.table_autor.setHorizontalHeaderLabels(headers) for row, categoria in enumerate(self.autores): self.ui.table_autor.setItem(row, 0, QTableWidgetItem(categoria['nombre'])) @Slot() def onLibroMostrar(self): self.libros = self.libro.getAll() self.setLibros() def setLibros(self): headers = [ 'Codigo', 'Titulo', 'Precio', 'ISBN', 'Idioma', 'Encuadernacion', 'Publicación', 'Editorial', 'Autor', 'Genero' ] self.ui.table_libro.setRowCount(len(self.libros)) self.ui.table_libro.setColumnCount(len(headers)) self.ui.table_libro.setHorizontalHeaderLabels(headers) for row, libro in enumerate(self.libros): self.ui.table_libro.setItem(row, 0, QTableWidgetItem(str(libro['codigo']))) self.ui.table_libro.setItem(row, 1, QTableWidgetItem(libro['titulo'])) self.ui.table_libro.setItem(row, 2, QTableWidgetItem(str(libro['precio']))) self.ui.table_libro.setItem(row, 3, QTableWidgetItem(libro['isbn'])) self.ui.table_libro.setItem(row, 4, QTableWidgetItem(libro['idioma'])) self.ui.table_libro.setItem( row, 5, QTableWidgetItem(libro['encuadernacion'])) self.ui.table_libro.setItem( row, 6, QTableWidgetItem(str(libro['publicacion']))) self.ui.table_libro.setItem(row, 7, QTableWidgetItem(libro['editorial'])) self.ui.table_libro.setItem(row, 8, QTableWidgetItem(libro['autor'])) self.ui.table_libro.setItem(row, 9, QTableWidgetItem(libro['genero'])) @Slot() def onSucursalMostrar(self): all = self.sucursal.getAll() self.sucursales = all self.setSucursales() @Slot() def onSucursalInactiva(self): all = self.sucursal.getInactivos() self.sucursales = all self.setSucursales() def setSucursales(self): headers = ['Nombre', 'Direccion', 'Telefono'] self.ui.table_sucursal.setRowCount(len(self.sucursales)) self.ui.table_sucursal.setColumnCount(len(headers)) self.ui.table_sucursal.setHorizontalHeaderLabels(headers) for row, sucursal in enumerate(self.sucursales): self.ui.table_sucursal.setItem( row, 0, QTableWidgetItem(sucursal['nombre'])) self.ui.table_sucursal.setItem( row, 1, QTableWidgetItem(sucursal['direccion'])) self.ui.table_sucursal.setItem( row, 2, QTableWidgetItem(str(sucursal['telefono']))) @Slot() def onSupervisorMostrar(self): all = self.supervisor.getAll() self.empleados = all self.setEmpleados() @Slot() def onEmpleadoMostrar(self): all = self.empleado.getAll() self.empleados = all self.setEmpleados() @Slot() def onEmpleadoInactivo(self): all = self.empleado.getInactivos() self.empleados = all self.setEmpleados() def setEmpleados(self): headers = [ 'Código', 'Nombre', 'Telefono', 'Tipo', 'Supervisor', 'Direccion', 'Sucursal', 'Activo' ] self.ui.table_empleado.setRowCount(len(self.empleados)) self.ui.table_empleado.setColumnCount(len(headers)) self.ui.table_empleado.setHorizontalHeaderLabels(headers) for row, empleado in enumerate(self.empleados): self.ui.table_empleado.setItem( row, 0, QTableWidgetItem(str(empleado['codigo']))) self.ui.table_empleado.setItem( row, 1, QTableWidgetItem(empleado['nombre'])) self.ui.table_empleado.setItem( row, 2, QTableWidgetItem(empleado['telefono'])) self.ui.table_empleado.setItem(row, 3, QTableWidgetItem(empleado['tipo'])) self.ui.table_empleado.setItem( row, 4, QTableWidgetItem(empleado['supervisor'])) self.ui.table_empleado.setItem( row, 5, QTableWidgetItem(empleado['direccion'])) self.ui.table_empleado.setItem( row, 6, QTableWidgetItem(empleado['sucursal'])) self.ui.table_empleado.setItem( row, 7, QTableWidgetItem(str(empleado['activo']))) @Slot() def onVentaMostrar(self): all = self.venta.getAll() self.ventas = all self.setVentas() def setVentas(self): headers = ['Folio', 'Empleado', 'Fecha', 'Total'] self.ui.table_venta.setRowCount(len(self.ventas)) self.ui.table_venta.setColumnCount(len(headers)) self.ui.table_venta.setHorizontalHeaderLabels(headers) for row, venta in enumerate(self.ventas): self.ui.table_venta.setItem(row, 0, QTableWidgetItem(str(venta['folio']))) self.ui.table_venta.setItem(row, 1, QTableWidgetItem(venta['empleado'])) self.ui.table_venta.setItem( row, 2, QTableWidgetItem(venta['fecha'].strftime('%d/%m/%Y'))) self.ui.table_venta.setItem(row, 3, QTableWidgetItem(str(venta['total']))) @Slot() def onExistenciaMostrar(self): all = self.existencia.getAll() self.existencias = all self.setExistencias() def setExistencias(self): headers = ['Libro', 'Sucursal', 'Existencia'] self.ui.table_existencia.setRowCount(len(self.existencias)) self.ui.table_existencia.setColumnCount(len(headers)) self.ui.table_existencia.setHorizontalHeaderLabels(headers) for row, existencia in enumerate(self.existencias): self.ui.table_existencia.setItem( row, 0, QTableWidgetItem(existencia['libro'])) self.ui.table_existencia.setItem( row, 1, QTableWidgetItem(existencia['sucursal'])) self.ui.table_existencia.setItem( row, 2, QTableWidgetItem(str(existencia['existencia']))) # Edit functions @Slot() def onLibroEdit(self, item): window = LibroWindow(self.libros[item.row()]) window.exec_() self.onLibroMostrar() @Slot() def onVentaEdit(self, item): window = VentaDetallesWindow(self.ventas[item.row()]) window.exec_() @Slot() def onEditorialEdit(self, item): window = EditorialWindow(self.editoriales[item.row()]) window.exec_() self.onEditorialMostrar() @Slot() def onExistenciaEdit(self, item): window = ExistenciaWindow(self.existencias[item.row()]) window.exec_() self.onExistenciaMostrar() @Slot() def onAutorChange(self, item): autor = Autor(nombre=self.autores[item.row()]['nombre'], codigo=self.autores[item.row()]['codigo']) if autor.nombre != item.text(): autor.nombre = item.text() autor.update() self.onAutorMostrar() @Slot() def onEmpleadoEdit(self, item): window = EmpleadoWindow(self.empleados[item.row()]) window.exec_() self.onEmpleadoMostrar() @Slot() def onSucursalEdit(self, item): window = SucursalWindow(self.sucursales[item.row()]) window.exec_() self.onSucursalMostrar() @Slot() def onGeneroChange(self, item): genero = Genero(self.generos[item.row()]['tipo']) if genero.tipo != item.text(): genero.tipo = item.text() genero.update() self.onGeneroMostrar() # eliminar @Slot() def onSucursalEliminar(self): for item in self.ui.table_sucursal.selectedIndexes(): nombre = self.sucursales[item.row()]['nombre'] Sucursal(nombre=nombre).delete() self.onSucursalMostrar() @Slot() def onLibroEliminar(self): for item in self.ui.table_libro.selectedIndexes(): try: codigo = self.libros[item.row()]['codigo'] Libro(codigo=codigo).delete() except ForeignKeyViolation: QMessageBox.warning( self, "Atención", f'El libro con codigo "{codigo}" no puede eliminarse') self.onAutorMostrar() @Slot() def onAutorEliminar(self): for item in self.ui.table_autor.selectedIndexes(): try: nombre = self.autores[item.row()]['nombre'] Autor(codigo=self.autores[item.row()]['codigo']).delete() except ForeignKeyViolation: QMessageBox.warning( self, "Atención", f'El autor "{nombre}" no puede eliminarse') self.onAutorMostrar() @Slot() def onGeneroEliminar(self): for item in self.ui.table_genero.selectedIndexes(): try: tipo = self.generos[item.row()]['tipo'] Genero(tipo=tipo).delete() except ForeignKeyViolation: QMessageBox.warning(self, "Atención", f'El genero "{tipo}" no puede eliminarse') self.onGeneroMostrar() @Slot() def onEditorialEliminar(self): for item in self.ui.table_editorial.selectedIndexes(): try: nombre = self.editoriales[item.row()]['nombre'] Editorial(nombre=nombre).delete() except ForeignKeyViolation: QMessageBox.warning( self, "Atención", f'La editorial "{nombre}" no puede eliminarse') self.onEditorialMostrar() @Slot() def onVentaEliminar(self): for item in self.ui.table_venta.selectedIndexes(): compra = Compra() compra.folio = self.ventas[item.row()]['folio'] compra.delete() self.onVentaMostrar() @Slot() def onEmpleadoEliminar(self): for item in self.ui.table_empleado.selectedIndexes(): empleado = Empleado() empleado._key = self.empleados[item.row()]['codigo'] try: empleado.delete() self.onEmpleadoMostrar() except ForeignKeyViolation: QMessageBox.warning( self, "Atención", f'El empleado "{empleado._key}" no puede eliminarse') self.onEmpleadoMostrar() # Buscar @Slot() def onVentaBuscar(self): self.ventas = self.venta.search( self.ui.date_venta_buscar.date().toPython()) self.setVentas() @Slot() def onExistenciaBuscar(self): self.existencias = self.existencia.search( self.ui.edit_existencia_buscar.text()) self.setExistencias() @Slot() def onGeneroBuscar(self): self.generos = self.genero.search(self.ui.edit_genero_buscar.text()) self.setGeneros() @Slot() def onAutorBuscar(self): self.autores = self.autor.search(self.ui.edit_autor_buscar.text()) self.setAutores() @Slot() def onEditorialBuscar(self): self.editoriales = self.editorial.search( self.ui.edit_editorial_buscar.text()) self.setEditoriales() @Slot() def onLibroBuscar(self): self.libros = self.libro.search(self.ui.edit_libro_buscar.text()) self.setLibros() @Slot() def onSucursalBuscar(self): self.sucursales = self.sucursal.search( self.ui.edit_sucursal_buscar.text()) self.setSucursales() @Slot() def onEmpleadoBuscar(self): self.empleados = self.empleado.search( self.ui.edit_empleado_buscar.text()) self.setEmpleados() #notify @Slot(str) def onNotify(self, data): QMessageBox.warning(self, "Atención", data) @Slot() def customExit(self): self.canExit = True self.close() def closeEvent(self, event): self.exit = True if self.canExit == True: self.thread.terminate() event.accept() else: event.ignore()