Conjunto de Mudanças 5574 no publico para il.spdo/trunk/il/spdo/api.py


Ignorar:
Timestamp:
16/11/2011 10:45:12 (8 anos atrás)
Autor:
fabianosantos
Mensagem:

Nesse commit reside 90% da inteligencia desse sistema. Adicionado algoritmos de tramitacao inicial, de envio, de recebimento e recuperacao de protocolos enviados e nao recebidos. Adicionadas tabelas que representam o inbox e outbox das áreas. Adiciona coluna na tabela de tramitacao para armazenar a área anterior de um tramite, util para implementar a recuperacao e atualizacao de inbox e outbox no momento do recebimento. Todos os metodos recebem listas de identificadores de protocolos, para permitir a tramitacao em lote, desobrigando o usuario a tramitar protocolo por protocolo, dando agilidade ao sistema.

Arquivo:
1 editado

Legenda:

Não Modificado
Adicionado
Removido
  • il.spdo/trunk/il/spdo/api.py

    r5573 r5574  
    138138        return tuple(result_ids)
    139139
     140    def _add_box(self, box, protocolo_id, area_id):
     141        assert(box in (db.TramiteInbox, db.TramiteOutbox))
     142        session = Session()
     143        t = session.query(box).get((protocolo_id, area_id))
     144        if t is None:
     145            t = box()
     146            t.protocolo_id=protocolo_id
     147            t.area_id=area_id
     148            tbl = box is db.TramiteInbox and 'tramite_inbox' or 'tramite_outbox'
     149            t.version = db.nextVersion(tbl, protocolo_id=protocolo_id, area_id=area_id)
     150            session.add(t)
     151   
     152    def _del_box(self, box, protocolo_id, area_id):
     153        assert(box in (db.TramiteInbox, db.TramiteOutbox))
     154        session = Session()
     155        t = session.query(box).get((protocolo_id, area_id))
     156        if t is not None:
     157            session.delete(t)
     158
    140159    def TramiteInicial(self, protocolo_id):
    141160        """Tramite inicial.
    142161        """
    143162        session = Session()
     163        area_id_auth = self.getAuthPessoa().area_id
    144164        tramite = db.Tramite(
    145165                  protocolo_id=protocolo_id,
    146                   area_id=self.getAuthPessoa().area_id,
     166                  area_id=area_id_auth,
    147167                  data_disponibilizacao=None,
    148168                  data_recebimento=datetime.datetime.now(),
     
    151171                  )
    152172        session.add(tramite)
    153         session.flush()
    154         tramite_inbox = db.TramiteInbox(
    155                         tramite_id=tramite.id,
    156                         area_id=tramite.area_id,
    157                         )
    158         session.add(tramite_inbox)
    159         session.flush()
    160         return tramite.id
    161        
    162     def TramiteEnvio(self, protocolo_id, areas, acao):
     173        self._add_box(db.TramiteInbox, protocolo_id, area_id_auth)
     174        session.flush()
     175
     176    def TramiteEnvio(self, protocolos, areas, acao):
    163177        """Tramite de envio.
    164178        """
    165         session = Session()
    166         area_id_auth = self.getAuthPessoa().area_id
     179        protocolos = list(set(protocolos))
     180        areas = list(set(areas))
     181        session = Session()
     182        area_id_auth = self.getAuthPessoa().area_id
     183        # evita o envio para a própria área
     184        if areas.count(area_id_auth):
     185            areas.pop(areas.index(area_id_auth))
    167186        copia = len(areas) > 1
    168         result_ids = []
    169         for area_id in areas:
    170             # evita o envio para a própria área
    171             if area_id == area_id_auth:
    172                 continue
    173             tramite = db.Tramite(protocolo_id=protocolo_id,
    174                                  area_id=area_id,
    175                                  data_disponibilizacao=datetime.datetime.now(),
    176                                  data_recebimento=None,
    177                                  acao=acao,
    178                                  copia=copia,
    179                                  usuario=self.getAuthId(),
    180                                  )
    181             session.add(tramite)
    182             session.flush()
    183             tramite_outbox = db.TramiteOutbox(
    184                              tramite_id=tramite.id,
    185                              area_id=area_id_auth,
    186                              )
    187             session.add(tramite_inbox)
    188             session.flush()
    189             result_ids.append(tramite.id)
    190         return tuple(result_ids)
     187        for protocolo_id in protocolos:
     188            for area_id in areas:
     189                tramite = db.Tramite(
     190                          protocolo_id=protocolo_id,
     191                          area_id=area_id,
     192                          data_disponibilizacao=datetime.datetime.now(),
     193                          data_recebimento=None,
     194                          acao=acao,
     195                          usuario=self.getAuthId(),
     196                          copia=copia,
     197                          area_id_anterior=area_id_auth,
     198                          )
     199                session.add(tramite)
     200                self._add_box(db.TramiteOutbox, protocolo_id, area_id_auth)
     201                self._del_box(db.TramiteInbox, protocolo_id, area_id_auth)
     202                session.flush()
    191203
    192204    def TramiteRecebimento(self, protocolos):
    193205        """Tramite de recebimento.
    194206        """
     207        protocolos = list(set(protocolos))
    195208        session = Session()
    196209        area_id_auth = self.getAuthPessoa().area_id
     
    199212            tramite = session.query(db.Tramite).\
    200213                      filter_by(protocolo_id=protocolo_id).\
    201                       filter_by(area_id=area_id_actual).\
    202                       filter(db.Tramite.data_recebimento is None).first()
     214                      filter_by(area_id=area_id_auth).\
     215                      filter_by(data_recebimento=None).first()
    203216            tramite.data_recebimento=datetime.datetime.now()
     217            self._add_box(db.TramiteInbox, protocolo_id, area_id_auth)
     218            self._del_box(db.TramiteOutbox, protocolo_id, tramite.area_id_anterior)
     219           
     220    def TramiteRecuperacao(self, protocolos):
     221        """Tramite de recuperação (recupera um protocolo enviado que não foi recebido).
     222        """
     223        protocolos = list(set(protocolos))
     224        session = Session()
     225        area_id_auth = self.getAuthPessoa().area_id
     226        for protocolo_id in protocolos:
     227            protocolo = self.getProtocolo(protocolo_id)
     228            tramite = session.query(db.Tramite).\
     229                      filter_by(protocolo_id=protocolo_id).\
     230                      filter_by(area_id_anterior=area_id_auth).\
     231                      filter_by(data_recebimento=None).first()
     232            session.delete(tramite)
     233            self._add_box(db.TramiteInbox, protocolo_id, area_id_auth)
     234            self._del_box(db.TramiteOutbox, protocolo_id, area_id_auth)
Note: Veja TracChangeset para ajuda no uso do visualizador de conjunto de mudanças.
 

The contents and data of this website are published under license:
Creative Commons 4.0 Brasil - Atribuir Fonte - Compartilhar Igual.