Example #1
0
 def update(self):
     self.request.set("disable_border", True)
     self.dados = []
     session = Session()
     items = session.query(db.UF).all()
     for i in items:
         self.dados.append({"id": i.id, "sigla": i.sigla, "nome": i.nome})
Example #2
0
 def update(self):
     self.request.set("disable_border", True)
     self.dados = []
     session = Session()
     items = session.query(db.Situacao).all()
     for i in items:
         self.dados.append({"id": i.id, "nome": i.nome, "inicial": i.inicial, "final": i.final})
Example #3
0
 def _valida_protocolo_fluxo(self, **kwargs):
     """O tipo de protocolo e o tipo de documento possuem uma
     definição de fluxo rigoroso. A tramitação de envio deve seguir
     uma transição desse fluxo.
     """
     protocolo_id = kwargs.get('protocolo_id', None)
     areas = kwargs.get('areas', [])
     if protocolo_id is None or not areas:
         logger(_(u'O método _valida_protocolo_fluxo não recebeu os parâmetros protocolo_id e areas.'))
         return False
     api = getUtility(ISPDOAPI)
     protocolo = api.getProtocolo(protocolo_id)
     if protocolo is None:
         return False
     tipoprotocolo = protocolo.tipoprotocolo
     tipodocumento_id = protocolo.tipodocumento_id
     session = Session()
     fluxo = session.query(db.Fluxo).\
             filter_by(tipoprotocolo=tipoprotocolo).\
             filter_by(tipodocumento_id=tipodocumento_id).\
             filter_by(flexivel=False).first()
     if fluxo is None:
         return True
     area_id_auth = self._get_area_usuario()
     if area_id_auth is None:
         return False
     for area in areas:
         if not bool(session.query(db.Transicao).\
                     filter_by(fluxo_id=fluxo.id).\
                     filter_by(area_origem_id=area_id_auth).\
                     filter_by(area_destino_id=area).first()):
             return False
     return True
Example #4
0
 def _TramiteRecuperacao(self, protocolos, apenso=False):
     """Tramite de recuperação (recupera um protocolo enviado que não foi recebido).
     """
     protocolos = list(set(protocolos))
     session = Session()
     area_id_auth = self.getAuthPessoa().area_id
     ret = []
     for protocolo_id in protocolos:
         ret.append(protocolo_id)
         protocolo = self.getProtocolo(protocolo_id)
         if not apenso:
             sc = getUtility(ISecurityChecker)
             msg = _(u'Protocolo não disponível para recuperação. Protocolo: ') + protocolo.numero
             sc.enforce('tramitar_recuperacao', protocolo_id=protocolo_id, msg=msg)
         tramites = session.query(db.Tramite).\
                    filter_by(protocolo_id=protocolo_id).\
                    filter_by(area_id_anterior=area_id_auth).\
                    filter_by(data_recebimento=None).all()
         for tramite in tramites:
             session.delete(tramite)
         self._add_box(db.TramiteInbox, protocolo_id, area_id_auth)
         self._del_box(db.TramiteOutbox, protocolo_id, area_id_auth)
         # propaga tramitação nos apensos
         for apenso in protocolo.apenso:
             ret.extend(self._TramiteRecuperacao([apenso.id], apenso=True))
     return ret
Example #5
0
 def _valida_protocolo_fluxo_area_inicial(self, **kwargs):
     """O tipo de protocolo e o tipo de documento possuem uma
     definição de fluxo rigoroso. A área onde o usuário está lotado
     deve corresponder a uma área inicial de uma das transições
     desse fluxo.
     """
     tipoprotocolo = kwargs.get('tipoprotocolo', None) 
     tipodocumento_id = kwargs.get('tipodocumento_id', None)
     if tipoprotocolo is None or tipodocumento_id is None:
         logger(_(u'O método _valida_protocolo_fluxo_area_inicial não recebeu os parâmetros tipoprotocolo e tipodocumento_id.'))
         return False
     area_id_auth = self._get_area_usuario()
     if area_id_auth is None:
         return False
     session = Session()
     fluxo = session.query(db.Fluxo).\
             filter_by(tipoprotocolo=tipoprotocolo).\
             filter_by(tipodocumento_id=tipodocumento_id).\
             filter_by(flexivel=False).first()
     if fluxo is None:
         return True
     return bool(session.query(db.Transicao).\
                 filter_by(fluxo_id=fluxo.id).\
                 filter_by(area_origem_id=area_id_auth).\
                 filter_by(inicial=True).first())
