Пример #1
0
    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",
                    )
Пример #2
0
    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()
Пример #3
0
    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")
Пример #4
0
    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)
Пример #5
0
 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
Пример #6
0
    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()
Пример #7
0
    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()
Пример #8
0
    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()
Пример #9
0
    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
Пример #10
0
 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()
Пример #11
0
    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 ) )
Пример #12
0
    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()
Пример #13
0
 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
Пример #14
0
 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   
Пример #15
0
    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
Пример #16
0
    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)
Пример #17
0
    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
Пример #18
0
 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" )
Пример #19
0
 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()
Пример #20
0
    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
Пример #21
0
    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)
Пример #22
0
 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()
Пример #23
0
    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()
Пример #24
0
    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
Пример #25
0
 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" )
Пример #26
0
 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
Пример #27
0
    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()
Пример #28
0
    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
Пример #29
0
 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" )
Пример #30
0
    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 )
Пример #31
0
    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 )
Пример #32
0
    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" )
Пример #33
0
 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")
Пример #34
0
    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
Пример #35
0
    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