aziizpra commited on
Commit
04ecd91
·
1 Parent(s): 09d9d9d

Upload 72 files

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. Dockerfile +20 -0
  2. app.py +961 -0
  3. db/users.json +1426 -0
  4. db/users_admin.json +84 -0
  5. export.csv +51 -0
  6. flask_session/0555e35e41ac8f1a949990c0984e0cfb +0 -0
  7. flask_session/10e25321a6f00c978694fd187c10abc4 +0 -0
  8. flask_session/2029240f6d1128be89ddc32729463129 +0 -0
  9. flask_session/2202dd7007f9bb3785b95f9f7fa056f7 +0 -0
  10. flask_session/2b2a45b11a1ec2331338aaed0bd01b5d +0 -0
  11. flask_session/341c98d8fe2c4190a62fabbe88e9ba72 +0 -0
  12. flask_session/418808d40d5546be9fb8ce1ecb403d05 +0 -0
  13. flask_session/434dd888e0b14519a082ff8e3983fb19 +0 -0
  14. flask_session/5e3727bf46ddd720e4dbc8818dbf6b85 +0 -0
  15. flask_session/5e570896bb6d280cefe85a0743fc4378 +0 -0
  16. flask_session/72664179816f497ac3372e8f9d2ffd39 +0 -0
  17. flask_session/78e83dad8df47cbc1a7bbfa54ae6192a +0 -0
  18. flask_session/7d6d3d1dfecb2fcc22e8946b74802f82 +0 -0
  19. flask_session/9b438057d5971de7d654493efa2f530a +0 -0
  20. flask_session/9baccf410aea2dc49b9327ebc65c77e4 +0 -0
  21. flask_session/9dc4e083e3952e85bc8021620e23151c +0 -0
  22. flask_session/a348d38bd5ec6f3d4b770da9bade5859 +0 -0
  23. flask_session/a363ccfaa2121d411fd507df144e4bb5 +0 -0
  24. flask_session/a3e0e25a91d3f327b87da1259170e975 +0 -0
  25. flask_session/bd12d2fa23a7a22e0d0abf58f2627079 +0 -0
  26. flask_session/da7a4b202b6b0fa548d83830a3135fa6 +0 -0
  27. flask_session/dda0f415d2f69e8b0cb41e4655ee46b3 +0 -0
  28. flask_session/e2db2cc279d6e99ed18d4b219904dffb +0 -0
  29. flask_session/e4b1dd890605ad0fa42946e5519d3349 +0 -0
  30. flask_session/e63cbe5ee03207dd76c1461d3b0a0ac7 +0 -0
  31. flask_session/ed523d93291f2505e4d771c86230b37e +0 -0
  32. requirements.txt +0 -0
  33. static/css/card.css +5 -0
  34. static/css/dashboard-input-data.css +405 -0
  35. static/css/dashboard-layout-data-anak.css +455 -0
  36. static/css/dashboard-layout-kategori.css +0 -0
  37. static/css/dashboard-style.css +404 -0
  38. static/css/index.css +235 -0
  39. static/css/input_data.css +78 -0
  40. static/css/login.css +62 -0
  41. static/css/register.css +62 -0
  42. static/css/registrasi.css +64 -0
  43. static/image/avatar.svg +1 -0
  44. static/image/bg.svg +1 -0
  45. static/image/gambar.jpg +0 -0
  46. static/image/image.jpg +0 -0
  47. static/image/image1.png +0 -0
  48. static/image/wave.png +0 -0
  49. static/js/dashboard-main.js +21 -0
  50. static/js/dashboard-my_chart.js +33 -0
