source: publico/il.spdo/trunk/il/spdo/db.py @ 5327

Última Alteração nesse arquivo desde 5327 foi 5327, incluída por fabianosantos, 8 anos atrás

Import inicial.

File size: 9.5 KB
Linha 
1# -*- coding: utf-8 -*-
2
3from zope.interface import implements
4from sqlalchemy import create_engine, Table, Column, Integer, String, DateTime, Text, Boolean, ForeignKey, func
5from sqlalchemy.orm import relationship, backref, sessionmaker
6from sqlalchemy.ext.declarative import declarative_base
7from il.spdo.config import TABLE_ARGS, CREATE_ALL_TABLES
8from il.spdo.interfaces import IArea
9import datetime
10
11Base = declarative_base()
12
13if __name__ == '__main__':
14    # http://www.sqlalchemy.org/docs/06/dialects/mysql.html#known-issues
15    engine = create_engine('mysql://root:interlegis@localhost/spdo?charset=utf8&use_unicode=0', pool_recycle=3600)
16    Session = sessionmaker(bind=engine)
17
18class Pessoa(Base):
19    __tablename__ = 'pessoa'
20    __table_args__ = TABLE_ARGS
21    id = Column(Integer, primary_key=True)
22    usuario = Column(String(50), unique=True, nullable=False)
23    senha = Column(String(20), nullable=False)
24    nome = Column(String(100), unique=True, nullable=False)
25    email = Column(String(50), unique=True, nullable=False)
26    endereco = Column(String(100))
27    bairro = Column(String(30))
28    cep = Column(Integer)
29    cidade = Column(String(50))
30    uf_id = Column(Integer, ForeignKey('uf.id'))
31    uf = relationship("UF", backref="pessoa")
32    telefone = Column(String(30))
33    cpf_cnpj = Column(String(20))
34    tipopessoa = Column(String(1), nullable=False)
35    contato = Column(String(100))
36
37class UF(Base):
38    __tablename__ = 'uf'
39    __table_args__ = TABLE_ARGS
40    id = Column(Integer, primary_key=True)
41    sigla = Column(String(2), unique=True, nullable=False)
42    nome = Column(String(40), unique=True, nullable=False)
43   
44class TipoDocumento(Base):
45    __tablename__ = 'tipodocumento'
46    __table_args__ = TABLE_ARGS
47    id = Column(Integer, primary_key=True)
48    nome = Column(String(40), unique=True, nullable=False)
49
50class Situacao(Base):
51    __tablename__ = 'situacao'
52    __table_args__ = TABLE_ARGS
53    id = Column(Integer, primary_key=True)
54    nome = Column(String(40), unique=True, nullable=False)
55    final = Column(Boolean(), default=False)
56
57class Area(Base):
58    implements(IArea)
59    __tablename__ = 'area'
60    __table_args__ = TABLE_ARGS
61    id = Column(Integer, primary_key=True)
62    nome = Column(String(100), unique=True, nullable=False)
63    chefia_id = Column(Integer, ForeignKey('area.id'))
64    chefia = relationship("Area", backref=backref('area', remote_side=id))
65    responsavel = relationship("Responsavel", backref="area")
66
67class Responsavel(Base):
68    __tablename__ = 'responsavel'
69    __table_args__ = TABLE_ARGS
70    id = Column(Integer, primary_key=True)
71    area_id = Column(Integer, ForeignKey('area.id'))
72    pessoa_id = Column(Integer, ForeignKey('pessoa.id'))
73    pessoa = relationship("Pessoa", backref="responsavel")
74    data = Column(DateTime(), default=datetime.datetime.now())
75   
76# -.-.-.-.-.-.-.-.-.-
77
78class Protocolo(Base):
79    __tablename__ = 'protocolo'
80    __table_args__ = TABLE_ARGS
81    id = Column(Integer, primary_key=True)
82    tipoprotocolo = Column(String(1))
83    seq = Column(Integer)
84    ano = Column(Integer)
85    dv = Column(Integer)
86    numero = Column(String(20))
87    data = Column(DateTime(), default=datetime.datetime.now())
88    tipodocumento_id = Column(Integer, ForeignKey('tipodocumento.id'))
89    tipodocumento = relationship("TipoDocumento", backref="protocolo")
90    situacao_id = Column(Integer, ForeignKey('situacao.id'))
91    situacao = relationship("Situacao", backref="protocolo")
92    observacao = relationship("Observacao", backref="protocolo")
93    anexo = relationship("Anexo", backref="protocolo")
94    tramite = relationship("Tramite", backref="protocolo")
95    apensado_id = Column(Integer, ForeignKey('protocolo.id'))
96    apensado = relationship("Protocolo", backref=backref('protocolo', remote_side=id))
97    pessoa_origem = relationship("PessoaOrigem", backref="pessoa_origem")
98    pessoa_destino = relationship("PessoaDestino", backref="pessoa_destino")
99    notificacao = relationship("Notificacao", backref="notificacao")
100
101    def __init__(self, tipoprotocolo, tipodocumento_id, situacao_id):
102        self.tipoprotocolo = tipoprotocolo
103        self.tipodocumento_id = tipodocumento_id
104        self.situacao_id = situacao_id
105        session = Session()
106        self.ano = datetime.datetime.now().year
107        max_seq = session.bind.execute('SELECT max(p.seq) from protocolo p where p.ano = %d' % self.ano).fetchone()[0]
108        self.seq = max_seq is None and 1 or max_seq + 1
109        self.dv = 99
110        self.numero = "%s-%08d/%04d-%02d" % (tipoprotocolo, self.seq, self.ano, self.dv)
111
112    def __repr__(self):
113        return "<Protocolo:%s>" % self.numero
114
115class PessoaOrigem(Base):
116    __tablename__ = 'pessoa_origem'
117    __table_args__ = TABLE_ARGS
118    protocolo_id = Column(Integer, ForeignKey('protocolo.id'), primary_key=True)
119    pessoa_id = Column(Integer, ForeignKey('pessoa.id'), primary_key=True)
120    pessoa = relationship("Pessoa", backref="pessoa_origem")
121
122class PessoaDestino(Base):
123    __tablename__ = 'pessoa_destino'
124    __table_args__ = TABLE_ARGS
125    protocolo_id = Column(Integer, ForeignKey('protocolo.id'), primary_key=True)
126    pessoa_id = Column(Integer, ForeignKey('pessoa.id'), primary_key=True)
127    pessoa = relationship("Pessoa", backref="pessoa_destino")
128    tipoentrega_id = Column(Integer, ForeignKey('tipoentrega.id'))
129    tipoentrega = relationship("TipoEntrega", backref="pessoa_destino")
130    data_entrega = Column(DateTime(), default=datetime.datetime.now())
131    objeto_correios = Column(String(20))
132
133class TipoEntrega(Base):
134    __tablename__ = 'tipoentrega'
135    __table_args__ = TABLE_ARGS
136    id = Column(Integer, primary_key=True)
137    nome = Column(String(40))
138
139class Notificacao(Base):
140    __tablename__ = 'notificacao'
141    __table_args__ = TABLE_ARGS
142    protocolo_id = Column(Integer, ForeignKey('protocolo.id'), primary_key=True)
143    pessoa_id = Column(Integer, ForeignKey('pessoa.id'), primary_key=True)
144    pessoa = relationship("Pessoa", backref="notificacao")
145
146class Observacao(Base):
147    __tablename__ = 'observacao'
148    __table_args__ = TABLE_ARGS
149    id = Column(Integer, primary_key=True)
150    protocolo_id = Column(Integer, ForeignKey('protocolo.id'))
151    texto = Column(Text())
152
153class Anexo(Base):
154    __tablename__ = 'anexo'
155    __table_args__ = TABLE_ARGS
156    id = Column(Integer, primary_key=True)
157    protocolo_id = Column(Integer, ForeignKey('protocolo.id'))
158    arquivo = Column(Text())
159
160class Tramite(Base):
161    __tablename__ = 'tramite'
162    __table_args__ = TABLE_ARGS
163    id = Column(Integer, primary_key=True)
164    protocolo_id = Column(Integer, ForeignKey('protocolo.id'))
165    area_origem_id = Column(Integer, ForeignKey('area.id'))
166    area_origem = relationship("Area", backref="area_origem")
167    area_destino = relationship("AreaDestino", backref="area_destino")
168
169class AreaDestino(Base):
170    __tablename__ = 'area_destino'
171    __table_args__ = TABLE_ARGS
172    tramite_id = Column(Integer, ForeignKey('tramite.id'), primary_key=True)
173    area_id = Column(Integer, ForeignKey('area.id'), primary_key=True)
174    area = relationship("Area", backref="area_destino")
175
176class LogUtilizacao(Base):
177    __tablename__ = 'logutilizacao'
178    __table_args__ = TABLE_ARGS
179    id = Column(Integer, primary_key=True)
180    data = Column(DateTime(), default=datetime.datetime.now())
181    usuario = Column(String(50))
182    url = Column(Text())
183
184class LogModificacao(Base):
185    __tablename__ = 'logmodificacao'
186    __table_args__ = TABLE_ARGS
187    id = Column(Integer, primary_key=True)
188    data = Column(DateTime(), default=datetime.datetime.now())
189    usuario = Column(String(50))
190    protocolo_id = Column(Integer, ForeignKey('protocolo.id'))
191    protocolo = relationship("Protocolo", backref="log")
192    anexo_id = Column(Integer, ForeignKey('anexo.id'))
193    anexo = relationship("Anexo", backref="log")
194    tramite_id = Column(Integer, ForeignKey('tramite.id'))
195    tramite = relationship("Tramite", backref="log")
196    detalhes = Column(Text())
197
198class Fluxo(Base):
199    __tablename__ = 'fluxo'
200    __table_args__ = TABLE_ARGS
201    id = Column(Integer, primary_key=True)
202    nome = Column(String(40))
203    tipodocumento_id = Column(Integer, ForeignKey('tipodocumento.id'))
204    tipodocumento = relationship("TipoDocumento", backref="fluxo")
205    transicao = relationship("Transicao", backref="fluxo")
206    flexivel = Column(Boolean())
207
208class Transicao(Base):
209    __tablename__ = 'transicao'
210    __table_args__ = TABLE_ARGS
211    id = Column(Integer, primary_key=True)
212    fluxo_id = Column(Integer, ForeignKey('fluxo.id'))
213    #transicao_origem_id = Column(Integer, ForeignKey('area.id'))
214    #transicao_origem = relationship("Area", backref="transicao_origem")
215    #transicao_destino_id = Column(Integer, ForeignKey('area.id'))
216    #transicao_destino = relationship("Area", backref="transicao_destino")
217    inicial = Column(Boolean())
218
219if __name__ == '__main__':
220
221    if CREATE_ALL_TABLES:
222        metadata = Base.metadata
223        metadata.drop_all(engine)
224        metadata.create_all(engine)
225
226    session = Session()
227
228    td1 = TipoDocumento(nome='Projeto')
229    session.add(td1)
230    td2 = TipoDocumento(nome='Parecer')
231    session.add(td2)
232    td3 = TipoDocumento(nome='Carta')
233    session.add(td3)
234
235    st1 = Situacao(nome='Tramitando')
236    session.add(st1)
237    st2 = Situacao(nome='Em Análise')
238    session.add(st2)
239    st3 = Situacao(nome='Arquivado', final = True)
240    session.add(st3)
241
242    session.flush()
243
244    p1 = Protocolo('R', td1.id, st1.id)
245    session.add(p1)
246    session.commit()
247   
248    p2 = Protocolo('E', td2.id, st2.id)
249    session.add(p2)
250    session.commit()
251
252    p3 = Protocolo('I', td3.id, st3.id)
253    session.add(p3)
254    session.commit()
255
Note: Veja TracBrowser para ajuda no uso do navegador do trac.
 

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