Example #1
0
    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()
Example #4
0
 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)
Example #6
0
    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()