Exemple #1
0
    def changeSelectedTable(self, selected, deselected):

        clienteList = selected.model().mylist
        clienteSelected = clienteList[selected.row()]
        self.cliente = Cliente()
        self.direccion = Direccion()
        self.cliente.setIdCliente(int(clienteSelected[0]))
        self.cliente.setApellido(clienteSelected[1])
        self.cliente.setNombre(clienteSelected[2])
        self.cliente.setEmail(clienteSelected[3])
        self.direccion = Direccion()
        self.direccion.setDireccion(clienteSelected[4])

        if clienteSelected[5] != None:
            self.direccion.setNumero(int(clienteSelected[5]))

        if clienteSelected[6] != None:
            self.direccion.setPiso(int(clienteSelected[6]))

        if clienteSelected[7] != None:
            self.direccion.setDpto(clienteSelected[7])

        self.direccion.setIdDireccion(int(clienteSelected[8]))
        self.cliente.setDireccion(self.direccion)

        self.cliente.setIdPersona(clienteSelected[9])

        self.winPrincipal.tvClientes_c.setRowHeight(deselected.row(), 28)
        self.winPrincipal.tvClientes_c.setRowHeight(selected.row(), 45)

        self.setCampos()
        self.winPrincipal.btnModificar_c.setEnabled(True)
        self.winPrincipal.btnBorrar_c.setEnabled(True)
        self.winPrincipal.tvTelefonos_c.setModel(None)
        self.cargarTablaTelefono()
    def __init__(self, winPrincipal):
        self.conexionPagos = ConexionPagos()
        self.winPrincipal = winPrincipal
        self.cliente = Cliente()
        self.proveedor = Proveedor()
        self.state = 'COBRANZA'

        self.configInit()
Exemple #3
0
 def __init__(self, winPrincipal):
     self.conexionTransacciones = ConexionTransacciones()
     self.winPrincipal = winPrincipal
     self.cliente = Cliente()
     self.proveedor = Proveedor()
     self.producto = Producto()
     self.tipoTransaccion = "VENTA"
     self.configInit()
Exemple #4
0
    def __init__(self, winPrincipal):
        self.winPrincipal = winPrincipal
        self.cliente = Cliente()
        self.conexionCliente = conexionCliente()
        self.conexionTelefono = conexionTelefono()

        self.listTelefonosInit = []

        self.estado = ""
        self.direccion = Direccion()

        self.configInit()
    def generarSaldos(self):
        validate = True
        if self.winPrincipal.chbTodos_saldos.isChecked() == False:
            if self.winPrincipal.rbProveedores_saldos.isChecked() == True:
                if self.proveedores is None:
                    validate = False
            else:
                if self.clientes is None:
                    validate = False

        if validate == True:
            if self.winPrincipal.chbTodos_saldos.isChecked() == True:
                if self.winPrincipal.rbProveedores_saldos.isChecked() == True:
                    listProveedores = self.conexionesGenerales.selectProveedor(
                        '')
                    contenido = ""
                    for proveedores in listProveedores:
                        self.proveedores = Proveedor()
                        self.proveedores.setIdProveedor(int(proveedores[0]))
                        self.proveedores.setDescripcion(str(proveedores[1]))
                        self.proveedores.setNombre(str(proveedores[2]))

                        contenido += self.generateTable(
                            'PROVEEDOR', self.proveedores)
                else:
                    listClientes = self.conexionesGenerales.selectCliente('')
                    contenido = ""
                    for clientes in listClientes:
                        self.clientes = Cliente()
                        self.clientes.setIdCliente(int(clientes[0]))
                        self.clientes.setApellido(str(clientes[1]))
                        self.clientes.setNombre(str(clientes[2]))

                        contenido += self.generateTable(
                            'CLIENTE', self.clientes)
            else:
                if self.winPrincipal.rbProveedores_saldos.isChecked() == True:
                    contenido = self.generateTable('PROVEEDOR',
                                                   self.proveedores)
                else:
                    contenido = self.generateTable('CLIENTE', self.clientes)

            self.generatePDF(contenido)
        else:
            alert = QDialog()
            confirm = QMessageBox.question(alert, "Mensaje",
                                           "Falta selecciona la/s persona/s.",
                                           QMessageBox.Ok)
    def __init__(self, winPrincipal):
        self.conexionTransacciones = ConexionTransacciones()
        self.winPrincipal = winPrincipal
        self.cliente = Cliente()

        self.cargarTabla()
        self.configInit()
 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 changeSelectedTable(self, selected, deselected):
        if self.winPrincipal.rbProveedores_saldos.isChecked() is True:
            proveedorList = selected.model().mylist
            proveedorSelected = proveedorList[selected.row()]

            self.proveedores = Proveedor()

            self.proveedores.setIdProveedor(int(proveedorSelected[0]))
            self.proveedores.setDescripcion(str(proveedorSelected[1]))
            self.proveedores.setNombre(str(proveedorSelected[2]))
        else:
            clienteList = selected.model().mylist
            clienteSelected = clienteList[selected.row()]

            self.clientes = Cliente()

            self.clientes = Cliente()
            self.clientes.setIdCliente(int(clienteSelected[0]))
            self.clientes.setApellido(str(clienteSelected[1]))
            self.clientes.setNombre(str(clienteSelected[2]))
    def changeSelectedTable(self, selected, deselected):
        if self.winPrincipal.rbProveedores_saldos.isChecked() is True:
            proveedorList = selected.model().mylist
            proveedorSelected = proveedorList[selected.row()]

            self.proveedores = Proveedor()

            self.proveedores.setIdProveedor(int(proveedorSelected[0]))
            self.proveedores.setDescripcion(str(proveedorSelected[1]))
            self.proveedores.setNombre(str(proveedorSelected[2]))
        else:
            clienteList = selected.model().mylist
            clienteSelected = clienteList[selected.row()]

            self.clientes = Cliente()

            self.clientes = Cliente()
            self.clientes.setIdCliente(int(clienteSelected[0]))
            self.clientes.setApellido(str(clienteSelected[1]))
            self.clientes.setNombre(str(clienteSelected[2]))
    def changeSelectedTable(self, selected, deselected):
        listPersonas = selected.model().mylist

        personaSelected = ()
        personaSelected = tuple(listPersonas[selected.row()])

        if self.state == "COBRANZA":
            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.state == "PAGO":
            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.calcularTransaccion()
    def __init__(self, winPrincipal):
        self.winPrincipal = winPrincipal
        self.cliente = Cliente()
        self.conexionCliente = conexionCliente()
        self.conexionTelefono = conexionTelefono()

        self.listTelefonosInit = []

        self.estado = ""
        self.direccion = Direccion()

        self.configInit()
Exemple #12
0
    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 generarSaldos(self):
        validate = True
        if self.winPrincipal.chbTodos_saldos.isChecked() == False:
            if self.winPrincipal.rbProveedores_saldos.isChecked() == True:
                if self.proveedores is None:
                    validate = False
            else:
                if self.clientes is None:
                    validate = False

        if validate == True:
            if self.winPrincipal.chbTodos_saldos.isChecked() == True:
                if self.winPrincipal.rbProveedores_saldos.isChecked() == True:
                    listProveedores = self.conexionesGenerales.selectProveedor('')
                    contenido = ""
                    for proveedores in listProveedores:
                        self.proveedores = Proveedor()
                        self.proveedores.setIdProveedor(int(proveedores[0]))
                        self.proveedores.setDescripcion(str(proveedores[1]))
                        self.proveedores.setNombre(str(proveedores[2]))

                        contenido += self.generateTable('PROVEEDOR', self.proveedores)
                else:
                    listClientes = self.conexionesGenerales.selectCliente('')
                    contenido = ""
                    for clientes in listClientes:
                        self.clientes = Cliente()
                        self.clientes.setIdCliente(int(clientes[0]))
                        self.clientes.setApellido(str(clientes[1]))
                        self.clientes.setNombre(str(clientes[2]))

                        contenido += self.generateTable('CLIENTE', self.clientes)
            else:
                if self.winPrincipal.rbProveedores_saldos.isChecked() == True:
                    contenido = self.generateTable('PROVEEDOR', self.proveedores)
                else:
                    contenido = self.generateTable('CLIENTE', self.clientes)


            self.generatePDF(contenido)
        else:
            alert = QDialog()
            confirm = QMessageBox.question(alert, "Mensaje", "Falta selecciona la/s persona/s.", QMessageBox.Ok)
    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 changeSelectedTable(self, selected, deselected):

            clienteList = selected.model().mylist
            clienteSelected = clienteList[selected.row()]
            self.cliente = Cliente()
            self.direccion = Direccion()
            self.cliente.setIdCliente(int(clienteSelected[0]))
            self.cliente.setApellido(clienteSelected[1])
            self.cliente.setNombre(clienteSelected[2])
            self.cliente.setEmail(clienteSelected[3])
            self.direccion = Direccion()
            self.direccion.setDireccion(clienteSelected[4])

            if clienteSelected[5] != None:
                self.direccion.setNumero(int(clienteSelected[5]))

            if clienteSelected[6] != None:
                self.direccion.setPiso(int(clienteSelected[6]))

            if clienteSelected[7] != None:
                self.direccion.setDpto(clienteSelected[7])

            self.direccion.setIdDireccion(int(clienteSelected[8]))
            self.cliente.setDireccion(self.direccion)

            self.cliente.setIdPersona(clienteSelected[9])

            self.winPrincipal.tvClientes_c.setRowHeight(deselected.row(), 28)
            self.winPrincipal.tvClientes_c.setRowHeight(selected.row(), 45)

            self.cliente.setEstado(int(clienteSelected[10]))

            self.setCampos()
            self.winPrincipal.btnModificar_c.setEnabled(True)
            self.winPrincipal.btnBorrar_c.setEnabled(True)
            self.winPrincipal.tvTelefonos_c.setModel(None)
            self.cargarTablaTelefono()
