From 5a181ae12da122878a20a9c076df107e8dfacc11 Mon Sep 17 00:00:00 2001 From: jopster Date: Mon, 31 Mar 2025 11:23:00 +0200 Subject: [PATCH] ScreenDesigner --- __manifest__.py | 9 ++ controllers/__init__.py | 1 + .../__pycache__/__init__.cpython-311.pyc | Bin 209 -> 277 bytes ..._screendesigner_controller.cpython-311.pyc | Bin 0 -> 1623 bytes controllers/dss_screendesigner_controller.py | 32 ++++++ models/__init__.py | 1 + models/__pycache__/__init__.cpython-311.pyc | Bin 1628 -> 1678 bytes models/__pycache__/dss.cpython-311.pyc | Bin 22175 -> 23623 bytes ..._advertisefields_templates.cpython-311.pyc | Bin 9457 -> 10888 bytes .../__pycache__/dss_contract.cpython-311.pyc | Bin 70672 -> 70682 bytes .../dss_display_templates.cpython-311.pyc | Bin 4130 -> 5716 bytes .../__pycache__/dss_m2mmail.cpython-311.pyc | Bin 0 -> 1338 bytes .../__pycache__/dss_trigger.cpython-311.pyc | Bin 64689 -> 64791 bytes .../dss_web_contracts.cpython-311.pyc | Bin 19776 -> 20004 bytes models/dss.py | 27 +++++ models/dss_advertisefields_templates.py | 14 ++- models/dss_contract.py | 9 +- models/dss_display_templates.py | 15 ++- models/dss_m2mmail.py | 14 +++ models/dss_trigger.py | 2 +- models/dss_web_contracts.py | 3 +- security/ir.model.access.csv | 1 + static/src/js/dss_screenview_archparser.js | 60 ++++++++++ static/src/js/dss_screenview_controller.js | 28 +++++ static/src/js/dss_screenview_model.js | 24 ++++ static/src/js/dss_screenview_register.js | 40 +++++++ static/src/js/dss_screenview_renderer.js | 8 ++ static/src/js/screenDesignerView.js | 106 ++++++++++++++---- static/src/xml/dss_screenview_controller.xml | 10 ++ static/src/xml/dss_screenview_renderer.xml | 11 ++ static/src/xml/screenDesignerView.xml | 31 ++--- views/dss_advertisementfields_templates.xml | 2 +- views/dss_display_templates.xml | 21 +++- views/dss_m2mmail.xml | 50 +++++++++ views/dss_screendesign.xml | 34 ++++++ views/menu.xml | 22 +++- 36 files changed, 523 insertions(+), 52 deletions(-) create mode 100644 controllers/__pycache__/dss_screendesigner_controller.cpython-311.pyc create mode 100644 controllers/dss_screendesigner_controller.py create mode 100644 models/__pycache__/dss_m2mmail.cpython-311.pyc create mode 100644 models/dss_m2mmail.py create mode 100644 static/src/js/dss_screenview_archparser.js create mode 100644 static/src/js/dss_screenview_controller.js create mode 100644 static/src/js/dss_screenview_model.js create mode 100644 static/src/js/dss_screenview_register.js create mode 100644 static/src/js/dss_screenview_renderer.js create mode 100644 static/src/xml/dss_screenview_controller.xml create mode 100644 static/src/xml/dss_screenview_renderer.xml create mode 100644 views/dss_m2mmail.xml diff --git a/__manifest__.py b/__manifest__.py index 47a4836..f63483f 100755 --- a/__manifest__.py +++ b/__manifest__.py @@ -45,6 +45,7 @@ 'views/dss_zahlungen.xml', 'views/dss_web_contracts.xml', 'views/dss_invoices.xml', + 'views/dss_m2mmail.xml', 'views/mainsystem_view.xml', 'views/dss_importinvoicelist.xml', 'views/menu.xml', @@ -62,11 +63,19 @@ 'web.assets_backend': [ 'DigitalSignage/static/src/img/*', 'DigitalSignage/static/src/xml/screenDesignerView.xml', + 'DigitalSignage/static/src/xml/dss_screenview_controller.xml', + 'DigitalSignage/static/src/xml/dss_screenview_renderer.xml', + 'DigitalSignage/static/src/js/dss_screenview_archparser.js', + 'DigitalSignage/static/src/js/dss_screenview_controller.js', + 'DigitalSignage/static/src/js/dss_screenview_renderer.js', + 'DigitalSignage/static/src/js/dss_screenview_register.js', + 'DigitalSignage/static/src/js/dss_screenview_model.js', 'DigitalSignage/static/src/js/form_label.js', 'DigitalSignage/static/src/js/form_button.js', 'DigitalSignage/static/src/js/kanban_button.js', 'DigitalSignage/static/src/xml/form_button.xml', 'DigitalSignage/static/src/js/dss_klistmanager.js', + 'DigitalSignage/static/src/js/screenDesignerViewReload.js', 'DigitalSignage/static/src/xml/form_label.xml', ], 'web.assets_common': [ diff --git a/controllers/__init__.py b/controllers/__init__.py index 5d4b25d..b979a1e 100644 --- a/controllers/__init__.py +++ b/controllers/__init__.py @@ -2,3 +2,4 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. from . import main +from . import dss_screendesigner_controller diff --git a/controllers/__pycache__/__init__.cpython-311.pyc b/controllers/__pycache__/__init__.cpython-311.pyc index 20fe4d9daf9a8bab38fcae963f3367e2ce71cd37..4bd8fc115a5a7a72c6c55e5d3f39f5d9a1b07a9c 100644 GIT binary patch delta 163 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 delta 1040 zcmaJcO9>+p2YLA|lKllwx9?cJ0hM+=eId zFk}by1%HRi4$ePBi6D9q_2A#ZKRifbUKG5H=|E5J;F~NH?9>nPJWt-g=lw{AcTT6g z;~eLv@Vx7t$Sx1u@dju@>oR?nkRZIZMG$}31U96E73a+$1nmOsw)>#d&cji=kA&ci zJp!lk?IlJZAWtEGwDTka5>r(z(v<2xAQ=Y6Q5GvsoKp({hrrfZx*2u7B4a!XszdTD z86!$eiQ{_$PC6vp(lKJpg69q%W*k14L>3tz@C*;F$W07S8qA6=hG!dbstX+oj6j;q z9TH_btgw9VW5r6dZxSboEKX!`B61V*e&jCX5#%E*Pga|imsy@&V>#Soh2MID6%tnb zijAUf;4^#DtIFKxx}#2kU8}4!Z@mq5v!(k{uebCC)Eg}Q81+U=e?i@1Y0f1iT4!~c zbF=AOGq;J-W_9dx2{7vN!HA28N65F4KO?_)@g!y3l517A9HY{0N;_f_YTW|6X_y)y z>CJk(yOWS1{k-Qj@h`;5eFQ<&0*IP`Fcbt*T?MDO7?I#1cl>`vhrHXRMc7kv7PZXY zgWdV;5SQ*&b7E4>Dfvu~8YNmBK6w*$C1yua!@L$ZEIciRTtO34c|{$F(ps(IZ6u(+ z;t692O@gl#*GODH$H$4s%r7&G^f#3`TV?s)GIT6>IxiZ-s0>^Em*!={Fyl|r(G+|L z-D(Kp;1a8J_x0v7gC%E2CO_Cv$g8CaD^yf_FjG`Z&VAOcU_9IicWdJMRQLt$k&VS- z287|6*hu>IpQ6fCQN$sA`xEpN^_7H6ntpq7g=|*U;JO?k7xh>2VbX%%1v~zZXZ@q0 OX*2iz9~GMMoBRSHxd5*K diff --git a/models/__pycache__/dss_contract.cpython-311.pyc b/models/__pycache__/dss_contract.cpython-311.pyc index ef22ab979d0743ffedebbb864813c02a070d5e38..3d18fd6534503db54a983fd5c6562e9f036c6674 100644 GIT binary patch delta 702 zcmZ{gZAepL6vub&%jl}(-Zp0lE)YHD>(@cmuAN~*Ld7g9rKmIN+bHmH1 zJStU!LavjW=4vcHRemScsz+CSKJuQe__mfM?oOJ=7M~vZ?ww@GlLquq6Nk`|iH18B z+Pp@2ww{e|SStr-6)@vi3ieo&(cL!-doehp#RgxLG~KHQY#UHxbMGFq@4gA}k=zXS z>L@WE0|P-QK#MsUuMbXPm5)W2l!skIMKt4NR_%5_wBYlZ&7{F+1K5vsy}3jnEq^xR z00Z{;4HV~;1G)r7aeTqWIfun!u|zBtY4NaFhUI~r z%p>ub#3YBps$3`8U=ojt|;DV2=p)kYFd*USCN}O^s-` zMYKC&N<~UxY)g`m5L2uP=1%*entYv}r=W(sd*4q(D{20CoPiE9@#zNzePsMgA_b#l zV*W9}Gjv8{@PagbI|VXAcp(j75*NSs!w0;%*aow>ed#iMCjCpQbagew%03&qTt51W d2Z|{z=0Ouv{99cG?FW}v-+un*$Av68jbB%{1d0Fv delta 734 zcmZ`#ZAg=06y4psMcZ0in}dEhnKT3|1{O0?X`80`BcxGMu|>F^Ihbt4n?jg<2v$Uc z26usoB*<(^YL1828WWm>sL)ECFfef-)Jjdoegq-(?$wZ>?vKNB?>*dep3~JY^7o76 zA-P;C;A+bM*0nn`Ijo3;QIG53$xR=%p1BGwc|ic zg_lDHM&jE{!PIL9Q_iH)FY$E|GqI3L!jLL*9IwR>7^_=3eX^@fyzPe6aGjDj#(`V= z=fyKmklJo3eH}l;(85<2ps*#MTPHib#L2dJUAop5R(ICPI-E@no+}M5uTzIN6Gb4! zzC^Js!%|c9RvdG8G8q#)SXmFB$G;ON@@M5w9>BeJF-G;z?RmQ zM{83Rb*YN_No{>vQ?{y+DW$7|O+fRPJUp3x0uH*K&I+NCewrO*pq<{IuMFg-%NOHknt;V_RUZmfq;SIgFcp6}w&MxHxOySSvL72n7?++k@B`Y1U tKqD)1oys8;bE4b0R`X&;0YXugSpn)*!N1X88mL&~cR&8aV2ijweghwi4!!^Y diff --git a/models/__pycache__/dss_display_templates.cpython-311.pyc b/models/__pycache__/dss_display_templates.cpython-311.pyc index 6f645d51d06b0dd37dc4dc60b3b76a9bf82bb016..46588a83a89f05b2d0c4cf9a524f7ede7dc236e6 100644 GIT binary patch delta 1971 zcmcIkO>7fK6rS1j&-yRaCJBTXvMmzCBBd#b_=zYY#!VrVK*22}DmYv3*xA%s!|W~w z*O8IR!9_?QEmEtBLt0g7rO-na3FXvMQKTN%$cSj$N|lf*^-vmAdg0VJb{yh_Ye(8| z=Kan4-t3$CQmk|}eH{pR5sc6OdXzro{jRBv!+*?naz}8HL&Q7Y!fb5F>t*3q+cbyJ z41BdQ(z?QD!wY=Y$?ccX$a*;p*hctqM?G5Jco|KDFjH5ckqyi29Z24^%Avi4F5r>y z2^8s=o#CSxKbw8*xPyZou!n{LMA`;OMe_&O0sM-|yRW>^CYs;758=(GAncBAfdJd7 z=~+tXtFShL0R2WPbN9ApsA(}uiK3GTt{GoyG#(HJ(xGec2!>MZBt(0%n4LIvCy&?x1>QFbw09=|fC>gB#AH1;7zx_>c` z6Xq#*jfrRZPX7m!#tJZ!y_0+a$I$7Wla4}wmwovFLZITNges$gV|?jsU|qd;j5n;8 z&Z%L|%l@0rm07OtDsXTC0zh_$Hm#7?%VB0sQ$Rv@J)FjE| zg&6t3D5k|e@fm*2_77!sC8Z>*Ara1YPY_L$(!_S^ik>0)$cZE+M3srAq*X%2n4+D{ zNEe}(B{2qYoSZX=ro(QOy#;@=)`>XjZkT8o!1kn!Oh!}kB=>wdW*0e?M*OswdAKwp z(d3xz&nfy?0!q-y1>J62tR9B<~(G$#Ie&KE@)`k7x zq^VHoCG>l!^+u=FzM~TAc^K-uAL^UiQ4Z~^g!Yx(^Py${!GBe-f?F!W)`vpxeWCYG zvnBMFg@KAN@K6}NFN|7>_CU`)xbV>ev~r#+`kAN=7yN^DEA&y9_CK62sTv%PBPmWF2h;EC@4G=%nArvz~6*5*Zf!fR?Gf- zJ@>Sqcl}uSsZc%;uN;V%TjJKcr^+p-9t^*4otBH`VNw|;3J^0B$sej(T_S(>up{e*+!*lV<8%L~>GnEm=I-iI9xmq1>b4M7D zaFstG@CzJe`~X3}g!5}!J*6hP0ggVh(X_lD;@#$6UlfPUqHp6i+kFU{2Ks;=1_%53 zPamTZP|z+0?17}m%x`=>_~z`dJ}2&;4|ZH{y|Kv>d* zR13p0AiWyQ0})Z;9SjwWQ4+xnn$nwvS)3Rdt2T$R9$*xa14&(}k#a^$c}AcvOk#%E R9GQFFszasTRNn+@ zFuiGw7TVGQcJLjDGeON&s92wrTQQ{WwYap_IP+;NtstVzk0o&{M4Cwy`Eh+XFYhLX z&OsB69x!kS1xKUA(W&MbRHsHmb4(4G)g0vlH4%}8&jc;}F}a0x?Tl&zr@$tgIR|QG zI<*N~*zYJO7ssYHqAkiIjpN{Q@X+&97I$p)s^|tD_tW#3xx^bh@%&ZZ2)za?FJE3R z|N8E2{Xu|brD21G9b4sAlXby7+Bum!UOnLtdD5;1{1Ff9cmRi@p`|E0xP+<)kKq;e z-^w`HRoEsgNZhnb*_xO7iJPXJZWC$5%wLPu`sFWIYEdhxMKp?P9;Hzj*T%8e21iiC z3f*Ca)mHmUVcz$G`_x)=nBIl{E?4s*#q@F(hTg3L~Z06j{STl>;ncdm7J9~DgyY${H zZ2q>d5%c^$p!%$XRXQ5TqXP_T=aou98tUfdNOSl?p%Lm=A=LLO&1Lli$Z?7bDyrzp z3&0yVU}-^I#F#q0cmvhGP6+A4#q4{n52v&7wr@=mMEuf$A6 Ay8r+H literal 0 HcmV?d00001 diff --git a/models/__pycache__/dss_trigger.cpython-311.pyc b/models/__pycache__/dss_trigger.cpython-311.pyc index 71a87bfa6e8bd37469b50eb24a084fa4c8b53b79..b0695715ea7a6c955180f8acff4cc07b8e720b99 100644 GIT binary patch delta 2369 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 diff --git a/models/__pycache__/dss_web_contracts.cpython-311.pyc b/models/__pycache__/dss_web_contracts.cpython-311.pyc index 1ededb2e7ab50fe050c8eb0d313dcbef6b48adbf..c33e53b2a9573ff7f6123deaebdde58ec9d65ae1 100644 GIT binary patch delta 1197 zcmZwFUr19?90&08+vYU?%u3tT{on4U+jQ#Mba!etwEUA(A(0}|q8qYadPoSu7(@?2 z5y=UHknkbwp&;TC^tgvX_d%lIK1f0MQczDv(&swA*}RA7z&)JL_xwLw@hLoC1KW#+ zhFZc)Z{4@0-my2fAMRQkruZI`gi+sFbcV!kb&^Y%y6HEDbX=*LHfOI9FO=RlLotM9zVx=+jqO zHM)k#XFwa(r!KQY=vpF=gVwB1Twry6`ZY9Ez|=G0-gf_<5E>_Zj{D=roZ}LHU=Hkr`pV0Srb4jS~)GaDvE_pd~j4*f8=W z7#m~(6MTss;&%+}Vs)=>Z&b~+zc#@q^=G6XU|S8uc1+gq{C{>MK{w@dv?<|JSL2e| zx`$a8W@=O7ff;Jl^;FmbPW8Qfv%WE2B{6bPT~c$WmrRhNZ^!RLkD8rWH7Ca`5M$*3 U^`pMWgFEHEU2()bwdOK^0O_nmw*UYD delta 982 zcmZvZPfQa*7{zC{w#7nQ6>LjOx4We%6_MD0bPI$aTH8Vk#A-A~3~^1P7b0LJis_X^ z51R2J>B&DBgG9|FrSDf-Mlw@w0RvHc5-qhf5FO#SBWa_DJC{JfA%y>F_@>MRBX z_2fvkR~=M`v5ly$;O_8)?}@44LhlB0MZz&ozli<@LsB2K+3>ci0MZ29oGfaS*Ksp7TI&BfNVSg% z_^A=72U@8PGJy~^+RV<%w6!ob_3RP2O&M41<4VS~-5E#KB(lBzqtBC>^;+w%+s}*oDFW>%$X|2e*y69X3%! HKk}(Ro45)q diff --git a/models/dss.py b/models/dss.py index 7ce9f6d..8c2f09e 100755 --- a/models/dss.py +++ b/models/dss.py @@ -331,3 +331,30 @@ class dssscreendesign(models.Model): def get_data(self): outlist = {'uuid' : 2222} return outlist + + def myscreenrebuild(self): + _logger.info('inside Screenrebuild') + return { + 'type': 'ir.actions.client', + 'name': 'reload', + 'context' : {'screenlayout': 1}, + 'tag': 'dss_screenDesigner_js_action' + } + + +class View(models.Model): + """ + Extends the base 'ir.ui.view' model to include a new type of view + called 'grid'. + """ + _inherit = 'ir.ui.view' + type = fields.Selection(selection_add=[('screenview', "ScreenView")]) + +class IrActionsActWindowView(models.Model): + """ + Extends the base 'ir.actions.act_window.view' model to include + a new view mode called 'grid'. + """ + _inherit = 'ir.actions.act_window.view' + view_mode = fields.Selection(selection_add=[('screenview', "ScreenView")], + ondelete={'screenview': 'cascade'}) \ No newline at end of file diff --git a/models/dss_advertisefields_templates.py b/models/dss_advertisefields_templates.py index 0a3bcd1..a51c9fc 100755 --- a/models/dss_advertisefields_templates.py +++ b/models/dss_advertisefields_templates.py @@ -48,7 +48,7 @@ class dssadvertisefields(models.Model): # uuid = fields.Char('UUID', required=True, translate=True) templatefeldname = fields.Char('Template Feldname', required=True,tracking=True) display = fields.Char('Ziel Feldname',tracking=True) - displaytemplate = fields.Many2one('dss.display.templates',String="Display Vorlage",tracking=True) + displaytemplate = fields.Many2one('dss.display.templates',string="Display Vorlage",tracking=True) feldname = fields.Char('Ziel Feldname', required=True,tracking=True) color_used = fields.Char(string='Color Index',tracking=True) color_unused = fields.Char(string='Color Index',tracking=True) @@ -106,3 +106,15 @@ class dssadvertisefields(models.Model): @api.model def _default_uuid(self): return str(uuid.uuid4()) + + @api.model + def get_data(self,template): + if not template: + template = 1 + alldata = self.env['dss.advertisefields.templates'].search([('displaytemplate',"=",template)]) + outlist = [] + self.env["confirmation.wizard"].with_context(hide_cancel=True).confirm_no_action_message(message="Debug : "+str(len(alldata))+"/"+str(alldata),title="Notification") + _logger.info("Screendesigner DataRequest : " + str(len(alldata))+"/"+str(alldata)) + for data in alldata: + outlist.append({'uuid' : data.uuid,'pos_x':data.btn_pos_x,'pos_y':data.btn_pos_y,'pos_w':data.btn_pos_w,'pos_h':data.btn_pos_h,'feldname':data.feldname}) + return outlist diff --git a/models/dss_contract.py b/models/dss_contract.py index ce21933..7791c33 100755 --- a/models/dss_contract.py +++ b/models/dss_contract.py @@ -776,8 +776,8 @@ class dsscontracts(models.Model): kampagnen=self.env['dss.ads'].search([('contract','=',self.id)]) _logger.info('Prüfe Medien : C_'+str(self.id)+' alle Kamp : '+str(kampagnen)) for kamp in kampagnen: - _logger.info('Prüfe Medien : C_'+str(self.id)+'A_'+str(kamp.id)) - if kamp: + _logger.info('Prüfe Medien : C_'+str(self.id)+'A_'+str(kamp.id)+' - P_'+str(kamp.parent_ad)) + if kamp: mediaids = [] medias = self.env['dss.mediarelations'].search([('ad','=',kamp.id)]) if not medias: @@ -859,8 +859,9 @@ class dsscontracts(models.Model): 'target':'current', 'context':'{"kampagne_id":'+str(kampagne.id)+',"show_project_update":True}', 'context':'', - 'res_id':kampagne.id, - 'display_name' : 'Änderung zur Werbekampagne '+kampagne.parent_ad.adname, + 'res_id':self.ads_last_ad.id, + #kampagne.id, +# 'display_name' : 'Änderung zur Werbekampagne '+kampagne.parent_ad.adname, 'domain':'[("id","=","context[kampagne_id]")]' } def setFirstKampagne(self): diff --git a/models/dss_display_templates.py b/models/dss_display_templates.py index a79e29e..9616d50 100755 --- a/models/dss_display_templates.py +++ b/models/dss_display_templates.py @@ -48,7 +48,8 @@ class dssadvertisefields(models.Model): # uuid = fields.Char('UUID', required=True, translate=True) displayname = fields.Char('Template Feldname', required=True,tracking=True) feldtemplates = fields.Many2many('dss.advertisefields.templates' , string='Vertrag', store=True,tracking=True) - + fullsize_w = fields.Integer("Auflösung Breite",tracking=True) + fullsize_h = fields.Integer("Auflösung Höhe",tracking=True) def _default_create_date(self): return str(date.today()) @@ -59,3 +60,15 @@ class dssadvertisefields(models.Model): @api.model def _default_uuid(self): return str(uuid.uuid4()) + + @api.model + def get_data(self): + alldata = self.env['dss.display.templates'].search([]) + outlist = [] + self.env["confirmation.wizard"].with_context(hide_cancel=True).confirm_no_action_message(message="Debug : "+str(len(alldata))+"/"+str(alldata),title="Notification") + _logger.info("Screendesigner Displaydata DataRequest : " + str(len(alldata))+"/"+str(alldata)) + a = 0 + for data in alldata: + a += 1 + outlist.append({'uuid' : data.uuid,'displayname':data.displayname,'fullsizew':data.fullsize_w,'fullsizeh':data.fullsize_w,'nr':a}) + return outlist diff --git a/models/dss_m2mmail.py b/models/dss_m2mmail.py new file mode 100644 index 0000000..aad798b --- /dev/null +++ b/models/dss_m2mmail.py @@ -0,0 +1,14 @@ +from odoo import api, fields, models, _ +from odoo import tools + + +class dssm2mvalues(models.Model): + _name = "dss.m2mmail" + _description = "DigitalSignage M2M Rückmeldungen" +# _rec_name = "statusname" + _inherit = ['mail.thread', 'mail.activity.mixin'] + uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID') + + @api.model + def _default_uuid(self): + return str(uuid.uuid4()) diff --git a/models/dss_trigger.py b/models/dss_trigger.py index 4f30522..52fa504 100644 --- a/models/dss_trigger.py +++ b/models/dss_trigger.py @@ -138,7 +138,7 @@ class dsstriggergroups(models.Model): def run_triggers(self, changes, Dataset, triggers): _logger.info("Trigger in run_triggers ! - start count :"+str(len(triggers)) ) for trig in triggers: - _logger.info("Trigger in run_triggers - Working on : "+str(trig.id)) + _logger.info("Trigger in run_triggers - Working on : "+str(trig.triggername)+'('+str(trig.id)+')') dochecktrigger = False if (changes == False): diff --git a/models/dss_web_contracts.py b/models/dss_web_contracts.py index 308beda..cd7490a 100644 --- a/models/dss_web_contracts.py +++ b/models/dss_web_contracts.py @@ -168,8 +168,9 @@ class dsscontracts(models.Model): 'contract_name': self.contract_name, 'contract_state': self.env['dss.contractstate'].search([("statusname","=","Angelegt")]).id, 'werbe_feld_selected': self.werbe_feld_selected, - 'client': self.client.id, + 'client': self.client, 'client_short_vorname': self.client_short_vorname, + 'client_short_name': self.client_short_name, 'client_short_email': self.client_short_email, 'client_short_telefon': self.client_short_telefon, 'client_short_mobil': self.client_short_mobil, diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv index c593f82..1d904a1 100755 --- a/security/ir.model.access.csv +++ b/security/ir.model.access.csv @@ -45,3 +45,4 @@ DigitalSignage_dss_activity_mixin,access.dss.activity_mixin,DigitalSignage.model DigitalSignage_dss_triggermodel,access.dss.triggermodel,DigitalSignage.model_dss_triggermodel,base.group_user,1,0,0,0 DigitalSignage_dss_invoices,access.dss.invoices,DigitalSignage.model_dss_invoices,base.group_user,1,1,1,1 DigitalSignage_dss_onlinestate,access.dss.onlinestate,DigitalSignage.model_dss_onlinestate,base.group_user,1,1,1,1 +DigitalSignage_dss_m2mmail,access.dss.m2mmail,DigitalSignage.model_dss_m2mmail,base.group_user,1,1,1,1 diff --git a/static/src/js/dss_screenview_archparser.js b/static/src/js/dss_screenview_archparser.js new file mode 100644 index 0000000..041301c --- /dev/null +++ b/static/src/js/dss_screenview_archparser.js @@ -0,0 +1,60 @@ +/** @odoo-module */ + +import { XMLParser } from "@web/core/utils/xml"; + +export class ScreenViewArchParser extends XMLParser { + 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) + 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; + } + } + }); + return archInfo; + } +} +// parse(arch) { +// const xmlDoc = this.parseXML(arch); +// const fieldFromTheArch = xmlDoc.getAttribute("fieldFromTheArch"); +// return { +// fieldFromTheArch, +// }; +// } +//} \ No newline at end of file diff --git a/static/src/js/dss_screenview_controller.js b/static/src/js/dss_screenview_controller.js new file mode 100644 index 0000000..7eec9d0 --- /dev/null +++ b/static/src/js/dss_screenview_controller.js @@ -0,0 +1,28 @@ +/** @odoo-module **/ +import { Layout } from "@web/search/layout"; +import {useService } from "@web/core/utils/hooks"; +import { Component, onWillStart, useState} from "@odoo/owl"; +export class ScreenViewController extends Component { + setup() { + this.orm = useService("orm"); + + // 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(); + }); + } +}; + +ScreenViewController.template = "dss.screenview"; +ScreenViewController.components = { Layout }; diff --git a/static/src/js/dss_screenview_model.js b/static/src/js/dss_screenview_model.js new file mode 100644 index 0000000..6bc89a9 --- /dev/null +++ b/static/src/js/dss_screenview_model.js @@ -0,0 +1,24 @@ +/** @odoo-module **/ +import { KeepLast } from "@web/core/utils/concurrency"; + +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; + this.keepLast = new KeepLast(); + } + + 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; + } +} \ No newline at end of file diff --git a/static/src/js/dss_screenview_register.js b/static/src/js/dss_screenview_register.js new file mode 100644 index 0000000..afc9d99 --- /dev/null +++ b/static/src/js/dss_screenview_register.js @@ -0,0 +1,40 @@ +/** @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, + }; + + } +}; +// 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 new file mode 100644 index 0000000..3db1fed --- /dev/null +++ b/static/src/js/dss_screenview_renderer.js @@ -0,0 +1,8 @@ +/** @odoo-module **/ +import { Component } from "@odoo/owl"; +export class ScreenViewRenderer extends Component { + async setup() { + } + +} +ScreenViewRenderer.template = "dss.screenviewrenderer"; diff --git a/static/src/js/screenDesignerView.js b/static/src/js/screenDesignerView.js index 6897729..087b4e6 100644 --- a/static/src/js/screenDesignerView.js +++ b/static/src/js/screenDesignerView.js @@ -11,17 +11,47 @@ var _t = core._t; var rpc = require('web.rpc'); var self = this; var session = require('web.session'); +var viewRegistry = require('web.view_registry'); +var aktcontext = ""; +function _onclickevent(event) { + // Check if the clicked element has the class "button" + if (event.target.classList.contains("ddbtn")) { + alert(JSON.stringify($(event.currentTarget))) + }; +}; +function _onchangeevent(event) { + // Check if the clicked element has the class "button" + if (event.target.classList.contains("ddown")) { + // Your event handler code + // here +// alert($(this)) +// alert(event.target.value) +// alert(JSON.stringify($(event.target.value))) + aktcontext.context.screenlayout = event.target.value + alert(aktcontext); + rpc.query({model: 'dss.screendesign', + method: 'myscreenrebuild', + args: [this.res_id], + }).then(function (result) { + alert(JSON.stringify(result)); + event.do_action(result); + return result; + }); + } +}; var screenDesigner = AbstractAction.extend({ - contentTemplate: 'dssscreenDesignerView', - init: function(parent, context) { + contentTemplate: 'screen_view.ScreenView', + init: function(parent, context) { this._super(parent, context); + aktcontext = context; this.dashboard_templates = ['MainSection']; }, start: function() { var self = this; + alert(aktcontext.context.screenlayout); this.set("title", 'Dashboard'); return this._super().then(function() { self.render_dashboards(); @@ -33,31 +63,67 @@ var screenDesigner = AbstractAction.extend({ }, render_dashboards: function() { var self = this; - this.fetch_data() + var meins = ""; var templates = [] var templates = ['MainSection']; - _.each(templates, function(template) { - self.$('.o_hr_dashboard').append(QWeb.render(template, {widget: self})) - }); - }, - fetch_data: function() { - var self = this -// fetch data to the tiles - var def1 = this._rpc({ - model: 'dss.screendesign', - method: "get_data", - }) - .then(function (result) { - $('#product_templates').append('' + result.uuid + ''); - $('#variants_count').append('' + result.uuid + ''); - $('#products_storable').append('' + result.uuid + ''); - $('#product_consumable').append('' + result.uuid + ''); - }); + + 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)); + }) + } + + _.each(templates, function(template) {self.$('.meinfeld').append(meins)}); + }) + + document.addEventListener("click",_onclickevent) + document.addEventListener("change",_onchangeevent) + + var def1 =this._rpc({ + model: 'dss.advertisefields.templates', + method: "get_data", + args: [[aktcontext.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+'
' + }); + } +// meins = meins + '
'+result.length+'
' +// meins = meins + '
'+result+'
' +// meins = meins + '
'+JSON.stringify(result)+'
' + _.each(templates, function(template) {self.$('.o_hr_dashboard').append(meins)}); + }) }, }); core.action_registry.add('dss_screenDesigner_js_action', screenDesigner); +viewRegistry.add('ScreenDesigner', screenDesigner); + return screenDesigner; }); diff --git a/static/src/xml/dss_screenview_controller.xml b/static/src/xml/dss_screenview_controller.xml new file mode 100644 index 0000000..6381d3c --- /dev/null +++ b/static/src/xml/dss_screenview_controller.xml @@ -0,0 +1,10 @@ + + + + + + +