Dockerfile ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Install Images
2
+ FROM python:3.10.7-slim
3
+
4
+ # Set working directory
5
+ WORKDIR /home/app
6
+
7
+ # Install packages
8
+ RUN apt-get update -y && apt-get upgrade -y
9
+
10
+ # Copy all files into working directory
11
+ COPY . .
12
+
13
+ # Install library
14
+ RUN pip3 install -r requirements.txt
15
+
16
+ # (OPTIONAL) You can use you own port for expose port
17
+ EXPOSE 8000
18
+
19
+ # Run script
20
+ CMD ["python", "app.py"]
app.py ADDED
@@ -0,0 +1,961 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import uuid
3
+ from datetime import datetime
4
+
5
+ from flask import Flask, redirect, render_template, request, session, send_file
6
+ from pysondb import db
7
+ from copy import deepcopy
8
+
9
+ from flask_session import Session
10
+
11
+ app = Flask(__name__)
12
+ app.config["SESSION_PERMANENT"] = False
13
+ app.config["SESSION_TYPE"] = "filesystem"
14
+ Session(app)
15
+ db_users = db.getDb(os.path.join(os.path.dirname(__file__), "db", "users.json"))
16
+ db_users_admin = db.getDb(
17
+ os.path.join(os.path.dirname(__file__), "db", "users_admin.json")
18
+ )
19
+
20
+ rule_table = {
21
+ "R01": {
22
+ "result": "K02",
23
+ "rule": {"P01": True, "P02": True, "P03": True, "P04": True, "P05": True},
24
+ },
25
+ "R02": {
26
+ "result": "K02",
27
+ "rule": {"P01": True, "P02": True, "P03": True, "P04": True, "P05": False},
28
+ },
29
+ "R03": {
30
+ "result": "K02",
31
+ "rule": {"P01": True, "P02": True, "P03": True, "P04": False, "P05": True},
32
+ },
33
+ "R04": {
34
+ "result": "K02",
35
+ "rule": {"P01": True, "P02": True, "P03": False, "P04": True, "P05": True},
36
+ },
37
+ "R05": {
38
+ "result": "K02",
39
+ "rule": {"P01": True, "P02": False, "P03": True, "P04": True, "P05": True},
40
+ },
41
+ "R06": {
42
+ "result": "K01",
43
+ "rule": {"P01": False, "P02": True, "P03": True, "P04": True, "P05": True},
44
+ },
45
+ "R07": {
46
+ "result": "K02",
47
+ "rule": {"P01": True, "P02": True, "P03": True, "P04": False, "P05": False},
48
+ },
49
+ "R08": {
50
+ "result": "K02",
51
+ "rule": {"P01": True, "P02": True, "P03": False, "P04": False, "P05": True},
52
+ },
53
+ "R09": {
54
+ "result": "K02",
55
+ "rule": {"P01": True, "P02": True, "P03": False, "P04": True, "P05": False},
56
+ },
57
+ "R10": {
58
+ "result": "K02",
59
+ "rule": {"P01": True, "P02": False, "P03": False, "P04": True, "P05": True},
60
+ },
61
+ "R11": {
62
+ "result": "K01",
63
+ "rule": {"P01": False, "P02": True, "P03": False, "P04": True, "P05": True},
64
+ },
65
+ "R12": {
66
+ "result": "K01",
67
+ "rule": {"P01": False, "P02": False, "P03": True, "P04": True, "P05": True},
68
+ },
69
+ "R13": {
70
+ "result": "K01",
71
+ "rule": {"P01": False, "P02": True, "P03": True, "P04": True, "P05": False},
72
+ },
73
+ "R14": {
74
+ "result": "K02",
75
+ "rule": {"P01": True, "P02": False, "P03": True, "P04": False, "P05": True},
76
+ },
77
+ "R15": {
78
+ "result": "K02",
79
+ "rule": {"P01": True, "P02": False, "P03": True, "P04": True, "P05": False},
80
+ },
81
+ "R16": {
82
+ "result": "K01",
83
+ "rule": {"P01": False, "P02": True, "P03": True, "P04": False, "P05": True},
84
+ },
85
+ "R17": {
86
+ "result": "K02",
87
+ "rule": {"P01": True, "P02": True, "P03": False, "P04": False, "P05": False},
88
+ },
89
+ "R18": {
90
+ "result": "K02",
91
+ "rule": {"P01": True, "P02": False, "P03": False, "P04": False, "P05": True},
92
+ },
93
+ "R19": {
94
+ "result": "K01",
95
+ "rule": {"P01": False, "P02": False, "P03": False, "P04": True, "P05": True},
96
+ },
97
+ "R20": {
98
+ "result": "K02",
99
+ "rule": {"P01": True, "P02": False, "P03": True, "P04": False, "P05": False},
100
+ },
101
+ "R21": {
102
+ "result": "K01",
103
+ "rule": {"P01": False, "P02": True, "P03": False, "P04": True, "P05": False},
104
+ },
105
+ "R22": {
106
+ "result": "K01",
107
+ "rule": {"P01": False, "P02": True, "P03": False, "P04": True, "P05": False},
108
+ },
109
+ "R23": {
110
+ "result": "K01",
111
+ "rule": {"P01": False, "P02": False, "P03": True, "P04": False, "P05": True},
112
+ },
113
+ "R24": {
114
+ "result": "K01",
115
+ "rule": {"P01": False, "P02": False, "P03": True, "P04": True, "P05": False},
116
+ },
117
+ "R25": {
118
+ "result": "K02",
119
+ "rule": {"P01": True, "P02": False, "P03": False, "P04": True, "P05": False},
120
+ },
121
+ "R26": {
122
+ "result": "K01",
123
+ "rule": {"P01": False, "P02": True, "P03": False, "P04": False, "P05": True},
124
+ },
125
+ "R27": {
126
+ "result": "K01",
127
+ "rule": {"P01": False, "P02": False, "P03": False, "P04": False, "P05": True},
128
+ },
129
+ "R28": {
130
+ "result": "K01",
131
+ "rule": {"P01": False, "P02": False, "P03": False, "P04": True, "P05": False},
132
+ },
133
+ "R29": {
134
+ "result": "K01",
135
+ "rule": {"P01": False, "P02": False, "P03": True, "P04": False, "P05": False},
136
+ },
137
+ "R30": {
138
+ "result": "K01",
139
+ "rule": {"P01": False, "P02": True, "P03": False, "P04": False, "P05": False},
140
+ },
141
+ "R31": {
142
+ "result": "K01",
143
+ "rule": {"P01": True, "P02": False, "P03": False, "P04": False, "P05": False},
144
+ },
145
+ "R32": {
146
+ "result": "K01",
147
+ "rule": {"P01": False, "P02": False, "P03": False, "P04": False, "P05": False},
148
+ },
149
+ }
150
+ result_table = {
151
+ "K01": {
152
+ "detail": "Obesitas Primer",
153
+ "cause": (
154
+ "faktor genetika / turunan",
155
+ "faktor aktivitas",
156
+ "faktor pola makan",
157
+ "faktor psikis",
158
+ ),
159
+ "solution": "Kenaikan berat badan diperlambat, Diet seimbang, makan dengan porsi kecil, hindari makanan dengan kalori tinggi, melakukan aktivitas fisik, dan kurangi menonton tv",
160
+ },
161
+ "K02": {
162
+ "detail": "Obesitas Sekunder",
163
+ "cause": ("faktor kesehatan",),
164
+ "solution": "Pergi ke Dokter tentang penyakit anak anda lalu kenaikan berat badan harus diperlambat, Diet seimbang, makan dengan porsi kecil, hindari makanan yang tinggi kalori, melakukan aktivitas fisik, dan kurangi menonton tv",
165
+ },
166
+ }
167
+
168
+ @app.route("/", methods=("GET",))
169
+ def index():
170
+ return render_template("index.html")
171
+
172
+ @app.route("/logout", methods=("GET",))
173
+ def logout():
174
+ session["user_session_data"] = None
175
+ return redirect("/")
176
+
177
+ @app.route("/login", methods=("GET", "POST"))
178
+ def login():
179
+ if session.get("user_session_data") is not None:
180
+ return redirect("/dashboard")
181
+ if request.method == "POST":
182
+ username = request.form["username"]
183
+ password = request.form["password"]
184
+ data_users_admin = db_users_admin.getAll()
185
+ login_success = False
186
+ for user_admin in data_users_admin:
187
+ if (
188
+ username == user_admin["username"]
189
+ and password == user_admin["password"]
190
+ ):
191
+ user_session_data = deepcopy(user_admin)
192
+ user_session_data.pop("password")
193
+ session["user_session_data"] = user_session_data
194
+ login_success = True
195
+ if user_admin["role"] in ("admin", "kepala"):
196
+ return redirect("/dashboard")
197
+ else:
198
+ return redirect("/dashboard-layout-data-anak")
199
+
200
+ if not login_success:
201
+ return render_template(
202
+ "login.html", error="Invalid username or password"
203
+ )
204
+
205
+ return render_template("login.html")
206
+
207
+ @app.route("/balita/<uuid_balita>", methods=("GET",))
208
+ def balita(uuid_balita):
209
+ if session.get("user_session_data") is None:
210
+ return redirect("/login")
211
+
212
+ data_balita = db_users.getBy({"uuid": uuid_balita})[0]
213
+ nama_lengkap = data_balita["nama_lengkap"]
214
+ usia_dalam_bentuk_bulan = data_balita["usia_dalam_bentuk_bulan"]
215
+ tanggal_lahir = data_balita["tanggal_lahir"]
216
+ jenis_kelamin = data_balita["jenis_kelamin"]
217
+ berat_badan_dalam_bentuk_kg = data_balita["berat_badan_dalam_bentuk_kg"]
218
+ tinggi_badan_dalam_bentuk_cm = data_balita["tinggi_badan_dalam_bentuk_cm"]
219
+ imt = data_balita["imt"]
220
+ detail_konklusi = data_balita["detail_konklusi"] if isinstance(data_balita["detail_konklusi"], str) else data_balita["detail_konklusi"][0]
221
+ cause_konklusi = data_balita["cause_konklusi"]
222
+ solusi_konklusi = data_balita["solusi_konklusi"]
223
+ return render_template(
224
+ "card.html",
225
+ nama_lengkap=nama_lengkap,
226
+ usia_dalam_bentuk_bulan=usia_dalam_bentuk_bulan,
227
+ tanggal_lahir=tanggal_lahir,
228
+ jenis_kelamin=jenis_kelamin,
229
+ berat_badan_dalam_bentuk_kg=berat_badan_dalam_bentuk_kg,
230
+ tinggi_badan_dalam_bentuk_cm=tinggi_badan_dalam_bentuk_cm,
231
+ imt=imt,
232
+ detail_konklusi=detail_konklusi,
233
+ cause_konklusi=cause_konklusi,
234
+ solusi_konklusi=solusi_konklusi,
235
+ )
236
+
237
+ @app.route("/delete-balita/<uuid_balita>", methods=("GET",))
238
+ def delete_balita(uuid_balita):
239
+ if session.get("user_session_data") is None:
240
+ return redirect("/login")
241
+
242
+
243
+ if session.get("user_session_data").get("role") == "admin":
244
+ return redirect("/dashboard")
245
+
246
+ return redirect("/dashboard-layout-data-anak")
247
+
248
+ db_users.deleteById(uuid_balita)
249
+ return redirect(
250
+ "/dashboard-layout-data-anak",
251
+ )
252
+
253
+ @app.route("/update-balita/<id_balita>", methods=("GET", "POST"))
254
+ def update_balita(id_balita):
255
+ if session.get("user_session_data") is None:
256
+ return redirect("/")
257
+
258
+
259
+ if request.method == "GET":
260
+ data_balita = db_users.getBy({"id": int(id_balita)})[0]
261
+ nama_lengkap = data_balita["nama_lengkap"]
262
+ usia_dalam_bentuk_bulan = data_balita["usia_dalam_bentuk_bulan"]
263
+ tanggal_lahir = data_balita["tanggal_lahir"]
264
+ jenis_kelamin = data_balita["jenis_kelamin"]
265
+ berat_badan_dalam_bentuk_kg = data_balita["berat_badan_dalam_bentuk_kg"]
266
+ tinggi_badan_dalam_bentuk_cm = data_balita["tinggi_badan_dalam_bentuk_cm"]
267
+ return render_template(
268
+ "dashboard-update-data-anak.html",
269
+ nama_lengkap=nama_lengkap,
270
+ usia_dalam_bentuk_bulan=usia_dalam_bentuk_bulan,
271
+ tanggal_lahir=tanggal_lahir,
272
+ jenis_kelamin=jenis_kelamin,
273
+ berat_badan_dalam_bentuk_kg=berat_badan_dalam_bentuk_kg,
274
+ tinggi_badan_dalam_bentuk_cm=tinggi_badan_dalam_bentuk_cm,
275
+ role=session.get("user_session_data").get("role").title(),
276
+ name=session.get("user_session_data").get("name").title(),
277
+ username=session.get("user_session_data").get("username"),
278
+ )
279
+ elif request.method == "POST":
280
+ data_balita = db_users.getBy({"id": int(id_balita)})[0]
281
+ data_balita_uuid = data_balita["uuid"]
282
+ nama_lengkap = request.form["nama-lengkap"]
283
+ usia_dalam_bentuk_bulan = request.form["usia-dalam-bentuk-bulan"]
284
+ tanggal_lahir = datetime.strptime(
285
+ request.form["tanggal-lahir"], "%Y-%m-%d"
286
+ ).strftime("%Y-%m-%d")
287
+ jenis_kelamin = request.form["jenis-kelamin"]
288
+ berat_badan_dalam_bentuk_kg = request.form[
289
+ "berat-badan-dalam-bentuk-kg"
290
+ ]
291
+ tinggi_badan_dalam_bentuk_cm = request.form[
292
+ "tinggi-badan-dalam-bentuk-cm"
293
+ ]
294
+ imt = (
295
+ float(berat_badan_dalam_bentuk_kg)
296
+ / (float(tinggi_badan_dalam_bentuk_cm) / 100) ** 2
297
+ )
298
+ datetime_now = datetime.now().strftime("%Y-%m-%d")
299
+ db_users.updateById( id_balita,
300
+ {
301
+ "nama_lengkap": nama_lengkap,
302
+ "usia_dalam_bentuk_bulan": usia_dalam_bentuk_bulan,
303
+ "tanggal_lahir": tanggal_lahir,
304
+ "jenis_kelamin": jenis_kelamin,
305
+ "berat_badan_dalam_bentuk_kg": berat_badan_dalam_bentuk_kg,
306
+ "tinggi_badan_dalam_bentuk_cm": tinggi_badan_dalam_bentuk_cm,
307
+ "tanggal_edit": datetime_now,
308
+ }
309
+ )
310
+ return redirect("/balita/" + data_balita_uuid)
311
+
312
+ @app.route("/test-obesitas/<id_balita>", methods=("GET", "POST"))
313
+ def test_obesitas(id_balita):
314
+ if session.get("user_session_data") is None:
315
+ return redirect("/")
316
+
317
+ if session.get("user_session_data").get("role") == "kepala" or \
318
+ session.get("user_session_data").get("role") == "kader":
319
+
320
+ if session.get("user_session_data").get("role") == "kepala":
321
+ return redirect("/dashboard")
322
+ return redirect("/input-data-anak")
323
+
324
+ if request.method == "GET":
325
+ data_balita = db_users.getBy({"uuid": id_balita})
326
+ P01 = True if data_balita[0].get("P01") in [None, "ya", "YA", "Ya", "yA"] else False
327
+ P02 = True if data_balita[0].get("P02") in [None, "ya", "YA", "Ya", "yA"] else False
328
+ P03 = True if data_balita[0].get("P03") in [None, "ya", "YA", "Ya", "yA"] else False
329
+ P04 = True if data_balita[0].get("P04") in [None, "ya", "YA", "Ya", "yA"] else False
330
+ P05 = True if data_balita[0].get("P05") in [None, "ya", "YA", "Ya", "yA"] else False
331
+
332
+ return render_template(
333
+ "dashboard-test-obesitas.html",
334
+ p01=P01,
335
+ p02=P02,
336
+ p03=P03,
337
+ p04=P04,
338
+ p05=P05,
339
+ role=session.get("user_session_data").get("role").title(),
340
+ name=session.get("user_session_data").get("name").title(),
341
+ username=session.get("user_session_data").get("username"),
342
+ )
343
+
344
+ elif request.method == "POST":
345
+ data_balita = db_users.getBy({"uuid": id_balita})
346
+ P01 = True if request.form["P01"] in [None, "ya", "YA", "Ya", "yA"] else False
347
+ P02 = True if request.form["P02"] in [None, "ya", "YA", "Ya", "yA"] else False
348
+ P03 = True if request.form["P03"] in [None, "ya", "YA", "Ya", "yA"] else False
349
+ P04 = True if request.form["P04"] in [None, "ya", "YA", "Ya", "yA"] else False
350
+ P05 = True if request.form["P05"] in [None, "ya", "YA", "Ya", "yA"] else False
351
+ for keys_rule, _ in rule_table.items():
352
+ if (
353
+ rule_table[keys_rule]["rule"]["P01"] == P01
354
+ and rule_table[keys_rule]["rule"]["P02"] == P02
355
+ and rule_table[keys_rule]["rule"]["P03"] == P03
356
+ and rule_table[keys_rule]["rule"]["P04"] == P04
357
+ and rule_table[keys_rule]["rule"]["P05"] == P05
358
+ ):
359
+ nama_lengkap = data_balita[0]["nama_lengkap"]
360
+ usia_dalam_bentuk_bulan = data_balita[0]["usia_dalam_bentuk_bulan"]
361
+ tanggal_lahir = data_balita[0]["tanggal_lahir"]
362
+ jenis_kelamin = data_balita[0]["jenis_kelamin"]
363
+ berat_badan_dalam_bentuk_kg = data_balita[0][
364
+ "berat_badan_dalam_bentuk_kg"
365
+ ]
366
+ tinggi_badan_dalam_bentuk_cm = data_balita[0][
367
+ "tinggi_badan_dalam_bentuk_cm"
368
+ ]
369
+ imt = data_balita[0]["imt"]
370
+ detail_konklusi = (
371
+ result_table[rule_table[keys_rule]["result"]]["detail"],
372
+ )
373
+ cause_konklusi = []
374
+ if P01:
375
+ cause_konklusi.append(result_table["K02"]["cause"][0])
376
+ if P02:
377
+ cause_konklusi.append(result_table["K01"]["cause"][0])
378
+ if P03:
379
+ cause_konklusi.append(result_table["K01"]["cause"][1])
380
+ if P04:
381
+ cause_konklusi.append(result_table["K01"]["cause"][2])
382
+ if P05:
383
+ cause_konklusi.append(result_table["K01"]["cause"][3])
384
+
385
+ solusi_konklusi = ""
386
+ if all([P01]):
387
+ solusi_konklusi += "Periksa ke dokter tentang penyakit anak anda."
388
+ if all([P02, P03, P04]):
389
+ solusi_konklusi += " Kenaikan berat badan diperlambat, Diet seimbang, makan dengan porsi kecil, hindari makanan dengan kalori tinggi, melakukan aktivitas fisik, dan kurangi menonton tv."
390
+ if all([P05]):
391
+ solusi_konklusi += " Konsultasi dengan psikiater atas keluhan meningkatnya keinginan makan sebagai security food."
392
+ uuid_id = data_balita[0]["uuid"]
393
+ datetime_now = datetime.now().strftime("%Y-%m-%d")
394
+ db_users.updateById(data_balita[0]["id"],
395
+ {
396
+ "uuid": uuid_id,
397
+ "nama_lengkap": nama_lengkap,
398
+ "usia_dalam_bentuk_bulan": usia_dalam_bentuk_bulan,
399
+ "tanggal_lahir": tanggal_lahir,
400
+ "jenis_kelamin": jenis_kelamin,
401
+ "berat_badan_dalam_bentuk_kg": berat_badan_dalam_bentuk_kg,
402
+ "tinggi_badan_dalam_bentuk_cm": tinggi_badan_dalam_bentuk_cm,
403
+ "imt": imt,
404
+ "detail_konklusi": detail_konklusi,
405
+ "solusi_konklusi": solusi_konklusi,
406
+ "cause_konklusi": cause_konklusi,
407
+ "tanggal_periksa": data_balita[0]["tanggal_periksa"],
408
+ "tanggal_edit": datetime_now,
409
+ "p01": P01,
410
+ "p02": P02,
411
+ "p03": P03,
412
+ "p04": P04,
413
+ "p05": P05,
414
+ }
415
+ )
416
+ return redirect("/balita/" + uuid_id)
417
+
418
+ @app.route("/dashboard", methods=("GET",))
419
+ def dashboard():
420
+ if session.get("user_session_data") is None:
421
+ return redirect("/login")
422
+
423
+ if session.get("user_session_data").get("role") == "kader" or \
424
+ session.get("user_session_data").get("role") == "bidan":
425
+
426
+ return redirect("/dashboard-layout-data-anak")
427
+
428
+ data_users = db_users.getAll()
429
+ total_data_balita_laki_laki = len(list(filter(lambda x: x["jenis_kelamin"] == "Laki-Laki", data_users)))
430
+ total_data_balita_perempuan = len(list(filter(lambda x: x["jenis_kelamin"] == "Perempuan", data_users)))
431
+ data_tanggal_periksa = {}
432
+ for data in data_users:
433
+ tanggal_periksa = data["tanggal_periksa"][0]
434
+ tanggal_periksa_split = tanggal_periksa.split("-")
435
+ if tanggal_periksa_split[0] not in data_tanggal_periksa:
436
+ data_tanggal_periksa[tanggal_periksa_split[0]] = {}
437
+ if tanggal_periksa_split[1] not in data_tanggal_periksa[tanggal_periksa_split[0]]:
438
+ data_tanggal_periksa[tanggal_periksa_split[0]][tanggal_periksa_split[1]] = 0
439
+ data_tanggal_periksa[tanggal_periksa_split[0]][tanggal_periksa_split[1]] += 1
440
+ return render_template(
441
+ "dashboard-index.html",
442
+ role=session.get("user_session_data").get("role").title(),
443
+ name=session.get("user_session_data").get("name").title(),
444
+ username=session.get("user_session_data").get("username"),
445
+ total_data_balita_laki_laki=total_data_balita_laki_laki,
446
+ total_data_balita_perempuan=total_data_balita_perempuan,
447
+ data_tanggal_periksa=data_tanggal_periksa,
448
+ )
449
+
450
+ @app.route("/dashboard-layout-kategori", methods=("GET",))
451
+ def dashboard_layout_kategori():
452
+ if session.get("user_session_data") is None:
453
+ return redirect("/login")
454
+
455
+ data_users = db_users.getAll()
456
+ cause_konklusi = []
457
+ for data in data_users:
458
+ if data["jenis_kelamin"] == "Laki-Laki":
459
+ cause_konklusi.extend(data['cause_konklusi'] if isinstance(data['cause_konklusi'], list) else [data['cause_konklusi']])
460
+ cause_konklusi = tuple(set(cause_konklusi))
461
+ total_cause_konklusi = []
462
+ for konklusi in cause_konklusi:
463
+ data = len([data for data in data_users if konklusi in data['cause_konklusi'] and data["jenis_kelamin"] == "Laki-Laki"])
464
+ total_cause_konklusi.append(data)
465
+
466
+ cause_konklusi_p = []
467
+ for data in data_users:
468
+ if data["jenis_kelamin"] == "Perempuan":
469
+ cause_konklusi_p.extend(data['cause_konklusi'] if isinstance(data['cause_konklusi'], list) else [data['cause_konklusi']])
470
+ cause_konklusi_p = tuple(set(cause_konklusi_p))
471
+ total_cause_konklusi_p = []
472
+ for konklusi in cause_konklusi_p:
473
+ data = len([data for data in data_users if konklusi in data['cause_konklusi'] and data["jenis_kelamin"] == "Perempuan"])
474
+ total_cause_konklusi_p.append(data)
475
+
476
+ return render_template(
477
+ "dashboard-layout-kategori.html",
478
+ cause_konklusi=cause_konklusi,
479
+ total_cause_konklusi=total_cause_konklusi,
480
+ cause_konklusi_p=cause_konklusi_p,
481
+ total_cause_konklusi_p=total_cause_konklusi_p,
482
+ role=session.get("user_session_data").get("role").title(),
483
+ name=session.get("user_session_data").get("name").title(),
484
+ username=session.get("user_session_data").get("username")
485
+ )
486
+
487
+ @app.route("/dashboard-layout-data-anak", methods=("GET", "POST"))
488
+ def dashboard_layout_data_anak():
489
+ if session.get("user_session_data") is None:
490
+ return redirect("/login")
491
+
492
+ if request.method == "GET":
493
+ data_users = db_users.getAll()
494
+ return render_template(
495
+ "dashboard-layout-data-anak.html",
496
+ username=session.get("user_session_data").get("username"),
497
+ role=session.get("user_session_data").get("role").title(),
498
+ name=session.get("user_session_data").get("name").title(),
499
+ data_users=data_users
500
+ )
501
+ elif request.method == "POST":
502
+ data_users = db_users.getAll()
503
+ data_users = [data for data in data_users if request.form["cari-anak"].lower() in data["nama_lengkap"].lower()]
504
+ return render_template(
505
+ "dashboard-layout-data-anak.html",
506
+ data_users=data_users,
507
+ role=session.get("user_session_data").get("role").title(),
508
+ name=session.get("user_session_data").get("name").title(),
509
+ username=session.get("user_session_data").get("username")
510
+ )
511
+
512
+ @app.route("/dashboard-layout-data-anak-export-csv", methods=("POST",))
513
+ def dashboard_layout_data_anak_export_csv():
514
+ if session.get("user_session_data") is None:
515
+ return redirect("/login")
516
+
517
+ data_users = db_users.getAll()
518
+ with open("export.csv", "w") as f:
519
+ f.write("nama_lengkap,usia,tanggal_lahir,jenis_kelamin,berat_badan (kg),tinggi_badan (cm),imt,detail_konklusi\n")
520
+ for data in data_users:
521
+ detail_konklusi = data["detail_konklusi"]
522
+ if detail_konklusi:
523
+ detail_konklusi = detail_konklusi[0].replace("[", "").replace("]", "")
524
+ f.write(
525
+ f"{data['nama_lengkap']},{data['usia_dalam_bentuk_bulan']},{data['tanggal_lahir']},{data['jenis_kelamin']},{data['berat_badan_dalam_bentuk_kg']},{data['tinggi_badan_dalam_bentuk_cm']},{data['imt']},{detail_konklusi}\n"
526
+ )
527
+ return send_file("./export.csv", as_attachment=True)
528
+
529
+ @app.route("/dashboard-input-data-anak", methods=("GET", "POST"))
530
+ def dashboard_input_data_anak():
531
+ if session.get("user_session_data") is None:
532
+ return redirect("/login")
533
+
534
+ if session.get("user_session_data").get("role") == "kepala":
535
+ return redirect("/dashboard")
536
+
537
+ if request.method == "POST":
538
+ nama_lengkap = request.form["nama-lengkap"]
539
+ usia_dalam_bentuk_bulan = request.form["usia-dalam-bentuk-bulan"]
540
+ tanggal_lahir = datetime.strptime(
541
+ request.form["tanggal-lahir"], "%Y-%m-%d"
542
+ ).strftime("%Y-%m-%d")
543
+ jenis_kelamin = request.form["jenis-kelamin"]
544
+ berat_badan_dalam_bentuk_kg = request.form[
545
+ "berat-badan-dalam-bentuk-kg"
546
+ ]
547
+ tinggi_badan_dalam_bentuk_cm = request.form[
548
+ "tinggi-badan-dalam-bentuk-cm"
549
+ ]
550
+ imt = int((
551
+ float(berat_badan_dalam_bentuk_kg)
552
+ / (float(tinggi_badan_dalam_bentuk_cm) / 100) ** 2
553
+ ))
554
+ uuid_id = uuid.uuid4().hex
555
+ datetime_now = datetime.now().strftime("%Y-%m-%d"),
556
+ db_users.add(
557
+ {
558
+ "uuid": uuid_id,
559
+ "nama_lengkap": nama_lengkap,
560
+ "usia_dalam_bentuk_bulan": usia_dalam_bentuk_bulan,
561
+ "tanggal_lahir": tanggal_lahir,
562
+ "jenis_kelamin": jenis_kelamin,
563
+ "berat_badan_dalam_bentuk_kg": berat_badan_dalam_bentuk_kg,
564
+ "tinggi_badan_dalam_bentuk_cm": tinggi_badan_dalam_bentuk_cm,
565
+ "imt": imt,
566
+ "detail_konklusi": "Belum Periksa",
567
+ "solusi_konklusi": "Belum Periksa",
568
+ "cause_konklusi": "Belum Periksa",
569
+ "tanggal_periksa": datetime_now,
570
+ "tanggal_edit": datetime_now,
571
+ "p01": "Belum Periksa",
572
+ "p02": "Belum Periksa",
573
+ "p03": "Belum Periksa",
574
+ "p04": "Belum Periksa",
575
+ "p05": "Belum Periksa",
576
+ }
577
+ )
578
+ return redirect("/balita/" + uuid_id)
579
+
580
+ return render_template(
581
+ "dashboard-input-data-anak.html",
582
+ role=session.get("user_session_data").get("role").title(),
583
+ name=session.get("user_session_data").get("name").title(),
584
+ username=session.get("user_session_data").get("username"),
585
+ )
586
+
587
+ @app.route("/dashboard-input-data-kepala", methods=("GET", "POST"))
588
+ def dashboard_input_data_kepala():
589
+ if session.get("user_session_data") is None:
590
+ return redirect("/login")
591
+
592
+ if session.get("user_session_data").get("role") == "kader" or \
593
+ session.get("user_session_data").get("role") == "bidan":
594
+
595
+ return redirect("/dashboard-layout-data-anak")
596
+
597
+ if request.method == "POST":
598
+ data_admin = db_users_admin.getAll()
599
+ data_admin = [data for data in data_admin if data["id"] == session.get("user_session_data").get("id")]
600
+ id_data = data_admin[0]["id"]
601
+ nama_lengkap = request.form["nama-lengkap"]
602
+ tanggal_lahir = datetime.strptime(
603
+ request.form["tanggal-lahir"], "%Y-%m-%d"
604
+ ).strftime("%Y-%m-%d")
605
+ jenis_kelamin = request.form["jenis-kelamin"]
606
+ alamat = request.form["alamat"]
607
+ username = request.form["username"]
608
+ password = request.form["password"]
609
+ db_users_admin.updateById(id_data, {
610
+ "name": nama_lengkap,
611
+ "tanggal_lahir": tanggal_lahir,
612
+ "jenis_kelamin": jenis_kelamin,
613
+ "alamat": alamat,
614
+ "username": username,
615
+ "password": password,
616
+ })
617
+ data_admin = db_users_admin.getAll()
618
+ data_admin = [data for data in data_admin if data["id"] == session.get("user_session_data").get("id")]
619
+ return render_template(
620
+ "dashboard-input-data-kepala.html",
621
+ role=session.get("user_session_data").get("role").title(),
622
+ name_tampil=session.get("user_session_data").get("name").title(),
623
+ nama_lengkap=data_admin[0]["name"],
624
+ tanggal_lahir=data_admin[0]["tanggal_lahir"],
625
+ jenis_kelamin=data_admin[0]["jenis_kelamin"],
626
+ alamat=data_admin[0]["alamat"],
627
+ username=data_admin[0]["username"],
628
+ password=data_admin[0]["password"],
629
+ success="Berhasil Update Akun"
630
+ )
631
+
632
+ elif request.method == "GET":
633
+ data_admin = db_users_admin.getAll()
634
+ data_admin = [data for data in data_admin if data["id"] == session.get("user_session_data").get("id")]
635
+
636
+ return render_template(
637
+ "dashboard-input-data-kepala.html",
638
+ role=session.get("user_session_data").get("role").title(),
639
+ name_tampil=session.get("user_session_data").get("name").title(),
640
+ nama_lengkap=data_admin[0]["name"],
641
+ tanggal_lahir=data_admin[0]["tanggal_lahir"],
642
+ jenis_kelamin=data_admin[0]["jenis_kelamin"],
643
+ alamat=data_admin[0]["alamat"],
644
+ username=data_admin[0]["username"],
645
+ password=data_admin[0]["password"],
646
+ )
647
+
648
+ @app.route("/dashboard-input-data-bidan", methods=("GET", "POST"))
649
+ def dashboard_input_data_bidan():
650
+ if session.get("user_session_data") is None:
651
+ return redirect("/login")
652
+
653
+ if session.get("user_session_data").get("role") == "kader" or \
654
+ session.get("user_session_data").get("role") == "kepala":
655
+
656
+ return redirect("/dashboard-layout-data-anak")
657
+
658
+ if request.method == "GET":
659
+ data_admin = db_users_admin.getAll()
660
+ data_admin = [data for data in data_admin if data["id"] == session.get("user_session_data").get("id")]
661
+ return render_template(
662
+ "dashboard-input-data-bidan.html",
663
+ role=session.get("user_session_data").get("role").title(),
664
+ name_tampil=session.get("user_session_data").get("name").title(),
665
+ nama_lengkap=data_admin[0]["name"],
666
+ tanggal_lahir=data_admin[0]["tanggal_lahir"],
667
+ jenis_kelamin=data_admin[0]["jenis_kelamin"],
668
+ alamat=data_admin[0]["alamat"],
669
+ username=data_admin[0]["username"],
670
+ password=data_admin[0]["password"],
671
+ )
672
+
673
+ elif request.method == "POST":
674
+ data_admin = db_users_admin.getAll()
675
+ data_admin = [data for data in data_admin if data["id"] == session.get("user_session_data").get("id")]
676
+ id_data = data_admin[0]["id"]
677
+ nama_lengkap = request.form["nama-lengkap"]
678
+ tanggal_lahir = datetime.strptime(
679
+ request.form["tanggal-lahir"], "%Y-%m-%d"
680
+ ).strftime("%Y-%m-%d")
681
+ jenis_kelamin = request.form["jenis-kelamin"]
682
+ alamat = request.form["alamat"]
683
+ username = request.form["username"]
684
+ password = request.form["password"]
685
+ db_users_admin.updateById(id_data, {
686
+ "name": nama_lengkap,
687
+ "tanggal_lahir": tanggal_lahir,
688
+ "jenis_kelamin": jenis_kelamin,
689
+ "alamat": alamat,
690
+ "username": username,
691
+ "password": password,
692
+ })
693
+ data_admin = db_users_admin.getAll()
694
+ data_admin = [data for data in data_admin if data["id"] == session.get("user_session_data").get("id")]
695
+ return render_template(
696
+ "dashboard-input-data-bidan.html",
697
+ role=session.get("user_session_data").get("role").title(),
698
+ name_tampil=session.get("user_session_data").get("name").title(),
699
+ nama_lengkap=data_admin[0]["name"],
700
+ tanggal_lahir=data_admin[0]["tanggal_lahir"],
701
+ jenis_kelamin=data_admin[0]["jenis_kelamin"],
702
+ alamat=data_admin[0]["alamat"],
703
+ username=data_admin[0]["username"],
704
+ password=data_admin[0]["password"],
705
+ success="Berhasil Update Akun"
706
+ )
707
+
708
+ @app.route("/dashboard-add-data-kepala", methods=("GET", "POST"))
709
+ def dashboard_add_data_kepala():
710
+ if session.get("user_session_data") is None:
711
+ return redirect("/login")
712
+
713
+ if session.get("user_session_data").get("role") == "kader" or \
714
+ session.get("user_session_data").get("role") == "bidan":
715
+
716
+ return redirect("/dashboard-layout-data-anak")
717
+
718
+ if request.method == "POST":
719
+ nama_lengkap = request.form["nama-lengkap"]
720
+ tanggal_lahir = datetime.strptime(
721
+ request.form["tanggal-lahir"], "%Y-%m-%d"
722
+ ).strftime("%Y-%m-%d")
723
+ jenis_kelamin = request.form["jenis-kelamin"]
724
+ alamat = request.form["alamat"]
725
+ username = request.form["username"]
726
+ password = request.form["password"]
727
+ db_users_admin.add({
728
+ "role": "kepala",
729
+ "name": nama_lengkap,
730
+ "tanggal_lahir": tanggal_lahir,
731
+ "jenis_kelamin": jenis_kelamin,
732
+ "alamat": alamat,
733
+ "username": username,
734
+ "password": password,
735
+ })
736
+ return render_template(
737
+ "dashboard-add-data-kepala.html",
738
+ role=session.get("user_session_data").get("role").title(),
739
+ name_tampil=session.get("user_session_data").get("name").title(),
740
+ success="Berhasil menambah akun"
741
+ )
742
+
743
+ elif request.method == "GET":
744
+ return render_template(
745
+ "dashboard-add-data-kepala.html",
746
+ role=session.get("user_session_data").get("role").title(),
747
+ name_tampil=session.get("user_session_data").get("name").title(),
748
+ )
749
+
750
+ @app.route("/dashboard-add-data-bidan", methods=("GET", "POST"))
751
+ def dashboard_add_data_bidan():
752
+ if session.get("user_session_data") is None:
753
+ return redirect("/login")
754
+
755
+ if session.get("user_session_data").get("role") == "kader" or \
756
+ session.get("user_session_data").get("role") == "kepala":
757
+
758
+ return redirect("/dashboard-layout-data-anak")
759
+
760
+ if request.method == "POST":
761
+ nama_lengkap = request.form["nama-lengkap"]
762
+ tanggal_lahir = datetime.strptime(
763
+ request.form["tanggal-lahir"], "%Y-%m-%d"
764
+ ).strftime("%Y-%m-%d")
765
+ jenis_kelamin = request.form["jenis-kelamin"]
766
+ alamat = request.form["alamat"]
767
+ username = request.form["username"]
768
+ password = request.form["password"]
769
+ db_users_admin.add({
770
+ "role": "bidan",
771
+ "name": nama_lengkap,
772
+ "tanggal_lahir": tanggal_lahir,
773
+ "jenis_kelamin": jenis_kelamin,
774
+ "alamat": alamat,
775
+ "username": username,
776
+ "password": password,
777
+ })
778
+ return render_template(
779
+ "dashboard-add-data-bidan.html",
780
+ role=session.get("user_session_data").get("role").title(),
781
+ name_tampil=session.get("user_session_data").get("name").title(),
782
+ success="Berhasil menambah akun"
783
+ )
784
+
785
+ elif request.method == "GET":
786
+ return render_template(
787
+ "dashboard-add-data-bidan.html",
788
+ role=session.get("user_session_data").get("role").title(),
789
+ name_tampil=session.get("user_session_data").get("name").title(),
790
+ )
791
+
792
+ @app.route("/dashboard-input-data-admin", methods=("GET", "POST"))
793
+ def dashboard_input_data_admin():
794
+ if session.get("user_session_data") is None:
795
+ return redirect("/login")
796
+
797
+ if session.get("user_session_data").get("role") == "kader" or \
798
+ session.get("user_session_data").get("role") == "kepala" or \
799
+ session.get("user_session_data").get("role") == "bidan":
800
+
801
+ if session.get("user_session_data").get("role") == "kepala":
802
+ return redirect("/dashboard")
803
+
804
+ return redirect("/dashboard-layout-data-anak")
805
+
806
+ if request.method == "POST":
807
+ data_admin = db_users_admin.getAll()
808
+ data_admin = [data for data in data_admin if data["id"] == session.get("user_session_data").get("id")]
809
+ id_data = data_admin[0]["id"]
810
+ nama_lengkap = request.form["nama-lengkap"]
811
+ tanggal_lahir = datetime.strptime(
812
+ request.form["tanggal-lahir"], "%Y-%m-%d"
813
+ ).strftime("%Y-%m-%d")
814
+ jenis_kelamin = request.form["jenis-kelamin"]
815
+ alamat = request.form["alamat"]
816
+ username = request.form["username"]
817
+ password = request.form["password"]
818
+ db_users_admin.updateById(id_data, {
819
+ "name": nama_lengkap,
820
+ "tanggal_lahir": tanggal_lahir,
821
+ "jenis_kelamin": jenis_kelamin,
822
+ "alamat": alamat,
823
+ "username": username,
824
+ "password": password,
825
+ })
826
+ data_admin = db_users_admin.getAll()
827
+ data_admin = [data for data in data_admin if data["id"] == session.get("user_session_data").get("id")]
828
+ return render_template(
829
+ "dashboard-input-data-admin.html",
830
+ role=session.get("user_session_data").get("role").title(),
831
+ name_tampil=session.get("user_session_data").get("name").title(),
832
+ nama_lengkap=data_admin[0]["name"],
833
+ tanggal_lahir=data_admin[0]["tanggal_lahir"],
834
+ jenis_kelamin=data_admin[0]["jenis_kelamin"],
835
+ alamat=data_admin[0]["alamat"],
836
+ username=data_admin[0]["username"],
837
+ password=data_admin[0]["password"],
838
+ success="Berhasil Update Akun"
839
+ )
840
+
841
+ elif request.method == "GET":
842
+ data_admin = db_users_admin.getAll()
843
+ data_admin = [data for data in data_admin if data["id"] == session.get("user_session_data").get("id")]
844
+
845
+ return render_template(
846
+ "dashboard-input-data-admin.html",
847
+ role=session.get("user_session_data").get("role").title(),
848
+ name_tampil=session.get("user_session_data").get("name").title(),
849
+ nama_lengkap=data_admin[0]["name"],
850
+ tanggal_lahir=data_admin[0]["tanggal_lahir"],
851
+ jenis_kelamin=data_admin[0]["jenis_kelamin"],
852
+ alamat=data_admin[0]["alamat"],
853
+ username=data_admin[0]["username"],
854
+ password=data_admin[0]["password"],
855
+ )
856
+
857
+ @app.route("/dashboard-input-data-kader", methods=("GET", "POST"))
858
+ def dashboard_input_data_kader():
859
+ if session.get("user_session_data") is None:
860
+ return redirect("/login")
861
+
862
+ if session.get("user_session_data").get("role") == "kepala" or \
863
+ session.get("user_session_data").get("role") == "bidan":
864
+
865
+ return redirect("/dashboard-layout-data-anak")
866
+
867
+ if request.method == "POST":
868
+ data_admin = db_users_admin.getAll()
869
+ data_admin = [data for data in data_admin if data["id"] == session.get("user_session_data").get("id")]
870
+ id_data = data_admin[0]["id"]
871
+ nama_lengkap = request.form["nama-lengkap"]
872
+ tanggal_lahir = datetime.strptime(
873
+ request.form["tanggal-lahir"], "%Y-%m-%d"
874
+ ).strftime("%Y-%m-%d")
875
+ jenis_kelamin = request.form["jenis-kelamin"]
876
+ alamat = request.form["alamat"]
877
+ username = request.form["username"]
878
+ password = request.form["password"]
879
+ db_users_admin.updateById(id_data, {
880
+ "name": nama_lengkap,
881
+ "tanggal_lahir": tanggal_lahir,
882
+ "jenis_kelamin": jenis_kelamin,
883
+ "alamat": alamat,
884
+ "username": username,
885
+ "password": password,
886
+ })
887
+ data_admin = db_users_admin.getAll()
888
+ data_admin = [data for data in data_admin if data["id"] == session.get("user_session_data").get("id")]
889
+ return render_template(
890
+ "dashboard-input-data-kader.html",
891
+ role=session.get("user_session_data").get("role").title(),
892
+ name_tampil=session.get("user_session_data").get("name").title(),
893
+ nama_lengkap=data_admin[0]["name"],
894
+ tanggal_lahir=data_admin[0]["tanggal_lahir"],
895
+ jenis_kelamin=data_admin[0]["jenis_kelamin"],
896
+ alamat=data_admin[0]["alamat"],
897
+ username=data_admin[0]["username"],
898
+ password=data_admin[0]["password"],
899
+ success="Berhasil Update Akun"
900
+ )
901
+
902
+ elif request.method == "GET":
903
+ data_admin = db_users_admin.getAll()
904
+ data_admin = [data for data in data_admin if data["id"] == session.get("user_session_data").get("id")]
905
+
906
+ return render_template(
907
+ "dashboard-input-data-kader.html",
908
+ role=session.get("user_session_data").get("role").title(),
909
+ name_tampil=session.get("user_session_data").get("name").title(),
910
+ nama_lengkap=data_admin[0]["name"],
911
+ tanggal_lahir=data_admin[0]["tanggal_lahir"],
912
+ jenis_kelamin=data_admin[0]["jenis_kelamin"],
913
+ alamat=data_admin[0]["alamat"],
914
+ username=data_admin[0]["username"],
915
+ password=data_admin[0]["password"],
916
+ )
917
+
918
+ @app.route("/dashboard-add-data-kader", methods=("GET", "POST"))
919
+ def dashboard_add_data_kader():
920
+ if session.get("user_session_data") is None:
921
+ return redirect("/login")
922
+
923
+ if session.get("user_session_data").get("role") == "kepala" or \
924
+ session.get("user_session_data").get("role") == "bidan":
925
+
926
+ return redirect("/dashboard-layout-data-anak")
927
+
928
+ if request.method == "POST":
929
+ nama_lengkap = request.form["nama-lengkap"]
930
+ tanggal_lahir = datetime.strptime(
931
+ request.form["tanggal-lahir"], "%Y-%m-%d"
932
+ ).strftime("%Y-%m-%d")
933
+ jenis_kelamin = request.form["jenis-kelamin"]
934
+ alamat = request.form["alamat"]
935
+ username = request.form["username"]
936
+ password = request.form["password"]
937
+ db_users_admin.add({
938
+ "role": "kader",
939
+ "name": nama_lengkap,
940
+ "tanggal_lahir": tanggal_lahir,
941
+ "jenis_kelamin": jenis_kelamin,
942
+ "alamat": alamat,
943
+ "username": username,
944
+ "password": password,
945
+ })
946
+ return render_template(
947
+ "dashboard-add-data-kader.html",
948
+ role=session.get("user_session_data").get("role").title(),
949
+ name_tampil=session.get("user_session_data").get("name").title(),
950
+ success="Berhasil menambah akun"
951
+ )
952
+
953
+ elif request.method == "GET":
954
+ return render_template(
955
+ "dashboard-add-data-kader.html",
956
+ role=session.get("user_session_data").get("role").title(),
957
+ name_tampil=session.get("user_session_data").get("name").title(),
958
+ )
959
+
960
+ if __name__ == "__main__":
961
+ app.run(host="0.0.0.0", port=8000, debug=True)
db/users.json ADDED
@@ -0,0 +1,1426 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "data": [
3
+ {
4
+ "uuid": "f619f56f7b984d43b5f21d41d699bd51",
5
+ "nama_lengkap": "Fadli Acmad",
6
+ "usia_dalam_bentuk_bulan": "2",
7
+ "tanggal_lahir": "2021-04-06",
8
+ "jenis_kelamin": "Laki-Laki",
9
+ "berat_badan_dalam_bentuk_kg": "13.7",
10
+ "tinggi_badan_dalam_bentuk_cm": "95",
11
+ "imt": 15,
12
+ "detail_konklusi": [
13
+ "Obesitas Primer"
14
+ ],
15
+ "solusi_konklusi": " Konsultasi dengan psikiater atas keluhan meningkatnya keinginan makan sebagai security food.",
16
+ "cause_konklusi": [
17
+ "faktor pola makan",
18
+ "faktor psikis"
19
+ ],
20
+ "tanggal_periksa": [
21
+ "2023-07-07"
22
+ ],
23
+ "tanggal_edit": "2023-07-17",
24
+ "p01": false,
25
+ "p02": false,
26
+ "p03": false,
27
+ "p04": true,
28
+ "p05": true,
29
+ "id": 115570172840878642
30
+ },
31
+ {
32
+ "uuid": "6f512b7a72814b94af04d7237b3b437c",
33
+ "nama_lengkap": "M Rizky",
34
+ "usia_dalam_bentuk_bulan": "2",
35
+ "tanggal_lahir": "2021-04-10",
36
+ "jenis_kelamin": "Laki-Laki",
37
+ "berat_badan_dalam_bentuk_kg": "13.6",
38
+ "tinggi_badan_dalam_bentuk_cm": "76",
39
+ "imt": 23,
40
+ "detail_konklusi": [
41
+ "Obesitas Sekunder"
42
+ ],
43
+ "solusi_konklusi": "Periksa ke dokter tentang penyakit tentang anda.",
44
+ "cause_konklusi": [
45
+ "faktor kesehatan",
46
+ "faktor genetika / turunan"
47
+ ],
48
+ "tanggal_periksa": [
49
+ "2023-07-07"
50
+ ],
51
+ "tanggal_edit": "2023-07-07",
52
+ "p01": true,
53
+ "p02": true,
54
+ "p03": false,
55
+ "p04": false,
56
+ "p05": false,
57
+ "id": 273422043806511923
58
+ },
59
+ {
60
+ "uuid": "636d2cd539b943dd91ae038958dcfdcf",
61
+ "nama_lengkap": "Ratna",
62
+ "usia_dalam_bentuk_bulan": "1",
63
+ "tanggal_lahir": "2022-01-15",
64
+ "jenis_kelamin": "Perempuan",
65
+ "berat_badan_dalam_bentuk_kg": "15.5",
66
+ "tinggi_badan_dalam_bentuk_cm": "85",
67
+ "imt": 21,
68
+ "detail_konklusi": [
69
+ "Obesitas Sekunder"
70
+ ],
71
+ "solusi_konklusi": "Periksa ke dokter tentang penyakit tentang anda.",
72
+ "cause_konklusi": [
73
+ "faktor kesehatan",
74
+ "faktor genetika / turunan",
75
+ "faktor aktivitas"
76
+ ],
77
+ "tanggal_periksa": [
78
+ "2023-07-07"
79
+ ],
80
+ "tanggal_edit": "2023-07-12",
81
+ "p01": true,
82
+ "p02": true,
83
+ "p03": true,
84
+ "p04": false,
85
+ "p05": false,
86
+ "id": 222168964568416049
87
+ },
88
+ {
89
+ "uuid": "c69cf99e18c6467f9e49c96a3c603efd",
90
+ "nama_lengkap": "Kasmirah",
91
+ "usia_dalam_bentuk_bulan": "2",
92
+ "tanggal_lahir": "2021-01-01",
93
+ "jenis_kelamin": "Perempuan",
94
+ "berat_badan_dalam_bentuk_kg": "11.5",
95
+ "tinggi_badan_dalam_bentuk_cm": "79",
96
+ "imt": 18,
97
+ "detail_konklusi": [
98
+ "Obesitas Primer"
99
+ ],
100
+ "solusi_konklusi": " Konsultasi dengan psikiater atas keluhan meningkatnya keinginan makan sebagai security food.",
101
+ "cause_konklusi": [
102
+ "faktor aktivitas",
103
+ "faktor pola makan",
104
+ "faktor psikis"
105
+ ],
106
+ "tanggal_periksa": [
107
+ "2023-07-07"
108
+ ],
109
+ "tanggal_edit": "2023-07-13",
110
+ "p01": false,
111
+ "p02": false,
112
+ "p03": true,
113
+ "p04": true,
114
+ "p05": true,
115
+ "id": 332561390317278858
116
+ },
117
+ {
118
+ "uuid": "6c7b95926bf04fe3b2fb9e2efe4c07c3",
119
+ "nama_lengkap": "M Zakky",
120
+ "usia_dalam_bentuk_bulan": "3",
121
+ "tanggal_lahir": "2020-02-03",
122
+ "jenis_kelamin": "Laki-Laki",
123
+ "berat_badan_dalam_bentuk_kg": "20",
124
+ "tinggi_badan_dalam_bentuk_cm": "99",
125
+ "imt": 20,
126
+ "detail_konklusi": [
127
+ "Obesitas Sekunder"
128
+ ],
129
+ "solusi_konklusi": "Periksa ke dokter tentang penyakit tentang anda. Kenaikan berat badan diperlambat, Diet seimbang, makan dengan porsi kecil, hindari makanan dengan kalori tinggi, melakukan aktivitas fisik, dan kurangi menonton tv. Konsultasi dengan psikiater atas keluhan meningkatnya keinginan makan sebagai security food.",
130
+ "cause_konklusi": [
131
+ "faktor kesehatan",
132
+ "faktor genetika / turunan",
133
+ "faktor aktivitas",
134
+ "faktor pola makan",
135
+ "faktor psikis"
136
+ ],
137
+ "tanggal_periksa": [
138
+ "2023-07-07"
139
+ ],
140
+ "tanggal_edit": "2023-07-13",
141
+ "p01": true,
142
+ "p02": true,
143
+ "p03": true,
144
+ "p04": true,
145
+ "p05": true,
146
+ "id": 142406806229116928
147
+ },
148
+ {
149
+ "uuid": "d95397050ebe4b4788488ad6fbb0c2b9",
150
+ "nama_lengkap": "Qiana",
151
+ "usia_dalam_bentuk_bulan": "3",
152
+ "tanggal_lahir": "2020-03-28",
153
+ "jenis_kelamin": "Perempuan",
154
+ "berat_badan_dalam_bentuk_kg": "15",
155
+ "tinggi_badan_dalam_bentuk_cm": "78",
156
+ "imt": 24,
157
+ "detail_konklusi": [
158
+ "Obesitas Sekunder"
159
+ ],
160
+ "solusi_konklusi": "Periksa ke dokter tentang penyakit tentang anda.",
161
+ "cause_konklusi": [
162
+ "faktor kesehatan",
163
+ "faktor genetika / turunan"
164
+ ],
165
+ "tanggal_periksa": [
166
+ "2023-07-07"
167
+ ],
168
+ "tanggal_edit": "2023-07-13",
169
+ "p01": true,
170
+ "p02": true,
171
+ "p03": false,
172
+ "p04": false,
173
+ "p05": false,
174
+ "id": 191277911768836685
175
+ },
176
+ {
177
+ "uuid": "c125a3d1c278488693afb3699d5a051c",
178
+ "nama_lengkap": "Axle",
179
+ "usia_dalam_bentuk_bulan": "3",
180
+ "tanggal_lahir": "2020-04-10",
181
+ "jenis_kelamin": "Laki-Laki",
182
+ "berat_badan_dalam_bentuk_kg": "10.5",
183
+ "tinggi_badan_dalam_bentuk_cm": "82",
184
+ "imt": 15,
185
+ "detail_konklusi": [
186
+ "Obesitas Sekunder"
187
+ ],
188
+ "solusi_konklusi": "Periksa ke dokter tentang penyakit tentang anda.",
189
+ "cause_konklusi": [
190
+ "faktor kesehatan",
191
+ "faktor genetika / turunan",
192
+ "faktor aktivitas"
193
+ ],
194
+ "tanggal_periksa": [
195
+ "2023-07-08"
196
+ ],
197
+ "tanggal_edit": "2023-07-13",
198
+ "p01": true,
199
+ "p02": true,
200
+ "p03": true,
201
+ "p04": false,
202
+ "p05": false,
203
+ "id": 195167419166317830
204
+ },
205
+ {
206
+ "uuid": "fde78361570045d39e4db86bc9a08bd4",
207
+ "nama_lengkap": "Intan",
208
+ "usia_dalam_bentuk_bulan": "3",
209
+ "tanggal_lahir": "2020-04-11",
210
+ "jenis_kelamin": "Perempuan",
211
+ "berat_badan_dalam_bentuk_kg": "12.2",
212
+ "tinggi_badan_dalam_bentuk_cm": "90",
213
+ "imt": 15,
214
+ "detail_konklusi": [
215
+ "Obesitas Sekunder"
216
+ ],
217
+ "solusi_konklusi": "Periksa ke dokter tentang penyakit tentang anda.",
218
+ "cause_konklusi": [
219
+ "faktor kesehatan",
220
+ "faktor genetika / turunan"
221
+ ],
222
+ "tanggal_periksa": [
223
+ "2023-07-08"
224
+ ],
225
+ "tanggal_edit": "2023-07-13",
226
+ "p01": true,
227
+ "p02": true,
228
+ "p03": false,
229
+ "p04": false,
230
+ "p05": false,
231
+ "id": 315603360844968512
232
+ },
233
+ {
234
+ "uuid": "ede78433a3a643cc8ab62c535b343ebc",
235
+ "nama_lengkap": "Sultan",
236
+ "usia_dalam_bentuk_bulan": "4",
237
+ "tanggal_lahir": "2018-10-20",
238
+ "jenis_kelamin": "Laki-Laki",
239
+ "berat_badan_dalam_bentuk_kg": "19",
240
+ "tinggi_badan_dalam_bentuk_cm": "102",
241
+ "imt": 18,
242
+ "detail_konklusi": [
243
+ "Obesitas Sekunder"
244
+ ],
245
+ "solusi_konklusi": "Periksa ke dokter tentang penyakit tentang anda. Kenaikan berat badan diperlambat, Diet seimbang, makan dengan porsi kecil, hindari makanan dengan kalori tinggi, melakukan aktivitas fisik, dan kurangi menonton tv.",
246
+ "cause_konklusi": [
247
+ "faktor kesehatan",
248
+ "faktor genetika / turunan",
249
+ "faktor aktivitas",
250
+ "faktor pola makan"
251
+ ],
252
+ "tanggal_periksa": [
253
+ "2023-07-08"
254
+ ],
255
+ "tanggal_edit": "2023-07-13",
256
+ "p01": true,
257
+ "p02": true,
258
+ "p03": true,
259
+ "p04": true,
260
+ "p05": false,
261
+ "id": 213527791669185695
262
+ },
263
+ {
264
+ "uuid": "fac3479fd552422bbc9382d250c65c97",
265
+ "nama_lengkap": "Anisa",
266
+ "usia_dalam_bentuk_bulan": "4",
267
+ "tanggal_lahir": "2019-01-11",
268
+ "jenis_kelamin": "Perempuan",
269
+ "berat_badan_dalam_bentuk_kg": "23",
270
+ "tinggi_badan_dalam_bentuk_cm": "97",
271
+ "imt": 24,
272
+ "detail_konklusi": [
273
+ "Obesitas Primer"
274
+ ],
275
+ "solusi_konklusi": " Konsultasi dengan psikiater atas keluhan meningkatnya keinginan makan sebagai security food.",
276
+ "cause_konklusi": [
277
+ "faktor pola makan",
278
+ "faktor psikis"
279
+ ],
280
+ "tanggal_periksa": [
281
+ "2023-07-08"
282
+ ],
283
+ "tanggal_edit": "2023-07-13",
284
+ "p01": false,
285
+ "p02": false,
286
+ "p03": false,
287
+ "p04": true,
288
+ "p05": true,
289
+ "id": 282078663475493733
290
+ },
291
+ {
292
+ "uuid": "540cabde93154305b8fee254c989d003",
293
+ "nama_lengkap": "Ubay",
294
+ "usia_dalam_bentuk_bulan": "4",
295
+ "tanggal_lahir": "2019-04-05",
296
+ "jenis_kelamin": "Laki-Laki",
297
+ "berat_badan_dalam_bentuk_kg": "13",
298
+ "tinggi_badan_dalam_bentuk_cm": "90",
299
+ "imt": 16,
300
+ "detail_konklusi": [
301
+ "Obesitas Primer"
302
+ ],
303
+ "solusi_konklusi": " Konsultasi dengan psikiater atas keluhan meningkatnya keinginan makan sebagai security food.",
304
+ "cause_konklusi": [
305
+ "faktor pola makan",
306
+ "faktor psikis"
307
+ ],
308
+ "tanggal_periksa": [
309
+ "2023-07-08"
310
+ ],
311
+ "tanggal_edit": "2023-07-13",
312
+ "p01": false,
313
+ "p02": false,
314
+ "p03": false,
315
+ "p04": true,
316
+ "p05": true,
317
+ "id": 141872382811756361
318
+ },
319
+ {
320
+ "uuid": "0f186650f46c401e96ca8b625745bc1f",
321
+ "nama_lengkap": "Noah",
322
+ "usia_dalam_bentuk_bulan": "1",
323
+ "tanggal_lahir": "2022-01-01",
324
+ "jenis_kelamin": "Laki-Laki",
325
+ "berat_badan_dalam_bentuk_kg": "9.2",
326
+ "tinggi_badan_dalam_bentuk_cm": "72",
327
+ "imt": 17,
328
+ "detail_konklusi": [
329
+ "Obesitas Primer"
330
+ ],
331
+ "solusi_konklusi": " Konsultasi dengan psikiater atas keluhan meningkatnya keinginan makan sebagai security food.",
332
+ "cause_konklusi": [
333
+ "faktor psikis"
334
+ ],
335
+ "tanggal_periksa": [
336
+ "2023-07-08"
337
+ ],
338
+ "tanggal_edit": "2023-07-13",
339
+ "p01": false,
340
+ "p02": false,
341
+ "p03": false,
342
+ "p04": false,
343
+ "p05": true,
344
+ "id": 322927609902274096
345
+ },
346
+ {
347
+ "uuid": "c6cda0387b9d4fc59cbc0ca33cddfba9",
348
+ "nama_lengkap": "Nora",
349
+ "usia_dalam_bentuk_bulan": "2",
350
+ "tanggal_lahir": "2021-03-17",
351
+ "jenis_kelamin": "Perempuan",
352
+ "berat_badan_dalam_bentuk_kg": "14.3",
353
+ "tinggi_badan_dalam_bentuk_cm": "91",
354
+ "imt": 17,
355
+ "detail_konklusi": [
356
+ "Obesitas Primer"
357
+ ],
358
+ "solusi_konklusi": " Konsultasi dengan psikiater atas keluhan meningkatnya keinginan makan sebagai security food.",
359
+ "cause_konklusi": [
360
+ "faktor psikis"
361
+ ],
362
+ "tanggal_periksa": [
363
+ "2023-07-08"
364
+ ],
365
+ "tanggal_edit": "2023-07-13",
366
+ "p01": false,
367
+ "p02": false,
368
+ "p03": false,
369
+ "p04": false,
370
+ "p05": true,
371
+ "id": 307148089408474753
372
+ },
373
+ {
374
+ "uuid": "ac87576b1a4c44a6bf51a46d742b0dee",
375
+ "nama_lengkap": "Rafa",
376
+ "usia_dalam_bentuk_bulan": "2",
377
+ "tanggal_lahir": "2020-12-10",
378
+ "jenis_kelamin": "Laki-Laki",
379
+ "berat_badan_dalam_bentuk_kg": "10.2",
380
+ "tinggi_badan_dalam_bentuk_cm": "79",
381
+ "imt": 16,
382
+ "detail_konklusi": [
383
+ "Obesitas Sekunder"
384
+ ],
385
+ "solusi_konklusi": "Periksa ke dokter tentang penyakit tentang anda.",
386
+ "cause_konklusi": [
387
+ "faktor kesehatan",
388
+ "faktor genetika / turunan"
389
+ ],
390
+ "tanggal_periksa": [
391
+ "2023-07-08"
392
+ ],
393
+ "tanggal_edit": "2023-07-13",
394
+ "p01": true,
395
+ "p02": true,
396
+ "p03": false,
397
+ "p04": false,
398
+ "p05": false,
399
+ "id": 322787729607616498
400
+ },
401
+ {
402
+ "uuid": "f6328f530c2749fcb2dd787f2463bdee",
403
+ "nama_lengkap": "Dafa",
404
+ "usia_dalam_bentuk_bulan": "2",
405
+ "tanggal_lahir": "2021-01-10",
406
+ "jenis_kelamin": "Laki-Laki",
407
+ "berat_badan_dalam_bentuk_kg": "12.1",
408
+ "tinggi_badan_dalam_bentuk_cm": "90",
409
+ "imt": 14,
410
+ "detail_konklusi": [
411
+ "Obesitas Sekunder"
412
+ ],
413
+ "solusi_konklusi": "Periksa ke dokter tentang penyakit tentang anda.",
414
+ "cause_konklusi": [
415
+ "faktor kesehatan",
416
+ "faktor genetika / turunan",
417
+ "faktor aktivitas"
418
+ ],
419
+ "tanggal_periksa": [
420
+ "2023-07-08"
421
+ ],
422
+ "tanggal_edit": "2023-07-13",
423
+ "p01": true,
424
+ "p02": true,
425
+ "p03": true,
426
+ "p04": false,
427
+ "p05": false,
428
+ "id": 140829774532662577
429
+ },
430
+ {
431
+ "uuid": "3b13671ae17547f18f60ae0471beb079",
432
+ "nama_lengkap": "Hasna",
433
+ "usia_dalam_bentuk_bulan": "1",
434
+ "tanggal_lahir": "2022-04-01",
435
+ "jenis_kelamin": "Perempuan",
436
+ "berat_badan_dalam_bentuk_kg": "10.5",
437
+ "tinggi_badan_dalam_bentuk_cm": "81",
438
+ "imt": 16,
439
+ "detail_konklusi": [
440
+ "Obesitas Primer"
441
+ ],
442
+ "solusi_konklusi": " Konsultasi dengan psikiater atas keluhan meningkatnya keinginan makan sebagai security food.",
443
+ "cause_konklusi": [
444
+ "faktor pola makan",
445
+ "faktor psikis"
446
+ ],
447
+ "tanggal_periksa": [
448
+ "2023-07-08"
449
+ ],
450
+ "tanggal_edit": "2023-07-13",
451
+ "p01": false,
452
+ "p02": false,
453
+ "p03": false,
454
+ "p04": true,
455
+ "p05": true,
456
+ "id": 171586817715662319
457
+ },
458
+ {
459
+ "uuid": "1e90c76cac0d48c5ad45dd35178e5e1a",
460
+ "nama_lengkap": "Aisyah",
461
+ "usia_dalam_bentuk_bulan": "2",
462
+ "tanggal_lahir": "2021-06-06",
463
+ "jenis_kelamin": "Perempuan",
464
+ "berat_badan_dalam_bentuk_kg": "12.5",
465
+ "tinggi_badan_dalam_bentuk_cm": "89",
466
+ "imt": 15,
467
+ "detail_konklusi": [
468
+ "Obesitas Sekunder"
469
+ ],
470
+ "solusi_konklusi": "Periksa ke dokter tentang penyakit tentang anda. Kenaikan berat badan diperlambat, Diet seimbang, makan dengan porsi kecil, hindari makanan dengan kalori tinggi, melakukan aktivitas fisik, dan kurangi menonton tv. Konsultasi dengan psikiater atas keluhan meningkatnya keinginan makan sebagai security food.",
471
+ "cause_konklusi": [
472
+ "faktor kesehatan",
473
+ "faktor genetika / turunan",
474
+ "faktor aktivitas",
475
+ "faktor pola makan",
476
+ "faktor psikis"
477
+ ],
478
+ "tanggal_periksa": [
479
+ "2023-07-08"
480
+ ],
481
+ "tanggal_edit": "2023-07-13",
482
+ "p01": true,
483
+ "p02": true,
484
+ "p03": true,
485
+ "p04": true,
486
+ "p05": true,
487
+ "id": 117548790693308124
488
+ },
489
+ {
490
+ "uuid": "df3420c6cf714e29b4822933b2334230",
491
+ "nama_lengkap": "Zakaria",
492
+ "usia_dalam_bentuk_bulan": "3",
493
+ "tanggal_lahir": "2020-05-15",
494
+ "jenis_kelamin": "Laki-Laki",
495
+ "berat_badan_dalam_bentuk_kg": "11.5",
496
+ "tinggi_badan_dalam_bentuk_cm": "91",
497
+ "imt": 13,
498
+ "detail_konklusi": [
499
+ "Obesitas Sekunder"
500
+ ],
501
+ "solusi_konklusi": "Periksa ke dokter tentang penyakit tentang anda.",
502
+ "cause_konklusi": [
503
+ "faktor kesehatan",
504
+ "faktor aktivitas",
505
+ "faktor pola makan"
506
+ ],
507
+ "tanggal_periksa": [
508
+ "2023-07-08"
509
+ ],
510
+ "tanggal_edit": "2023-07-13",
511
+ "p01": true,
512
+ "p02": false,
513
+ "p03": true,
514
+ "p04": true,
515
+ "p05": false,
516
+ "id": 270890684808359877
517
+ },
518
+ {
519
+ "uuid": "397a6efb65d74f9ca38b62fd11dc210e",
520
+ "nama_lengkap": "Indana",
521
+ "usia_dalam_bentuk_bulan": "2",
522
+ "tanggal_lahir": "2021-06-20",
523
+ "jenis_kelamin": "Perempuan",
524
+ "berat_badan_dalam_bentuk_kg": "17",
525
+ "tinggi_badan_dalam_bentuk_cm": "105",
526
+ "imt": 15,
527
+ "detail_konklusi": [
528
+ "Obesitas Sekunder"
529
+ ],
530
+ "solusi_konklusi": "Periksa ke dokter tentang penyakit tentang anda. Konsultasi dengan psikiater atas keluhan meningkatnya keinginan makan sebagai security food.",
531
+ "cause_konklusi": [
532
+ "faktor kesehatan",
533
+ "faktor pola makan",
534
+ "faktor psikis"
535
+ ],
536
+ "tanggal_periksa": [
537
+ "2023-07-08"
538
+ ],
539
+ "tanggal_edit": "2023-07-13",
540
+ "p01": true,
541
+ "p02": false,
542
+ "p03": false,
543
+ "p04": true,
544
+ "p05": true,
545
+ "id": 118392613865800923
546
+ },
547
+ {
548
+ "uuid": "0512a296c48348f79183f1f4da5e45b9",
549
+ "nama_lengkap": "Andi",
550
+ "usia_dalam_bentuk_bulan": "2",
551
+ "tanggal_lahir": "2020-10-22",
552
+ "jenis_kelamin": "Laki-Laki",
553
+ "berat_badan_dalam_bentuk_kg": "19",
554
+ "tinggi_badan_dalam_bentuk_cm": "98",
555
+ "imt": 19,
556
+ "detail_konklusi": [
557
+ "Obesitas Primer"
558
+ ],
559
+ "solusi_konklusi": " Konsultasi dengan psikiater atas keluhan meningkatnya keinginan makan sebagai security food.",
560
+ "cause_konklusi": [
561
+ "faktor aktivitas",
562
+ "faktor psikis"
563
+ ],
564
+ "tanggal_periksa": [
565
+ "2023-07-08"
566
+ ],
567
+ "tanggal_edit": "2023-07-13",
568
+ "p01": false,
569
+ "p02": false,
570
+ "p03": true,
571
+ "p04": false,
572
+ "p05": true,
573
+ "id": 348030082327234785
574
+ },
575
+ {
576
+ "uuid": "50cf00706f804e679f094e3413e1c843",
577
+ "nama_lengkap": "Halifatul H",
578
+ "usia_dalam_bentuk_bulan": "4",
579
+ "tanggal_lahir": "2019-03-10",
580
+ "jenis_kelamin": "Perempuan",
581
+ "berat_badan_dalam_bentuk_kg": "23.1",
582
+ "tinggi_badan_dalam_bentuk_cm": "100",
583
+ "imt": 23,
584
+ "detail_konklusi": [
585
+ "Obesitas Sekunder"
586
+ ],
587
+ "solusi_konklusi": "Periksa ke dokter tentang penyakit tentang anda.",
588
+ "cause_konklusi": [
589
+ "faktor kesehatan",
590
+ "faktor genetika / turunan",
591
+ "faktor pola makan"
592
+ ],
593
+ "tanggal_periksa": [
594
+ "2023-07-08"
595
+ ],
596
+ "tanggal_edit": "2023-07-13",
597
+ "p01": true,
598
+ "p02": true,
599
+ "p03": false,
600
+ "p04": true,
601
+ "p05": false,
602
+ "id": 931520341748853979
603
+ },
604
+ {
605
+ "uuid": "fc022bf8e5a343a7a4452eab12f9c1c5",
606
+ "nama_lengkap": "Arya Januraja",
607
+ "usia_dalam_bentuk_bulan": "3",
608
+ "tanggal_lahir": "2019-01-25",
609
+ "jenis_kelamin": "Laki-Laki",
610
+ "berat_badan_dalam_bentuk_kg": "27.9",
611
+ "tinggi_badan_dalam_bentuk_cm": "106.7",
612
+ "imt": 24,
613
+ "detail_konklusi": [
614
+ "Obesitas Sekunder"
615
+ ],
616
+ "solusi_konklusi": "Periksa ke dokter tentang penyakit tentang anda.",
617
+ "cause_konklusi": [
618
+ "faktor kesehatan",
619
+ "faktor pola makan"
620
+ ],
621
+ "tanggal_periksa": [
622
+ "2023-07-08"
623
+ ],
624
+ "tanggal_edit": "2023-07-13",
625
+ "p01": true,
626
+ "p02": false,
627
+ "p03": false,
628
+ "p04": true,
629
+ "p05": false,
630
+ "id": 278856179116763542
631
+ },
632
+ {
633
+ "uuid": "6f320ca984fc4ed2a58a237825f53003",
634
+ "nama_lengkap": "M Safian Altesai",
635
+ "usia_dalam_bentuk_bulan": "3",
636
+ "tanggal_lahir": "2019-08-21",
637
+ "jenis_kelamin": "Laki-Laki",
638
+ "berat_badan_dalam_bentuk_kg": "21.9",
639
+ "tinggi_badan_dalam_bentuk_cm": "96",
640
+ "imt": 23,
641
+ "detail_konklusi": [
642
+ "Obesitas Primer"
643
+ ],
644
+ "solusi_konklusi": " Konsultasi dengan psikiater atas keluhan meningkatnya keinginan makan sebagai security food.",
645
+ "cause_konklusi": [
646
+ "faktor aktivitas",
647
+ "faktor psikis"
648
+ ],
649
+ "tanggal_periksa": [
650
+ "2023-07-08"
651
+ ],
652
+ "tanggal_edit": "2023-07-13",
653
+ "p01": false,
654
+ "p02": false,
655
+ "p03": true,
656
+ "p04": false,
657
+ "p05": true,
658
+ "id": 263281281469188343
659
+ },
660
+ {
661
+ "uuid": "6d38a24b18aa4ac6999ea99aebd1609f",
662
+ "nama_lengkap": "M rafa Azka",
663
+ "usia_dalam_bentuk_bulan": "1",
664
+ "tanggal_lahir": "2021-11-19",
665
+ "jenis_kelamin": "Laki-Laki",
666
+ "berat_badan_dalam_bentuk_kg": "15",
667
+ "tinggi_badan_dalam_bentuk_cm": "79.5",
668
+ "imt": 23,
669
+ "detail_konklusi": [
670
+ "Obesitas Primer"
671
+ ],
672
+ "solusi_konklusi": "",
673
+ "cause_konklusi": [
674
+ "faktor aktivitas"
675
+ ],
676
+ "tanggal_periksa": [
677
+ "2023-07-08"
678
+ ],
679
+ "tanggal_edit": "2023-07-13",
680
+ "p01": false,
681
+ "p02": false,
682
+ "p03": true,
683
+ "p04": false,
684
+ "p05": false,
685
+ "id": 281643969177867282
686
+ },
687
+ {
688
+ "uuid": "6e726c96281a417cabc0117fa23a866d",
689
+ "nama_lengkap": "Fauzan Dwi Satria",
690
+ "usia_dalam_bentuk_bulan": "4",
691
+ "tanggal_lahir": "2019-05-13",
692
+ "jenis_kelamin": "Laki-Laki",
693
+ "berat_badan_dalam_bentuk_kg": "29.8",
694
+ "tinggi_badan_dalam_bentuk_cm": "109",
695
+ "imt": 25,
696
+ "detail_konklusi": [
697
+ "Obesitas Primer"
698
+ ],
699
+ "solusi_konklusi": "",
700
+ "cause_konklusi": [
701
+ "faktor genetika / turunan"
702
+ ],
703
+ "tanggal_periksa": [
704
+ "2023-07-08"
705
+ ],
706
+ "tanggal_edit": "2023-07-13",
707
+ "p01": false,
708
+ "p02": true,
709
+ "p03": false,
710
+ "p04": false,
711
+ "p05": false,
712
+ "id": 260711059257955460
713
+ },
714
+ {
715
+ "uuid": "39fd0d639cf34f968638246a4b77f845",
716
+ "nama_lengkap": "Aradeya gea",
717
+ "usia_dalam_bentuk_bulan": "2",
718
+ "tanggal_lahir": "2020-08-27",
719
+ "jenis_kelamin": "Perempuan",
720
+ "berat_badan_dalam_bentuk_kg": "20.4",
721
+ "tinggi_badan_dalam_bentuk_cm": "90",
722
+ "imt": 25,
723
+ "detail_konklusi": [
724
+ "Obesitas Primer"
725
+ ],
726
+ "solusi_konklusi": "Periksa ke dokter tentang penyakit tentang anda.",
727
+ "cause_konklusi": [
728
+ "faktor kesehatan"
729
+ ],
730
+ "tanggal_periksa": [
731
+ "2023-07-08"
732
+ ],
733
+ "tanggal_edit": "2023-07-13",
734
+ "p01": true,
735
+ "p02": false,
736
+ "p03": false,
737
+ "p04": false,
738
+ "p05": false,
739
+ "id": 221604137004713860
740
+ },
741
+ {
742
+ "uuid": "f0f92016fe684b7e9b3dd9b9738d09b0",
743
+ "nama_lengkap": "Aisyah Khumairah",
744
+ "usia_dalam_bentuk_bulan": "1",
745
+ "tanggal_lahir": "2022-05-11",
746
+ "jenis_kelamin": "Perempuan",
747
+ "berat_badan_dalam_bentuk_kg": "12",
748
+ "tinggi_badan_dalam_bentuk_cm": "73",
749
+ "imt": 22,
750
+ "detail_konklusi": [
751
+ "Obesitas Sekunder"
752
+ ],
753
+ "solusi_konklusi": "Periksa ke dokter tentang penyakit tentang anda. Konsultasi dengan psikiater atas keluhan meningkatnya keinginan makan sebagai security food.",
754
+ "cause_konklusi": [
755
+ "faktor kesehatan",
756
+ "faktor aktivitas",
757
+ "faktor psikis"
758
+ ],
759
+ "tanggal_periksa": [
760
+ "2023-07-08"
761
+ ],
762
+ "tanggal_edit": "2023-07-13",
763
+ "p01": true,
764
+ "p02": false,
765
+ "p03": true,
766
+ "p04": false,
767
+ "p05": true,
768
+ "id": 276857820750805106
769
+ },
770
+ {
771
+ "uuid": "b59707a5c5da4d9e95c073ff16115098",
772
+ "nama_lengkap": "Biksan F",
773
+ "usia_dalam_bentuk_bulan": "1",
774
+ "tanggal_lahir": "2021-11-10",
775
+ "jenis_kelamin": "Laki-Laki",
776
+ "berat_badan_dalam_bentuk_kg": "13.8",
777
+ "tinggi_badan_dalam_bentuk_cm": "80",
778
+ "imt": 21,
779
+ "detail_konklusi": [
780
+ "Obesitas Sekunder"
781
+ ],
782
+ "solusi_konklusi": "Periksa ke dokter tentang penyakit tentang anda. Konsultasi dengan psikiater atas keluhan meningkatnya keinginan makan sebagai security food.",
783
+ "cause_konklusi": [
784
+ "faktor kesehatan",
785
+ "faktor pola makan",
786
+ "faktor psikis"
787
+ ],
788
+ "tanggal_periksa": [
789
+ "2023-07-08"
790
+ ],
791
+ "tanggal_edit": "2023-07-13",
792
+ "p01": true,
793
+ "p02": false,
794
+ "p03": false,
795
+ "p04": true,
796
+ "p05": true,
797
+ "id": 320976777984609325
798
+ },
799
+ {
800
+ "uuid": "81cde5c1ab824b5c99079f83a1a5ba07",
801
+ "nama_lengkap": "M Zaim Sholehhuddin ",
802
+ "usia_dalam_bentuk_bulan": "2",
803
+ "tanggal_lahir": "2020-12-01",
804
+ "jenis_kelamin": "Laki-Laki",
805
+ "berat_badan_dalam_bentuk_kg": "16.5",
806
+ "tinggi_badan_dalam_bentuk_cm": "86",
807
+ "imt": 22,
808
+ "detail_konklusi": [
809
+ "Obesitas Sekunder"
810
+ ],
811
+ "solusi_konklusi": "Periksa ke dokter tentang penyakit tentang anda.",
812
+ "cause_konklusi": [
813
+ "faktor kesehatan",
814
+ "faktor aktivitas"
815
+ ],
816
+ "tanggal_periksa": [
817
+ "2023-07-08"
818
+ ],
819
+ "tanggal_edit": "2023-07-13",
820
+ "p01": true,
821
+ "p02": false,
822
+ "p03": true,
823
+ "p04": false,
824
+ "p05": false,
825
+ "id": 116568323117299787
826
+ },
827
+ {
828
+ "uuid": "8438ae9fa4a14408bc00f2bb877dd669",
829
+ "nama_lengkap": "A Fakharudin Attar",
830
+ "usia_dalam_bentuk_bulan": "4",
831
+ "tanggal_lahir": "2019-03-23",
832
+ "jenis_kelamin": "Laki-Laki",
833
+ "berat_badan_dalam_bentuk_kg": "19.8",
834
+ "tinggi_badan_dalam_bentuk_cm": "98.8",
835
+ "imt": 20,
836
+ "detail_konklusi": [
837
+ "Obesitas Sekunder"
838
+ ],
839
+ "solusi_konklusi": "Periksa ke dokter tentang penyakit tentang anda.",
840
+ "cause_konklusi": [
841
+ "faktor kesehatan",
842
+ "faktor genetika / turunan",
843
+ "faktor pola makan"
844
+ ],
845
+ "tanggal_periksa": [
846
+ "2023-07-08"
847
+ ],
848
+ "tanggal_edit": "2023-07-13",
849
+ "p01": true,
850
+ "p02": true,
851
+ "p03": false,
852
+ "p04": true,
853
+ "p05": false,
854
+ "id": 183784888087633449
855
+ },
856
+ {
857
+ "uuid": "31f5f259517e4a899980bebbcb123482",
858
+ "nama_lengkap": "M Aqmal",
859
+ "usia_dalam_bentuk_bulan": "3",
860
+ "tanggal_lahir": "2020-01-03",
861
+ "jenis_kelamin": "Laki-Laki",
862
+ "berat_badan_dalam_bentuk_kg": "18.2",
863
+ "tinggi_badan_dalam_bentuk_cm": "95",
864
+ "imt": 20,
865
+ "detail_konklusi": [
866
+ "Obesitas Primer"
867
+ ],
868
+ "solusi_konklusi": " Konsultasi dengan psikiater atas keluhan meningkatnya keinginan makan sebagai security food.",
869
+ "cause_konklusi": [
870
+ "faktor genetika / turunan",
871
+ "faktor psikis"
872
+ ],
873
+ "tanggal_periksa": [
874
+ "2023-07-08"
875
+ ],
876
+ "tanggal_edit": "2023-07-13",
877
+ "p01": false,
878
+ "p02": true,
879
+ "p03": false,
880
+ "p04": false,
881
+ "p05": true,
882
+ "id": 312327504242999001
883
+ },
884
+ {
885
+ "uuid": "28c7e8d75fc94877a743cebd9fce337f",
886
+ "nama_lengkap": "Nahda Irfana",
887
+ "usia_dalam_bentuk_bulan": "4",
888
+ "tanggal_lahir": "2019-03-08",
889
+ "jenis_kelamin": "Perempuan",
890
+ "berat_badan_dalam_bentuk_kg": "31.5",
891
+ "tinggi_badan_dalam_bentuk_cm": "115.2",
892
+ "imt": 23,
893
+ "detail_konklusi": [
894
+ "Obesitas Sekunder"
895
+ ],
896
+ "solusi_konklusi": "Periksa ke dokter tentang penyakit tentang anda.",
897
+ "cause_konklusi": [
898
+ "faktor kesehatan",
899
+ "faktor pola makan"
900
+ ],
901
+ "tanggal_periksa": [
902
+ "2023-07-08"
903
+ ],
904
+ "tanggal_edit": "2023-07-13",
905
+ "p01": true,
906
+ "p02": false,
907
+ "p03": false,
908
+ "p04": true,
909
+ "p05": false,
910
+ "id": 807968453128497203
911
+ },
912
+ {
913
+ "uuid": "dd38ae38d6e942f08bed5a30a1bbbf36",
914
+ "nama_lengkap": "Aska Dina Kanziz Ilma",
915
+ "usia_dalam_bentuk_bulan": "3",
916
+ "tanggal_lahir": "2019-08-04",
917
+ "jenis_kelamin": "Perempuan",
918
+ "berat_badan_dalam_bentuk_kg": "25",
919
+ "tinggi_badan_dalam_bentuk_cm": "102.8",
920
+ "imt": 23,
921
+ "detail_konklusi": [
922
+ "Obesitas Primer"
923
+ ],
924
+ "solusi_konklusi": " Konsultasi dengan psikiater atas keluhan meningkatnya keinginan makan sebagai security food.",
925
+ "cause_konklusi": [
926
+ "faktor genetika / turunan",
927
+ "faktor psikis"
928
+ ],
929
+ "tanggal_periksa": [
930
+ "2023-07-08"
931
+ ],
932
+ "tanggal_edit": "2023-07-13",
933
+ "p01": false,
934
+ "p02": true,
935
+ "p03": false,
936
+ "p04": false,
937
+ "p05": true,
938
+ "id": 702323225170053191
939
+ },
940
+ {
941
+ "uuid": "4ebb2ba16f1e4864a26aac43306d3ceb",
942
+ "nama_lengkap": "M Asifan Rafansyah Yudha",
943
+ "usia_dalam_bentuk_bulan": "3",
944
+ "tanggal_lahir": "2020-01-16",
945
+ "jenis_kelamin": "Laki-Laki",
946
+ "berat_badan_dalam_bentuk_kg": "18.4",
947
+ "tinggi_badan_dalam_bentuk_cm": "94.5",
948
+ "imt": 20,
949
+ "detail_konklusi": [
950
+ "Obesitas Sekunder"
951
+ ],
952
+ "solusi_konklusi": "Periksa ke dokter tentang penyakit tentang anda.",
953
+ "cause_konklusi": [
954
+ "faktor kesehatan",
955
+ "faktor genetika / turunan",
956
+ "faktor aktivitas"
957
+ ],
958
+ "tanggal_periksa": [
959
+ "2023-07-08"
960
+ ],
961
+ "tanggal_edit": "2023-07-13",
962
+ "p01": true,
963
+ "p02": true,
964
+ "p03": true,
965
+ "p04": false,
966
+ "p05": false,
967
+ "id": 122904688606208057
968
+ },
969
+ {
970
+ "uuid": "e7f4fba114ca4ba995ef97f98b5b8535",
971
+ "nama_lengkap": "Rafardhan Atallah Pradana",
972
+ "usia_dalam_bentuk_bulan": "1",
973
+ "tanggal_lahir": "2021-10-12",
974
+ "jenis_kelamin": "Laki-Laki",
975
+ "berat_badan_dalam_bentuk_kg": "14.5",
976
+ "tinggi_badan_dalam_bentuk_cm": "79",
977
+ "imt": 23,
978
+ "detail_konklusi": [
979
+ "Obesitas Primer"
980
+ ],
981
+ "solusi_konklusi": " Kenaikan berat badan diperlambat, Diet seimbang, makan dengan porsi kecil, hindari makanan dengan kalori tinggi, melakukan aktivitas fisik, dan kurangi menonton tv.",
982
+ "cause_konklusi": [
983
+ "faktor genetika / turunan",
984
+ "faktor aktivitas",
985
+ "faktor pola makan"
986
+ ],
987
+ "tanggal_periksa": [
988
+ "2023-07-08"
989
+ ],
990
+ "tanggal_edit": "2023-07-13",
991
+ "p01": false,
992
+ "p02": true,
993
+ "p03": true,
994
+ "p04": true,
995
+ "p05": false,
996
+ "id": 203785639429406952
997
+ },
998
+ {
999
+ "uuid": "f0f5fc650a6b496186acce4844d76917",
1000
+ "nama_lengkap": "Sevta Nourin",
1001
+ "usia_dalam_bentuk_bulan": "4",
1002
+ "tanggal_lahir": "2018-11-12",
1003
+ "jenis_kelamin": "Laki-Laki",
1004
+ "berat_badan_dalam_bentuk_kg": "27.2",
1005
+ "tinggi_badan_dalam_bentuk_cm": "109",
1006
+ "imt": 22,
1007
+ "detail_konklusi": [
1008
+ "Obesitas Primer"
1009
+ ],
1010
+ "solusi_konklusi": " Konsultasi dengan psikiater atas keluhan meningkatnya keinginan makan sebagai security food.",
1011
+ "cause_konklusi": [
1012
+ "faktor aktivitas",
1013
+ "faktor pola makan",
1014
+ "faktor psikis"
1015
+ ],
1016
+ "tanggal_periksa": [
1017
+ "2023-07-13"
1018
+ ],
1019
+ "tanggal_edit": "2023-07-13",
1020
+ "p01": false,
1021
+ "p02": false,
1022
+ "p03": true,
1023
+ "p04": true,
1024
+ "p05": true,
1025
+ "id": 518954609807545169
1026
+ },
1027
+ {
1028
+ "uuid": "512b51a56ceb4671b53129be6c9c7052",
1029
+ "nama_lengkap": "Bilqis",
1030
+ "usia_dalam_bentuk_bulan": "4",
1031
+ "tanggal_lahir": "2019-04-15",
1032
+ "jenis_kelamin": "Perempuan",
1033
+ "berat_badan_dalam_bentuk_kg": "15.8",
1034
+ "tinggi_badan_dalam_bentuk_cm": "87",
1035
+ "imt": 20,
1036
+ "detail_konklusi": [
1037
+ "Obesitas Sekunder"
1038
+ ],
1039
+ "solusi_konklusi": "Periksa ke dokter tentang penyakit tentang anda.",
1040
+ "cause_konklusi": [
1041
+ "faktor kesehatan",
1042
+ "faktor genetika / turunan"
1043
+ ],
1044
+ "tanggal_periksa": [
1045
+ "2023-07-13"
1046
+ ],
1047
+ "tanggal_edit": "2023-07-13",
1048
+ "p01": true,
1049
+ "p02": true,
1050
+ "p03": false,
1051
+ "p04": false,
1052
+ "p05": false,
1053
+ "id": 110514785841141761
1054
+ },
1055
+ {
1056
+ "uuid": "ecb91b15ae694013b1ff84e30d31cc12",
1057
+ "nama_lengkap": "M Faisal Hanif",
1058
+ "usia_dalam_bentuk_bulan": "3",
1059
+ "tanggal_lahir": "2020-01-10",
1060
+ "jenis_kelamin": "Laki-Laki",
1061
+ "berat_badan_dalam_bentuk_kg": "20.8",
1062
+ "tinggi_badan_dalam_bentuk_cm": "98.5",
1063
+ "imt": 21,
1064
+ "detail_konklusi": [
1065
+ "Obesitas Primer"
1066
+ ],
1067
+ "solusi_konklusi": "",
1068
+ "cause_konklusi": [
1069
+ "faktor genetika / turunan",
1070
+ "faktor pola makan"
1071
+ ],
1072
+ "tanggal_periksa": [
1073
+ "2023-07-13"
1074
+ ],
1075
+ "tanggal_edit": "2023-07-13",
1076
+ "p01": false,
1077
+ "p02": true,
1078
+ "p03": false,
1079
+ "p04": true,
1080
+ "p05": false,
1081
+ "id": 291879302260324158
1082
+ },
1083
+ {
1084
+ "uuid": "99948102a43a4e3dab0f94c4da49c56c",
1085
+ "nama_lengkap": "A Zainur Roziqin",
1086
+ "usia_dalam_bentuk_bulan": "1",
1087
+ "tanggal_lahir": "2021-09-10",
1088
+ "jenis_kelamin": "Laki-Laki",
1089
+ "berat_badan_dalam_bentuk_kg": "11",
1090
+ "tinggi_badan_dalam_bentuk_cm": "69.4",
1091
+ "imt": 22,
1092
+ "detail_konklusi": [
1093
+ "Obesitas Sekunder"
1094
+ ],
1095
+ "solusi_konklusi": "Periksa ke dokter tentang penyakit tentang anda. Konsultasi dengan psikiater atas keluhan meningkatnya keinginan makan sebagai security food.",
1096
+ "cause_konklusi": [
1097
+ "faktor kesehatan",
1098
+ "faktor psikis"
1099
+ ],
1100
+ "tanggal_periksa": [
1101
+ "2023-07-13"
1102
+ ],
1103
+ "tanggal_edit": "2023-07-13",
1104
+ "p01": true,
1105
+ "p02": false,
1106
+ "p03": false,
1107
+ "p04": false,
1108
+ "p05": true,
1109
+ "id": 214521985843433320
1110
+ },
1111
+ {
1112
+ "uuid": "ba5295d157ba4cd2a5d427c528636ee5",
1113
+ "nama_lengkap": "Saputra",
1114
+ "usia_dalam_bentuk_bulan": "2",
1115
+ "tanggal_lahir": "2020-08-24",
1116
+ "jenis_kelamin": "Laki-Laki",
1117
+ "berat_badan_dalam_bentuk_kg": "18.2",
1118
+ "tinggi_badan_dalam_bentuk_cm": "87",
1119
+ "imt": 24,
1120
+ "detail_konklusi": [
1121
+ "Obesitas Sekunder"
1122
+ ],
1123
+ "solusi_konklusi": "Periksa ke dokter tentang penyakit tentang anda.",
1124
+ "cause_konklusi": [
1125
+ "faktor kesehatan",
1126
+ "faktor aktivitas"
1127
+ ],
1128
+ "tanggal_periksa": [
1129
+ "2023-07-13"
1130
+ ],
1131
+ "tanggal_edit": "2023-07-13",
1132
+ "p01": true,
1133
+ "p02": false,
1134
+ "p03": true,
1135
+ "p04": false,
1136
+ "p05": false,
1137
+ "id": 203140822645109067
1138
+ },
1139
+ {
1140
+ "uuid": "8e4053a7bb7844ee8c33896a326f9b34",
1141
+ "nama_lengkap": "Jhonatan",
1142
+ "usia_dalam_bentuk_bulan": "4",
1143
+ "tanggal_lahir": "2018-09-19",
1144
+ "jenis_kelamin": "Laki-Laki",
1145
+ "berat_badan_dalam_bentuk_kg": "28.4",
1146
+ "tinggi_badan_dalam_bentuk_cm": "110",
1147
+ "imt": 23,
1148
+ "detail_konklusi": [
1149
+ "Obesitas Primer"
1150
+ ],
1151
+ "solusi_konklusi": "",
1152
+ "cause_konklusi": [
1153
+ "faktor aktivitas",
1154
+ "faktor pola makan"
1155
+ ],
1156
+ "tanggal_periksa": [
1157
+ "2023-07-13"
1158
+ ],
1159
+ "tanggal_edit": "2023-07-13",
1160
+ "p01": false,
1161
+ "p02": false,
1162
+ "p03": true,
1163
+ "p04": true,
1164
+ "p05": false,
1165
+ "id": 792969575121374374
1166
+ },
1167
+ {
1168
+ "uuid": "4b04d15038af47f6813016a780dfe3e0",
1169
+ "nama_lengkap": "Laili",
1170
+ "usia_dalam_bentuk_bulan": "4",
1171
+ "tanggal_lahir": "2019-02-14",
1172
+ "jenis_kelamin": "Perempuan",
1173
+ "berat_badan_dalam_bentuk_kg": "22.4",
1174
+ "tinggi_badan_dalam_bentuk_cm": "103",
1175
+ "imt": 21,
1176
+ "detail_konklusi": [
1177
+ "Obesitas Primer"
1178
+ ],
1179
+ "solusi_konklusi": "",
1180
+ "cause_konklusi": [
1181
+ "faktor aktivitas",
1182
+ "faktor pola makan"
1183
+ ],
1184
+ "tanggal_periksa": [
1185
+ "2023-07-13"
1186
+ ],
1187
+ "tanggal_edit": "2023-07-13",
1188
+ "p01": false,
1189
+ "p02": false,
1190
+ "p03": true,
1191
+ "p04": true,
1192
+ "p05": false,
1193
+ "id": 160632057965280610
1194
+ },
1195
+ {
1196
+ "uuid": "79c9cf9f635746639afc7ee27be47ac0",
1197
+ "nama_lengkap": "Muhammad Devano S U",
1198
+ "usia_dalam_bentuk_bulan": "4",
1199
+ "tanggal_lahir": "2018-06-22",
1200
+ "jenis_kelamin": "Laki-Laki",
1201
+ "berat_badan_dalam_bentuk_kg": "23.8",
1202
+ "tinggi_badan_dalam_bentuk_cm": "106",
1203
+ "imt": 21,
1204
+ "detail_konklusi": [
1205
+ "Obesitas Primer"
1206
+ ],
1207
+ "solusi_konklusi": "",
1208
+ "cause_konklusi": [
1209
+ "faktor genetika / turunan",
1210
+ "faktor pola makan"
1211
+ ],
1212
+ "tanggal_periksa": [
1213
+ "2023-07-13"
1214
+ ],
1215
+ "tanggal_edit": "2023-07-13",
1216
+ "p01": false,
1217
+ "p02": true,
1218
+ "p03": false,
1219
+ "p04": true,
1220
+ "p05": false,
1221
+ "id": 254608892694459717
1222
+ },
1223
+ {
1224
+ "uuid": "4aaa1f34f7934a4ca2a89762cf75ae1a",
1225
+ "nama_lengkap": "Briyan Novara P",
1226
+ "usia_dalam_bentuk_bulan": "4",
1227
+ "tanggal_lahir": "2018-11-17",
1228
+ "jenis_kelamin": "Laki-Laki",
1229
+ "berat_badan_dalam_bentuk_kg": "23.3",
1230
+ "tinggi_badan_dalam_bentuk_cm": "106",
1231
+ "imt": 20,
1232
+ "detail_konklusi": [
1233
+ "Obesitas Primer"
1234
+ ],
1235
+ "solusi_konklusi": " Kenaikan berat badan diperlambat, Diet seimbang, makan dengan porsi kecil, hindari makanan dengan kalori tinggi, melakukan aktivitas fisik, dan kurangi menonton tv.",
1236
+ "cause_konklusi": [
1237
+ "faktor genetika / turunan",
1238
+ "faktor aktivitas",
1239
+ "faktor pola makan"
1240
+ ],
1241
+ "tanggal_periksa": [
1242
+ "2023-07-13"
1243
+ ],
1244
+ "tanggal_edit": "2023-07-13",
1245
+ "p01": false,
1246
+ "p02": true,
1247
+ "p03": true,
1248
+ "p04": true,
1249
+ "p05": false,
1250
+ "id": 517014201643667088
1251
+ },
1252
+ {
1253
+ "uuid": "807c48243d7f48a8b4ff4856cc41f9d4",
1254
+ "nama_lengkap": "Assauqile Gibran",
1255
+ "usia_dalam_bentuk_bulan": "3",
1256
+ "tanggal_lahir": "2019-07-20",
1257
+ "jenis_kelamin": "Perempuan",
1258
+ "berat_badan_dalam_bentuk_kg": "19",
1259
+ "tinggi_badan_dalam_bentuk_cm": "96.2",
1260
+ "imt": 20,
1261
+ "detail_konklusi": [
1262
+ "Obesitas Primer"
1263
+ ],
1264
+ "solusi_konklusi": " Konsultasi dengan psikiater atas keluhan meningkatnya keinginan makan sebagai security food.",
1265
+ "cause_konklusi": [
1266
+ "faktor pola makan",
1267
+ "faktor psikis"
1268
+ ],
1269
+ "tanggal_periksa": [
1270
+ "2023-07-13"
1271
+ ],
1272
+ "tanggal_edit": "2023-07-13",
1273
+ "p01": false,
1274
+ "p02": false,
1275
+ "p03": false,
1276
+ "p04": true,
1277
+ "p05": true,
1278
+ "id": 203955330227643625
1279
+ },
1280
+ {
1281
+ "uuid": "be510597cf324fc7b391322987e851a7",
1282
+ "nama_lengkap": "Kalisa",
1283
+ "usia_dalam_bentuk_bulan": "2",
1284
+ "tanggal_lahir": "2020-08-24",
1285
+ "jenis_kelamin": "Perempuan",
1286
+ "berat_badan_dalam_bentuk_kg": "17.8",
1287
+ "tinggi_badan_dalam_bentuk_cm": "88.5",
1288
+ "imt": 22,
1289
+ "detail_konklusi": [
1290
+ "Obesitas Primer"
1291
+ ],
1292
+ "solusi_konklusi": "",
1293
+ "cause_konklusi": [
1294
+ "faktor pola makan"
1295
+ ],
1296
+ "tanggal_periksa": [
1297
+ "2023-07-13"
1298
+ ],
1299
+ "tanggal_edit": "2023-07-13",
1300
+ "p01": false,
1301
+ "p02": false,
1302
+ "p03": false,
1303
+ "p04": true,
1304
+ "p05": false,
1305
+ "id": 139571547885525584
1306
+ },
1307
+ {
1308
+ "uuid": "b11412934ea14cdbba08a3637c1fed82",
1309
+ "nama_lengkap": "Raka Arya",
1310
+ "usia_dalam_bentuk_bulan": "3",
1311
+ "tanggal_lahir": "2020-06-14",
1312
+ "jenis_kelamin": "Laki-Laki",
1313
+ "berat_badan_dalam_bentuk_kg": "21.8",
1314
+ "tinggi_badan_dalam_bentuk_cm": "96",
1315
+ "imt": 23,
1316
+ "detail_konklusi": [
1317
+ "Obesitas Sekunder"
1318
+ ],
1319
+ "solusi_konklusi": "Periksa ke dokter tentang penyakit tentang anda.",
1320
+ "cause_konklusi": [
1321
+ "faktor kesehatan",
1322
+ "faktor aktivitas",
1323
+ "faktor pola makan"
1324
+ ],
1325
+ "tanggal_periksa": [
1326
+ "2023-07-13"
1327
+ ],
1328
+ "tanggal_edit": "2023-07-13",
1329
+ "p01": true,
1330
+ "p02": false,
1331
+ "p03": true,
1332
+ "p04": true,
1333
+ "p05": false,
1334
+ "id": 179011490536769256
1335
+ },
1336
+ {
1337
+ "uuid": "c38ae43f86834c42a16506fbcb5d288c",
1338
+ "nama_lengkap": "Azahra Cantika",
1339
+ "usia_dalam_bentuk_bulan": "3",
1340
+ "tanggal_lahir": "2020-04-01",
1341
+ "jenis_kelamin": "Perempuan",
1342
+ "berat_badan_dalam_bentuk_kg": "20.2",
1343
+ "tinggi_badan_dalam_bentuk_cm": "96",
1344
+ "imt": 21,
1345
+ "detail_konklusi": [
1346
+ "Obesitas Primer"
1347
+ ],
1348
+ "solusi_konklusi": " Konsultasi dengan psikiater atas keluhan meningkatnya keinginan makan sebagai security food.",
1349
+ "cause_konklusi": [
1350
+ "faktor genetika / turunan",
1351
+ "faktor aktivitas",
1352
+ "faktor psikis"
1353
+ ],
1354
+ "tanggal_periksa": [
1355
+ "2023-07-13"
1356
+ ],
1357
+ "tanggal_edit": "2023-07-13",
1358
+ "p01": false,
1359
+ "p02": true,
1360
+ "p03": true,
1361
+ "p04": false,
1362
+ "p05": true,
1363
+ "id": 846151191710266430
1364
+ },
1365
+ {
1366
+ "uuid": "f0cab4def55140d4a8854807991ca894",
1367
+ "nama_lengkap": "M Alfatih",
1368
+ "usia_dalam_bentuk_bulan": "4",
1369
+ "tanggal_lahir": "2019-03-26",
1370
+ "jenis_kelamin": "Laki-Laki",
1371
+ "berat_badan_dalam_bentuk_kg": "30.5",
1372
+ "tinggi_badan_dalam_bentuk_cm": "112",
1373
+ "imt": 24,
1374
+ "detail_konklusi": [
1375
+ "Obesitas Sekunder"
1376
+ ],
1377
+ "solusi_konklusi": "Periksa ke dokter tentang penyakit tentang anda. Konsultasi dengan psikiater atas keluhan meningkatnya keinginan makan sebagai security food.",
1378
+ "cause_konklusi": [
1379
+ "faktor kesehatan",
1380
+ "faktor aktivitas",
1381
+ "faktor psikis"
1382
+ ],
1383
+ "tanggal_periksa": [
1384
+ "2023-07-13"
1385
+ ],
1386
+ "tanggal_edit": "2023-07-13",
1387
+ "p01": true,
1388
+ "p02": false,
1389
+ "p03": true,
1390
+ "p04": false,
1391
+ "p05": true,
1392
+ "id": 223904969909941578
1393
+ },
1394
+ {
1395
+ "uuid": "c79dcaee3c1f4f8ea75dc1e127dc6142",
1396
+ "nama_lengkap": "Zahro Widia",
1397
+ "usia_dalam_bentuk_bulan": "2",
1398
+ "tanggal_lahir": "2021-02-11",
1399
+ "jenis_kelamin": "Perempuan",
1400
+ "berat_badan_dalam_bentuk_kg": "28.4",
1401
+ "tinggi_badan_dalam_bentuk_cm": "110",
1402
+ "imt": 23,
1403
+ "detail_konklusi": [
1404
+ "Obesitas Sekunder"
1405
+ ],
1406
+ "solusi_konklusi": "Periksa ke dokter tentang penyakit tentang anda. Kenaikan berat badan diperlambat, Diet seimbang, makan dengan porsi kecil, hindari makanan dengan kalori tinggi, melakukan aktivitas fisik, dan kurangi menonton tv. Konsultasi dengan psikiater atas keluhan meningkatnya keinginan makan sebagai security food.",
1407
+ "cause_konklusi": [
1408
+ "faktor kesehatan",
1409
+ "faktor genetika / turunan",
1410
+ "faktor aktivitas",
1411
+ "faktor pola makan",
1412
+ "faktor psikis"
1413
+ ],
1414
+ "tanggal_periksa": [
1415
+ "2023-07-13"
1416
+ ],
1417
+ "tanggal_edit": "2023-07-13",
1418
+ "p01": true,
1419
+ "p02": true,
1420
+ "p03": true,
1421
+ "p04": true,
1422
+ "p05": true,
1423
+ "id": 464007264702855274
1424
+ }
1425
+ ]
1426
+ }
db/users_admin.json ADDED
@@ -0,0 +1,84 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "data": [
3
+ {
4
+ "role": "admin",
5
+ "name": "Amin Azin",
6
+ "tanggal_lahir": "1999-01-06",
7
+ "jenis_kelamin": "Perempuan",
8
+ "alamat": "Dusun Krajan Tempeh Lor RT 10 RW 08",
9
+ "username": "admin",
10
+ "password": "admin",
11
+ "id": 284450867340872235
12
+ },
13
+ {
14
+ "role": "kepala",
15
+ "name": "Dzakiah Laili",
16
+ "tanggal_lahir": "1993-03-22",
17
+ "jenis_kelamin": "Perempuan",
18
+ "alamat": "Perum Asabri Tempeh Lor AA-28",
19
+ "username": "dzakiahlaili",
20
+ "password": "kintamani",
21
+ "id": 284450867340872236
22
+ },
23
+ {
24
+ "role": "kader",
25
+ "name": "Sinta Fahira ",
26
+ "tanggal_lahir": "1995-09-17",
27
+ "jenis_kelamin": "Perempuan",
28
+ "alamat": "Dusun Krajan Tempeh Lor RT 11 RW 03",
29
+ "username": "sinta222",
30
+ "password": "kintamani2",
31
+ "id": 284450867340872237
32
+ },
33
+ {
34
+ "role": "bidan",
35
+ "name": "Elvira",
36
+ "tanggal_lahir": "2002-07-29",
37
+ "jenis_kelamin": "Perempuan",
38
+ "alamat": "Dam Songo Tempeh Lumajang",
39
+ "username": "elvira222",
40
+ "password": "kintamani",
41
+ "id": 284450867340872238
42
+ },
43
+ {
44
+ "role": "kader",
45
+ "name": "Khusnul Aminah",
46
+ "tanggal_lahir": "1999-02-19",
47
+ "jenis_kelamin": "Perempuan",
48
+ "alamat": "Tempeh Lor",
49
+ "username": "khusnul",
50
+ "password": "kintamani",
51
+ "id": 258349686431188309
52
+ },
53
+ {
54
+ "role": "kepala",
55
+ "name": "sukma",
56
+ "tanggal_lahir": "2001-01-01",
57
+ "jenis_kelamin": "",
58
+ "alamat": "tes",
59
+ "username": "sukma",
60
+ "password": "sukma",
61
+ "id": 202493339910135417
62
+ },
63
+ {
64
+ "role": "bidan",
65
+ "name": "nadhir",
66
+ "tanggal_lahir": "2001-01-01",
67
+ "jenis_kelamin": "",
68
+ "alamat": "1",
69
+ "username": "nadhir",
70
+ "password": "nadhir",
71
+ "id": 247858236643526180
72
+ },
73
+ {
74
+ "role": "kader",
75
+ "name": "reza",
76
+ "tanggal_lahir": "2001-01-01",
77
+ "jenis_kelamin": "",
78
+ "alamat": "abb",
79
+ "username": "reza",
80
+ "password": "reza",
81
+ "id": 281135559967142361
82
+ }
83
+ ]
84
+ }
export.csv ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ nama_lengkap,usia,tanggal_lahir,jenis_kelamin,berat_badan (kg),tinggi_badan (cm),imt,detail_konklusi
2
+ Fadli Acmad,2,2021-04-06,Laki-Laki,13.7,95,15,Obesitas Primer
3
+ M Rizky,2,2021-04-10,Laki-Laki,13.6,76,23,Obesitas Sekunder
4
+ Ratna,1,2022-01-15,Perempuan,15.5,85,21,Obesitas Sekunder
5
+ Kasmirah,2,2021-01-01,Perempuan,11.5,79,18,Obesitas Primer
6
+ M Zakky,3,2020-02-03,Laki-Laki,20,99,20,Obesitas Sekunder
7
+ Qiana,3,2020-03-28,Perempuan,15,78,24,Obesitas Sekunder
8
+ Axle,3,2020-04-10,Laki-Laki,10.5,82,15,Obesitas Sekunder
9
+ Intan,3,2020-04-11,Perempuan,12.2,90,15,Obesitas Sekunder
10
+ Sultan,4,2018-10-20,Laki-Laki,19,102,18,Obesitas Sekunder
11
+ Anisa,4,2019-01-11,Perempuan,23,97,24,Obesitas Primer
12
+ Ubay,4,2019-04-05,Laki-Laki,13,90,16,Obesitas Primer
13
+ Noah,1,2022-01-01,Laki-Laki,9.2,72,17,Obesitas Primer
14
+ Nora,2,2021-03-17,Perempuan,14.3,91,17,Obesitas Primer
15
+ Rafa,2,2020-12-10,Laki-Laki,10.2,79,16,Obesitas Sekunder
16
+ Dafa,2,2021-01-10,Laki-Laki,12.1,90,14,Obesitas Sekunder
17
+ Hasna,1,2022-04-01,Perempuan,10.5,81,16,Obesitas Primer
18
+ Aisyah,2,2021-06-06,Perempuan,12.5,89,15,Obesitas Sekunder
19
+ Zakaria,3,2020-05-15,Laki-Laki,11.5,91,13,Obesitas Sekunder
20
+ Indana,2,2021-06-20,Perempuan,17,105,15,Obesitas Sekunder
21
+ Andi,2,2020-10-22,Laki-Laki,19,98,19,Obesitas Primer
22
+ Halifatul H,4,2019-03-10,Perempuan,23.1,100,23,Obesitas Sekunder
23
+ Arya Januraja,3,2019-01-25,Laki-Laki,27.9,106.7,24,Obesitas Sekunder
24
+ M Safian Altesai,3,2019-08-21,Laki-Laki,21.9,96,23,Obesitas Primer
25
+ M rafa Azka,1,2021-11-19,Laki-Laki,15,79.5,23,Obesitas Primer
26
+ Fauzan Dwi Satria,4,2019-05-13,Laki-Laki,29.8,109,25,Obesitas Primer
27
+ Aradeya gea,2,2020-08-27,Perempuan,20.4,90,25,Obesitas Primer
28
+ Aisyah Khumairah,1,2022-05-11,Perempuan,12,73,22,Obesitas Sekunder
29
+ Biksan F,1,2021-11-10,Laki-Laki,13.8,80,21,Obesitas Sekunder
30
+ M Zaim Sholehhuddin ,2,2020-12-01,Laki-Laki,16.5,86,22,Obesitas Sekunder
31
+ A Fakharudin Attar,4,2019-03-23,Laki-Laki,19.8,98.8,20,Obesitas Sekunder
32
+ M Aqmal,3,2020-01-03,Laki-Laki,18.2,95,20,Obesitas Primer
33
+ Nahda Irfana,4,2019-03-08,Perempuan,31.5,115.2,23,Obesitas Sekunder
34
+ Aska Dina Kanziz Ilma,3,2019-08-04,Perempuan,25,102.8,23,Obesitas Primer
35
+ M Asifan Rafansyah Yudha,3,2020-01-16,Laki-Laki,18.4,94.5,20,Obesitas Sekunder
36
+ Rafardhan Atallah Pradana,1,2021-10-12,Laki-Laki,14.5,79,23,Obesitas Primer
37
+ Sevta Nourin,4,2018-11-12,Laki-Laki,27.2,109,22,Obesitas Primer
38
+ Bilqis,4,2019-04-15,Perempuan,15.8,87,20,Obesitas Sekunder
39
+ M Faisal Hanif,3,2020-01-10,Laki-Laki,20.8,98.5,21,Obesitas Primer
40
+ A Zainur Roziqin,1,2021-09-10,Laki-Laki,11,69.4,22,Obesitas Sekunder
41
+ Saputra,2,2020-08-24,Laki-Laki,18.2,87,24,Obesitas Sekunder
42
+ Jhonatan,4,2018-09-19,Laki-Laki,28.4,110,23,Obesitas Primer
43
+ Laili,4,2019-02-14,Perempuan,22.4,103,21,Obesitas Primer
44
+ Muhammad Devano S U,4,2018-06-22,Laki-Laki,23.8,106,21,Obesitas Primer
45
+ Briyan Novara P,4,2018-11-17,Laki-Laki,23.3,106,20,Obesitas Primer
46
+ Assauqile Gibran,3,2019-07-20,Perempuan,19,96.2,20,Obesitas Primer
47
+ Kalisa,2,2020-08-24,Perempuan,17.8,88.5,22,Obesitas Primer
48
+ Raka Arya,3,2020-06-14,Laki-Laki,21.8,96,23,Obesitas Sekunder
49
+ Azahra Cantika,3,2020-04-01,Perempuan,20.2,96,21,Obesitas Primer
50
+ M Alfatih,4,2019-03-26,Laki-Laki,30.5,112,24,Obesitas Sekunder
51
+ Zahro Widia,2,2021-02-11,Perempuan,28.4,110,23,Obesitas Sekunder
flask_session/0555e35e41ac8f1a949990c0984e0cfb ADDED
Binary file (49 Bytes). View file
 
