treemap.py
3.9 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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
from sqlalchemy.orm import Mapped, mapped_column
from presupuestov1.model import Base, model_columns
from sqlalchemy import (
Integer,
String,
Text,
Numeric,
Index,
MetaData,
)
from sqlalchemy import and_, or_, select
class TreemapObjeto(Base):
__tablename__ = "treemap_objeto"
__table_args__ = (
Index("idx_treemap_objeto_gestion_entidad", "gestion", "entidad"),
Index("idx_treemap_objeto_nivel", "nivel"),
{"schema": "web"},
)
# PK compuesta inferida para uso ORM
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
gestion: Mapped[int] = mapped_column(Integer)
entidad_area: Mapped[str | None] = mapped_column(String(9))
entidad: Mapped[int] = mapped_column(Integer)
objeto: Mapped[int] = mapped_column(Integer)
nivel: Mapped[str | None] = mapped_column(String(20))
parent: Mapped[int | None] = mapped_column(Integer)
devengado: Mapped[float | None] = mapped_column(Numeric(30, 15))
desc_entidad: Mapped[str | None] = mapped_column(Text)
desc_objeto: Mapped[str | None] = mapped_column(Text)
class TreemapFinFun(Base):
__tablename__ = "treemap_finfun"
__table_args__ = (
Index("idx_treemap_finfun_gestion_entidad", "gestion", "entidad"),
Index("idx_treemap_finfun_nivel", "nivel"),
{"schema": "web"},
)
# PK compuesta inferida para uso ORM
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
gestion: Mapped[int] = mapped_column(Integer)
entidad_area: Mapped[str | None] = mapped_column(String(9))
entidad: Mapped[int] = mapped_column(Integer)
finfun: Mapped[str] = mapped_column(String(9))
nivel: Mapped[str | None] = mapped_column(String(20))
parent: Mapped[str | None] = mapped_column(String(9))
devengado: Mapped[float | None] = mapped_column(Numeric(30, 15))
desc_entidad: Mapped[str | None] = mapped_column(Text)
desc_finfun: Mapped[str | None] = mapped_column(Text)
class TreemapActeco(Base):
__tablename__ = "treemap_acteco"
__table_args__ = (
Index("idx_treemap_acteco_gestion_entidad", "gestion", "entidad"),
Index("idx_treemap_acteco_nivel", "nivel"),
{"schema": "web"},
)
# PK compuesta inferida para uso ORM
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
gestion: Mapped[int] = mapped_column(Integer)
entidad_area: Mapped[str | None] = mapped_column(String(9))
entidad: Mapped[int] = mapped_column(Integer)
acteco: Mapped[str] = mapped_column(String(9))
nivel: Mapped[str | None] = mapped_column(String(20))
parent: Mapped[str | None] = mapped_column(String(9))
devengado: Mapped[float | None] = mapped_column(Numeric(30, 15))
desc_entidad: Mapped[str | None] = mapped_column(Text)
desc_acteco: Mapped[str | None] = mapped_column(Text)
###############################################################################
# fns
###############################################################################
def get_entity_connections(entity_id, db, query, ClassObject, object_id):
query_filters = [
ClassObject.entidad == entity_id,
]
return get_clas_entities(query_filters, db, query, ClassObject, object_id)
def get_clas_entities(query_filters, db, query, ClassObject, object_id):
if query.gestion is None:
query.gestion = 0
query_filters.extend([
ClassObject.devengado > 0,
ClassObject.gestion == query.gestion,
])
if query.nivel is not None:
query_filters.append(ClassObject.nivel == query.nivel)
if query.id is not None:
ids = query.id.split(',')
ids = [int(_.strip()) for _ in ids]
ids = or_([getattr(ClassObject, object_id) == _ for _ in ids])
query_filters.append(ids)
return db.execute(
select(*model_columns(ClassObject)).where(and_(*query_filters))
).mappings().all()