class PestaniaCliente():

    def __init__(self, winPrincipal):
        self.winPrincipal = winPrincipal
        self.cliente = Cliente()
        self.conexionCliente = conexionCliente()
        self.conexionTelefono = conexionTelefono()

        self.listTelefonosInit = []

        self.estado = ""
        self.direccion = Direccion()

        self.configInit()



    def configInit(self):

        #Configurando botones Generales
        self.winPrincipal.btnAgregar_c.clicked.connect(self.onClickAgregar_c)
        self.winPrincipal.btnGuardar_c.clicked.connect(self.onClickGuardar_c)
        self.winPrincipal.btnBorrar_c.clicked.connect(self.onClickBorrar_c)
        self.winPrincipal.btnModificar_c.clicked.connect(self.onClickModificar_c)

        #Configurando botones ABM telefono
        self.winPrincipal.btnSumarTelefono_c.clicked.connect(self.onClickSumarTelefono)
        self.winPrincipal.btnRestarTelefono_c.clicked.connect(self.onClickRestarTelefono)
        self.winPrincipal.btnCancelarTelefono_c.clicked.connect(self.onClickCancelarTelefono)
        self.winPrincipal.btnCancelarTelefono_c.setVisible(False)
        self.winPrincipal.btnRestarTelefono_c.setEnabled(False)

        #configurando botones tipo telefono
        self.winPrincipal.btnTelefono_c.clicked.connect(self.onClickTelefono)
        self.winPrincipal.btnCelular_c.clicked.connect(self.onClickCelular)
        self.winPrincipal.btnFax_c.clicked.connect(self.onClickFax)


        #Seteando model y propiedades a la tabla
        self.cargarTabla()
        self.winPrincipal.tvClientes_c.setSortingEnabled(True)
        self.winPrincipal.tvClientes_c.setMouseTracking(True)
        self.winPrincipal.tvClientes_c.setSelectionBehavior(QAbstractItemView.SelectRows)


        #Seteando proiedades de la tabla telefono
        self.winPrincipal.tvTelefonos_c.setSortingEnabled(True)
        self.winPrincipal.tvTelefonos_c.setMouseTracking(True)
        self.winPrincipal.tvTelefonos_c.setSelectionBehavior(QAbstractItemView.SelectRows)



    def onClickAgregar_c(self):
        self.estado = 'AGREGAR'
        self.validarBotones(button='AGREGAR')


    def onClickGuardar_c(self):
        validar = self.validar()

        if validar != "":
            print(validar)
            alert = QDialog()
            QMessageBox.information(alert,"ERROR", validar)
        else:
            self.cliente.setApellido(self.winPrincipal.txtApellido_c.text())
            self.cliente.setNombre(self.winPrincipal.txtNombre_c.text())
            self.direccion.setDireccion(self.winPrincipal.txtDireccion_c.text())
            self.cliente.setEmail(self.winPrincipal.txtEmail_c.text())

            if self.winPrincipal.txtDDpto_c.text() != "":
                self.direccion.setDpto(str(self.winPrincipal.txtDDpto_c.text()))
            else:
                self.direccion.setDpto("")
            if self.winPrincipal.txtDNumero_c.text() != "":
                self.direccion.setNumero(int(self.winPrincipal.txtDNumero_c.text()))
            else:
                self.direccion.setNumero(0)
            if self.winPrincipal.txtDPiso_c.text() != "":
                self.direccion.setPiso(int(self.winPrincipal.txtDPiso_c.text()))
            else:
                self.direccion.setPiso(0)
            self.cliente.setDireccion(self.direccion)


            if self.estado == 'AGREGAR':
                self.insertCliente()
                self.insertTelefono()
            elif self.estado == 'MODIFICAR':
                self.modificarCliente()
                self.updateTelefono()

            self.validarBotones(button='GUARDAR')


    def onClickModificar_c(self):
        self.estado = 'MODIFICAR'
        self.validarBotones(button='MODIFICAR')


    def onClickBorrar_c(self):
        if self.winPrincipal.btnGuardar_c.isEnabled() != True:
            self.conexionCliente.borrarCliente(self.cliente)
            self.cargarTabla()

        self.validarBotones(button='BORRAR')


    def cargarTabla(self):
        #listaClientes = []
        listaClientes = self.conexionCliente.selectCliente()
        header = ['ID','Apellido','Nombre','Email','Direccion', 'N°', 'Piso', 'Dpto', 'iddir', 'idper']
        self.tablaModel = MyTableModel(self.winPrincipal.tvClientes_c, listaClientes, header)
        self.winPrincipal.tvClientes_c.setModel(self.tablaModel)
        self.winPrincipal.tvClientes_c.selectionModel().currentChanged.connect(self.changeSelectedTable)


        self.winPrincipal.tvClientes_c.setColumnHidden(0, True)
        self.winPrincipal.tvClientes_c.setColumnWidth(1, 208)
        self.winPrincipal.tvClientes_c.setColumnWidth(2, 220)
        self.winPrincipal.tvClientes_c.setColumnWidth(3, 280)
        self.winPrincipal.tvClientes_c.setColumnWidth(4, 364)
        self.winPrincipal.tvClientes_c.setColumnWidth(5, 50)
        self.winPrincipal.tvClientes_c.setColumnHidden(6, True)
        self.winPrincipal.tvClientes_c.setColumnHidden(7, True)
        self.winPrincipal.tvClientes_c.setColumnHidden(8, True)
        self.winPrincipal.tvClientes_c.setColumnHidden(9, True)

    def changeSelectedTable(self, selected, deselected):

            clienteList = selected.model().mylist
            clienteSelected = clienteList[selected.row()]
            self.cliente = Cliente()
            self.direccion = Direccion()
            self.cliente.setIdCliente(int(clienteSelected[0]))
            self.cliente.setApellido(clienteSelected[1])
            self.cliente.setNombre(clienteSelected[2])
            self.cliente.setEmail(clienteSelected[3])
            self.direccion = Direccion()
            self.direccion.setDireccion(clienteSelected[4])

            if clienteSelected[5] != None:
                self.direccion.setNumero(int(clienteSelected[5]))

            if clienteSelected[6] != None:
                self.direccion.setPiso(int(clienteSelected[6]))

            if clienteSelected[7] != None:
                self.direccion.setDpto(clienteSelected[7])

            self.direccion.setIdDireccion(int(clienteSelected[8]))
            self.cliente.setDireccion(self.direccion)

            self.cliente.setIdPersona(clienteSelected[9])

            self.winPrincipal.tvClientes_c.setRowHeight(deselected.row(), 28)
            self.winPrincipal.tvClientes_c.setRowHeight(selected.row(), 45)


            self.setCampos()
            self.winPrincipal.btnModificar_c.setEnabled(True)
            self.winPrincipal.btnBorrar_c.setEnabled(True)
            self.winPrincipal.tvTelefonos_c.setModel(None)
            self.cargarTablaTelefono()

    def validarBotones(self, button):
        if button == 'AGREGAR' :
            self.winPrincipal.wDatosCliente.setEnabled(True)
            self.winPrincipal.btnBorrar_c.setEnabled(True)
            self.winPrincipal.btnBorrar_c.setText('CANCELAR')
            self.winPrincipal.btnGuardar_c.setEnabled(True)
            self.winPrincipal.btnModificar_c.setEnabled(False)
            self.winPrincipal.btnAgregar_c.setEnabled(False)
            self.winPrincipal.tvClientes_c.setEnabled(False)
            self.limpiarCampos()

        elif button=='GUARDAR':
            self.winPrincipal.btnModificar_c.setEnabled(False)
            self.winPrincipal.btnAgregar_c.setEnabled(True)
            self.winPrincipal.btnGuardar_c.setEnabled(False)
            self.winPrincipal.btnBorrar_c.setText('BORRAR')
            self.winPrincipal.btnBorrar_c.setEnabled(False)
            self.winPrincipal.tvClientes_c.setEnabled(True)
            self.winPrincipal.wDatosCliente.setEnabled(False)
            self.limpiarCampos()

        elif button == 'MODIFICAR':
            self.winPrincipal.btnModificar_c.setEnabled(False)
            self.winPrincipal.btnAgregar_c.setEnabled(False)
            self.winPrincipal.btnGuardar_c.setEnabled(True)
            self.winPrincipal.btnBorrar_c.setText('Cancelar')
            self.winPrincipal.btnBorrar_c.setEnabled(True)
            self.winPrincipal.tvClientes_c.setEnabled(False)
            self.winPrincipal.wDatosCliente.setEnabled(True)

        elif button=='BORRAR':
            self.winPrincipal.btnModificar_c.setEnabled(False)
            self.winPrincipal.btnAgregar_c.setEnabled(True)
            self.winPrincipal.btnGuardar_c.setEnabled(False)
            self.winPrincipal.btnBorrar_c.setText('BORRAR')
            self.winPrincipal.btnBorrar_c.setEnabled(False)
            self.winPrincipal.tvClientes_c.setEnabled(True)
            self.winPrincipal.wDatosCliente.setEnabled(False)
            self.limpiarCampos()


    def insertCliente(self):
        if self.cliente.getApellido() != '':
            self.conexionCliente.insertarCliente(cliente=self.cliente)
            self.cargarTabla()

    def modificarCliente(self):
            self.conexionCliente.modificarCliente(self.cliente)
            self.cargarTabla()

    def limpiarCampos(self):
        self.winPrincipal.txtApellido_c.setText('')
        self.winPrincipal.txtNombre_c.setText('')
        self.winPrincipal.txtDireccion_c.setText('')
        self.winPrincipal.txtDNumero_c.setText('')
        self.winPrincipal.txtDPiso_c.setText('')
        self.winPrincipal.txtDDpto_c.setText('')
        self.winPrincipal.txtEmail_c.setText('')
        self.winPrincipal.tvTelefonos_c.setModel(None)

    def setCampos(self):
        self.winPrincipal.txtApellido_c.setText(self.cliente.getApellido())
        self.winPrincipal.txtNombre_c.setText(self.cliente.getNombre())
        self.winPrincipal.txtEmail_c.setText(self.cliente.getEmail())

        self.winPrincipal.txtDireccion_c.setText(self.cliente.getDireccion().getDireccion())
        
        if self.cliente.getDireccion().getNumero() != None:
            self.winPrincipal.txtDNumero_c.setText(str(self.cliente.getDireccion().getNumero()))
        else:
            self.winPrincipal.txtDNumero_c.setText('')            
        
        if self.cliente.getDireccion().getPiso() != None:
            self.winPrincipal.txtDPiso_c.setText(str(self.cliente.getDireccion().getPiso()))
        else:
            self.winPrincipal.txtDPiso_c.setText('')

        if self.cliente.getDireccion().getDpto() != None:
            self.winPrincipal.txtDDpto_c.setText(self.cliente.getDireccion().getDpto())
        else:
            self.winPrincipal.txtDDpto_c.setText('')

        

    def validar(self):
        mensaje = ''
        if self.winPrincipal.txtNombre_c.text() == '':
            mensaje = "Falta ingresar un Nombre"
        elif self.winPrincipal.txtApellido_c.text() == '':
            mensaje = "Falta ingresar Apellido"
        elif self.winPrincipal.txtDireccion_c.text() == '':
            mensaje = "Falta ingresar una Direccion"
        elif self.winPrincipal.txtDNumero_c.text() == '':
            mensaje = "Falta ingresar un N° de Direccion"

        return mensaje


    def cargarTablaTelefono(self):
        self.listTelefonosInit = self.conexionTelefono.selectTelefono(self.cliente)
        if len(self.listTelefonosInit) >0:
            header = ['ID', 'Numero', 'TIPO']
            tableModel = MyTableModel(self.winPrincipal, self.listTelefonosInit, header)
            self.winPrincipal.tvTelefonos_c.setModel(tableModel)
            self.winPrincipal.tvTelefonos_c.selectionModel().currentChanged.connect(self.changeSelectedTableTel)

            self.winPrincipal.tvTelefonos_c.setColumnHidden(0, True)
            self.winPrincipal.tvTelefonos_c.setColumnWidth(1, 36)
            self.winPrincipal.tvTelefonos_c.setColumnWidth(2, 175)

            for r in range(0, len(self.listTelefonosInit)):
                self.winPrincipal.tvTelefonos_c.setRowHidden(r, False)



    def changeSelectedTableTel(self, selected, deselected):
        listTelefonos = selected.model().mylist
        self.telefonoSelected = ()
        self.telefonoSelected = listTelefonos[selected.row()]

        self.telefonoSelectedRow = selected.row()
        self.winPrincipal.txtTelefono_c.setText(str(self.telefonoSelected[2]))

        self.setTipoTelefono(str(self.telefonoSelected[1]))
        self.winPrincipal.btnCancelarTelefono_c.setVisible(True)
        self.winPrincipal.btnRestarTelefono_c.setEnabled(True)
        self.winPrincipal.tvTelefonos_c.setEnabled(False)

        self.winPrincipal.btnGuardar_c.setEnabled(False)

    def updateTelefono(self):

        listTelefono = []
        listTelefono = list(self.winPrincipal.tvTelefonos_c.model().mylist).copy()

        estado = ''
        telNew = Telefono()
        if len(listTelefono) > 0:
            if len(self.listTelefonosInit) > 0:

                listTelInit = list(self.listTelefonosInit)
                parche = (listTelefono[0][0], listTelefono[0][1], str(listTelefono[0][2]))
                listTelefono[0] = parche
                #Recorre la lista de telefono inicial
                for telInit in listTelInit:
                    #recorre la lista de telefonos nueva
                    for tel in listTelefono:
                        telNew.setIdPersona(self.cliente.getIdPersona())
                        telNew.setIdTelefono(tel[0])
                        telNew.setTipo(tel[1])
                        if tel[2] == "":
                            estado = 'DEL'
                            break
                        else:
                            telNew.setTelefono(tel[2])

                        if tel[0] == 0:
                            estado = 'INS'
                            break

                        if telInit[0] == tel[0]:
                            if telInit[1] != tel[1] or telInit[2] != tel[2]:
                                estado = 'UPD'
                                break

                    if estado == 'UPD':
                        self.conexionTelefono.modificarTelefono(telNew)
                    elif estado == "INS":
                        self.conexionTelefono.insertarTelefono(telNew)
                    elif estado == 'DEL':
                        self.conexionTelefono.borrarTelefono(telNew)
            #Si la lista de telefono inicial es cero
            else:
                #recorre la lista de telefonos nueva para agregarlos a todos
                for telN in listTelefono:
                    if telN[2] != '':
                        telNew = Telefono()
                        telNew.setIdPersona(self.cliente.getIdPersona())
                        telNew.setIdTelefono(telN[0])
                        telNew.setTipo(telN[1])
                        telNew.setTelefono(telN[2])
                        self.conexionTelefono.insertarTelefono(telNew)



    def insertTelefono(self):

        listTelefonosNew = []
        tel = self.winPrincipal.tvTelefonos_c.model()

        listTelefonosNew = list(self.winPrincipal.tvTelefonos_c.model().mylist).copy()

        if len(listTelefonosNew) > 0:
            self.conexionTelefono.insertTelefonoInit(listTelefonosNew)


    def onClickCancelarTelefono(self):
        self.winPrincipal.btnCancelarTelefono_c.setVisible(False)
        self.winPrincipal.txtTelefono_c.setText('')

        self.winPrincipal.btnRestarTelefono_c.setEnabled(False)
        self.winPrincipal.tvTelefonos_c.clearSelection()
        self.winPrincipal.tvTelefonos_c.setEnabled(True)

        self.winPrincipal.btnGuardar_c.setEnabled(True)

    def onClickSumarTelefono(self):
        numTelefono = self.winPrincipal.txtTelefono_c.text()

        if numTelefono.isdigit() == True:
            if self.winPrincipal.btnCancelarTelefono_c.isVisible() is True:
                self.updateTelefonoTabla()
            else:
                self.insertTelefonoTabla()

            self.winPrincipal.tvTelefonos_c.clearSelection()
            self.winPrincipal.btnRestarTelefono_c.setEnabled(False)
            self.winPrincipal.btnCancelarTelefono_c.setVisible(False)
            self.winPrincipal.txtTelefono_c.setText('')
            self.winPrincipal.tvTelefonos_c.setEnabled(True)

            self.winPrincipal.btnGuardar_c.setEnabled(True)
        else:
            alert = QDialog()
            QMessageBox.information(alert,"ERROR", "El numero de telefono no es valido.")


    def onClickRestarTelefono(self):
        listTabTel = []
        #listTabTel = list(self.winPrincipal.tvTelefonos_c.model().mylist).copy()
        tipoTel = str(self.getTipoTelefono())
        listTelefonosNew = []

        listTabTel = list(self.winPrincipal.tvTelefonos_c.model().mylist).copy()

        header = ['Id', 'Tipo', 'Numero']
        telDel = [self.telefonoSelected[0], self.telefonoSelected[1], '']
        listTabTel[self.telefonoSelectedRow] = telDel
        tableTelModel = MyTableModel(self.winPrincipal, listTabTel, header)
        self.winPrincipal.tvTelefonos_c.setModel(tableTelModel)
        self.winPrincipal.tvTelefonos_c.selectionModel().currentChanged.connect(self.changeSelectedTableTel)
        self.winPrincipal.tvTelefonos_c.setRowHidden(self.telefonoSelectedRow, True)

        self.winPrincipal.btnCancelarTelefono_c.setVisible(False)
        self.winPrincipal.txtTelefono_c.setText('')
        self.winPrincipal.btnRestarTelefono_c.setEnabled(False)
        self.winPrincipal.tvTelefonos_c.setEnabled(True)

        self.winPrincipal.btnGuardar_c.setEnabled(True)

    def onClickTelefono(self):
        self.changeTipoTelefono(button='TEL')

    def onClickCelular(self):
        self.changeTipoTelefono(button='CEL')

    def onClickFax(self):
        self.changeTipoTelefono(button='FAX')

    def changeTipoTelefono(self, button):

        if button == 'TEL':
            self.winPrincipal.btnTelefono_c.setEnabled(False)
            self.winPrincipal.btnCelular_c.setEnabled(True)
            self.winPrincipal.btnFax_c.setEnabled(True)
        elif button == 'CEL':
            self.winPrincipal.btnTelefono_c.setEnabled(True)
            self.winPrincipal.btnCelular_c.setEnabled(False)
            self.winPrincipal.btnFax_c.setEnabled(True)
        elif button == 'FAX':
            self.winPrincipal.btnTelefono_c.setEnabled(True)
            self.winPrincipal.btnCelular_c.setEnabled(True)
            self.winPrincipal.btnFax_c.setEnabled(False)


    def setTipoTelefono(self, tipoTelefono):

        if tipoTelefono == 'TEL':
            self.winPrincipal.btnTelefono_c.setEnabled(False)
            self.winPrincipal.btnCelular_c.setEnabled(True)
            self.winPrincipal.btnFax_c.setEnabled(True)
        elif tipoTelefono == 'CEL':
            self.winPrincipal.btnTelefono_c.setEnabled(True)
            self.winPrincipal.btnCelular_c.setEnabled(False)
            self.winPrincipal.btnFax_c.setEnabled(True)
        elif tipoTelefono == 'FAX':
            self.winPrincipal.btnTelefono_c.setEnabled(True)
            self.winPrincipal.btnCelular_c.setEnabled(True)
            self.winPrincipal.btnFax_c.setEnabled(False)

    def getTipoTelefono(self):

        if self.winPrincipal.btnTelefono_c.isEnabled() != True:
            return 'TEL'
        elif self.winPrincipal.btnCelular_c.isEnabled() != True:
            return 'CEL'
        elif self.winPrincipal.btnFax_c.isEnabled() != True:
            return 'FAX'


    def insertTelefonoTabla(self):
        numTel = self.winPrincipal.txtTelefono_c.text()
        tipoTel = str(self.getTipoTelefono())

        modelListTelefono = self.winPrincipal.tvTelefonos_c.model()
        header = ['ID', 'Tipo', 'Numero']

        if modelListTelefono is not None:
            listTabTel = list(self.winPrincipal.tvTelefonos_c.model().mylist)

            if len(listTabTel) > 0 or listTabTel is not None:
                tuplaTel = ('0', tipoTel, numTel )
                listTabTel.append(tuplaTel)
                tupleTable = tuple(listTabTel)

                tableModel = MyTableModel(self.winPrincipal, tupleTable , header)
                self.winPrincipal.tvTelefonos_c.setModel(tableModel)
                self.winPrincipal.tvTelefonos_c.selectionModel().currentChanged.connect(self.changeSelectedTableTel)
        else:
            lista = []
            tuplaTel = ('0', tipoTel, numTel )
            lista.append(tuplaTel)

            tableModel = MyTableModel(self.winPrincipal, lista , header)
            self.winPrincipal.tvTelefonos_c.setModel(tableModel)
            self.winPrincipal.tvTelefonos_c.selectionModel().currentChanged.connect(self.changeSelectedTableTel)
            self.winPrincipal.tvTelefonos_c.setColumnHidden(0, True)
            self.winPrincipal.tvTelefonos_c.setColumnWidth(1, 36)
            self.winPrincipal.tvTelefonos_c.setColumnWidth(2, 175)


    def updateTelefonoTabla(self):
        listTabTel = []
        #listTabTel = list(self.winPrincipal.tvTelefonos_c.model().mylist).copy()
        tipoTel = str(self.getTipoTelefono())
        listTelefonosNew = []
        prob = self.winPrincipal.tvTelefonos_c.selectionModel()
        prob1 = self.winPrincipal.tvTelefonos_c.model()
        listTabTel = list(self.winPrincipal.tvTelefonos_c.model().mylist).copy()
        """
        for lt in listTabTel:
            if lt[0] == self.telefonoSelected[0]:
                lt = (self.telefonoSelected[0], tipoTel, self.winPrincipal.txtTelefono_c.text())

            listTelefonosNew.append(lt)
        """
        telUpd = (self.telefonoSelected[0], tipoTel, int(self.winPrincipal.txtTelefono_c.text()))
        listTabTel[self.telefonoSelectedRow] = telUpd
        header = ['ID', 'Tipo', 'Numero']
        tableModel = MyTableModel(self.winPrincipal, listTabTel , header)
        self.winPrincipal.tvTelefonos_c.setModel(tableModel)
        self.winPrincipal.tvTelefonos_c.selectionModel().currentChanged.connect(self.changeSelectedTableTel)
 def __init__(self):
     self.conexion = Conexion()
     self.cliente = Cliente()
     self.proveedor = Proveedor()
