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()