From 6d7f5a3c55072be146cf56b661b4e35627928d9b Mon Sep 17 00:00:00 2001 From: jopster Date: Mon, 7 Apr 2025 14:22:00 +0200 Subject: [PATCH] Commit 07.04.2025 --- .../__pycache__/__init__.cpython-311.pyc | Bin 277 -> 277 bytes ..._screendesigner_controller.cpython-311.pyc | Bin 1623 -> 1623 bytes controllers/__pycache__/main.cpython-311.pyc | Bin 6973 -> 6973 bytes models/__pycache__/__init__.cpython-311.pyc | Bin 1726 -> 1726 bytes models/__pycache__/dss.cpython-311.pyc | Bin 23623 -> 23623 bytes .../dss_activity_mixin.cpython-311.pyc | Bin 2789 -> 2789 bytes models/__pycache__/dss_ads.cpython-311.pyc | Bin 27666 -> 27760 bytes .../dss_advertisefields.cpython-311.pyc | Bin 18409 -> 18409 bytes ..._advertisefields_templates.cpython-311.pyc | Bin 10888 -> 10888 bytes .../__pycache__/dss_contract.cpython-311.pyc | Bin 72274 -> 73183 bytes .../dss_display_templates.cpython-311.pyc | Bin 5716 -> 5716 bytes .../dss_importinvoicelist.cpython-311.pyc | Bin 13112 -> 13112 bytes .../__pycache__/dss_invoices.cpython-311.pyc | Bin 4796 -> 4796 bytes .../__pycache__/dss_m2mmail.cpython-311.pyc | Bin 3904 -> 3904 bytes models/__pycache__/dss_marker.cpython-311.pyc | Bin 2209 -> 2209 bytes .../dss_onlinestate.cpython-311.pyc | Bin 3274 -> 3274 bytes .../__pycache__/dss_projects.cpython-311.pyc | Bin 27023 -> 27090 bytes .../__pycache__/dss_provision.cpython-311.pyc | Bin 6792 -> 6792 bytes .../dss_provisionstypen.cpython-311.pyc | Bin 2980 -> 2980 bytes .../__pycache__/dss_settings.cpython-311.pyc | Bin 15639 -> 15639 bytes .../__pycache__/dss_trigger.cpython-311.pyc | Bin 64918 -> 64918 bytes .../dss_triggerexecute.cpython-311.pyc | Bin 2996 -> 2996 bytes .../dss_triggervalues.cpython-311.pyc | Bin 1798 -> 1798 bytes .../dss_web_contracts.cpython-311.pyc | Bin 20004 -> 20051 bytes .../__pycache__/dss_zahlungen.cpython-311.pyc | Bin 5430 -> 5430 bytes models/__pycache__/dsslogger.cpython-311.pyc | Bin 1610 -> 1610 bytes models/dss_ads.py | 2 + models/dss_contract.py | 13 +- models/dss_projects.py | 2 +- models/dss_web_contracts.py | 1 + models/dsslogger.py | 0 static/src/img/img_113_b.jpg | Bin static/src/img/img_113_b_2.jpg | Bin static/src/img/img_113_b_3.jpg | Bin static/src/img/img_115_b.jpg | Bin static/src/img/img_117_b.jpg | Bin static/src/img/img_119_b.jpg | Bin static/src/img/img_119_b_2.jpg | Bin static/src/img/img_119_b_3.jpg | Bin static/src/img/img_121_b.jpg | Bin static/src/img/img_134_b.jpg | Bin static/src/img/img_134_b_2.jpg | Bin static/src/img/img_134_b_3.jpg | Bin static/src/img/img_135_b.jpg | Bin static/src/img/img_137_b.jpg | Bin static/src/img/img_137_b_2.jpg | Bin static/src/img/img_137_b_3.jpg | Bin static/src/img/img_138_b.jpg | Bin static/src/img/img_138_b_2.jpg | Bin static/src/img/img_138_b_3.jpg | Bin static/src/img/img_146_b.jpg | Bin static/src/img/img_146_b_2.jpg | Bin static/src/img/img_146_b_3.jpg | Bin static/src/img/img_14_b.jpg | Bin static/src/img/img_14_b_2.jpg | Bin static/src/img/img_14_b_3.jpg | Bin static/src/img/img_150_b.jpg | Bin static/src/img/img_150_b_2.jpg | Bin static/src/img/img_150_b_3.jpg | Bin static/src/img/img_151_b.jpg | Bin static/src/img/img_151_b_2.jpg | Bin static/src/img/img_151_b_3.jpg | Bin static/src/img/img_17_b.jpg | Bin static/src/img/img_18_b.jpg | Bin static/src/img/img_21_b.jpg | Bin static/src/img/img_21_b_2.jpg | Bin static/src/img/img_21_b_3.jpg | Bin static/src/img/img_4_b.jpg | Bin static/src/img/img_4_b_2.jpg | Bin static/src/img/img_5_b.jpg | Bin static/src/img/img_62_b.jpg | Bin static/src/img/img_62_b_2.jpg | Bin static/src/img/img_62_b_3.jpg | Bin static/src/img/img_63_b.jpg | Bin static/src/img/img_63_b_2.jpg | Bin static/src/img/img_63_b_3.jpg | Bin static/src/img/img_65_b.jpg | Bin static/src/img/img_65_b_2.jpg | Bin static/src/img/img_65_b_3.jpg | Bin static/src/img/img_66_b.jpg | Bin static/src/img/img_66_b_2.jpg | Bin static/src/img/img_66_b_3.jpg | Bin static/src/img/img_67_b.jpg | Bin static/src/img/img_68_b.jpg | Bin static/src/img/img_69_b.jpg | Bin static/src/img/img_70_b.jpg | Bin static/src/img/img_70_b_2.jpg | Bin static/src/img/img_71_b.jpg | Bin static/src/img/img_72_b.jpg | Bin static/src/img/img_72_b_2.jpg | Bin static/src/img/img_72_b_3.jpg | Bin static/src/img/img_73_b.jpg | Bin static/src/img/img_74_b.jpg | Bin static/src/img/img_74_b_2.jpg | Bin static/src/img/img_74_b_3.jpg | Bin static/src/img/img_76_b.jpg | Bin static/src/img/img_77_b.jpg | Bin static/src/img/img_78_b.jpg | Bin static/src/img/img_79_b.jpg | Bin static/src/img/img_79_b_2.jpg | Bin static/src/img/img_79_b_3.jpg | Bin static/src/img/img_81_b.jpg | Bin static/src/img/img_81_b_2.jpg | Bin static/src/img/img_81_b_3.jpg | Bin static/src/img/img_83_b.jpg | Bin static/src/img/img_84_b.jpg | Bin static/src/img/img_85_b.jpg | Bin static/src/img/img_86_b.jpg | Bin static/src/img/img_87_b.jpg | Bin static/src/img/img_88_b.jpg | Bin static/src/img/img_90_b.jpg | Bin static/src/img/img_90_b_2.jpg | Bin static/src/img/img_90_b_3.jpg | Bin static/src/img/img_91_b.jpg | Bin static/src/img/img_92_b.jpg | Bin static/src/img/img_92_b_3.jpg | Bin static/src/img/img_93_b.jpg | Bin static/src/img/img_94_b.jpg | Bin static/src/img/img_94_b_2.jpg | Bin static/src/img/img_94_b_3.jpg | Bin static/src/img/img_96_b.jpg | Bin static/src/img/img_97_b.jpg | Bin static/src/img/img_98_b.jpg | Bin static/src/img/img_98_b_2.jpg | Bin static/src/img/img_99_b.jpg | Bin static/src/js/dss_screenview_archparser.js | 146 ++++++++++++------ static/src/js/dss_screenview_controller.js | 84 ++++++++-- static/src/js/dss_screenview_model.js | 31 ++-- static/src/js/dss_screenview_register.js | 111 ++++++++----- static/src/js/dss_screenview_renderer.js | 77 ++++++++- static/src/xml/dss_screenview_renderer.xml | 9 +- views/dss_ads.xml | 1 + views/dss_contracts.xml | 27 +++- views/dss_projects.xml | 2 +- views/dss_screendesign.xml | 2 +- 135 files changed, 391 insertions(+), 117 deletions(-) mode change 100644 => 100755 models/__pycache__/__init__.cpython-311.pyc mode change 100755 => 100644 models/__pycache__/dss_ads.cpython-311.pyc mode change 100644 => 100755 models/__pycache__/dss_m2mmail.cpython-311.pyc mode change 100644 => 100755 models/__pycache__/dss_settings.cpython-311.pyc mode change 100644 => 100755 models/__pycache__/dss_trigger.cpython-311.pyc mode change 100755 => 100644 models/__pycache__/dss_web_contracts.cpython-311.pyc mode change 100644 => 100755 models/__pycache__/dsslogger.cpython-311.pyc mode change 100644 => 100755 models/dsslogger.py mode change 100755 => 100644 static/src/img/img_113_b.jpg mode change 100755 => 100644 static/src/img/img_113_b_2.jpg mode change 100755 => 100644 static/src/img/img_113_b_3.jpg mode change 100755 => 100644 static/src/img/img_115_b.jpg mode change 100755 => 100644 static/src/img/img_117_b.jpg mode change 100755 => 100644 static/src/img/img_119_b.jpg mode change 100755 => 100644 static/src/img/img_119_b_2.jpg mode change 100755 => 100644 static/src/img/img_119_b_3.jpg mode change 100755 => 100644 static/src/img/img_121_b.jpg mode change 100755 => 100644 static/src/img/img_134_b.jpg mode change 100755 => 100644 static/src/img/img_134_b_2.jpg mode change 100755 => 100644 static/src/img/img_134_b_3.jpg mode change 100755 => 100644 static/src/img/img_135_b.jpg mode change 100755 => 100644 static/src/img/img_137_b.jpg mode change 100755 => 100644 static/src/img/img_137_b_2.jpg mode change 100755 => 100644 static/src/img/img_137_b_3.jpg mode change 100755 => 100644 static/src/img/img_138_b.jpg mode change 100755 => 100644 static/src/img/img_138_b_2.jpg mode change 100755 => 100644 static/src/img/img_138_b_3.jpg mode change 100755 => 100644 static/src/img/img_146_b.jpg mode change 100755 => 100644 static/src/img/img_146_b_2.jpg mode change 100755 => 100644 static/src/img/img_146_b_3.jpg mode change 100755 => 100644 static/src/img/img_14_b.jpg mode change 100755 => 100644 static/src/img/img_14_b_2.jpg mode change 100755 => 100644 static/src/img/img_14_b_3.jpg mode change 100755 => 100644 static/src/img/img_150_b.jpg mode change 100755 => 100644 static/src/img/img_150_b_2.jpg mode change 100755 => 100644 static/src/img/img_150_b_3.jpg mode change 100755 => 100644 static/src/img/img_151_b.jpg mode change 100755 => 100644 static/src/img/img_151_b_2.jpg mode change 100755 => 100644 static/src/img/img_151_b_3.jpg mode change 100755 => 100644 static/src/img/img_17_b.jpg mode change 100755 => 100644 static/src/img/img_18_b.jpg mode change 100755 => 100644 static/src/img/img_21_b.jpg mode change 100755 => 100644 static/src/img/img_21_b_2.jpg mode change 100755 => 100644 static/src/img/img_21_b_3.jpg mode change 100755 => 100644 static/src/img/img_4_b.jpg mode change 100755 => 100644 static/src/img/img_4_b_2.jpg mode change 100755 => 100644 static/src/img/img_5_b.jpg mode change 100755 => 100644 static/src/img/img_62_b.jpg mode change 100755 => 100644 static/src/img/img_62_b_2.jpg mode change 100755 => 100644 static/src/img/img_62_b_3.jpg mode change 100755 => 100644 static/src/img/img_63_b.jpg mode change 100755 => 100644 static/src/img/img_63_b_2.jpg mode change 100755 => 100644 static/src/img/img_63_b_3.jpg mode change 100755 => 100644 static/src/img/img_65_b.jpg mode change 100755 => 100644 static/src/img/img_65_b_2.jpg mode change 100755 => 100644 static/src/img/img_65_b_3.jpg mode change 100755 => 100644 static/src/img/img_66_b.jpg mode change 100755 => 100644 static/src/img/img_66_b_2.jpg mode change 100755 => 100644 static/src/img/img_66_b_3.jpg mode change 100755 => 100644 static/src/img/img_67_b.jpg mode change 100755 => 100644 static/src/img/img_68_b.jpg mode change 100755 => 100644 static/src/img/img_69_b.jpg mode change 100755 => 100644 static/src/img/img_70_b.jpg mode change 100755 => 100644 static/src/img/img_70_b_2.jpg mode change 100755 => 100644 static/src/img/img_71_b.jpg mode change 100755 => 100644 static/src/img/img_72_b.jpg mode change 100755 => 100644 static/src/img/img_72_b_2.jpg mode change 100755 => 100644 static/src/img/img_72_b_3.jpg mode change 100755 => 100644 static/src/img/img_73_b.jpg mode change 100755 => 100644 static/src/img/img_74_b.jpg mode change 100755 => 100644 static/src/img/img_74_b_2.jpg mode change 100755 => 100644 static/src/img/img_74_b_3.jpg mode change 100755 => 100644 static/src/img/img_76_b.jpg mode change 100755 => 100644 static/src/img/img_77_b.jpg mode change 100755 => 100644 static/src/img/img_78_b.jpg mode change 100755 => 100644 static/src/img/img_79_b.jpg mode change 100755 => 100644 static/src/img/img_79_b_2.jpg mode change 100755 => 100644 static/src/img/img_79_b_3.jpg mode change 100755 => 100644 static/src/img/img_81_b.jpg mode change 100755 => 100644 static/src/img/img_81_b_2.jpg mode change 100755 => 100644 static/src/img/img_81_b_3.jpg mode change 100755 => 100644 static/src/img/img_83_b.jpg mode change 100755 => 100644 static/src/img/img_84_b.jpg mode change 100755 => 100644 static/src/img/img_85_b.jpg mode change 100755 => 100644 static/src/img/img_86_b.jpg mode change 100755 => 100644 static/src/img/img_87_b.jpg mode change 100755 => 100644 static/src/img/img_88_b.jpg mode change 100755 => 100644 static/src/img/img_90_b.jpg mode change 100755 => 100644 static/src/img/img_90_b_2.jpg mode change 100755 => 100644 static/src/img/img_90_b_3.jpg mode change 100755 => 100644 static/src/img/img_91_b.jpg mode change 100755 => 100644 static/src/img/img_92_b.jpg mode change 100755 => 100644 static/src/img/img_92_b_3.jpg mode change 100755 => 100644 static/src/img/img_93_b.jpg mode change 100755 => 100644 static/src/img/img_94_b.jpg mode change 100755 => 100644 static/src/img/img_94_b_2.jpg mode change 100755 => 100644 static/src/img/img_94_b_3.jpg mode change 100755 => 100644 static/src/img/img_96_b.jpg mode change 100755 => 100644 static/src/img/img_97_b.jpg mode change 100755 => 100644 static/src/img/img_98_b.jpg mode change 100755 => 100644 static/src/img/img_98_b_2.jpg mode change 100755 => 100644 static/src/img/img_99_b.jpg diff --git a/controllers/__pycache__/__init__.cpython-311.pyc b/controllers/__pycache__/__init__.cpython-311.pyc index 832b7ad8f48656c0b0c8d11a25358a5bc14eafe8..b67ee907574fb7cd173913fd593e0e37e74c1c5c 100755 GIT binary patch delta 20 acmbQrG?j^aIWI340}!n5c)yXGixB`aXaw>A delta 20 acmbQrG?j^aIWI340}!aLd%cmHixB`Xas-M1 diff --git a/controllers/__pycache__/dss_screendesigner_controller.cpython-311.pyc b/controllers/__pycache__/dss_screendesigner_controller.cpython-311.pyc index 93828c75cbf900396bdca3a26b00c67e84e3e682..20084013c08645ec8cb5a39a0d5a61069b8a22d0 100755 GIT binary patch delta 20 acmcc4bDf8KIWI340}!n5c)yX`hYbKeB?Zv{ delta 20 acmcc4bDf8KIWI340}!aLd%cm{hYbKbF9m4; diff --git a/controllers/__pycache__/main.cpython-311.pyc b/controllers/__pycache__/main.cpython-311.pyc index b6f15cfc6d330d385e7adc99a83a1c76f9499b72..2b29ea3203e57b8a4bb95a9f4d269b31dc6745cd 100755 GIT binary patch delta 20 acmdmMw%3e%IWI340}!n5c)yX`NE!e@5(Vr4 delta 20 acmdmMw%3e%IWI340}!aLd%cm{NE!e=90h~` diff --git a/models/__pycache__/__init__.cpython-311.pyc b/models/__pycache__/__init__.cpython-311.pyc old mode 100644 new mode 100755 index d0c9eeaa13b16d0dd131f29b019ef9b02022cad1..7aec4e9ee62c530d730b7b9aaa321c0213323b16 GIT binary patch delta 20 acmdnTyN{Q9IWI340}!n5c)yW*GaCRqVFm~Q delta 20 acmdnTyN{Q9IWI340}vE2zum~anGFCofCWMT diff --git a/models/__pycache__/dss.cpython-311.pyc b/models/__pycache__/dss.cpython-311.pyc index 3ce65429147787508baa0feb49dd077689fb6f82..73520dc6058391290dea3cfcfa26b23b5b33b3a6 100755 GIT binary patch delta 22 ccmX@UgYozdM(*Xjyj%=Gu(R^nMsAxJ09cL(LjV8( delta 22 ccmX@UgYozdM(*Xjyj%=G;G6YoBezWq098~5%m4rY diff --git a/models/__pycache__/dss_activity_mixin.cpython-311.pyc b/models/__pycache__/dss_activity_mixin.cpython-311.pyc index 34cddd7dc4e048113554bc3b3855b7b6452c2dfa..f70b6af7d284b9e2161c8f10aac0514dd0f5f478 100755 GIT binary patch delta 20 acmaDV`c#yAIWI340}!n5c)yYR78d|Qod%Hr delta 20 acmaDV`c#yAIWI340}!aLd%cnS78d|Nrv@ni diff --git a/models/__pycache__/dss_ads.cpython-311.pyc b/models/__pycache__/dss_ads.cpython-311.pyc old mode 100755 new mode 100644 index 98f35981d4fdb90fe9fd5730887d939a35167105..6b3ecf751d8b4b64b81e2bd47f6ff4defe8fe1ca GIT binary patch delta 1805 zcmZ{ke@xVM7{|Y#Lk@#+f(RJ`chQC2B_M)-h=fycE8>*oVs;>3zVQ9(j^GYIch{k= z&P`2RxylEdS<{t@I+$r+H(j#QG}l%XpeDQ45?8Iw5#%_%<%i+}2WJ!Ei1}4^-SD&zyn@lqw(rZj-l1ftBEf~S4zMv)#WcQgQ zsbBn)pQqL&Y36pb6Jr0ALGr9r*KCzMbz-WdDWlqa zpVxD$EWB2!ErRu`BIq_UJ^x=!tC6WTma6T(NgCop)VSibxCly2DNIv4MKZZZ>Smsn zddcC_D^mK?XQkKseX7R2zO{bdsRX@#Uo@Ax=H%*$xp|BQ$ey=>9o6^cEnsN@Q6f(P z%7AXVW-VqLD9u*K26e?&lsG>k?2Zf`=V*nu0|*0)fNp_kmPnLES03M#vJtjTK!h3# zI@ksMivn(9VOs21#xBt-j_oN%>|}Ntcg`Za)4{IN3g;H#HR`NoQL;XHSIE|ROW60i zJZ~1u+KnU@MGeRuN+2i)f=W>1VcJn>XB+8QVJ#ci|0-O~rlS~#neU~>;<>3P-jTrb zQOrhqqqvRzs!tU6GZv!#B}>^>8ZSA({?NBA(3tssIDJ63N}UQ*h6IgS{Y z1&*30`_@CpD{|Ow8mj1JJ=FTto=l^L1MoWt90Ec#qtaD=Scs0uh0$nztO>ED-?M7?#g6wSsF#5&z_-9M;3_aiX|9D- z#~?P$9bf9?nZR%exTjvIKMFW3ycDt(Fz$=7FXd3G?A3fvFVL#DY z_j0yRA8_Ah<}nQ2pd$_S;*$Q|(3`;CqqjT?yFnA40<&?xLS${+l5Om~(TyDlF^aH3 z3e#X?13RZ@G@W7(k1$CJ;C`-WY%_6pi<}^33J;a-zU}x#w<`VNR z#Gj(kW_uxKjwW|;f4kNel)b8P`l6ODg=@Z`tf+D*3-$XG8R~TrH0J zPWedoUQDzNFy5AzAiWH{N-JBO<~tDoq)1Dz-4f{1+Pq4K%rzw-9>(YE`fcxRI z9(bMRD)~k4K->?U1Wp6jfS-Y1fSbTwz(irCl(p*p%E`p6Oxv3cy^X_nWf*79!!z3={IBS_y6%QX8s3-W6Jjc delta 1636 zcmZ{ke@sGv9U1%e=^>_y7lNfYF)43eTX~Ew<6WY7o}FI^*rifRpzW#8#rr>$=v_s zC<~U~vS^M+7GyLU8L8ol)kP^D)z^!wtl2UBLKk@D8bNB+8?56?z=jv>Hoef648X89 zxf{mxnPdknW4s<_B{&IBa)cy`#pz^=C^z{v)`br6r}2HMkL#kW3Yfv2Sv_1wudaky^sK(g zwP#HUoY!}+SqgUr`4pizMGeR;NfChHzkQ zW-N6gMX)qlz8gPT+Xz?ntaal68lKH9g&s_F?1LNnhYlZz!xZ#7W;(MH-r_POKB4%x zD1KH(_7PN_rIBM?;)ruqf@Eg*kog@#GT~jEbK2kl{^2Z!SiNxl^X8HxWT)&?)wkDJ9MqV|+i6%e4~sxC%km z&%5km{sr>UVYwGpI)5L?tr2c3mxdRyz@3t`pym*HjFXwbfLnq~_?o*MUezzUe*y6v zIj`WHr-pw|d7Fa~@CttFRp1I{)!Iel(rDw!sqW8EQG zev1DJ0%mT0Mwq?h&i-x8&b8EliS_yLELPWh;APxje=khpnfhGuMan;j(Qhkb0W1lOvRlD^pj*D;-*! z+^F~)eJ$)a^8Jbj8-h#Cs;}MWR|Bk#Y}*LC(66NB43gYK& diff --git a/models/__pycache__/dss_advertisefields_templates.cpython-311.pyc b/models/__pycache__/dss_advertisefields_templates.cpython-311.pyc index c73b6bade76dde11696e47329df643f0e92932e0..05edd4813e6dc1d47f09c4277dedd10670b876a2 100755 GIT binary patch delta 20 acmeAO?Fi*w&dbZi00at3Pd9ScY5@Q?wgnpi delta 20 acmeAO?Fi*w&dbZi00h2SuQqbmY5@Q_x&@U0 diff --git a/models/__pycache__/dss_contract.cpython-311.pyc b/models/__pycache__/dss_contract.cpython-311.pyc index 3ec6144ecb56966b440357cf839613a5cccc63c0..8755b38c40e82622d9331fad9f2171cf1252a1ed 100644 GIT binary patch delta 4944 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 CN`rj> diff --git a/models/__pycache__/dss_display_templates.cpython-311.pyc b/models/__pycache__/dss_display_templates.cpython-311.pyc index 136eaf07b6fbc5e0d7be182950dee55eb67985d6..46588a83a89f05b2d0c4cf9a524f7ede7dc236e6 100755 GIT binary patch delta 20 acmcbjb47=HIWI340}#x5`*gcR-GNIWI340}!n5c)yX`lpg>+9tF7o delta 20 acmX>gcR-GNIWI340}%W%db^R^lpg>+D+R6q diff --git a/models/__pycache__/dss_marker.cpython-311.pyc b/models/__pycache__/dss_marker.cpython-311.pyc index 331aedb33ddb63ad022c9661599017939a060c68..ef9eb1eb31e37e9bc805c39d444d692e1164782c 100755 GIT binary patch delta 20 acmZ1|xKNOLIWI340}!n5c)yW*8V3M3YX!Ri delta 20 acmZ1|xKNOLIWI340}!aLd%cl+8V3M0bp=xZ diff --git a/models/__pycache__/dss_onlinestate.cpython-311.pyc b/models/__pycache__/dss_onlinestate.cpython-311.pyc index 7a81c9cbc91a983229747455d0bfa8220968f487..8bfdc6176edfed47e8f604629ad44c9140798565 100755 GIT binary patch delta 20 acmX>lc}kLdIWI340}!n5c)yW*KMw#t_XbJ; delta 20 acmX>lc}kLdIWI340}!aLd%cl+KMw#r0R`d! diff --git a/models/__pycache__/dss_projects.cpython-311.pyc b/models/__pycache__/dss_projects.cpython-311.pyc index 4658dc114781857daaef0834008e51df9309ad03..bc6b7e08c65b26a737c0a173a157dd82a7519a15 100644 GIT binary patch delta 673 zcmZ9|OKTHR6aZk)n2fDqd|+c$D8g7$Q^(jE1t|(H)YPPw2t`Vy$~ZGg)5JUR&eX&P zr9SG$YSimOMAWv>VyX*!1s4_F6nvnF4G3l@_y^n+95>#x5Q?+-IQP6bOr-{kHBe?0 zW%Ua2eeM30(OxKa$QKUudTcbb_3*}=PR{5=bE#!%jv*xHvsTelOvi~BHgTzLxK4eQ zF-)mNTyH~JHLbKhoOe$bs6AvEuG;0X@1d4vZ{5l5>c5<(9#Az;3J*MGO4|bLV=uK< zzSNeKpvYtGe(8uffDVe2XjU*1Sat;+!gLPFBWDqU*hoPTUP*f~F0zz13uP|v?18{F z%#0z|*+67h@Ct@kk!2M=5m_(6IO82LD6u~s?QnyKI-dbtKAY&yO}o)oo_FuS~0<-g;>#$Z{z>Hn~8eNUjo z7y9-?bOIaR;l>8BjhHrd>21v2LGB_9xrbDcTReK=xCF1*Sbq;x`C|Vjh+YtddV@`j zL7ikQdI|eRk#Xcc@&I{^Oe2%LC3Q0Z2{vn`V4lh8L-2_u(x;%zs_9DePwYtw>i%Q4 TY2|4XCK4=}*#aidWm=`b$j;Ap delta 657 zcmZ9HO=uHA7>4u3Buxy_ij63UKTBJi8ly2@46%5y)TFhvQbj8^uGz_t#@*!G-KMVA z_G0m`EjS{IE#y!L#a1X|1uud>h+Zvt$ib5r5AoQ8C-*xP#5p|k&O7h-GV^T>X4fE4 z3j{Vh>{V-PrELGk*S8Y z{g$M#tZWvIbP2UY;;#zO}LUk|ql=ooN9S)A>3JGWro4uv*hzrA6Z&xc=vDUyf!z<-CF z3Bn|=Mh*vWlN=}fb0dC6wmD&nuOI0F z6+FwNpYr3$ce_??S$Aa%s)A*bo(wYkTe!@dQzz}w!Bi;zf#M$tp9nR|xk^P9>wx%` zPHuaijo};8zM`xfx?UAzz5_#Bs?Na6J`ka3HQY4`9UYF@GlqoU_k^g?u3|bU(~&tn#s#*j^P;PEW#Aw zG2sc}IiX6J6IX_({m{*Svtd}}$?Pfk%xAJAVDd(G_UI4F4A`i<&u9uOVhb7F;BYKD Ya3ASCHvV`MH#Eg8vMwAEuX3%z`br3K0W delta 20 acmeA$?J(tD&dbZi00gS*UT@^Cl>z`YuLWWN diff --git a/models/__pycache__/dss_provisionstypen.cpython-311.pyc b/models/__pycache__/dss_provisionstypen.cpython-311.pyc index 0cb13130c8f64166d43f0cc50513a38cfd60b969..687234c230dcd6e292ac2bddeb437f4277ca3847 100755 GIT binary patch delta 20 acmZ1?zC@gRIWI340}!n5c)yW*CN}^$z6H|& delta 20 acmZ1?zC@gRIWI340}!aLd%cl+CN}^z$OUTv diff --git a/models/__pycache__/dss_settings.cpython-311.pyc b/models/__pycache__/dss_settings.cpython-311.pyc old mode 100644 new mode 100755 index 8eb6872aa93c22ffaf96ca09a0a4999061c1a29e..5c6b14b9423c415bdb4d076708d97fb2898e80c5 GIT binary patch delta 20 acmbPUHNA>^IWI340}!n5c)yXG#})uX)CME~ delta 20 acmbPUHNA>^IWI340}x!5d%KaF#})uWSOwky diff --git a/models/__pycache__/dss_trigger.cpython-311.pyc b/models/__pycache__/dss_trigger.cpython-311.pyc old mode 100644 new mode 100755 index 5ad68247da0711d56c16d1845f5de873e1a2dc31..4e40a3e5b281bbd8dd8675147d286b9905a782a2 GIT binary patch delta 22 ccmbRCn|a!AX71&@yj%=Gu)gE{M(*yv09>>PX#fBK delta 22 ccmbRCn|a!AX71&@yj%=G;C}A)M(*yv09$MbLjV8( diff --git a/models/__pycache__/dss_triggerexecute.cpython-311.pyc b/models/__pycache__/dss_triggerexecute.cpython-311.pyc index 064aa0a84468e2e60483f813edec32adc8c7e983..5be685045cd37ebc6a8bf36e94f54f64db50a680 100755 GIT binary patch delta 20 acmdlYzD1mSIWI340}!n5c)yW*B{u*&J_Z8- delta 20 acmdlYzD1mSIWI340}!aLd%cl+B{u*#NCle! diff --git a/models/__pycache__/dss_triggervalues.cpython-311.pyc b/models/__pycache__/dss_triggervalues.cpython-311.pyc index dc1d5431aac954740df948ccf4bb46897b88fabb..c811f81da5bad0593c7aeb2c6d49c21151f47d85 100755 GIT binary patch delta 20 acmZqUYvbcy&dbZi00iqh-f!go%?1E7#RcL3 delta 20 acmZqUYvbcy&dbZi00gS*UT@_7%?1E4&joq_ diff --git a/models/__pycache__/dss_web_contracts.cpython-311.pyc b/models/__pycache__/dss_web_contracts.cpython-311.pyc old mode 100755 new mode 100644 index 1e4b48c0dcee0c1a1ad734047eff8e3ba3bbda77..7fe69c96198b3447df5c95807872d0ec25a36891 GIT binary patch delta 1346 zcmZvcOKclO9LDGG#G6NJ+L8o2Y2x~sIuAFE8z))kVL}RdCq<1&D+H07HEE!6#MaOX z6{1QU;D$6@D&?m5I4YTJweM}tpTF+dY@l_6+^^c~zH{tZh1YrZdi}EJLk5kL7Le@U zB9nvsre}~E`SZ~#-si5Q{oLgptP06gc_H}X9q<*hy5oSrJUjLA%>Kw68|dNq8h zgt05~*=lCpft9jLBwhJzwU=#L+c`GdRA7xAWlaZ-HSYy->^ze^F*~=EO6!TaG(YSA zir(Rqf$OdtGQ6tj$;E{JoPJY+{yyXb?hL+8VSX{#{DiMN_U_J%mR%A|cE9N!$aG|T zvvE-(X{~!OGo5`}*kxZROr4;dmY+Vin0m=ljEn*MwL8ea8?IY9qBMYJmMm1B%DL0*;m=iVNhpbth zU{_H=EsQ!Vuoqmv9avrv4RGAnLid3^7JI??ZsFT5TM&L2fg&RaqtRN~esIY8-X?G} zQxB85T`j;?wp`#a_(0M7+F%?kGTLE8m^wnaKz{ToaR}VO)FH~1=7*1qD7e!a?*ex- z^-(f^ITaW~Jd@6z5k0_OHf?QfADn(`!Ex}z#MDvBb$r$%1_;I@(kRS0Xgb)M4d!$9 z+=aZh65j^~ROhkc~3NX0J+ggNOU?DF2=P(zu^Kr?qni0pVYs__;-*s$PdQH@!7InZT5g*+j7EaADXvO zC%-Tfo%s>5pCCU&et}@)^xq)ALrNj*5d1x?+S4a-ab5Du^%{r=Lk$oo5YoZH*<>+S)_0UUK4&&W+@9N`_&MUPubwpWh#rCmaJjw?-~TdcZTeJP8OEBu*lsc|)vIhTOD{F!aX zbYksM60S_MNH&qmI+}Go2X9gnlfFi2BQI><8ON8~Hw5#0_ zHV=6|5!QiXR6BRD1r{1~woahChzPx)jH`WvY%y{^5!xVbPgJobh)apk2TwQjs~cjh z01YD%xWV6N=WZXBi&JBw( z8yfZu!-0lVTiFU^m$u(ZWH%AoA$43;h}C2w%{9oi8TIPWsLwD~qR~KvPEhP>*DltG z>>)x2DB0?|?aYhp)8b9Yej==a)SD9!0~z(2(FnC@D{Mt$6%o2X@jPl~LB!RdP0$AD z;7QC7OHuPTl+z2ox63`Q>pGa0f4Z9h-pStT8J*!H|AfXG=-a?H>TER2Q*~6g_A!1| zPf!k_Jmqqv@SrrhKRPfTj)~!ceUXvDs5xK`g{5iCc!u&EMMZgm@{&e;1@vr#-|(H| zSPf1gI~%{~^8YMPUA~Ia|JK=P$mMrsEW&FXmg}1gS%2498?gSrMgct^Xoux;GSH!e zd$P4v0Fdd-j(Y$zHYi3~@j`}9<>$(z7kJw(CVoYW7G ziqRpd6#KcOBeQ2By~g+(l(#7F { - switch (node.tagName) { - case "field": { - alert('Field') - const fieldName = node.getAttribute("name"); // exists (rng validation) - if (fieldName === "id") { - break; - } - const string = node.getAttribute("string"); - if (string) { - if (!archInfo.fieldAttrs[fieldName]) { - archInfo.fieldAttrs[fieldName] = {}; - } - archInfo.fieldAttrs[fieldName].string = string; - } - const modifiers = JSON.parse(node.getAttribute("modifiers") || "{}"); - if (modifiers.invisible === true) { - if (!archInfo.fieldAttrs[fieldName]) { - archInfo.fieldAttrs[fieldName] = {}; - } - archInfo.fieldAttrs[fieldName].isInvisible = true; - break; - } - const isMeasure = node.getAttribute("type") === "measure"; - if (isMeasure) { - // the last field with type="measure" (if any) will be used as measure else __count - archInfo.measure = fieldName; - } else { - const { type } = archInfo.fields[fieldName]; // exists (rng validation) - if (GROUPABLE_TYPES.includes(type)) { - let groupBy = fieldName; - const interval = node.getAttribute("interval"); - if (interval) { - groupBy += `:${interval}`; - } - archInfo.groupBy.push(groupBy); - } - } - break; + parse(arch, models, modelName) { + const xmlDoc = this.parseXML(arch); + const jsClass = xmlDoc.getAttribute("js_class"); + const disableAutofocus = archParseBoolean(xmlDoc.getAttribute("disable_autofocus") || ""); + const activeActions = getActiveActions(xmlDoc); + const fieldNodes = {}; + const fieldNextIds = {}; + let autofocusFieldId = null; + const activeFields = {}; + alert("begin") + this.visitXML(xmlDoc, (node) => { + if (node.tagName === "field") { + alert('field') + const fieldInfo = Field.parseFieldNode(node, models, modelName, "form", jsClass); + let fieldId = fieldInfo.name; + if (fieldInfo.name in fieldNextIds) { + fieldId = `${fieldInfo.name}_${fieldNextIds[fieldInfo.name]++}`; + } else { + fieldNextIds[fieldInfo.name] = 1; } + fieldNodes[fieldId] = fieldInfo; + node.setAttribute("field_id", fieldId); + if (archParseBoolean(node.getAttribute("default_focus") || "")) { + autofocusFieldId = fieldId; + } + addFieldDependencies( + activeFields, + models[modelName], + fieldInfo.FieldComponent.fieldDependencies + ); + return false; + } else if (node.tagName === "div" && node.classList.contains("oe_chatter")) { + // remove this when chatter fields are declared as attributes on the root node + return false; + } else if (node.tagName === "widget") { + const { WidgetComponent } = Widget.parseWidgetNode(node); + addFieldDependencies( + activeFields, + models[modelName], + WidgetComponent.fieldDependencies + ); } }); - return archInfo; + // TODO: generate activeFields for the model based on fieldNodes (merge duplicated fields) + for (const fieldNode of Object.values(fieldNodes)) { + const fieldName = fieldNode.name; + if (activeFields[fieldName]) { + const { alwaysInvisible } = fieldNode; + activeFields[fieldName] = { + ...fieldNode, + // a field can only be considered to be always invisible + // if all its nodes are always invisible + alwaysInvisible: activeFields[fieldName].alwaysInvisible && alwaysInvisible, + }; + } else { + activeFields[fieldName] = fieldNode; + } + // const { onChange, modifiers } = fieldNode; + // let readonly = modifiers.readonly || []; + // let required = modifiers.required || []; + // if (activeFields[fieldNode.name]) { + // activeFields[fieldNode.name].readonly = Domain.combine([activeFields[fieldNode.name].readonly, readonly], "|"); + // activeFields[fieldNode.name].required = Domain.combine([activeFields[fieldNode.name].required, required], "|"); + // activeFields[fieldNode.name].onChange = activeFields[fieldNode.name].onChange || onChange; + // } else { + // activeFields[fieldNode.name] = { readonly, required, onChange }; + // } + } + return { + arch, + activeActions, + activeFields, + autofocusFieldId, + disableAutofocus, + fieldNodes, + xmlDoc, + __rawArch: arch, + }; } } +// parse(arch, fields = {}) { +// const archInfo = { fields, fieldAttrs: {}, groupBy: [] }; +// this.visitXML(arch, (node) => { +// switch (node.tagName) { +// case "field": { +// alert('Field') +// const fieldName = node.getAttribute("name"); // exists (rng validation) +// fieldNames.add(fieldName); +// if (fieldName === "id") { +// break; +// } +// const string = node.getAttribute("string"); +// if (string) { +// if (!archInfo.fieldAttrs[fieldName]) { +// archInfo.fieldAttrs[fieldName] = {}; +// } +// archInfo.fieldAttrs[fieldName].string = string; +// } +// break; +// } +// } +// }); +// return archInfo; +// } +//} // parse(arch) { // const xmlDoc = this.parseXML(arch); // const fieldFromTheArch = xmlDoc.getAttribute("fieldFromTheArch"); diff --git a/static/src/js/dss_screenview_controller.js b/static/src/js/dss_screenview_controller.js index 7eec9d0..df55263 100755 --- a/static/src/js/dss_screenview_controller.js +++ b/static/src/js/dss_screenview_controller.js @@ -1,27 +1,87 @@ /** @odoo-module **/ import { Layout } from "@web/search/layout"; -import {useService } from "@web/core/utils/hooks"; +import { useBus, useService } from "@web/core/utils/hooks"; +import { useModel } from "@web/views/model"; import { Component, onWillStart, useState} from "@odoo/owl"; + +const { onRendered } = owl; + export class ScreenViewController extends Component { setup() { - this.orm = useService("orm"); + alert('setup') +/* this.orm = useService("orm"); + this.dialogService = useService("dialog"); + this.router = useService("router"); + this.user = useService("user"); + this.viewService = useService("view"); + this.ui = useService("ui"); + this.state = useState({ + isDisabled: false, + fieldIsDirty: false, + }); + useBus(this.ui.bus, "resize", this.render); - // The controller create the model and make it reactive so whenever this.model is - // accessed and edited then it'll cause a rerendering - this.model = useState( - new this.props.Model( - this.orm, - this.props.resModel, - this.props.fields, - this.props.archInfo, - this.props.domain - ) + this.archInfo = this.props.archInfo; + const activeFields = this.archInfo.activeFields; + + this.beforeLoadResolver = null; + const beforeLoadProm = new Promise((r) => { + this.beforeLoadResolver = r; + }); + + const { create, edit } = this.archInfo.activeActions; + this.canCreate = create && !this.props.preventCreate; + this.canEdit = edit && !this.props.preventEdit; + + let mode = this.props.mode || "edit"; + if (!this.canEdit) { + mode = "readonly"; + } + + this.model = useModel( + this.props.Model, + { + resModel: this.props.resModel, + resId: this.props.resId || false, + resIds: this.props.resIds, + fields: this.props.fields, + activeFields, + viewMode: "form", + rootType: "record", + mode, + beforeLoadProm, + component: this, + }, + { + ignoreUseSampleModel: true, + } ); + */ + // The controller create the model and make it reactive so whenever this.model is + // accessed and edited then it'll cause a rerendering +// this.model = useState( +// new this.props.Model( +// this.orm, +// this.props.resModel, +// this.props.fields, +// this.props.archInfo, +// this.props.domain +// ) +// ); onWillStart(async () => { await this.model.load(); }); + + onRendered(() => { + this.env.config.setDisplayName(this.displayName()); + }); } + + displayName() { + return this.model.root.data.display_name || this.env._t("New"); + } + }; ScreenViewController.template = "dss.screenview"; diff --git a/static/src/js/dss_screenview_model.js b/static/src/js/dss_screenview_model.js index 6bc89a9..8975369 100755 --- a/static/src/js/dss_screenview_model.js +++ b/static/src/js/dss_screenview_model.js @@ -1,24 +1,27 @@ /** @odoo-module **/ import { KeepLast } from "@web/core/utils/concurrency"; +import { Model } from "@web/views/model"; -export class ScreenViewModel { - constructor(orm, resModel, fields, archInfo, domain) { - this.orm = orm; - this.resModel = resModel; - // We can access arch information parsed by the beautiful arch parser - const { fieldFromTheArch } = archInfo; - this.fieldFromTheArch = fieldFromTheArch; - this.fields = fields; - this.domain = domain; +export class ScreenViewModel extends Model { + setup(params) { + // concurrency management this.keepLast = new KeepLast(); + this.searchParams = { + context: {}, + domain: [], + domains: [], + groupBy: [], + }; + this.domain = [] } async load() { //The keeplast protect against concurrency call - const { length, records } = await this.keepLast.add( - this.orm.webSearchRead(this.resModel, this.domain, [this.fieldFromTheArch], {}) - ); - this.records = records; - this.recordsLength = length; + alert('load') +// const { length, records } = await this.keepLast.add( +// this.orm.webSearchRead(this.resModel, this.domain, [this.fieldFromTheArch], {}) +// ); +// this.records = records; +// this.recordsLength = length; } } \ No newline at end of file diff --git a/static/src/js/dss_screenview_register.js b/static/src/js/dss_screenview_register.js index afc9d99..e2e4a54 100755 --- a/static/src/js/dss_screenview_register.js +++ b/static/src/js/dss_screenview_register.js @@ -1,40 +1,75 @@ /** @odoo-module **/ -import { _lt } from "@web/core/l10n/translation"; -import { registry } from "@web/core/registry"; -import {ScreenViewRenderer} from "./dss_screenview_renderer"; -import {ScreenViewController} from "./dss_screenview_controller"; -import {ScreenViewArchParser} from "./dss_screenview_archparser"; -import {ScreenViewModel} from "./dss_screenview_model"; -//import {GridRelationalModel} from "./grid_relational_model"; -export const ScreenView = { - type: "screenview", - display_name: _lt("ScreenView"), - icon: "fa fa-th", - multiRecord: true, - Controller: ScreenViewController, - Renderer: ScreenViewRenderer, - ArchParser: ScreenViewArchParser, - Model: ScreenViewModel, - /** - * Function that returns the props for the grid view. - * @param {object} genericProps - Generic properties of the view. - * @param {object} view - The view object. - * @returns {object} Props for the grid view. - */ - props: (genericProps, view) => { - const {ArchParser,Model,Renderer} = view; - //const {arch,relatedModels,resModel} = genericProps; - const {arch, fields, resModel } = genericProps; - //const archInfo = new ArchParser().parse(arch, relatedModels, resModel); - const archInfo = parser.parse(arch, fields); - return { - ...genericProps, - archInfo, - Model: view.Model, - Renderer, - }; +import AbstractView from "web.AbstractView"; +import BasicView from "web.BasicView"; +import view_registry from 'web.view_registry'; +import { ScreenViewModel } from "./dss_screenview_model"; +import { ScreenViewController } from "./dss_screenview_controller"; +import { ScreenViewRenderer } from "./dss_screenview_renderer"; +import RendererWrapper from 'web.RendererWrapper'; + + +export const HelloWorldView = BasicView.extend({ + viewType: 'screenview', + config: _.extend({}, BasicView.prototype.config, { + Renderer: ScreenViewRenderer + }), + + getRenderer(parent, state) { + state = Object.assign({}, state, this.rendererParams); + return new RendererWrapper(null, this.config.Renderer, state); + }, +}); + +view_registry.add('screenview', HelloWorldView) + +return HelloWorldView; +ScreenViewModel + +// /* +// /** @odoo-module **/ +// import { _lt } from "@web/core/l10n/translation"; +// import { registry } from "@web/core/registry"; +// import { RelationalModel } from "@web/model/relational_model/relational_model"; +// import { ScreenViewRenderer } from "./dss_screenview_renderer"; +// import { ScreenViewController } from "./dss_screenview_controller"; +// import { ScreenViewArchParser } from "./dss_screenview_archparser"; +// import { ScreenViewModel } from "./dss_screenview_model"; +// //import {GridRelationalModel} from "./grid_relational_model"; +// export const ScreenView = { +// type: "screenview", +// display_name: _lt("ScreenView"), +// icon: "fa fa-th", +// multiRecord: true, +// Controller: ScreenViewController, +// Renderer: ScreenViewRenderer, +// ArchParser: ScreenViewArchParser, +// //Model: RelationalModel, +// Model: ScreenViewModel, +// /** +// * Function that returns the props for the grid view. +// * @param {object} genericProps - Generic properties of the view. +// * @param {object} view - The view object. +// * @returns {object} Props for the grid view. +// */ +// props: (genericProps, view) => { +// const { ArchParser, Model, Renderer } = view; +// const { arch, relatedModels, resModel } = genericProps; +// // const {arch, fields, resModel } = genericProps; +// //const archInfo = new ArchParser().parse(arch, relatedModels, resModel); +// //const archInfo = new ArchParser().parse(arch, Model, fields); +// const archInfo = new ArchParser().parse(arch, relatedModels, resModel); + +// return { +// ...genericProps, +// archInfo, +// Model: view.Model, +// Renderer, +// }; + +// } +// }; +// // Register the grid view configuration +// registry.category("views").add("screenview", ScreenView); + +// return ScreenView; - } -}; -// Register the grid view configuration -registry.category("views").add("screenview", ScreenView); \ No newline at end of file diff --git a/static/src/js/dss_screenview_renderer.js b/static/src/js/dss_screenview_renderer.js index 3db1fed..e994cd0 100755 --- a/static/src/js/dss_screenview_renderer.js +++ b/static/src/js/dss_screenview_renderer.js @@ -1,8 +1,83 @@ /** @odoo-module **/ -import { Component } from "@odoo/owl"; +import { useService } from "@web/core/utils/hooks"; +import { Component, markup, onWillStart, useRef, xml } from "@odoo/owl"; + export class ScreenViewRenderer extends Component { + aktcontext = ""; + async setup() { + alert('render '+JSON.stringify(this.props)) + this.rpc = useService("rpc"); + onWillStart(async () => { + this.willStart() + }); } + async willStart() { + var self = this; + await this.render_Screen() + } + + onMouseEnter(ev) { + //var index = [...ev.currentTarget.parentNode.children].indexOf(ev.currentTarget); + //if (ev.currentTarget.tagName === "TH") { + alert('MouseEnter') + } + + async render_Screen() { + var self = this; + alert('render_Screen '+this) + var meins = ""; + var templates = [] + var templates = ['MainSection']; + + if (this.props.domain =[]) { + var def0 =this.rpc({ + model: 'dss.display.templates', + method: "get_data", + args: [], + }).then(function (result) { + + var $dropdown = document.querySelector('.ddown') + + if (result.length>0) { + result.forEach(element => { + $dropdown.append(new Option(element.displayname, element.nr)); + }) + } + }) + } +// document.addEventListener("click",_onclickevent) +// document.addEventListener("change",_onchangeevent) + + if (this.props.domain != []) { + var def1 =this.rpc({ + model: 'dss.advertisefields.templates', + method: "get_data", + args: [[props.context.screenlayout]], + }).then(function (result) { + var displaycss = 'background-color:#38AFA0;float:left;border-style: solid;border-width: 0.1px;' + const element = document.querySelector('.meincanvas') + const rect = element.getBoundingClientRect(); + const topPosition = rect.top + window.scrollY; + var topstart = topPosition + 60 + var width = window.innerWidth-40; + var scale_faktor = (width / 3860) + var height = Math.round(2200 * scale_faktor) + meins = '
' + if (result.length>0) { + result.forEach(element => { + var ele_pos_x=element.pos_x*scale_faktor+20 + var ele_pos_y=element.pos_y*scale_faktor+topstart + var ele_pos_h=element.pos_h*scale_faktor + var ele_pos_w=element.pos_w*scale_faktor + meins = meins + '
'+element.feldname+'
' + }); + } + }) + } + + } } + ScreenViewRenderer.template = "dss.screenviewrenderer"; diff --git a/static/src/xml/dss_screenview_renderer.xml b/static/src/xml/dss_screenview_renderer.xml index 5642bb2..e2e9934 100755 --- a/static/src/xml/dss_screenview_renderer.xml +++ b/static/src/xml/dss_screenview_renderer.xml @@ -2,10 +2,11 @@ - - - // Show records - + + + +

Hello

\ No newline at end of file diff --git a/views/dss_ads.xml b/views/dss_ads.xml index 5c2c481..bc74864 100755 --- a/views/dss_ads.xml +++ b/views/dss_ads.xml @@ -49,6 +49,7 @@ +
diff --git a/views/dss_contracts.xml b/views/dss_contracts.xml index 512c73b..dd5db7d 100755 --- a/views/dss_contracts.xml +++ b/views/dss_contracts.xml @@ -20,6 +20,7 @@ + DigitalSignage Status Änderung ir.actions.act_window @@ -111,6 +112,16 @@ + + DigitalSignage Screen + dss.contracts + + + + + + + dss_project_contracts_tree dss.contracts @@ -260,6 +271,15 @@ --> + + dss_main_contracts_screenview + dss.contracts + + + + + + dss_main_contracts_form @@ -659,6 +679,10 @@ --> + + + + @@ -901,7 +925,8 @@ - + +
diff --git a/views/dss_projects.xml b/views/dss_projects.xml index 0a794c1..3958d1e 100755 --- a/views/dss_projects.xml +++ b/views/dss_projects.xml @@ -387,7 +387,7 @@ - + DigitalSignage Projekte ir.actions.act_window diff --git a/views/dss_screendesign.xml b/views/dss_screendesign.xml index 34daa42..9d4e2e2 100755 --- a/views/dss_screendesign.xml +++ b/views/dss_screendesign.xml @@ -14,7 +14,7 @@ My Grid View dss.screendesign - +