From 277414562fb83e467d493bac67d443fb20c7a60b Mon Sep 17 00:00:00 2001 From: Maria Hofmann <m.hofmann@adito.de> Date: Mon, 20 May 2019 15:48:05 +0200 Subject: [PATCH] DSGVO Entity und Context erstellen und einrichten --- entity/DSGVO_entity/DSGVO_entity.aod | 113 ++++++++++++++---- .../entityfields/date_edit/valueProcess.js | 7 ++ .../entityfields/date_new/valueProcess.js | 7 ++ .../entityfields/dsgvoid/valueProcess.js | 8 ++ .../entityfields/user_edit/valueProcess.js | 7 ++ .../entityfields/user_new/valueProcess.js | 7 ++ neonContext/DSGVO/DSGVO.aod | 22 ++++ neonView/DSGVOEdit_view/DSGVOEdit_view.aod | 31 +++++ .../DSGVOFilter_view/DSGVOFilter_view.aod | 43 +++++++ .../DSGVOPreview_view/DSGVOPreview_view.aod | 31 +++++ report/DSGVO_report/reportData.jasper | Bin 28291 -> 31418 bytes 11 files changed, 254 insertions(+), 22 deletions(-) create mode 100644 entity/DSGVO_entity/entityfields/date_edit/valueProcess.js create mode 100644 entity/DSGVO_entity/entityfields/date_new/valueProcess.js create mode 100644 entity/DSGVO_entity/entityfields/dsgvoid/valueProcess.js create mode 100644 entity/DSGVO_entity/entityfields/user_edit/valueProcess.js create mode 100644 entity/DSGVO_entity/entityfields/user_new/valueProcess.js create mode 100644 neonContext/DSGVO/DSGVO.aod create mode 100644 neonView/DSGVOEdit_view/DSGVOEdit_view.aod create mode 100644 neonView/DSGVOFilter_view/DSGVOFilter_view.aod create mode 100644 neonView/DSGVOPreview_view/DSGVOPreview_view.aod diff --git a/entity/DSGVO_entity/DSGVO_entity.aod b/entity/DSGVO_entity/DSGVO_entity.aod index b7276f8a0c..5681d8f103 100644 --- a/entity/DSGVO_entity/DSGVO_entity.aod +++ b/entity/DSGVO_entity/DSGVO_entity.aod @@ -9,6 +9,50 @@ <entityProvider> <name>#PROVIDER</name> </entityProvider> + <entityField> + <name>DSGVOID</name> + <valueProcess>%aditoprj%/entity/DSGVO_entity/entityfields/dsgvoid/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>USER_NEW</name> + <valueProcess>%aditoprj%/entity/DSGVO_entity/entityfields/user_new/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>USER_EDIT</name> + <valueProcess>%aditoprj%/entity/DSGVO_entity/entityfields/user_edit/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>DATE_NEW</name> + <valueProcess>%aditoprj%/entity/DSGVO_entity/entityfields/date_new/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>DATE_EDIT</name> + <valueProcess>%aditoprj%/entity/DSGVO_entity/entityfields/date_edit/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>ROW_ID</name> + </entityField> + <entityField> + <name>RIGHT</name> + <title>DataPrivacy Right</title> + <mandatory v="true" /> + </entityField> + <entityField> + <name>USE</name> + <title>DataPrivacy Use</title> + <mandatory v="true" /> + </entityField> + <entityField> + <name>TABLENAME</name> + </entityField> + <entityField> + <name>VALID_TO</name> + <title>Valid to</title> + </entityField> + <entityField> + <name>CONTACT_ID</name> + <linkedContext>Default_context</linkedContext> + </entityField> </entityFields> <recordContainers> <dbRecordContainer> @@ -20,34 +64,59 @@ <fromClauseProcess>%aditoprj%/entity/DSGVO_entity/recordcontainers/db/fromClauseProcess.js</fromClauseProcess> <linkInformation> <linkInformation> - <name>19492a6a-0237-4e52-a084-30ee856107cb</name> + <name>32dd6b4a-8fd0-48ed-b39a-b1bd222b7e88</name> <tableName>DSGVO</tableName> <primaryKey>DSGVOID</primaryKey> <isUIDTable v="false" /> <readonly v="false" /> </linkInformation> - <linkInformation> - <name>02f589ab-e542-4c37-a305-10b458c88380</name> - <tableName>CONTACT</tableName> - <primaryKey>CONTACTID</primaryKey> - <isUIDTable v="true" /> - <readonly v="false" /> - </linkInformation> - <linkInformation> - <name>404928e9-d53f-4b09-bf15-9d68886d73ff</name> - <tableName>COMMUNICATION</tableName> - <primaryKey>COMMUNICATIONID</primaryKey> - <isUIDTable v="false" /> - <readonly v="true" /> - </linkInformation> - <linkInformation> - <name>22e52f2a-c5dc-45d3-9f76-4b0c5ba42fd6</name> - <tableName>ADDRESS</tableName> - <primaryKey>ADDRESSID</primaryKey> - <isUIDTable v="false" /> - <readonly v="false" /> - </linkInformation> </linkInformation> + <recordFieldMappings> + <dbRecordFieldMapping> + <name>CONTACT_ID.value</name> + <recordfield>DSGVO.CONTACT_ID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DATE_EDIT.value</name> + <recordfield>DSGVO.DATE_EDIT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DATE_NEW.value</name> + <recordfield>DSGVO.DATE_NEW</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DSGVOID.value</name> + <recordfield>DSGVO.DSGVOID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>RIGHT.value</name> + <recordfield>DSGVO.RIGHT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>ROW_ID.value</name> + <recordfield>DSGVO.ROW_ID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>TABLENAME.value</name> + <recordfield>DSGVO.TABLENAME</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>USE.value</name> + <recordfield>DSGVO.USE</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>USER_EDIT.value</name> + <recordfield>DSGVO.USER_EDIT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>USER_NEW.value</name> + <recordfield>DSGVO.USER_NEW</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>VALID_TO.value</name> + <recordfield>DSGVO.VALID_TO</recordfield> + </dbRecordFieldMapping> + </recordFieldMappings> </dbRecordContainer> </recordContainers> </entity> diff --git a/entity/DSGVO_entity/entityfields/date_edit/valueProcess.js b/entity/DSGVO_entity/entityfields/date_edit/valueProcess.js new file mode 100644 index 0000000000..5e6ef05973 --- /dev/null +++ b/entity/DSGVO_entity/entityfields/date_edit/valueProcess.js @@ -0,0 +1,7 @@ +import("system.util"); +import("system.result"); +import("system.neon"); +import("system.vars"); + +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) + result.string(vars.get("$sys.date")); \ No newline at end of file diff --git a/entity/DSGVO_entity/entityfields/date_new/valueProcess.js b/entity/DSGVO_entity/entityfields/date_new/valueProcess.js new file mode 100644 index 0000000000..a72892783b --- /dev/null +++ b/entity/DSGVO_entity/entityfields/date_new/valueProcess.js @@ -0,0 +1,7 @@ +import("system.util"); +import("system.result"); +import("system.neon"); +import("system.vars"); + +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) + result.string(vars.get("$sys.date")); \ No newline at end of file diff --git a/entity/DSGVO_entity/entityfields/dsgvoid/valueProcess.js b/entity/DSGVO_entity/entityfields/dsgvoid/valueProcess.js new file mode 100644 index 0000000000..ef478411d7 --- /dev/null +++ b/entity/DSGVO_entity/entityfields/dsgvoid/valueProcess.js @@ -0,0 +1,8 @@ +import("system.neon"); +import("system.result"); +import("system.util"); +import("system.vars"); + +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW){ + result.string(util.getNewUUID()); +} \ No newline at end of file diff --git a/entity/DSGVO_entity/entityfields/user_edit/valueProcess.js b/entity/DSGVO_entity/entityfields/user_edit/valueProcess.js new file mode 100644 index 0000000000..6af880ae3e --- /dev/null +++ b/entity/DSGVO_entity/entityfields/user_edit/valueProcess.js @@ -0,0 +1,7 @@ +import("system.util"); +import("system.result"); +import("system.neon"); +import("system.vars"); + +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) + result.string(vars.get("$sys.user")); \ No newline at end of file diff --git a/entity/DSGVO_entity/entityfields/user_new/valueProcess.js b/entity/DSGVO_entity/entityfields/user_new/valueProcess.js new file mode 100644 index 0000000000..e518bc75a9 --- /dev/null +++ b/entity/DSGVO_entity/entityfields/user_new/valueProcess.js @@ -0,0 +1,7 @@ +import("system.util"); +import("system.result"); +import("system.neon"); +import("system.vars"); + +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) + result.string(vars.get("$sys.user")); \ No newline at end of file diff --git a/neonContext/DSGVO/DSGVO.aod b/neonContext/DSGVO/DSGVO.aod new file mode 100644 index 0000000000..605b9fa14c --- /dev/null +++ b/neonContext/DSGVO/DSGVO.aod @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.0"> + <name>DSGVO</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterview>DSGVOFilter_view</filterview> + <editview>DSGVOEdit_view</editview> + <entity>DSGVO_entity</entity> + <references> + <neonViewReference> + <name>aacec0e0-816b-4075-bc45-a0fea73f2c62</name> + <view>DSGVOFilter_view</view> + </neonViewReference> + <neonViewReference> + <name>6632d226-6b4a-4497-bafe-10f36e54c90f</name> + <view>DSGVOEdit_view</view> + </neonViewReference> + <neonViewReference> + <name>ed1cb100-0801-4280-a1a2-57ad858de187</name> + <view>DSGVOPreview_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonView/DSGVOEdit_view/DSGVOEdit_view.aod b/neonView/DSGVOEdit_view/DSGVOEdit_view.aod new file mode 100644 index 0000000000..7ffda7078f --- /dev/null +++ b/neonView/DSGVOEdit_view/DSGVOEdit_view.aod @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.1"> + <name>DSGVOEdit_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <boxLayout> + <name>layout</name> + </boxLayout> + </layout> + <children> + <genericViewTemplate> + <name>Generic</name> + <editMode v="true" /> + <entityField>#ENTITY</entityField> + <fields> + <entityFieldLink> + <name>c3923993-98fa-484d-bd74-607040917611</name> + <entityField>RIGHT</entityField> + </entityFieldLink> + <entityFieldLink> + <name>4108c82d-0359-44d5-bf76-6632f96852a5</name> + <entityField>USE</entityField> + </entityFieldLink> + <entityFieldLink> + <name>a9e1245c-7798-4170-9f2f-2e33f61cd6aa</name> + <entityField>VALID_TO</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + </children> +</neonView> diff --git a/neonView/DSGVOFilter_view/DSGVOFilter_view.aod b/neonView/DSGVOFilter_view/DSGVOFilter_view.aod new file mode 100644 index 0000000000..cf36b04ef2 --- /dev/null +++ b/neonView/DSGVOFilter_view/DSGVOFilter_view.aod @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.1"> + <name>DSGVOFilter_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterable v="true" /> + <layout> + <boxLayout> + <name>layout</name> + </boxLayout> + </layout> + <children> + <tableViewTemplate> + <name>Table</name> + <entityField>#ENTITY</entityField> + <columns> + <neonTableColumn> + <name>76d31355-bdff-4b4c-a61c-285ed96c6721</name> + <entityField>ROW_ID</entityField> + <width v="75" /> + <expandRatio v="100" /> + </neonTableColumn> + <neonTableColumn> + <name>b9a96821-ed98-44e8-b1d9-c5577c53bf72</name> + <entityField>USE</entityField> + <width v="75" /> + <expandRatio v="100" /> + </neonTableColumn> + <neonTableColumn> + <name>ad9e414f-4f0f-4efb-887a-468e7a9fefb5</name> + <entityField>RIGHT</entityField> + <width v="75" /> + <expandRatio v="100" /> + </neonTableColumn> + <neonTableColumn> + <name>ae9f07de-c29e-4d14-97a1-a01e47c84cbd</name> + <entityField>VALID_TO</entityField> + <width v="75" /> + <expandRatio v="100" /> + </neonTableColumn> + </columns> + </tableViewTemplate> + </children> +</neonView> diff --git a/neonView/DSGVOPreview_view/DSGVOPreview_view.aod b/neonView/DSGVOPreview_view/DSGVOPreview_view.aod new file mode 100644 index 0000000000..046014dee0 --- /dev/null +++ b/neonView/DSGVOPreview_view/DSGVOPreview_view.aod @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.1"> + <name>DSGVOPreview_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <boxLayout> + <name>layout</name> + </boxLayout> + </layout> + <children> + <genericViewTemplate> + <name>Info</name> + <editMode v="true" /> + <entityField>#ENTITY</entityField> + <fields> + <entityFieldLink> + <name>ea829487-d4a6-45e5-a5af-c8af2eb696e2</name> + <entityField>RIGHT</entityField> + </entityFieldLink> + <entityFieldLink> + <name>f702234f-edab-46d4-9c1b-f20e36fd29b8</name> + <entityField>USE</entityField> + </entityFieldLink> + <entityFieldLink> + <name>23c39671-0aea-4b58-b726-96d0b7f5384e</name> + <entityField>VALID_TO</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + </children> +</neonView> diff --git a/report/DSGVO_report/reportData.jasper b/report/DSGVO_report/reportData.jasper index 33f416115211e24b4b78144ae30c00bb58aeeda5..62cb7ad949c6c6aa454241039cef8e37bb37f45c 100644 GIT binary patch delta 5675 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 Q`8wfb_0K)cmedURA8XCvcK`qY delta 3005 zcmeHI`%fHY6uoy@gqDTK8w5&$1tPWOQJ&?^mWVAh-DP={hs&m}23!irf{39AHWF$o z&@Z(%eF!R0t0tILnnI$W)L0VR(jQD}VvHvC2d%WUV4~IPo$s3^OLqPP-O1cNGw05n z^W8H$JF|wbevebt32r-6Qth<~ZJul)B9K|K%^vPAssX^ACF>&D?QAbJvysrpm|u=g zYiWbS$jiajcEYd^;7emGebxyJiz@VgL^LwY@J|s?w3oZKOBeH7RXA>Qkd1`}v*n!Q zB;1!9fZohEe;b?6HEKH~6<(SZ<OR#+WhluDs30#BF7nOnWL_Ri(}ihrq*cMAlBgKL zOo2|@D;@IEqu@cX+=C1y4+1K9kO>zLJ$wXj7N(PrI9a??r_&Bf;=BwfhzpjB%TN** zP(fTKT*L>sxM6pWEd2iNd@YlNc^Od<7AzN*Aqhtcs30u&T;HX&zg%3dW?Q#Mj?8(n z{hQQw)y^IjyIJVNZa=kIg{Q@Xw`V98$0Y;2j4BuqEH@xSY2^Yc7?25<m5;J*S&__= zQDxWf9Y#FIekz^Bx9vyE_PIICtnQCj;UyNK55<pIhCW?|@3OJ<810<okC#gd{shbY z$xs@QfC~N`Jq8n=WoAQ+LwwYb$A<E~@CrMf-$~V69#1X?%T103wXul(RlwLy<1V@~ zpkn>X@`^mRw}`RqEDcMl^q{LUD_0y>6;~C-;(ciWysRiJK(KrPGL!}^puz%V!eziK z{LzZ4P9k@8xgo5n+RI^Lq&hDa|CUVf@<73aV7UnyN+twUFd-8zCLU1A;qnwZ4@@`= zWY*{^eMn!$i^f%75I%w^ae9+&AoQ*TTdMI76}Kic;(Ev1PNm@^38*zVeDv4mSB6MF zcnMPQAy@?;&cp^Eg5W;n9v2@$Ojmcp;bFB-SE-de@Di=yL9hxQoQVw{1i?MXJuV)i zrCHdo*Y~3)cxdtA%xCmBv;%%;Pn*JhGg6aMGLw_D(lbn{nW;%h>Gs!63tsV_@EZbn zz#RnNCUd7b(P}>QTw+m6i`8O2v>BFRMFa70k40Gn1E|H)X|{HlZI<G8TVpeQKVyHz zdcr*#m%xoSz+x;5yFlLsq%3{BX)mT-&k|pV?6nh`r~MjrkSfN^!q*4X7h$n%67D(S zTTb{p3A>4&t4`;?a5_KjbpC?V`Ev=MK<YGnGY3ngFdR;YrR#_NbhKyv$i~LHlCg+o zw@3AEB_>BOezzyULp=#<w^>-OF<peaWlv1e3J|PRyI~8}0Z_ppl)y32!y90P<4_L_ z8sH=}!dujL20Gv@bio+(!8>pSCa9C#zz1*&J|uPu#^GZ)51)b^rfI96p&`w}0(?$` znu8m#K*PF>YPf<iu!wPR6?O0}S-4L<D!5D*)O7R}JWjs;%R&4=)A*5s_?d#ZMM3;R zLHtTV+@T=uQV^>Y#2N+h2L<sb1@VxA_y>m34NlQ?&!8ua<0d$d-e5-`n8tcPm`8sa ze=uCb5V(Qih!}xtjKUa<#yHw^xPwN&`hO74zX;3#6=p#R=7Jvcz=%aqPmgQ^J_(Ij z0#+=A4lIK%)I%Q{;0RX2F|48>YAJ|13Zj96FjEi~3gTG`qNIs}c%Fi2p&(i*2pa{_ qK|#DkL3C3Lhbf5H$if=^7F3|JL7*u)EzRYXXJc*Kx3KrRgZ>3%j-D?7 -- GitLab