Example #6
0
    def _notificaResponsaveis(self, protocolos):
        """Envia email notificando tramitação para a pessoa destino
        """

        pu = getToolByName(getSite(), 'portal_url')
        portal = pu.getPortalObject()
        mh = portal.MailHost
        session = Session()

        protocolos = list(set(protocolos))

        for protocolo_id in protocolos:

            protocolo = session.query(db.Protocolo).get(protocolo_id)

            # TODO: refatorar. Essa lista de tramites pode vir
            # pronta do método TramiteEnvio, evitando notificações
            # desnecessárias nas tramitações por cópia.

            tramites = session.query(db.Tramite).\
                       filter_by(protocolo_id=protocolo_id).\
                       filter_by(data_recebimento=None).all()

            for tramite in tramites:
                d = {
                    'numero':
                    protocolo.numero,
                    'data_tramitacao':
                    tramite.data_disponibilizacao,
                    'assunto':
                    protocolo.assunto,
                    'area_origem':
                    tramite.area_anterior.nome,
                    'responsavel_origem':
                    tramite.area_anterior.responsavel[-1].pessoa.nome,
                    'area_destino':
                    tramite.area.nome,
                    'responsavel_destino':
                    tramite.responsavel.pessoa.nome,
                    'situacao':
                    protocolo.situacao.nome,
                    'despacho':
                    tramite.despacho,
                    'url_protocolo':
                    url('show-protocolo', id=protocolo.id)
                }
                mfrom = unicode(portal.getProperty('email_from_address'),
                                'utf-8')
                mto = tramite.responsavel.pessoa.email
                subject = NOTIFICACAO_OBRIG_ASSUNTO % d
                body = NOTIFICACAO_OBRIG_MSG % d
                text = u"From: %s\nTo: %s\nSubject: %s\n\n%s" % (mfrom, mto,
                                                                 subject, body)

                try:
                    mh.send(text, immediate=True, charset='utf8')
                    logger(_(u'Enviou...'))
                    logger(_(text))
                except:
                    logger(_(u'Erro ao enviar a mensagem de notificação.'))
Example #7
0
 def _valida_protocolo_fluxo_area_inicial(self, **kwargs):
     """O tipo de protocolo e o tipo de documento possuem uma
     definição de fluxo rigoroso. A área onde o usuário está lotado
     deve corresponder a uma área inicial de uma das transições
     desse fluxo.
     """
     tipoprotocolo = kwargs.get('tipoprotocolo', None)
     tipodocumento_id = kwargs.get('tipodocumento_id', None)
     if tipoprotocolo is None or tipodocumento_id is None:
         logger(
             _(u'O método _valida_protocolo_fluxo_area_inicial não recebeu os parâmetros tipoprotocolo e tipodocumento_id.'
               ))
         return False
     area_id_auth = self._get_area_usuario()
     if area_id_auth is None:
         return False
     session = Session()
     fluxo = session.query(db.Fluxo).\
             filter_by(tipoprotocolo=tipoprotocolo).\
             filter_by(tipodocumento_id=tipodocumento_id).\
             filter_by(flexivel=False).first()
     if fluxo is None:
         return True
     return bool(session.query(db.Transicao).\
                 filter_by(fluxo_id=fluxo.id).\
                 filter_by(area_origem_id=area_id_auth).\
                 filter_by(inicial=True).first())
Example #8
0
 def _valida_protocolo_fluxo(self, **kwargs):
     """O tipo de protocolo e o tipo de documento possuem uma
     definição de fluxo rigoroso. A tramitação de envio deve seguir
     uma transição desse fluxo.
     """
     protocolo_id = kwargs.get('protocolo_id', None)
     areas = kwargs.get('areas', [])
     if protocolo_id is None or not areas:
         logger(
             _(u'O método _valida_protocolo_fluxo não recebeu os parâmetros protocolo_id e areas.'
               ))
         return False
     api = getUtility(ISPDOAPI)
     protocolo = api.getProtocolo(protocolo_id)
     if protocolo is None:
         return False
     tipoprotocolo = protocolo.tipoprotocolo
     tipodocumento_id = protocolo.tipodocumento_id
     session = Session()
     fluxo = session.query(db.Fluxo).\
             filter_by(tipoprotocolo=tipoprotocolo).\
             filter_by(tipodocumento_id=tipodocumento_id).\
             filter_by(flexivel=False).first()
     if fluxo is None:
         return True
     area_id_auth = self._get_area_usuario()
     if area_id_auth is None:
         return False
     for area in areas:
         if not bool(session.query(db.Transicao).\
                     filter_by(fluxo_id=fluxo.id).\
                     filter_by(area_origem_id=area_id_auth).\
                     filter_by(area_destino_id=area).first()):
             return False
     return True
Example #9
0
 def _valida_privilegio_criador_anexo(self, **kwargs):
     """O anexo deve ter sido criado pelo usuário que quer
     apagá-lo. Não deve existir um tramite com data de
     disponibilização posterior a data do anexo.
     """
     anexo_id = kwargs.get('anexo_id', None)
     protocolo_id = kwargs.get('protocolo_id', None)
     if anexo_id is None or protocolo_id is None:
         logger(
             _(u'O método _valida_privilegio_criador_anexo não recebeu os parâmetros anexo_id ou protocolo_id.'
               ))
         return False
     session = Session()
     api = getUtility(ISPDOAPI)
     usuario = api.getAuthId()
     anexo = session.query(db.Anexo).\
             filter_by(id=anexo_id).\
             filter_by(protocolo_id=protocolo_id).\
             filter_by(usuario=usuario).first()
     if anexo is None:
         return False
     tramite = session.query(db.Tramite).\
               filter_by(protocolo_id=anexo.protocolo_id).\
               filter(db.Tramite.data_disponibilizacao > anexo.data_anexo).first()
     return not bool(tramite)
