From 80af18808723e2fc3122f0d084f928cf4008b67e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B0=D1=81=D0=B8=D0=BB=D1=8C=20=D0=A1=D0=B2=D1=96?= =?UTF-8?q?=D0=B4=D1=80=D1=96=D0=BA?= Date: Thu, 29 Jun 2023 00:29:49 +0300 Subject: [PATCH] add stable version --- __pycache__/app.cpython-310.pyc | Bin 982 -> 1073 bytes __pycache__/routes.cpython-310.pyc | Bin 360 -> 295 bytes app.py | 15 +- components/k2test/.idea/.gitignore | 3 - components/k2test/.idea/gittest.iml | 10 -- .../.idea/inspectionProfiles/profiles_settings.xml | 6 - components/k2test/.idea/misc.xml | 7 - components/k2test/.idea/modules.xml | 8 - components/k2test/.idea/vcs.xml | 6 - components/k2test/__init__.py | 1 - .../k2test/__pycache__/__init__.cpython-310.pyc | Bin 175 -> 0 bytes components/k2test/history.txt | 2 - components/k2test/k2test/__init__.py | 0 .../k2test/__pycache__/__init__.cpython-310.pyc | Bin 182 -> 0 bytes .../k2test/__pycache__/views.cpython-310.pyc | Bin 2067 -> 0 bytes .../k2test/languages/en/LC_MESSAGES/messages.mo | Bin 549 -> 0 bytes .../k2test/languages/en/LC_MESSAGES/messages.po | 4 - .../k2test/languages/uk/LC_MESSAGES/messages.mo | Bin 643 -> 0 bytes .../k2test/languages/uk/LC_MESSAGES/messages.po | 4 - components/k2test/k2test/templates/new2.html | 3 - components/k2test/k2test/views.py | 54 ------- components/k2test/reguirments-components.txt | 0 components/k2test/requirements.txt | 1 - components/k2test/setup.py | 15 -- db/database.db | Bin 36864 -> 36864 bytes k2/__pycache__/k2cfg.cpython-310.pyc | Bin 2781 -> 3072 bytes k2/__pycache__/k2obj.cpython-310.pyc | Bin 511 -> 528 bytes k2/__pycache__/k2rout.cpython-310.pyc | Bin 14779 -> 15840 bytes k2/k2cfg.py | 25 ++- k2/k2obj.py | 1 + k2/k2rout.py | 91 +++++++---- languages/babel_translation_directories.yml | 2 +- languages/en/LC_MESSAGES/messages.mo | Bin 841 -> 1077 bytes languages/en/LC_MESSAGES/messages.po | 17 +- languages/pl/LC_MESSAGES/messages.mo | Bin 903 -> 1139 bytes languages/pl/LC_MESSAGES/messages.po | 17 +- languages/uk/LC_MESSAGES/messages.mo | Bin 1011 -> 1285 bytes languages/uk/LC_MESSAGES/messages.po | 17 +- routes.py | 4 +- templates/base.html | 32 ---- templates/component-info-site.html | 86 ++++++++++ templates/component-info.html | 30 +++- templates/dashboard-add.html | 21 +-- templates/dashboard-list.html | 37 +---- templates/dashboard.html | 2 +- yml/admin_menu.yml | 106 ++++++++++++ yml/admin_menu_prav.yml | 180 +++++++++++++++++++++ yml/gruntcontrols.yml | 1 + yml/roles.yml | 6 +- yml/users.yml | 30 +++- 50 files changed, 579 insertions(+), 265 deletions(-) delete mode 100644 components/k2test/.idea/.gitignore delete mode 100644 components/k2test/.idea/gittest.iml delete mode 100644 components/k2test/.idea/inspectionProfiles/profiles_settings.xml delete mode 100644 components/k2test/.idea/misc.xml delete mode 100644 components/k2test/.idea/modules.xml delete mode 100644 components/k2test/.idea/vcs.xml delete mode 100644 components/k2test/__init__.py delete mode 100644 components/k2test/__pycache__/__init__.cpython-310.pyc delete mode 100644 components/k2test/history.txt delete mode 100644 components/k2test/k2test/__init__.py delete mode 100644 components/k2test/k2test/__pycache__/__init__.cpython-310.pyc delete mode 100644 components/k2test/k2test/__pycache__/views.cpython-310.pyc delete mode 100644 components/k2test/k2test/languages/en/LC_MESSAGES/messages.mo delete mode 100644 components/k2test/k2test/languages/en/LC_MESSAGES/messages.po delete mode 100644 components/k2test/k2test/languages/uk/LC_MESSAGES/messages.mo delete mode 100644 components/k2test/k2test/languages/uk/LC_MESSAGES/messages.po delete mode 100644 components/k2test/k2test/templates/new2.html delete mode 100644 components/k2test/k2test/views.py delete mode 100644 components/k2test/reguirments-components.txt delete mode 100644 components/k2test/requirements.txt delete mode 100644 components/k2test/setup.py delete mode 100644 templates/base.html create mode 100644 templates/component-info-site.html create mode 100644 yml/admin_menu.yml create mode 100644 yml/admin_menu_prav.yml diff --git a/__pycache__/app.cpython-310.pyc b/__pycache__/app.cpython-310.pyc index 6a8fd8df62eb719f842a0a06b3f0aeeb76133cb4..4a9e3fb1e481954853207d0777334d4770501a80 100644 GIT binary patch delta 399 zcmYk0y-ve06oq}AsCAO2w9r=k6vRjv*g7C8B!q;RDxt!{5{1~R64C_O4q}HDsZ}<_ z&<+fY@C2;907E9;1e}zCb9H^cE89ostNKRl#I{YO^fY;&c~ad8QPgR2ONgG&(Z(57i3NrR(`YlYSff;d#f zL8rPF9Nm+};rcjoT)Tx6lPil5jIWI_-R$giHrrYA0+*@XqI}C^+R`phn5Lek^ z4~GM;O;+bA%skB7swHiRx66C}nb(cZX{#DoO`|7xlUp z5t#b|$31~BykrEnX@P(ZK^>=m+Vvf0-)bjA{8}LH - - - - - - - - - \ No newline at end of file diff --git a/components/k2test/.idea/inspectionProfiles/profiles_settings.xml b/components/k2test/.idea/inspectionProfiles/profiles_settings.xml deleted file mode 100644 index 105ce2d..0000000 --- a/components/k2test/.idea/inspectionProfiles/profiles_settings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/components/k2test/.idea/misc.xml b/components/k2test/.idea/misc.xml deleted file mode 100644 index c72cfa7..0000000 --- a/components/k2test/.idea/misc.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/components/k2test/.idea/modules.xml b/components/k2test/.idea/modules.xml deleted file mode 100644 index 49cd08a..0000000 --- a/components/k2test/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/components/k2test/.idea/vcs.xml b/components/k2test/.idea/vcs.xml deleted file mode 100644 index 94a25f7..0000000 --- a/components/k2test/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/components/k2test/__init__.py b/components/k2test/__init__.py deleted file mode 100644 index 8b13789..0000000 --- a/components/k2test/__init__.py +++ /dev/null @@ -1 +0,0 @@ - diff --git a/components/k2test/__pycache__/__init__.cpython-310.pyc b/components/k2test/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index 96fea175b46e3b242291a1086b48f729ebc0bffe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 175 zcmd1j<>g`k0*=yIDNI26F^Gc<7=auIATDMB5-AM944RC7D;bJF!U*D5kh4`xXmM&$ zaZGWUZh3xDc1%EJazD2bL~L kEiQ?PkI&4@EQycTE2zB1VUwGmQks)$2ePXeg`k0*=yIDIoeWh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o11<*(xTqIJKxa zrnpSEJijPACZIAoBe5tqpeR2pHMyiXCfleeKffeCIVUwS56X#2&d)8#&r8h%OP8b; mmjETeRD679US>&ryk0@&Ee@O9{FKt1R6CHB#Y{kgg#iHCqA#}q diff --git a/components/k2test/k2test/__pycache__/views.cpython-310.pyc b/components/k2test/k2test/__pycache__/views.cpython-310.pyc deleted file mode 100644 index 13e8056c01202c2ea4a89266caaaa7676b3c8177..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2067 zcma)7&2Jnv6d!wLc4ue5lBOSNTEv3HVWFFrP1;JRihxoMsHBAy4x^yebnGOPcxJY? zw`o?JQ+w@!E9xOV_QD^-(N|8KdjlbO&$HWZgpfKbKifY)zxVw7d)}hi3?2A_(J$=R zisSr_llc!Y=W}T4HxSHWL^v6VNJb-?xsjWBkw*}x!p|yE#g1K3&4MV%YEdlJl#3!5>wsfTJt9wc7~$ZP4mG>acLUKNP;0< z&g!sIjHZ)TsfM<|ECU<$nQ}ZFcB!d-DMoxK(_9-59f3x;_1)bsM6$=TBU3r(YYd_` zi%^-0(y>kx*xR0ggPlUaF-)^unoh^w)tnzDc+}a47wba14NZLmLOc6}k&DhgJ$5F} zzI)=mbdJfyIq?~NNsj4+oKz+-I;jHgGM9PJoQeAtT*Y20yOCAHRH7*(1X4Sfl)kHX^|^K*+Wy| zIZ%t6YEtAmQqe=snJRz6lM!-shiiyi2-yTr#%H5!sJa#TKF-4FCa`9FAg}}uNv=i$ z%s?(wR7aK#O33D=6qj&w^Hj)aU9~_oXh=fRf?r5IB0mOb>?61Or^p4cgJ-wo3Sgk& z<#olOyvsXae(e>JKB&Ee|1~7yYYetQcuQe^Ii(ou1>ke0;)m7qpJ-NcyQ*Xgn7(ol^2v% z;Yr0Fo>kk|;X%cDleMtl^;!FcyGyY4;hGjU$KeBDc*nXjUJ6_quVgIkVVUTjPBSim znZ3ucOygXSD^`1LTrVr5hv~)A)TtKSP+d$l*5@_Wr{MK@@cIEn_X9~ z!C7S=gb9+pR4{maZFYfLnEAO(TULdb#eqH4N3g8$eV|^21T-M!kN)NT?fv7mitzH0-f?E%GnPOb!(Q diff --git a/components/k2test/k2test/languages/en/LC_MESSAGES/messages.mo b/components/k2test/k2test/languages/en/LC_MESSAGES/messages.mo deleted file mode 100644 index fcfa15300724b032eda7f1719eb6d968c1eee2c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 549 zcmY*W&2G~`5H>$2UqDEl;4s`k)dt%QsM<7D-NXeWJB}Pv0helonQ!!IXLjbtjjJCWvMYq!g#McRV+qABAthWVJR^L# zt!ktrivAul3S!P|a^@hQR>N z!{J>8cZT5K8@OqlMi(>jd!9S0l|@Beoi+X+H zvq;VBg;XVnts`mON2pNKh-jFn9QMQ!RuJ@jI^O2l1zaLG*&2hhj@E0SQV+m8 zz>Nz}P$Bh#NO*NLp(wJ zxI{>T`Z}V0nUGtkN2p1UzXl6tQOt=-RLVzFE{aj2_%tVdnZ4j+MY|Jv$Yq{n!iIhr zJaXGZICR57H|QB5pJh@}KaZ0M-7n&t4l^5Ezt#2jTAfbl4hBX)7}B=nk-{5jCsN!7 zi&<65?o-PI^PXL+ZL=z4NTeZum6Vl!^Pak`kop1bwBTW2``ztlLC-b3C|7hSBax?( z%A^ekk3A21E#HO4f2Es96>)*x*-*Uv>(C*Orey>gp0}4Kl}yG>qn{QsO6fr+r@0Mc zwsLc)T8Fji+!41;<~Sy7ZbE6Yn~rJ1E-*kk`c23BbJTEZrMb#r4U@s?={f~DYzuQt z%(1rWhTrwwi|LvbX0$V*xWN8SX83Bw->AE@G)hDr#?K>}bLAB3nC@Kg$~hc!NnJ6{ zCW(k`*f~m+@qi01aoG4RCpPRyM?3|qV&XE0{-hWBi#~(pyXAYmSiW6;)N}n60~XPr Y_4zuyVqkQkzv=I|&-J;UBma#20<|>8ga7~l diff --git a/components/k2test/k2test/languages/uk/LC_MESSAGES/messages.po b/components/k2test/k2test/languages/uk/LC_MESSAGES/messages.po deleted file mode 100644 index 397ef8f..0000000 --- a/components/k2test/k2test/languages/uk/LC_MESSAGES/messages.po +++ /dev/null @@ -1,4 +0,0 @@ -msgid "New 2 page" -msgstr "Нова сторінка 2" -msgid "title_menu_items" -msgstr "Тестова компонента" \ No newline at end of file diff --git a/components/k2test/k2test/templates/new2.html b/components/k2test/k2test/templates/new2.html deleted file mode 100644 index f3fbd57..0000000 --- a/components/k2test/k2test/templates/new2.html +++ /dev/null @@ -1,3 +0,0 @@ - - -

