class LibroDiarioGUI(BaseGUI): def __init__(self,manager, managers = []): BaseGUI.__init__(self, manager, managers) self.FILENAME = join(abspath(dirname(__file__)),'uis/libro_diario.ui') #self.ATRIBUTOSLISTA = ['Nombres','Telefono','Domicilio','Zona','CP','Localidad','Fecha_cumpleanios','Email',]#el orden y la cantidad de atributos en str que quieras self.DialogAddClass = AddMovimiento#la clase que invoca a los dialogos de agregar y editar self.ALINEACIONLISTA = ['C','L','L','L','R'] self.ATRIBUTOSLISTA = [ {u'Fecha':Movimiento.fecha}, {u'Razon Social':Movimiento.razon_social}, {u'Descripcion':Movimiento.descripcion}, {u'Cuenta':Movimiento.cuenta}, {u'Monto':Movimiento.monto}] self.cuentasManager = managers[0].manager self.balance = Balance() locale.setlocale( locale.LC_ALL, '' ) self._start_operations() #=============================================================================== # LOGICA GUI Y EXTRAS #=============================================================================== def _obtenerValoresAtributos(self,obj): resultado = [] atributos_objeto = self.manager.getClassAttributesValues(obj) if not self.ATRIBUTOSLISTA : return atributos_objeto else: atributos_clase = self.manager.getClassAttributes() atributos_ordenados = self.ATRIBUTOSLISTA_CLASSNAMES for atributo in atributos_ordenados: resultado.append( atributos_objeto[ atributos_clase.index( atributo ) ] ) # formatea la fecha, de date -> str resultado[0] = resultado[0].strftime("%d/%m/%Y") # formatear el monto monto = locale.currency(float(resultado[4]), grouping = True) resultado[4] = unicode( monto ) return resultado def _start_operations(self): u''' operaciones necesarias para levantar las ventanas ''' uic.loadUi(self.FILENAME, self) self.setWindowTitle(self.TITULO) self._makeTable() self.cargarTabla() self._loadAppShortcuts() self.fullScreen = False self._centerOnScreen() #self.setWindowState(QtCore.Qt.WindowMaximized) self.deFechaMostradaDesde.setDate( datetime.today() ) self.deFechaMostradaHasta.setDate( datetime.today() ) self.cbTipoMovimiento.setCurrentIndex(1) self.cbTipoMovimiento.setCurrentIndex(0) self.cbCuentas.setCurrentIndex(0) self.actualizarLabelBalance() self.setWindowTitle("Libro Diario") def recargarLista(self): desde = self.deFechaMostradaDesde.date().toPyDate() hasta = self.deFechaMostradaHasta.date().toPyDate() filtro = self.obtenerTipoMovimientoSeleccionado() cuenta = self.obtenerCuentaSeleccionada() movimientos = self.manager.obtenerMovimientosDesdeHasta(desde, hasta, filtro, cuenta) self.cargarTabla(movimientos) self.actualizarLabelBalance() def cargarTabla(self,listadeobj = None): if listadeobj == None: listadeobj = self.manager.getall() listadefilas = [self._obtenerValoresAtributos(obj) for obj in listadeobj] self.MyTabla.addItems(listadefilas) def obtenerTipoMovimientoSeleccionado(self): return unicode(self.cbTipoMovimiento.itemText(self.cbTipoMovimiento.currentIndex()).toUtf8(), 'utf-8') def obtenerCuentaSeleccionada(self): return unicode(self.cbCuentas.itemText(self.cbCuentas.currentIndex()).toUtf8(), 'utf-8') def cargarComboCuentas(self): filtro = self.obtenerTipoMovimientoSeleccionado() items = None if filtro == u'TODOS': items = self.cuentasManager.getall() elif filtro == u'INGRESOS': items = self.cuentasManager.cuentasDeIngreso() elif filtro == u'EGRESOS': items = self.cuentasManager.cuentasDeEgreso() self.cbCuentas.clear() self.cbCuentas.addItem("TODOS") nombres_cuentas = [cuenta.nombre for cuenta in items] nombres_cuentas.sort() [self.cbCuentas.addItem( nombre_cuenta ) for nombre_cuenta in nombres_cuentas ] def establecerMontoBalance(self, monto): style = '''QLabel { color: black; background-color: #BFBFBF; font: bold 18px; font-family: Ubuntu, Helvetica, sans-serif; border: 1px solid #BFBFBF; border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 6px;border-bottom-left-radius: 6px; }''' self.lbBalance.setText( str(locale.currency( float(monto), grouping = True)) ) if monto == 0 : self.lbBalance.setText("$ 00,00") self.lbBalance.setStyleSheet(style) elif monto > 0 : self.lbBalance.setStyleSheet( style.replace("color: black;","color: green;")) elif monto < 0 : self.lbBalance.setStyleSheet( style.replace("color: black;","color: red;")) def actualizarLabelBalance(self): self.establecerMontoBalance( self.balance.valor() ) #=============================================================================== # MOTODOS DE LAS SEÑALES #=============================================================================== @QtCore.pyqtSlot(int) def on_cbTipoMovimiento_currentIndexChanged(self , index): self.cargarComboCuentas() @QtCore.pyqtSlot(int) def on_cbCuentas_currentIndexChanged(self , index): self.recargarLista() def on_deFechaMostradaDesde_dateChanged(self , date): if self.isVisible() : if date > self.deFechaMostradaHasta.date() : QtGui.QMessageBox.information(self, "Libro diario","La fecha <Desde> no puede ser mayor a <Hasta>.") self.deFechaMostradaDesde.setDate( datetime.today() ) else: self.recargarLista() def on_deFechaMostradaHasta_dateChanged(self , date): if self.isVisible() : if date < self.deFechaMostradaDesde.date() : QtGui.QMessageBox.information(self, "Libro diario","La fecha <Hasta> no puede ser mayor a <Desde>.") self.deFechaMostradaHasta.setDate( datetime.today() ) else: self.recargarLista()
class LibroDiarioGUI(BaseGUI): def __init__(self,manager, managers = []): BaseGUI.__init__(self, manager, managers) self.DialogAddClass = AddMovimiento self.loadUI('movimiento/uis/libro_diario.ui') self.addTableColumn(u'Fecha', Movimiento.fecha, alignment='C', fnParse=self.parseFecha) self.addTableColumn(u'Razon Social', Movimiento.razon_social) self.addTableColumn(u'Descripcion', Movimiento.descripcion) self.addTableColumn(u'Cuenta', Movimiento.cuenta) self.addTableColumn(u'Monto', Movimiento.monto, alignment='R', fnParse=self.parseMonto) self.cuentasManager = managers[0].manager self.balance = Balance() self._start_operations() #=============================================================================== # LOGICA GUI Y EXTRAS #=============================================================================== def parseFecha(self, row, value): return value.strftime("%d/%m/%Y") def parseMonto(self, row, value): return "$ %8.2f" % float(value) def _start_operations(self): u''' operaciones necesarias para levantar las ventanas ''' self.setWindowTitle(self.pluralTitle) self.makeTable() self.loadTable() self.loadShortcuts() self.fullScreen = False centerOnScreen(self) self.deFechaMostradaDesde.setDate( datetime.today() ) self.deFechaMostradaHasta.setDate( datetime.today() ) self.cbTipoMovimiento.setCurrentIndex(1) self.cbTipoMovimiento.setCurrentIndex(0) self.cbCuentas.setCurrentIndex(0) self.actualizarLabelBalance() self.setWindowTitle("Libro Diario") def reloadList(self): desde = self.deFechaMostradaDesde.date().toPyDate() hasta = self.deFechaMostradaHasta.date().toPyDate() filtro = self.obtenerTipoMovimientoSeleccionado() cuenta = self.obtenerCuentaSeleccionada() movimientos = self.manager.obtenerMovimientosDesdeHasta(desde, hasta, filtro, cuenta) self.loadTable(movimientos) self.actualizarLabelBalance() def loadTable(self,listadeobj = None): if listadeobj == None: listadeobj = self.manager.getall() listadefilas = [self._getAttributesValues(obj) for obj in listadeobj] self.tableItems.addItems(listadefilas) def obtenerTipoMovimientoSeleccionado(self): return unicode(self.cbTipoMovimiento.itemText(self.cbTipoMovimiento.currentIndex()).toUtf8(), 'utf-8') def obtenerCuentaSeleccionada(self): return unicode(self.cbCuentas.itemText(self.cbCuentas.currentIndex()).toUtf8(), 'utf-8') def cargarComboCuentas(self): filtro = self.obtenerTipoMovimientoSeleccionado() items = None if filtro == u'TODOS': items = self.cuentasManager.getall() elif filtro == u'INGRESOS': items = self.cuentasManager.cuentasDeIngreso() elif filtro == u'EGRESOS': items = self.cuentasManager.cuentasDeEgreso() self.cbCuentas.clear() self.cbCuentas.addItem("TODOS") nombres_cuentas = [cuenta.nombre for cuenta in items] nombres_cuentas.sort() [self.cbCuentas.addItem( nombre_cuenta ) for nombre_cuenta in nombres_cuentas ] def establecerMontoBalance(self, monto): style = '''QLabel { color: black; background-color: #BFBFBF; font: bold 18px; font-family: Ubuntu, Helvetica, sans-serif; border: 1px solid #BFBFBF; border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 6px;border-bottom-left-radius: 6px; }''' self.lbBalance.setText( "$ %8.2f" % float(monto)) if monto == 0 : self.lbBalance.setText("$ 00,00") self.lbBalance.setStyleSheet(style) elif monto > 0 : self.lbBalance.setStyleSheet( style.replace("color: black;","color: green;")) elif monto < 0 : self.lbBalance.setStyleSheet( style.replace("color: black;","color: red;")) def actualizarLabelBalance(self): self.establecerMontoBalance( self.balance.valor() ) #=============================================================================== # MOTODOS DE LAS SEÑALES #=============================================================================== @QtCore.pyqtSlot(int) def on_cbTipoMovimiento_currentIndexChanged(self , index): self.cargarComboCuentas() @QtCore.pyqtSlot(int) def on_cbCuentas_currentIndexChanged(self , index): self.reloadList() def on_deFechaMostradaDesde_dateChanged(self , date): if self.isVisible() : if date > self.deFechaMostradaHasta.date() : QtGui.QMessageBox.information(self, "Libro diario","La fecha <Desde> no puede ser mayor a <Hasta>.") self.deFechaMostradaDesde.setDate( datetime.today() ) else: self.reloadList() def on_deFechaMostradaHasta_dateChanged(self , date): if self.isVisible() : if date < self.deFechaMostradaDesde.date() : QtGui.QMessageBox.information(self, "Libro diario","La fecha <Hasta> no puede ser mayor a <Desde>.") self.deFechaMostradaHasta.setDate( datetime.today() ) else: self.reloadList() def on_twItems_itemSelectionChanged(self): pass