def confirmarVenta(self, paga_con, tipo_venta): total = self.obtenerTotal() # crea el objeto para la actual venta unaVenta = self.almacen.add(Venta(total, paga_con, tipo_venta)) obj_renglones = [] try: # crea los objetos para cada uno # de los renglones de la venta from renglon import Renglon for producto in self.productosActuales(): cantidad = self.obtenerCantidadProducto(producto) # descuenta del stock del producto la cantidad actual # si este producto utiliza inventario if producto.usa_inventario: producto.cantidad -= cantidad self.almacen.commit() # crea el objeto renglon renglon = [ unaVenta, producto.descripcion, producto.precio_venta, cantidad ] unRenglon = self.renglonManager.add(*renglon) obj_renglones.append(unRenglon) # almacena los objetos self.almacen.flush() self.almacen.commit() print 'Venta realizada satisfactoriamente...' self.renglones = [] return True except Exception, msg: print 'confirmarVenta() > ', msg self.almacen.remove(unaVenta) [self.almacen.remove(renglon) for renglon in obj_renglones] return False
def __init__(self): QDialog.__init__(self) self.setupUi(self) self.resize(1024, 728) self.line_codigo.setFocus() self.venta = Venta(-1) self.venta.nueva_venta(1) self.line_codigo.returnPressed.connect(self.agregar_producto) self.fecha = QDate.currentDate().toString() self.lbl_fecha.setText(self.fecha) self.hora = QTime.currentTime().toString() self.lbl_hora.setText(self.hora) self.timer = QTimer() self.timer.setInterval(500) self.timer.timeout.connect(self.actualizar_hora) self.timer.start() self.table_productos.setColumnCount(6) cabecera = (u"Código", "Producto", "Precio", "#", "Dcto", "Subtotal") self.table_productos.setHorizontalHeaderLabels(cabecera) self.pb_pagar.clicked.connect(self.efectuar_venta) self.pb_buscar.clicked.connect(self.mostrar_buscar_productos) icon = QIcon() icon.addPixmap(QPixmap("imagenes/enviar.png"), QIcon.Normal, QIcon.Off) self.pb_pagar.setIcon(icon) self.pb_buscar.setIcon(QIcon("imagenes/buscar.png")) self.pb_borrar.setIcon(QIcon("imagenes/borrar.png")) self.pb_pagar.setMinimumSize(10, 48) self.pb_borrar.setMinimumSize(10, 48) self.pb_buscar.setMinimumSize(10, 48) self.table_productos.setColumnWidth(0, 120) self.table_productos.setColumnWidth(1, 310) self.table_productos.setColumnWidth(2, 120) self.table_productos.setColumnWidth(3, 50) self.table_productos.setColumnWidth(4, 75) self.table_productos.setColumnWidth(5, 250) self.lbl_logo.setPixmap(QPixmap("imagenes/logo.png")) self.lbl_logo.setScaledContents(True) self.lbl_logo.setMinimumSize(617, 10) self.actualizar_productos() self.reproducir_video() self.usuario_id = 0 #self.vp_comercial.setMinimumSize(200, 150) style = """QDialog{background:white; border:solid; padding:10px} QCommandLinkButton{background:white}""" self.setStyleSheet(style) self.clb_cliente.clicked.connect(self.mostrar_clientes) self.pb_borrar.clicked.connect(self.eliminar_producto) self.clb_usuario.clicked.connect(self.logout)
def on_btnventa_clicked(self, boton): """ Método que llama al apartado de clientes :param boton: Parametro que recibe el metodo :return: None """ Venta()
def convertir(self, lista): for i in range(len(lista)): self.lista_diccionarios.append({}) objeto = Venta(lista[i]) objeto.setValores() a = 0 for j in range(len(lista[i])): self.lista_diccionarios[i].setdefault(self.lista_etiquetas[j], objeto.getValores()[j]) if lista[i][j] == "": a = 1 try: if (a == 1): raise miError else: self.imprimir(i) except miError: print( "\nError!!! Ocurrio un problema con la fuente de datos de la Operacion {}" .format(i + 1))
def actualizar_hora(self): global paso_producto self.hora = QTime.currentTime().toString() self.lbl_hora.setText(self.hora) if not self.venta.es_nueva: self.venta = Venta(-1) self.venta.cliente_id = 1 self.actualizar_productos() if not paso_producto == "": self.line_codigo.setText(self.line_codigo.text() + paso_producto) paso_producto = "" self.line_codigo.setFocus() self.actualizar_cliente(self.venta.cliente_id)
def convertir(self, lista): for i in range(len(lista)): self.lista_de_diccionarios.append({}) obj = Venta(lista[i]) obj.setValores() flag = 0 for j in range(len(self.lista_etiqueta)): if (obj.getValores()[j] == ""): flag = 1 self.lista_de_diccionarios[i].setdefault( self.lista_etiqueta[j], obj.getValores()[j]) try: if (flag == 1): raise miError else: self.imprimir(i) except miError: print( "**ERROR** Ocurrio un problema con la fuente de datos de la venta {}\n" .format(i + 1))
class ventana_punto_de_venta(QDialog, Ui_dialogo_pdeventa): def __init__(self): QDialog.__init__(self) self.setupUi(self) self.resize(1024, 728) self.line_codigo.setFocus() self.venta = Venta(-1) self.venta.nueva_venta(1) self.line_codigo.returnPressed.connect(self.agregar_producto) self.fecha = QDate.currentDate().toString() self.lbl_fecha.setText(self.fecha) self.hora = QTime.currentTime().toString() self.lbl_hora.setText(self.hora) self.timer = QTimer() self.timer.setInterval(500) self.timer.timeout.connect(self.actualizar_hora) self.timer.start() self.table_productos.setColumnCount(6) cabecera = (u"Código", "Producto", "Precio", "#", "Dcto", "Subtotal") self.table_productos.setHorizontalHeaderLabels(cabecera) self.pb_pagar.clicked.connect(self.efectuar_venta) self.pb_buscar.clicked.connect(self.mostrar_buscar_productos) icon = QIcon() icon.addPixmap(QPixmap("imagenes/enviar.png"), QIcon.Normal, QIcon.Off) self.pb_pagar.setIcon(icon) self.pb_buscar.setIcon(QIcon("imagenes/buscar.png")) self.pb_borrar.setIcon(QIcon("imagenes/borrar.png")) self.pb_pagar.setMinimumSize(10, 48) self.pb_borrar.setMinimumSize(10, 48) self.pb_buscar.setMinimumSize(10, 48) self.table_productos.setColumnWidth(0, 120) self.table_productos.setColumnWidth(1, 310) self.table_productos.setColumnWidth(2, 120) self.table_productos.setColumnWidth(3, 50) self.table_productos.setColumnWidth(4, 75) self.table_productos.setColumnWidth(5, 250) self.lbl_logo.setPixmap(QPixmap("imagenes/logo.png")) self.lbl_logo.setScaledContents(True) self.lbl_logo.setMinimumSize(617, 10) self.actualizar_productos() self.reproducir_video() self.usuario_id = 0 #self.vp_comercial.setMinimumSize(200, 150) style = """QDialog{background:white; border:solid; padding:10px} QCommandLinkButton{background:white}""" self.setStyleSheet(style) self.clb_cliente.clicked.connect(self.mostrar_clientes) self.pb_borrar.clicked.connect(self.eliminar_producto) self.clb_usuario.clicked.connect(self.logout) def mostrar_clientes(self): from ventanaClientes import ventana_clientes self.vmc = ventana_clientes(self.venta) self.vmc.show() def mostrar_buscar_productos(self): self.vbpp = ventana_buscar_producto() self.vbpp.show() def reproducir_video(self): #self.vp_comercial.play(phonon.Phonon.MediaSource("video.mp4")) pass def actualizar_cliente(self, cliente_id): self.venta.cliente_id = cliente_id query = QSqlQuery() sql = "select nombre from clientes where cliente_id=%d" % self.venta.cliente_id if query.exec_(sql): query.next() nombre = query.value(0).toString() self.clb_cliente.setText("Cliente: " + nombre) self.venta.cliente = nombre def efectuar_venta(self): self.vpagar = ventana_pagar(self.venta) self.vpagar.show() def actualizar_usuario(self): query = QSqlQuery() sql = "select nombre from usuarios where usuario_id=%d" % self.usuario_id if query.exec_(sql): query.next() nombre = query.value(0).toString() self.clb_usuario.setText("Atiende: %s" % nombre) self.venta.usuario = nombre self.venta.usuario_id = self.usuario_id self.actualizar_cliente(self.venta.cliente_id) def actualizar_hora(self): global paso_producto self.hora = QTime.currentTime().toString() self.lbl_hora.setText(self.hora) if not self.venta.es_nueva: self.venta = Venta(-1) self.venta.cliente_id = 1 self.actualizar_productos() if not paso_producto == "": self.line_codigo.setText(self.line_codigo.text() + paso_producto) paso_producto = "" self.line_codigo.setFocus() self.actualizar_cliente(self.venta.cliente_id) def agregar_producto(self): codigo = self.line_codigo.text() if len(codigo) < 3: self.line_codigo.clear() return cantidad = 1 if len(codigo.split('*')) == 1: cantidad = 1 else: cantidad = int(codigo.split('*')[0]) codigo = str(codigo.split('*')[1]) descuento = 0 if len(codigo.split('/')) == 2: descuento = int(codigo.split('/')[0]) codigo = str(codigo.split('/')[1]) if producto(codigo).existe: resultado = self.venta.agregar_producto(codigo, cantidad, descuento) if resultado == 0: gg = QMessageBox() gg.setText("Error al agregar producto, no existe o la cantidad excedio la existencia") gg.setStandardButtons(gg.Ok) gg.setWindowTitle("CopyTodo - Advertencia") gg.exec_() self.line_codigo.clear() self.line_codigo.setFocus() else: self.line_codigo.clear() self.line_codigo.setFocus() self.actualizar_productos() else: gg = QMessageBox() gg.setText("Producto no existe desea Agregarlo??") gg.setStandardButtons(gg.Ok | gg.Cancel) gg.setWindowTitle("CopyTodo - Producto Nuevo?") gg.exec_() if gg.result() == gg.Ok: self.vap = ventana_nuevo_producto() self.vap.line_codigo.setText(codigo) self.vap.line_codigo.setEnabled(False) self.vap.llamado = True self.vap.show() else: self.line_codigo.setFocus() self.line_codigo.clear() def actualizar_productos(self): numero_productos = len(self.venta.productos.keys()) self.table_productos.setRowCount(numero_productos) cont = 0 for i in self.venta.productos.keys(): g = self.venta.productos[i] qcod = QTableWidgetItem(g.codigo) self.table_productos.setItem(cont, 0, qcod) qnom = QTableWidgetItem(g.nombre) qpre = QTableWidgetItem(str(g.precio)) qcan = QTableWidgetItem(str(g.cantidad)) qdes = QTableWidgetItem(str(g.descuento)) qsub = QTableWidgetItem(str(g.subtotal)) self.table_productos.setItem(cont, 1, qnom) self.table_productos.setItem(cont, 2, qpre) self.table_productos.setItem(cont, 3, qcan) self.table_productos.setItem(cont, 4, qdes) self.table_productos.setItem(cont, 5, qsub) cont += 1 self.venta.actualizar_total() self.lbl_total.setText("$ " + str(self.venta.total)) if self.venta.total <= 0: self.pb_pagar.setEnabled(False) else: self.pb_pagar.setEnabled(True) def eliminar_producto(self): codigo = str(self.table_productos.itemAt(0, self.table_productos.currentIndex().row()).text()) self.venta.borrar_producto(codigo) self.actualizar_productos() def logout(self): from login import ventana_login self.vlo = ventana_login() self.vlo.show() self.close()