{{ _('New 2 page') }}

\ No newline at end of file diff --git a/components/k2test/k2test/views.py b/components/k2test/k2test/views.py deleted file mode 100644 index 9cad8a6..0000000 --- a/components/k2test/k2test/views.py +++ /dev/null @@ -1,54 +0,0 @@ -from flask import render_template, redirect, request, jsonify -from flask_babel import gettext -from flask_login import login_user, current_user, logout_user, login_required -from flask import current_app as k2 -from flask import Blueprint, json -from flask_sqlalchemy import SQLAlchemy - - -#bliueprint -k2test = Blueprint('k2test', __name__, template_folder='templates', static_folder='static') - -#component routes -@k2test.route('/new') -def new_component(): - db = k2.extensions['sqlalchemy'].db - connection = db.engine.connect() - query = db.text("SELECT email, login FROM k2users") - result = connection.execute(query).fetchall() - rows = [dict(email=row.email, login=row.login) for row in result] - # Перетворення результату на JSON - json_result = json.dumps(rows) - return json_result - -@k2test.route('/new2') -def new_component2(): - return render_template('new2.html') - -@k2test.route('/new3') -def new_component3(): - return jsonify({'data': 'page new3'}) - -@k2test.route('/new4') -def new_component4(): - return jsonify({'data': 'page new4'}) - -# menu items for admin -@k2test.route('/menu-admin-items') -def menu_items(): - data = [ - { - 'title': 'Test items', - 'icon': {'icon': 'mdi-chart-timeline-variant'}, - 'children': [ - {'title': 'Test 3', 'to': 'k2test-new3'}, - {'title': 'Test 4', 'to': 'k2test-new4'}, - {'title': 'Test 5', 'to': 'k2test-new5'}, - {'title': 'Test 6', 'to': 'k2test-new6'}, - {'title': 'Test 7', 'to': 'k2test-new7'} - ], - } - - ] - return data - diff --git a/components/k2test/reguirments-components.txt b/components/k2test/reguirments-components.txt deleted file mode 100644 index e69de29..0000000 diff --git a/components/k2test/requirements.txt b/components/k2test/requirements.txt deleted file mode 100644 index b1a7563..0000000 --- a/components/k2test/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -Flask-Login==0.6.2 diff --git a/components/k2test/setup.py b/components/k2test/setup.py deleted file mode 100644 index 46cdf60..0000000 --- a/components/k2test/setup.py +++ /dev/null @@ -1,15 +0,0 @@ -from setuptools import setup, find_packages - -setup( - name='k2test', - version='1.0.0', - description='Description of my project', - author='k2 cloud', - author_email='rs@corp2.net', - keywords="k2test, k2", - python_requires=">=3.7, <=3.11.2", - packages=['k2test'], - package_data={ # Optional - }, - install_requires=[""], -) diff --git a/db/database.db b/db/database.db index 5d21e314d370e6e23113ec5c99ab732e7ffb7b92..3a11bb1c6dd0bd797d4ee47b0a1fb0e29ce0b363 100644 GIT binary patch delta 1348 zcmb_cO;6N77%qs3*%cS#!2lAQC;<}aPUovL8^LJ2n7Hb}i!r)PXQoS8w%fD=!f9D< z-V{#Wi17z#IQT342mTGN>U0G}&|soz)0s@)dHT-t(aqh#&E3J*V}nEF&9%Gs`El|6 z^^4Ak<5bF*7KU;8>)z#&^-_1(3_Pgc=sh1FzH?!#?4v*<#yAQBje*hvC#%>gB~QxRgKAw-G*L>y;;9#Y&}RXPlngoscaVktO> zOp!o#febZeOzC4E{68H36~!+s$Nn*npegQWmm6mD?vM>uX@9;eD?|EnMpuBfbe!ozzy!&wDL9u?_ z{Cw+jsk-V_SFfzkZO#4|U7i0nJE%Ns*B{lMwl3~(U@V0pv9kskXclSa1P5s)HCR&% zJ5=xH+bgyoXPq?fBt1WI{$$fnv*d-1bAm9!+j*Xb&E{4oM{$y+6!mQ0eA{nMN>Q;- zF=Y)b8WgvDqC(6 z)4w*|7M3j zx?_whM;yr+98Wr-#3uzp95RU%W(>387i93Sc71u0ECr#7!G<&9fCG(4WCBGEx55Nm ziV59eif;DKQY|PS2k=LhQpA{~O8!rHgEPY0htj2XeeU{PYi57L={Qo(3au1|$VJLH zz?yKyaBPacc4%(<;|UZ;<3+fSgAgDDi6mA)$!UZ6@Oxu@RKX=&JdQ)JdN}z;^P8$V zIP?~^WYj<;iqQd}Hc&m4ZMjQl!0@#j|mY*SltB zeTiD7$VR;&P?!Uk9*RIh9FQU*QK=F)u9X~dTZt=w0apa?*=ZY9%xHe|zUR%nH-F~t z7cyZwZ4nrWZyxe%_EDxtheylq>s{NiDdB`C{d70uWGH!;aFeHogr_`xpgGe#afg(x zqaT)UusA6_DcfNXCx!P}-;+_9#`aFwY6tJTf!p##6OTAM5~qy(_2}=94lO>#ZJvIp zIeDIP=DfmyIP(w49_1N6Jv5yKZ;@yD%#aMIQv~`Pe`QRc2YQz0#`FcA=W|2iT;v5l z4||C(@I}~{9uS>4uR^lLn04w0X1(%8rBHKr9zE-KitZlAW zt5x*}-QIALw}O`6mizr#NPG1C=*h|b(ecT*qu)+GKlyU>WOVEpABMi{w9A^n*Nj=e z6SJPL@@$3vq_$a@$b$Ga^_bOG-UccnoN_i`U#IWUh(2O>>38%V+l2?$VGcA(0<%VB zPL;GA)zq8XF4fgn+T4;TfOlDowWcp)x)w8u8qyBUT4~tX28?^dRMJe*?i$wh` zl!|$T1=Q=j-|dxkfe~XL}Wl% zW^vlbKhWq-K7m*tODDJ30Q&!r^t-#DlXys$9avDfc94WC`Q7p*^_O|gSVPyV>S8K7 zECK0cn|&d?04z=mHEt4d33Rd547*Sd&`N;~A+``O=Xk2=yHa+&Xg}oQ0*aRqmJwDF zHW97^#OX$3Y~1vGztMP+_O3XGHrPBO1%TI)I2k@z|U&`0jG>3!~g&Q delta 985 zcmZ8f&rcIU6rQ)gy4`MT3-kw25F-W(1X2(oYQ#v?i+VvrvX{Dawxwa)ZDzNL2T((s za3pnZ#)Fu6H_@|q4<;VXCjJHf4I1Aps0}ljZ{BouU^adkpO~%|!M%9iqcMVioBK&Eh_BL=<98V(A?J z4m0`uZVY-5ry%jNY)Xa$4ys58fJdoAB#qk>Qn zFwl^oO!E_M8p`}o`|xxK10@Kx2cAtGh9U#9F2*e5UdMIMPGx5P)ePfwr&9G=wMPBC ze4^261Qk5)u*Sy6SFufaGB3(%r}R*wJE0zN>~_1PMw+3FHk(75rJZJ4G2GjBuzOxU zb|!z9&&8*t(nbC)zM`#&zAp2)5kQeYH*znci!-WT6Ys)l1wIp>AWT$U+xMGJuX5UMrobB}2vAW9AN@c*;uH=7>qxXvv= RhMz+)i3uj?1Ji^N1F0-#0un+D E0BJQE>Hq)$ diff --git a/k2/__pycache__/k2rout.cpython-310.pyc b/k2/__pycache__/k2rout.cpython-310.pyc index 1cb9695773e823e8e8c51d818c8f2c5d6498bbe4..2983c247a7840ba37428aed63a9e9912cf329592 100644 GIT binary patch delta 6133 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 D6G*XC delta 5162 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 diff --git a/k2/k2cfg.py b/k2/k2cfg.py index da5443c..e607769 100644 --- a/k2/k2cfg.py +++ b/k2/k2cfg.py @@ -7,23 +7,31 @@ import requests import pytz import os import sys -from flask import session - +from flask import session, request +from flask_login import LoginManager class k2(k2obj): version = '2.5.1.27' db = SQLAlchemy() domain = 'http://127.0.0.1:5000/' - update_domain ='http://185.174.172.137/' - venv_bin_path = os.path.join(os.path.dirname(sys.prefix), 'venv/Scripts') + update_domain = 'http://127.0.0.1:8000/' #'http://185.174.172.137/' + venv_bin_path = os.path.join(os.path.dirname(sys.prefix), 'venv/Scripts') #for windows + #venv_bin_path = os.path.join(os.path.dirname(sys.prefix), 'venv/bin') #for linux json_sort_keys = False timezone = pytz.timezone('Europe/Kiev') secret_key = 'JH&INH987gFDHdsagh&8dwbjdw8ckw' default_language = 'en' current_language = '' babel_translation_directories = '' + languages = { + 'en': 'English', + 'uk': 'Українська', + 'pl': 'Polski' + } components = '' + login_manager = LoginManager() + @@ -34,7 +42,7 @@ class k2(k2obj): def load_babel_translation_directories(cls): with open('languages/babel_translation_directories.yml', 'r') as f: data = yaml.safe_load(f) - print(data['babel_translation_directories']) + #print(data['babel_translation_directories']) cls.babel_translation_directories = data['babel_translation_directories'] @classmethod @@ -59,6 +67,8 @@ class k2(k2obj): with open('languages/babel_translation_directories.yml', 'w') as f: yaml.dump(data, f) + + # load database settings from yml file def init_db_uri(self): with open('db/db.yml', 'r') as f: @@ -74,3 +84,8 @@ class k2(k2obj): app.config['SQLALCHEMY_BINDS'] = {'db2': f'sqlite:///{db_path}'} self.db.init_app(app) + def init_lm(self, app): + # Initialize LoginManager + self.login_manager.init_app(app) + + diff --git a/k2/k2obj.py b/k2/k2obj.py index 52457cc..99c0cfb 100644 --- a/k2/k2obj.py +++ b/k2/k2obj.py @@ -16,6 +16,7 @@ class k2obj: 'cutpast': '0', 'enable': '0' } + languages = '' components = '' diff --git a/k2/k2rout.py b/k2/k2rout.py index 8d1044a..442cd38 100644 --- a/k2/k2rout.py +++ b/k2/k2rout.py @@ -16,7 +16,7 @@ import sys from .k2admmenu import K2admin_menus, K2admin_Menus_Prava from sqlalchemy import text from flask_jwt_extended import get_jwt_identity, jwt_required - +from flask_login import login_user, current_user, logout_user, login_required # initialize db @@ -83,7 +83,7 @@ def home(): components = Component.query.all() components_names = [component.name for component in components] if 'k2site' in components_names: - return redirect(url_for('k2test.new_component2')) #змінити на ендпоінт головної k2site + return redirect(url_for('k2site.new_component2')) #змінити на ендпоінт головної k2site else: return redirect('/dashboard') @@ -112,9 +112,10 @@ def change_language(lang): @components_bp.route('/dashboard') def dashboard(): components = Component.query.all() + components_names = [] components_names = [component.name for component in components] if 'k2site' in components_names: - return redirect(url_for('components_bp.component_list_dasb')) # змінити на ендпоінт головної k2site + return redirect(url_for('components.component_list_dasb')) # змінити на ендпоінт головної k2site else: # Компоненти доступні для встановлення # GET-запит до API @@ -155,6 +156,14 @@ def show_components(component_id): return render_template('component-info.html', selected_component=selected_component) +@components_bp.route('/show_components-site/') +def show_components_site(component_id): + response = requests.get(f'{k2.update_domain}api/components') + json_data = response.json() + selected_component = next((component for component in json_data if component['id'] == component_id), None) + return render_template('component-info-site.html', selected_component=selected_component) + + @components_bp.route('/install_components_git/') def install_components_git(component_id): # Шлях до головної папки проекту @@ -265,8 +274,14 @@ def install_component_from_archive(component_id): # Шлях до файлу, до якого потрібно додати роути file_path = 'routes.py' # Код, який потрібно додати - code = f'''from components.{selected_component['name']}.{selected_component['name']}.views import {selected_component['name']}\napp.register_blueprint({selected_component['name']}, url_prefix='/{selected_component['name']}')''' - # selected_component['dependencies'] + if component_name == 'k2grid_base': + code = f'''from components.{selected_component['name']}.{selected_component['name']}.views import {selected_component['name']}\napp.register_blueprint({selected_component['name']}, url_prefix='/')''' + elif component_name == 'k2site': + code = f'''from components.{selected_component['name']}.{selected_component['name']}.views import {selected_component['name']}\napp.register_blueprint({selected_component['name']}, url_prefix='/{selected_component['name']}')\nlogin_manager = k2().init_lm(app)''' + else: + code = f'''from components.{selected_component['name']}.{selected_component['name']}.views import {selected_component['name']}\napp.register_blueprint({selected_component['name']}, url_prefix='/{selected_component['name']}')''' + + # Відкриття файлу у режимі дозапису with open(file_path, 'a') as file: @@ -311,11 +326,20 @@ def install_requirments(selected_component_name): get_admin_menu() - # install requirements + ## install requirements for windows + #venv_bin_path = os.path.join(os.path.dirname(sys.prefix), 'venv/Scripts') + #requirements_file = os.path.join('components', selected_component_name, "requirements.txt") + #if os.path.isfile(requirements_file): + # pip_command = f"{venv_bin_path}/python -m pip install -r {requirements_file}" + # subprocess.run(pip_command, shell=True, check=True) + + #install requirements for linux + venv_bin_path = os.path.join(os.path.dirname(sys.prefix), 'venv/bin') requirements_file = os.path.join('components', selected_component_name, "requirements.txt") if os.path.isfile(requirements_file): - pip_command = f"{k2.venv_bin_path}/python -m pip install -r {requirements_file}" + pip_command = f"{venv_bin_path}/python3 -m pip install -r {requirements_file}" subprocess.run(pip_command, shell=True, check=True) + return f'''Requirements installed successfully \n \n please wait installing requirments components... ''' @@ -362,7 +386,7 @@ def remove_dependencies(component_id): component.installed = False db.session.commit() - + response = requests.get(f"{k2.domain}/k2site/new_component2") return 'Component successfully turn off ' @@ -383,7 +407,8 @@ def add_dependencies(component_id): # Оновлюємо статус компоненти component.installed = True db.session.commit() - return 'Dependencies added successfully ' + response = requests.get(f"{k2.domain}/k2site/new_component2") + return 'Dependencies added successfully ' @components_bp.route('/remove-component/') @@ -410,6 +435,7 @@ def remove_component(component_id): except Exception as e: # Повертаємо повідомлення про помилку видалення return 'Error removing component: ' + str(e) + response = requests.get(f"{k2.domain}/k2site/new_component2") # @components_bp.route('/component/add') @@ -453,7 +479,7 @@ def add_to_menu(): data.append(response.json()[0]) prev_menu = response.json()[0]['title'] for item in response.json()[0]['children']: - name_menu = str(item['to']).replace('/','-') + name_menu = 'k2itm'+ item['to'].replace('/','-') caption_menu = item['title'] add_menu_with_permissions_db(name_menu, prev_menu, caption_menu) components = Component.query.all() @@ -465,38 +491,40 @@ def add_to_menu(): #prev_menu = prev_menu = response.json()[0]['title'] for item in response.json()[0]['children']: - name_menu = item['to'] + name_menu = 'k2itm'+ item['to'].replace('/','-') caption_menu = item['title'] add_menu_with_permissions_db(name_menu, prev_menu, caption_menu) else: - data + continue # add component_name key for menu items - for item in data: - item['component_name'] = components_names - k2.menu = data - return k2.menu + #for item in data: + # item['component_name'] = components_names + #k2.menu = data + return data + + @components_bp.route('/api/main-menu/') -@jwt_required() +@login_required def get_admin_menu(): - current_user = get_jwt_identity() - role_id = current_user['user_role'] + components = Component.query.all() + components_names = [component.name for component in components] + if 'k2site' in components_names: + role_id = current_user.get_role_id() filter_menu = [] response = requests.get(f"{k2.domain}api/add-to-menu") menu_items_list = K2admin_menus.get_menu_items_by_roles(role_id) - + #print(menu_items_list) for item in response.json(): filtered_children = [] for im in item['children']: - - if im['to'] in menu_items_list: + if 'k2itm' + im['to'].replace('/','-') in menu_items_list: filtered_children.append(im) if filtered_children: item['children'] = filtered_children filter_menu.append(item) - filter_menu.append({"heading": 'APPS & PAGES'}) - + # filter_menu.append({"heading": 'APPS & PAGES'}) return jsonify(filter_menu) @@ -536,6 +564,7 @@ def add_menu_with_permissions_db(name_menu, prev_menu, caption_menu): db.session.commit() @components_bp.route('/component-add') +@login_required def component_add_dasb(): try: response = requests.get(f'{k2.update_domain}api/components') @@ -556,18 +585,24 @@ def component_add_dasb(): 'description'] else False)] else: filtered_components = component_server + components = Component.query.all() + components_names = [component.name for component in components] return render_template('dashboard-add.html', - component_server=filtered_components, - ) + component_server=filtered_components, search_query=search_query, components_names=components_names ) + + @components_bp.route('/component-list') +@login_required def component_list_dasb(): components = Component.query.all() + return render_template('dashboard-list.html', components=components) + @components_bp.route('/menu-admin-items') def menu_items(): menu = [ @@ -575,8 +610,8 @@ def menu_items(): "title": 'Add components', "icon": {"icon": 'mdi-account-circle-outline'}, "children": [ - {'title': 'Install components', 'to': 'component-add'}, - {'title': 'Installed components', 'to': 'component-list'}, + {'title': 'Install new components', 'to': '/component-add'}, + {'title': 'Installed components', 'to': '/component-list'}, ], }] diff --git a/languages/babel_translation_directories.yml b/languages/babel_translation_directories.yml index 03e7ce4..df5b863 100644 --- a/languages/babel_translation_directories.yml +++ b/languages/babel_translation_directories.yml @@ -1 +1 @@ -babel_translation_directories: languages;components/k2test/k2test/languages;components/k2auth/k2auth/languages;components/k2adm/k2adm/languages +babel_translation_directories: languages;components/k2site/k2site/languages;components/k2adm/k2adm/languages;components/k2test/k2test/languages;components/k2grid_base/k2grid_base/languages diff --git a/languages/en/LC_MESSAGES/messages.mo b/languages/en/LC_MESSAGES/messages.mo index ea7732ca4f20445d3b0548cebaabd9d6f3a2b797..5e6a00578f70df6cbbc10b864ab1406a9a281bed 100644 GIT binary patch delta 540 zcmY+Y5P;!5jY<4Oqu3ZBjW(LXFAzJ4h1l4Lh0P(k4F=-wk-LChI_;DY?ZnPs z5K<_%BGy)d*jm}x*rf2CTu9==^4!eq?aaQ$o5|{DDt4n-lk7D6R)W5jc9cpI&*L~Q z;xw+~6z<{#9(63DoIAr2JjXGt;Vj-^9Gl3!RrSP&T=?Aa9fyg(@rwP+mLDz#l^ViJ zlwq$?8r`GR8z_w)aTH%r27f~tKtdC?puFe|4*_c$LGt>GhI zvVnGe>sNeKNp->ITe+zVm=^#0mQsO{2hq7fS8q$ zfq@4|3jk>`AT0}|*?_bOkOt|u2GX2B+674W1F;_v1Lf-(?lD0OdJ3dL27Ct6AjdE; zLp1ULX^;h?Kw1PyD*$O0AZ-eyK^9m6X?7s(2&5TG;uDigGV}9*jO6^>g8aPHyprPh z;*9(Pph!w;L26z~YF=_?YB88woLn@yp3!6Sd&V4ga|J^~D^ttONlZG7ypAa;3UK|C PcQX5Pgryc0gUkg0vV<}X diff --git a/languages/en/LC_MESSAGES/messages.po b/languages/en/LC_MESSAGES/messages.po index 05ff247..5e61172 100644 --- a/languages/en/LC_MESSAGES/messages.po +++ b/languages/en/LC_MESSAGES/messages.po @@ -26,4 +26,19 @@ msgid "t_action" msgstr "Action" msgid "t_components_shop" -msgstr "Add component" \ No newline at end of file +msgstr "Add component" + +msgid "t_components_delete" +msgstr "Delete component" + +msgid "t_close_popup" +msgstr "Close" + +msgid "t_delete_popup" +msgstr "Delete" + +msgid "t_turn_of_component" +msgstr "Turn off component" + +msgid "t_turn_on_component" +msgstr "Turn on component" \ No newline at end of file diff --git a/languages/pl/LC_MESSAGES/messages.mo b/languages/pl/LC_MESSAGES/messages.mo index 50fdce62da72e27549e7c27aa6acaf82c65f9c54..6fb07890dd1d2980079fcc0932a62de18447dbbd 100644 GIT binary patch delta 540 zcmZY4ze~eF6bJAZTbue@TM&l|b@rfpOa>*oXWTJ|I33y~uA9 zL^`~OBk-~93sn6#s4n_|N!WwW0Mwy+P!>+WDX7+$U<&usGA0=m)}Z<$quC(xA%&)8 zhpyn5*uId=3`7tGDif7JaK=MvI?QJw`&*N{Lal1Gem6NRVBBHccA0E;W&LYoI*h8^ z6g!w*OaHReBbE0~HB(}=h zW31u@USR=S==R@X8N2vOkCYclrRIxN_)$l9z%}OF26T_QM|aT!*07Ik6pQYH`OXDO zG6=$CWHgh|yu?N;o!EhWHZfl!6)PPn9gdX!TiS4zrCu-FdedUN(QI~ZZr8&DS T3dW7e{|VW*|5Q*jI}YR*F~>3< diff --git a/languages/pl/LC_MESSAGES/messages.po b/languages/pl/LC_MESSAGES/messages.po index bbd25d1..7efdbff 100644 --- a/languages/pl/LC_MESSAGES/messages.po +++ b/languages/pl/LC_MESSAGES/messages.po @@ -31,4 +31,19 @@ msgid "t_action" msgstr "Akcja" msgid "t_components_shop" -msgstr "Dodaj komponent" \ No newline at end of file +msgstr "Dodaj komponent" + +msgid "t_components_delete" +msgstr "Usuń komponent" + +msgid "t_close_popup" +msgstr "Zamknij" + +msgid "t_delete_popup" +msgstr "Usuń" + +msgid "t_turn_of_component" +msgstr "Wyłącz komponent" + +msgid "t_turn_on_component" +msgstr "Włącz komponent" \ No newline at end of file diff --git a/languages/uk/LC_MESSAGES/messages.mo b/languages/uk/LC_MESSAGES/messages.mo index 5c82644cc470266162263c8a3220a66941977849..7ed3d4655c9a2a7fb8c1300bff1b24f633f77f35 100644 GIT binary patch delta 568 zcmZ9{y-R{Y90%|dB}?qhq9p?ZYYBw1AX*w)qN$-Nh=){kWgqW1;^30jh_* z)(eb%L1t;oF)JZ-EMiGva?KD%%21J5Glb4{%hcjL$t~WTGgpP`a!QR&ac*!u&h=P= zoAs)h|DFq5sdZfwD~%&jaZ-9CWff;!!aErnjZTeCTwJ*}T+u^1ql(OsEwf}ZDv(W= zNL@RL5LM`gs&tEQjmlJ$S(z(F+~LlDjm3HQQN%`P1wA?EtW!FdrRG$D$}%IjWl8R_ EAL&k}IsgCw delta 300 zcmZqW`pjN`Pl#nI0}yZnu?!HGfH+9t43NzM#Akt65Qwh zz`z5f1%R{|kd_6~Y(UxsNQ3lS18Ghm?E<840 - - - {% block title %}{% endblock %} - - - - - - - - - {% block styles %} - - {% endblock %} - - -######################## -
- {% block content %}dashboard{% endblock %} -
-