Example #10
0
 def _valida_privilegio_criador_observacao(self, **kwargs):
     """A observação deve ter sido criada pelo usuário que quer
     modificá-la ou apagá-la. Não deve existir um tramite com data
     de disponibilização posterior a data da observação.
     """
     observacao_id = kwargs.get('observacao_id', None)
     protocolo_id = kwargs.get('protocolo_id', None)
     if observacao_id is None or protocolo_id is None:
         logger(
             _(u'O método _valida_privilegio_criador_observacao não recebeu os parâmetros observacao_id ou protocolo_id.'
               ))
         return False
     session = Session()
     api = getUtility(ISPDOAPI)
     usuario = api.getAuthId()
     observacao = session.query(db.Observacao).\
                  filter_by(id=observacao_id).\
                  filter_by(protocolo_id=protocolo_id).\
                  filter_by(usuario=usuario).first()
     if observacao is None:
         return False
     tramite = session.query(db.Tramite).\
               filter_by(protocolo_id=observacao.protocolo_id).\
               filter(db.Tramite.data_disponibilizacao > observacao.data_observacao).first()
     return not bool(tramite)
Example #11
0
 def getFluxo(self, id=None):
     """Retorna o objeto Fluxo a partir do ID.
     """
     session = Session()
     if id is None:
         id = self.getFluxoId()
     return session.query(db.Fluxo).get(id)
Example #12
0
 def getFluxo(self, id=None):
     """Retorna o objeto Fluxo a partir do ID.
     """
     session = Session()
     if id is None:
         id = self.getFluxoId()
     return session.query(db.Fluxo).get(id)
Example #13
0
 def _TramiteRecebimento(self, protocolos, apenso=False):
     """Tramite de recebimento.
     """
     protocolos = list(set(protocolos))
     session = Session()
     area_id_auth = self.getAuthPessoa().area_id
     ret = []
     for protocolo_id in protocolos:
         ret.append(protocolo_id)
         protocolo = self.getProtocolo(protocolo_id)
         if not apenso:
             sc = getUtility(ISecurityChecker)
             msg = _(u'Protocolo não disponível para recebimento. Protocolo: ') + protocolo.numero
             sc.enforce('tramitar_recebimento', protocolo_id=protocolo_id, msg=msg)
         tramite = session.query(db.Tramite).\
                   filter_by(protocolo_id=protocolo_id).\
                   filter_by(area_id=area_id_auth).\
                   filter_by(data_recebimento=None).first()
         tramite.data_recebimento=datetime.datetime.now()
         self._add_box(db.TramiteInbox, protocolo_id, area_id_auth)
         self._del_box(db.TramiteOutbox, protocolo_id, tramite.area_id_anterior)
         # propaga tramitação nos apensos
         for apenso in protocolo.apenso:
             ret.extend(self._TramiteRecebimento([apenso.id], apenso=True))
     return ret
Example #14
0
 def addAnexos(self, protocolo_id, anexos):
     """Adiciona anexos.
     """
     p = self.getProtocolo(protocolo_id)
     if p is None or anexos is None:
         return []
     session = Session()
     path_protocolo = os.path.join(PATH_ANEXOS, ScopeID(), str(p.ano), str(p.id))
     if not os.path.exists(path_protocolo):
         os.makedirs(path_protocolo, 0700)
     ret = []
     for arquivo in anexos:
         anexo = db.Anexo(
                 protocolo_id=protocolo_id,
                 arquivo=arquivo.filename,
                 tamanho=arquivo.getSize(),
                 usuario=self.getAuthId(),
                 )
         session.add(anexo)
         session.flush()
         ret.append(anexo.id)
         path_anexo = os.path.join(path_protocolo, str(anexo.id))
         with open(path_anexo, 'w') as file_anexo:
             file_anexo.write(arquivo.data)
     # propaga anexos nos apensos
     for apenso in p.apenso:
         ret.extend(self.addAnexos(apenso.id, anexos))
     return ret
Example #15
0
    def _valida_dados(self, dados):
        """
        Valida o parâmetro 'dados', que deve ser uma estrutura como a demonstrada a seguir:

        import json
        dados = {'origem': 'Nome da Pessoa de Origem',
                 'destino': 'Nome da Pessoa de Destino',
                 'assunto': 'Assunto...',
                 'situacao': 'Tramitando',
                 'tipodocumento': 'Carta',
                 'tipoprotocolo': 'E',
                 'inativo': '4',
                 'area': 'Comissão'}
        print json.dumps(dados)
        """

        # dados precisa ser um dicionário
        if not isinstance(dados, dict):
            return False

        # os valores de “situacao”, “tipodocumento” e ”area” devem estar cadastrados
        if dados.get('situacao', None):
            session = Session()
            if not session.query(db.Situacao).filter_by(nome=dados.get('situacao')).filter_by(inicial=True).first():
                return False
        if dados.get('tipodocumento', None):
            if not self._tipodocumento(dados.get('tipodocumento')):
                return False
        if dados.get('area', None):
            if not self._area(dados.get('area')):
                return False

        return True