flask_session/10e25321a6f00c978694fd187c10abc4 ADDED
Binary file (36 Bytes). View file
 
flask_session/2029240f6d1128be89ddc32729463129 ADDED
Binary file (9 Bytes). View file
 
flask_session/2202dd7007f9bb3785b95f9f7fa056f7 ADDED
Binary file (39 Bytes). View file
 
flask_session/2b2a45b11a1ec2331338aaed0bd01b5d ADDED
Binary file (39 Bytes). View file
 
flask_session/341c98d8fe2c4190a62fabbe88e9ba72 ADDED
Binary file (39 Bytes). View file
 
flask_session/418808d40d5546be9fb8ce1ecb403d05 ADDED
Binary file (39 Bytes). View file
 
flask_session/434dd888e0b14519a082ff8e3983fb19 ADDED
Binary file (39 Bytes). View file
 
flask_session/5e3727bf46ddd720e4dbc8818dbf6b85 ADDED
Binary file (368 Bytes). View file
 
flask_session/5e570896bb6d280cefe85a0743fc4378 ADDED
Binary file (195 Bytes). View file
 
flask_session/72664179816f497ac3372e8f9d2ffd39 ADDED
Binary file (49 Bytes). View file
 
flask_session/78e83dad8df47cbc1a7bbfa54ae6192a ADDED
Binary file (39 Bytes). View file
 
