Example #1
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 #2
0
 def createAndAdd(self, data):
     uf = UF()
     uf.sigla = data['sigla']
     uf.nome = data['nome']
     session = Session()
     session.add(uf)
     session.flush()
Example #3
0
 def createAndAdd(self, data):
     uf = UF()
     uf.sigla = data['sigla']
     uf.nome = data['nome']
     session = Session()
     session.add(uf)
     session.flush()
Example #4
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 #5
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 #6
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 #7
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 #8
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 #9
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 #10
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 #11
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 #12
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 #13
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 #14
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 #15
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 #16
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 #17
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 #18
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 #19
0
 def addObservacao(self, protocolo_id, texto):
     """Adiciona observação.
     """
     if not texto:
         return
     session = Session()
     observacao = db.Observacao(
                  protocolo_id=protocolo_id,
                  texto=texto,
                  usuario=self.getAuthId(),
                  )
     session.add(observacao)
     session.flush()
     return observacao.id
Example #20
0
 def createAndAdd(self, data):
     api = getUtility(ISPDOAPI)
     protocolo_id = api.getProtocoloId()
     session = Session()
     for i in data['referencia_id']:
         # garante que o protocolo não faz referência para ele mesmo
         if protocolo_id == i:
             continue
         referencia = Referencia()
         referencia.protocolo_id = protocolo_id
         referencia.referencia_id = i
         referencia.version = nextVersion('referencia', protocolo_id=protocolo_id, referencia_id=i)
         session.add(referencia)
     session.flush()
Example #21
0
 def createAndAdd(self, data):
     api = getUtility(ISPDOAPI)
     fluxo_id = api.getFluxoId()
     session = Session()
     for i in data['area_origem_id']:
         for j in data['area_destino_id']:
             # garante que a transição não tenha origem e destino iguais
             if i == j:
                 continue
             transicao = Transicao()
             transicao.fluxo_id = fluxo_id
             transicao.inicial = data['inicial']
             transicao.area_origem_id = i
             transicao.area_destino_id = j
             session.add(transicao)
     session.flush()
Example #22
0
 def TramiteInicial(self, protocolo_id):
     """Tramite inicial.
     """
     session = Session()
     area_id_auth = self.getAuthPessoa().area_id
     tramite = db.Tramite(
               protocolo_id=protocolo_id,
               area_id=area_id_auth,
               data_disponibilizacao=None,
               data_recebimento=datetime.datetime.now(),
               despacho=_(u'Protocolo Criado'),
               usuario=self.getAuthId(),
               )
     session.add(tramite)
     self._add_box(db.TramiteInbox, protocolo_id, area_id_auth)
     session.flush()
Example #23
0
 def createAndAdd(self, data):
     api = getUtility(ISPDOAPI)
     fluxo_id = api.getFluxoId()
     session = Session()
     for i in data['area_origem_id']:
         for j in data['area_destino_id']:
             # garante que a transição não tenha origem e destino iguais
             if i == j:
                 continue
             transicao = Transicao()
             transicao.fluxo_id = fluxo_id
             transicao.inicial = data['inicial']
             transicao.area_origem_id = i
             transicao.area_destino_id = j
             session.add(transicao)
     session.flush()
Example #24
0
    def createAndAdd(self, data):
        del data['id']

        # garante que alguns campos são armazenados apenas como
        # números, mesmo sendo strings
        for campo in ('cep', 'cpf_cnpj'):
            if data[campo] is not None:
                data[campo] = ''.join([c for c in data[campo] if c.isdigit()])

        # ROLE_ADMIN ou ROLE_GESTOR são necessários para definir a
        # lotação de uma pessoa. Isso é importante para evitar que um
        # operador modifique a própria lotação para contornar
        # restrições de segurança.
        sc = getUtility(ISecurityChecker)
        if not sc.check('lotacao_pessoa'):
            del data['area_id']

        pessoa = Pessoa(**data)
        session = Session()
        session.add(pessoa)
        session.flush()
Example #25
0
    def createAndAdd(self, data):
        del data['id']

        # garante que alguns campos são armazenados apenas como
        # números, mesmo sendo strings
        for campo in ('cep', 'cpf_cnpj'):
            if data[campo] is not None:
                data[campo] = ''.join([c for c in data[campo] if c.isdigit()])

        # ROLE_ADMIN ou ROLE_GESTOR são necessários para definir a
        # lotação de uma pessoa. Isso é importante para evitar que um
        # operador modifique a própria lotação para contornar
        # restrições de segurança.
        sc = getUtility(ISecurityChecker)
        if not sc.check('lotacao_pessoa'):
            del data['area_id']

        pessoa = Pessoa(**data)
        session = Session()
        session.add(pessoa)
        session.flush()