Example #16
0
 def createAndAdd(self, data):
     uf = UF()
     uf.sigla = data['sigla']
     uf.nome = data['nome']
     session = Session()
     session.add(uf)
     session.flush()
Example #17
0
 def _tramite(self, dados, apenso=False):
     protocolo_id = self._protocolo(dados['protocolo']).id
     area_id = self._area(dados['area']).id
     session = Session()
     area_id_auth = self.api.getAuthPessoa().area_id
     copia = len([area_id]) > 1
     ret = []
     ret.append(protocolo_id)
     protocolo = self.api.getProtocolo(protocolo_id)
     tramite = db.Tramite(
         protocolo_id=protocolo_id,
         area_id=area_id,
         data_disponibilizacao=datetime.datetime.now(),
         data_recebimento=None,
         despacho=dados['despacho'],
         usuario=self.api.getAuthId(),
         copia=copia,
         area_id_anterior=area_id_auth,
     )
     session.add(tramite)
     self.api._add_box(db.TramiteOutbox, protocolo_id, area_id_auth)
     self.api._del_box(db.TramiteInbox, protocolo_id, area_id_auth)
     session.flush()
     # propaga tramitação nos apensos
     for apenso in protocolo.apenso:
         ret.extend(self._tramite([apenso.id], area_id, dados['despacho'], apenso=True))
     return ret
Example #18
0
 def getProtocolo(self, id=None):
     """Retorna o objeto Protocolo a partir do ID.
     """
     session = Session()
     if id is None:
         id = self.getProtocoloId()
     return session.query(db.Protocolo).get(id)
Example #19
0
 def getProtocolo(self, id=None):
     """Retorna o objeto Protocolo a partir do ID.
     """
     session = Session()
     if id is None:
         id = self.getProtocoloId()
     return session.query(db.Protocolo).get(id)
Example #20
0
 def _TramiteRecuperacao(self, protocolos, apenso=False):
     """Tramite de recuperação (recupera um protocolo enviado que não foi recebido).
     """
     protocolos = list(set(protocolos))
     session = Session()
     area_id_auth = self.getAuthPessoa().area_id
     ret = []
     for protocolo_id in protocolos:
         ret.append(protocolo_id)
         protocolo = self.getProtocolo(protocolo_id)
         if not apenso:
             sc = getUtility(ISecurityChecker)
             msg = _(
                 u'Protocolo não disponível para recuperação. Protocolo: '
             ) + protocolo.numero
             sc.enforce('tramitar_recuperacao',
                        protocolo_id=protocolo_id,
                        msg=msg)
         tramites = session.query(db.Tramite).\
                    filter_by(protocolo_id=protocolo_id).\
                    filter_by(area_id_anterior=area_id_auth).\
                    filter_by(data_recebimento=None).all()
         for tramite in tramites:
             session.delete(tramite)
         self._add_box(db.TramiteInbox, protocolo_id, area_id_auth)
         self._del_box(db.TramiteOutbox, protocolo_id, area_id_auth)
         # propaga tramitação nos apensos
         for apenso in protocolo.apenso:
             ret.extend(self._TramiteRecuperacao([apenso.id], apenso=True))
     return ret
Example #21
0
    def _valida_dados(self, dados):
        """
        Valida o parâmetro 'dados', que deve ser uma estrutura como a demonstrada a seguir:

        import json
        dados = {'origem': 'Nome da Pessoa de Origem',
                 'destino': 'Nome da Pessoa de Destino',
                 'assunto': 'Assunto...',
                 'situacao': 'Tramitando',
                 'tipodocumento': 'Carta',
                 'tipoprotocolo': 'E',
                 'inativo': '4',
                 'area': 'Comissão'}
        print json.dumps(dados)
        """

        # dados precisa ser um dicionário
        if not isinstance(dados, dict):
            return False

        # os valores de “situacao”, “tipodocumento” e ”area” devem estar cadastrados
        if dados.get('situacao', None):
            session = Session()
            if not session.query(db.Situacao).filter_by(
                    nome=dados.get('situacao')).filter_by(
                        inicial=True).first():
                return False
        if dados.get('tipodocumento', None):
            if not self._tipodocumento(dados.get('tipodocumento')):
                return False
        if dados.get('area', None):
            if not self._area(dados.get('area')):
                return False

        return True
Example #22
0
 def _TramiteRecebimento(self, protocolos, apenso=False):
     """Tramite de recebimento.
     """
     protocolos = list(set(protocolos))
     session = Session()
     area_id_auth = self.getAuthPessoa().area_id
     ret = []
     for protocolo_id in protocolos:
         ret.append(protocolo_id)
         protocolo = self.getProtocolo(protocolo_id)
         if not apenso:
             sc = getUtility(ISecurityChecker)
             msg = _(
                 u'Protocolo não disponível para recebimento. Protocolo: '
             ) + protocolo.numero
             sc.enforce('tramitar_recebimento',
                        protocolo_id=protocolo_id,
                        msg=msg)
         tramite = session.query(db.Tramite).\
                   filter_by(protocolo_id=protocolo_id).\
                   filter_by(area_id=area_id_auth).\
                   filter_by(data_recebimento=None).first()
         tramite.data_recebimento = datetime.datetime.now()
         self._add_box(db.TramiteInbox, protocolo_id, area_id_auth)
         self._del_box(db.TramiteOutbox, protocolo_id,
                       tramite.area_id_anterior)
         # propaga tramitação nos apensos
         for apenso in protocolo.apenso:
             ret.extend(self._TramiteRecebimento([apenso.id], apenso=True))
     return ret