flask_session/7d6d3d1dfecb2fcc22e8946b74802f82 ADDED
Binary file (39 Bytes). View file
 
flask_session/9b438057d5971de7d654493efa2f530a ADDED
Binary file (39 Bytes). View file
 
flask_session/9baccf410aea2dc49b9327ebc65c77e4 ADDED
Binary file (39 Bytes). View file
 
flask_session/9dc4e083e3952e85bc8021620e23151c ADDED
Binary file (39 Bytes). View file
 
flask_session/a348d38bd5ec6f3d4b770da9bade5859 ADDED
Binary file (221 Bytes). View file
 
flask_session/a363ccfaa2121d411fd507df144e4bb5 ADDED
Binary file (36 Bytes). View file
 
flask_session/a3e0e25a91d3f327b87da1259170e975 ADDED
Binary file (172 Bytes). View file
 
flask_session/bd12d2fa23a7a22e0d0abf58f2627079 ADDED
Binary file (39 Bytes). View file
 
flask_session/da7a4b202b6b0fa548d83830a3135fa6 ADDED
Binary file (36 Bytes). View file
 
flask_session/dda0f415d2f69e8b0cb41e4655ee46b3 ADDED
Binary file (172 Bytes). View file
 
flask_session/e2db2cc279d6e99ed18d4b219904dffb ADDED
Binary file (49 Bytes). View file
 
