menus.py
2.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
from sqlalchemy import (
Column,
Integer,
ForeignKey,
String,
SmallInteger, Boolean,Text
)
from sqlalchemy.orm import (
relationship,
backref
)
from ..models import DBSession, Base
from ..models import (NamaModel,
TABLE_ARGS)
class Menus(Base, NamaModel):
__tablename__ = 'menus'
__table_args__ = (TABLE_ARGS,)
id = Column(Integer, primary_key=True)
order_id = Column(SmallInteger)
parent_id = Column(Integer, ForeignKey('public.menus.id'))
level_id = Column(SmallInteger)
valu = Column(String(256)) # value/action
meth = Column(String(256)) # new method
page_typ = Column(String(256)) # PageType
url = Column(String(256))
icon = Column(String(256))
css_class = Column(String(256))
need_login = Column(SmallInteger, server_default="1")
permissions = Column(String(128), server_default="")
title = Column(String(256))
children = relationship(
"Menus", backref=backref('parent', remote_side=[id]))
def get_parents(self, start=False):
allparents = []
if start:
allparents.append(self.nama)
p = self.parent
while p:
allparents.append(p.nama)
p = p.parent
return allparents
@property
def parents(self, start=False):
return self.get_parents()
@property
def name_get(self):
allparents = self.get_parents(True)
return '/'.join(reversed(allparents))
@property
def uraian_all(self):
allparents = self.get_parents(True)
return '/'.join(reversed(allparents))
@classmethod
def get_list(cls):
return DBSession.query(cls.id, cls.nama).order_by(cls.nama).all()
@classmethod
def query_grid(cls):
return DBSession.query().select_from(cls)
@classmethod
def get(cls, parent=None):
if not parent:
return cls.query().filter(cls.parent_id == None)
else:
row = cls.query().filter(cls.kode == parent).first()
if row:
return cls.query().filter(cls.parent_id == row.id)