Example #23
0
 def createAndAdd(self, data):
     responsavel = Responsavel()
     responsavel.area_id = data['area_id']
     responsavel.pessoa_id = data['pessoa_id']
     responsavel.data_responsavel = data['data_responsavel']
     session = Session()
     session.add(responsavel)
     session.flush()
Example #24
0
 def doDeleteUser(self, userid):
     """Apaga o usuário removendo a pessoa do banco de dados. Se
     alguma integridade referencial não for respeitada será lançada
     uma exceção."""
     api = getUtility(ISPDOAPI)
     pessoa = api.getPessoaByEmail(userid)
     session = Session()
     session.delete(pessoa)
Example #25
0
 def _create_and_add(self, dados):
     session = Session()
     protocolo = session.query(
         db.Protocolo).filter_by(numero=dados['protocolo']).first()
     for numero in dados['apensos']:
         apenso = session.query(
             db.Protocolo).filter_by(numero=numero).first()
         protocolo.apenso_id = apenso.id
Example #26
0
    def render(self):
        self.dados = []
        session = Session()
        items = session.query(db.Pessoa).order_by(db.Pessoa.nome).all()
        for i in items:
            self.dados.append({'email': i.email, 'nome': i.nome})

        return json.dumps(self.dados)
Example #27
0
 def createAndAdd(self, data):
     situacao = Situacao()
     situacao.nome = data["nome"]
     situacao.inicial = data["inicial"]
     situacao.final = data["final"]
     session = Session()
     session.add(situacao)
     session.flush()
Example #28
0
 def doDeleteUser(self, userid):
     """Apaga o usuário removendo a pessoa do banco de dados. Se
     alguma integridade referencial não for respeitada será lançada
     uma exceção."""
     api = getUtility(ISPDOAPI)
     pessoa = api.getPessoaByEmail(userid)
     session = Session()
     session.delete(pessoa)
Example #29
0
 def createAndAdd(self, data):
     area = Area()
     area.sigla = data["sigla"]
     area.nome = data["nome"]
     area.chefia_id = data["chefia_id"]
     session = Session()
     session.add(area)
     session.flush()
     return area
Example #30
0
 def update(self):
     sc = getUtility(ISecurityChecker)
     sc.enforce("acessar_list_pessoa")
     self.request.set("disable_border", True)
     self.dados = []
     session = Session()
     items = session.query(db.Pessoa).all()
     for i in items:
         self.dados.append({"id": i.id, "nome": i.nome, "email": i.email})
Example #31
0
 def createAndAdd(self, data):
     fluxo = Fluxo()
     fluxo.nome = data['nome']
     fluxo.tipoprotocolo = data['tipoprotocolo']
     fluxo.tipodocumento_id = data['tipodocumento_id']
     fluxo.flexivel = data['flexivel']
     session = Session()
     session.add(fluxo)
     session.flush()
Example #32
0
 def update(self):
     self.request.set('disable_border', True)
     self.dados = []
     session = Session()
     items = session.query(db.TipoEntrega).all()
     for i in items:
         self.dados.append({
            'id': i.id,
            'nome': i.nome,
            })
Example #33
0
 def render(self):
     session = Session()
     anexo = session.query(db.Anexo).get(self.request.id)
     p = anexo.protocolo
     path_anexo = os.path.join(PATH_ANEXOS, ScopeID(), str(p.ano), str(p.id), str(anexo.id))
     file_anexo = NamedFile(open(path_anexo, "r"), filename=anexo.arquivo)
     cd = 'inline; filename="%s"' % anexo.arquivo.encode("utf-8")
     self.request.response.setHeader("Content-Disposition", cd)
     set_headers(file_anexo, self.request.response)
     return stream_data(file_anexo)
Example #34
0
 def update(self):
     self.request.set('disable_border', True)
     self.dados = []
     session = Session()
     items = session.query(db.TipoEntrega).all()
     for i in items:
         self.dados.append({
            'id': i.id,
            'nome': i.nome,
            })
Example #35
0
 def render(self):
     session = Session()
     anexo = session.query(db.Anexo).get(self.request.id)
     p = anexo.protocolo
     path_anexo = os.path.join(PATH_ANEXOS, ScopeID(), str(p.ano), str(p.id), str(anexo.id))
     file_anexo = NamedFile(open(path_anexo, 'r'), filename=anexo.arquivo)
     cd = 'inline; filename="%s"' % anexo.arquivo.encode('utf-8')
     self.request.response.setHeader('Content-Disposition', cd)
     set_headers(file_anexo, self.request.response)
     return stream_data(file_anexo)
Example #36
0
    def render(self):
        self.dados = []
        session = Session()
        items = session.query(db.TipoDocumento).all()
        for i in items:
            self.dados.append({
                'id': i.id,
                'nome': i.nome,
                })

        return json.dumps(self.dados)