-
- © 2023 Корпорація k2 -
- - -{% block scripts %} - - {% endblock %} - - \ No newline at end of file diff --git a/templates/component-info-site.html b/templates/component-info-site.html new file mode 100644 index 0000000..2d162c7 --- /dev/null +++ b/templates/component-info-site.html @@ -0,0 +1,86 @@ +{% extends 'base.html' %} +{% block styles %} + + + + + +{% endblock %} +{% block content %} +
+
+ Встановлення компоненти... +
+
+ + {% if selected_component %} +
+ +

K2CloudERP-2.5.1.27

+

{{selected_component.name|title}}

+
+

{{selected_component.description|title}} - + quickly design and customize responsive mobile-first components with Python and Bootstrap. +

+

Посилання на репозиторій: {{selected_component.git_link}}

+

Версія: {{selected_component.version}}

+

Розробка: K2 Cloud

+ +
+
+
+ Example image +
+
+
+ + {% else %} + Помилка завантаження компоненти з сервера + {% endif %} + + + + +{% endblock %} + diff --git a/templates/component-info.html b/templates/component-info.html index 0141690..2a54b83 100644 --- a/templates/component-info.html +++ b/templates/component-info.html @@ -1,12 +1,5 @@ -{% if 'base.html' in template_list %} - {% extends 'base.html' %} -{% else %} - -{% endif %} - {% block styles %} - +{% endblock %} + + + + {% block title %}{% endblock %} + + + + + + + + + -{% endblock %} {% block content %}
@@ -89,3 +95,11 @@ window.onload = function() { {% endblock %} +
+ © 2023 Корпорація k2 +
+ +
+ + + \ No newline at end of file diff --git a/templates/dashboard-add.html b/templates/dashboard-add.html index 2fa5323..daf6ded 100644 --- a/templates/dashboard-add.html +++ b/templates/dashboard-add.html @@ -1,6 +1,5 @@ {% extends 'base.html' %} - {% block styles %} {% endblock %} - - - - {% block title %}{% endblock %} - - - - - - - - -
{% block content %} @@ -64,11 +50,11 @@

{{ component.name|title }}

{{ component.description }}

-

ВЕРСІЯ {{ component.latest_version }}

+

version {{ component.latest_version }}

{% if component.name in components_names %} {% else %} - Install + Install {% endif %}
@@ -85,6 +71,3 @@
- - - \ No newline at end of file diff --git a/templates/dashboard-list.html b/templates/dashboard-list.html index 04a8faa..612feea 100644 --- a/templates/dashboard-list.html +++ b/templates/dashboard-list.html @@ -26,20 +26,6 @@ } {% endblock %} - - - - {% block title %}{% endblock %} - - - - - - - - - -
{% block content %} @@ -51,7 +37,6 @@ {{gettext('t_name')}} {{gettext('t_description')}} {{gettext('t_version')}} - {{gettext('t_dependencies')}} {{gettext('t_git_link')}} {{gettext('t_install_at')}} {{gettext('t_status')}} @@ -70,7 +55,6 @@ {{ component.name }} {{ component.description }} {{ component.version }} - {{ component.dependencies }} {{ component.git_link }} {{ component.date_installed }} @@ -82,12 +66,12 @@ {% if component.installed %} - Вимкнути + {{gettext('t_turn_of_component')}} {% else %} - Увімкнути + {{gettext('t_turn_on_component')}} @@ -95,15 +79,15 @@ @@ -117,11 +101,6 @@ - {% endblock %} - -
- - - \ No newline at end of file + \ No newline at end of file diff --git a/templates/dashboard.html b/templates/dashboard.html index 477ea54..4571cb1 100644 --- a/templates/dashboard.html +++ b/templates/dashboard.html @@ -43,7 +43,7 @@
{% block content %}