Exemple #18
0
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> &nbsp;&nbsp;""" + str(
                    transaccion[3]) + """<br>
                                            </td>
                                            <td width="50%" >
                                               <br>&nbsp;&nbsp; """ + str(
                        transaccion[4]) + """<br>
                                            </td>
                                            <td width="10%" align="right" >
                                              <br>  $ """ + str(
                            transaccion[5]) + """&nbsp;&nbsp;<br>
                                            </td>
                                            <td width="10%" align="right" >
                                              <br>  $ """ + str(
                                int(transaccion[1]) *
                                float(transaccion[5])) + """&nbsp;&nbsp;<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 PestaniaPagos():
    def __init__(self, winPrincipal):
        self.conexionPagos = ConexionPagos()
        self.winPrincipal = winPrincipal
        self.cliente = Cliente()
        self.proveedor = Proveedor()
        self.state = 'COBRANZA'

        self.configInit()

    def configInit(self):
        self.winPrincipal.tvCuentaCorriente_pag.setSortingEnabled(True)
        self.winPrincipal.tvCuentaCorriente_pag.setMouseTracking(True)
        self.winPrincipal.tvCuentaCorriente_pag.setSelectionBehavior(
            QAbstractItemView.SelectRows)

        self.winPrincipal.btnAceptar_pag.clicked.connect(self.OnClickAceptar)
        self.winPrincipal.btnCancelar_pag.clicked.connect(self.OnClickCancelar)

        #self.winPrincipal.txtFilterPagos_pag.textChanged.connect(self.cargarTablaCliente)
        self.winPrincipal.txtFilterPagos_pag.returnPressed.connect(self.search)

        self.winPrincipal.txtMonto_pag.textChanged.connect(self.activateField)

        self.winPrincipal.rbCobranza_pag.clicked.connect(self.OnClickCobranza)
        self.winPrincipal.rbPago_pag.clicked.connect(self.OnClickPago)

    def cargarTablaCliente(self):
        tipoParametro = ''
        if self.winPrincipal.cbFilterCliente_pag.currentText() == 'Apellido':
            tipoParametro = 'c.apellido'
        elif self.winPrincipal.cbFilterCliente_pag.currentText() == 'Nombre':
            tipoParametro = 'p.nombre'

        parametro = self.winPrincipal.txtFilterPagos_pag.text()

        listaClientes = self.conexionPagos.selectClientes(
            tipoParametro, parametro)
        if len(listaClientes) > 0:
            header = ['ID', 'Apellido', 'Nombre', 'Email']
            tablaModel = MyTableModel(self.winPrincipal.tvCuentaCorriente_pag,
                                      listaClientes, header)
            self.winPrincipal.tvCuentaCorriente_pag.setModel(tablaModel)
            self.winPrincipal.tvCuentaCorriente_pag.selectionModel(
            ).currentChanged.connect(self.changeSelectedTable)

            self.winPrincipal.tvCuentaCorriente_pag.setColumnHidden(0, True)
            self.winPrincipal.tvCuentaCorriente_pag.setColumnWidth(1, 140)
            self.winPrincipal.tvCuentaCorriente_pag.setColumnWidth(2, 140)
            self.winPrincipal.tvCuentaCorriente_pag.setColumnWidth(3, 207)
        else:
            self.winPrincipal.tvCuentaCorriente_pag.setModel(None)

    def changeSelectedTable(self, selected, deselected):
        listPersonas = selected.model().mylist

        personaSelected = ()
        personaSelected = tuple(listPersonas[selected.row()])

        if self.state == "COBRANZA":
            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.state == "PAGO":
            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.calcularTransaccion()

    def calcularTransaccion(self):
        listTransacciones = []

        listPagos = []
        #Total de los pagos
        pagosTotal = 0
        #Total de las transacciones en estado 0
        transaccionesTotal = 0

        #Lista completa (transacciones + pagos)
        listDetalle = []
        if self.state == "COBRANZA":
            listPagos = self.conexionPagos.selectListPagosCliente(self.cliente)
            listTransacciones = self.conexionPagos.selectListTransaccionCliente(
                self.cliente)

            if len(listPagos) > 0:
                for pagos in listPagos:
                    pagosTotal += float(pagos[1])
                    auxMonto = "$  + " + str("{0:.2f}".format(pagos[1]))
                    auxPagos = (str(pagos[0]), auxMonto, str(pagos[2]))
                    listDetalle.append(auxPagos)
            else:
                pagosTotal = 0

            if len(listTransacciones):
                for transacciones in listTransacciones:
                    transaccionesTotal += transacciones[1]
                    auxMonto = "$  - " + str("{0:.2f}".format(
                        transacciones[1]))
                    auxTransaccion = (str(transacciones[0]), auxMonto,
                                      str(transacciones[2]))
                    listDetalle.append(auxTransaccion)
            else:
                transaccionesTotal = 0

            total = pagosTotal - transaccionesTotal

        elif self.state == "PAGO":
            listPagos = self.conexionPagos.selectListPagosProveedor(
                self.proveedor)
            listTransacciones = self.conexionPagos.selectListTransaccionProveedor(
                self.proveedor)

            if len(listPagos) > 0:
                for pagos in listPagos:
                    pagosTotal += float(pagos[1])
                    auxMonto = "$  + " + str("{0:.2f}".format(pagos[1]))
                    auxPagos = (str(pagos[0]), auxMonto, str(pagos[2]))
                    listDetalle.append(auxPagos)
            else:
                pagosTotal = 0

            if len(listTransacciones):
                for transacciones in listTransacciones:
                    transaccionesTotal += transacciones[1]
                    auxMonto = "$  - " + str("{0:.2f}".format(
                        transacciones[1]))
                    auxTransaccion = (str(transacciones[0]), auxMonto,
                                      str(transacciones[2]))
                    listDetalle.append(auxTransaccion)
            else:
                transaccionesTotal = 0

            total = pagosTotal - transaccionesTotal

        self.winPrincipal.lblTotalDeuda_pag.setText(str(total))

        if len(listDetalle) > 0:
            header = ['Fecha', 'Monto', 'Tipo de movimiento']
            tablaModel = MyTableModel(
                self.winPrincipal.tvDetalleTransaccion_pag, listDetalle,
                header)
            self.winPrincipal.tvDetalleTransaccion_pag.setModel(tablaModel)

            self.winPrincipal.tvDetalleTransaccion_pag.setColumnWidth(0, 190)
            self.winPrincipal.tvDetalleTransaccion_pag.setColumnWidth(1, 190)
            self.winPrincipal.tvDetalleTransaccion_pag.setColumnWidth(2, 190)

    def cargarTablaProveedor(self):

        tipoParametro = ''

        if self.winPrincipal.cbFilterCliente_pag.currentText() == 'Apellido':
            tipoParametro = 'prov.descripcion'
        elif self.winPrincipal.cbFilterCliente_pag.currentText() == 'Nombre':
            tipoParametro = 'p.nombre'

        parametro = self.winPrincipal.txtFilterPagos_pag.text()

        listaClientes = self.conexionPagos.selectProveedores(
            tipoParametro, parametro)
        if len(listaClientes) > 0:
            header = ['ID', 'Descripcion', 'Nombre', 'Email']
            tablaModel = MyTableModel(self.winPrincipal.tvCuentaCorriente_pag,
                                      listaClientes, header)
            self.winPrincipal.tvCuentaCorriente_pag.setModel(tablaModel)
            self.winPrincipal.tvCuentaCorriente_pag.selectionModel(
            ).currentChanged.connect(self.changeSelectedTable)

            self.winPrincipal.tvCuentaCorriente_pag.setColumnHidden(0, True)
            self.winPrincipal.tvCuentaCorriente_pag.setColumnWidth(1, 140)
            self.winPrincipal.tvCuentaCorriente_pag.setColumnWidth(2, 140)
            self.winPrincipal.tvCuentaCorriente_pag.setColumnWidth(3, 207)
        else:
            self.winPrincipal.tvCuentaCorriente_pag.setModel(None)

    def OnClickAceptar(self):
        total = float(self.winPrincipal.txtMonto_pag.text())
        subNom = ''
        idRecibo = 0
        if self.state == 'COBRANZA':
            idRecibo = self.conexionPagos.cargarCobranza(self.cliente, total)
            subNom = 'COBRANZA'
        elif self.state == 'PAGO':
            idRecibo = self.conexionPagos.cargarPago(self.proveedor, total)
            subNom = 'PAGO'

        totalDeuda = float(self.winPrincipal.lblTotalDeuda_pag.text())

        alert = QDialog()
        confirm = QMessageBox.question(alert, "Mensaje",
                                       "¿ Desea generar Recibo ?",
                                       QMessageBox.Yes, QMessageBox.No)
        if confirm == QMessageBox.Yes:
            self.createRecibo(subNom=subNom,
                              idRecibo=idRecibo,
                              total=total,
                              totDeuda=totalDeuda,
                              totPago=total)
        self.limpiarCampos()
        self.winPrincipal.txtFilterPagos_pag.setFocus(True)

    def OnClickCancelar(self):
        self.limpiarCampos()

    def OnClickCobranza(self):
        self.state = 'COBRANZA'

    def OnClickPago(self):
        self.state = 'PAGO'

    def limpiarCampos(self):
        self.winPrincipal.txtMonto_pag.setText('')
        self.winPrincipal.txtFilterPagos_pag.setText('')
        self.winPrincipal.txtFilterPagos_pag.setEnabled(True)
        self.winPrincipal.tvCuentaCorriente_pag.setEnabled(True)
        self.winPrincipal.tvCuentaCorriente_pag.setModel(None)
        self.winPrincipal.btnAceptar_pag.setEnabled(False)
        self.winPrincipal.btnCancelar_pag.setEnabled(False)
        self.winPrincipal.lblTotalDeuda_pag.setText('0.00')

        self.winPrincipal.tvDetalleTransaccion_pag.setModel(None)

    def finish(self):
        #self.winPrincipal.txtFilterPagos_pag.disconnect()
        #self.winPrincipal.txtMonto_pag.disconnect()
        self.winPrincipal.btnAceptar_pag.disconnect()
        self.winPrincipal.btnCancelar_pag.disconnect()
        self.winPrincipal.rbPago_pag.disconnect()
        self.winPrincipal.rbCobranza_pag.disconnect()

    def activateField(self):
        if self.winPrincipal.btnAceptar_pag.isEnabled() is False:
            self.winPrincipal.txtFilterPagos_pag.setEnabled(False)
            self.winPrincipal.tvCuentaCorriente_pag.setEnabled(False)
            self.winPrincipal.btnAceptar_pag.setEnabled(True)
            self.winPrincipal.btnCancelar_pag.setEnabled(True)

    def search(self):
        if self.winPrincipal.txtFilterPagos_pag.hasFocus() is True:
            if self.state == "COBRANZA":
                #if self.winPrincipal.rbCobranza_pag.isChecked() is True:
                self.cargarTablaCliente()
            else:
                self.cargarTablaProveedor()

    def createRecibo(self, subNom, idRecibo, total, totDeuda, totPago):
        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 = ""

        nombre = ""
        apellido = ""

        if (self.state == "COBRANZA"):
            nombre = self.cliente.getNombre()
            apellido = self.cliente.getApellido()
        elif (self.state == "PAGO"):
            nombre = self.proveedor.getNombre()
            apellido = self.proveedor.getDescripcion()

        totalDeuda = float(totDeuda)
        deudaString = "$  " + "{0:.2f}".format(totalDeuda)
        totalPago = float(totPago)
        pagoString = "$  +" + "{0:.2f}".format(totalPago)

        total = float(totalDeuda + totalPago)
        totalString = "{0:.2f}".format(total)
        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 DEL RECIBO:
                    </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="80%"  align="center" valign="middle">
                            <b>
                            DESCRIPCION
                            </b>
                        </td>
                        <td width="20%"  align="center" valign="middle">
                            <b>
                                MONTO
                            </b>
                        </td>

                      </tr>
                  </table>

                  <br>
                  <br>
                  <br>
                  <br>

                  <table  height="350" width="600" style="border-color: gray; border-width: .4px; border-collapse: collapse;">
                      <tr height="80">
                            <td width="80%" align="left" >
                            <br>DEUDA <br>
                            </td>
                            <td width="20%" >
                                <br> &nbsp;&nbsp; """ + str(
            deudaString) + """<br>
                            </td>

                        </tr>
                        <tr height="80">
                            <td width="80%" align="left" >
                            <br> PAGO<br>
                            </td>
                            <td width="20%" >
                                <br> &nbsp;&nbsp;""" + str(
                pagoString) + """<br>
                            </td>

                        </tr>
                  </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> $ """ + str(totalString) + """<br>
                            </td>
                        </tr>
                    </table>

                    <br>
                    <br>
                    <br>
                    <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)
        printer = QPrinter()
        printer.setOutputFileName(nombrePdf)

        printer.setOutputFormat(QPrinter.PdfFormat)
        doc.print(printer)
        printer.newPage()
        url = QUrl
        url = QUrl(nombrePdf)
        QDesktopServices.openUrl(url)