Example #37
0
 def _add_box(self, box, protocolo_id, area_id):
     assert(box in (db.TramiteInbox, db.TramiteOutbox))
     session = Session()
     t = session.query(box).get((protocolo_id, area_id))
     if t is None:
         t = box()
         t.protocolo_id=protocolo_id
         t.area_id=area_id
         tbl = box is db.TramiteInbox and 'tramite_inbox' or 'tramite_outbox'
         t.version = db.nextVersion(tbl, protocolo_id=protocolo_id, area_id=area_id)
         session.add(t)
Example #38
0
 def createAndAdd(self, data):
     api = getUtility(ISPDOAPI)
     pessoa_id = api.getAuthPessoa().id
     session = Session()
     for i in data['protocolo_id']:
         notificacao = Notificacao()
         notificacao.pessoa_id = pessoa_id
         notificacao.protocolo_id = i
         notificacao.version = nextVersion('notificacao', pessoa_id=pessoa_id, protocolo_id=i)
         session.add(notificacao)
     session.flush()
Example #39
0
 def createAndAdd(self, data):
     api = getUtility(ISPDOAPI)
     protocolo_id = api.getProtocoloId()
     session = Session()
     for i in data['pessoa_id']:
         pessoaorigem = PessoaOrigem()
         pessoaorigem.protocolo_id = protocolo_id
         pessoaorigem.pessoa_id = i
         pessoaorigem.version = nextVersion('pessoa_origem', protocolo_id=protocolo_id, pessoa_id=i)
         session.add(pessoaorigem)
     session.flush()
Example #40
0
    def render(self):
        self.dados = []
        session = Session()
        items = session.query(db.TipoDocumento).all()
        for i in items:
            self.dados.append({
                'id': i.id,
                'nome': i.nome,
            })

        return json.dumps(self.dados)
Example #41
0
    def render(self):
        self.dados = []
        session = Session()
        items = session.query(db.Pessoa).order_by(db.Pessoa.nome).all()
        for i in items:
            self.dados.append({
                'email': i.email,
                'nome': i.nome
            })

        return json.dumps(self.dados)
Example #42
0
 def consultarProtocolo(self, data):
     status = IStatusMessage(self.request)
     session = Session()
     query = session.query(db.Protocolo)
     clause = or_(db.Protocolo.numero.contains(data['numero']),
                  db.Protocolo.numero.ilike(data['numero']))
     protocolo = query.filter(clause).first()
     if protocolo is None:
         status.add(_(u'Verifique o número informado. Protocolo: ' + data['numero']), 'error')
         go('search-protocolo-barra')
     else:
         go('show-protocolo', id=protocolo.id)
Example #43
0
 def getProtocolosEnviados(self):
     """Consulta os protocolos enviados pela área.
     """
     session = Session()
     area_id_auth = self.getAuthPessoa().area_id
     items = session.query(db.TramiteOutbox).\
             filter_by(area_id=area_id_auth).\
             join(db.Protocolo).\
             filter(db.Protocolo.apenso_id == None).\
             join(db.Situacao).\
             filter(db.Situacao.final == False).all()
     return self._getProtocolosData([i.protocolo for i in items])
Example #44
0
    def pesquisaProtocolos(self):
        """Pesquisa protocolos.
        """
        session = Session()
        items = session.query(db.Protocolo)

        tipoprotocolo = getTipoProtocolo()
        if tipoprotocolo is not None:
            items = items.filter_by(tipoprotocolo=tipoprotocolo)

        tipodocumento_id = getTipoDocumento()
        if tipodocumento_id is not None:
            items = items.filter_by(tipodocumento_id=tipodocumento_id)

        assunto = getAssunto()
        if assunto is not None:
            clause = rdb.or_(db.Protocolo.assunto.contains(assunto),
                             db.Protocolo.assunto.ilike(assunto))
            items = items.filter(clause)

        situacao_id = getSituacao()
        if situacao_id is not None:
            items = items.filter_by(situacao_id=situacao_id)

        origem = getOrigem()
        if origem is not None:
            pessoa1 = aliased(db.Pessoa)
            items = items.join(db.PessoaOrigem).join(pessoa1)
            clause = rdb.or_(pessoa1.nome.contains(origem),
                             pessoa1.nome.ilike(origem))
            items = items.filter(clause)

        destino = getDestino()
        if destino is not None:
            pessoa2 = aliased(db.Pessoa)
            items = items.join(db.PessoaDestino).join(pessoa2)
            clause = rdb.or_(pessoa2.nome.contains(destino),
                             pessoa2.nome.ilike(destino))
            items = items.filter(clause)

        area_id = getArea()
        if area_id is not None:
            inbox1 = aliased(db.TramiteInbox)
            items = items.join(inbox1).filter_by(area_id=area_id)

        tempo_inativo = getTempoInativo()
        if tempo_inativo is not None:
            d = datetime.datetime.now() - datetime.timedelta(
                days=tempo_inativo)
            inbox2 = aliased(db.TramiteInbox)
            items = items.join(inbox2).filter(inbox2.version_date < d)

        return self._getProtocolosData(items.limit(SEARCH_LIMIT).all())
