def __init__(self, winPrincipal): self.conexionTransacciones = ConexionTransacciones() self.winPrincipal = winPrincipal self.cliente = Cliente() self.proveedor = Proveedor() self.producto = Producto() self.tipoTransaccion = "VENTA" self.configInit()
def __init__(self, winPrincipal): self.winPrincipal = winPrincipal self.producto = Producto() self.proveedor = Proveedor() self.marca = Marca() self.rubro = Rubro() self.estado = "" self.conexionProducto = conexionProducto() self.configInit()
def changeSelectedTable(self, selected, deselected): listProductos = selected.model().mylist productoSelected = () productoSelected = tuple(listProductos[selected.row()]) self.productoSelected = selected.row() self.producto = Producto() self.producto.setIdProducto(int(productoSelected[0])) self.producto.setNombre(str(productoSelected[1])) self.producto.setCantidad(int(productoSelected[2])) self.producto.setCantidadMinima(int(productoSelected[3])) self.winNot.btnDesactivar.setEnabled(True)
def changeSelectedTableProducto(self, selected, deselected): listProductos = selected.model().mylist productoSelected = () productoSelected = tuple(listProductos[selected.row()]) self.productoSelected = selected.row() self.producto = Producto() self.producto.setIdProducto(int(productoSelected[0])) self.producto.setNombre(str(productoSelected[1])) self.producto.setDescripcion(str(productoSelected[2])) self.producto.setCantidad(int(productoSelected[3])) self.producto.setPrecioCompra(float(productoSelected[4])) self.producto.setPrecioVenta(float(productoSelected[5])) self.winPrincipal.btnSumarProducto_t.setEnabled(True)
def __init__(self): self.winNot = uic.loadUi('../Vista/windowListNotify.ui') self.producto = Producto() self.conexionGeneral = ConexionGenerales() self.cargarTabla() self.winNot.btnSalir.clicked.connect(self.close) self.winNot.btnDesactivar.clicked.connect(self.desactivarProducto) self.winNot.tvDetalle.setSortingEnabled(True) self.winNot.tvDetalle.setMouseTracking(True) self.winNot.tvDetalle.setSelectionBehavior( QAbstractItemView.SelectRows) self.winNot.btnDesactivar.setEnabled(False) self.winNot.btnGenerarPdf.clicked.connect(self.generateList) self.winNot.exec()
def changeSelectedTable(self, selected, deselected): productoList = selected.model().mylist productoSelected = productoList[selected.row()] self.producto = Producto() self.rubro = Rubro() self.proveedor = Proveedor() self.marca = Marca() self.producto.setIdProducto(productoSelected[0]) self.producto.setNombre(productoSelected[1]) self.producto.setDescripcion(productoSelected[2]) self.producto.setPrecioCompra(productoSelected[3]) self.producto.setPrecioVenta(productoSelected[4]) self.producto.setGenero(productoSelected[5]) self.producto.setEstado(productoSelected[6]) self.producto.setCantidad(productoSelected[7]) self.producto.setCantidadMinima(productoSelected[8]) self.marca.setIdMarca(productoSelected[9]) self.marca.setMarca(productoSelected[10]) self.producto.setMarca(self.marca) self.rubro.setIdRubro(productoSelected[11]) self.rubro.setRubro(productoSelected[12]) self.producto.setRubro(self.rubro) self.proveedor.setIdProveedor(productoSelected[13]) self.proveedor.setDescripcion(productoSelected[14]) self.producto.setProveedor(self.proveedor) self.winPrincipal.tvProductos_p.setRowHeight(deselected.row(),33) self.winPrincipal.tvProductos_p.setRowHeight(selected.row(),45) self.setCampos() self.winPrincipal.btnModificar_p.setEnabled(True) self.winPrincipal.btnBorrar_p.setEnabled(True)
def changeSelectedTableProducto(self, selected, deselected): listProductos = selected.model().mylist productoSelected = () productoSelected = tuple(listProductos[selected.row()]) self.productoSelected = selected.row() self.producto = Producto() self.producto.setIdProducto(int(productoSelected[0])) self.producto.setNombre(str(productoSelected[1])) self.producto.setDescripcion(str(productoSelected[2])) self.producto.setCantidad(int(productoSelected[3])) self.producto.setPrecioCompra(float(productoSelected[4])) self.producto.setPrecioVenta(float(productoSelected[5]))
def __init__(self, type): self.winList = uic.loadUi('Vista/windowList.ui') self.producto = Producto() self.conexionList = ConexionList() self.winList.btnSalir.clicked.connect(self.close) self.type = type if self.type == 'PROV': self.cargarTablaProveedores() else: self.cargarTablaClientes() self.winList.btnGenerarPdf.clicked.connect(self.createList) self.winList.exec()
def cargarTransaccionVenta(self: object, listMovimiento, cliente, estado): hoy = datetime.datetime.now().date() self.conexion.abrirConexion() queryTipoMovimiento = """ INSERT INTO tipo_movimiento (tipo_movimiento, clientes_idClientes) VALUES ('venta', %s) """ valuesTipoMovimiento = cliente.getIdCliente() self.conexion.cursor.execute(queryTipoMovimiento, valuesTipoMovimiento) self.conexion.db.commit() idTipoMovimiento = self.conexion.cursor.lastrowid cantRowAffect = self.conexion.cursor.rowcount queryMovimiento = """ INSERT INTO movimiento (fecha, tipo_movimiento_idtipo_movimiento, estado) VALUES ( %s , %s, %s); """ valuesMovimiento = (hoy, idTipoMovimiento, estado) self.conexion.cursor.execute(queryMovimiento, valuesMovimiento) self.conexion.db.commit() idMovimiento = self.conexion.cursor.lastrowid cantRowAffect = self.conexion.cursor.rowcount queryDetalleMovimiento = """ INSERT INTO detalle_movimiento (cantidad, precio_unitario, productos_idproductos, movimiento_idMovimiento) VALUES (%s, %s , %s, %s) """ for detalleMovimiento in listMovimiento: valuesDetalleMovimiento = (detalleMovimiento[1], detalleMovimiento[5], detalleMovimiento[2], idMovimiento) self.conexion.cursor.execute(queryDetalleMovimiento, valuesDetalleMovimiento) self.conexion.db.commit() lastId = self.conexion.cursor.lastrowid cantRowAffect = self.conexion.cursor.rowcount producto = Producto() producto.setIdProducto(int(detalleMovimiento[2])) producto.setCantidad(int(detalleMovimiento[1])) self.modificarStock(tipoT='VNT', producto=producto) self.conexion.cerrarConexion() return idMovimiento
def __init__(self): self.winNot = uic.loadUi('../Vista/windowListNotify.ui') self.producto = Producto() self.conexionGeneral = ConexionGenerales() self.cargarTabla() self.winNot.btnSalir.clicked.connect(self.close) self.winNot.btnDesactivar.clicked.connect(self.desactivarProducto) self.winNot.tvDetalle.setSortingEnabled(True) self.winNot.tvDetalle.setMouseTracking(True) self.winNot.tvDetalle.setSelectionBehavior(QAbstractItemView.SelectRows) self.winNot.btnDesactivar.setEnabled(False) self.winNot.btnGenerarPdf.clicked.connect(self.generateList) self.winNot.exec()
class PestaniaTransacciones(): def __init__(self, winPrincipal): self.conexionTransacciones = ConexionTransacciones() self.winPrincipal = winPrincipal self.cliente = Cliente() self.proveedor = Proveedor() self.producto = Producto() self.tipoTransaccion = "VENTA" self.configInit() def configInit(self): self.winPrincipal.rbVenta_t.clicked.connect(self.onClickVenta) self.winPrincipal.rbCompra_t.clicked.connect(self.onClickCompra) self.winPrincipal.btnSumarProducto_t.clicked.connect( self.agregarTransaccion) self.winPrincipal.btnRestarProducto_t.clicked.connect( self.restarTransaccion) self.winPrincipal.btnAceptar_t.clicked.connect(self.onClickAceptar) self.winPrincipal.btnCancelar_t.clicked.connect(self.onClickCancelar) self.winPrincipal.tvClientes_t.setSortingEnabled(True) self.winPrincipal.tvClientes_t.setMouseTracking(True) self.winPrincipal.tvClientes_t.setSelectionBehavior( QAbstractItemView.SelectRows) self.winPrincipal.tvProductos_t.setSortingEnabled(True) self.winPrincipal.tvProductos_t.setMouseTracking(True) self.winPrincipal.tvProductos_t.setSelectionBehavior( QAbstractItemView.SelectRows) self.winPrincipal.tvDetalleTransaccion_t.setSortingEnabled(True) self.winPrincipal.tvDetalleTransaccion_t.setMouseTracking(True) self.winPrincipal.tvDetalleTransaccion_t.setSelectionBehavior( QAbstractItemView.SelectRows) self.winPrincipal.btnSumarProducto_t.setEnabled(False) self.winPrincipal.btnRestarProducto_t.setEnabled(False) self.winPrincipal.btnCancelar_t.setEnabled(False) self.winPrincipal.btnAceptar_t.setEnabled(False) self.winPrincipal.txtFilterCliente_t.setFocus(True) self.winPrincipal.txtFilterCliente_t.returnPressed.connect( self.searchPeople) self.winPrincipal.txtFilterProducto_t.returnPressed.connect( self.searchProduct) def finish(self): self.winPrincipal.btnAceptar_t.disconnect() self.winPrincipal.btnCancelar_t.disconnect() self.winPrincipal.btnRestarProducto_t.disconnect() self.winPrincipal.btnSumarProducto_t.disconnect() self.winPrincipal.rbVenta_t.disconnect() self.winPrincipal.rbCompra_t.disconnect() def searchProduct(self): if self.winPrincipal.txtFilterProducto_t.hasFocus() is True: self.cargarTablaProductos() def searchPeople(self): if self.winPrincipal.txtFilterCliente_t.hasFocus() is True: if self.winPrincipal.rbCompra_t.isChecked() is True: self.cargarTablaProveedores() else: self.cargarTablaClientes() def onClickAceptar(self): listTransaccion = list( self.winPrincipal.tvDetalleTransaccion_t.model().mylist).copy() subNom = "" estado = 0 if self.winPrincipal.cbEstado_t.isChecked() is True: estado = 1 numRecibo = 0 if self.tipoTransaccion == "VENTA": numRecibo = self.conexionTransacciones.cargarTransaccionVenta( listTransaccion, self.cliente, estado) subNom = 'VNT' elif self.tipoTransaccion == "COMPRA": numRecibo = self.conexionTransacciones.cargarTransaccionCompra( listTransaccion, self.proveedor, estado) subNom = 'CMP' alert = QDialog() confirm = QMessageBox.question(alert, "Mensaje", "¿ Desea generar Recibo ?", QMessageBox.Yes, QMessageBox.No) if confirm == QMessageBox.Yes: self.createFactura(listTransaccion, subNom, numRecibo) self.limpiarCampos() def createFactura(self, listTransaccion, subNom, idRecibo): hoy = str(datetime.datetime.now().year) + str( datetime.datetime.now().month) + str( datetime.datetime.now().day) + str( datetime.datetime.now().hour) + str( datetime.datetime.now().minute) + str( datetime.datetime.now().second) nombrePdf = '../archivos/' + str(hoy + subNom) + '.pdf' listTransaccionTable = "" for transaccion in listTransaccion: listTransaccionTable += """ <tr height="80"> <td width="10%" align="center" > <br>""" + str( transaccion[1]) + """<br> </td> <td width="20%" > <br> """ + str( transaccion[3]) + """<br> </td> <td width="50%" > <br> """ + str( transaccion[4]) + """<br> </td> <td width="10%" align="right" > <br> $ """ + str( transaccion[5]) + """ <br> </td> <td width="10%" align="right" > <br> $ """ + str( int(transaccion[1]) * float(transaccion[5])) + """ <br> </td> </tr> """ nombre = "" apellido = "" if (self.tipoTransaccion == "VENTA"): nombre = self.cliente.getNombre() apellido = self.cliente.getApellido() elif (self.tipoTransaccion == "COMPRA"): nombre = self.proveedor.getNombre() apellido = self.proveedor.getDescripcion() total = self.winPrincipal.lblTotal.text() fecha = str(datetime.datetime.now()) html = """ <table width="600"> <tr width="600" color="#000000"> <td width="80%"> Perfumeria La que vende perfumes <br> LABOULAYE, CORDOBA, ARGENTINA <br> TEL: 0351-111111 <br> MAIL: [email protected] <br> </td> <td width="20%" align="right"> <IMG SRC="kde1.png"> </td> </tr> </table> _______________________________________________________________________________________________________ <p> DATOS DEL CLIENTE: </p> <br> <table> <tr> <td> NOMBRE: """ + nombre + """ <br> APELLIDO: """ + apellido + """ <br> </td> <td> </td> </tr> </table> <br> _______________________________________________________________________________________________________ <br> <p> DETALLES DE LA COMPRA: </p> <br> <table width="600" height="0" style="border-color: black; border-width: 0.5px; border-spacing: 0;"> <tr style=" background-color: gray; border-style: inset;"> <td width="10%" align="center" valign="middle"> <b> CANT </b> </td> <td width="20%" align="center" valign="middle"> <b> PRODUCTO </b> </td> <td width="50%" align="center" valign="middle"> <b> DESCRIPCION </b> </td> <td width="10%" align="center" valign="middle"> <b> PREC <br>UNIT </b> </td> <td width="10%" align="center" valign="middle"> <b> PREC <br>TOT </b> </td> </tr> </table> <br> <br> <br> <br> <table height="350" width="600" style="border-color: gray; border-width: .4px; border-collapse: collapse;"> """ + listTransaccionTable + """ </table> <br> <br> <table width="600" border="0.5" height="0" style="border-color: black; border-width: 0.5px; border-spacing: 0;"> <tr > <td width="90%" align="right"> <br> TOTAL.................................................................................................................. <br> </td> <td width="10%" align="center"> <br> $ """ + total + """<br> </td> </tr> </table> <br> <br> <br> <p width="600" align="center" style=" font-size: 10; " > Por cualquier consulta, sobre este recibo, dirigirse al local que se encuentra ubicado en la calle independencia 450. <br> O Comunicarse a los telefonos 03382-123123123 / 4231231 </p> <br> <br> <br> <br> <br> _______________________________________________________________________________________________________ <br> <table width="600"> <tr> <td align="right" width="80%"> FECHA/HORA : """ + fecha + """ </td> <td align="right"> N° : """ + str(idRecibo) + """ </td> </tr> </table> _______________________________________________________________________________________________________ """ doc = QTextDocument() doc.setHtml(html) #doc.setDefaultStyleSheet(style) printer = QPrinter() printer.setOutputFileName(nombrePdf) printer.setOutputFormat(QPrinter.PdfFormat) doc.print(printer) printer.newPage() url = QUrl url = QUrl(nombrePdf) QDesktopServices.openUrl(url) """ printPdf = QPrinter() printPdf.setOutputFormat(QPrinter.NativeFormat) questionPrint = QPrintDialog(printPdf, self.winPrincipal) if questionPrint.exec() == QPrintDialog.accept(printPdf): doc.print(printPdf) alert = QDialog() confirm = QMessageBox.question(alert, "Mensaje", "¿ Desea generar factura ?", QMessageBox.Yes, QMessageBox.No) if confirm == QMessageBox.Yes: #openPdf = QPrintDialog(printPdf, self.winPrincipal) #openPdf.setWindowTitle("Recibo") """ def limpiarCampos(self): self.winPrincipal.tvClientes_t.setModel(None) self.winPrincipal.tvDetalleTransaccion_t.setModel(None) self.winPrincipal.tvProductos_t.setModel(None) self.winPrincipal.lblTotal.setText('0.00') self.winPrincipal.sbCantidadProducto_t.setValue(0) self.winPrincipal.rbCompra_t.setEnabled(True) self.winPrincipal.rbVenta_t.setEnabled(True) self.winPrincipal.txtFilterCliente_t.setText('') self.winPrincipal.txtFilterProducto_t.setText('') self.winPrincipal.btnAceptar_t.setEnabled(False) self.winPrincipal.btnCancelar_t.setEnabled(False) self.winPrincipal.txtFilterCliente_t.setFocus(True) def onClickCancelar(self): alert = QDialog() confirm = QMessageBox.question(alert, "Mensaje", "¿ Desea cancelar la transaccion ?", QMessageBox.Yes, QMessageBox.No) if confirm == QMessageBox.Yes: self.limpiarCampos() def cargarTablaClientes(self): parameter = self.winPrincipal.txtFilterCliente_t.text() typeParameter = '' if self.winPrincipal.cbFilterCliente_t.currentText() == 'Apellido': typeParameter = 'c.apellido' elif self.winPrincipal.cbFilterCliente_t.currentText() == 'Nombre': typeParameter = 'p.nombre' listaClientes = self.conexionTransacciones.selectClientes( typeParameter, parameter) if len(listaClientes) > 0: header = ['ID', 'Apellido', 'Nombre', 'Email'] tablaModel = MyTableModel(self.winPrincipal.tvClientes_t, listaClientes, header) #tablaModel.setHeaderData(3, QtCore.Qt.Horizontal , 'Email', QtCore.Qt.AlignRight) #index = QModelIndex() #index.data(2) #index.column() #tablaModel.setData(index, QtCore.QVariant(QtCore.Qt.AlignHCenter), QtCore.Qt.TextAlignmentRole) self.winPrincipal.tvClientes_t.setModel(tablaModel) self.winPrincipal.tvClientes_t.selectionModel( ).currentChanged.connect(self.changeSelectedTable) #self.winPrincipal.tvClientes_t.model().headerData(2, QtCore.Qt.Horizontal, QtCore.Qt.AlignRight) self.winPrincipal.tvClientes_t.setColumnHidden(0, True) self.winPrincipal.tvClientes_t.setColumnWidth(1, 130) self.winPrincipal.tvClientes_t.setColumnWidth(2, 130) self.winPrincipal.tvClientes_t.setColumnWidth(3, 150) else: self.winPrincipal.tvClientes_t.setModel(None) def cargarTablaProveedores(self): parameter = self.winPrincipal.txtFilterCliente_t.text() typeParameter = '' if self.winPrincipal.cbFilterCliente_t.currentText() == 'Apellido': typeParameter = 'prov.descripcion' elif self.winPrincipal.cbFilterCliente_t.currentText() == 'Nombre': typeParameter = 'p.nombre' listProveedores = self.conexionTransacciones.selectProveedores( typeParameter, parameter) if len(listProveedores) > 0: header = ['ID', 'Descripcion', 'Nombre', 'Email'] tableModel = MyTableModel(self.winPrincipal.tvClientes_t, listProveedores, header) self.winPrincipal.tvClientes_t.setModel(tableModel) self.winPrincipal.tvClientes_t.selectionModel( ).currentChanged.connect(self.changeSelectedTable) self.winPrincipal.tvClientes_t.setColumnHidden(0, True) self.winPrincipal.tvClientes_t.setColumnWidth(1, 130) self.winPrincipal.tvClientes_t.setColumnWidth(2, 130) self.winPrincipal.tvClientes_t.setColumnWidth(3, 150) else: self.winPrincipal.tvClientes_t.setModel(None) def changeSelectedTable(self, selected, deselected): listPersonas = selected.model().mylist personaSelected = () personaSelected = tuple(listPersonas[selected.row()]) self.personaSelectedRow = selected.row() if (self.tipoTransaccion == "VENTA"): self.cliente = Cliente() self.cliente.setIdCliente(int(personaSelected[0])) self.cliente.setApellido(str(personaSelected[1])) self.cliente.setNombre(str(personaSelected[2])) self.cliente.setEmail(str(personaSelected[3])) elif (self.tipoTransaccion == "COMPRA"): self.proveedor = Proveedor() self.proveedor.setIdProveedor(int(personaSelected[0])) self.proveedor.setDescripcion(str(personaSelected[1])) self.proveedor.setNombre(str(personaSelected[2])) self.proveedor.setEmail(str(personaSelected[3])) self.activateButton() def cargarTablaProductos(self): parameter = self.winPrincipal.txtFilterProducto_t.text() typeParameter = '' if self.winPrincipal.cbFilterProducto_t.currentText() == 'Nombre': typeParameter = 'p.nombre' elif self.winPrincipal.cbFilterProducto_t.currentText() == 'Marca': typeParameter = 'm.descripcion' elif self.winPrincipal.cbFilterProducto_t.currentText( ) == 'Precio de Venta': typeParameter = 'p.pVenta' else: typeParameter = 'p.pCompra' parameterTransaccion = 'CMP' if self.tipoTransaccion == "VENTA": parameterTransaccion = 'VNT' listProducto = self.conexionTransacciones.selectProductos( typeParameter, parameter, parameterTransaccion) if len(listProducto) > 0: header = [ 'ID', 'Nombre', 'Descripcion', 'Cant', 'P.Compra', 'P.Venta', 'Marca' ] tableModel = MyTableModel(self.winPrincipal.tvProductos_t, listProducto, header) self.winPrincipal.tvProductos_t.setModel(tableModel) self.winPrincipal.tvProductos_t.selectionModel( ).currentChanged.connect(self.changeSelectedTableProducto) self.winPrincipal.tvProductos_t.setColumnHidden(0, True) self.winPrincipal.tvProductos_t.setColumnWidth(1, 150) self.winPrincipal.tvProductos_t.setColumnWidth(2, 200) self.winPrincipal.tvProductos_t.setColumnWidth(3, 50) self.winPrincipal.tvProductos_t.setColumnWidth(4, 80) self.winPrincipal.tvProductos_t.setColumnWidth(5, 80) self.winPrincipal.tvProductos_t.setColumnWidth(6, 100) else: self.winPrincipal.tvProductos_t.setModel(None) def changeSelectedTableProducto(self, selected, deselected): listProductos = selected.model().mylist productoSelected = () productoSelected = tuple(listProductos[selected.row()]) self.productoSelected = selected.row() self.producto = Producto() self.producto.setIdProducto(int(productoSelected[0])) self.producto.setNombre(str(productoSelected[1])) self.producto.setDescripcion(str(productoSelected[2])) self.producto.setCantidad(int(productoSelected[3])) self.producto.setPrecioCompra(float(productoSelected[4])) self.producto.setPrecioVenta(float(productoSelected[5])) self.winPrincipal.btnSumarProducto_t.setEnabled(True) def agregarTransaccion(self): cantProducto = int(self.winPrincipal.sbCantidadProducto_t.value()) stateProduct = True if self.tipoTransaccion == "VENTA" and cantProducto > self.producto.getCantidad( ): stateProduct = False if cantProducto == 0: stateProduct = False if stateProduct is True: #and self.validateProduct() is True: modelListTransaccion = self.winPrincipal.tvDetalleTransaccion_t.model( ) header = [ 'ID', 'Cantidad', 'idProducto', 'Producto', 'Descripcion', 'Precio Unit', 'Precio Tot' ] precio_unitario = 0 if (self.tipoTransaccion == "VENTA"): precio_unitario = float(self.producto.getPrecioVenta()) elif (self.tipoTransaccion == "COMPRA"): precio_unitario = float(self.producto.getPrecioCompra()) if modelListTransaccion is not None: listTabPro = list( self.winPrincipal.tvDetalleTransaccion_t.model().mylist) if len(listTabPro) > 0 or listTabPro is not None: tuplaProd = ('0', str(cantProducto), str(self.producto.getIdProducto()), str(self.producto.getNombre()), str(self.producto.getDescripcion()), str(precio_unitario), str(cantProducto * precio_unitario)) listTabPro.append(tuplaProd) tupleTable = tuple(listTabPro) tableModel = MyTableModel(self.winPrincipal, tupleTable, header) self.winPrincipal.tvDetalleTransaccion_t.setModel( tableModel) else: lista = [] tuplaProd = ('0', str(cantProducto), str(self.producto.getIdProducto()), str(self.producto.getNombre()), str(self.producto.getDescripcion()), str(precio_unitario), str(cantProducto * precio_unitario)) lista.append(tuplaProd) tableModel = MyTableModel(self.winPrincipal, lista, header) self.winPrincipal.tvDetalleTransaccion_t.setModel(tableModel) self.winPrincipal.tvDetalleTransaccion_t.setColumnHidden( 0, True) self.winPrincipal.tvDetalleTransaccion_t.setColumnWidth(1, 80) self.winPrincipal.tvDetalleTransaccion_t.setColumnHidden( 2, True) self.winPrincipal.tvDetalleTransaccion_t.setColumnWidth(3, 200) self.winPrincipal.tvDetalleTransaccion_t.setColumnWidth(4, 653) self.winPrincipal.tvDetalleTransaccion_t.setColumnWidth(5, 80) self.winPrincipal.tvDetalleTransaccion_t.setColumnWidth(6, 80) self.winPrincipal.rbCompra_t.setEnabled(False) self.winPrincipal.rbVenta_t.setEnabled(False) #self.total = (cantProducto * self.producto.getPrecioVenta()) + self.total #self.winPrincipal.lblTotal.setText(str(self.total)) self.winPrincipal.btnCancelar_t.setEnabled(True) self.winPrincipal.btnSumarProducto_t.setEnabled(False) self.winPrincipal.sbCantidadProducto_t.setValue(0) self.winPrincipal.tvDetalleTransaccion_t.selectionModel( ).currentChanged.connect(self.changeSelectedTableTransaccion) total = float(self.winPrincipal.lblTotal.text()) total += +(cantProducto * precio_unitario) self.winPrincipal.lblTotal.setText("{0:.2f}".format(total)) self.activateButton() #self.calcularTotal() else: alert = QDialog() QMessageBox.information(alert, "ERROR", "La cantidad especificada es invalida") def activateButton(self): hasP = False if self.proveedor.getIdProveedor() != 0 or self.cliente.getIdCliente( ) != 0: hasP = True if self.winPrincipal.tvDetalleTransaccion_t.model( ) is not None and hasP is True: self.winPrincipal.btnAceptar_t.setEnabled(True) def validateProduct(self): validate = True if self.winPrincipal.tvDetalleTransaccion_t.model() is not None: listTransacciones = list(self.winPrincipal.tvDetalleTransaccion_t. model().mylist).copy() header = ('ID', 'Cantidad', 'idProducto', 'Producto', 'Descripcion', 'Precio Unit', 'Precio Tot') listTransacciones.append(header) #cant = int(len(list(self.winPrincipal.tvDetalleTransaccion_t.model().mylist).copy())) tuple = ("", listTransacciones[0][1], listTransacciones[0][2], listTransacciones[0][3], listTransacciones[0][4], listTransacciones[0][5], listTransacciones[0][6]) listTransacciones[0] = tuple for transaccion in listTransacciones: if str(transaccion[2]) == str(self.producto.getIdProducto()): validate = False """ for i in range(cant): if listTransacciones[i][2] == str(self.producto.getIdProducto()): validate = False """ return validate def restarTransaccion(self): listTransacciones = list( self.winPrincipal.tvDetalleTransaccion_t.model().mylist).copy() header = [ 'ID', 'Cantidad', 'idProducto', 'Producto', 'Descripcion', 'Precio Unit', 'Precio Tot' ] listTransacciones.remove(self.transaccionSelected) if len(listTransacciones) < 1: self.winPrincipal.btnAceptar_t.setEnabled(False) self.winPrincipal.btnCancelar_t.setEnabled(False) self.winPrincipal.tvDetalleTransaccion_t.setModel(None) else: tableTelModel = MyTableModel(self.winPrincipal, listTransacciones, header) self.winPrincipal.tvDetalleTransaccion_t.setModel(tableTelModel) self.winPrincipal.tvDetalleTransaccion_t.selectionModel( ).currentChanged.connect(self.changeSelectedTableTransaccion) total = float(self.winPrincipal.lblTotal.text()) total -= float(self.transaccionSelected[6]) self.winPrincipal.lblTotal.setText("{0:.2f}".format(total)) self.winPrincipal.btnRestarProducto_t.setEnabled(False) #self.calcularTotal() def changeSelectedTableTransaccion(self, selected, deselected): listTransacciones = selected.model().mylist self.transaccionSelected = () self.transaccionSelected = listTransacciones[selected.row()] self.telefonoSelectedRow = selected.row() self.winPrincipal.btnRestarProducto_t.setEnabled(True) def onClickVenta(self): self.winPrincipal.label2_t.setText('Cliente') self.tipoTransaccion = "VENTA" self.limpiarCampos() def onClickCompra(self): self.winPrincipal.label2_t.setText('Proovedor') self.tipoTransaccion = "COMPRA" self.limpiarCampos() def selecClientes(self): if self.winPrincipal.cbFilterCliente_t.currentText() == 'Apellido': tipoParametro = 'c.apellido' elif self.winPrincipal.cbFilterCliente_t.currentText() == 'Email': tipoParametro = 'p.email' parametro = self.winPrincipal.txtFilterCliente_t.text() self.conexionTransacciones.selectClientes(tipoParametro, parametro) def calcularTotal(self): listTransacciones = [] listTransacciones = list( self.winPrincipal.tvDetalleTransaccion_t.model().mylist).copy() tupleParche = listTransacciones[0] tupleParche = ('1', tupleParche[1], tupleParche[2], tupleParche[3], tupleParche[4], tupleParche[5], tupleParche[6]) listTransacciones[0] = tupleParche if len(listTransacciones) > 0: total = 0 for transaccion in listTransacciones: total = total + float(transaccion[6]) self.winPrincipal.lblTotal.setText(str(total)) else: self.winPrincipal.lblTotal.setText('0,00')
class PestaniaTransacciones(): def __init__(self, winPrincipal): self.conexionTransacciones = ConexionTransacciones() self.winPrincipal = winPrincipal self.cliente = Cliente() self.proveedor = Proveedor() self.producto = Producto() self.tipoTransaccion = "VENTA" self.configInit() self.total = 0 def configInit(self): self.winPrincipal.rbVenta_t.clicked.connect(self.onClickVenta) self.winPrincipal.rbCompra_t.clicked.connect(self.onClickCompra) self.winPrincipal.btnSumarProducto_t.clicked.connect(self.agregarTransaccion) self.winPrincipal.btnAceptar_t.clicked.connect(self.onClickAceptar) self.winPrincipal.btnCancelar_t.clicked.connect(self.onClickCancelar) self.cargarTablaProductos() self.winPrincipal.tvClientes_t.setSortingEnabled(True) self.winPrincipal.tvClientes_t.setMouseTracking(True) self.winPrincipal.tvClientes_t.setSelectionBehavior(QAbstractItemView.SelectRows) self.winPrincipal.tvProductos_t.setSortingEnabled(True) self.winPrincipal.tvProductos_t.setMouseTracking(True) self.winPrincipal.tvProductos_t.setSelectionBehavior(QAbstractItemView.SelectRows) self.winPrincipal.tvDetalleTransaccion_t.setSortingEnabled(True) self.winPrincipal.tvDetalleTransaccion_t.setMouseTracking(True) self.winPrincipal.tvDetalleTransaccion_t.setSelectionBehavior(QAbstractItemView.SelectRows) def onClickAceptar(self): listTransaccion = list(self.winPrincipal.tvDetalleTransaccion_t.model().mylist).copy() subNom = "" numRecibo = 0 if(self.tipoTransaccion == "VENTA"): numRecibo = self.conexionTransacciones.cargarTransaccionVenta(listTransaccion, self.cliente) subNom = 'VNT' elif(self.tipoTransaccion == "COMPRA"): numRecibo = self.conexionTransacciones.cargarTransaccionCompra(listTransaccion, self.proveedor) subNom = 'CMP' alert = QDialog() confirm = QMessageBox.question(alert, "Mensaje", "¿ Desea generar factura ?", QMessageBox.Yes, QMessageBox.No) if confirm == QMessageBox.Yes: self.createFactura(listTransaccion, subNom, numRecibo) self.limpiarCampos() def createFactura(self, listTransaccion, subNom, idRecibo): hoy = str(datetime.datetime.now().year) + str(datetime.datetime.now().month) + str(datetime.datetime.now().day) + str(datetime.datetime.now().hour) + str(datetime.datetime.now().minute) + str(datetime.datetime.now().second) nombrePdf = '../archivos/' + str(hoy + subNom) + '.pdf' listTransaccionTable = "" for transaccion in listTransaccion: listTransaccionTable += """ <tr height="80"> <td width="10%" align="center" > <br>""" + str(transaccion[1]) + """<br> </td> <td width="20%" > <br> """ + str(transaccion[3]) + """<br> </td> <td width="50%" > <br> """ + str(transaccion[4]) + """<br> </td> <td width="10%" align="right" > <br> $ """ + str(transaccion[5]) + """ <br> </td> <td width="10%" align="right" > <br> $ """ + str( int(transaccion[1]) * float(transaccion[5])) + """ <br> </td> </tr> """ nombre = "" apellido = "" if(self.tipoTransaccion == "VENTA"): nombre = self.cliente.getNombre() apellido = self.cliente.getApellido() elif(self.tipoTransaccion == "COMPRA"): nombre = self.proveedor.getNombre() apellido = self.proveedor.getDescripcion() total = self.winPrincipal.lblTotal.text() fecha = str(datetime.datetime.now()) html = """ <table width="600"> <tr width="600" color="#000000"> <td width="80%"> Perfumeria La que vende perfumes <br> LABOULAYE, CORDOBA, ARGENTINA <br> TEL: 0351-111111 <br> MAIL: [email protected] <br> </td> <td width="20%" align="right"> <IMG SRC="kde1.png"> </td> </tr> </table> _______________________________________________________________________________________________________ <p> DATOS DEL CLIENTE: </p> <br> <table> <tr> <td> NOMBRE: """+ nombre +""" <br> APELLIDO: """ + apellido + """ <br> </td> <td> </td> </tr> </table> <br> _______________________________________________________________________________________________________ <br> <p> DETALLES DE LA COMPRA: </p> <br> <table width="600" height="0" style="border-color: black; border-width: 0.5px; border-spacing: 0;"> <tr style=" background-color: gray; border-style: inset;"> <td width="10%" align="center" valign="middle"> <b> CANT </b> </td> <td width="20%" align="center" valign="middle"> <b> PRODUCTO </b> </td> <td width="50%" align="center" valign="middle"> <b> DESCRIPCION </b> </td> <td width="10%" align="center" valign="middle"> <b> PREC <br>UNIT </b> </td> <td width="10%" align="center" valign="middle"> <b> PREC <br>TOT </b> </td> </tr> </table> <br> <br> <br> <br> <table height="350" width="600" style="border-color: gray; border-width: .4px; border-collapse: collapse;"> """ + listTransaccionTable + """ </table> <br> <br> <table width="600" border="0.5" height="0" style="border-color: black; border-width: 0.5px; border-spacing: 0;"> <tr > <td width="90%" align="right"> <br> TOTAL.................................................................................................................. <br> </td> <td width="10%" align="center"> <br> $ """ + total + """<br> </td> </tr> </table> <br> <br> <br> <p width="600" align="center" style=" font-size: 10; " > Por cualquier consulta, sobre este recibo, dirigirse al local que se encuentra ubicado en la calle independencia 450. <br> O Comunicarse a los telefonos 03382-123123123 / 4231231 </p> <br> <br> <br> <br> <br> _______________________________________________________________________________________________________ <br> <table width="600"> <tr> <td align="right" width="80%"> FECHA/HORA : """+ fecha + """ </td> <td align="right"> N° : """+ str(idRecibo) +""" </td> </tr> </table> _______________________________________________________________________________________________________ """ doc = QTextDocument() doc.setHtml(html) #doc.setDefaultStyleSheet(style) printer = QPrinter() printer.setOutputFileName(nombrePdf) printer.setOutputFormat(QPrinter.PdfFormat) doc.print(printer) printer.newPage() url = QUrl url = QUrl(nombrePdf) QDesktopServices.openUrl(url) """ printPdf = QPrinter() printPdf.setOutputFormat(QPrinter.NativeFormat) questionPrint = QPrintDialog(printPdf, self.winPrincipal) if questionPrint.exec() == QPrintDialog.accept(printPdf): doc.print(printPdf) alert = QDialog() confirm = QMessageBox.question(alert, "Mensaje", "¿ Desea generar factura ?", QMessageBox.Yes, QMessageBox.No) if confirm == QMessageBox.Yes: #openPdf = QPrintDialog(printPdf, self.winPrincipal) #openPdf.setWindowTitle("Recibo") """ def limpiarCampos(self): self.winPrincipal.tvClientes_t.setModel(None) self.winPrincipal.tvDetalleTransaccion_t.setModel(None) self.winPrincipal.tvProductos_t.setModel(None) self.winPrincipal.lblTotal.setText('') self.winPrincipal.sbCantidadProducto_t.setValue(0) def onClickCancelar(self): self.limpiarCampos() def cargarTablaClientes(self): if self.winPrincipal.cbFilterCliente_t.currentText() == 'Apellido': tipoParametro = 'c.apellido' elif self.winPrincipal.cbFilterCliente_t.currentText() == 'Email': tipoParametro = 'p.email' parametro = self.winPrincipal.txtFilterCliente_t.text() listaClientes = self.conexionTransacciones.selectClientes(tipoParametro, parametro) header = ['ID','Apellido','Nombre','Email'] tablaModel = MyTableModel(self.winPrincipal.tvClientes_t, listaClientes, header) self.winPrincipal.tvClientes_t.setModel(tablaModel) self.winPrincipal.tvClientes_t.selectionModel().currentChanged.connect(self.changeSelectedTable) self.winPrincipal.tvClientes_t.setColumnHidden(0, True) self.winPrincipal.tvClientes_t.setColumnWidth(1, 130) self.winPrincipal.tvClientes_t.setColumnWidth(2, 130) self.winPrincipal.tvClientes_t.setColumnWidth(3, 150) def cargarTablaProveedores(self): if self.winPrincipal.cbFilterCliente_t.currentText() == 'Apellido': tipoParametro = 'c.apellido' elif self.winPrincipal.cbFilterCliente_t.currentText() == 'Email': tipoParametro = 'p.email' parametro = self.winPrincipal.txtFilterCliente_t.text() listProveedores = self.conexionTransacciones.selectProveedores(tipoParametro, parametro) header = ['ID', 'Descripcion', 'Nombre', 'Email'] tableModel = MyTableModel(self.winPrincipal.tvClientes_t, listProveedores, header) self.winPrincipal.tvClientes_t.setModel(tableModel) self.winPrincipal.tvClientes_t.selectionModel().currentChanged.connect(self.changeSelectedTable) self.winPrincipal.tvClientes_t.setColumnHidden(0, True) self.winPrincipal.tvClientes_t.setColumnWidth(1, 130) self.winPrincipal.tvClientes_t.setColumnWidth(2, 130) self.winPrincipal.tvClientes_t.setColumnWidth(3, 150) def changeSelectedTable(self, selected, deselected): listPersonas = selected.model().mylist personaSelected = () personaSelected = tuple(listPersonas[selected.row()]) self.personaSelectedRow = selected.row() if(self.tipoTransaccion == "VENTA"): self.cliente = Cliente() self.cliente.setIdCliente(int(personaSelected[0])) self.cliente.setApellido(str(personaSelected[1])) self.cliente.setNombre(str(personaSelected[2])) self.cliente.setEmail(str(personaSelected[3])) elif(self.tipoTransaccion == "COMPRA"): self.proveedor = Proveedor() self.proveedor.setIdProveedor(int(personaSelected[0])) self.proveedor.setDescripcion(str(personaSelected[1])) self.proveedor.setNombre(str(personaSelected[2])) self.proveedor.setEmail(str(personaSelected[3])) def cargarTablaProductos(self): listProducto = self.conexionTransacciones.selectProductos() header = ['ID', 'Nombre', 'Descripcion', 'Cant', 'P.Compra', 'P.Venta', 'Marca'] tableModel = MyTableModel(self.winPrincipal.tvProductos_t, listProducto, header) self.winPrincipal.tvProductos_t.setModel(tableModel) self.winPrincipal.tvProductos_t.selectionModel().currentChanged.connect(self.changeSelectedTableProducto) self.winPrincipal.tvProductos_t.setColumnHidden(0, True) self.winPrincipal.tvProductos_t.setColumnWidth(1, 150) self.winPrincipal.tvProductos_t.setColumnWidth(2, 200) self.winPrincipal.tvProductos_t.setColumnWidth(3, 50) self.winPrincipal.tvProductos_t.setColumnWidth(4, 80) self.winPrincipal.tvProductos_t.setColumnWidth(5, 80) self.winPrincipal.tvProductos_t.setColumnWidth(6, 100) #tvProductos_t def changeSelectedTableProducto(self, selected, deselected): listProductos = selected.model().mylist productoSelected = () productoSelected = tuple(listProductos[selected.row()]) self.productoSelected = selected.row() self.producto = Producto() self.producto.setIdProducto(int(productoSelected[0])) self.producto.setNombre(str(productoSelected[1])) self.producto.setDescripcion(str(productoSelected[2])) self.producto.setCantidad(int(productoSelected[3])) self.producto.setPrecioCompra(float(productoSelected[4])) self.producto.setPrecioVenta(float(productoSelected[5])) def agregarTransaccion(self): #tvDetalleTransaccion_t #btnSumarProducto_t cantProducto = int(self.winPrincipal.sbCantidadProducto_t.value()) modelListTransaccion = self.winPrincipal.tvDetalleTransaccion_t.model() header = ['ID', 'Cantidad','idProducto' ,'Producto', 'Descripcion', 'precio_unitario' ] precio_unitario = 0 if(self.tipoTransaccion == "VENTA"): precio_unitario = float(self.producto.getPrecioVenta()) elif(self.tipoTransaccion == "COMPRA"): precio_unitario = float(self.producto.getPrecioCompra()) if modelListTransaccion is not None: listTabPro = list(self.winPrincipal.tvDetalleTransaccion_t.model().mylist) if len(listTabPro) > 0 or listTabPro is not None: tuplaProd = ('0', str(cantProducto), str(self.producto.getIdProducto()), str(self.producto.getNombre()), str(self.producto.getDescripcion()), str(precio_unitario) ) listTabPro.append(tuplaProd) tupleTable = tuple(listTabPro) tableModel = MyTableModel(self.winPrincipal, tupleTable , header) self.winPrincipal.tvDetalleTransaccion_t.setModel(tableModel) #self.winPrincipal.tvDetalleTransaccion_t.selectionModel().currentChanged.connect(self.changeSelectedTableTransaccion) else: lista = [] tuplaProd = ('0', str(cantProducto), str(self.producto.getIdProducto()), str(self.producto.getNombre()), str(self.producto.getDescripcion()), str(precio_unitario) ) lista.append(tuplaProd) tableModel = MyTableModel(self.winPrincipal, lista , header) self.winPrincipal.tvDetalleTransaccion_t.setModel(tableModel) #self.winPrincipal.tvDetalleTransaccion_t.selectionModel().currentChanged.connect(self.changeSelectedTableTel) self.winPrincipal.tvDetalleTransaccion_t.setColumnHidden(0, True) self.winPrincipal.tvDetalleTransaccion_t.setColumnWidth(1, 80) self.winPrincipal.tvDetalleTransaccion_t.setColumnHidden(2, True) self.winPrincipal.tvDetalleTransaccion_t.setColumnWidth(3, 200) self.winPrincipal.tvDetalleTransaccion_t.setColumnWidth(4, 300) self.total = (cantProducto * self.producto.getPrecioVenta()) + self.total self.winPrincipal.lblTotal.setText(str(self.total)) self.winPrincipal.tvClientes_t.setEnabled(False) def changeSelectedTableTransaccion(self, selected, deselected): pass def onClickVenta(self): self.winPrincipal.label2_t.setText('Cliente') self.cargarTablaClientes() self.tipoTransaccion = "VENTA" def onClickCompra(self): self.winPrincipal.label2_t.setText('Proovedor') self.cargarTablaProveedores() self.tipoTransaccion = "COMPRA" def selecClientes(self): if self.winPrincipal.cbFilterCliente_t.currentText() == 'Apellido': tipoParametro = 'c.apellido' elif self.winPrincipal.cbFilterCliente_t.currentText() == 'Email': tipoParametro = 'p.email' parametro = self.winPrincipal.txtFilterCliente_t.text() self.conexionTransacciones.selectClientes(tipoParametro, parametro)
class PestaniaProducto(): def __init__(self, winPrincipal): self.winPrincipal = winPrincipal self.producto = Producto() self.proveedor = Proveedor() self.marca = Marca() self.rubro = Rubro() self.estado = "" self.conexionProducto = conexionProducto() self.completerRubro = QCompleter() self.completerMarca = QCompleter() self.completerProveedor = QCompleter() self.configInit() def configInit(self): #Configurando botones self.winPrincipal.btnAgregar_p.clicked.connect(self.onClickAgregar_p) self.winPrincipal.btnGuardar_p.clicked.connect(self.onClickGuardar_p) self.winPrincipal.btnBorrar_p.clicked.connect(self.onClickBorrar_p) self.winPrincipal.btnModificar_p.clicked.connect( self.onClickModificar_p) self.winPrincipal.btnRubro_p.clicked.connect(windowRubro) self.winPrincipal.btnMarca_p.clicked.connect(windowMarca) #windowMarca.connect(windowMarca, Qt.SIGNAL('destroyed()'), self.onQuitMarca) self.winPrincipal.txtFilterProductos_p.returnPressed.connect( self.search) #self.cargarTabla() self.winPrincipal.tvProductos_p.setMouseTracking(True) self.winPrincipal.tvProductos_p.setSelectionBehavior( QAbstractItemView.SelectRows) self.setCompleterMarca() self.setCompleterRubro() self.setCompleterProveedor() self.winPrincipal.txtFilterProductos_p.setFocus(True) def finish(self): self.winPrincipal.btnAgregar_p.disconnect() self.winPrincipal.btnGuardar_p.disconnect() self.winPrincipal.btnModificar_p.disconnect() self.winPrincipal.btnBorrar_p.disconnect() self.winPrincipal.btnRubro_p.disconnect() self.winPrincipal.btnMarca_p.disconnect() self.winPrincipal.tvProductos_p.disconnect() def search(self): if self.winPrincipal.txtFilterProductos_p.hasFocus() is True: self.cargarTabla() def onClickAgregar_p(self): self.estado = 'AGREGAR' self.validarBotones(button='AGREGAR') def onClickGuardar_p(self): validar = self.validar() if validar != "": print(validar) alert = QDialog() QMessageBox.information(alert, "ERROR", validar) else: self.producto.setDescripcion( str(self.winPrincipal.txtDescripcion_p.toPlainText())) self.producto.setCantidad( int(self.winPrincipal.sbCantidad_p.value())) self.producto.setCantidadMinima( int(self.winPrincipal.sbCantidadMin_p.value())) if self.winPrincipal.cbEstado_p.currentText() == "ACTIVO": self.producto.setEstado(1) else: self.producto.setEstado(0) if self.winPrincipal.rbFemenino_p.isChecked() is True: self.producto.setGenero("F") elif self.winPrincipal.rbMasculino_p.isChecked() is True: self.producto.setGenero("M") else: self.producto.setGenero("I") self.producto.setNombre(str(self.winPrincipal.txtNombre_p.text())) self.producto.setPrecioCompra( float(self.winPrincipal.txtPrecioCompra_p.text())) self.producto.setPrecioVenta( float(self.winPrincipal.txtPrecioVenta_p.text())) self.rubro.setRubro(str(self.completerRubro.currentCompletion())) self.producto.setRubro(self.rubro) self.proveedor.setDescripcion( str(self.completerProveedor.currentCompletion())) self.producto.setProveedor(self.proveedor) self.marca.setMarca(str(self.completerMarca.currentCompletion())) self.producto.setMarca(self.marca) if self.estado == 'AGREGAR': self.insertarProducto() elif self.estado == 'MODIFICAR': self.modificarProducto() self.validarBotones('GUARDAR') def onClickModificar_p(self): self.estado = 'MODIFICAR' self.validarBotones(button='MODIFICAR') def onClickBorrar_p(self): if self.winPrincipal.btnGuardar_p.isEnabled() != True: self.conexionProducto.borrarProducto(self.producto) self.cargarTabla() self.validarBotones(button='BORRAR') def cargarTabla(self): parameter = self.winPrincipal.txtFilterProductos_p.text() typeParameter = '' if self.winPrincipal.cbFilterProducto_p.currentText() == 'Nombre': typeParameter = 'p.nombre' elif self.winPrincipal.cbFilterProducto_p.currentText() == 'Marca': typeParameter = 'm.descripcion' else: typeParameter = 'r.descripcion' parameterState = 1 if self.winPrincipal.cbInactivo_p.isChecked() is True: parameterState = 0 parameterStock = 1 if self.winPrincipal.cbSinStock_p.isChecked() is True: parameterStock = 0 listaProductos = self.conexionProducto.selectProducto( typeParameter, parameter, parameterState, parameterStock) if len(listaProductos) > 0: header = [ 'idPro', 'Nombre', 'Descripcion', 'PC', 'PV', 'G', 'Estado', 'Cant', 'Cantidad Min', 'idMar', 'Marca', 'idRubro', 'Rubro', 'idProv', 'Proveedor' ] self.tablaModel = MyTableModel(self.winPrincipal.tvProductos_p, listaProductos, header) self.winPrincipal.tvProductos_p.setModel(self.tablaModel) self.winPrincipal.tvProductos_p.selectionModel( ).currentChanged.connect(self.changeSelectedTable) self.winPrincipal.tvProductos_p.setColumnHidden(0, True) self.winPrincipal.tvProductos_p.setColumnWidth(1, 200) self.winPrincipal.tvProductos_p.setColumnWidth(2, 320) self.winPrincipal.tvProductos_p.setColumnWidth(3, 60) self.winPrincipal.tvProductos_p.setColumnWidth(4, 60) self.winPrincipal.tvProductos_p.setColumnWidth(5, 60) self.winPrincipal.tvProductos_p.setColumnHidden(6, True) self.winPrincipal.tvProductos_p.setColumnWidth(7, 40) self.winPrincipal.tvProductos_p.setColumnHidden(8, True) self.winPrincipal.tvProductos_p.setColumnHidden(9, True) self.winPrincipal.tvProductos_p.setColumnWidth(10, 130) self.winPrincipal.tvProductos_p.setColumnHidden(11, True) self.winPrincipal.tvProductos_p.setColumnWidth(12, 130) self.winPrincipal.tvProductos_p.setColumnHidden(13, True) self.winPrincipal.tvProductos_p.setColumnWidth(14, 130) else: self.winPrincipal.tvProductos_p.setModel(None) def changeSelectedTable(self, selected, deselected): productoList = selected.model().mylist productoSelected = productoList[selected.row()] self.producto = Producto() self.rubro = Rubro() self.proveedor = Proveedor() self.marca = Marca() self.producto.setIdProducto(productoSelected[0]) self.producto.setNombre(productoSelected[1]) self.producto.setDescripcion(productoSelected[2]) self.producto.setPrecioCompra(productoSelected[3]) self.producto.setPrecioVenta(productoSelected[4]) self.producto.setGenero(productoSelected[5]) self.producto.setEstado(productoSelected[6]) self.producto.setCantidad(productoSelected[7]) self.producto.setCantidadMinima(productoSelected[8]) self.marca.setIdMarca(productoSelected[9]) self.marca.setMarca(productoSelected[10]) self.producto.setMarca(self.marca) self.rubro.setIdRubro(productoSelected[11]) self.rubro.setRubro(productoSelected[12]) self.producto.setRubro(self.rubro) self.proveedor.setIdProveedor(productoSelected[13]) self.proveedor.setDescripcion(productoSelected[14]) self.producto.setProveedor(self.proveedor) self.winPrincipal.tvProductos_p.setRowHeight(deselected.row(), 33) self.winPrincipal.tvProductos_p.setRowHeight(selected.row(), 45) self.setCampos() self.winPrincipal.btnModificar_p.setEnabled(True) self.winPrincipal.btnBorrar_p.setEnabled(True) def validarBotones(self, button): if button == 'AGREGAR': self.winPrincipal.wDatosProducto.setEnabled(True) self.winPrincipal.btnBorrar_p.setEnabled(True) self.winPrincipal.btnBorrar_p.setText('CANCELAR') self.winPrincipal.btnGuardar_p.setEnabled(True) self.winPrincipal.btnModificar_p.setEnabled(False) self.winPrincipal.btnAgregar_p.setEnabled(False) self.winPrincipal.tvProductos_p.setEnabled(False) self.limpiarCampos() elif button == 'GUARDAR': self.winPrincipal.btnModificar_p.setEnabled(False) self.winPrincipal.btnAgregar_p.setEnabled(True) self.winPrincipal.btnGuardar_p.setEnabled(False) self.winPrincipal.btnBorrar_p.setText('BORRAR') self.winPrincipal.btnBorrar_p.setEnabled(False) self.winPrincipal.tvProductos_p.setEnabled(True) self.winPrincipal.wDatosProducto.setEnabled(False) self.limpiarCampos() elif button == 'MODIFICAR': self.winPrincipal.btnModificar_p.setEnabled(False) self.winPrincipal.btnAgregar_p.setEnabled(False) self.winPrincipal.btnGuardar_p.setEnabled(True) self.winPrincipal.btnBorrar_p.setText('CANCELAR') self.winPrincipal.btnBorrar_p.setEnabled(True) self.winPrincipal.tvProductos_p.setEnabled(False) self.winPrincipal.wDatosProducto.setEnabled(True) elif button == 'BORRAR': self.winPrincipal.btnModificar_p.setEnabled(False) self.winPrincipal.btnAgregar_p.setEnabled(True) self.winPrincipal.btnGuardar_p.setEnabled(False) self.winPrincipal.btnBorrar_p.setText('BORRAR') self.winPrincipal.btnBorrar_p.setEnabled(False) self.winPrincipal.tvProductos_p.setEnabled(True) self.winPrincipal.wDatosProducto.setEnabled(False) self.limpiarCampos() def insertarProducto(self): self.conexionProducto.insertarProducto(producto=self.producto) self.cargarTabla() def modificarProducto(self): self.conexionProducto.modificarProducto(self.producto) self.cargarTabla() def limpiarCampos(self): self.winPrincipal.txtNombre_p.setText('') self.winPrincipal.txtPrecioCompra_p.setText('') self.winPrincipal.txtPrecioVenta_p.setText('') self.winPrincipal.sbCantidad_p.setValue(0) self.winPrincipal.sbCantidadMin_p.setValue(0) self.winPrincipal.txtProveedor_p.setText('') self.winPrincipal.txtDescripcion_p.setText('') self.winPrincipal.txtRubro_p.setText('') self.winPrincipal.txtMarca_p.setText('') self.completerProveedor.setCurrentRow(0) self.completerRubro.setCurrentRow(0) self.completerMarca.setCurrentRow(0) self.winPrincipal.txtFilterProductos_p.setText('') self.winPrincipal.tvProductos_p.setModel(None) self.winPrincipal.txtFilterProductos_p.setFocus(True) def setCampos(self): self.winPrincipal.txtNombre_p.setText(self.producto.getNombre()) self.winPrincipal.txtDescripcion_p.setText( str(self.producto.getDescripcion())) self.winPrincipal.txtPrecioCompra_p.setText( str(self.producto.getPrecioCompra())) self.winPrincipal.txtPrecioVenta_p.setText( str(self.producto.getPrecioVenta())) self.winPrincipal.txtProveedor_p.setText( str(self.producto.getProveedor().getDescripcion())) self.winPrincipal.sbCantidad_p.setValue( int(self.producto.getCantidad())) self.winPrincipal.sbCantidadMin_p.setValue( int(self.producto.getCantidadMinima())) self.winPrincipal.txtRubro_p.setText( str(self.producto.getRubro().getRubro())) self.winPrincipal.txtMarca_p.setText( str(self.producto.getMarca().getMarca())) if self.producto.getEstado() == 1: self.winPrincipal.cbEstado_p.setCurrentIndex(0) else: self.winPrincipal.cbEstado_p.setCurrentIndex(1) if self.producto.getGenero() == 'F': self.winPrincipal.rbFemenino_p.setChecked(True) elif self.producto.getGenero() == 'M': self.winPrincipal.rbMasculino_p.setChecked(True) else: self.winPrincipal.rbIndiferente_p.setChecked(True) def validar(self): mensaje = '' if self.winPrincipal.txtNombre_p.text() == '': mensaje = "Falta ingresar Nombre" elif self.winPrincipal.txtPrecioCompra_p.text() == '': mensaje = "Falta ingresar Precio de Compra" elif self.winPrincipal.txtPrecioVenta_p.text() == '': mensaje = "Falta ingresar Precio de Venta" elif self.completerProveedor.currentCompletion() == '': mensaje = "Falta ingresar un Proveedor" elif self.completerMarca.currentCompletion() == '': mensaje = "Falta seleccionar la marca" elif self.completerRubro.currentCompletion() == '': mensaje = 'Falta seleccionar el rubro' """elif self.completerProveedor.currentCompletion() =='' or self.completerProveedor.currentRow() == 0: mensaje= "Falta ingresar un Proveedor" elif self.completerMarca.currentCompletion() == '' or self.completerMarca.currentRow() == 0: mensaje = "Falta seleccionar la marca" elif self.completerRubro.currentCompletion() == '' or self.completerRubro.currentRow() == 0: mensaje = 'Falta seleccionar el rubro' """ return mensaje def setCompleterMarca(self): listMarcas = self.conexionProducto.listMarcas() self.completerMarca = QCompleter(listMarcas) self.completerMarca.setCaseSensitivity(QtCore.Qt.CaseInsensitive) self.winPrincipal.txtMarca_p.setCompleter(self.completerMarca) def setCompleterRubro(self): listRubros = self.conexionProducto.listRubro() self.completerRubro = QCompleter(listRubros) #self.completerRubro.dynamicPropertyNames() self.completerRubro.setCaseSensitivity(QtCore.Qt.CaseInsensitive) self.winPrincipal.txtRubro_p.setCompleter(self.completerRubro) def setCompleterProveedor(self): listProveedores = self.conexionProducto.listProveedor() self.completerProveedor = QCompleter(listProveedores) self.completerProveedor.setCaseSensitivity(QtCore.Qt.CaseInsensitive) self.winPrincipal.txtProveedor_p.setCompleter(self.completerProveedor)
class PestaniaProducto(): def __init__(self, winPrincipal): self.winPrincipal = winPrincipal self.producto = Producto() self.proveedor = Proveedor() self.marca = Marca() self.rubro = Rubro() self.estado = "" self.conexionProducto = conexionProducto() self.configInit() def configInit(self): #Configurando botones self.winPrincipal.btnAgregar_p.clicked.connect(self.onClickAgregar_p) self.winPrincipal.btnGuardar_p.clicked.connect(self.onClickGuardar_p) self.winPrincipal.btnBorrar_p.clicked.connect(self.onClickBorrar_p) self.winPrincipal.btnModificar_p.clicked.connect(self.onClickModificar_p) self.winPrincipal.btnRubro_p.clicked.connect(windowRubro) self.winPrincipal.btnMarca_p.clicked.connect(windowMarca) self.cargarTabla() self.winPrincipal.tvProductos_p.setMouseTracking(True) self.winPrincipal.tvProductos_p.setSelectionBehavior(QAbstractItemView.SelectRows) self.setCompleterMarca() self.setCompleterRubro() self.setCompleterProveedor() def onClickAgregar_p(self): self.estado = 'AGREGAR' self.validarBotones(button='AGREGAR') def onClickGuardar_p(self): validar = self.validar() if validar != "": print(validar) alert = QDialog() QMessageBox.information(alert,"ERROR", validar) else: self.producto.setDescripcion(str(self.winPrincipal.txtDescripcion_p.toPlainText())) self.producto.setCantidad(int(self.winPrincipal.sbCantidad_p.value())) self.producto.setCantidadMinima(int(self.winPrincipal.sbCantidadMin_p.value())) if self.winPrincipal.cbEstado_p.currentText() == "ACTIVO": self.producto.setEstado(1) else: self.producto.setEstado(0) if self.winPrincipal.rbFemenino_p.isChecked() is True: self.producto.setGenero("F") else: self.producto.setGenero("M") self.producto.setNombre(str(self.winPrincipal.txtNombre_p.text())) self.producto.setPrecioCompra(float(self.winPrincipal.txtPrecioCompra_p.text())) self.producto.setPrecioVenta(float(self.winPrincipal.txtPrecioVenta_p.text())) self.rubro.setRubro(str(self.completerRubro.currentCompletion())) self.producto.setRubro(self.rubro) self.proveedor.setDescripcion(str(self.completerProveedor.currentCompletion())) self.producto.setProveedor(self.proveedor) self.marca.setMarca(str(self.completerMarca.currentCompletion())) self.producto.setMarca(self.marca) if self.estado == 'AGREGAR': self.insertarProducto() elif self.estado == 'MODIFICAR': self.modificarProducto() self.validarBotones('GUARDAR') def onClickModificar_p(self): self.estado = 'MODIFICAR' self.validarBotones(button='MODIFICAR') def onClickBorrar_p(self): if self.winPrincipal.btnGuardar_p.isEnabled() != True: self.conexionProducto.borrarProducto(self.producto) self.cargarTabla() self.validarBotones(button='BORRAR') def cargarTabla(self): listaProductos = self.conexionProducto.selectProducto() if len(listaProductos) > 0: header = ['idPro','Nombre', 'Descripcion', 'PC', 'PV', 'G', 'Estado', 'Cant', 'Cantidad Min', 'idMar', 'Marca', 'idRubro', 'Rubro', 'idProv', 'Proveedor'] self.tablaModel = MyTableModel(self.winPrincipal.tvProductos_p, listaProductos, header) self.winPrincipal.tvProductos_p.setModel(self.tablaModel) self.winPrincipal.tvProductos_p.selectionModel().currentChanged.connect(self.changeSelectedTable) self.winPrincipal.tvProductos_p.setColumnHidden(0, True) self.winPrincipal.tvProductos_p.setColumnWidth(1, 200) self.winPrincipal.tvProductos_p.setColumnWidth(2, 320) self.winPrincipal.tvProductos_p.setColumnWidth(3, 60) self.winPrincipal.tvProductos_p.setColumnWidth(4, 60) self.winPrincipal.tvProductos_p.setColumnWidth(5, 60) self.winPrincipal.tvProductos_p.setColumnHidden(6, True) self.winPrincipal.tvProductos_p.setColumnWidth(7, 40) self.winPrincipal.tvProductos_p.setColumnHidden(8, True) self.winPrincipal.tvProductos_p.setColumnHidden(9, True) self.winPrincipal.tvProductos_p.setColumnWidth(10, 130) self.winPrincipal.tvProductos_p.setColumnHidden(11, True) self.winPrincipal.tvProductos_p.setColumnWidth(12, 130) self.winPrincipal.tvProductos_p.setColumnHidden(13, True) self.winPrincipal.tvProductos_p.setColumnWidth(14, 130) def changeSelectedTable(self, selected, deselected): productoList = selected.model().mylist productoSelected = productoList[selected.row()] self.producto = Producto() self.rubro = Rubro() self.proveedor = Proveedor() self.marca = Marca() self.producto.setIdProducto(productoSelected[0]) self.producto.setNombre(productoSelected[1]) self.producto.setDescripcion(productoSelected[2]) self.producto.setPrecioCompra(productoSelected[3]) self.producto.setPrecioVenta(productoSelected[4]) self.producto.setGenero(productoSelected[5]) self.producto.setEstado(productoSelected[6]) self.producto.setCantidad(productoSelected[7]) self.producto.setCantidadMinima(productoSelected[8]) self.marca.setIdMarca(productoSelected[9]) self.marca.setMarca(productoSelected[10]) self.producto.setMarca(self.marca) self.rubro.setIdRubro(productoSelected[11]) self.rubro.setRubro(productoSelected[12]) self.producto.setRubro(self.rubro) self.proveedor.setIdProveedor(productoSelected[13]) self.proveedor.setDescripcion(productoSelected[14]) self.producto.setProveedor(self.proveedor) self.winPrincipal.tvProductos_p.setRowHeight(deselected.row(),33) self.winPrincipal.tvProductos_p.setRowHeight(selected.row(),45) self.setCampos() self.winPrincipal.btnModificar_p.setEnabled(True) self.winPrincipal.btnBorrar_p.setEnabled(True) def validarBotones(self, button): if button == 'AGREGAR' : self.winPrincipal.wDatosProducto.setEnabled(True) self.winPrincipal.btnBorrar_p.setEnabled(True) self.winPrincipal.btnBorrar_p.setText('CANCELAR') self.winPrincipal.btnGuardar_p.setEnabled(True) self.winPrincipal.btnModificar_p.setEnabled(False) self.winPrincipal.btnAgregar_p.setEnabled(False) self.winPrincipal.tvProductos_p.setEnabled(False) self.limpiarCampos() elif button=='GUARDAR': self.winPrincipal.btnModificar_p.setEnabled(False) self.winPrincipal.btnAgregar_p.setEnabled(True) self.winPrincipal.btnGuardar_p.setEnabled(False) self.winPrincipal.btnBorrar_p.setText('BORRAR') self.winPrincipal.btnBorrar_p.setEnabled(False) self.winPrincipal.tvProductos_p.setEnabled(True) self.winPrincipal.wDatosProducto.setEnabled(False) self.limpiarCampos() elif button == 'MODIFICAR': self.winPrincipal.btnModificar_p.setEnabled(False) self.winPrincipal.btnAgregar_p.setEnabled(False) self.winPrincipal.btnGuardar_p.setEnabled(True) self.winPrincipal.btnBorrar_p.setText('CANCELAR') self.winPrincipal.btnBorrar_p.setEnabled(True) self.winPrincipal.tvProductos_p.setEnabled(False) self.winPrincipal.wDatosProducto.setEnabled(True) elif button=='BORRAR': self.winPrincipal.btnModificar_p.setEnabled(False) self.winPrincipal.btnAgregar_p.setEnabled(True) self.winPrincipal.btnGuardar_p.setEnabled(False) self.winPrincipal.btnBorrar_p.setText('BORRAR') self.winPrincipal.btnBorrar_p.setEnabled(False) self.winPrincipal.tvProductos_p.setEnabled(True) self.winPrincipal.wDatosProducto.setEnabled(False) self.limpiarCampos() def insertarProducto(self): self.conexionProducto.insertarProducto(producto=self.producto) self.cargarTabla() def modificarProducto(self): self.conexionProducto.modificarProducto(self.producto) self.cargarTabla() def limpiarCampos(self): self.winPrincipal.txtNombre_p.setText('') self.winPrincipal.txtPrecioCompra_p.setText('') self.winPrincipal.txtPrecioVenta_p.setText('') self.winPrincipal.sbCantidad_p.setValue(0) self.winPrincipal.sbCantidadMin_p.setValue(0) self.winPrincipal.txtProveedor_p.setText('') self.winPrincipal.txtDescripcion_p.setText('') self.winPrincipal.txtRubro_p.setText('') self.winPrincipal.txtMarca_p.setText('') def setCampos(self): self.winPrincipal.txtNombre_p.setText(self.producto.getNombre()) self.winPrincipal.txtDescripcion_p.setText(str(self.producto.getDescripcion())) self.winPrincipal.txtPrecioCompra_p.setText(str(self.producto.getPrecioCompra())) self.winPrincipal.txtPrecioVenta_p.setText(str(self.producto.getPrecioVenta())) self.winPrincipal.txtProveedor_p.setText(str(self.producto.getProveedor().getDescripcion())) self.winPrincipal.sbCantidad_p.setValue(int(self.producto.getCantidad())) self.winPrincipal.sbCantidadMin_p.setValue(int(self.producto.getCantidadMinima())) self.winPrincipal.txtRubro_p.setText(str(self.producto.getRubro().getRubro())) self.winPrincipal.txtMarca_p.setText(str(self.producto.getMarca().getMarca())) if self.producto.getEstado() == 1: self.winPrincipal.cbEstado_p.setCurrentIndex(0) else: self.winPrincipal.cbEstado_p.setCurrentIndex(1) if self.producto.getGenero() == 'F': self.winPrincipal.rbFemenino_p.setChecked(True) else: self.winPrincipal.rbMasculino_p.setChecked(True) def validar(self): mensaje='' if self.winPrincipal.txtNombre_p.text() == '': mensaje= "Falta ingresar Nombre" elif self.winPrincipal.txtPrecioCompra_p.text() =='': mensaje= "Falta ingresar Precio de Compra" elif self.winPrincipal.txtPrecioVenta_p.text() =='': mensaje= "Falta ingresar Precio de Venta" elif self.completerProveedor.currentCompletion() =='' or self.completerProveedor.currentRow() == 0: mensaje= "Falta ingresar un Proveedor" elif self.completerMarca.currentCompletion() == '' or self.completerMarca.currentRow() == 0: mensaje = "Falta seleccionar la marca" elif self.completerRubro.currentCompletion() == '' or self.completerRubro.currentRow() == 0: mensaje = 'Falta seleccionar el rubro' return mensaje def setCompleterMarca(self): listMarcas = self.conexionProducto.listMarcas() self.completerMarca = QCompleter(listMarcas) self.completerMarca.setCaseSensitivity(QtCore.Qt.CaseInsensitive) self.winPrincipal.txtMarca_p.setCompleter(self.completerMarca) def setCompleterRubro(self): listRubros = self.conexionProducto.listRubro() self.completerRubro = QCompleter(listRubros) self.completerRubro.setCaseSensitivity(QtCore.Qt.CaseInsensitive) self.winPrincipal.txtRubro_p.setCompleter(self.completerRubro) def setCompleterProveedor(self): listProveedores = self.conexionProducto.listProveedor() self.completerProveedor = QCompleter(listProveedores) pass self.completerProveedor.setCaseSensitivity(QtCore.Qt.CaseInsensitive) self.winPrincipal.txtProveedor_p.setCompleter(self.completerProveedor)
class PestaniaTransacciones(): def __init__(self, winPrincipal): self.conexionTransacciones = ConexionTransacciones() self.winPrincipal = winPrincipal self.cliente = Cliente() self.proveedor = Proveedor() self.producto = Producto() self.tipoTransaccion = "VENTA" self.configInit() def configInit(self): self.winPrincipal.rbVenta_t.clicked.connect(self.onClickVenta) self.winPrincipal.rbCompra_t.clicked.connect(self.onClickCompra) self.winPrincipal.btnSumarProducto_t.clicked.connect(self.agregarTransaccion) self.winPrincipal.btnRestarProducto_t.clicked.connect(self.restarTransaccion) self.winPrincipal.btnAceptar_t.clicked.connect(self.onClickAceptar) self.winPrincipal.btnCancelar_t.clicked.connect(self.onClickCancelar) self.winPrincipal.tvClientes_t.setSortingEnabled(True) self.winPrincipal.tvClientes_t.setMouseTracking(True) self.winPrincipal.tvClientes_t.setSelectionBehavior(QAbstractItemView.SelectRows) self.winPrincipal.tvProductos_t.setSortingEnabled(True) self.winPrincipal.tvProductos_t.setMouseTracking(True) self.winPrincipal.tvProductos_t.setSelectionBehavior(QAbstractItemView.SelectRows) self.winPrincipal.tvDetalleTransaccion_t.setSortingEnabled(True) self.winPrincipal.tvDetalleTransaccion_t.setMouseTracking(True) self.winPrincipal.tvDetalleTransaccion_t.setSelectionBehavior(QAbstractItemView.SelectRows) self.winPrincipal.btnSumarProducto_t.setEnabled(False) self.winPrincipal.btnRestarProducto_t.setEnabled(False) self.winPrincipal.btnCancelar_t.setEnabled(False) self.winPrincipal.btnAceptar_t.setEnabled(False) self.winPrincipal.txtFilterCliente_t.setFocus(True) self.winPrincipal.txtFilterCliente_t.returnPressed.connect(self.searchPeople) self.winPrincipal.txtFilterProducto_t.returnPressed.connect(self.searchProduct) def finish(self): self.winPrincipal.btnAceptar_t.disconnect() self.winPrincipal.btnCancelar_t.disconnect() self.winPrincipal.btnRestarProducto_t.disconnect() self.winPrincipal.btnSumarProducto_t.disconnect() self.winPrincipal.rbVenta_t.disconnect() self.winPrincipal.rbCompra_t.disconnect() def searchProduct(self): if self.winPrincipal.txtFilterProducto_t.hasFocus() is True: self.cargarTablaProductos() def searchPeople(self): if self.winPrincipal.txtFilterCliente_t.hasFocus() is True: if self.winPrincipal.rbCompra_t.isChecked() is True: self.cargarTablaProveedores() else: self.cargarTablaClientes() def onClickAceptar(self): listTransaccion = list(self.winPrincipal.tvDetalleTransaccion_t.model().mylist).copy() subNom = "" estado = 0 if self.winPrincipal.cbEstado_t.isChecked() is True: estado = 1 numRecibo = 0 if self.tipoTransaccion == "VENTA": numRecibo = self.conexionTransacciones.cargarTransaccionVenta(listTransaccion, self.cliente, estado) subNom = 'VNT' elif self.tipoTransaccion == "COMPRA": numRecibo = self.conexionTransacciones.cargarTransaccionCompra(listTransaccion, self.proveedor, estado) subNom = 'CMP' alert = QDialog() confirm = QMessageBox.question(alert, "Mensaje", "¿ Desea generar Recibo ?", QMessageBox.Yes, QMessageBox.No) if confirm == QMessageBox.Yes: self.createFactura(listTransaccion, subNom, numRecibo) self.limpiarCampos() def createFactura(self, listTransaccion, subNom, idRecibo): hoy = str(datetime.datetime.now().year) + str(datetime.datetime.now().month) + str(datetime.datetime.now().day) + str(datetime.datetime.now().hour) + str(datetime.datetime.now().minute) + str(datetime.datetime.now().second) nombrePdf = '../archivos/' + str(hoy + subNom) + '.pdf' listTransaccionTable = "" for transaccion in listTransaccion: listTransaccionTable += """ <tr height="80"> <td width="10%" align="center" > <br>""" + str(transaccion[1]) + """<br> </td> <td width="20%" > <br> """ + str(transaccion[3]) + """<br> </td> <td width="50%" > <br> """ + str(transaccion[4]) + """<br> </td> <td width="10%" align="right" > <br> $ """ + str(transaccion[5]) + """ <br> </td> <td width="10%" align="right" > <br> $ """ + str( int(transaccion[1]) * float(transaccion[5])) + """ <br> </td> </tr> """ nombre = "" apellido = "" if(self.tipoTransaccion == "VENTA"): nombre = self.cliente.getNombre() apellido = self.cliente.getApellido() elif(self.tipoTransaccion == "COMPRA"): nombre = self.proveedor.getNombre() apellido = self.proveedor.getDescripcion() total = self.winPrincipal.lblTotal.text() fecha = str(datetime.datetime.now()) html = """ <table width="600"> <tr width="600" color="#000000"> <td width="80%"> Perfumeria La que vende perfumes <br> LABOULAYE, CORDOBA, ARGENTINA <br> TEL: 0351-111111 <br> MAIL: [email protected] <br> </td> <td width="20%" align="right"> <IMG SRC="kde1.png"> </td> </tr> </table> _______________________________________________________________________________________________________ <p> DATOS DEL CLIENTE: </p> <br> <table> <tr> <td> NOMBRE: """+ nombre +""" <br> APELLIDO: """ + apellido + """ <br> </td> <td> </td> </tr> </table> <br> _______________________________________________________________________________________________________ <br> <p> DETALLES DE LA COMPRA: </p> <br> <table width="600" height="0" style="border-color: black; border-width: 0.5px; border-spacing: 0;"> <tr style=" background-color: gray; border-style: inset;"> <td width="10%" align="center" valign="middle"> <b> CANT </b> </td> <td width="20%" align="center" valign="middle"> <b> PRODUCTO </b> </td> <td width="50%" align="center" valign="middle"> <b> DESCRIPCION </b> </td> <td width="10%" align="center" valign="middle"> <b> PREC <br>UNIT </b> </td> <td width="10%" align="center" valign="middle"> <b> PREC <br>TOT </b> </td> </tr> </table> <br> <br> <br> <br> <table height="350" width="600" style="border-color: gray; border-width: .4px; border-collapse: collapse;"> """ + listTransaccionTable + """ </table> <br> <br> <table width="600" border="0.5" height="0" style="border-color: black; border-width: 0.5px; border-spacing: 0;"> <tr > <td width="90%" align="right"> <br> TOTAL.................................................................................................................. <br> </td> <td width="10%" align="center"> <br> $ """ + total + """<br> </td> </tr> </table> <br> <br> <br> <p width="600" align="center" style=" font-size: 10; " > Por cualquier consulta, sobre este recibo, dirigirse al local que se encuentra ubicado en la calle independencia 450. <br> O Comunicarse a los telefonos 03382-123123123 / 4231231 </p> <br> <br> <br> <br> <br> _______________________________________________________________________________________________________ <br> <table width="600"> <tr> <td align="right" width="80%"> FECHA/HORA : """+ fecha + """ </td> <td align="right"> N° : """+ str(idRecibo) +""" </td> </tr> </table> _______________________________________________________________________________________________________ """ doc = QTextDocument() doc.setHtml(html) #doc.setDefaultStyleSheet(style) printer = QPrinter() printer.setOutputFileName(nombrePdf) printer.setOutputFormat(QPrinter.PdfFormat) doc.print(printer) printer.newPage() url = QUrl url = QUrl(nombrePdf) QDesktopServices.openUrl(url) """ printPdf = QPrinter() printPdf.setOutputFormat(QPrinter.NativeFormat) questionPrint = QPrintDialog(printPdf, self.winPrincipal) if questionPrint.exec() == QPrintDialog.accept(printPdf): doc.print(printPdf) alert = QDialog() confirm = QMessageBox.question(alert, "Mensaje", "¿ Desea generar factura ?", QMessageBox.Yes, QMessageBox.No) if confirm == QMessageBox.Yes: #openPdf = QPrintDialog(printPdf, self.winPrincipal) #openPdf.setWindowTitle("Recibo") """ def limpiarCampos(self): self.winPrincipal.tvClientes_t.setModel(None) self.winPrincipal.tvDetalleTransaccion_t.setModel(None) self.winPrincipal.tvProductos_t.setModel(None) self.winPrincipal.lblTotal.setText('0.00') self.winPrincipal.sbCantidadProducto_t.setValue(0) self.winPrincipal.rbCompra_t.setEnabled(True) self.winPrincipal.rbVenta_t.setEnabled(True) self.winPrincipal.txtFilterCliente_t.setText('') self.winPrincipal.txtFilterProducto_t.setText('') self.winPrincipal.btnAceptar_t.setEnabled(False) self.winPrincipal.btnCancelar_t.setEnabled(False) self.winPrincipal.txtFilterCliente_t.setFocus(True) def onClickCancelar(self): alert = QDialog() confirm = QMessageBox.question(alert, "Mensaje", "¿ Desea cancelar la transaccion ?", QMessageBox.Yes, QMessageBox.No) if confirm == QMessageBox.Yes: self.limpiarCampos() def cargarTablaClientes(self): parameter = self.winPrincipal.txtFilterCliente_t.text() typeParameter = '' if self.winPrincipal.cbFilterCliente_t.currentText() == 'Apellido': typeParameter = 'c.apellido' elif self.winPrincipal.cbFilterCliente_t.currentText() == 'Nombre': typeParameter = 'p.nombre' listaClientes = self.conexionTransacciones.selectClientes(typeParameter, parameter) if len(listaClientes) > 0: header = ['ID','Apellido','Nombre','Email'] tablaModel = MyTableModel(self.winPrincipal.tvClientes_t, listaClientes, header) #tablaModel.setHeaderData(3, QtCore.Qt.Horizontal , 'Email', QtCore.Qt.AlignRight) #index = QModelIndex() #index.data(2) #index.column() #tablaModel.setData(index, QtCore.QVariant(QtCore.Qt.AlignHCenter), QtCore.Qt.TextAlignmentRole) self.winPrincipal.tvClientes_t.setModel(tablaModel) self.winPrincipal.tvClientes_t.selectionModel().currentChanged.connect(self.changeSelectedTable) #self.winPrincipal.tvClientes_t.model().headerData(2, QtCore.Qt.Horizontal, QtCore.Qt.AlignRight) self.winPrincipal.tvClientes_t.setColumnHidden(0, True) self.winPrincipal.tvClientes_t.setColumnWidth(1, 130) self.winPrincipal.tvClientes_t.setColumnWidth(2, 130) self.winPrincipal.tvClientes_t.setColumnWidth(3, 150) else: self.winPrincipal.tvClientes_t.setModel(None) def cargarTablaProveedores(self): parameter = self.winPrincipal.txtFilterCliente_t.text() typeParameter = '' if self.winPrincipal.cbFilterCliente_t.currentText() == 'Apellido': typeParameter = 'prov.descripcion' elif self.winPrincipal.cbFilterCliente_t.currentText() == 'Nombre': typeParameter = 'p.nombre' listProveedores = self.conexionTransacciones.selectProveedores(typeParameter, parameter) if len(listProveedores) > 0: header = ['ID', 'Descripcion', 'Nombre', 'Email'] tableModel = MyTableModel(self.winPrincipal.tvClientes_t, listProveedores, header) self.winPrincipal.tvClientes_t.setModel(tableModel) self.winPrincipal.tvClientes_t.selectionModel().currentChanged.connect(self.changeSelectedTable) self.winPrincipal.tvClientes_t.setColumnHidden(0, True) self.winPrincipal.tvClientes_t.setColumnWidth(1, 130) self.winPrincipal.tvClientes_t.setColumnWidth(2, 130) self.winPrincipal.tvClientes_t.setColumnWidth(3, 150) else: self.winPrincipal.tvClientes_t.setModel(None) def changeSelectedTable(self, selected, deselected): listPersonas = selected.model().mylist personaSelected = () personaSelected = tuple(listPersonas[selected.row()]) self.personaSelectedRow = selected.row() if(self.tipoTransaccion == "VENTA"): self.cliente = Cliente() self.cliente.setIdCliente(int(personaSelected[0])) self.cliente.setApellido(str(personaSelected[1])) self.cliente.setNombre(str(personaSelected[2])) self.cliente.setEmail(str(personaSelected[3])) elif(self.tipoTransaccion == "COMPRA"): self.proveedor = Proveedor() self.proveedor.setIdProveedor(int(personaSelected[0])) self.proveedor.setDescripcion(str(personaSelected[1])) self.proveedor.setNombre(str(personaSelected[2])) self.proveedor.setEmail(str(personaSelected[3])) self.activateButton() def cargarTablaProductos(self): parameter = self.winPrincipal.txtFilterProducto_t.text() typeParameter = '' if self.winPrincipal.cbFilterProducto_t.currentText() == 'Nombre': typeParameter = 'p.nombre' elif self.winPrincipal.cbFilterProducto_t.currentText() == 'Marca': typeParameter = 'm.descripcion' elif self.winPrincipal.cbFilterProducto_t.currentText() == 'Precio de Venta': typeParameter = 'p.pVenta' else: typeParameter = 'p.pCompra' parameterTransaccion = 'CMP' if self.tipoTransaccion == "VENTA": parameterTransaccion = 'VNT' listProducto = self.conexionTransacciones.selectProductos(typeParameter, parameter, parameterTransaccion) if len(listProducto) > 0: header = ['ID', 'Nombre', 'Descripcion', 'Cant', 'P.Compra', 'P.Venta', 'Marca'] tableModel = MyTableModel(self.winPrincipal.tvProductos_t, listProducto, header) self.winPrincipal.tvProductos_t.setModel(tableModel) self.winPrincipal.tvProductos_t.selectionModel().currentChanged.connect(self.changeSelectedTableProducto) self.winPrincipal.tvProductos_t.setColumnHidden(0, True) self.winPrincipal.tvProductos_t.setColumnWidth(1, 150) self.winPrincipal.tvProductos_t.setColumnWidth(2, 200) self.winPrincipal.tvProductos_t.setColumnWidth(3, 50) self.winPrincipal.tvProductos_t.setColumnWidth(4, 80) self.winPrincipal.tvProductos_t.setColumnWidth(5, 80) self.winPrincipal.tvProductos_t.setColumnWidth(6, 100) else: self.winPrincipal.tvProductos_t.setModel(None) def changeSelectedTableProducto(self, selected, deselected): listProductos = selected.model().mylist productoSelected = () productoSelected = tuple(listProductos[selected.row()]) self.productoSelected = selected.row() self.producto = Producto() self.producto.setIdProducto(int(productoSelected[0])) self.producto.setNombre(str(productoSelected[1])) self.producto.setDescripcion(str(productoSelected[2])) self.producto.setCantidad(int(productoSelected[3])) self.producto.setPrecioCompra(float(productoSelected[4])) self.producto.setPrecioVenta(float(productoSelected[5])) self.winPrincipal.btnSumarProducto_t.setEnabled(True) def agregarTransaccion(self): cantProducto = int(self.winPrincipal.sbCantidadProducto_t.value()) stateProduct = True if self.tipoTransaccion == "VENTA" and cantProducto > self.producto.getCantidad(): stateProduct = False if cantProducto == 0: stateProduct = False if stateProduct is True: #and self.validateProduct() is True: modelListTransaccion = self.winPrincipal.tvDetalleTransaccion_t.model() header = ['ID', 'Cantidad','idProducto' ,'Producto', 'Descripcion', 'Precio Unit', 'Precio Tot' ] precio_unitario = 0 if(self.tipoTransaccion == "VENTA"): precio_unitario = float(self.producto.getPrecioVenta()) elif(self.tipoTransaccion == "COMPRA"): precio_unitario = float(self.producto.getPrecioCompra()) if modelListTransaccion is not None: listTabPro = list(self.winPrincipal.tvDetalleTransaccion_t.model().mylist) if len(listTabPro) > 0 or listTabPro is not None: tuplaProd = ('0', str(cantProducto), str(self.producto.getIdProducto()), str(self.producto.getNombre()), str(self.producto.getDescripcion()), str(precio_unitario), str(cantProducto * precio_unitario) ) listTabPro.append(tuplaProd) tupleTable = tuple(listTabPro) tableModel = MyTableModel(self.winPrincipal, tupleTable , header) self.winPrincipal.tvDetalleTransaccion_t.setModel(tableModel) else: lista = [] tuplaProd = ('0', str(cantProducto), str(self.producto.getIdProducto()), str(self.producto.getNombre()), str(self.producto.getDescripcion()), str(precio_unitario), str(cantProducto * precio_unitario) ) lista.append(tuplaProd) tableModel = MyTableModel(self.winPrincipal, lista , header) self.winPrincipal.tvDetalleTransaccion_t.setModel(tableModel) self.winPrincipal.tvDetalleTransaccion_t.setColumnHidden(0, True) self.winPrincipal.tvDetalleTransaccion_t.setColumnWidth(1, 80) self.winPrincipal.tvDetalleTransaccion_t.setColumnHidden(2, True) self.winPrincipal.tvDetalleTransaccion_t.setColumnWidth(3, 200) self.winPrincipal.tvDetalleTransaccion_t.setColumnWidth(4, 653) self.winPrincipal.tvDetalleTransaccion_t.setColumnWidth(5, 80) self.winPrincipal.tvDetalleTransaccion_t.setColumnWidth(6, 80) self.winPrincipal.rbCompra_t.setEnabled(False) self.winPrincipal.rbVenta_t.setEnabled(False) #self.total = (cantProducto * self.producto.getPrecioVenta()) + self.total #self.winPrincipal.lblTotal.setText(str(self.total)) self.winPrincipal.btnCancelar_t.setEnabled(True) self.winPrincipal.btnSumarProducto_t.setEnabled(False) self.winPrincipal.sbCantidadProducto_t.setValue(0) self.winPrincipal.tvDetalleTransaccion_t.selectionModel().currentChanged.connect(self.changeSelectedTableTransaccion) total = float(self.winPrincipal.lblTotal.text()) total +=+ (cantProducto * precio_unitario) self.winPrincipal.lblTotal.setText("{0:.2f}".format(total)) self.activateButton() #self.calcularTotal() else: alert = QDialog() QMessageBox.information(alert,"ERROR", "La cantidad especificada es invalida") def activateButton(self): hasP = False if self.proveedor.getIdProveedor() != 0 or self.cliente.getIdCliente() != 0: hasP = True if self.winPrincipal.tvDetalleTransaccion_t.model() is not None and hasP is True: self.winPrincipal.btnAceptar_t.setEnabled(True) def validateProduct(self): validate = True if self.winPrincipal.tvDetalleTransaccion_t.model() is not None: listTransacciones = list(self.winPrincipal.tvDetalleTransaccion_t.model().mylist).copy() header = ('ID', 'Cantidad','idProducto' ,'Producto', 'Descripcion', 'Precio Unit', 'Precio Tot') listTransacciones.append(header) #cant = int(len(list(self.winPrincipal.tvDetalleTransaccion_t.model().mylist).copy())) tuple = ("", listTransacciones[0][1], listTransacciones[0][2], listTransacciones[0][3], listTransacciones[0][4], listTransacciones[0][5], listTransacciones[0][6]) listTransacciones[0] = tuple for transaccion in listTransacciones: if str(transaccion[2]) == str(self.producto.getIdProducto()): validate = False """ for i in range(cant): if listTransacciones[i][2] == str(self.producto.getIdProducto()): validate = False """ return validate def restarTransaccion(self): listTransacciones = list(self.winPrincipal.tvDetalleTransaccion_t.model().mylist).copy() header = ['ID', 'Cantidad','idProducto' ,'Producto', 'Descripcion', 'Precio Unit', 'Precio Tot' ] listTransacciones.remove(self.transaccionSelected) if len(listTransacciones) < 1: self.winPrincipal.btnAceptar_t.setEnabled(False) self.winPrincipal.btnCancelar_t.setEnabled(False) self.winPrincipal.tvDetalleTransaccion_t.setModel(None) else: tableTelModel = MyTableModel(self.winPrincipal, listTransacciones, header) self.winPrincipal.tvDetalleTransaccion_t.setModel(tableTelModel) self.winPrincipal.tvDetalleTransaccion_t.selectionModel().currentChanged.connect(self.changeSelectedTableTransaccion) total = float(self.winPrincipal.lblTotal.text()) total -= float(self.transaccionSelected[6]) self.winPrincipal.lblTotal.setText("{0:.2f}".format(total)) self.winPrincipal.btnRestarProducto_t.setEnabled(False) #self.calcularTotal() def changeSelectedTableTransaccion(self, selected, deselected): listTransacciones = selected.model().mylist self.transaccionSelected = () self.transaccionSelected = listTransacciones[selected.row()] self.telefonoSelectedRow = selected.row() self.winPrincipal.btnRestarProducto_t.setEnabled(True) def onClickVenta(self): self.winPrincipal.label2_t.setText('Cliente') self.tipoTransaccion = "VENTA" self.limpiarCampos() def onClickCompra(self): self.winPrincipal.label2_t.setText('Proovedor') self.tipoTransaccion = "COMPRA" self.limpiarCampos() def selecClientes(self): if self.winPrincipal.cbFilterCliente_t.currentText() == 'Apellido': tipoParametro = 'c.apellido' elif self.winPrincipal.cbFilterCliente_t.currentText() == 'Email': tipoParametro = 'p.email' parametro = self.winPrincipal.txtFilterCliente_t.text() self.conexionTransacciones.selectClientes(tipoParametro, parametro) def calcularTotal(self): listTransacciones = [] listTransacciones = list(self.winPrincipal.tvDetalleTransaccion_t.model().mylist).copy() tupleParche = listTransacciones[0] tupleParche = ('1', tupleParche[1], tupleParche[2], tupleParche[3], tupleParche[4], tupleParche[5], tupleParche[6]) listTransacciones[0] = tupleParche if len(listTransacciones) > 0: total = 0 for transaccion in listTransacciones: total = total + float(transaccion[6]) self.winPrincipal.lblTotal.setText(str(total)) else: self.winPrincipal.lblTotal.setText('0,00')
class WindowNotification(): def __init__(self): self.winNot = uic.loadUi('../Vista/windowListNotify.ui') self.producto = Producto() self.conexionGeneral = ConexionGenerales() self.cargarTabla() self.winNot.btnSalir.clicked.connect(self.close) self.winNot.btnDesactivar.clicked.connect(self.desactivarProducto) self.winNot.tvDetalle.setSortingEnabled(True) self.winNot.tvDetalle.setMouseTracking(True) self.winNot.tvDetalle.setSelectionBehavior( QAbstractItemView.SelectRows) self.winNot.btnDesactivar.setEnabled(False) self.winNot.btnGenerarPdf.clicked.connect(self.generateList) self.winNot.exec() #sys.executable(self.winNot.exec_()) def cargarTabla(self): self.listProducto = self.conexionGeneral.selectProductoStock() header = ['ID', 'Nombre', 'Cant', 'Cant Min'] if len(self.listProducto) > 0: tableModel = MyTableModel(self.winNot.tvDetalle, self.listProducto, header) self.winNot.tvDetalle.setModel(tableModel) self.winNot.tvDetalle.selectionModel().currentChanged.connect( self.changeSelectedTable) self.winNot.tvDetalle.setColumnHidden(0, True) self.winNot.tvDetalle.setColumnWidth(1, 128) self.winNot.tvDetalle.setColumnWidth(2, 70) self.winNot.tvDetalle.setColumnWidth(3, 70) else: self.winNot.btnGenerarPdf.setEnabled(False) def changeSelectedTable(self, selected, deselected): listProductos = selected.model().mylist productoSelected = () productoSelected = tuple(listProductos[selected.row()]) self.productoSelected = selected.row() self.producto = Producto() self.producto.setIdProducto(int(productoSelected[0])) self.producto.setNombre(str(productoSelected[1])) self.producto.setCantidad(int(productoSelected[2])) self.producto.setCantidadMinima(int(productoSelected[3])) self.winNot.btnDesactivar.setEnabled(True) def close(self): alert = QDialog() confirm = QMessageBox.question( alert, "Mensaje", "¿ Desea salir de la ventana de notificaciones ?", QMessageBox.Yes, QMessageBox.No) if confirm == QMessageBox.Yes: self.winNot.close() def desactivarProducto(self): self.conexionGeneral.changeStateProduct(self.producto) self.winNot.btnDesactivar.setEnabled(False) self.cargarTabla() def generateList(self): hoy = str(datetime.datetime.now().year) + str( datetime.datetime.now().month) + str( datetime.datetime.now().day) + str( datetime.datetime.now().hour) + str( datetime.datetime.now().minute) + str( datetime.datetime.now().second) nombrePdf = '../archivos/' + str(hoy + 'LIST') + '.pdf' listTable = "" for lista in self.listProducto: listTable += """ <tr height="80"> <td width="60%" align="left" > <br>""" + str(lista[1]) + """<br> </td> <td width="20%" align="center"> <br> """ + str( lista[3]) + """<br> </td> <td width="20%" align="center"> <br> """ + str( lista[2]) + """<br> </td> </tr> """ fecha = str(datetime.datetime.now()) html = """ <table width="600"> <tr width="600" color="#000000"> <td width="80%"> </td> <td width="20%" align="right"> <IMG SRC="kde1.png"> </td> </tr> </table> <hr> <br> <p> LISTADO DE PRODUCTOS SIN STOCK : </p> <br> <table width="600" height="0" style="border-color: black; border-width: 0.5px; border-spacing: 0;"> <tr style=" background-color: gray; border-style: inset;"> <td width="60%" align="center" valign="middle"> <b> PRODUCTOS </b> </td> <td width="20%" align="center" valign="middle"> <b> CANTIDAD MINIMA </b> </td> <td width="20%" align="center" valign="middle"> <b> CANTIDAD </b> </td> </tr> </table> <br> <br> <table width="600" height="0" style="border-color: black; border-width: 0.5px; border-spacing: 0;"> """ + listTable + """ </table> <br> <br> <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> <br> <hr> <br> <table width="600"> <tr> <td align="right" width="100%"> FECHA/HORA : """ + fecha + """ </td> </tr> </table> <hr> """ doc = QTextDocument() doc.setHtml(html) printer = QPrinter() printer.setOutputFileName(nombrePdf) printer.setOutputFormat(QPrinter.PdfFormat) doc.print(printer) printer.newPage() url = QUrl url = QUrl(nombrePdf) QDesktopServices.openUrl(url)
def __init__(self): self.conexion = Conexion() self.producto = Producto() self.proveedor = Proveedor() self.rubro = Rubro() self.marca = Marca()
def __init__(self): self.conexion = Conexion() self.producto = Producto() proveedor = Proveedor() cliente = Cliente()
def __init__(self): self.conexion = Conexion() self.producto = Producto()
class WindowNotification(): def __init__(self): self.winNot = uic.loadUi('../Vista/windowListNotify.ui') self.producto = Producto() self.conexionGeneral = ConexionGenerales() self.cargarTabla() self.winNot.btnSalir.clicked.connect(self.close) self.winNot.btnDesactivar.clicked.connect(self.desactivarProducto) self.winNot.tvDetalle.setSortingEnabled(True) self.winNot.tvDetalle.setMouseTracking(True) self.winNot.tvDetalle.setSelectionBehavior(QAbstractItemView.SelectRows) self.winNot.btnDesactivar.setEnabled(False) self.winNot.btnGenerarPdf.clicked.connect(self.generateList) self.winNot.exec() #sys.executable(self.winNot.exec_()) def cargarTabla(self): self.listProducto = self.conexionGeneral.selectProductoStock() header = ['ID', 'Nombre', 'Cant', 'Cant Min'] if len(self.listProducto) > 0: tableModel = MyTableModel(self.winNot.tvDetalle, self.listProducto, header) self.winNot.tvDetalle.setModel(tableModel) self.winNot.tvDetalle.selectionModel().currentChanged.connect(self.changeSelectedTable) self.winNot.tvDetalle.setColumnHidden(0, True) self.winNot.tvDetalle.setColumnWidth(1, 128) self.winNot.tvDetalle.setColumnWidth(2, 70) self.winNot.tvDetalle.setColumnWidth(3, 70) else: self.winNot.btnGenerarPdf.setEnabled(False) def changeSelectedTable(self, selected, deselected): listProductos = selected.model().mylist productoSelected = () productoSelected = tuple(listProductos[selected.row()]) self.productoSelected = selected.row() self.producto = Producto() self.producto.setIdProducto(int(productoSelected[0])) self.producto.setNombre(str(productoSelected[1])) self.producto.setCantidad(int(productoSelected[2])) self.producto.setCantidadMinima(int(productoSelected[3])) self.winNot.btnDesactivar.setEnabled(True) def close(self): alert = QDialog() confirm = QMessageBox.question(alert, "Mensaje", "¿ Desea salir de la ventana de notificaciones ?", QMessageBox.Yes, QMessageBox.No) if confirm == QMessageBox.Yes: self.winNot.close() def desactivarProducto(self): self.conexionGeneral.changeStateProduct(self.producto) self.winNot.btnDesactivar.setEnabled(False) self.cargarTabla() def generateList(self): hoy = str(datetime.datetime.now().year) + str(datetime.datetime.now().month) + str(datetime.datetime.now().day) + str(datetime.datetime.now().hour) + str(datetime.datetime.now().minute) + str(datetime.datetime.now().second) nombrePdf = '../archivos/' + str(hoy + 'LIST') + '.pdf' listTable = "" for lista in self.listProducto: listTable += """ <tr height="80"> <td width="60%" align="left" > <br>""" + str(lista[1]) + """<br> </td> <td width="20%" align="center"> <br> """ + str(lista[3]) + """<br> </td> <td width="20%" align="center"> <br> """ + str(lista[2]) + """<br> </td> </tr> """ fecha = str(datetime.datetime.now()) html = """ <table width="600"> <tr width="600" color="#000000"> <td width="80%"> </td> <td width="20%" align="right"> <IMG SRC="kde1.png"> </td> </tr> </table> <hr> <br> <p> LISTADO DE PRODUCTOS SIN STOCK : </p> <br> <table width="600" height="0" style="border-color: black; border-width: 0.5px; border-spacing: 0;"> <tr style=" background-color: gray; border-style: inset;"> <td width="60%" align="center" valign="middle"> <b> PRODUCTOS </b> </td> <td width="20%" align="center" valign="middle"> <b> CANTIDAD MINIMA </b> </td> <td width="20%" align="center" valign="middle"> <b> CANTIDAD </b> </td> </tr> </table> <br> <br> <table width="600" height="0" style="border-color: black; border-width: 0.5px; border-spacing: 0;"> """ + listTable + """ </table> <br> <br> <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> <br> <hr> <br> <table width="600"> <tr> <td align="right" width="100%"> FECHA/HORA : """+ fecha + """ </td> </tr> </table> <hr> """ doc = QTextDocument() doc.setHtml(html) printer = QPrinter() printer.setOutputFileName(nombrePdf) printer.setOutputFormat(QPrinter.PdfFormat) doc.print(printer) printer.newPage() url = QUrl url = QUrl(nombrePdf) QDesktopServices.openUrl(url)