K2CloudERP-2.5.1.27

-

en | pl | uk

+

en | pl | uk

{{language}} diff --git a/yml/admin_menu.yml b/yml/admin_menu.yml new file mode 100644 index 0000000..185d1bb --- /dev/null +++ b/yml/admin_menu.yml @@ -0,0 +1,106 @@ +select: + select menuid, namemenu, scriptrun, prevmenu, prevmenu_text, module_name, del, active, + createuser, createdate, updateuser, updatedate, order_ins, caption, url/*, t */ + from k2admin_menus + +table: k2admin_menus +sortname: order_ins +typeid: 1 + +# Детально +detile: admin_menu_prav + +addtool_button: + 0: + caption: Синхр. + title: Загрузка списка пунктов меню + id: rights + icon: "ui-icon-extlink" + action: "loadMenuItems()" + position: last + +height: 150 + +sortorder: asc +caption: Доступ к меню +fields: + menuid: + field: menuid + caption: ID + width: 40 + readonly: true + align: left + hidden: true + type_field: text + primary_key: true + + caption: + field: caption + caption: Меню + width: 400 + readonly: false + align: left + type_field: text + + namemenu: + field: namemenu + caption: Идентификатор меню + width: 200 + readonly: false + align: left + hidden: false + type_field: text + + module_name: + field: module_name + caption: Название модуля + width: 200 + readonly: false + align: left + hidden: false + type_field: text + +# t: +# field: t +# caption: Параметр t +# width: 100 +# readonly: false +# align: left +# hidden: false + + url: + field: url + caption: URL + width: 250 + readonly: false + align: left + hidden: false + type_field: text + + order_ins: + field: order_ins + caption: Сортировка + width: 75 + readonly: false + align: left + hidden: false + type_field: text + + active: + field: active + caption: Акт. + width: 50 + readonly: false + type_field: checkbox + def_value: 1 + align: center + + del: + field: del + caption: Удал. + width: 50 + readonly: false + type_field: checkbox + def_value: 0 + align: center + hidden: true diff --git a/yml/admin_menu_prav.yml b/yml/admin_menu_prav.yml new file mode 100644 index 0000000..5994c3c --- /dev/null +++ b/yml/admin_menu_prav.yml @@ -0,0 +1,180 @@ +select: + select m.pravrepid, m.menuid, m.username, m.r, m.w, m.i, m.d, m.c, + m.exp, m.imp, m.settable, m.cutpast, m.enable, m.magazinsid, m.del, + m.active, m.createuser, m.createdate, m.updateuser, m.updatedate, m.order_ins, + m.roleid, r.rolename from k2admin_menus_prava m + + left join k2roles r + on m.roleid = r.roleid + +table: k2admin_menus_prava +sortname: pravrepid +typeid: 1 + +height: 590 + +where: " WHERE (menuid='{masterid}') " +getmaster: true +masterid: menuid + +sortorder: asc +caption: Права +fields: + pravrepid: + field: pravrepid + alias: m.pravrepid + caption: ID + width: 40 + readonly: true + align: left + hidden: true + primary_key: true + + roleid: + field: roleid + alias: m.roleid + caption: ID ролі + width: 200 + readonly: false + align: left + type_field: DropDown + multy: false + hidden: true + sql: + select roleid as k, rolename as v + from k2roles + order by rolename + + rolename: + field: rolename + caption: Права + alias: r.rolename + + username: + field: username + alias: m.username + caption: Пользователь + width: 150 + readonly: false + align: left + + r: + field: r + alias: m.r + caption: Чтение + width: 50 + readonly: false + align: center + type_field: checkbox + def_value: 1 + + w: + field: w + alias: m.w + caption: Запись + width: 50 + readonly: false + align: center + type_field: checkbox + def_value: 1 + + i: + field: i + alias: m.i + caption: Вставка + width: 50 + readonly: false + align: center + type_field: checkbox + def_value: 1 + + d: + field: d + alias: m.d + caption: Удаление + width: 50 + readonly: false + align: center + type_field: checkbox + def_value: 1 + + c: + field: c + alias: m.c + caption: Копирование + width: 50 + readonly: false + align: center + type_field: checkbox + def_value: 0 + + exp: + field: exp + alias: m.exp + caption: Экспорт + width: 50 + readonly: false + align: center + type_field: checkbox + def_value: 0 + + imp: + field: imp + alias: m.imp + caption: Импорт + width: 50 + readonly: false + align: center + type_field: checkbox + def_value: 0 + + settable: + field: settable + alias: m.settable + caption: "Настройка
таблиц" + width: 50 + readonly: false + align: center + type_field: checkbox + def_value: 1 + + cutpast: + field: cutpast + alias: m.cutpast + caption: "Копирование
в буфер" + width: 50 + readonly: false + align: center + type_field: checkbox + def_value: 1 + + enable: + field: enable + alias: m.enable + caption: "Активность
элементов" + width: 50 + readonly: false + align: center + type_field: checkbox + def_value: 1 + + active: + field: active + alias: m.active + caption: Акт. + width: 50 + readonly: false + align: left + type_field: checkbox + def_value: 1 + + del: + field: del + alias: m.del + caption: Удал. + width: 50 + readonly: false + align: left + type_field: checkbox + def_value: 0 + hidden: true diff --git a/yml/gruntcontrols.yml b/yml/gruntcontrols.yml index 36c5f4e..0f41b83 100644 --- a/yml/gruntcontrols.yml +++ b/yml/gruntcontrols.yml @@ -79,6 +79,7 @@ fields: readonly: true align: center type_field: text + primary_key: true zajavkid: field: zajavn diff --git a/yml/roles.yml b/yml/roles.yml index 6e25c30..fc3235d 100644 --- a/yml/roles.yml +++ b/yml/roles.yml @@ -14,6 +14,8 @@ fields: readonly: true align: left hidden: true + type_field: text + primary_key: true rolename: field: rolename @@ -21,6 +23,7 @@ fields: width: 250 readonly: false align: left + type_field: text order_roles: field: order_roles @@ -28,6 +31,7 @@ fields: width: 100 readonly: false align: right + type_field: text commentrole: field: commentrole @@ -35,7 +39,7 @@ fields: width: 150 readonly: false, align: left - + type_field: text active: field: active diff --git a/yml/users.yml b/yml/users.yml index c006ecc..3e91ef9 100644 --- a/yml/users.yml +++ b/yml/users.yml @@ -17,8 +17,7 @@ table: k2users typeid: 1 rows: 20 sortname: create_datetime -sortorder: desc -detile: k2users_obl +sortorder: desc caption: <%lnUsers%> readonly_form: who_create: @@ -30,28 +29,33 @@ fields: user_id: field: user_id caption: ID + alias: u.user_id width: 40 readonly: true align: left hidden: true + type_field: text + primary_key: true order_ins: field: order_ins + alias: u.order_ins caption: № width: 40 readonly: true align: left hidden: true - + type_field: text - login: field: login caption: Email + alias: u.login width: 100 width_form: 250 readonly: false align: left + type_field: text act: field: " " @@ -85,13 +89,16 @@ fields: name: field: name + alias: u.name caption: Ім'я width: 250 readonly: false align: left + type_field: text birth_date: field: birth_date + alias: u.birth_date caption: Дата
народження width: 100 width_form: 250 @@ -107,22 +114,27 @@ fields: width_form: 250 readonly: false align: left + type_field: text phone: field: phone + alias: u.phone caption: Номер width: 100 width_form: 250 readonly: false align: left + type_field: text tab_number: field: tab_number + alias: u.tab_number caption: Таб. номер width: 75 width_form: 250 readonly: false - align: left + align: left + type_field: text rolename: @@ -132,6 +144,7 @@ fields: width: 150 width_form: 250 readonly: false + type_field: text align: left # type_field: DropDown multy: false @@ -142,10 +155,12 @@ fields: roleid: field: roleid + alias: u.roleid caption: width: 150 readonly: true hidden: true + type_field: text department_name: field: department_name @@ -154,6 +169,7 @@ fields: width: 150 width_form: 250 readonly: false + type_field: text align: left # type_field: DropDown multy: false @@ -166,10 +182,12 @@ fields: departmentid: field: departmentid + alias: u.departmentid caption: width: 150 readonly: true - hidden: true + hidden: true + type_field: text \ No newline at end of file -- 1.9.1