def newDocument(self): """ activar todos los controles, llenar los modelos necesarios, crear el modelo ChequeModel """ self.tabWidget.setCurrentIndex(0) query = QSqlQuery() try: 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") # Crea modelo para edicion self.editmodel = ChequeModel() # Sacar valor porcentaje del IVA query = QSqlQuery( """SELECT valorcosto FROM costosagregados c WHERE activo=1 AND idtipocosto=%d """ % (constantes.IVA) ) if not query.exec_(): raise UserWarning("No se pudo ejecutar la consulta para" + " obtener los valores de los impuestos") elif not query.size() > 0: raise UserWarning("No se pudieron obtener los valores" + " de los impuestos") query.first() self.editmodel.ivaRate = Decimal(query.value(0).toString()) self.dtPicker.setDateTime(QDateTime.currentDateTime()) self.lbltipocambio.setText(str(self.editmodel.exchangeRate)) # Crea un edit delegate para las cuentas self.accountseditdelegate = ChequesFiltroDelegate( QSqlQuery( """ SELECT c.idcuenta, c.codigo, c.descripcion FROM cuentascontables c JOIN cuentascontables p ON c.padre = p.idcuenta AND p.padre != 1 WHERE c.padre != 1 AND c.idcuenta != 22 """ ) ) self.tabledetails.setItemDelegate(self.accountseditdelegate) self.tabledetails.setModel(self.editmodel) # Rellenar el combobox de las retenciones self.retencionModel = QSqlQueryModel() self.retencionModel.setQuery( """ SELECT idcostoagregado, FORMAT(valorcosto,0) as tasa FROM costosagregados WHERE idtipocosto IN (%d,%d) AND activo=1 ORDER BY valorcosto desc; """ % (constantes.RETENCIONPROFESIONALES, constantes.RETENCIONFUENTE) ) self.cboretencion.setModel(self.retencionModel) self.cboretencion.setCurrentIndex(-1) self.cboretencion.setModelColumn(1) # Rellenar el combobox de los PROVEEDORES self.proveedoresmodel = QSqlQueryModel() self.proveedoresmodel.setQuery( """ SELECT p.idpersona, p.nombre, p.activo FROM personas p where p.tipopersona=%d group by p.idpersona ORDER BY p.nombre ; """ % constantes.PROVEEDOR ) self.proveedoresfiltro = QSortFilterProxyModel() self.proveedoresfiltro.setSourceModel(self.proveedoresmodel) self.proveedoresfiltro.setFilterKeyColumn(1) # self.proveedoresfiltro.setFilterRegExp("0") self.cbobeneficiario.setModel(self.proveedoresfiltro) self.cbobeneficiario.setCurrentIndex(-1) self.cbobeneficiario.setModelColumn(1) completer = QCompleter() completer.setCaseSensitivity(Qt.CaseInsensitive) completer.setModel(self.proveedoresmodel) completer.setCompletionColumn(1) # Rellenar el combobox de los conceptos self.conceptosmodel = QSqlQueryModel() self.conceptosmodel.setQuery( """ SELECT idconcepto,descripcion FROM conceptos c; """ ) self.cboconcepto.setModel(self.conceptosmodel) self.cboconcepto.setCurrentIndex(-1) self.cboconcepto.setModelColumn(1) completer = QCompleter() completer.setCaseSensitivity(Qt.CaseInsensitive) completer.setModel(self.conceptosmodel) completer.setCompletionColumn(1) self.cuentabancaria = QSqlQueryModel() # self.status = False # Rellenar el combobox de las CONCEPTOS self.cuentabancaria.setQuery( u""" SELECT idcuentacontable, cc.codigo, CONCAT(cc.descripcion," Moneda: ",tm.moneda) as Descripción, tm.moneda as Moneda, tm.simbolo as simbolo, tm.idtipomoneda as IDMONEDA FROM cuentasbancarias c JOIN cuentascontables cc ON cc.idcuenta=c.idcuentacontable JOIN tiposmoneda tm ON tm.idtipomoneda=c.idtipomoneda JOIN cuentasxdocumento cd ON cd.idcuenta=cc.idcuenta GROUP BY cc.idcuenta; """ ) if self.cuentabancaria.rowCount() < 0: QMessageBox.warning(self, qApp.organizationName(), u"Saldo insuficiente en cuentas bancarias") line = AccountsSelectorLine() record = self.cuentabancaria.record(self.cbocuenta.currentIndex()) line.itemId = record.value("idcuentacontable").toInt()[0] line.code = record.value("codigo").toString() line.name = record.value("descripcion").toString() line.amount = Decimal(str(self.subtotal.value())) self.editmodel.insertRow(0) self.editmodel.lines[0] = line self.cbocuenta.setModel(self.cuentabancaria) self.cbocuenta.setCurrentIndex(-1) self.cbocuenta.setModelColumn(2) self.tabledetails.resizeColumnsToContents() self.tabledetails.setColumnHidden(0, True) completercuenta = QCompleter() completercuenta.setCaseSensitivity(Qt.CaseInsensitive) completercuenta.setModel(self.cuentabancaria) completercuenta.setCompletionColumn(1) self.lblretencion.setText("") self.status = False # self.subtotal.valueChanged[float].connect( self.updateTotals ) except UserWarning as inst: logging.error(unicode(inst)) QMessageBox.warning(self, qApp.organizationName(), unicode(inst)) self.status = True except Exception as inst: QMessageBox.warning(self, qApp.organizationName(), u"No se pudo iniciar la creación " "del nuevo cheque") logging.critical(unicode(inst)) self.status = True finally: if self.database.isOpen(): self.database.close()
def editAccounts( self ): """ Editar las cuentas contables """ try: if not self.user.hasRole( "contabilidad" ): raise UserWarning( "Usted no tiene permisos para editar "\ + "cuentas contables" ) 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" ) docid = self.navmodel.record( self.mapper.currentIndex() ).value( IDDOCUMENTO ).toInt()[0] self.xdockWidget.setVisible( True ) self.accountsEditModel = LiquidacionAccountsModel( docid, self.user ) accountsdelegate = AccountsSelectorDelegate( QSqlQuery( """ SELECT c.idcuenta, c.codigo, c.descripcion FROM cuentascontables c JOIN cuentascontables p ON c.padre = p.idcuenta AND p.padre != 1 WHERE c.padre != 1 AND c.idcuenta != 22 """ ), True ) self.tableaccounts.setItemDelegate( accountsdelegate ) self.tableaccounts.setModel( self.accountsEditModel ) self.accountsEditModel.insertRows( 0, 2 ) line = AccountsSelectorLine() line.itemId = int( movimientos.INVENTARIO ) line.code = "110 003 001 000 000" line.name = "INV Inventario de Bodega" line.amount = Decimal( self.navmodel.record( self.mapper.currentIndex() ).value( TOTALC ).toString() ).quantize( Decimal( '0.0001' ) ) self.accountsEditModel.lines[0] = line self.tabWidget.setCurrentIndex( 0 ) self.tableaccounts.resizeColumnsToContents() self.status = 3 except UserWarning as inst: QMessageBox.critical( self, qApp.organizationName(), unicode( inst ) ) self.tableaccounts.setModel( self.__accounts_proxy_model ) logging.error( unicode( inst ) ) self.status = 1 except Exception as inst: QMessageBox.critical( self, qApp.organizationName(), u"El sistema no pudo iniciar la edición " \ + " de las cuentas contables" ) logging.critical( unicode( inst ) ) self.tableaccounts.setModel( self.__accounts_proxy_model ) self.status = 1
def newDocument( self ): try: if not QSqlDatabase.database().isOpen(): if not QSqlDatabase.database().open: raise UserWarning( "No se pudo conectar con la "\ + "base de datos" ) self.editmodel = KardexOtherModel() self.editmodel.uid = self.user.uid conceptosmodel = QSqlQueryModel() conceptosmodel.setQuery( """ SELECT c.idconcepto, c.descripcion FROM conceptos c WHERE c.idtipodoc = %d """ % constantes.IDAJUSTEBODEGA ) if conceptosmodel.rowCount() == 0: raise UserWarning( u"No existen conceptos para los "\ + "ajustes de bodega" ) self.cbConcept.setModel( conceptosmodel ) self.cbConcept.setModelColumn( 1 ) warehouseModel = QSqlQueryModel() warehouseModel.setQuery( """ SELECT idbodega, nombrebodega FROM bodegas b ORDER BY idbodega """ ) self.cbWarehouse.setModel( warehouseModel ) self.cbWarehouse.setModelColumn( 1 ) #Calcular el numero de kardex query = QSqlQuery( """ CALL spConsecutivo(%d,NULL); """ % constantes.IDAJUSTEBODEGA ) if not query.exec_(): raise UserWarning( "No se pudo calcular el numero "\ + "del kardex" ) query.first() self.editmodel.printedDocumentNumber = query.value( 0 ).toString() self.txtPrintedDocumentNumber.setText( self.editmodel.printedDocumentNumber ) articlesmodel = QSqlQueryModel() articlesmodel.setQuery( """ SELECT a.idarticulo, a.descripcion, ca.valor as costo FROM vw_articulosdescritos a JOIN costosarticulo ca ON a.idarticulo = ca.idarticulo AND ca.activo = 1 """ ) delegate = KardexOtherDelegate( articlesmodel ) self.tabledetails.setItemDelegate( delegate ) self.tabledetails.setModel( self.editmodel ) accountsdelegate = AccountsSelectorDelegate( QSqlQuery( """ SELECT c.idcuenta, c.codigo, c.descripcion FROM cuentascontables c JOIN cuentascontables p ON c.padre = p.idcuenta AND p.padre != 1 WHERE c.padre != 1 AND c.idcuenta != 22 """ ), True ) self.tableaccounts.setItemDelegate( accountsdelegate ) self.tableaccounts.setModel( self.editmodel.accountsmodel ) self.editmodel.accountsmodel.insertRows( 0, 2 ) line = AccountsSelectorLine() line.itemId = int( movimientos.INVENTARIO ) line.code = "110 003 001 000 000" line.name = "INV Inventario de Bodega" self.editmodel.accountsmodel.lines[0] = line self.addLine() self.dtPicker.setDateTime( QDateTime.currentDateTime() ) self.status = False except UserWarning as inst: QMessageBox.critical( self, qApp.organizationName(), unicode( inst ) ) self.status = True except Exception as inst: QMessageBox.critical( self, qApp.organizationName(), "El sistema no pudo iniciar una nueva entrada de kardex" ) self.status = True