Test

+
+
+
\ No newline at end of file diff --git a/static/src/xml/dss_screenview_renderer.xml b/static/src/xml/dss_screenview_renderer.xml new file mode 100644 index 0000000..5642bb2 --- /dev/null +++ b/static/src/xml/dss_screenview_renderer.xml @@ -0,0 +1,11 @@ + + + + + + + // Show records + + + + \ No newline at end of file diff --git a/static/src/xml/screenDesignerView.xml b/static/src/xml/screenDesignerView.xml index 9ca650b..65709dd 100644 --- a/static/src/xml/screenDesignerView.xml +++ b/static/src/xml/screenDesignerView.xml @@ -1,35 +1,28 @@ - +
-
-

Feldübersicht

-
-
+ Displayvorlage : + +
+
+ test
+
- -
-
-
-
-

Feld - Designer

-
-
- - -
- -
-
+ +
+

Feld - Designer

+
\ No newline at end of file diff --git a/views/dss_advertisementfields_templates.xml b/views/dss_advertisementfields_templates.xml index 6a07696..1e1145b 100755 --- a/views/dss_advertisementfields_templates.xml +++ b/views/dss_advertisementfields_templates.xml @@ -105,7 +105,7 @@ - DigitalSignage Werbefelder + DigitalSignage Werbefeld Vorlagen ir.actions.act_window dss.advertisefields.templates tree,form diff --git a/views/dss_display_templates.xml b/views/dss_display_templates.xml index 581c38b..e0c22da 100755 --- a/views/dss_display_templates.xml +++ b/views/dss_display_templates.xml @@ -8,6 +8,8 @@ + + @@ -18,9 +20,22 @@
- - - + + + + + + + + + + + + + + + +
diff --git a/views/dss_m2mmail.xml b/views/dss_m2mmail.xml new file mode 100644 index 0000000..27140a2 --- /dev/null +++ b/views/dss_m2mmail.xml @@ -0,0 +1,50 @@ + + + + + DigitalSignage Alle M2M Nachrichten + ir.actions.act_window + dss.m2mmail + tree,form + +

+ No Contracts/Clients found. Let's create one! +

+

+ Keep track of the progress of your contracts from creation to completion.
+ Collaborate efficiently by chatting in real-time or via email. +

+
+
+ + + + dss_m2mmail_tree + dss.m2mmail + + + + + + + + + dss_main_m2mmail_form + dss.m2mmail + + + + + + + +
+ + + +
+ +
+
+ +
diff --git a/views/dss_screendesign.xml b/views/dss_screendesign.xml index 76c8ca4..34daa42 100644 --- a/views/dss_screendesign.xml +++ b/views/dss_screendesign.xml @@ -3,8 +3,42 @@ Attendance + { + 'screenlayout': 1, + } + dss_screenDesigner_js_action + + My Grid View + dss.screendesign + + + + + + + + + + + screenview + + + + + + DigitalSignage ScreenDesign + ir.actions.act_window + screenview + dss.screendesign + {} + +

+ Neuen Systemtyp erstellen +

+
+
\ No newline at end of file diff --git a/views/menu.xml b/views/menu.xml index b7543eb..33c1061 100755 --- a/views/menu.xml +++ b/views/menu.xml @@ -414,18 +414,31 @@ sequence="10"/> + + + + + +