Exemple #20
0
class PestaniaCliente():
    def __init__(self, winPrincipal):
        self.winPrincipal = winPrincipal
        self.cliente = Cliente()
        self.conexionCliente = conexionCliente()
        self.conexionTelefono = conexionTelefono()

        self.listTelefonosInit = []

        self.estado = ""
        self.direccion = Direccion()

        self.configInit()

    def configInit(self):

        #Configurando botones Generales
        self.winPrincipal.btnAgregar_c.clicked.connect(self.onClickAgregar_c)
        self.winPrincipal.btnGuardar_c.clicked.connect(self.onClickGuardar_c)
        self.winPrincipal.btnBorrar_c.clicked.connect(self.onClickBorrar_c)
        self.winPrincipal.btnModificar_c.clicked.connect(
            self.onClickModificar_c)

        #Configurando botones ABM telefono
        self.winPrincipal.btnSumarTelefono_c.clicked.connect(
            self.onClickSumarTelefono)
        self.winPrincipal.btnRestarTelefono_c.clicked.connect(
            self.onClickRestarTelefono)
        self.winPrincipal.btnCancelarTelefono_c.clicked.connect(
            self.onClickCancelarTelefono)
        self.winPrincipal.btnCancelarTelefono_c.setVisible(False)
        self.winPrincipal.btnRestarTelefono_c.setEnabled(False)

        #configurando botones tipo telefono
        self.winPrincipal.btnTelefono_c.clicked.connect(self.onClickTelefono)
        self.winPrincipal.btnCelular_c.clicked.connect(self.onClickCelular)
        self.winPrincipal.btnFax_c.clicked.connect(self.onClickFax)

        #Seteando model y propiedades a la tabla
        self.cargarTabla()
        self.winPrincipal.tvClientes_c.setSortingEnabled(True)
        self.winPrincipal.tvClientes_c.setMouseTracking(True)
        self.winPrincipal.tvClientes_c.setSelectionBehavior(
            QAbstractItemView.SelectRows)

        #Seteando proiedades de la tabla telefono
        self.winPrincipal.tvTelefonos_c.setSortingEnabled(True)
        self.winPrincipal.tvTelefonos_c.setMouseTracking(True)
        self.winPrincipal.tvTelefonos_c.setSelectionBehavior(
            QAbstractItemView.SelectRows)

    def onClickAgregar_c(self):
        self.estado = 'AGREGAR'
        self.validarBotones(button='AGREGAR')

    def onClickGuardar_c(self):
        validar = self.validar()

        if validar != "":
            print(validar)
            alert = QDialog()
            QMessageBox.information(alert, "ERROR", validar)
        else:
            self.cliente.setApellido(self.winPrincipal.txtApellido_c.text())
            self.cliente.setNombre(self.winPrincipal.txtNombre_c.text())
            self.direccion.setDireccion(
                self.winPrincipal.txtDireccion_c.text())
            self.cliente.setEmail(self.winPrincipal.txtEmail_c.text())

            if self.winPrincipal.txtDDpto_c.text() != "":
                self.direccion.setDpto(str(
                    self.winPrincipal.txtDDpto_c.text()))
            else:
                self.direccion.setDpto("")
            if self.winPrincipal.txtDNumero_c.text() != "":
                self.direccion.setNumero(
                    int(self.winPrincipal.txtDNumero_c.text()))
            else:
                self.direccion.setNumero(0)
            if self.winPrincipal.txtDPiso_c.text() != "":
                self.direccion.setPiso(int(
                    self.winPrincipal.txtDPiso_c.text()))
            else:
                self.direccion.setPiso(0)
            self.cliente.setDireccion(self.direccion)

            if self.estado == 'AGREGAR':
                self.insertCliente()
                self.insertTelefono()
            elif self.estado == 'MODIFICAR':
                self.modificarCliente()
                self.updateTelefono()

            self.validarBotones(button='GUARDAR')

    def onClickModificar_c(self):
        self.estado = 'MODIFICAR'
        self.validarBotones(button='MODIFICAR')

    def onClickBorrar_c(self):
        if self.winPrincipal.btnGuardar_c.isEnabled() != True:
            self.conexionCliente.borrarCliente(self.cliente)
            self.cargarTabla()

        self.validarBotones(button='BORRAR')

    def cargarTabla(self):
        #listaClientes = []
        listaClientes = self.conexionCliente.selectCliente()
        header = [
            'ID', 'Apellido', 'Nombre', 'Email', 'Direccion', 'N°', 'Piso',
            'Dpto', 'iddir', 'idper'
        ]
        self.tablaModel = MyTableModel(self.winPrincipal.tvClientes_c,
                                       listaClientes, header)
        self.winPrincipal.tvClientes_c.setModel(self.tablaModel)
        self.winPrincipal.tvClientes_c.selectionModel().currentChanged.connect(
            self.changeSelectedTable)

        self.winPrincipal.tvClientes_c.setColumnHidden(0, True)
        self.winPrincipal.tvClientes_c.setColumnWidth(1, 208)
        self.winPrincipal.tvClientes_c.setColumnWidth(2, 220)
        self.winPrincipal.tvClientes_c.setColumnWidth(3, 280)
        self.winPrincipal.tvClientes_c.setColumnWidth(4, 364)
        self.winPrincipal.tvClientes_c.setColumnWidth(5, 50)
        self.winPrincipal.tvClientes_c.setColumnHidden(6, True)
        self.winPrincipal.tvClientes_c.setColumnHidden(7, True)
        self.winPrincipal.tvClientes_c.setColumnHidden(8, True)
        self.winPrincipal.tvClientes_c.setColumnHidden(9, True)

    def changeSelectedTable(self, selected, deselected):

        clienteList = selected.model().mylist
        clienteSelected = clienteList[selected.row()]
        self.cliente = Cliente()
        self.direccion = Direccion()
        self.cliente.setIdCliente(int(clienteSelected[0]))
        self.cliente.setApellido(clienteSelected[1])
        self.cliente.setNombre(clienteSelected[2])
        self.cliente.setEmail(clienteSelected[3])
        self.direccion = Direccion()
        self.direccion.setDireccion(clienteSelected[4])

        if clienteSelected[5] != None:
            self.direccion.setNumero(int(clienteSelected[5]))

        if clienteSelected[6] != None:
            self.direccion.setPiso(int(clienteSelected[6]))

        if clienteSelected[7] != None:
            self.direccion.setDpto(clienteSelected[7])

        self.direccion.setIdDireccion(int(clienteSelected[8]))
        self.cliente.setDireccion(self.direccion)

        self.cliente.setIdPersona(clienteSelected[9])

        self.winPrincipal.tvClientes_c.setRowHeight(deselected.row(), 28)
        self.winPrincipal.tvClientes_c.setRowHeight(selected.row(), 45)

        self.setCampos()
        self.winPrincipal.btnModificar_c.setEnabled(True)
        self.winPrincipal.btnBorrar_c.setEnabled(True)
        self.winPrincipal.tvTelefonos_c.setModel(None)
        self.cargarTablaTelefono()

    def validarBotones(self, button):
        if button == 'AGREGAR':
            self.winPrincipal.wDatosCliente.setEnabled(True)
            self.winPrincipal.btnBorrar_c.setEnabled(True)
            self.winPrincipal.btnBorrar_c.setText('CANCELAR')
            self.winPrincipal.btnGuardar_c.setEnabled(True)
            self.winPrincipal.btnModificar_c.setEnabled(False)
            self.winPrincipal.btnAgregar_c.setEnabled(False)
            self.winPrincipal.tvClientes_c.setEnabled(False)
            self.limpiarCampos()

        elif button == 'GUARDAR':
            self.winPrincipal.btnModificar_c.setEnabled(False)
            self.winPrincipal.btnAgregar_c.setEnabled(True)
            self.winPrincipal.btnGuardar_c.setEnabled(False)
            self.winPrincipal.btnBorrar_c.setText('BORRAR')
            self.winPrincipal.btnBorrar_c.setEnabled(False)
            self.winPrincipal.tvClientes_c.setEnabled(True)
            self.winPrincipal.wDatosCliente.setEnabled(False)
            self.limpiarCampos()

        elif button == 'MODIFICAR':
            self.winPrincipal.btnModificar_c.setEnabled(False)
            self.winPrincipal.btnAgregar_c.setEnabled(False)
            self.winPrincipal.btnGuardar_c.setEnabled(True)
            self.winPrincipal.btnBorrar_c.setText('Cancelar')
            self.winPrincipal.btnBorrar_c.setEnabled(True)
            self.winPrincipal.tvClientes_c.setEnabled(False)
            self.winPrincipal.wDatosCliente.setEnabled(True)

        elif button == 'BORRAR':
            self.winPrincipal.btnModificar_c.setEnabled(False)
            self.winPrincipal.btnAgregar_c.setEnabled(True)
            self.winPrincipal.btnGuardar_c.setEnabled(False)
            self.winPrincipal.btnBorrar_c.setText('BORRAR')
            self.winPrincipal.btnBorrar_c.setEnabled(False)
            self.winPrincipal.tvClientes_c.setEnabled(True)
            self.winPrincipal.wDatosCliente.setEnabled(False)
            self.limpiarCampos()

    def insertCliente(self):
        if self.cliente.getApellido() != '':
            self.conexionCliente.insertarCliente(cliente=self.cliente)
            self.cargarTabla()

    def modificarCliente(self):
        self.conexionCliente.modificarCliente(self.cliente)
        self.cargarTabla()

    def limpiarCampos(self):
        self.winPrincipal.txtApellido_c.setText('')
        self.winPrincipal.txtNombre_c.setText('')
        self.winPrincipal.txtDireccion_c.setText('')
        self.winPrincipal.txtDNumero_c.setText('')
        self.winPrincipal.txtDPiso_c.setText('')
        self.winPrincipal.txtDDpto_c.setText('')
        self.winPrincipal.txtEmail_c.setText('')
        self.winPrincipal.tvTelefonos_c.setModel(None)

    def setCampos(self):
        self.winPrincipal.txtApellido_c.setText(self.cliente.getApellido())
        self.winPrincipal.txtNombre_c.setText(self.cliente.getNombre())
        self.winPrincipal.txtEmail_c.setText(self.cliente.getEmail())

        self.winPrincipal.txtDireccion_c.setText(
            self.cliente.getDireccion().getDireccion())

        if self.cliente.getDireccion().getNumero() != None:
            self.winPrincipal.txtDNumero_c.setText(
                str(self.cliente.getDireccion().getNumero()))
        else:
            self.winPrincipal.txtDNumero_c.setText('')

        if self.cliente.getDireccion().getPiso() != None:
            self.winPrincipal.txtDPiso_c.setText(
                str(self.cliente.getDireccion().getPiso()))
        else:
            self.winPrincipal.txtDPiso_c.setText('')

        if self.cliente.getDireccion().getDpto() != None:
            self.winPrincipal.txtDDpto_c.setText(
                self.cliente.getDireccion().getDpto())
        else:
            self.winPrincipal.txtDDpto_c.setText('')

    def validar(self):
        mensaje = ''
        if self.winPrincipal.txtNombre_c.text() == '':
            mensaje = "Falta ingresar un Nombre"
        elif self.winPrincipal.txtApellido_c.text() == '':
            mensaje = "Falta ingresar Apellido"
        elif self.winPrincipal.txtDireccion_c.text() == '':
            mensaje = "Falta ingresar una Direccion"
        elif self.winPrincipal.txtDNumero_c.text() == '':
            mensaje = "Falta ingresar un N° de Direccion"

        return mensaje

    def cargarTablaTelefono(self):
        self.listTelefonosInit = self.conexionTelefono.selectTelefono(
            self.cliente)
        if len(self.listTelefonosInit) > 0:
            header = ['ID', 'Numero', 'TIPO']
            tableModel = MyTableModel(self.winPrincipal,
                                      self.listTelefonosInit, header)
            self.winPrincipal.tvTelefonos_c.setModel(tableModel)
            self.winPrincipal.tvTelefonos_c.selectionModel(
            ).currentChanged.connect(self.changeSelectedTableTel)

            self.winPrincipal.tvTelefonos_c.setColumnHidden(0, True)
            self.winPrincipal.tvTelefonos_c.setColumnWidth(1, 36)
            self.winPrincipal.tvTelefonos_c.setColumnWidth(2, 175)

            for r in range(0, len(self.listTelefonosInit)):
                self.winPrincipal.tvTelefonos_c.setRowHidden(r, False)

    def changeSelectedTableTel(self, selected, deselected):
        listTelefonos = selected.model().mylist
        self.telefonoSelected = ()
        self.telefonoSelected = listTelefonos[selected.row()]

        self.telefonoSelectedRow = selected.row()
        self.winPrincipal.txtTelefono_c.setText(str(self.telefonoSelected[2]))

        self.setTipoTelefono(str(self.telefonoSelected[1]))
        self.winPrincipal.btnCancelarTelefono_c.setVisible(True)
        self.winPrincipal.btnRestarTelefono_c.setEnabled(True)
        self.winPrincipal.tvTelefonos_c.setEnabled(False)

        self.winPrincipal.btnGuardar_c.setEnabled(False)

    def updateTelefono(self):

        listTelefono = []
        listTelefono = list(
            self.winPrincipal.tvTelefonos_c.model().mylist).copy()

        estado = ''
        telNew = Telefono()
        if len(listTelefono) > 0:
            if len(self.listTelefonosInit) > 0:

                listTelInit = list(self.listTelefonosInit)
                parche = (listTelefono[0][0], listTelefono[0][1],
                          str(listTelefono[0][2]))
                listTelefono[0] = parche
                #Recorre la lista de telefono inicial
                for telInit in listTelInit:
                    #recorre la lista de telefonos nueva
                    for tel in listTelefono:
                        telNew.setIdPersona(self.cliente.getIdPersona())
                        telNew.setIdTelefono(tel[0])
                        telNew.setTipo(tel[1])
                        if tel[2] == "":
                            estado = 'DEL'
                            break
                        else:
                            telNew.setTelefono(tel[2])

                        if tel[0] == 0:
                            estado = 'INS'
                            break

                        if telInit[0] == tel[0]:
                            if telInit[1] != tel[1] or telInit[2] != tel[2]:
                                estado = 'UPD'
                                break

                    if estado == 'UPD':
                        self.conexionTelefono.modificarTelefono(telNew)
                    elif estado == "INS":
                        self.conexionTelefono.insertarTelefono(telNew)
                    elif estado == 'DEL':
                        self.conexionTelefono.borrarTelefono(telNew)
            #Si la lista de telefono inicial es cero
            else:
                #recorre la lista de telefonos nueva para agregarlos a todos
                for telN in listTelefono:
                    if telN[2] != '':
                        telNew = Telefono()
                        telNew.setIdPersona(self.cliente.getIdPersona())
                        telNew.setIdTelefono(telN[0])
                        telNew.setTipo(telN[1])
                        telNew.setTelefono(telN[2])
                        self.conexionTelefono.insertarTelefono(telNew)

    def insertTelefono(self):

        listTelefonosNew = []
        tel = self.winPrincipal.tvTelefonos_c.model()

        listTelefonosNew = list(
            self.winPrincipal.tvTelefonos_c.model().mylist).copy()

        if len(listTelefonosNew) > 0:
            self.conexionTelefono.insertTelefonoInit(listTelefonosNew)

    def onClickCancelarTelefono(self):
        self.winPrincipal.btnCancelarTelefono_c.setVisible(False)
        self.winPrincipal.txtTelefono_c.setText('')

        self.winPrincipal.btnRestarTelefono_c.setEnabled(False)
        self.winPrincipal.tvTelefonos_c.clearSelection()
        self.winPrincipal.tvTelefonos_c.setEnabled(True)

        self.winPrincipal.btnGuardar_c.setEnabled(True)

    def onClickSumarTelefono(self):
        numTelefono = self.winPrincipal.txtTelefono_c.text()

        if numTelefono.isdigit() == True:
            if self.winPrincipal.btnCancelarTelefono_c.isVisible() is True:
                self.updateTelefonoTabla()
            else:
                self.insertTelefonoTabla()

            self.winPrincipal.tvTelefonos_c.clearSelection()
            self.winPrincipal.btnRestarTelefono_c.setEnabled(False)
            self.winPrincipal.btnCancelarTelefono_c.setVisible(False)
            self.winPrincipal.txtTelefono_c.setText('')
            self.winPrincipal.tvTelefonos_c.setEnabled(True)

            self.winPrincipal.btnGuardar_c.setEnabled(True)
        else:
            alert = QDialog()
            QMessageBox.information(alert, "ERROR",
                                    "El numero de telefono no es valido.")

    def onClickRestarTelefono(self):
        listTabTel = []
        #listTabTel = list(self.winPrincipal.tvTelefonos_c.model().mylist).copy()
        tipoTel = str(self.getTipoTelefono())
        listTelefonosNew = []

        listTabTel = list(
            self.winPrincipal.tvTelefonos_c.model().mylist).copy()

        header = ['Id', 'Tipo', 'Numero']
        telDel = [self.telefonoSelected[0], self.telefonoSelected[1], '']
        listTabTel[self.telefonoSelectedRow] = telDel
        tableTelModel = MyTableModel(self.winPrincipal, listTabTel, header)
        self.winPrincipal.tvTelefonos_c.setModel(tableTelModel)
        self.winPrincipal.tvTelefonos_c.selectionModel(
        ).currentChanged.connect(self.changeSelectedTableTel)
        self.winPrincipal.tvTelefonos_c.setRowHidden(self.telefonoSelectedRow,
                                                     True)

        self.winPrincipal.btnCancelarTelefono_c.setVisible(False)
        self.winPrincipal.txtTelefono_c.setText('')
        self.winPrincipal.btnRestarTelefono_c.setEnabled(False)
        self.winPrincipal.tvTelefonos_c.setEnabled(True)

        self.winPrincipal.btnGuardar_c.setEnabled(True)

    def onClickTelefono(self):
        self.changeTipoTelefono(button='TEL')

    def onClickCelular(self):
        self.changeTipoTelefono(button='CEL')

    def onClickFax(self):
        self.changeTipoTelefono(button='FAX')

    def changeTipoTelefono(self, button):

        if button == 'TEL':
            self.winPrincipal.btnTelefono_c.setEnabled(False)
            self.winPrincipal.btnCelular_c.setEnabled(True)
            self.winPrincipal.btnFax_c.setEnabled(True)
        elif button == 'CEL':
            self.winPrincipal.btnTelefono_c.setEnabled(True)
            self.winPrincipal.btnCelular_c.setEnabled(False)
            self.winPrincipal.btnFax_c.setEnabled(True)
        elif button == 'FAX':
            self.winPrincipal.btnTelefono_c.setEnabled(True)
            self.winPrincipal.btnCelular_c.setEnabled(True)
            self.winPrincipal.btnFax_c.setEnabled(False)

    def setTipoTelefono(self, tipoTelefono):

        if tipoTelefono == 'TEL':
            self.winPrincipal.btnTelefono_c.setEnabled(False)
            self.winPrincipal.btnCelular_c.setEnabled(True)
            self.winPrincipal.btnFax_c.setEnabled(True)
        elif tipoTelefono == 'CEL':
            self.winPrincipal.btnTelefono_c.setEnabled(True)
            self.winPrincipal.btnCelular_c.setEnabled(False)
            self.winPrincipal.btnFax_c.setEnabled(True)
        elif tipoTelefono == 'FAX':
            self.winPrincipal.btnTelefono_c.setEnabled(True)
            self.winPrincipal.btnCelular_c.setEnabled(True)
            self.winPrincipal.btnFax_c.setEnabled(False)

    def getTipoTelefono(self):

        if self.winPrincipal.btnTelefono_c.isEnabled() != True:
            return 'TEL'
        elif self.winPrincipal.btnCelular_c.isEnabled() != True:
            return 'CEL'
        elif self.winPrincipal.btnFax_c.isEnabled() != True:
            return 'FAX'

    def insertTelefonoTabla(self):
        numTel = self.winPrincipal.txtTelefono_c.text()
        tipoTel = str(self.getTipoTelefono())

        modelListTelefono = self.winPrincipal.tvTelefonos_c.model()
        header = ['ID', 'Tipo', 'Numero']

        if modelListTelefono is not None:
            listTabTel = list(self.winPrincipal.tvTelefonos_c.model().mylist)

            if len(listTabTel) > 0 or listTabTel is not None:
                tuplaTel = ('0', tipoTel, numTel)
                listTabTel.append(tuplaTel)
                tupleTable = tuple(listTabTel)

                tableModel = MyTableModel(self.winPrincipal, tupleTable,
                                          header)
                self.winPrincipal.tvTelefonos_c.setModel(tableModel)
                self.winPrincipal.tvTelefonos_c.selectionModel(
                ).currentChanged.connect(self.changeSelectedTableTel)
        else:
            lista = []
            tuplaTel = ('0', tipoTel, numTel)
            lista.append(tuplaTel)

            tableModel = MyTableModel(self.winPrincipal, lista, header)
            self.winPrincipal.tvTelefonos_c.setModel(tableModel)
            self.winPrincipal.tvTelefonos_c.selectionModel(
            ).currentChanged.connect(self.changeSelectedTableTel)
            self.winPrincipal.tvTelefonos_c.setColumnHidden(0, True)
            self.winPrincipal.tvTelefonos_c.setColumnWidth(1, 36)
            self.winPrincipal.tvTelefonos_c.setColumnWidth(2, 175)

    def updateTelefonoTabla(self):
        listTabTel = []
        #listTabTel = list(self.winPrincipal.tvTelefonos_c.model().mylist).copy()
        tipoTel = str(self.getTipoTelefono())
        listTelefonosNew = []
        prob = self.winPrincipal.tvTelefonos_c.selectionModel()
        prob1 = self.winPrincipal.tvTelefonos_c.model()
        listTabTel = list(
            self.winPrincipal.tvTelefonos_c.model().mylist).copy()
        """
        for lt in listTabTel:
            if lt[0] == self.telefonoSelected[0]:
                lt = (self.telefonoSelected[0], tipoTel, self.winPrincipal.txtTelefono_c.text())

            listTelefonosNew.append(lt)
        """
        telUpd = (self.telefonoSelected[0], tipoTel,
                  int(self.winPrincipal.txtTelefono_c.text()))
        listTabTel[self.telefonoSelectedRow] = telUpd
        header = ['ID', 'Tipo', 'Numero']
        tableModel = MyTableModel(self.winPrincipal, listTabTel, header)
        self.winPrincipal.tvTelefonos_c.setModel(tableModel)
        self.winPrincipal.tvTelefonos_c.selectionModel(
        ).currentChanged.connect(self.changeSelectedTableTel)
 def __init__(self):
     self.conexion = Conexion()
     self.cliente = Cliente()