Example #26
0
 def addProtocolo(self, tipoprotocolo, tipodocumento_id, numero_documento, data_emissao, assunto, situacao_id, origem, destino, **kwargs):
     """Adiciona protocolo.
     """
     session = Session()
     protocolo = db.Protocolo(
                 tipoprotocolo=tipoprotocolo,
                 tipodocumento_id=tipodocumento_id,
                 numero_documento=numero_documento,
                 data_emissao=data_emissao,
                 assunto=assunto,
                 situacao_id=situacao_id,
                 usuario=self.getAuthId(),
                 )
     session.add(protocolo)
     session.flush()
     protocolo_id = protocolo.id
     for pessoa_id in origem:
         pessoa_origem = db.PessoaOrigem(
                         protocolo_id=protocolo_id,
                         pessoa_id=pessoa_id,
                         )
         session.add(pessoa_origem)
     for pessoa_id in destino:
         pessoa_destino = db.PessoaDestino(
                          protocolo_id=protocolo_id,
                          pessoa_id=pessoa_id,
                          )
         session.add(pessoa_destino)
     session.flush()
     return protocolo_id
Example #27
0
 def _TramiteEnvio(self, protocolos, areas, despacho, apenso=False):
     """Tramite de envio.
     """
     protocolos = list(set(protocolos))
     areas = list(set(areas))
     session = Session()
     area_id_auth = self.getAuthPessoa().area_id
     # evita o envio para a própria área
     if areas.count(area_id_auth):
         areas.pop(areas.index(area_id_auth))
     copia = len(areas) > 1
     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 envio. Protocolo: ') + protocolo.numero
             sc.enforce('tramitar_envio', protocolo_id=protocolo_id, msg=msg)                
         for area_id in areas:
             tramite = db.Tramite(
                       protocolo_id=protocolo_id,
                       area_id=area_id,
                       data_disponibilizacao=datetime.datetime.now(),
                       data_recebimento=None,
                       despacho=despacho,
                       usuario=self.getAuthId(),
                       copia=copia,
                       area_id_anterior=area_id_auth,
                       )
             session.add(tramite)
             self._add_box(db.TramiteOutbox, protocolo_id, area_id_auth)
             self._del_box(db.TramiteInbox, protocolo_id, area_id_auth)
             session.flush()
         # propaga tramitação nos apensos
         for apenso in protocolo.apenso:
             ret.extend(self._TramiteEnvio([apenso.id], areas, despacho, apenso=True))
     return ret
Example #28
0
if __name__ == '__main__':

    if CREATE_ALL_TABLES:
        metadata = Base.metadata
        metadata.drop_all(engine)
        metadata.create_all(engine)

    if not CREATE_SAMPLES:
        sys.exit()

    session = Session()

    # Area
    a1 = Area(sigla='t1', nome='Teste1')
    session.add(a1)
    session.flush()
    a2 = Area(sigla='t2', nome='Teste2', chefia_id=a1.id)
    session.add(a2)
    session.flush()
    a3 = Area(sigla='t3', nome='Teste3', chefia_id=a2.id)
    session.add(a3)
    session.flush()

    # UF
    UFs = """
          AC Acre
          AL Alagoas
          AP Amapá
          AM Amazonas
          BA Bahia
Example #29
0
 def createAndAdd(self, data):
     tipodocumento = TipoDocumento()
     tipodocumento.nome = data['nome']
     session = Session()
     session.add(tipodocumento)
     session.flush()
Example #30
0
 def createAndAdd(self, data):
     tipoentrega = TipoEntrega()
     tipoentrega.nome = data['nome']
     session = Session()
     session.add(tipoentrega)
     session.flush()
Example #31
0
if __name__ == '__main__':

    if CREATE_ALL_TABLES:
        metadata = Base.metadata
        metadata.drop_all(engine)
        metadata.create_all(engine)

    if not CREATE_SAMPLES:
        sys.exit()

    session = Session()

    # Area
    a1 = Area(sigla='t1', nome='Teste1')
    session.add(a1)
    session.flush()
    a2 = Area(sigla='t2', nome='Teste2', chefia_id=a1.id)
    session.add(a2)
    session.flush()
    a3 = Area(sigla='t3', nome='Teste3', chefia_id=a2.id)
    session.add(a3)
    session.flush()

    # UF
    UFs = """
          AC Acre
          AL Alagoas
          AP Amapá
          AM Amazonas
          BA Bahia
Example #32
0
 def createAndAdd(self, data):
     tipoentrega = TipoEntrega()
     tipoentrega.nome = data['nome']
     session = Session()
     session.add(tipoentrega)
     session.flush()