Example #45
0
 def update(self):
     self.request.set('disable_border', True)
     self.dados = []
     session = Session()
     items = session.query(db.Situacao).all()
     for i in items:
         self.dados.append({
            'id': i.id,
            'nome': i.nome,
            'inicial': i.inicial,
            'final': i.final,
            })
Example #46
0
 def update(self):
     self.request.set('disable_border', True)
     self.dados = []
     session = Session()
     items = session.query(db.Situacao).all()
     for i in items:
         self.dados.append({
            'id': i.id,
            'nome': i.nome,
            'inicial': i.inicial,
            'final': i.final,
            })
Example #47
0
 def removeItem(self):
     content = self.getContent()
     status = IStatusMessage(self.request)
     try:
         session = Session()
         session.delete(content)
         session.flush()
     except AssertionError, e:
         msg = _(u'Falha de integridade relacional: ' + str(e))
         status.add(msg, 'error')
         logger(msg)
         raise
Example #48
0
 def getProtocolosEnviados(self):
     """Consulta os protocolos enviados pela área.
     """
     session = Session()
     area_id_auth = self.getAuthPessoa().area_id
     items = session.query(db.TramiteOutbox).\
             filter_by(area_id=area_id_auth).\
             join(db.Protocolo).\
             filter(db.Protocolo.apenso_id == None).\
             join(db.Situacao).\
             filter(db.Situacao.final == False).all()
     return self._getProtocolosData([i.protocolo for i in items])
Example #49
0
    def pesquisaProtocolos(self):
        """Pesquisa protocolos.
        """
        session = Session()
        items = session.query(db.Protocolo)

        tipoprotocolo = getTipoProtocolo()
        if tipoprotocolo is not None:
            items = items.filter_by(tipoprotocolo=tipoprotocolo)

        tipodocumento_id = getTipoDocumento()
        if tipodocumento_id is not None:
            items = items.filter_by(tipodocumento_id=tipodocumento_id)

        assunto = getAssunto()
        if assunto is not None:
            clause = rdb.or_(db.Protocolo.assunto.contains(assunto),
                             db.Protocolo.assunto.ilike(assunto))
            items = items.filter(clause)

        situacao_id = getSituacao()
        if situacao_id is not None:
            items = items.filter_by(situacao_id=situacao_id)

        origem = getOrigem()
        if origem is not None:
            pessoa1 = aliased(db.Pessoa)
            items = items.join(db.PessoaOrigem).join(pessoa1)
            clause = rdb.or_(pessoa1.nome.contains(origem),
                             pessoa1.nome.ilike(origem))
            items = items.filter(clause)

        destino = getDestino()
        if destino is not None:
            pessoa2 = aliased(db.Pessoa)
            items = items.join(db.PessoaDestino).join(pessoa2)
            clause = rdb.or_(pessoa2.nome.contains(destino),
                             pessoa2.nome.ilike(destino))
            items = items.filter(clause)

        area_id = getArea()
        if area_id is not None:
            inbox1 = aliased(db.TramiteInbox)
            items = items.join(inbox1).filter_by(area_id=area_id)

        tempo_inativo = getTempoInativo()
        if tempo_inativo is not None:
            d = datetime.datetime.now() - datetime.timedelta(days=tempo_inativo)
            inbox2 = aliased(db.TramiteInbox)
            items = items.join(inbox2).filter(inbox2.version_date < d)

        return self._getProtocolosData(items.limit(SEARCH_LIMIT).all())
Example #50
0
    def render(self):
        self.dados = []
        session = Session()
        items = session.query(db.Situacao).all()
        for i in items:
            self.dados.append({
                'id': i.id,
                'nome': i.nome,
                'inicial': i.inicial,
                'final': i.final,
            })

        return json.dumps(self.dados)
Example #51
0
 def _add_box(self, box, protocolo_id, area_id):
     assert (box in (db.TramiteInbox, db.TramiteOutbox))
     session = Session()
     t = session.query(box).get((protocolo_id, area_id))
     if t is None:
         t = box()
         t.protocolo_id = protocolo_id
         t.area_id = area_id
         tbl = box is db.TramiteInbox and 'tramite_inbox' or 'tramite_outbox'
         t.version = db.nextVersion(tbl,
                                    protocolo_id=protocolo_id,
                                    area_id=area_id)
         session.add(t)
Example #52
0
 def update(self):
     sc = getUtility(ISecurityChecker)
     sc.enforce('acessar_list_pessoa')
     self.request.set('disable_border', True)
     self.dados = []
     session = Session()
     items = session.query(db.Pessoa).all()
     for i in items:
         self.dados.append({
            'id': i.id,
            'nome': i.nome,
            'email': i.email,
            })
Example #53
0
 def update(self):
     self.request.set('disable_border', True)
     self.dados = []
     session = Session()
     items = session.query(db.Area).all()
     for i in items:
         self.dados.append({
            'id': i.id,
            'sigla': i.sigla,
            'nome': i.nome,
            'chefia_id': i.chefia_id,
            'chefia_sigla': getattr(i.area,'sigla',''),
            'chefia_nome': getattr(i.area,'nome',''),
            })