class PestaniaEstadisticas():

    def __init__(self, winPrincipal):
        self.conexionesGenerales = ConexionGenerales()
        self.winPrincipal = winPrincipal


        hoy = datetime.datetime.now().date()
        self.winPrincipal.deHasta_stock.setDate(hoy)
        self.winPrincipal.deHasta_dinero.setDate(hoy)
        self.winPrincipal.deHasta_saldos.setDate(hoy)

        self.winPrincipal.btnGenerarPdf_dinero.clicked.connect(self.generarDinero)
        self.winPrincipal.btnGenerarPdf_stock.clicked.connect(self.generarStock)
        self.winPrincipal.btnGenerarPdf_saldos.clicked.connect(self.generarSaldos)
        self.winPrincipal.txtFilterPersona_saldos.returnPressed.connect(self.buscarPersonas)
        self.winPrincipal.rbClientes_saldos.clicked.connect(self.changePersona)
        self.winPrincipal.rbProveedores_saldos.clicked.connect(self.changePersona)

        self.winPrincipal.chbTodos_saldos.clicked.connect(self.clickTodos)

        self.winPrincipal.chbHoy_stock.clicked.connect(self.clickHoy_stock)
        self.winPrincipal.chbHoy_saldos.clicked.connect(self.clickHoy_saldos)
        self.winPrincipal.chbHoy_dinero.clicked.connect(self.clickHoy_dinero)


        self.winPrincipal.tvPersonas_saldos.setSortingEnabled(True)
        self.winPrincipal.tvPersonas_saldos.setMouseTracking(True)
        self.winPrincipal.tvPersonas_saldos.setSelectionBehavior(QAbstractItemView.SelectRows)


    def generarDinero(self):
        intervalo = 'month'
        if self.winPrincipal.cbIntervalo_dinero.currentText() == 'Semana':
            intervalo = 'week'
        elif self.winPrincipal.cbIntervalo_dinero.currentText() == 'Año':
            intervalo = 'year'
        elif self.winPrincipal.cbIntervalo_dinero.currentText() == 'Dia':
            intervalo = 'day'

        auxDesde = self.winPrincipal.deDesde_dinero.text()

        desde = auxDesde[6:10] + '-' + auxDesde[3:5] + '-' + auxDesde[0:2]

        auxHasta = self.winPrincipal.deHasta_dinero.text()
        hasta = auxHasta[6:10] + '-' + auxHasta[3:5] + '-' + auxHasta[0:2]

        listaEntradaTransacciones = self.conexionesGenerales.selectEntradasTransacciones(intervalo, desde, hasta)
        listaEntradaPagos = self.conexionesGenerales.selectEntradaPagos(intervalo, desde, hasta)

        listaSalidaTransacciones = self.conexionesGenerales.selectSalidaTransacciones(intervalo, desde, hasta)
        listaSalidaPagos = self.conexionesGenerales.selectSalidaPagos(intervalo, desde, hasta)

        listaGeneral =[]

        if len(listaEntradaPagos) < 1 and len(listaEntradaTransacciones) < 1 and len(listaSalidaPagos) < 1 and len(listaSalidaTransacciones) < 1:
            pass

        else:
            dineroEntrada = 0
            dineroSalida = 0
            for entradaP in listaEntradaPagos:
                dineroEntrada += float(entradaP[1])
                monto = '$ + ' + str("{0:.2f}".format(entradaP[1]))
                entrada = []
                entrada.append(entradaP[0])
                entrada.append(monto)
                entrada.append(entradaP[2])
                #entrada = (entradaP[0] + monto + entradaP[2] )
                listaGeneral.append(entrada)

            for entradaT in listaEntradaTransacciones:
                dineroEntrada += float(entradaT[1])
                monto = '$ + ' + str("{0:.2f}".format(entradaT[1]))
                entrada = []
                entrada.append(entradaT[0])
                entrada.append(monto)
                entrada.append(entradaT[2])
                #entrada = (entradaT[0], monto, entradaT[2])
                listaGeneral.append(entrada)

            for salidaP in listaSalidaPagos:
                dineroSalida += float(salidaP[1])
                monto = '$ - ' + str("{0:.2f}".format(salidaP[1]))
                salida = []
                salida.append(salidaP[0])
                salida.append(monto)
                salida.append(salidaP[2])
                #salida = (salidaP[0], monto, salidaP[2])
                listaGeneral.append(salida)

            for salidaT in listaSalidaTransacciones:
                dineroSalida += float(salidaT[1])
                monto = '$ - ' + str("{0:.2f}".format(salidaT[1]))
                salida = []
                salida.append(salidaT[0])
                salida.append(monto)
                salida.append(salidaT[2])
                #salida = (salidaT[0], monto, salidaT[2])
                listaGeneral.append(salida)

            listTable = ""
            listaGeneral.sort()
            for lista in listaGeneral:
                listTable += """
                                <tr height="80">
                                    <td width="60%" align="left" >
                                    <br>""" + str(lista[0])  + """<br>
                                    </td>
                                    <td width="20%" align="right">
                                        <br> &nbsp;&nbsp;""" + str(lista[1])  + """<br>
                                    </td>
                                    <td width="20%" align="center">
                                       <br>&nbsp;&nbsp; """ + str(lista[2])  + """<br>
                                    </td>
                                </tr>
                           """

            contenido = """
                             <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>
                                    FECHA
                                    </b>
                                </td>
                                <td width="20%"  align="center" valign="middle">
                                    <b>
                                        DINERO
                                    </b>
                                </td>
                                <td width="20%"  align="center" valign="middle">
                                    <b>
                                        TIPO MOVIMIENTO
                                    </b>
                                </td>
                              </tr>
                          </table>
                          <br>
                          <table width="600" >
                            """+listTable +"""

                          </table>

                          <p>
                            <br>
                            Dinero entrante = $ + """ +str("{0:.2f}".format(dineroEntrada)) + """
                            <br>
                            Dinero salida = $ - """+ str("{0:.2f}".format(dineroSalida)) + """
                            <br>
                            <br>
                            Total .... : $ """+ str("{0:.2f}".format(dineroEntrada - dineroSalida)) +"""
                          </p>
                        """
            self.generatePDF(contenido)


    def generarStock(self):
        self.listFinal = []
        self.title = "intervalo"

        intervalo = 'month'
        if self.winPrincipal.cbIntervalo_stock.currentText() == 'Semana':
            intervalo = 'week'
        elif self.winPrincipal.cbIntervalo_stock.currentText() == 'Año':
            intervalo = 'year'


        auxDesde = self.winPrincipal.deDesde_stock.text()

        desde = auxDesde[6:10] + '-' + auxDesde[3:5] + '-' + auxDesde[0:2]

        auxHasta = self.winPrincipal.deHasta_stock.text()
        hasta = auxHasta[6:10] + '-' + auxHasta[3:5] + '-' + auxHasta[0:2]

        listVentas = self.conexionesGenerales.selectVentas(intervalo, desde, hasta)
        listCompras = self.conexionesGenerales.selectCompras(intervalo, desde, hasta)

        if len(listCompras) < 1 and len(listVentas) < 1:
            alert = QDialog()
            confirm = QMessageBox.question(alert, "Mensaje", "Verifique los valores, la consulta no tiene ningun dato.", QMessageBox.Ok)

        else:
            i= 0
            for ventas in listVentas:
                itemList = (str(ventas[0]), listCompras[i][1], ventas[1])
                self.listFinal.append(itemList)
                i += 1


            listTable = ""
            cantMax = 0
            tupleFecha = []
            tupleCompra = []
            tupleVenta = []
            listFechas = []
            for lista in self.listFinal:
                i = 0
                listTable += """
                                            <tr height="80">
                                                <td width="60%" align="left" >
                                                <br>""" + str(lista[0])  + """<br>
                                                </td>
                                                <td width="20%" align="center">
                                                    <br> &nbsp;&nbsp;""" + str(lista[1])  + """<br>
                                                </td>
                                                <td width="20%" align="center">
                                                   <br>&nbsp;&nbsp; """ + str(lista[2])  + """<br>
                                                </td>
                                            </tr>
                                       """
                if int(lista[1]) > int(lista[2]):
                    if int(lista[1]) > cantMax:
                        cantMax = int(lista[1])
                else:
                    if int(lista[2]) > cantMax:
                        cantMax = int(lista[2])

                listFechas.append(str(lista[0]))

                tupleFecha.append(str(lista[0])) #+= str(lista[0])
                tupleCompra.append(int(lista[1]))
                tupleVenta.append(int(lista[2]))
                i = i + 1

            generateGraphic = []
            tdFecha = ""
            trCantFechas = ""

            betweenCant = int(cantMax/12)
            listRange = []
            for i in range(0, cantMax, betweenCant):
                listRange.append(i)
                tdFecha = ""
                for lista in self.listFinal:

                    if i < int(lista[1]):
                        tdCantCompra = """
                                            <td width="50" style=" background-color: red;">
                                            </td>
                                       """
                    else:
                        tdCantCompra = """
                                            <td width="50">
                                            </td>
                                       """

                    if i < int(lista[2]):
                        tdCantVenta = """
                                            <td width="50" style=" background-color: blue;">
                                            </td>
                                      """
                    else:
                       tdCantVenta = """
                                            <td width="50">
                                            </td>
                                      """

                    tdFecha += tdCantCompra + tdCantVenta

                tr = """
                        <tr>
                            <td width="60">
                                """+ str(i) +"""
                            </td>
                            """+ str(tdFecha) +"""
                        </tr>
                     """

                generateGraphic.append(tr)


            n_groups = len(tupleFecha)

            fig, ax = pyplot.subplots()

            index = np.arange(n_groups)
            bar_width = 0.20

            opacity = 0.4
            error_config = {'ecolor': '0.3'}

            rects1 = pyplot.bar(index, tupleVenta, bar_width,
                             alpha=opacity,
                             color='b',
                             error_kw=error_config,
                             label='Venta')

            rects2 = pyplot.bar(index + bar_width, tupleCompra, bar_width,
                             alpha=opacity,
                             color='r',
                             error_kw=error_config,
                             label='Compra')

            pyplot.xlabel('Fecha')
            pyplot.ylabel('Cantidad')
            pyplot.title('Cantidad por fechas')
            pyplot.xticks(index + bar_width, tupleFecha)
            pyplot.legend()

            pyplot.tight_layout()
            pyplot.savefig('../archivos/picture1.png')

            trFechas = """<tr> <td width="60">CANT/FECHAS</td>"""
            for fecha in listFechas:
                tdFecha = """<td width="50" align="right" font-size="8"> """+ str(fecha) +"""</td> <td width="50"> </td> """
                trFechas += tdFecha

            trFechas += "</tr>"

            generateGraphic.reverse()

            generateGraphic.append(trFechas)

            finalGraphic = ""

            for graphic in generateGraphic:
                finalGraphic += graphic


            contenido = """
                         <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>
                                    FECHA
                                    </b>
                                </td>
                                <td width="20%"  align="center" valign="middle" style=" background-color: red;">
                                    <b>
                                        PRODUCTOS COMPRADOS
                                    </b>
                                </td>
                                <td width="20%"  align="center" valign="middle" style="background-color: blue;">
                                    <b>
                                        PRODUCTOS VENDIDOS
                                    </b>
                                </td>
                              </tr>
                          </table>

                          <br>
                          <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>
                          <IMG SRC="../archivos/picture1.png" width="600" height="600">
                          <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>
                        """

            self.generatePDF(contenido)


    def clickHoy_stock(self):
        if self.winPrincipal.chbHoy_stock.isChecked() == True:
            self.winPrincipal.deHasta_stock.setEnabled(False)
            hoy = datetime.datetime.now().date()
            self.winPrincipal.deHasta_stock.setDate(hoy)
        else:
            self.winPrincipal.deHasta_stock.setEnabled(True)

    def clickHoy_saldos(self):
        if self.winPrincipal.chbHoy_saldos.isChecked() == True:
            self.winPrincipal.deHasta_saldos.setEnabled(False)
            hoy = datetime.datetime.now().date()
            self.winPrincipal.deHasta_saldos.setDate(hoy)
        else:
            self.winPrincipal.deHasta_saldos.setEnabled(True)

    def clickHoy_dinero(self):
        if self.winPrincipal.chbHoy_dinero.isChecked() == True:
            self.winPrincipal.deHasta_dinero.setEnabled(False)
            hoy = datetime.datetime.now().date()
            self.winPrincipal.deHasta_dinero.setDate(hoy)
        else:
            self.winPrincipal.deHasta_dinero.setEnabled(True)

    def generarSaldos(self):
        validate = True
        if self.winPrincipal.chbTodos_saldos.isChecked() == False:
            if self.winPrincipal.rbProveedores_saldos.isChecked() == True:
                if self.proveedores is None:
                    validate = False
            else:
                if self.clientes is None:
                    validate = False

        if validate == True:
            if self.winPrincipal.chbTodos_saldos.isChecked() == True:
                if self.winPrincipal.rbProveedores_saldos.isChecked() == True:
                    listProveedores = self.conexionesGenerales.selectProveedor('')
                    contenido = ""
                    for proveedores in listProveedores:
                        self.proveedores = Proveedor()
                        self.proveedores.setIdProveedor(int(proveedores[0]))
                        self.proveedores.setDescripcion(str(proveedores[1]))
                        self.proveedores.setNombre(str(proveedores[2]))

                        contenido += self.generateTable('PROVEEDOR', self.proveedores)
                else:
                    listClientes = self.conexionesGenerales.selectCliente('')
                    contenido = ""
                    for clientes in listClientes:
                        self.clientes = Cliente()
                        self.clientes.setIdCliente(int(clientes[0]))
                        self.clientes.setApellido(str(clientes[1]))
                        self.clientes.setNombre(str(clientes[2]))

                        contenido += self.generateTable('CLIENTE', self.clientes)
            else:
                if self.winPrincipal.rbProveedores_saldos.isChecked() == True:
                    contenido = self.generateTable('PROVEEDOR', self.proveedores)
                else:
                    contenido = self.generateTable('CLIENTE', self.clientes)


            self.generatePDF(contenido)
        else:
            alert = QDialog()
            confirm = QMessageBox.question(alert, "Mensaje", "Falta selecciona la/s persona/s.", QMessageBox.Ok)




    def generateTable(self, type, persona):

        intervalo = 'month'
        if self.winPrincipal.cbIntervalo_saldos.currentText() == 'Semana':
            intervalo = 'week'
        elif self.winPrincipal.cbIntervalo_saldos.currentText() == 'Año':
            intervalo = 'year'
        elif self.winPrincipal.cbIntervalo_saldos.currentText() == 'Dia':
            intervalo = 'day'


        auxDesde = self.winPrincipal.deDesde_saldos.text()

        desde = auxDesde[6:10] + '-' + auxDesde[3:5] + '-' + auxDesde[0:2]

        auxHasta = self.winPrincipal.deHasta_saldos.text()
        hasta = auxHasta[6:10] + '-' + auxHasta[3:5] + '-' + auxHasta[0:2]

        listTransacciones = []
        listPagos = []
        #Total de los pagos
        pagosTotal = 0
        #Total de las transacciones en estado 0
        transaccionesTotal = 0
        total = 0
        #Lista completa (transacciones + pagos)
        listDetalle = []
        apellido = ''
        if type == "CLIENTE":
            listPagos = self.conexionesGenerales.selectListPagosCliente(persona, intervalo, desde, hasta)
            listTransacciones = self.conexionesGenerales.selectListTransaccionCliente(persona, intervalo, desde, hasta)


            if len(listPagos) > 0:
                for pagos in listPagos:
                    pagosTotal += float(pagos[1])
                    auxMonto = "$  + " + str("{0:.2f}".format(pagos[1]))
                    auxPagos = (str(pagos[0]), auxMonto, str(pagos[2]))
                    listDetalle.append(auxPagos)
            else:
                pagosTotal = 0

            if len(listTransacciones):
                for transacciones in listTransacciones:
                    transaccionesTotal += transacciones[1]
                    auxMonto = "$  - " + str("{0:.2f}".format(transacciones[1]))
                    auxTransaccion = (str(transacciones[0]), auxMonto, str(transacciones[2]))
                    listDetalle.append(auxTransaccion)
            else:
                transaccionesTotal = 0

            total = pagosTotal  - transaccionesTotal
            apellido = persona.getApellido()
        elif type == "PROVEEDOR":
            listPagos = self.conexionesGenerales.selectListPagosProveedor(persona, intervalo, desde, hasta)
            listTransacciones = self.conexionesGenerales.selectListTransaccionProveedor(persona, intervalo, desde, hasta)

            if len(listPagos) > 0:
                for pagos in listPagos:
                    pagosTotal += float(pagos[1])
                    auxMonto = "$  + " + str("{0:.2f}".format(pagos[1]))
                    auxPagos = (str(pagos[0]), auxMonto, str(pagos[2]))
                    listDetalle.append(auxPagos)
            else:
                pagosTotal = 0

            if len(listTransacciones):
                for transacciones in listTransacciones:
                    transaccionesTotal += transacciones[1]
                    auxMonto = "$  - " + str("{0:.2f}".format(transacciones[1]))
                    auxTransaccion = (str(transacciones[0]), auxMonto, str(transacciones[2]))
                    listDetalle.append(auxTransaccion)
            else:
                transaccionesTotal = 0


            total = pagosTotal - transaccionesTotal
            apellido = persona.getDescripcion()


        listDetalle.sort()
        listTable = ""
        for lista in listDetalle:
                listTable += """
                                            <tr height="80">
                                                <td width="60%" align="left" >
                                                <br>""" + str(lista[0])  + """<br>
                                                </td>
                                                <td width="20%" align="right">
                                                    <br> &nbsp;&nbsp;""" + str(lista[1])  + """<br>
                                                </td>
                                                <td width="20%" align="center">
                                                   <br>&nbsp;&nbsp; """ + str(lista[2])  + """<br>
                                                </td>
                                            </tr>
                                       """

        contenido = """
                            <br>
                            <br>
                          <table width="600" height="100">
                            <tr>
                                <br> Nombre : """+ persona.getNombre() +""" <br>
                                Apellido : """ + apellido + """<br>
                            </tr>
                          </table>
                          <table width="600"  >
                                <tr height="80" style=" background-color: gray; border-style: inset;">
                                    <td width="60%" align="center" >
                                        <br>FECHA<br>
                                        </td>
                                        <td width="20%" align="center">
                                            <br> MONTO <br>
                                        </td>
                                        <td width="20%" align="center">
                                           <br>ACCION<br>
                                        </td>
                                </tr>
                                """ + listTable + """
                          </table>

                          <table width="600" height="0" style="border-color: black; border-width: 0.5px; border-spacing: 0;">
                            <tr>
                                <td width="70%"><br>SALDO..............<br></td>
                                <td><br> $ """ + str("{0:.2f}".format(total))+ """ <br></td>
                            </tr>
                          </table>
                          <br>
                          <br>
                          <br>
                          <br>
                          <br>
                          <br>
                          <br>
                            <br>
                    """

        return contenido



    def buscarPersonas(self):
         if self.winPrincipal.txtFilterPersona_saldos.hasFocus() is True:
            self.cargarTablaSaldos()



    def cargarTablaSaldos(self):

        parameter = self.winPrincipal.txtFilterPersona_saldos.text()

        if self.winPrincipal.rbProveedores_saldos.isChecked() is True:
            listaProveedores = self.conexionesGenerales.selectProveedor(parameter)

            if len(listaProveedores) > 0:
                header = ['ID','Apellido','Nombre']
                self.tablaModel = MyTableModel(self.winPrincipal.tvPersonas_saldos, listaProveedores, header)
                self.winPrincipal.tvPersonas_saldos.setModel(self.tablaModel)
                self.winPrincipal.tvPersonas_saldos.selectionModel().currentChanged.connect(self.changeSelectedTable)


                self.winPrincipal.tvPersonas_saldos.setColumnHidden(0, True)
                self.winPrincipal.tvPersonas_saldos.setColumnWidth(1, 120)
                self.winPrincipal.tvPersonas_saldos.setColumnWidth(2, 120)
        else:
            listaClientes = self.conexionesGenerales.selectCliente(parameter)

            if len(listaClientes) > 0:
                header = ['ID','Apellido','Nombre']
                self.tablaModel = MyTableModel(self.winPrincipal.tvPersonas_saldos, listaClientes, header)
                self.winPrincipal.tvPersonas_saldos.setModel(self.tablaModel)
                self.winPrincipal.tvPersonas_saldos.selectionModel().currentChanged.connect(self.changeSelectedTable)


                self.winPrincipal.tvPersonas_saldos.setColumnHidden(0, True)
                self.winPrincipal.tvPersonas_saldos.setColumnWidth(1, 120)
                self.winPrincipal.tvPersonas_saldos.setColumnWidth(2, 120)



    def changeSelectedTable(self, selected, deselected):
        if self.winPrincipal.rbProveedores_saldos.isChecked() is True:
            proveedorList = selected.model().mylist
            proveedorSelected = proveedorList[selected.row()]

            self.proveedores = Proveedor()

            self.proveedores.setIdProveedor(int(proveedorSelected[0]))
            self.proveedores.setDescripcion(str(proveedorSelected[1]))
            self.proveedores.setNombre(str(proveedorSelected[2]))
        else:
            clienteList = selected.model().mylist
            clienteSelected = clienteList[selected.row()]

            self.clientes = Cliente()

            self.clientes = Cliente()
            self.clientes.setIdCliente(int(clienteSelected[0]))
            self.clientes.setApellido(str(clienteSelected[1]))
            self.clientes.setNombre(str(clienteSelected[2]))

    def changePersona(self):
        self.clientes = None
        self.proveedores = None

        self.winPrincipal.txtFilterPersona_saldos.setText('')
        self.winPrincipal.tvPersonas_saldos.setModel(None)

    def clickTodos(self):
        if self.winPrincipal.chbTodos_saldos.isChecked() == True:
            self.winPrincipal.txtFilterPersona_saldos.setEnabled(False)
            self.winPrincipal.tvPersonas_saldos.setModel(None)
        else:
            self.winPrincipal.txtFilterPersona_saldos.setEnabled(True)


    def generatePDF(self, contenido):
        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'

        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>
                        SALDOS
                    </p>
                    <br>

                  """+ contenido

        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)
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> &nbsp;&nbsp;""" + str(transaccion[3])  + """<br>
                                            </td>
                                            <td width="50%" >
                                               <br>&nbsp;&nbsp; """ + str(transaccion[4])  + """<br>
                                            </td>
                                            <td width="10%" align="right" >
                                              <br>  $ """ + str(transaccion[5])  + """&nbsp;&nbsp;<br>
                                            </td>
                                            <td width="10%" align="right" >
                                              <br>  $ """ + str( int(transaccion[1]) * float(transaccion[5]))  + """&nbsp;&nbsp;<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 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> &nbsp;&nbsp;""" + str(transaccion[3])  + """<br>
                                            </td>
                                            <td width="50%" >
                                               <br>&nbsp;&nbsp; """ + str(transaccion[4])  + """<br>
                                            </td>
                                            <td width="10%" align="right" >
                                              <br>  $ """ + str(transaccion[5])  + """&nbsp;&nbsp;<br>
                                            </td>
                                            <td width="10%" align="right" >
                                              <br>  $ """ + str( int(transaccion[1]) * float(transaccion[5]))  + """&nbsp;&nbsp;<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 PestaniaEstadisticas():
    def __init__(self, winPrincipal):
        self.conexionesGenerales = ConexionGenerales()
        self.winPrincipal = winPrincipal

        hoy = datetime.datetime.now().date()
        self.winPrincipal.deHasta_stock.setDate(hoy)
        self.winPrincipal.deHasta_dinero.setDate(hoy)
        self.winPrincipal.deHasta_saldos.setDate(hoy)

        self.winPrincipal.btnGenerarPdf_dinero.clicked.connect(
            self.generarDinero)
        self.winPrincipal.btnGenerarPdf_stock.clicked.connect(
            self.generarStock)
        self.winPrincipal.btnGenerarPdf_saldos.clicked.connect(
            self.generarSaldos)
        self.winPrincipal.txtFilterPersona_saldos.returnPressed.connect(
            self.buscarPersonas)
        self.winPrincipal.rbClientes_saldos.clicked.connect(self.changePersona)
        self.winPrincipal.rbProveedores_saldos.clicked.connect(
            self.changePersona)

        self.winPrincipal.chbTodos_saldos.clicked.connect(self.clickTodos)

        self.winPrincipal.chbHoy_stock.clicked.connect(self.clickHoy_stock)
        self.winPrincipal.chbHoy_saldos.clicked.connect(self.clickHoy_saldos)
        self.winPrincipal.chbHoy_dinero.clicked.connect(self.clickHoy_dinero)

        self.winPrincipal.tvPersonas_saldos.setSortingEnabled(True)
        self.winPrincipal.tvPersonas_saldos.setMouseTracking(True)
        self.winPrincipal.tvPersonas_saldos.setSelectionBehavior(
            QAbstractItemView.SelectRows)

    def generarDinero(self):
        intervalo = 'month'
        if self.winPrincipal.cbIntervalo_dinero.currentText() == 'Semana':
            intervalo = 'week'
        elif self.winPrincipal.cbIntervalo_dinero.currentText() == 'Año':
            intervalo = 'year'
        elif self.winPrincipal.cbIntervalo_dinero.currentText() == 'Dia':
            intervalo = 'day'

        auxDesde = self.winPrincipal.deDesde_dinero.text()

        desde = auxDesde[6:10] + '-' + auxDesde[3:5] + '-' + auxDesde[0:2]

        auxHasta = self.winPrincipal.deHasta_dinero.text()
        hasta = auxHasta[6:10] + '-' + auxHasta[3:5] + '-' + auxHasta[0:2]

        listaEntradaTransacciones = self.conexionesGenerales.selectEntradasTransacciones(
            intervalo, desde, hasta)
        listaEntradaPagos = self.conexionesGenerales.selectEntradaPagos(
            intervalo, desde, hasta)

        listaSalidaTransacciones = self.conexionesGenerales.selectSalidaTransacciones(
            intervalo, desde, hasta)
        listaSalidaPagos = self.conexionesGenerales.selectSalidaPagos(
            intervalo, desde, hasta)

        listaGeneral = []

        if len(listaEntradaPagos
               ) < 1 and len(listaEntradaTransacciones) < 1 and len(
                   listaSalidaPagos) < 1 and len(listaSalidaTransacciones) < 1:
            pass

        else:
            dineroEntrada = 0
            dineroSalida = 0
            for entradaP in listaEntradaPagos:
                dineroEntrada += float(entradaP[1])
                monto = '$ + ' + str("{0:.2f}".format(entradaP[1]))
                entrada = []
                entrada.append(entradaP[0])
                entrada.append(monto)
                entrada.append(entradaP[2])
                #entrada = (entradaP[0] + monto + entradaP[2] )
                listaGeneral.append(entrada)

            for entradaT in listaEntradaTransacciones:
                dineroEntrada += float(entradaT[1])
                monto = '$ + ' + str("{0:.2f}".format(entradaT[1]))
                entrada = []
                entrada.append(entradaT[0])
                entrada.append(monto)
                entrada.append(entradaT[2])
                #entrada = (entradaT[0], monto, entradaT[2])
                listaGeneral.append(entrada)

            for salidaP in listaSalidaPagos:
                dineroSalida += float(salidaP[1])
                monto = '$ - ' + str("{0:.2f}".format(salidaP[1]))
                salida = []
                salida.append(salidaP[0])
                salida.append(monto)
                salida.append(salidaP[2])
                #salida = (salidaP[0], monto, salidaP[2])
                listaGeneral.append(salida)

            for salidaT in listaSalidaTransacciones:
                dineroSalida += float(salidaT[1])
                monto = '$ - ' + str("{0:.2f}".format(salidaT[1]))
                salida = []
                salida.append(salidaT[0])
                salida.append(monto)
                salida.append(salidaT[2])
                #salida = (salidaT[0], monto, salidaT[2])
                listaGeneral.append(salida)

            listTable = ""
            listaGeneral.sort()
            for lista in listaGeneral:
                listTable += """
                                <tr height="80">
                                    <td width="60%" align="left" >
                                    <br>""" + str(lista[0]) + """<br>
                                    </td>
                                    <td width="20%" align="right">
                                        <br> &nbsp;&nbsp;""" + str(
                    lista[1]) + """<br>
                                    </td>
                                    <td width="20%" align="center">
                                       <br>&nbsp;&nbsp; """ + str(
                        lista[2]) + """<br>
                                    </td>
                                </tr>
                           """

            contenido = """
                             <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>
                                    FECHA
                                    </b>
                                </td>
                                <td width="20%"  align="center" valign="middle">
                                    <b>
                                        DINERO
                                    </b>
                                </td>
                                <td width="20%"  align="center" valign="middle">
                                    <b>
                                        TIPO MOVIMIENTO
                                    </b>
                                </td>
                              </tr>
                          </table>
                          <br>
                          <table width="600" >
                            """ + listTable + """

                          </table>

                          <p>
                            <br>
                            Dinero entrante = $ + """ + str(
                "{0:.2f}".format(dineroEntrada)) + """
                            <br>
                            Dinero salida = $ - """ + str(
                    "{0:.2f}".format(dineroSalida)) + """
                            <br>
                            <br>
                            Total .... : $ """ + str(
                        "{0:.2f}".format(dineroEntrada - dineroSalida)) + """
                          </p>
                        """
            self.generatePDF(contenido)

    def generarStock(self):
        self.listFinal = []
        self.title = "intervalo"

        intervalo = 'month'
        if self.winPrincipal.cbIntervalo_stock.currentText() == 'Semana':
            intervalo = 'week'
        elif self.winPrincipal.cbIntervalo_stock.currentText() == 'Año':
            intervalo = 'year'

        auxDesde = self.winPrincipal.deDesde_stock.text()

        desde = auxDesde[6:10] + '-' + auxDesde[3:5] + '-' + auxDesde[0:2]

        auxHasta = self.winPrincipal.deHasta_stock.text()
        hasta = auxHasta[6:10] + '-' + auxHasta[3:5] + '-' + auxHasta[0:2]

        listVentas = self.conexionesGenerales.selectVentas(
            intervalo, desde, hasta)
        listCompras = self.conexionesGenerales.selectCompras(
            intervalo, desde, hasta)

        if len(listCompras) < 1 and len(listVentas) < 1:
            alert = QDialog()
            confirm = QMessageBox.question(
                alert, "Mensaje",
                "Verifique los valores, la consulta no tiene ningun dato.",
                QMessageBox.Ok)

        else:
            i = 0
            for ventas in listVentas:
                itemList = (str(ventas[0]), listCompras[i][1], ventas[1])
                self.listFinal.append(itemList)
                i += 1

            listTable = ""
            cantMax = 0
            tupleFecha = []
            tupleCompra = []
            tupleVenta = []
            listFechas = []
            for lista in self.listFinal:
                i = 0
                listTable += """
                                            <tr height="80">
                                                <td width="60%" align="left" >
                                                <br>""" + str(
                    lista[0]) + """<br>
                                                </td>
                                                <td width="20%" align="center">
                                                    <br> &nbsp;&nbsp;""" + str(
                        lista[1]) + """<br>
                                                </td>
                                                <td width="20%" align="center">
                                                   <br>&nbsp;&nbsp; """ + str(
                            lista[2]) + """<br>
                                                </td>
                                            </tr>
                                       """
                if int(lista[1]) > int(lista[2]):
                    if int(lista[1]) > cantMax:
                        cantMax = int(lista[1])
                else:
                    if int(lista[2]) > cantMax:
                        cantMax = int(lista[2])

                listFechas.append(str(lista[0]))

                tupleFecha.append(str(lista[0]))  #+= str(lista[0])
                tupleCompra.append(int(lista[1]))
                tupleVenta.append(int(lista[2]))
                i = i + 1

            generateGraphic = []
            tdFecha = ""
            trCantFechas = ""

            betweenCant = int(cantMax / 12)
            listRange = []
            for i in range(0, cantMax, betweenCant):
                listRange.append(i)
                tdFecha = ""
                for lista in self.listFinal:

                    if i < int(lista[1]):
                        tdCantCompra = """
                                            <td width="50" style=" background-color: red;">
                                            </td>
                                       """
                    else:
                        tdCantCompra = """
                                            <td width="50">
                                            </td>
                                       """

                    if i < int(lista[2]):
                        tdCantVenta = """
                                            <td width="50" style=" background-color: blue;">
                                            </td>
                                      """
                    else:
                        tdCantVenta = """
                                            <td width="50">
                                            </td>
                                      """

                    tdFecha += tdCantCompra + tdCantVenta

                tr = """
                        <tr>
                            <td width="60">
                                """ + str(i) + """
                            </td>
                            """ + str(tdFecha) + """
                        </tr>
                     """

                generateGraphic.append(tr)

            n_groups = len(tupleFecha)

            fig, ax = pyplot.subplots()

            index = np.arange(n_groups)
            bar_width = 0.20

            opacity = 0.4
            error_config = {'ecolor': '0.3'}

            rects1 = pyplot.bar(index,
                                tupleVenta,
                                bar_width,
                                alpha=opacity,
                                color='b',
                                error_kw=error_config,
                                label='Venta')

            rects2 = pyplot.bar(index + bar_width,
                                tupleCompra,
                                bar_width,
                                alpha=opacity,
                                color='r',
                                error_kw=error_config,
                                label='Compra')

            pyplot.xlabel('Fecha')
            pyplot.ylabel('Cantidad')
            pyplot.title('Cantidad por fechas')
            pyplot.xticks(index + bar_width, tupleFecha)
            pyplot.legend()

            pyplot.tight_layout()
            pyplot.savefig('../archivos/picture1.png')

            trFechas = """<tr> <td width="60">CANT/FECHAS</td>"""
            for fecha in listFechas:
                tdFecha = """<td width="50" align="right" font-size="8"> """ + str(
                    fecha) + """</td> <td width="50"> </td> """
                trFechas += tdFecha

            trFechas += "</tr>"

            generateGraphic.reverse()

            generateGraphic.append(trFechas)

            finalGraphic = ""

            for graphic in generateGraphic:
                finalGraphic += graphic

            contenido = """
                         <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>
                                    FECHA
                                    </b>
                                </td>
                                <td width="20%"  align="center" valign="middle" style=" background-color: red;">
                                    <b>
                                        PRODUCTOS COMPRADOS
                                    </b>
                                </td>
                                <td width="20%"  align="center" valign="middle" style="background-color: blue;">
                                    <b>
                                        PRODUCTOS VENDIDOS
                                    </b>
                                </td>
                              </tr>
                          </table>

                          <br>
                          <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>
                          <IMG SRC="../archivos/picture1.png" width="600" height="600">
                          <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>
                        """

            self.generatePDF(contenido)

    def clickHoy_stock(self):
        if self.winPrincipal.chbHoy_stock.isChecked() == True:
            self.winPrincipal.deHasta_stock.setEnabled(False)
            hoy = datetime.datetime.now().date()
            self.winPrincipal.deHasta_stock.setDate(hoy)
        else:
            self.winPrincipal.deHasta_stock.setEnabled(True)

    def clickHoy_saldos(self):
        if self.winPrincipal.chbHoy_saldos.isChecked() == True:
            self.winPrincipal.deHasta_saldos.setEnabled(False)
            hoy = datetime.datetime.now().date()
            self.winPrincipal.deHasta_saldos.setDate(hoy)
        else:
            self.winPrincipal.deHasta_saldos.setEnabled(True)

    def clickHoy_dinero(self):
        if self.winPrincipal.chbHoy_dinero.isChecked() == True:
            self.winPrincipal.deHasta_dinero.setEnabled(False)
            hoy = datetime.datetime.now().date()
            self.winPrincipal.deHasta_dinero.setDate(hoy)
        else:
            self.winPrincipal.deHasta_dinero.setEnabled(True)

    def generarSaldos(self):
        validate = True
        if self.winPrincipal.chbTodos_saldos.isChecked() == False:
            if self.winPrincipal.rbProveedores_saldos.isChecked() == True:
                if self.proveedores is None:
                    validate = False
            else:
                if self.clientes is None:
                    validate = False

        if validate == True:
            if self.winPrincipal.chbTodos_saldos.isChecked() == True:
                if self.winPrincipal.rbProveedores_saldos.isChecked() == True:
                    listProveedores = self.conexionesGenerales.selectProveedor(
                        '')
                    contenido = ""
                    for proveedores in listProveedores:
                        self.proveedores = Proveedor()
                        self.proveedores.setIdProveedor(int(proveedores[0]))
                        self.proveedores.setDescripcion(str(proveedores[1]))
                        self.proveedores.setNombre(str(proveedores[2]))

                        contenido += self.generateTable(
                            'PROVEEDOR', self.proveedores)
                else:
                    listClientes = self.conexionesGenerales.selectCliente('')
                    contenido = ""
                    for clientes in listClientes:
                        self.clientes = Cliente()
                        self.clientes.setIdCliente(int(clientes[0]))
                        self.clientes.setApellido(str(clientes[1]))
                        self.clientes.setNombre(str(clientes[2]))

                        contenido += self.generateTable(
                            'CLIENTE', self.clientes)
            else:
                if self.winPrincipal.rbProveedores_saldos.isChecked() == True:
                    contenido = self.generateTable('PROVEEDOR',
                                                   self.proveedores)
                else:
                    contenido = self.generateTable('CLIENTE', self.clientes)

            self.generatePDF(contenido)
        else:
            alert = QDialog()
            confirm = QMessageBox.question(alert, "Mensaje",
                                           "Falta selecciona la/s persona/s.",
                                           QMessageBox.Ok)

    def generateTable(self, type, persona):

        intervalo = 'month'
        if self.winPrincipal.cbIntervalo_saldos.currentText() == 'Semana':
            intervalo = 'week'
        elif self.winPrincipal.cbIntervalo_saldos.currentText() == 'Año':
            intervalo = 'year'
        elif self.winPrincipal.cbIntervalo_saldos.currentText() == 'Dia':
            intervalo = 'day'

        auxDesde = self.winPrincipal.deDesde_saldos.text()

        desde = auxDesde[6:10] + '-' + auxDesde[3:5] + '-' + auxDesde[0:2]

        auxHasta = self.winPrincipal.deHasta_saldos.text()
        hasta = auxHasta[6:10] + '-' + auxHasta[3:5] + '-' + auxHasta[0:2]

        listTransacciones = []
        listPagos = []
        #Total de los pagos
        pagosTotal = 0
        #Total de las transacciones en estado 0
        transaccionesTotal = 0
        total = 0
        #Lista completa (transacciones + pagos)
        listDetalle = []
        apellido = ''
        if type == "CLIENTE":
            listPagos = self.conexionesGenerales.selectListPagosCliente(
                persona, intervalo, desde, hasta)
            listTransacciones = self.conexionesGenerales.selectListTransaccionCliente(
                persona, intervalo, desde, hasta)

            if len(listPagos) > 0:
                for pagos in listPagos:
                    pagosTotal += float(pagos[1])
                    auxMonto = "$  + " + str("{0:.2f}".format(pagos[1]))
                    auxPagos = (str(pagos[0]), auxMonto, str(pagos[2]))
                    listDetalle.append(auxPagos)
            else:
                pagosTotal = 0

            if len(listTransacciones):
                for transacciones in listTransacciones:
                    transaccionesTotal += transacciones[1]
                    auxMonto = "$  - " + str("{0:.2f}".format(
                        transacciones[1]))
                    auxTransaccion = (str(transacciones[0]), auxMonto,
                                      str(transacciones[2]))
                    listDetalle.append(auxTransaccion)
            else:
                transaccionesTotal = 0

            total = pagosTotal - transaccionesTotal
            apellido = persona.getApellido()
        elif type == "PROVEEDOR":
            listPagos = self.conexionesGenerales.selectListPagosProveedor(
                persona, intervalo, desde, hasta)
            listTransacciones = self.conexionesGenerales.selectListTransaccionProveedor(
                persona, intervalo, desde, hasta)

            if len(listPagos) > 0:
                for pagos in listPagos:
                    pagosTotal += float(pagos[1])
                    auxMonto = "$  + " + str("{0:.2f}".format(pagos[1]))
                    auxPagos = (str(pagos[0]), auxMonto, str(pagos[2]))
                    listDetalle.append(auxPagos)
            else:
                pagosTotal = 0

            if len(listTransacciones):
                for transacciones in listTransacciones:
                    transaccionesTotal += transacciones[1]
                    auxMonto = "$  - " + str("{0:.2f}".format(
                        transacciones[1]))
                    auxTransaccion = (str(transacciones[0]), auxMonto,
                                      str(transacciones[2]))
                    listDetalle.append(auxTransaccion)
            else:
                transaccionesTotal = 0

            total = pagosTotal - transaccionesTotal
            apellido = persona.getDescripcion()

        listDetalle.sort()
        listTable = ""
        for lista in listDetalle:
            listTable += """
                                            <tr height="80">
                                                <td width="60%" align="left" >
                                                <br>""" + str(
                lista[0]) + """<br>
                                                </td>
                                                <td width="20%" align="right">
                                                    <br> &nbsp;&nbsp;""" + str(
                    lista[1]) + """<br>
                                                </td>
                                                <td width="20%" align="center">
                                                   <br>&nbsp;&nbsp; """ + str(
                        lista[2]) + """<br>
                                                </td>
                                            </tr>
                                       """

        contenido = """
                            <br>
                            <br>
                          <table width="600" height="100">
                            <tr>
                                <br> Nombre : """ + persona.getNombre(
        ) + """ <br>
                                Apellido : """ + apellido + """<br>
                            </tr>
                          </table>
                          <table width="600"  >
                                <tr height="80" style=" background-color: gray; border-style: inset;">
                                    <td width="60%" align="center" >
                                        <br>FECHA<br>
                                        </td>
                                        <td width="20%" align="center">
                                            <br> MONTO <br>
                                        </td>
                                        <td width="20%" align="center">
                                           <br>ACCION<br>
                                        </td>
                                </tr>
                                """ + listTable + """
                          </table>

                          <table width="600" height="0" style="border-color: black; border-width: 0.5px; border-spacing: 0;">
                            <tr>
                                <td width="70%"><br>SALDO..............<br></td>
                                <td><br> $ """ + str(
            "{0:.2f}".format(total)) + """ <br></td>
                            </tr>
                          </table>
                          <br>
                          <br>
                          <br>
                          <br>
                          <br>
                          <br>
                          <br>
                            <br>
                    """

        return contenido

    def buscarPersonas(self):
        if self.winPrincipal.txtFilterPersona_saldos.hasFocus() is True:
            self.cargarTablaSaldos()

    def cargarTablaSaldos(self):

        parameter = self.winPrincipal.txtFilterPersona_saldos.text()

        if self.winPrincipal.rbProveedores_saldos.isChecked() is True:
            listaProveedores = self.conexionesGenerales.selectProveedor(
                parameter)

            if len(listaProveedores) > 0:
                header = ['ID', 'Apellido', 'Nombre']
                self.tablaModel = MyTableModel(
                    self.winPrincipal.tvPersonas_saldos, listaProveedores,
                    header)
                self.winPrincipal.tvPersonas_saldos.setModel(self.tablaModel)
                self.winPrincipal.tvPersonas_saldos.selectionModel(
                ).currentChanged.connect(self.changeSelectedTable)

                self.winPrincipal.tvPersonas_saldos.setColumnHidden(0, True)
                self.winPrincipal.tvPersonas_saldos.setColumnWidth(1, 120)
                self.winPrincipal.tvPersonas_saldos.setColumnWidth(2, 120)
        else:
            listaClientes = self.conexionesGenerales.selectCliente(parameter)

            if len(listaClientes) > 0:
                header = ['ID', 'Apellido', 'Nombre']
                self.tablaModel = MyTableModel(
                    self.winPrincipal.tvPersonas_saldos, listaClientes, header)
                self.winPrincipal.tvPersonas_saldos.setModel(self.tablaModel)
                self.winPrincipal.tvPersonas_saldos.selectionModel(
                ).currentChanged.connect(self.changeSelectedTable)

                self.winPrincipal.tvPersonas_saldos.setColumnHidden(0, True)
                self.winPrincipal.tvPersonas_saldos.setColumnWidth(1, 120)
                self.winPrincipal.tvPersonas_saldos.setColumnWidth(2, 120)

    def changeSelectedTable(self, selected, deselected):
        if self.winPrincipal.rbProveedores_saldos.isChecked() is True:
            proveedorList = selected.model().mylist
            proveedorSelected = proveedorList[selected.row()]

            self.proveedores = Proveedor()

            self.proveedores.setIdProveedor(int(proveedorSelected[0]))
            self.proveedores.setDescripcion(str(proveedorSelected[1]))
            self.proveedores.setNombre(str(proveedorSelected[2]))
        else:
            clienteList = selected.model().mylist
            clienteSelected = clienteList[selected.row()]

            self.clientes = Cliente()

            self.clientes = Cliente()
            self.clientes.setIdCliente(int(clienteSelected[0]))
            self.clientes.setApellido(str(clienteSelected[1]))
            self.clientes.setNombre(str(clienteSelected[2]))

    def changePersona(self):
        self.clientes = None
        self.proveedores = None

        self.winPrincipal.txtFilterPersona_saldos.setText('')
        self.winPrincipal.tvPersonas_saldos.setModel(None)

    def clickTodos(self):
        if self.winPrincipal.chbTodos_saldos.isChecked() == True:
            self.winPrincipal.txtFilterPersona_saldos.setEnabled(False)
            self.winPrincipal.tvPersonas_saldos.setModel(None)
        else:
            self.winPrincipal.txtFilterPersona_saldos.setEnabled(True)

    def generatePDF(self, contenido):
        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'

        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>
                        SALDOS
                    </p>
                    <br>

                  """ + contenido

        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)