def save(self, ask=True): """ Guardar el documento actual @param ask: Si se deberia o no preguntar al usuario si esta seguro antes de proceder @type ask: bool """ if ( ask == False or QMessageBox.question( self, qApp.organizationName(), u"¿Esta seguro que desea guardar?", QMessageBox.Yes | QMessageBox.No ) == QMessageBox.Yes ): if self.editmodel.valid: if self.editmodel.save(): QMessageBox.information(self, qApp.organizationName(), u"El documento se ha guardado con éxito") self.editmodel = None self.updateModels() self.navigate("last") self.status = True else: QMessageBox.critical(self, qApp.organizationName(), "Ha ocurrido un error al guardar el documento") else: try: QMessageBox.warning(self, qApp.organizationName(), self.editmodel.validError) except AttributeError: QMessageBox.warning( self, qApp.organizationName(), u"El documento no puede guardarse" + " ya que la información no esta" + " completa", )
def save( self ): """ Slot documentation goes here. """ # self.datosRecibo.lineasAbonos =self.abonoeditmodel.lines # self.datosRecibo.lineas = self.editmodel.lines self.datosRecibo.observaciones = self.txtobservaciones.toPlainText() if self.datosRecibo.valid( self ): if QMessageBox.question( self, qApp.organizationName(), u"¿Esta seguro que desea guardar el recibo?", QMessageBox.Yes | QMessageBox.No ) == QMessageBox.Yes: if not QSqlDatabase.database().isOpen(): QSqlDatabase.database().open() if self.datosRecibo.save(): QMessageBox.information( self, qApp.organizationName() , u"""El documento se ha guardado con éxito""" ) self.editmodel = None self.updateModels() self.navigate( 'last' ) self.status = True else: QMessageBox.critical( self, qApp.organizationName(), """Ha ocurrido un error al guardar el documento""" ) if self.database.isOpen(): self.database.close()
def printDocument(self): """ Imprime el documento actual """ try: base = reports.Reports.url if base == "": raise UserWarning(u"No existe una configuración para el " + "servidor de reportes") self.printer.setOrientation(self.orientation) self.printer.setPageSize(self.pageSize) web = base + self.web + self.printIdentifier + "&uname=" + self.user.user + "&hash=" + self.user.hash self.loaded = False self.webview.load(QUrl(web)) self.webview.loadFinished[bool].connect(self.on_webview_loadFinished) self.webview.loadProgress[int].connect(self.on_webview_loadProgress) except NotImplementedError as inst: logging.error(unicode(inst)) QMessageBox.information( self, qApp.organizationName(), u"La función de impresión no se ha " + "implementado para este modulo" ) except UserWarning as inst: logging.error(unicode(inst)) QMessageBox.critical(self, qApp.organizationName(), unicode(inst)) except Exception as inst: logging.critical(unicode(inst)) QMessageBox.critical(self, qApp.organizationName(), "Hubo un problema al intentar imprimir" + " su reporte")
def aceptar(self): """ Guardar el documento actual """ self.editmodel.totalDoc = self.editmodel.lines[0].amount self.editmodel.tipoDoc = constantes.IDNOTACREDITO if self.cbtipodoc.currentIndex()== 0 else constantes.IDND if self.editmodel.valid: # Base.save( self, True ) if QMessageBox.question( self, qApp.organizationName(), u"¿Desea guardar el documento?", QMessageBox.Yes | QMessageBox.No ) == QMessageBox.Yes: if self.editmodel.save(): QMessageBox.information( self, qApp.organizationName(), u"El documento se ha guardado con éxito" ) else: QMessageBox.critical( self, qApp.organizationName(), "Ha ocurrido un error al guardar el documento" ) self.accept() else: QMessageBox.information(None, "Datos Incompletos", self.editmodel.mensajeError)
def valid( self ): """ Un documento es valido cuando self.printedDocumentNumber != "" self.providerId !=0 self.validLines >0 self.ivaId !=0 self.uid != 0 self.warehouseId != 0 """ if int( self.editmodel.datosSesion.usuarioId ) == 0: raise Exception( "No existe el usuario" ) elif int( self.editmodel.clienteId ) == 0: QMessageBox.warning( self, qApp.organizationName(), "Por favor elija el cliente" ) self.cbcliente.setFocus() elif int( self.editmodel.vendedorId ) == 0: QMessageBox.warning( self, qApp.organizationName(), "Por favor elija el vendedor" ) self.cbvendedor.setFocus() elif int( self.editmodel.bodegaId ) == 0: QMessageBox.warning( self, qApp.organizationName(), "Por favor elija la bodega" ) self.cbbodega.setFocus() elif int( self.editmodel.validLines ) == 0: QMessageBox.warning( self, qApp.organizationName(), "Por favor complete la información de los artículos comprados" ) else: return True return False
def save( self ): """ Slot documentation goes here. """ if self.valid: if QMessageBox.question( self, qApp.organizationName(), u"¿Esta seguro que desea guardar el pago?", QMessageBox.Yes | QMessageBox.No ) == QMessageBox.Yes: if not QSqlDatabase.database().isOpen(): QSqlDatabase.database().open() self.editmodel.observaciones = self.txtobservaciones.toPlainText() if self.editmodel.save(): QMessageBox.information( None, self.trUtf8( qApp.organizationName() ), self.trUtf8( u"""El pago se ha guardado con éxito""" ) ) self.editmodel = None self.updateModels() self.navigate( 'last' ) self.status = True else: QMessageBox.critical( None, self.trUtf8( qApp.organizationName() ), self.trUtf8( """Ha ocurrido un error al guardar el pago""" ) ) if QSqlDatabase.database().isOpen(): QSqlDatabase.database().close()
def updateModels( self ): """ Recargar todos los modelos """ try: if not(QSqlDatabase.database().isOpen() or QSqlDatabase.database().open()): raise Exception( "No se pudo abrir la base" ) self.navmodel.setQuery( """ SELECT c.Fecha, b.descripcion as Banco, cb.ctabancaria, m.Simbolo, cc.Codigo, c.saldolibro, c.saldobanco, cb.idcuentacontable, c.iddocumento FROM conciliaciones c JOIN cuentasbancarias cb ON c.idcuentabancaria = cb.idcuentacontable JOIN bancos b ON b.idbanco = cb.idbanco JOIN tiposmoneda m ON m.idtipomoneda = cb.idtipomoneda JOIN cuentascontables cc ON cc.idcuenta = cb.idcuentacontable ORDER BY c.iddocumento ; """ ) # Este objeto mapea una fila del modelo self.navproxymodel a los controles self.mapper.setSubmitPolicy( QDataWidgetMapper.ManualSubmit ) self.mapper.setModel( self.navproxymodel ) self.mapper.addMapping( self.txtbanco, BANCO ) self.mapper.addMapping( self.txtmoneda, MONEDA ) self.mapper.addMapping( self.txtcuentabanco, CUENTABANCO ) self.mapper.addMapping( self.txtcuenta, CUENTA ) # asignar los modelos a sus tablas self.tablenavigation.setModel( self.navproxymodel ) self.tabledetails.setModel( self.detailsmodel ) self.proxymodel.setSourceModel( self.detailsmodel ) self.tablenavigation.setColumnHidden( SALDOBANCO, True ) self.tablenavigation.setColumnHidden( SALDOLIBRO, True ) self.tablenavigation.setColumnHidden( IDCUENTABANCO, True ) self.tablenavigation.setColumnHidden( IDDOC, True ) self._ocultar_columnas() except UserWarning as inst: logging.error( unicode( inst ) ) QMessageBox.critical( self, qApp.organizationName(), unicode( inst ) ) except Exception as inst: logging.critical( unicode( inst ) ) QMessageBox.critical( self, qApp.organizationName(), u"Hubo un error al tratar de iniciar una nueva conciliación "\ + "bancaria" ) finally: if QSqlDatabase.database().isOpen(): QSqlDatabase.database().close()
def updateArticles( self ): """ Actualizar la lista de articulos """ query = QSqlQuery() try: if not self.database.isOpen(): if not self.database.open(): raise UserWarning( u"No se pudo conectar con la " + "base de datos" ) self.updateArticleList( query ) self.editmodel.updateLines( query ) providers_model = QSqlQueryModel() providers_model.setQuery( """ SELECT idpersona, nombre FROM personas p WHERE tipopersona = 2 AND activo = 1 """ ) if not providers_model.rowCount() > 0: raise UserWarning( "No existen proveedores en el sistema" ) self.cbProvider.setModel( providers_model ) self.cbProvider.setModelColumn( 1 ) warehouse_model = QSqlQueryModel() warehouse_model.setQuery( """ SELECT idbodega, nombrebodega FROM bodegas b ORDER BY idbodega """ ) if not warehouse_model.rowCount() > 0: raise UserWarning( "No existen bodegas en el sistema" ) self.cbWarehouse.setModel( warehouse_model ) self.cbWarehouse.setModelColumn( 1 ) self.cbWarehouse.setCurrentIndex( -1 ) self.cbProvider.setCurrentIndex( -1 ) except UserWarning as inst: QMessageBox.warning( self, qApp.organizationName(), unicode( inst ) ) logging.error( query.lastError().text() ) logging.error( unicode( inst ) ) self.cancel() except Exception as inst: QMessageBox.critical( self, qApp.organizationName(), "Hubo un error fatal al tratar de actualizar la lista " \ + "de articulos, el sistema no puede recuperarse" \ + " y sus cambios se han perdido" ) logging.error( query.lastError().text() ) logging.critical( unicode( inst ) ) self.cancel()
def setData( self, index, value, _role = Qt.EditRole ): """ Guarda los datos editados en el modelo del tableview @param index: El Index del record del tableView @param value: El Valor a guardar en el record del Index @param role: El role para establecer la edicion """ if index.column() in ( DAI, ISC, COMISION, GANANCIA, ACTIVO ): keyindex = super( ArticlesModel, self ).index( index.row(), 0 ) primarykey = self.data( keyindex ).toInt()[0] self.clear() result = False try: if not self.database.isOpen(): if not self.database.open(): raise UserWarning( "No se pudo abrir la base "\ + "de datos" ) if not self.database.transaction(): raise Exception( self.database.lastError().text() ) if index.column() == DAI: self.queries.append( set_dai( value.toString(), primarykey ) ) elif index.column() == ISC: self.queries.append( set_isc( value.toString(), primarykey ) ) elif index.column() == COMISION: self.queries.append( set_comision( value.toString(), primarykey ) ) elif index.column() == GANANCIA: self.queries.append( set_ganancia( value.toString(), primarykey ) ) elif index.column() == ACTIVO: self.queries.append( set_activo( value.toBool(), primarykey ) ) if not QSqlDatabase.database().commit(): raise Exception( self.database.lastError().text() ) self.refresh() self.dirty = True self.dataChanged.emit( index, index ) result = True except UserWarning as inst: QMessageBox.critical( None, qApp.organizationName(), unicode( inst ) ) logging.error( unicode( inst ) ) except Exception as inst: logging.critical( unicode( inst ) ) QMessageBox.critical( None, qApp.organizationName(), "Hubo un error al guardar su cambio" ) return result
def accept( self ): result = True if self.txtDescription.text().strip() == '': QMessageBox.warning( self, qApp.organizationName(), u"Verifique la descripción de la cuenta" ) result = False if result: for index, validator in enumerate( self.validators ): if validator.validate( self.txtCodes[index].text(), 3 )[0] != QValidator.Acceptable: QMessageBox.warning( self, qApp.organizationName(), "Verifique el codigo de la cuenta" ) result = False break super( DlgAccountMod, self ).accept()
def __init__( self, parent = None ): super( FrmBalanceInicial, self ).__init__( parent ) self.setupUi( self ) self.__status = False self.database = QSqlDatabase.database() self.user = user.LoggedUser self.actionNuevo.setVisible(False) self.widget.setHidden(True) # self.setMaximumSize(600,300) try: if not self.database.isOpen(): if not self.database.open(): raise UserWarning( "No se pudo abrir la base de datos" ) self.editModel = BalanceInicialModel() self.editModel.insertRow( 1 ) self.editModel.insertRow( 1 ) self.editModel.lines[1].name= "CAPITAL" self.editModel.lines[1].code = "320 001 000 000 000" self.startUI() delegate = AccountsSelectorDelegate( QSqlQuery( """ SELECT c.idcuenta, c.codigo, c.descripcion FROM cuentascontables c JOIN cuentascontables p ON c.padre = p.idcuenta AND p.padre != 1 """ ) ) self.dtPicker.setDateTime( QDateTime.currentDateTime() ) self.dtPicker.setMaximumDateTime( QDateTime.currentDateTime() ) self.dtPicker.setReadOnly(False) self.tableDetails.setModel( self.editModel ) self.tableDetails.setColumnHidden( IDCUENTA, True ) self.tableDetails.setColumnHidden( IDDOCUMENTOC, True ) self.tableDetails.setItemDelegate( delegate ) self.tableDetails.resizeColumnsToContents() except UserWarning as inst: self.status = False QMessageBox.critical( self, qApp.organizationName(), unicode( inst ) ) logging.error( unicode( inst ) ) except Exception as inst: QMessageBox.critical( self, qApp.organizationName(), "Hubo un error al tratar de iniciar el Balance Inicial" ) logging.critical( unicode( inst ) )
def on_btnAdd_clicked(self): if not self.database.isOpen(): if not self.database.open(): raise UserWarning( u"No se pudo establecer la conexión con "\ + "la base de datos" ) try: mov = dlgmovimientosbancarios(self) # Rellenar el combobox de las CONCEPTOS if mov.conceptosModel.rowCount() == 0: raise UserWarning( u"No existen conceptos en la base de "\ + "datos que justifiquen la elaboración de Notas de Crédito o Débito" ) mov.exec_() except UserWarning as inst: QMessageBox.critical( self, qApp.organizationName(), unicode( inst ) ) logging.error( unicode( inst ) ) logging.error( mov.conceptosModel.query().lastError().text() ) # except Exception as inst: # QMessageBox.critical( self, qApp.organizationName(), # "Hubo un problema al tratar de crear"\ # + " el nuevo pago" ) # logging.critical( unicode( inst ) ) # logging.error( query.lastError().text() ) finally: if QSqlDatabase.database().isOpen(): QSqlDatabase.database().close()
def validarCierreMensual(self): try: query=QSqlQuery() q=u""" SELECT d.iddocumento FROM documentos d WHERE d.idtipodoc=%d AND YEAR(d.fechacreacion)=%s""" %(constantes.IDCIERREMENSUAL,self.fecha.toString( "yyyy" )) query.prepare(q) if not query.exec_(): raise UserWarning( "No se pudo ejecutar la consulta para determinar si existe algun cierre en el año" ) if query.size()>0: mes=self.fecha.addMonths(-1) q=u""" SELECT d.iddocumento FROM documentos d WHERE d.idtipodoc=%d AND MONTH(fechacreacion)=%s AND YEAR(d.fechacreacion)=%s""" %(constantes.IDCIERREMENSUAL,mes.toString( "MM"),self.fecha.toString( "yyyy" )) query.prepare(q) if not query.exec_(): raise UserWarning( "No se pudo ejecutar la consulta para determinar si se cerro el mes anterior" ) if query.size()==0: raise UserWarning( "No se ha cerrado el mes anterior" ) #Verifico si existe un cierre para el mes en proceso q = """ SELECT d2.iddocumento FROM documentos d JOIN docpadrehijos dp ON d.iddocumento=dp.idpadre JOIN documentos d2 ON d2.iddocumento=dp.idhijo WHERE d2.idtipodoc=%d and month(d2.fechacreacion)=%s LIMIT 1 """ % ( constantes.IDCIERREMENSUAL, self.fecha.toString( "MM" ) ) query.prepare( q ) if not query.exec_(): raise UserWarning( "No se pudo ejecutar la consulta para "\ + "verificar si existe un cierre contable" ) #El mes actual no se puede cerrar hoy=QDate.currentDate() if self.fecha.month()==hoy.month() and self.fecha.year() == hoy.year(): raise UserWarning( "No se puede cerrar el mes en proceso" ) return True except Exception as inst: logging.critical( unicode( inst ) ) self.toolBar.removeAction( self.actionSave ) QMessageBox.warning( self, qApp.organizationName(),unicode(inst)) return False
def validarCierreAnual(self): try: query=QSqlQuery() q=u""" SELECT d.iddocumento FROM documentos d WHERE d.idtipodoc=%d AND YEAR(d.fechacreacion)=%s""" %(constantes.IDCIERREMENSUAL,self.fecha.toString( "yyyy" )) query.prepare(q) if not query.exec_(): raise Exception( "No se pudo ejecutar la consulta para determinar si se cerraron todos los meses del año" ) if query.size()<12 and query.size()>0: raise UserWarning( "No se han cerrado todos los meses del Ejercicio" ) return True except UserWarning as inst: logging.error( unicode( inst ) ) QMessageBox.critical( self, qApp.applicationName(), unicode( inst ) ) self.toolBar.removeAction( self.actionSave ) return False except Exception as inst: logging.critical( unicode( inst ) ) self.toolBar.removeAction( self.actionSave ) QMessageBox.warning( self, qApp.organizationName(),unicode(inst)) return False
def updateModels( self ): try: if not self.database.isOpen(): if not self.database.open(): raise UserWarning( u"No se pudo conectar con la base de datos" ) self.backmodel.setTable( self.table ) self.backmodel.select() self.filtermodel = QSortFilterProxyModel() self.filtermodel.setSourceModel( self.backmodel ) self.filtermodel.setFilterKeyColumn( -1 ) self.filtermodel.setFilterCaseSensitivity( Qt.CaseInsensitive ) self.tableview.setModel( self.filtermodel ) self.database.close() self.tableview.setColumnHidden( 0, True ) return True except UserWarning as inst: logging.error( inst ) QMessageBox.critical( self, qApp.organizationName(), unicode( inst ) ) except Exception as inst: logging.critical( inst ) finally: if self.database.isOpen(): self.database.close() return False
def on_dtPicker_dateTimeChanged(self, datetime): """ Cambiar el tipo de cambio del modelo de edición si cambia la fecha @param datetime: La fecha contenida en self.dtPicker @type datetime: QDateTime """ query = QSqlQuery() try: if not self.database.isOpen(): if not self.database.open(): raise Exception( "No se pudo conectar a la base de " + "datos para recuperar los tipos " + "de cambio" ) q = """ SELECT idtc, tasa FROM tiposcambio WHERE fecha = %s LIMIT 1 """ % datetime.toString( "yyyyMMdd" ) if not query.exec_(q): raise UserWarning("No se pudieron recuperar los tipos de " + "cambio") if not query.size() == 1: logging.critical(u"La consulta para obtener tipos de " + "cambio no devolvio exactamente un valor") raise UserWarning(u"Hubo un error al obtener los tipos " + "de cambio") query.first() self.editmodel.exchangeRateId = query.value(0).toInt()[0] self.editmodel.exchangeRate = Decimal(query.value(1).toString()) # self.editmodel.setData( self.editmodel.index( 0, 0 ), self.editmodel.index( 0, 0 ).data() ) self.editmodel.datetime = datetime except UserWarning as inst: QMessageBox.critical(self, qApp.organizationName(), unicode(inst)) self.dtPicker.setDateTime(self.editmodel.datetime) logging.error(inst) logging.error(query.lastError().text()) except Exception as inst: QMessageBox.critical(self, qApp.organizationName(), u"Hubo un error al obtener los tipos de" + " cambio") logging.critical(query.lastError().text()) logging.critical(inst) self.dtPicker.setDateTime(self.editmodel.datetime)
def save(self): """ Guardar el documento actual @rtype: bool """ result = False try: if not self.valid: return False if QMessageBox.question( self, qApp.organizationName(), u"¿Esta seguro que desea guardar la factura?", QMessageBox.Yes | QMessageBox.No) == QMessageBox.Yes: if not self.database.isOpen(): if not self.database.open(): raise UserWarning( u"No se pudo conectar con la base de datos") self.editmodel.observaciones = self.txtobservaciones.toPlainText( ) if not self.editmodel.save(): raise UserWarning("No se ha podido guardar la factura") QMessageBox.information( None, qApp.organizationName(), u"""El documento se ha guardado con éxito""") self.readOnly = True self.updateModels() # self.navigate( 'last' ) # self.status = True result = True except UserWarning as inst: logging.error(unicode(inst)) QMessageBox.critical(self, qApp.organizationName(), unicode(inst)) except Exception as inst: logging.critical(unicode(inst)) QMessageBox.critical(self, qApp.organizationName(), u"Hubo un error al guardar la factura") finally: if self.database.isOpen(): self.database.close() return result
def on_actionDelete_triggered( self ): index = self.view.selectionModel().currentIndex() if not self.model.removeRow( index.row(), index.parent() ): QMessageBox.critical( self, qApp.organizationName(), "No se pudo borrar la categoria"\ + "tenga en cuenta que no podra borrar"\ + " categorias que el sistema ya"\ + "este utilizando" )
def setControls(self, unused_status): """ Habilitar o deshabilitar los controles según status @param status: @type status: bool """ QMessageBox.information(self, qApp.organizationName(), u"Esta parte del sistema no ha sido implementada") raise NotImplementedError()
def save( self ): """ Guardar el documento actual @rtype: bool """ result = False try: if not self.valid: return False if QMessageBox.question( self, qApp.organizationName(), u"¿Esta seguro que desea guardar la factura?", QMessageBox.Yes | QMessageBox.No ) == QMessageBox.Yes: if not self.database.isOpen(): if not self.database.open(): raise UserWarning( u"No se pudo conectar con la base de datos" ) self.editmodel.observaciones = self.txtobservaciones.toPlainText() if not self.editmodel.save(): raise UserWarning( "No se ha podido guardar la factura" ) QMessageBox.information( None, qApp.organizationName() , u"""El documento se ha guardado con éxito""" ) self.readOnly = True self.updateModels() # self.navigate( 'last' ) # self.status = True result = True except UserWarning as inst: logging.error( unicode( inst ) ) QMessageBox.critical( self, qApp.organizationName(), unicode( inst ) ) except Exception as inst: logging.critical( unicode( inst ) ) QMessageBox.critical( self, qApp.organizationName(), u"Hubo un error al guardar la factura" ) finally: if self.database.isOpen(): self.database.close() return result
def updateModels(self): try: if not self.database.isOpen(): if not self.database.open(): raise UserWarning("No se pudo conectar con la base de datos") self.navmodel.setQuery( """ SELECT d.iddocumento, d.ndocimpreso as 'N Doc', d.fechacreacion as 'Fecha', c.descripcion as 'Concepto' FROM documentos d JOIN conceptos c ON c.idconcepto = d.idconcepto WHERE d.idtipodoc = %d ORDER BY d.iddocumento DESC """ % constantes.IDAJUSTECONTABLE ) self.detailsmodel.setQuery( """ SELECT cxd.idcuenta, cc.codigo as 'Codigo Cuenta', cc.descripcion as 'Nombre Cuenta', CONCAT('C$',FORMAT(cxd.monto,4)) as Monto, cxd.iddocumento FROM cuentasxdocumento cxd JOIN cuentascontables cc ON cxd.idcuenta = cc.idcuenta JOIN documentos d ON d.iddocumento = cxd.iddocumento WHERE d.idtipodoc = %d ORDER BY nlinea """ % constantes.IDAJUSTECONTABLE ) self.mapper.addMapping(self.dtPicker, FECHACREACION) self.mapper.addMapping(self.txtConcept, CONCEPTO) self.tableNavigation.selectionModel().setCurrentIndex( self.navproxymodel.index(0, 0), QItemSelectionModel.Select ) self.tableNavigation.setColumnHidden(IDDOCUMENTO, True) self.tableDetails.setColumnHidden(IDDOCUMENTOC, True) self.tableDetails.setColumnHidden(IDCUENTA, True) self.tableDetails.setColumnWidth(CODIGO, 240) self.tableDetails.setColumnWidth(DESCRIPCION, 250) self.tableNavigation.setColumnWidth(FECHACREACION, 200) self.tableNavigation.setColumnWidth(CONCEPTO, 250) except UserWarning as inst: logging.error(inst) QMessageBox.critical(self, qApp.organizationName(), unicode(inst)) except Exception as inst: logging.critical(inst)
def updateDetailFilter(self, _index): """ Esta función se debe implementar en los formularios para que al navegar se actualize el filtro de la tabla detalles @param index: Este es el indice del mapper en el que actualmente se encuentra navegando @type index: int """ QMessageBox.information(self, qApp.organizationName(), u"Esta parte del sistema no ha " + "sido implementada") raise NotImplementedError()
def updateModels( self ): try: if not self.database.isOpen(): if not self.database.open(): raise UserWarning( "No se pudo abrir la base de datos" ) #TODO: Esta consulta tiene que mejorar para definir realmente quien es el que realiza el arqueo query = u""" SELECT tipopersona, idpersona, Nombre, direccion as 'Dirección', telefono as 'Teléfono', email as 'E-mail', ruc as Ruc, activo FROM personas p WHERE tipopersona =%d """ % self.tipo self.navmodel.setQuery( query ) self.navproxymodel.setSourceModel( self.navmodel ) self.actionEditar.setEnabled( self.navproxymodel.rowCount() > 0 ) self.tablenavigation.setModel( self.navproxymodel ) self.mapper.setSubmitPolicy( QDataWidgetMapper.ManualSubmit ) self.mapper.setModel( self.navproxymodel ) self.mapper.addMapping( self.txtnombre, NOMBRE ) self.mapper.addMapping( self.txtdireccion, DIRECCION ) self.mapper.addMapping( self.txttelefono, TELEFONO ) self.mapper.addMapping( self.txtcorreo, CORREO ) self.mapper.addMapping( self.txtruc, RUC ) self.tablenavigation.setColumnHidden( TIPO, True ) self.tablenavigation.setColumnHidden( ID, True ) self.tablenavigation.setColumnHidden( ACTIVO, True ) self.tablenavigation.setColumnWidth( NOMBRE, 200 ) self.navigate( 'last' ) # self.mapper.setCurrentIndex( index.row() ) except UserWarning as inst: logging.error( inst ) QMessageBox.critical( self, qApp.organizationName(), unicode( inst ) ) except Exception as inst: logging.critical( inst ) finally: if self.database.isOpen(): self.database.close()
def save(self): resultado = False try: if not self.database.isOpen(): if not self.database.open(): raise UserWarning( u"No se pudo abrir la conexión "\ + "con la base de datos" ) if not self.database.transaction(): raise Exception( u"No se pudo comenzar la transacción" ) query = QSqlQuery() if not query.prepare( """ UPDATE preciosproducto SET activo = 0 WHERE idproducto = :id; """ ): raise Exception( "No se pudo preparar la consulta para actualizar" ) query.bindValue( ":id", self.articuloId) if not query.exec_(): raise Exception( "No se pudo desactivar el precio actual" ) if not query.prepare( """ INSERT INTO preciosproducto(idproducto,precio,unidadesxcaja) VALUES (:id,:precio,:cantidad); """ ): raise Exception( "No se pudo preparar la consulta para insertar los nuevos precios" ) query.bindValue( ":id", self.articuloId) query.bindValue( ":precio", self.precio) query.bindValue( ":unidades", self.unidades ) if not query.exec_(): raise Exception( "No se pudo insertar el nuevo precio" ) if not self.database.commit(): raise Exception( "No se pudo hacer commit" ) resultado = True except UserWarning as inst: self.database.rollback() print unicode( inst ) QMessageBox.critical( self, qApp.organizationName(), unicode( inst ) ) resultado = False finally: if self.database.isOpen(): self.database.close() return resultado
def on_buttonBox_accepted( self ): if self.valid: if QMessageBox.question( self, qApp.organizationName(), u"¿Esta seguro que desea añadir el producto?", QMessageBox.Ok | QMessageBox.Cancel ) == QMessageBox.Ok: if not self.save(): QMessageBox.critical( self, qApp.organizationName(), u"Lo sentimos pero no se ha"\ + " podido guardar el articulo" ) else: super( FrmArticlesNew, self ).accept() else: QMessageBox.warning( self, qApp.organizationName(), u"Lo sentimos pero los datos no son"\ + " validos, recuerde elegir una subcategoria"\ + " y una marca" )
def valid( self ): """ Un documento es valido cuando self.printedDocumentNumber != "" self.providerId !=0 self.validLines >0 self.ivaId !=0 self.uid != 0 self.warehouseId != 0 """ if int( self.editmodel.clienteId) == 0 and self.editmodel.cliente == "": QMessageBox.warning( self, qApp.organizationName(), "Por favor elija el cliente" ) self.cbcliente.setFocus() elif self.editmodel.rowCount() == 0: QMessageBox.warning( self, qApp.organizationName(), "Por favor agregue algun articulo a la factura" ) else: return True return False
def on_webview_loadFinished( self, status ): if self.progressbar.isVisible(): self.progressbar.hide() if not status: QMessageBox.critical( self, qApp.organizationName(), "El reporte no se pudo cargar" ) logging.error( "No se pudo cargar el reporte: %s" % self.report ) self.accept() self.loaded = True w = self.findChild( QPrintPreviewWidget ) w.updatePreview()
def valid(self): """ Un documento es valido cuando self.printedDocumentNumber != "" self.providerId !=0 self.validLines >0 self.ivaId !=0 self.uid != 0 self.warehouseId != 0 """ if int(self.editmodel.clienteId) == 0 and self.editmodel.cliente == "": QMessageBox.warning(self, qApp.organizationName(), "Por favor elija el cliente") self.cbcliente.setFocus() elif self.editmodel.rowCount() == 0: QMessageBox.warning( self, qApp.organizationName(), "Por favor agregue algun articulo a la factura") else: return True return False
def refresh( self ): """ Actualizar los modelos de edición """ if not self.status: if QMessageBox.question( self, qApp.organizationName(), u"Se perderán todos los cambios en la factura. ¿Esta seguro que desea actualizar?", QMessageBox.Yes | QMessageBox.No ) == QMessageBox.No: return self.updateEditModels() else: if self.updateModels(): QMessageBox.information( None, "Factura", u"Los datos fueron actualizados con éxito" )
def accept( self ): if not self.cerrar: self.editmodel.datosSesion.cajaId = self.cajasmodel.record( self.cbcaja.currentIndex() ).value( "idcaja" ).toInt()[0] if self.editmodel.valid: supervisor = User( self.txtUser.text(), self.txtPassword.text() ) if supervisor.valid: if not supervisor.hasRole( 'gerencia' ): QMessageBox.critical( self, qApp.organizationName() + u": Autenticación", "El usuario %s no tiene permisos para autorizar la apertura de caja" % supervisor.user ) logging.info( u"El usuario %s intento autorizar la apertura de una sesión" % supervisor.user ) return self.editmodel.supervisorId = supervisor.uid self.editmodel.datosSesion.fecha = self.dtFechaTime.date() if not self.editmodel.save(): QMessageBox.warning( self, qApp.organizationName(), self.editmodel.error ) logging.error( self.editmodel.error ) #else: #QMessageBox.warning( None, u"La sesión no fue abierta", u"La sesión no fue abierta. Por favor Contacte al administrador del sistema") else: QMessageBox.information( self, qApp.organizationName(), u"La sesión fue abierta exitosamente" ) logging.info( u"El usuario %s ha abierto una sesión de caja autorizada por el usuario %s " % ( self.parentWindow.user.user, supervisor.user ) ) super( DlgApertura, self ).accept() else: QMessageBox.critical( self, qApp.organizationName() + u": Autenticación", supervisor.error ) self.txtUser.setFocus() self.txtPassword.setText( "" ) else: self.cbcaja.setFocus() QMessageBox.warning( self, qApp.organizationName(), self.editmodel.error )
def on_actionAddSub_triggered( self ): index = self.view.selectionModel().currentIndex() model = self.view.model() dlg = dlgCategoriesMod( self ) if dlg.exec_() == QDialog.Accepted: if not model.insertRow( 0, index ): return QMessageBox.critical( self, qApp.organizationName(), "No se pudo insertar la categoria" ) for column in range( model.columnCount( index ) ): child = model.index( 0, column, index ) model.setData( child, [dlg.txtName.text(), 0], Qt.EditRole )
def save( self ): """ Guardar el documento actual """ if QMessageBox.question( self, qApp.organizationName(), u"¿Esta seguro que desea guardar?", QMessageBox.Yes | QMessageBox.No ) == QMessageBox.Yes: if self.status == 2: if self.editmodel.valid: if self.editmodel.save(): QMessageBox.information( self, qApp.organizationName(), u"El documento se ha guardado con éxito" ) self.editmodel = None self.updateModels() self.status = 1 self.navigate( 'last' ) else: QMessageBox.critical( self, qApp.organizationName(), "Ha ocurrido un error al guardar el documento" ) else: try: QMessageBox.warning( self, qApp.organizationName(), self.editmodel.validError ) except AttributeError: QMessageBox.warning( self, qApp.organizationName(), u"El documento no puede guardarse ya que la " + u"información no esta completa" ) elif self.status == 3: if self.accountsEditModel.valid: if self.accountsEditModel.save(): QMessageBox.information( self, qApp.organizationName(), u"Las cuentas contables se han guardado " + u"correctamente" ) self.updateModels() self.status = 1 self.navigate( 'last' ) else: QMessageBox.critical( self, qApp.organizationName(), "Hubo un error al guardar las cuentas contables" ) else: QMessageBox.critical( self, qApp.organizationName(), u"Existe un error con sus cuentas contables," + u" reviselo antes de guardar" )
def refresh(self): """ Actualizar los modelos de edición """ if not self.status: if QMessageBox.question( self, qApp.organizationName(), u"Se perderán todos los cambios en la factura. ¿Esta seguro que desea actualizar?", QMessageBox.Yes | QMessageBox.No) == QMessageBox.No: return self.updateEditModels() else: if self.updateModels(): QMessageBox.information( None, "Factura", u"Los datos fueron actualizados con éxito")
def updateEditModels( self ): """ Este metodo actualiza los modelos usados en el modo edición """ resultado = False try: if not self.database.isOpen(): if not self.database.open(): raise UserWarning( u"No se pudo abrir la conexión "\ + "con la base de datos" ) self.categoriesview.update(""" SELECT c.nombre as categoria, CONCAT(m.nombre , ' ',IFNULL(p.contenido,"")) as marca, pp.precio, pp.unidadesxcaja, p.idproducto FROM productos p JOIN marcas m ON m.idmarca = p.idmarca JOIN categorias c ON c.idcategoria = p.idcategoria LEFT JOIN preciosproducto pp ON pp.idproducto = p.idproducto AND pp.activo =1 ; """) self.categoriesview.expandAll() self.categoriesview.setColumnHidden(3,True) self.proxyexistenciaModel = SingleSelectionModel() self.proxyexistenciaModel.setSourceModel( self.categoriesview.model() ) resultado = True except UserWarning as inst: logging.error( unicode( inst ) ) QMessageBox.critical( self, qApp.organizationName(), unicode( inst ) ) finally: if self.database.isOpen(): self.database.close() return resultado
def updateEditModels(self): """ Este metodo actualiza los modelos usados en el modo edición """ resultado = False try: if not self.database.isOpen(): if not self.database.open(): raise UserWarning( u"No se pudo abrir la conexión "\ + "con la base de datos" ) self.clientesModel.setQuery(""" SELECT idpersona , nombre AS cliente FROM personas WHERE escliente = 1 """) self.cbcliente.setModel(self.clientesModel) self.cbcliente.setModelColumn(1) self.clienteCompleter.setCaseSensitivity(Qt.CaseInsensitive) self.clienteCompleter.setModel(self.clientesModel) self.clienteCompleter.setCompletionColumn(1) self.cbcliente.setCompleter(self.clienteCompleter) self.editmodel = FacturaModel() # Cargar el numero de la factura actual query = QSqlQuery(""" SELECT MAX(CAST( IFNULL(referencia,0) AS SIGNED)) FROM documentos d WHERE idtipodoc =%d; """ % constantes.IDFACTURA) if not query.exec_(): raise Exception("No se pudo obtener el numero de la factura") query.first() if query.size() == 0: n = 1 else: n = str(int(query.value(0)) + 1) self.editmodel.printedDocumentNumber = str( int(query.value(0)) + 1) self.lblnumero.setText(n) # if self.clientesModel.rowCount() == 0: # raise UserWarning( "No existen clientes en la"\ # + " base de datos" ) # return self.clienteCompleter.setModel(self.clientesModel) self.cbcliente.setModel(self.clientesModel) self.cbcliente.setCompleter(self.clienteCompleter) # #Crear el delegado con los articulo y verificar si existen articulos self.existenciaModel.setQuery( QSqlQuery(""" SELECT categoria, descripcion, precio, unidadesxcaja, -- cajas, 100 as cajas, idprecioproducto FROM vw_articulos -- WHERE existencia >0 """)) self.categoriesview.update(""" SELECT categoria, descripcion, precio, unidadesxcaja, -- cajas, 100 as cajas, idprecioproducto FROM vw_articulos WHERE idprecioproducto IS NOT NULL -- WHERE existencia >0 """) self.categoriesview.expandAll() self.categoriesview.setColumnHidden(3, True) self.categoriesview.setColumnHidden(4, True) self.categoriesview.setColumnWidth(0, 150) self.categoriesview.setColumnWidth(1, 60) self.categoriesview.setColumnWidth(2, 20) self.proxyexistenciaModel = SingleSelectionModel() self.proxyexistenciaModel.setSourceModel(self.existenciaModel) # self.proxyexistenciaModel.setFilterKeyColumn( IDBODEGAEX ) if self.proxyexistenciaModel.rowCount() == 0: raise UserWarning("No hay articulos en bodega") delegate = FacturaDelegate(self.proxyexistenciaModel) self.tabledetails.setItemDelegate(delegate) self.tabledetails.setModel(self.editmodel) self.tabledetails.setColumnHidden(0, True) # self.editmodel.insertRow(1) self.editmodel.dataChanged[QModelIndex, QModelIndex].connect(self.updateLabels) self.txtobservaciones.setPlainText("") self.dtPicker.setDate(QDate.currentDate().addDays(1)) self.editmodel.fecha = QDate.currentDate().addDays(1) self.cbcliente.setCurrentIndex(-1) resultado = True except UserWarning as inst: logging.error(unicode(inst)) QMessageBox.critical(self, qApp.organizationName(), unicode(inst)) finally: if self.database.isOpen(): self.database.close() return resultado