Example #54
0
 def consultarProtocolo(self, data):
     status = IStatusMessage(self.request)
     session = Session()
     query = session.query(db.Protocolo)
     clause = or_(db.Protocolo.numero.contains(data['numero']),
                  db.Protocolo.numero.ilike(data['numero']))
     protocolo = query.filter(clause).first()
     if protocolo is None:
         status.add(
             _(u'Verifique o número informado. Protocolo: ' +
               data['numero']), 'error')
         go('search-protocolo-barra')
     else:
         go('show-protocolo', id=protocolo.id)
Example #55
0
 def update(self):
     self.request.set('disable_border', True)
     self.dados = []
     session = Session()
     items = session.query(db.Fluxo).all()
     for i in items:
         self.dados.append({
            'id': i.id,
            'nome': i.nome,
            'tipoprotocolo': self._tipo_protocolo(i.tipoprotocolo),
            'tipodocumento': i.tipodocumento.nome,
            'flexivel': i.flexivel,
            'url-transicao': url('list-transicao', fluxo_id=i.id),
            })
Example #56
0
 def f(*args, **kwargs):
     ret = fn(*args, **kwargs)
     l = Log()
     request = getRequest()
     l.usuario = str(request.other.get('AUTHENTICATED_USER', 'Anonymous'))
     l.url = request.other.get('ACTUAL_URL')
     l.modulo = fn.__module__
     l.classe = args[0].__class__.__name__
     l.funcao = fn.__name__
     l.args = repr(list(args)[1:])
     l.kwargs = repr(kwargs)
     session = Session()
     session.add(l)
     return ret
Example #57
0
    def _addProtocolo(self, dados, anexos=[]):

        session = Session()
        api = getUtility(ISPDOAPI)

        # origens (e destinos)
        pessoas_origens = []
        pessoas_destinos = []
        for f in ('origens', 'destinos'):
            for origem in dados[f]:
                pessoa = session.query(
                    db.Pessoa).filter_by(email=origem['email']).first()
                if not pessoa:
                    pessoa = db.Pessoa(origem['nome'], origem['email'])
                    session.add(pessoa)
                    session.flush()
                if f == 'origens':
                    pessoas_origens.append(pessoa.id)
                else:
                    pessoas_destinos.append(pessoa.id)

        # "situacao" e "tipodocumento"
        situacao = session.query(db.Situacao).filter_by(
            nome=dados.get('situacao')).filter_by(inicial=True).first()
        tipodocumento = self._tipodocumento(dados.get('tipodocumento'))

        # data de emissão
        dt = dados.get('data_emissao')
        if dt:
            aaaa, mm, dd = dt.split('-')
            aaaa = int(aaaa)
            mm = int(mm)
            dd = int(dd)
            dt = datetime.date(aaaa, mm, dd)
        else:
            dt = None

        # cria protocolo, observacao, anexos e tramite inicial, utilizando a API

        # IMPORTANTE: Por definição, exceto na criação dos protocolos,
        # os anexos e as observações são sempre adicionadas ANTES da
        # tramitação ocorrer.

        protocolo_id = api.addProtocolo(dados['tipoprotocolo'],
                                        tipodocumento.id,
                                        dados['numero_documento'], dt,
                                        dados['assunto'], situacao.id,
                                        pessoas_origens, pessoas_destinos)

        api.TramiteInicial(protocolo_id)

        if dados['observacao'].strip():
            api.addObservacao(protocolo_id, dados['observacao'])

        if anexos:
            api.addAnexos(protocolo_id, anexos)

        protocolo = api.getProtocolo(protocolo_id)
        return protocolo.numero, protocolo.data_protocolo
Example #58
0
 def handleCadastrar(self, action):
     data, errors = self.extractData()
     if errors:
         self.status = self.formErrorsMessage
         return
     status = IStatusMessage(self.request)
     try:
         obj = self.createAndAdd(data)
         session = Session()
         session.flush()
     except IntegrityError, e:
         msg = _(u'Falha de integridade relacional: ' + str(e))
         status.add(msg, 'error')
         logger(msg)
         raise
Example #59
0
 def _valida_protocolo_tramita_area(self, **kwargs):
     """Protocolo tramita na área onde o usuário autenticado está
     lotado.
     """
     api = getUtility(ISPDOAPI)
     protocolo_id = kwargs.get('protocolo_id', api.getProtocoloId())
     if protocolo_id is None:
         logger(_(u'O método _valida_protocolo_tramita_area não recebeu o parâmetro protocolo_id.'))
         return False
     area_id_auth = self._get_area_usuario()
     if area_id_auth is None:
         return False
     session = Session()
     return bool(session.query(db.TramiteInbox).\
                 filter_by(protocolo_id=protocolo_id).\
                 filter_by(area_id=area_id_auth).first())
Example #60
0
    def render(self):

        self.dados = []
        session = Session()
        items = session.query(db.Area).all()
        for i in items:
            self.dados.append({
                'id': i.id,
                'sigla': i.sigla,
                'nome': i.nome,
                'chefia_id': i.chefia_id,
                'chefia_sigla': getattr(i.area, ' sigla', ''),
                'chefia_nome': getattr(i.area, 'nome', ''),
            })

        return json.dumps(self.dados)