flask_session/e4b1dd890605ad0fa42946e5519d3349 ADDED
Binary file (39 Bytes). View file
 
flask_session/e63cbe5ee03207dd76c1461d3b0a0ac7 ADDED
Binary file (40 Bytes). View file
 
flask_session/ed523d93291f2505e4d771c86230b37e ADDED
Binary file (167 Bytes). View file
 
requirements.txt ADDED
Binary file (60 Bytes). View file
 
static/css/card.css ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ body {
2
+ background: #0c7178;
3
+
4
+ }
5
+
static/css/dashboard-input-data.css ADDED
@@ -0,0 +1,405 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* =========== Google Fonts ============ */
2
+ @import url("https://fonts.googleapis.com/css2?family=Ubuntu:wght@300;400;500;700&display=swap");
3
+
4
+ /* =============== Globals ============== */
5
+ * {
6
+ font-family: "Ubuntu", sans-serif;
7
+ margin: 0;
8
+ padding: 0;
9
+ box-sizing: border-box;
10
+ }
11
+
12
+ :root {
13
+ --blue: #0c7178;
14
+ --white: #fff;
15
+ --gray: #f5f5f5;
16
+ --black1: #222;
17
+ --black2: #999;
18
+ }
19
+
20
+ body {
21
+ min-height: 100vh;
22
+ overflow-x: hidden;
23
+ }
24
+
25
+ .container {
26
+ position: relative;
27
+ width: 100%;
28
+ }
29
+
30
+ /* =============== Navigation ================ */
31
+ .navigation {
32
+ position: fixed;
33
+ width: 300px;
34
+ height: 100%;
35
+ background: var(--blue);
36
+ border-left: 10px solid var(--blue);
37
+ transition: 0.5s;
38
+ overflow: hidden;
39
+ }
40
+ .navigation.active {
41
+ width: 80px;
42
+ }
43
+
44
+ .navigation ul {
45
+ position: absolute;
46
+ top: 0;
47
+ left: 0;
48
+ width: 100%;
49
+ }
50
+
51
+ .navigation ul li {
52
+ position: relative;
53
+ width: 100%;
54
+ list-style: none;
55
+ border-top-left-radius: 30px;
56
+ border-bottom-left-radius: 30px;
57
+ }
58
+
59
+ .navigation ul li:hover,
60
+ .navigation ul li.hovered {
61
+ background-color: var(--white);
62
+ }
63
+
64
+ .navigation ul li:nth-child(1) {
65
+ margin-bottom: 40px;
66
+ pointer-events: none;
67
+ }
68
+
69
+ .navigation ul li a {
70
+ position: relative;
71
+ display: block;
72
+ width: 100%;
73
+ display: flex;
74
+ text-decoration: none;
75
+ color: var(--white);
76
+ }
77
+ .navigation ul li:hover a,
78
+ .navigation ul li.hovered a {
79
+ color: var(--blue);
80
+ }
81
+
82
+ .navigation ul li a .icon {
83
+ position: relative;
84
+ display: block;
85
+ min-width: 60px;
86
+ height: 60px;
87
+ line-height: 75px;
88
+ text-align: center;
89
+ }
90
+ .navigation ul li a .icon ion-icon {
91
+ font-size: 1.75rem;
92
+ }
93
+
94
+ .navigation ul li a .title {
95
+ position: relative;
96
+ display: block;
97
+ padding: 0 10px;
98
+ height: 60px;
99
+ line-height: 60px;
100
+ text-align: start;
101
+ white-space: nowrap;
102
+ }
103
+
104
+ /* --------- curve outside ---------- */
105
+ .navigation ul li:hover a::before,
106
+ .navigation ul li.hovered a::before {
107
+ content: "";
108
+ position: absolute;
109
+ right: 0;
110
+ top: -50px;
111
+ width: 50px;
112
+ height: 50px;
113
+ background-color: transparent;
114
+ border-radius: 50%;
115
+ box-shadow: 35px 35px 0 10px var(--white);
116
+ pointer-events: none;
117
+ }
118
+ .navigation ul li:hover a::after,
119
+ .navigation ul li.hovered a::after {
120
+ content: "";
121
+ position: absolute;
122
+ right: 0;
123
+ bottom: -50px;
124
+ width: 50px;
125
+ height: 50px;
126
+ background-color: transparent;
127
+ border-radius: 50%;
128
+ box-shadow: 35px -35px 0 10px var(--white);
129
+ pointer-events: none;
130
+ }
131
+
132
+ /* ===================== Main ===================== */
133
+ .main {
134
+ position: absolute;
135
+ width: calc(100% - 300px);
136
+ left: 300px;
137
+ min-height: 100vh;
138
+ background: var(--white);
139
+ transition: 0.5s;
140
+ }
141
+ .main.active {
142
+ width: calc(100% - 80px);
143
+ left: 80px;
144
+ }
145
+
146
+ .topbar {
147
+ width: 100%;
148
+ height: 60px;
149
+ display: flex;
150
+ justify-content: space-between;
151
+ align-items: center;
152
+ padding: 0 10px;
153
+ }
154
+
155
+ .toggle {
156
+ position: relative;
157
+ width: 60px;
158
+ height: 60px;
159
+ display: flex;
160
+ justify-content: center;
161
+ align-items: center;
162
+ font-size: 2.5rem;
163
+ cursor: pointer;
164
+ }
165
+
166
+ .search {
167
+ position: relative;
168
+ width: 400px;
169
+ margin: 0 10px;
170
+ }
171
+
172
+ .search label {
173
+ position: relative;
174
+ width: 100%;
175
+ }
176
+
177
+ .search label input {
178
+ width: 100%;
179
+ height: 40px;
180
+ border-radius: 40px;
181
+ padding: 5px 20px;
182
+ padding-left: 35px;
183
+ font-size: 18px;
184
+ outline: none;
185
+ border: 1px solid var(--black2);
186
+ }
187
+
188
+ .search label ion-icon {
189
+ position: absolute;
190
+ top: 0;
191
+ left: 10px;
192
+ font-size: 1.2rem;
193
+ }
194
+
195
+ .user {
196
+ position: relative;
197
+ width: 40px;
198
+ height: 40px;
199
+ border-radius: 50%;
200
+ overflow: hidden;
201
+ cursor: pointer;
202
+ }
203
+
204
+ .detailsPuskesmas {
205
+ color: #999;
206
+ font-size: 1.1rem;
207
+ margin-top: 5px;
208
+ }
209
+
210
+ /* ======================= Cards ====================== */
211
+ .cardBox {
212
+ position: relative;
213
+ width: 198%;
214
+ padding: 20px;
215
+ display: grid;
216
+ grid-template-columns: repeat(4, 1fr);
217
+ grid-gap: 30px;
218
+ }
219
+
220
+ .cardBox .card {
221
+ position: relative;
222
+ background: var(--white);
223
+ padding: 30px;
224
+ border-radius: 20px;
225
+ display: flex;
226
+ justify-content: space-between;
227
+ cursor: pointer;
228
+ box-shadow: 0 7px 25px rgba(0, 0, 0, 0.08);
229
+ }
230
+
231
+ .cardBox .card .numbers {
232
+ position: relative;
233
+ font-weight: 500;
234
+ font-size: 2.5rem;
235
+ color: var(--blue);
236
+ }
237
+
238
+ .cardBox .card .cardName {
239
+ color: var(--black2);
240
+ font-size: 1.1rem;
241
+ margin-top: 5px;
242
+ }
243
+
244
+ .cardBox .card .iconBx {
245
+ font-size: 3.5rem;
246
+ color: var(--black2);
247
+ }
248
+
249
+ .cardBox .card:hover {
250
+ background: var(--blue);
251
+ }
252
+ .cardBox .card:hover .numbers,
253
+ .cardBox .card:hover .cardName,
254
+ .cardBox .card:hover .iconBx {
255
+ color: var(--white);
256
+ }
257
+
258
+ /* ================== Order Details List ============== */
259
+ .details {
260
+ position: relative;
261
+ width: 150%;
262
+ padding: 20px;
263
+ display: grid;
264
+ grid-template-columns: 2fr 1fr;
265
+ grid-gap: 30px;
266
+ /* margin-top: 10px; */
267
+ }
268
+
269
+ /* charts */
270
+
271
+
272
+ .details-button:hover {
273
+ background-color: #45a049;
274
+ }
275
+
276
+ .graphBox
277
+ {
278
+ margin: 0 30px 0 20px;
279
+ /* position: relative; */
280
+ padding: 20px;
281
+ width: calc(100% - 50px);
282
+ /* height: 200px; */
283
+ padding: 20px;
284
+ box-shadow: 0 7px 25px rgba(0,0,0,0.08);
285
+ border-radius: 20px;
286
+ /* display: grid; */
287
+ /* grid-template-columns: 1fr 2fr; */
288
+ /* grid-gap: 30px; */
289
+ }
290
+
291
+ .graphBox .box
292
+ {
293
+ position: relative;
294
+ background: #white;
295
+ width: 100%;
296
+ height: 2
297
+ padding: 20px;
298
+ box-shadow: 0 7px 25px rgba(0,0,0,0.08);
299
+ border-radius: 20px;
300
+ }
301
+
302
+ .details .chart {
303
+ position: relative;
304
+ display: grid;
305
+ min-height: 500px;
306
+ background: var(--white);
307
+ padding: 20px;
308
+ box-shadow: 0 7px 25px rgba(0, 0, 0, 0.08);
309
+ border-radius: 20px;
310
+ }
311
+
312
+ .details .cardHeader {
313
+ display: flex;
314
+ justify-content: space-between;
315
+ align-items: flex-start;
316
+ }
317
+ .cardHeader h2 {
318
+ font-weight: 600;
319
+ color: var(--blue);
320
+ }
321
+ .cardHeader .btn {
322
+ position: relative;
323
+ padding: 5px 10px;
324
+ background: var(--blue);
325
+ text-decoration: none;
326
+ color: var(--white);
327
+ border-radius: 6px;
328
+ }
329
+
330
+ .details table {
331
+ width: 100%;
332
+ border-collapse: collapse;
333
+ margin-top: 10px;
334
+ }
335
+ .details table thead td {
336
+ font-weight: 600;
337
+ }
338
+ /* ====================== Responsive Design ========================== */
339
+ @media (max-width: 991px) {
340
+
341
+ .graphBox{
342
+ grid-template-columns: 1fr;
343
+ height: auto;
344
+ }
345
+ .navigation {
346
+ left: -300px;
347
+ }
348
+ .navigation.active {
349
+ width: 300px;
350
+ left: 0;
351
+ }
352
+ .main {
353
+ width: 100%;
354
+ left: 0;
355
+ }
356
+ .main.active {
357
+ left: 300px;
358
+ }
359
+ .cardBox {
360
+ grid-template-columns: repeat(2, 1fr);
361
+ }
362
+ }
363
+
364
+ @media (max-width: 768px) {
365
+ .details {
366
+ grid-template-columns: 1fr;
367
+ }
368
+ .recentOrders {
369
+ overflow-x: auto;
370
+ }
371
+ .status.inProgress {
372
+ white-space: nowrap;
373
+ }
374
+ }
375
+
376
+ @media (max-width: 480px) {
377
+ .cardBox {
378
+ grid-template-columns: repeat(1, 1fr);
379
+ }
380
+ .cardHeader h2 {
381
+ font-size: 20px;
382
+ }
383
+ .user {
384
+ min-width: 40px;
385
+ }
386
+ .navigation {
387
+ width: 100%;
388
+ left: -100%;
389
+ z-index: 1000;
390
+ }
391
+ .navigation.active {
392
+ width: 100%;
393
+ left: 0;
394
+ }
395
+ .toggle {
396
+ z-index: 10001;
397
+ }
398
+ .main.active .toggle {
399
+ color: #fff;
400
+ position: fixed;
401
+ right: 0;
402
+ left: initial;
403
+ }
404
+ }
405
+
static/css/dashboard-layout-data-anak.css ADDED
@@ -0,0 +1,455 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* =========== Google Fonts ============ */
2
+ @import url("https://fonts.googleapis.com/css2?family=Ubuntu:wght@300;400;500;700&display=swap");
3
+
4
+ /* =============== Globals ============== */
5
+ * {
6
+ font-family: "Ubuntu", sans-serif;
7
+ margin: 0;
8
+ padding: 0;
9
+ box-sizing: border-box;
10
+ }
11
+
12
+ :root {
13
+ --blue: #0c7178;
14
+ --white: #fff;
15
+ --gray: #f5f5f5;
16
+ --black1: #222;
17
+ --black2: #999;
18
+ }
19
+
20
+ body {
21
+ min-height: 100vh;
22
+ overflow-x: hidden;
23
+ }
24
+
25
+ .container {
26
+ position: relative;
27
+ width: 100%;
28
+ }
29
+
30
+ /* =============== Navigation ================ */
31
+ .navigation {
32
+ position: fixed;
33
+ width: 300px;
34
+ height: 100%;
35
+ background: var(--blue);
36
+ border-left: 10px solid var(--blue);
37
+ transition: 0.5s;
38
+ overflow: hidden;
39
+ }
40
+ .navigation.active {
41
+ width: 80px;
42
+ }
43
+
44
+ .navigation ul {
45
+ position: absolute;
46
+ top: 0;
47
+ left: 0;
48
+ width: 100%;
49
+ }
50
+
51
+ .navigation ul li {
52
+ position: relative;
53
+ width: 100%;
54
+ list-style: none;
55
+ border-top-left-radius: 30px;
56
+ border-bottom-left-radius: 30px;
57
+ }
58
+
59
+ .navigation ul li:hover,
60
+ .navigation ul li.hovered {
61
+ background-color: var(--white);
62
+ }
63
+
64
+ .navigation ul li:nth-child(1) {
65
+ margin-bottom: 40px;
66
+ pointer-events: none;
67
+ }
68
+
69
+ .navigation ul li a {
70
+ position: relative;
71
+ display: block;
72
+ width: 100%;
73
+ display: flex;
74
+ text-decoration: none;
75
+ color: var(--white);
76
+ }
77
+ .navigation ul li:hover a,
78
+ .navigation ul li.hovered a {
79
+ color: var(--blue);
80
+ }
81
+
82
+ .navigation ul li a .icon {
83
+ position: relative;
84
+ display: block;
85
+ min-width: 60px;
86
+ height: 60px;
87
+ line-height: 75px;
88
+ text-align: center;
89
+ }
90
+ .navigation ul li a .icon ion-icon {
91
+ font-size: 1.75rem;
92
+ }
93
+
94
+ table {
95
+ border-collapse: collapse;
96
+ width: 100%;
97
+ }
98
+
99
+ th, td {
100
+ padding: 8px;
101
+ text-align: left;
102
+ border-bottom: 1px solid #ddd;
103
+ }
104
+
105
+ tr:nth-child(even) {
106
+ background-color: #f2f2f2;
107
+ }
108
+
109
+ th {
110
+ background-color: var(--blue);
111
+ color: white;
112
+ }
113
+
114
+ .details-button {
115
+ background-color: var(--blue);
116
+ border: none;
117
+ color: white;
118
+ padding: 8px 12px;
119
+ text-align: center;
120
+ text-decoration: none;
121
+ display: inline-block;
122
+ cursor: pointer;
123
+ font-size: 14px;
124
+ }
125
+
126
+ .details-button:hover {
127
+ background-color: #45a049;
128
+ }
129
+
130
+ .navigation ul li a .title {
131
+ position: relative;
132
+ display: block;
133
+ padding: 0 10px;
134
+ height: 60px;
135
+ line-height: 60px;
136
+ text-align: start;
137
+ white-space: nowrap;
138
+ }
139
+
140
+ /* --------- curve outside ---------- */
141
+ .navigation ul li:hover a::before,
142
+ .navigation ul li.hovered a::before {
143
+ content: "";
144
+ position: absolute;
145
+ right: 0;
146
+ top: -50px;
147
+ width: 50px;
148
+ height: 50px;
149
+ background-color: transparent;
150
+ border-radius: 50%;
151
+ box-shadow: 35px 35px 0 10px var(--white);
152
+ pointer-events: none;
153
+ }
154
+ .navigation ul li:hover a::after,
155
+ .navigation ul li.hovered a::after {
156
+ content: "";
157
+ position: absolute;
158
+ right: 0;
159
+ bottom: -50px;
160
+ width: 50px;
161
+ height: 50px;
162
+ background-color: transparent;
163
+ border-radius: 50%;
164
+ box-shadow: 35px -35px 0 10px var(--white);
165
+ pointer-events: none;
166
+ }
167
+
168
+ /* ===================== Main ===================== */
169
+ .main {
170
+ position: absolute;
171
+ width: calc(100% - 300px);
172
+ left: 300px;
173
+ min-height: 100vh;
174
+ background: var(--white);
175
+ transition: 0.5s;
176
+ }
177
+ .main.active {
178
+ width: calc(100% - 80px);
179
+ left: 80px;
180
+ }
181
+
182
+ .topbar {
183
+ width: 100%;
184
+ height: 60px;
185
+ display: flex;
186
+ justify-content: space-between;
187
+ align-items: center;
188
+ padding: 0 10px;
189
+ }
190
+
191
+ .toggle {
192
+ position: relative;
193
+ width: 60px;
194
+ height: 60px;
195
+ display: flex;
196
+ justify-content: center;
197
+ align-items: center;
198
+ font-size: 2.5rem;
199
+ cursor: pointer;
200
+ }
201
+
202
+ .search {
203
+ position: relative;
204
+ width: 400px;
205
+ margin: 0 10px;
206
+ }
207
+
208
+ .search label {
209
+ position: relative;
210
+ width: 100%;
211
+ }
212
+
213
+ .search label input {
214
+ width: 100%;
215
+ height: 40px;
216
+ border-radius: 40px;
217
+ padding: 5px 20px;
218
+ padding-left: 35px;
219
+ font-size: 18px;
220
+ outline: none;
221
+ border: 1px solid var(--black2);
222
+ }
223
+
224
+ .search label ion-icon {
225
+ position: absolute;
226
+ top: 0;
227
+ left: 10px;
228
+ font-size: 1.2rem;
229
+ }
230
+
231
+ .user {
232
+ position: relative;
233
+ width: 40px;
234
+ height: 40px;
235
+ border-radius: 50%;
236
+ overflow: hidden;
237
+ cursor: pointer;
238
+ }
239
+
240
+ .detailsPuskesmas {
241
+ color: #999;
242
+ font-size: 1.1rem;
243
+ margin-top: 5px;
244
+ }
245
+
246
+ /* ======================= Cards ====================== */
247
+ .cardBox {
248
+ position: relative;
249
+ width: 198%;
250
+ padding: 20px;
251
+ display: grid;
252
+ grid-template-columns: repeat(4, 1fr);
253
+ grid-gap: 30px;
254
+ }
255
+
256
+ .cardBox .card {
257
+ position: relative;
258
+ background: var(--white);
259
+ padding: 30px;
260
+ border-radius: 20px;
261
+ display: flex;
262
+ justify-content: space-between;
263
+ cursor: pointer;
264
+ box-shadow: 0 7px 25px rgba(0, 0, 0, 0.08);
265
+ }
266
+
267
+ .cardBox .card .numbers {
268
+ position: relative;
269
+ font-weight: 500;
270
+ font-size: 2.5rem;
271
+ color: var(--blue);
272
+ }
273
+
274
+ .cardBox .card .cardName {
275
+ color: var(--black2);
276
+ font-size: 1.1rem;
277
+ margin-top: 5px;
278
+ }
279
+
280
+ .cardBox .card .iconBx {
281
+ font-size: 3.5rem;
282
+ color: var(--black2);
283
+ }
284
+
285
+ .cardBox .card:hover {
286
+ background: var(--blue);
287
+ }
288
+ .cardBox .card:hover .numbers,
289
+ .cardBox .card:hover .cardName,
290
+ .cardBox .card:hover .iconBx {
291
+ color: var(--white);
292
+ }
293
+
294
+ /* ================== Order Details List ============== */
295
+ .details {
296
+ position: relative;
297
+ width: 150%;
298
+ padding: 20px;
299
+ display: grid;
300
+ grid-template-columns: 2fr 1fr;
301
+ grid-gap: 30px;
302
+ /* margin-top: 10px; */
303
+ }
304
+
305
+ /* charts */
306
+ .graphBox
307
+ {
308
+ margin: 0 30px 0 20px;
309
+ /* position: relative; */
310
+ padding: 20px;
311
+ width: calc(100% - 50px);
312
+ /* height: 200px; */
313
+ padding: 20px;
314
+ box-shadow: 0 7px 25px rgba(0,0,0,0.08);
315
+ border-radius: 20px;
316
+ /* display: grid; */
317
+ /* grid-template-columns: 1fr 2fr; */
318
+ /* grid-gap: 30px; */
319
+ }
320
+
321
+ .graphBox .box
322
+ {
323
+ position: relative;
324
+ background: #white;
325
+ width: 100%;
326
+ height: 2
327
+ padding: 20px;
328
+ box-shadow: 0 7px 25px rgba(0,0,0,0.08);
329
+ border-radius: 20px;
330
+ }
331
+
332
+ .details .chart {
333
+ position: relative;
334
+ display: grid;
335
+ min-height: 500px;
336
+ background: var(--white);
337
+ padding: 20px;
338
+ box-shadow: 0 7px 25px rgba(0, 0, 0, 0.08);
339
+ border-radius: 20px;
340
+ }
341
+
342
+ .details .cardHeader {
343
+ display: flex;
344
+ justify-content: space-between;
345
+ align-items: flex-start;
346
+ }
347
+ .cardHeader h2 {
348
+ font-weight: 600;
349
+ color: var(--blue);
350
+ }
351
+ .cardHeader .btn {
352
+ position: relative;
353
+ padding: 5px 10px;
354
+ background: var(--blue);
355
+ text-decoration: none;
356
+ color: var(--white);
357
+ border-radius: 6px;
358
+ }
359
+
360
+ .details table {
361
+ width: 100%;
362
+ border-collapse: collapse;
363
+ margin-top: 10px;
364
+ }
365
+ .details table thead td {
366
+ font-weight: 600;
367
+ }
368
+ /* ====================== Responsive Design ========================== */
369
+ @media (max-width: 991px) {
370
+
371
+ .graphBox{
372
+ grid-template-columns: 1fr;
373
+ height: auto;
374
+ }
375
+ .navigation {
376
+ left: -300px;
377
+ }
378
+ .navigation.active {
379
+ width: 300px;
380
+ left: 0;
381
+ }
382
+ .main {
383
+ width: 100%;
384
+ left: 0;
385
+ }
386
+ .main.active {
387
+ left: 300px;
388
+ }
389
+ .cardBox {
390
+ grid-template-columns: repeat(2, 1fr);
391
+ }
392
+ }
393
+
394
+ @media (max-width: 768px) {
395
+ .details {
396
+ grid-template-columns: 1fr;
397
+ }
398
+ .recentOrders {
399
+ overflow-x: auto;
400
+ }
401
+ .status.inProgress {
402
+ white-space: nowrap;
403
+ }
404
+ }
405
+
406
+ @media (max-width: 480px) {
407
+ .cardBox {
408
+ grid-template-columns: repeat(1, 1fr);
409
+ }
410
+ .cardHeader h2 {
411
+ font-size: 20px;
412
+ }
413
+ .user {
414
+ min-width: 40px;
415
+ }
416
+ .navigation {
417
+ width: 100%;
418
+ left: -100%;
419
+ z-index: 1000;
420
+ }
421
+ .navigation.active {
422
+ width: 100%;
423
+ left: 0;
424
+ }
425
+ .toggle {
426
+ z-index: 10001;
427
+ }
428
+ .main.active .toggle {
429
+ color: #fff;
430
+ position: fixed;
431
+ right: 0;
432
+ left: initial;
433
+ }
434
+ }
435
+
436
+ .search-container {
437
+ position: relative;
438
+ display: inline-block;
439
+ padding-bottom: 10px;
440
+ }
441
+
442
+ .search-input {
443
+ padding: 10px;
444
+ border: 1px solid #ccc;
445
+ border-radius: 4px;
446
+ }
447
+
448
+ .search-button {
449
+ float: right;
450
+ padding: 10px;
451
+ background-color: #ccc;
452
+ border: none;
453
+ border-radius: 4px;
454
+ cursor: pointer;
455
+ }
static/css/dashboard-layout-kategori.css ADDED
File without changes
static/css/dashboard-style.css ADDED
@@ -0,0 +1,404 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* =========== Google Fonts ============ */
2
+ @import url("https://fonts.googleapis.com/css2?family=Ubuntu:wght@300;400;500;700&display=swap");
3
+
4
+ /* =============== Globals ============== */
5
+ * {
6
+ font-family: "Ubuntu", sans-serif;
7
+ margin: 0;
8
+ padding: 0;
9
+ box-sizing: border-box;
10
+ }
11
+
12
+ :root {
13
+ --blue: #0c7178;
14
+ --white: #fff;
15
+ --gray: #f5f5f5;
16
+ --black1: #222;
17
+ --black2: #999;
18
+ }
19
+
20
+ body {
21
+ min-height: 100vh;
22
+ overflow-x: hidden;
23
+ }
24
+
25
+ .container {
26
+ position: relative;
27
+ width: 100%;
28
+ }
29
+
30
+ /* =============== Navigation ================ */
31
+ .navigation {
32
+ position: fixed;
33
+ width: 300px;
34
+ height: 100%;
35
+ background: var(--blue);
36
+ border-left: 10px solid var(--blue);
37
+ transition: 0.5s;
38
+ overflow: hidden;
39
+ }
40
+ .navigation.active {
41
+ width: 80px;
42
+ }
43
+
44
+ .navigation ul {
45
+ position: absolute;
46
+ top: 0;
47
+ left: 0;
48
+ width: 100%;
49
+ }
50
+
51
+ .navigation ul li {
52
+ position: relative;
53
+ width: 100%;
54
+ list-style: none;
55
+ border-top-left-radius: 30px;
56
+ border-bottom-left-radius: 30px;
57
+ }
58
+
59
+ .navigation ul li:hover,
60
+ .navigation ul li.hovered {
61
+ background-color: var(--white);
62
+ }
63
+
64
+ .navigation ul li:nth-child(1) {
65
+ margin-bottom: 40px;
66
+ pointer-events: none;
67
+ }
68
+
69
+ .navigation ul li a {
70
+ position: relative;
71
+ display: block;
72
+ width: 100%;
73
+ display: flex;
74
+ text-decoration: none;
75
+ color: var(--white);
76
+ }
77
+ .navigation ul li:hover a,
78
+ .navigation ul li.hovered a {
79
+ color: var(--blue);
80
+ }
81
+
82
+ .navigation ul li a .icon {
83
+ position: relative;
84
+ display: block;
85
+ min-width: 60px;
86
+ height: 60px;
87
+ line-height: 75px;
88
+ text-align: center;
89
+ }
90
+ .navigation ul li a .icon ion-icon {
91
+ font-size: 1.75rem;
92
+ }
93
+
94
+ .navigation ul li a .title {
95
+ position: relative;
96
+ display: block;
97
+ padding: 0 10px;
98
+ height: 60px;
99
+ line-height: 60px;
100
+ text-align: start;
101
+ white-space: nowrap;
102
+ }
103
+
104
+ /* --------- curve outside ---------- */
105
+ .navigation ul li:hover a::before,
106
+ .navigation ul li.hovered a::before {
107
+ content: "";
108
+ position: absolute;
109
+ right: 0;
110
+ top: -50px;
111
+ width: 50px;
112
+ height: 50px;
113
+ background-color: transparent;
114
+ border-radius: 50%;
115
+ box-shadow: 35px 35px 0 10px var(--white);
116
+ pointer-events: none;
117
+ }
118
+ .navigation ul li:hover a::after,
119
+ .navigation ul li.hovered a::after {
120
+ content: "";
121
+ position: absolute;
122
+ right: 0;
123
+ bottom: -50px;
124
+ width: 50px;
125
+ height: 50px;
126
+ background-color: transparent;
127
+ border-radius: 50%;
128
+ box-shadow: 35px -35px 0 10px var(--white);
129
+ pointer-events: none;
130
+ }
131
+
132
+ /* ===================== Main ===================== */
133
+ .main {
134
+ position: absolute;
135
+ width: calc(100% - 300px);
136
+ left: 300px;
137
+ min-height: 100vh;
138
+ background: var(--white);
139
+ transition: 0.5s;
140
+ }
141
+ .main.active {
142
+ width: calc(100% - 80px);
143
+ left: 80px;
144
+ }
145
+
146
+ .topbar {
147
+ width: 100%;
148
+ height: 60px;
149
+ display: flex;
150
+ justify-content: space-between;
151
+ align-items: center;
152
+ padding: 0 10px;
153
+ }
154
+
155
+ .toggle {
156
+ position: relative;
157
+ width: 60px;
158
+ height: 60px;
159
+ display: flex;
160
+ justify-content: center;
161
+ align-items: center;
162
+ font-size: 2.5rem;
163
+ cursor: pointer;
164
+ }
165
+
166
+ .search {
167
+ position: relative;
168
+ width: 400px;
169
+ margin: 0 10px;
170
+ }
171
+
172
+ .search label {
173
+ position: relative;
174
+ width: 100%;
175
+ }
176
+
177
+ .search label input {
178
+ width: 100%;
179
+ height: 40px;
180
+ border-radius: 40px;
181
+ padding: 5px 20px;
182
+ padding-left: 35px;
183
+ font-size: 18px;
184
+ outline: none;
185
+ border: 1px solid var(--black2);
186
+ }
187
+
188
+ .search label ion-icon {
189
+ position: absolute;
190
+ top: 0;
191
+ left: 10px;
192
+ font-size: 1.2rem;
193
+ }
194
+
195
+ .user {
196
+ position: relative;
197
+ width: 40px;
198
+ height: 40px;
199
+ border-radius: 50%;
200
+ overflow: hidden;
201
+ cursor: pointer;
202
+ }
203
+
204
+ .detailsPuskesmas {
205
+ color: #999;
206
+ font-size: 1.1rem;
207
+ margin-top: 5px;
208
+ }
209
+
210
+ /* ======================= Cards ====================== */
211
+ .cardBox {
212
+ position: relative;
213
+ width: 198%;
214
+ padding: 20px;
215
+ display: grid;
216
+ grid-template-columns: repeat(4, 1fr);
217
+ grid-gap: 30px;
218
+ }
219
+
220
+ .cardBox .card {
221
+ position: relative;
222
+ background: var(--white);
223
+ padding: 30px;
224
+ border-radius: 20px;
225
+ display: flex;
226
+ justify-content: space-between;
227
+ cursor: pointer;
228
+ box-shadow: 0 7px 25px rgba(0, 0, 0, 0.08);
229
+ }
230
+
231
+ .cardBox .card .numbers {
232
+ position: relative;
233
+ font-weight: 500;
234
+ font-size: 2.5rem;
235
+ color: var(--blue);
236
+ }
237
+
238
+ .cardBox .card .cardName {
239
+ color: var(--black2);
240
+ font-size: 1.1rem;
241
+ margin-top: 5px;
242
+ }
243
+
244
+ .cardBox .card .iconBx {
245
+ font-size: 3.5rem;
246
+ color: var(--black2);
247
+ }
248
+
249
+ .cardBox .card:hover {
250
+ background: var(--blue);
251
+ }
252
+ .cardBox .card:hover .numbers,
253
+ .cardBox .card:hover .cardName,
254
+ .cardBox .card:hover .iconBx {
255
+ color: var(--white);
256
+ }
257
+
258
+ /* ================== Order Details List ============== */
259
+ .details {
260
+ position: relative;
261
+ width: 150%;
262
+ padding: 20px;
263
+ display: grid;
264
+ grid-template-columns: 2fr 1fr;
265
+ grid-gap: 30px;
266
+ /* margin-top: 10px; */
267
+ }
268
+
269
+ /* charts */
270
+
271
+
272
+ .details-button:hover {
273
+ background-color: #45a049;
274
+ }
275
+
276
+ .graphBox
277
+ {
278
+ margin: 0 30px 0 20px;
279
+ /* position: relative; */
280
+ padding: 20px;
281
+ width: calc(100% - 50px);
282
+ /* height: 200px; */
283
+ padding: 20px;
284
+ box-shadow: 0 7px 25px rgba(0,0,0,0.08);
285
+ border-radius: 20px;
286
+ /* display: grid; */
287
+ /* grid-template-columns: 1fr 2fr; */
288
+ /* grid-gap: 30px; */
289
+ }
290
+
291
+ .graphBox .box
292
+ {
293
+ position: relative;
294
+ background: #white;
295
+ width: 100%;
296
+ height: 2
297
+ padding: 20px;
298
+ box-shadow: 0 7px 25px rgba(0,0,0,0.08);
299
+ border-radius: 20px;
300
+ }
301
+
302
+ .details .chart {
303
+ position: relative;
304
+ display: grid;
305
+ min-height: 500px;
306
+ background: var(--white);
307
+ padding: 20px;
308
+ box-shadow: 0 7px 25px rgba(0, 0, 0, 0.08);
309
+ border-radius: 20px;
310
+ }
311
+
312
+ .details .cardHeader {
313
+ display: flex;
314
+ justify-content: space-between;
315
+ align-items: flex-start;
316
+ }
317
+ .cardHeader h2 {
318
+ font-weight: 600;
319
+ color: var(--blue);
320
+ }
321
+ .cardHeader .btn {
322
+ position: relative;
323
+ padding: 5px 10px;
324
+ background: var(--blue);
325
+ text-decoration: none;
326
+ color: var(--white);
327
+ border-radius: 6px;
328
+ }
329
+
330
+ .details table {
331
+ width: 100%;
332
+ border-collapse: collapse;
333
+ margin-top: 10px;
334
+ }
335
+ .details table thead td {
336
+ font-weight: 600;
337
+ }
338
+ /* ====================== Responsive Design ========================== */
339
+ @media (max-width: 991px) {
340
+
341
+ .graphBox{
342
+ grid-template-columns: 1fr;
343
+ height: auto;
344
+ }
345
+ .navigation {
346
+ left: -300px;
347
+ }
348
+ .navigation.active {
349
+ width: 300px;
350
+ left: 0;
351
+ }
352
+ .main {
353
+ width: 100%;
354
+ left: 0;
355
+ }
356
+ .main.active {
357
+ left: 300px;
358
+ }
359
+ .cardBox {
360
+ grid-template-columns: repeat(2, 1fr);
361
+ }
362
+ }
363
+
364
+ @media (max-width: 768px) {
365
+ .details {
366
+ grid-template-columns: 1fr;
367
+ }
368
+ .recentOrders {
369
+ overflow-x: auto;
370
+ }
371
+ .status.inProgress {
372
+ white-space: nowrap;
373
+ }
374
+ }
375
+
376
+ @media (max-width: 480px) {
377
+ .cardBox {
378
+ grid-template-columns: repeat(1, 1fr);
379
+ }
380
+ .cardHeader h2 {
381
+ font-size: 20px;
382
+ }
383
+ .user {
384
+ min-width: 40px;
385
+ }
386
+ .navigation {
387
+ width: 100%;
388
+ left: -100%;
389
+ z-index: 1000;
390
+ }
391
+ .navigation.active {
392
+ width: 100%;
393
+ left: 0;
394
+ }
395
+ .toggle {
396
+ z-index: 10001;
397
+ }
398
+ .main.active .toggle {
399
+ color: #fff;
400
+ position: fixed;
401
+ right: 0;
402
+ left: initial;
403
+ }
404
+ }
static/css/index.css ADDED
@@ -0,0 +1,235 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ :root{
2
+ --primary: #006400 ;
3
+ --bg: #fff;
4
+ }
5
+
6
+ *{
7
+ margin: 0;
8
+ padding: 0;
9
+ box-sizing: border-box;
10
+ outline: none;
11
+ border: none;
12
+ }
13
+
14
+ body {
15
+ font-family: 'Poppins', sans-serif;
16
+ background-color: var(--bg);
17
+ color:#2F4F4F ;
18
+ min-height: 3000px;
19
+ }
20
+
21
+
22
+ .navbar {
23
+ display: flex;
24
+ justify-content: space-between;
25
+ align-items: center;
26
+ padding: 1.4rem 7%;
27
+ background-color: #8FBC8F;
28
+ position: fixed;
29
+ top: 0;
30
+ left: 0;
31
+ right: 0;
32
+ z-index: 9999;
33
+ }
34
+
35
+ .navbar .navbar-logo {
36
+ text-decoration: none;
37
+ font-size: 2rem;
38
+ font-weight: 700;
39
+ color: #fff;
40
+ font-style: italic;
41
+ }
42
+
43
+ .navbar .navbar-logo span{
44
+ color: var(--primary);
45
+ }
46
+
47
+
48
+ .navbar .navbar-nav a{
49
+ color: #fff;
50
+ display: inline-block;
51
+ font-size: 1rem;
52
+ margin: 0 1rem;
53
+ text-decoration: none;
54
+ }
55
+
56
+ .navbar .navbar-nav a:hover {
57
+ color: #DAA520;
58
+ }
59
+
60
+ .navbar .navbar-nav a::after {
61
+ content: '';
62
+ display: block;
63
+ padding-bottom: 0.5rem;
64
+ border-bottom: 0.1rem solid var(--primary);
65
+ transform: scaleX(0);
66
+ transition: 0.2s linear;
67
+ }
68
+
69
+ .navbar .navbar-nav a:hover::after{
70
+ transform: scaleX(0.5);
71
+ }
72
+
73
+ .navbar .navbar-extra a {
74
+ color: #fff;
75
+ margin: 0 0.5rem;
76
+ }
77
+
78
+ .navbar .navbar-extra a:hover {
79
+ color: var(--primary);
80
+ }
81
+
82
+ #hamburger-menu{
83
+ display: none;
84
+ }
85
+
86
+ .hero {
87
+ min-height: 100vh;
88
+ display: flex;
89
+ align-items: center;
90
+ background-color: #fff;
91
+ background-repeat: no-repeat;
92
+ background-size: cover;
93
+ background-position: center;
94
+ position: relative;
95
+ }
96
+
97
+ .hero .content {
98
+ padding: 1.4rem 7%;
99
+ max-width: 60rem;
100
+ }
101
+
102
+ .hero .content h1{
103
+ font-size: 4em;
104
+ color: black;
105
+ text-shadow: 1px 1px 3px rgba(1, 1, 3, 0.5);
106
+ line-height: 1.2;
107
+ }
108
+
109
+ .hero .content h1 span{
110
+ color: var(--primary);
111
+ }
112
+
113
+ .hero .content p{
114
+ font-size: 1.4rem;
115
+ margin-top: 0.6rem;
116
+ line-height: 1.4;
117
+ }
118
+
119
+ .hero .content .cta{
120
+ margin-top: 1rem;
121
+ display: inline-block;
122
+ padding: 1rem 3rem;
123
+ font-size: 1.4rem;
124
+ text-decoration: none;
125
+ color: #fff;
126
+ background-color: var(--primary);
127
+ border-radius: 2rem;
128
+ box-shadow: 1px 1px 3px rgba(1, 1, 3, 0.5)
129
+ }
130
+
131
+ .about,
132
+ .imt {
133
+ padding: 8rem 7% 1.4rem;
134
+ }
135
+
136
+ .about h2,
137
+ .imt h2{
138
+ text-align: center;
139
+ font-size: 2.6rem;
140
+ margin-bottom: 3rem;
141
+ }
142
+
143
+ .about .row,
144
+ .imt .row{
145
+ display: flex;
146
+ }
147
+
148
+ .about .row .about-img,
149
+ .imt .row .imt-img {
150
+ flex: 1 1 45rem;
151
+
152
+ }
153
+
154
+ .about .row .about-img img,
155
+ .imt .row .imt-img img {
156
+ width: 100%;
157
+ position: center;
158
+ }
159
+
160
+
161
+ .about .row .content,
162
+ .imt .row .content{
163
+ flex: 1 1 35rem;
164
+ padding: 0 1rem;
165
+ }
166
+
167
+
168
+ .about .row .content h3,
169
+ .imt .row .content h3{
170
+ font-size: 1.5rem;
171
+ margin-bottom: 1rem;
172
+ }
173
+
174
+ .about .row .content p,
175
+ .about .row .content p{
176
+ margin-bottom: 0.10rem;
177
+ font-size: 1rem;
178
+ line-height: 1.5;
179
+
180
+ }
181
+
182
+
183
+ @media (max-width: 1366px){
184
+ html {
185
+ font-size: 80%;
186
+ }
187
+ }
188
+
189
+ @media (max-width: 758px){
190
+ html {
191
+ font-size: 70.5%;
192
+ }
193
+
194
+
195
+ #hamburger-menu {
196
+ display: inline-block;
197
+ }
198
+
199
+ .navbar .navbar-nav {
200
+ position: absolute;
201
+ top: 100%;
202
+ right: -100%;
203
+ background-color: #2F4F4F ;
204
+ width: 30rem;
205
+ height: 100vh;
206
+ transition: 0.3s;
207
+ }
208
+
209
+ .navbar .navbar-nav.active {
210
+ right: 0;
211
+ }
212
+
213
+ .navbar .navbar-nav a{
214
+ color: var(--bg);
215
+ display: block;
216
+ margin: 1.5rem;
217
+ padding: 0.5rem;
218
+ font-size: 1.5rem;
219
+ }
220
+
221
+ .navbar .navbar-nav a::after {
222
+ transform-origin: 0 0;
223
+ }
224
+
225
+ .navbar .navbar-nav a:hover::after {
226
+ transform: scaleX(0.2);
227
+ }
228
+
229
+
230
+
231
+ @media (max-width: 450px){
232
+ html {
233
+ font-size: 55%;
234
+ }
235
+ }
static/css/input_data.css ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ body {
2
+ font-family: Arial, sans-serif;
3
+ background-color: #f4f4f4;
4
+ margin: 0;
5
+ padding: 0;
6
+ }
7
+
8
+ .container {
9
+ max-width: 500px;
10
+ margin: 50px auto;
11
+ padding: 20px;
12
+ background-color: #fff;
13
+ border-radius: 5px;
14
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
15
+ }
16
+
17
+ h2 {
18
+ text-align: center;
19
+ margin-bottom: 20px;
20
+ color: #0c7178;
21
+ }
22
+
23
+ .form-group {
24
+ margin-bottom: 20px;
25
+ }
26
+
27
+ label {
28
+ display: block;
29
+ font-weight: bold;
30
+ margin-bottom: 5px;
31
+ }
32
+
33
+ input[type="text"],
34
+ input[type="date"],
35
+ input[type="password"] {
36
+ width: 100%;
37
+ padding: 10px;
38
+ border: 1px solid #ccc;
39
+ border-radius: 4px;
40
+ }
41
+
42
+ .form-check {
43
+ margin-top: 10px;
44
+ }
45
+
46
+ .btn {
47
+ width: 100%;
48
+ padding: 10px;
49
+ background-color: #0c7178;
50
+ border: none;
51
+ color: #fff;
52
+ font-weight: bold;
53
+ cursor: pointer;
54
+ transition: background-color 0.3s ease;
55
+ }
56
+
57
+ .btn:hover {
58
+ background-color: #0a5d62;
59
+ }
60
+
61
+ .alert {
62
+ margin-top: 20px;
63
+ padding: 10px;
64
+ border-radius: 4px;
65
+ }
66
+
67
+ .alert-danger {
68
+ background-color: #f8d7da;
69
+ color: #721c24;
70
+ border: 1px solid #f5c6cb;
71
+ }
72
+
73
+ .alert-success {
74
+ background-color: #d4edda;
75
+ color: #155724;
76
+ border: 1px solid #c3e6cb;
77
+ }
78
+
static/css/login.css ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ body {
3
+ background: linear-gradient(90deg, #C7C5F4, #8FBC8F)
4
+ ;
5
+ }
6
+ .login-form {
7
+ background-color: #fff;
8
+ border-radius: 10px;
9
+ padding: 30px;
10
+ box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.1);
11
+ max-width: 500px;
12
+ margin: 0 auto;
13
+ margin-top: 100px;
14
+ font-family: Arial, sans-serif;
15
+ font-size: 14px;
16
+ color: #333;
17
+ line-height: 1.5;
18
+ letter-spacing: 0.5px;
19
+ }
20
+ .login-form h2 {
21
+ text-align: center;
22
+ margin-bottom: 30px;
23
+ font-weight: bold;
24
+ font-size: 24px;
25
+ color: #333;
26
+ text-transform: uppercase;
27
+ letter-spacing: 1px;
28
+ }
29
+ .form-group label {
30
+ font-weight: bold;
31
+ color: #333;
32
+ text-transform: uppercase;
33
+ letter-spacing: 0.5px;
34
+ }
35
+ .form-control {
36
+ padding: 10px 12px;
37
+ font-size: 14px;
38
+ border-radius: 5px;
39
+ border: 1px solid #ccc;
40
+ background-color: #f5f5f5;
41
+ color: #333;
42
+ box-shadow: none;
43
+ margin-bottom: 20px;
44
+ }
45
+ .form-control:focus {
46
+ border-color: #007bff;
47
+ box-shadow: none;
48
+ }
49
+ .btn-primary {
50
+ background-color: #007bff;
51
+ border-color: #007bff;
52
+ padding: 12px 20px;
53
+ font-size: 14px;
54
+ font-weight: bold;
55
+ text-transform: uppercase;
56
+ letter-spacing: 1px;
57
+ }
58
+ .btn-primary:hover,
59
+ .btn-primary:focus {
60
+ background-color: #0062cc;
61
+ border-color: #0062cc;
62
+ }
static/css/register.css ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ body {
3
+ background: linear-gradient(90deg, #C7C5F4, #8FBC8F)
4
+ ;
5
+ }
6
+ .login-form {
7
+ background-color: #fff;
8
+ border-radius: 10px;
9
+ padding: 30px;
10
+ box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.1);
11
+ max-width: 500px;
12
+ margin: 0 auto;
13
+ margin-top: 100px;
14
+ font-family: Arial, sans-serif;
15
+ font-size: 14px;
16
+ color: #333;
17
+ line-height: 1.5;
18
+ letter-spacing: 0.5px;
19
+ }
20
+ .login-form h2 {
21
+ text-align: center;
22
+ margin-bottom: 30px;
23
+ font-weight: bold;
24
+ font-size: 24px;
25
+ color: #333;
26
+ text-transform: uppercase;
27
+ letter-spacing: 1px;
28
+ }
29
+ .form-group label {
30
+ font-weight: bold;
31
+ color: #333;
32
+ text-transform: uppercase;
33
+ letter-spacing: 0.5px;
34
+ }
35
+ .form-control {
36
+ padding: 10px 12px;
37
+ font-size: 14px;
38
+ border-radius: 5px;
39
+ border: 1px solid #ccc;
40
+ background-color: #f5f5f5;
41
+ color: #333;
42
+ box-shadow: none;
43
+ margin-bottom: 20px;
44
+ }
45
+ .form-control:focus {
46
+ border-color: #007bff;
47
+ box-shadow: none;
48
+ }
49
+ .btn-primary {
50
+ background-color: #007bff;
51
+ border-color: #007bff;
52
+ padding: 12px 20px;
53
+ font-size: 14px;
54
+ font-weight: bold;
55
+ text-transform: uppercase;
56
+ letter-spacing: 1px;
57
+ }
58
+ .btn-primary:hover,
59
+ .btn-primary:focus {
60
+ background-color: #0062cc;
61
+ border-color: #0062cc;
62
+ }
static/css/registrasi.css ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* registrasi */
2
+
3
+ body {
4
+ background: linear-gradient(90deg, #C7C5F4, #8FBC8F)
5
+ ;
6
+ }
7
+ .login-form {
8
+ background-color: #fff;
9
+ border-radius: 10px;
10
+ padding: 30px;
11
+ box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.1);
12
+ max-width: 500px;
13
+ margin: 0 auto;
14
+ margin-top: 100px;
15
+ margin-bottom: 100px;
16
+ font-family: Arial, sans-serif;
17
+ font-size: 14px;
18
+ color: #333;
19
+ line-height: 1.5;
20
+ letter-spacing: 0.5px;
21
+ }
22
+ .login-form h2 {
23
+ text-align: center;
24
+ margin-bottom: 30px;
25
+ font-weight: bold;
26
+ font-size: 24px;
27
+ color: #333;
28
+ text-transform: uppercase;
29
+ letter-spacing: 1px;
30
+ }
31
+ .form-group label {
32
+ font-weight: bold;
33
+ color: #333;
34
+ text-transform: uppercase;
35
+ letter-spacing: 0.5px;
36
+ }
37
+ .form-control {
38
+ padding: 10px 12px;
39
+ font-size: 14px;
40
+ border-radius: 5px;
41
+ border: 1px solid #ccc;
42
+ background-color: #f5f5f5;
43
+ color: #333;
44
+ box-shadow: none;
45
+ margin-bottom: 20px;
46
+ }
47
+ .form-control:focus {
48
+ border-color: #007bff;
49
+ box-shadow: none;
50
+ }
51
+ .btn-primary {
52
+ background-color: #007bff;
53
+ border-color: #007bff;
54
+ padding: 12px 20px;
55
+ font-size: 14px;
56
+ font-weight: bold;
57
+ text-transform: uppercase;
58
+ letter-spacing: 1px;
59
+ }
60
+ .btn-primary:hover,
61
+ .btn-primary:focus {
62
+ background-color: #0062cc;
63
+ border-color: #0062cc;
64
+ }
static/image/avatar.svg ADDED
static/image/bg.svg ADDED
static/image/gambar.jpg ADDED
static/image/image.jpg ADDED
static/image/image1.png ADDED
static/image/wave.png ADDED
static/js/dashboard-main.js ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // add hovered class to selected list item
2
+ let list = document.querySelectorAll(".navigation li");
3
+
4
+ function activeLink() {
5
+ list.forEach((item) => {
6
+ item.classList.remove("hovered");
7
+ });
8
+ this.classList.add("hovered");
9
+ }
10
+
11
+ list.forEach((item) => item.addEventListener("mouseover", activeLink));
12
+
13
+ // Menu Toggle
14
+ let toggle = document.querySelector(".toggle");
15
+ let navigation = document.querySelector(".navigation");
16
+ let main = document.querySelector(".main");
17
+
18
+ toggle.onclick = function () {
19
+ navigation.classList.toggle("active");
20
+ main.classList.toggle("active");
21
+ };
static/js/dashboard-my_chart.js ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ var ctx = document.getElementById('myChart').getContext('2d');
2
+ var myChart = new Chart(ctx, {
3
+ type: 'line',
4
+ data: {
5
+ labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
6
+ datasets: [{
7
+ label: '# of Votes',
8
+ data: [12, 19, 3, 5, 2, 3],
9
+ backgroundColor: [
10
+ 'rgba(255, 99, 132, 0.2)',
11
+ 'rgba(54, 162, 235, 0.2)',
12
+ 'rgba(255, 206, 86, 0.2)',
13
+ 'rgba(75, 192, 192, 0.2)',
14
+ 'rgba(153, 102, 255, 0.2)',
15
+ 'rgba(255, 159, 64, 0.2)'
16
+ ],
17
+ borderColor: [
18
+ 'rgba(255, 99, 132, 1)',
19
+ 'rgba(54, 162, 235, 1)',
20
+ 'rgba(255, 206, 86, 1)',
21
+ 'rgba(75, 192, 192, 1)',
22
+ 'rgba(153, 102, 255, 1)',
23
+ 'rgba(255, 159, 64, 1)'
24
+ ],
25
+ borderWidth: 1
26
+ }]
27
+ },
28
+ options: {
29
+ scales: {
30
+ responsive: true,
31
+ }
32
+ }
33
+ });