Esempio n. 1
0
    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
Esempio n. 2
0
    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()