Parcourir la source

Recreate DAO mappings by Eflinq

Dalibor Votruba il y a 3 ans
Parent
commit
b72f116939
45 fichiers modifiés avec 1519 ajouts et 180 suppressions
  1. 518 126
      @Documentation/QLiberace.simp
  2. 20 0
      Common/qdr.app.qlbrc.common/Entities/Base/DaoMapper/IdDm.cs
  3. 34 0
      Common/qdr.app.qlbrc.common/Entities/Base/DaoMapper/TrackedDm.cs
  4. 4 8
      Common/qdr.app.qlbrc.common/Entities/Base/QlbrcEntity.cs
  5. 8 0
      Common/qdr.app.qlbrc.common/Entities/Base/QlbrcEntityKeyless.cs
  6. 1 0
      Common/qdr.app.qlbrc.common/Entities/Base/QlbrcEntityTenant.cs
  7. 3 6
      Common/qdr.app.qlbrc.common/Entities/Base/QlbrcEntityTracked.cs
  8. 1 0
      Common/qdr.app.qlbrc.common/Repositories/QlbrcRepository.cs
  9. 8 0
      Common/qdr.app.qlbrc.common/qdr.app.qlbrc.common.csproj
  10. 1 1
      Common/qdr.fnd.core.business/qdr.fnd.core.business.csproj
  11. 5 1
      Common/qdr.fnd.core.data.itfc/Entity/IDao.cs
  12. 12 0
      Common/qdr.fnd.core.data/Entity/AbstractDaoMapper.cs
  13. 24 2
      Common/qdr.fnd.core.data/Entity/Entity.cs
  14. 0 5
      Common/qdr.fnd.core.data/Entity/GuidEntity.cs
  15. 2 2
      Common/qdr.fnd.core.data/qdr.fnd.core.data.csproj
  16. 2 2
      Common/qdr.fnd.core.nlog/qdr.fnd.core.nlog.csproj
  17. 10 4
      Common/qdr.fnd.core.test/qdr.fnd.core.test.csproj
  18. 1 1
      Common/qdr.fnd.core.web/qdr.fnd.core.web.csproj
  19. 1 1
      Common/qdr.fnd.core/qdr.fnd.core.csproj
  20. 1 0
      Modules/qdr.app.qlbrc.base/Constants.cs
  21. 75 0
      Modules/qdr.app.qlbrc.base/Entities/DaoMapper/SettingDm.cs
  22. 43 0
      Modules/qdr.app.qlbrc.base/Entities/DaoMapper/TenantDm.cs
  23. 35 0
      Modules/qdr.app.qlbrc.base/Entities/DaoMapper/UserDm.cs
  24. 12 2
      Modules/qdr.app.qlbrc.base/Entities/Tenant.cs
  25. 25 0
      Modules/qdr.app.qlbrc.base/Entities/TenantUser.cs
  26. 9 0
      Modules/qdr.app.qlbrc.base/Entities/User.cs
  27. 17 3
      Modules/qdr.app.qlbrc.base/QlbrcDbContext.cs
  28. 2 2
      Modules/qdr.app.qlbrc.base/Repositories/RepoTenant.cs
  29. 5 5
      Modules/qdr.app.qlbrc.base/qdr.app.qlbrc.base.csproj
  30. 10 4
      Tests/qdr.app.qlbrc.base.Tests/qdr.app.qlbrc.base.Tests.csproj
  31. 10 4
      Tests/qdr.app.qlbrc.common.Tests/qdr.app.qlbrc.common.Tests.csproj
  32. 192 0
      Workbench/Entity/QLiberaceContext.cs
  33. 74 0
      Workbench/Entity/Setting.cs
  34. 48 0
      Workbench/Entity/Tenant.cs
  35. 20 0
      Workbench/Entity/TenantUser.cs
  36. 33 0
      Workbench/Entity/User.cs
  37. 2 0
      Workbench/Program.cs
  38. 18 0
      Workbench/Workbench.csproj
  39. 6 0
      Workbench/readme.txt
  40. 135 0
      qdr.app.qlbrc.console/Commands/DbInitCmd.cs
  41. 12 0
      qdr.app.qlbrc.console/Constants.cs
  42. 8 0
      qdr.app.qlbrc.console/Properties/launchSettings.json
  43. 65 0
      qdr.app.qlbrc.console/TestCmd.cs
  44. 1 1
      qdr.app.qlbrc.console/qdr.app.qlbrc.console.csproj
  45. 6 0
      qdr.app.qlbrc.sln

+ 518 - 126
@Documentation/QLiberace.simp

@@ -1,21 +1,25 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<sim-project version="13.40" multi-file="no" uid="simp2ea5f8008af94134b20730821dbeba15">
+<sim-project version="13.80" multi-file="no" uid="simp2ea5f8008af94134b20730821dbeba15">
   <meta>
     <name>QLiberace</name>
     <authors>Dalibor Votruba</authors>
     <description>SAAS based functional processing (automatic) backend with payments</description>
   </meta>
-  <counters models="1">
+  <counters models="3">
     <entity-names>
       <counter>
         <item-type stereotype="component" type-id="component" type="Component" />
         <value>3</value>
       </counter>
+      <counter>
+        <item-type type-id="erd-entity" type="Entity" />
+        <value>4</value>
+      </counter>
     </entity-names>
     <entity-ids>
       <counter>
         <item-type type-id="group" type="Group" />
-        <value>115</value>
+        <value>313</value>
       </counter>
       <counter>
         <item-type type-id="component" type="Component" />
@@ -37,6 +41,14 @@
         <item-type type-id="requirement" type="Requirement" />
         <value>15</value>
       </counter>
+      <counter>
+        <item-type type-id="erd-entity" type="Entity" />
+        <value>5</value>
+      </counter>
+      <counter>
+        <item-type type-id="erd-relationship" type="Relationship" />
+        <value>19</value>
+      </counter>
     </entity-ids>
     <diagrams>
       <counter>
@@ -47,11 +59,25 @@
         <type>SoftwareIdeasModeler.Core.Diagrams.Other.RequirementDiagram</type>
         <value>1</value>
       </counter>
+      <counter>
+        <type>SoftwareIdeasModeler.Core.Diagrams.Other.EntityRelationshipDiagram</type>
+        <value>1</value>
+      </counter>
     </diagrams>
-    <fields />
+    <fields>
+      <counter>
+        <type>SoftwareIdeasModeler.Core.DiagramItems.Erd.ErdEntityAttribute</type>
+        <value>31</value>
+      </counter>
+      <counter>
+        <type>SoftwareIdeasModeler.Core.DiagramItems.Erd.ErdEntityIndex</type>
+        <value>5</value>
+      </counter>
+    </fields>
   </counters>
   <alias-groups />
   <management uid="md-64da5925cccf40f881cbd349de3ac60c" name="" task-id-sequence="0">
+    <working-schedule uid="ws-2807cc5250c044ec85bb85dcc5f7f146" hours="8" monday="8" tuesday="8" wednesday="8" thursday="8" friday="8" saturday="0" sunday="0" />
     <persons>
       <person id="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57">
         <first-name>Dalibor</first-name>
@@ -61,6 +87,7 @@
         <phone-number />
         <description />
         <color>#00000000</color>
+        <working-schedule uid="ws-8d5061554bea46fba84de4f496d6d5f1" hours="8" monday="8" tuesday="8" wednesday="8" thursday="8" friday="8" saturday="0" sunday="0" />
       </person>
     </persons>
     <teams />
@@ -73,54 +100,41 @@
   <glossary id="glsr-c62334eae23c4f22971de71d88128a88" />
   <types default="UML">
     <type-sets>
-      <type-set file="CSharpTypes.xml" />
       <type-set file="MsSqlTypes.xml" />
-      <type-set file="PostgreSQL.xml" />
       <type-set file="UmlTypes.xml" />
     </type-sets>
     <custom-types>
       <parameters />
       <types>
-        <type id="Class:2626a7fd504946ccaa1eb090b6d27d0d" tid="" name="Base" description="" class-ref="2626a7fd504946ccaa1eb090b6d27d0d" />
-        <type id="Class:7546dafc2b0d406bb9cf489c5eeb4aff" tid="" name="Customer" description="" class-ref="7546dafc2b0d406bb9cf489c5eeb4aff" />
-        <type id="Class:cb92b4b50dc847aebfdbd90ce365a1eb" tid="" name="Invoice" description="" class-ref="cb92b4b50dc847aebfdbd90ce365a1eb" />
+        <type id="Class:2626a7fd504946ccaa1eb090b6d27d0d" name="Base" class-ref="2626a7fd504946ccaa1eb090b6d27d0d" />
+        <type id="Class:7546dafc2b0d406bb9cf489c5eeb4aff" name="Customer" class-ref="7546dafc2b0d406bb9cf489c5eeb4aff" />
+        <type id="Class:cb92b4b50dc847aebfdbd90ce365a1eb" name="Invoice" class-ref="cb92b4b50dc847aebfdbd90ce365a1eb" />
+        <type id="nvarchar (MsSql.nvarchar)" name="nvarchar (MsSql.nvarchar)" />
       </types>
     </custom-types>
   </types>
   <items>
-    <item id="132ce45236e54d6da05ae53d64712729" cid="PROP002" type="property" name="" style-class="" owner="7268ad1b0bd249218475144e6941ccdf" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:42:51" visibility="private">
-      <feature />
+    <item id="132ce45236e54d6da05ae53d64712729" cid="PROP002" type="property" owner="7268ad1b0bd249218475144e6941ccdf" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:42:51" visibility="private">
       <structural-feature type="Customer" type-id="Class:7546dafc2b0d406bb9cf489c5eeb4aff" />
-      <property />
     </item>
-    <item id="de0957d8d7ac42eab57e579c2cefbf47" cid="PROP005" type="property" name="" style-class="" owner="802906c103994cfb8c5117077f30e22a" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:43:31" visibility="private">
-      <feature />
+    <item id="de0957d8d7ac42eab57e579c2cefbf47" cid="PROP005" type="property" owner="802906c103994cfb8c5117077f30e22a" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:43:31" visibility="private">
       <structural-feature type="Customer" type-id="Class:7546dafc2b0d406bb9cf489c5eeb4aff" />
-      <property />
     </item>
-    <item id="002883f71fbc4324bbd1efa19cdbd1a6" cid="PROP003" type="property" name="" style-class="" owner="2037f7bd032e4fa3a1d8d99f1cd1ea27" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:43:08" visibility="private">
-      <feature />
+    <item id="002883f71fbc4324bbd1efa19cdbd1a6" cid="PROP003" type="property" owner="2037f7bd032e4fa3a1d8d99f1cd1ea27" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:43:08" visibility="private">
       <structural-feature type="Invoice" type-id="Class:cb92b4b50dc847aebfdbd90ce365a1eb" />
-      <property />
     </item>
-    <item id="49ad3ceea0bb4157b557e21e2eb7c0b9" cid="PROP006" type="property" name="" style-class="" owner="802906c103994cfb8c5117077f30e22a" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:43:31" visibility="private">
-      <feature />
+    <item id="49ad3ceea0bb4157b557e21e2eb7c0b9" cid="PROP006" type="property" owner="802906c103994cfb8c5117077f30e22a" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:43:31" visibility="private">
       <structural-feature type="Base" type-id="Class:2626a7fd504946ccaa1eb090b6d27d0d" />
-      <property />
     </item>
-    <item id="b531bae1520645b58761d8077cac7517" cid="PROP004" type="property" name="" style-class="" owner="2037f7bd032e4fa3a1d8d99f1cd1ea27" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:43:08" visibility="private">
-      <feature />
+    <item id="b531bae1520645b58761d8077cac7517" cid="PROP004" type="property" owner="2037f7bd032e4fa3a1d8d99f1cd1ea27" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:43:08" visibility="private">
       <structural-feature type="Base" type-id="Class:2626a7fd504946ccaa1eb090b6d27d0d" />
-      <property />
     </item>
-    <item id="93016f98fae440bb88e27fe09172df66" cid="PROP001" type="property" name="" style-class="" owner="7268ad1b0bd249218475144e6941ccdf" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:42:51" visibility="private">
-      <feature />
+    <item id="93016f98fae440bb88e27fe09172df66" cid="PROP001" type="property" owner="7268ad1b0bd249218475144e6941ccdf" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:42:51" visibility="private">
       <structural-feature type="Invoice" type-id="Class:cb92b4b50dc847aebfdbd90ce365a1eb" />
-      <property />
     </item>
   </items>
   <models>
-    <model id="p90d2274b44184846a11deb852336b134_590513963" name="Concept" namespace="" order-index="1">
+    <model id="p90d2274b44184846a11deb852336b134_590513963" name="Concept" namespace="" order-index="1" expanded="true">
       <meta>
         <authors>
           <author> </author>
@@ -133,7 +147,7 @@
       </meta>
       <abstract-items />
       <sub-models />
-      <diagram type="uml-component" id="pc5adf2469318408aa71655238685ea62_667242607" name="Architecture - Modules" order-index="1" uid="" auto-routed-paths="false" default-line-style="default" show-frame="false" view-location="0,80">
+      <diagram type="uml-component" id="pc5adf2469318408aa71655238685ea62_667242607" name="Architecture - Modules" order-index="1" uid="" name-style="" auto-routed-paths="false" default-line-style="default" show-frame="false" view-location="0,14">
         <style>
           <background-color index="1" color="#FFFFFFFF" />
           <background-color index="2" color="#FFFFFFFF" />
@@ -143,7 +157,7 @@
           <authors>
             <author />
           </authors>
-          <description>Shows module associations and descripe their functionality (role)
+          <description>Shows module associations and descripe their functionality (role)
 </description>
           <creation-date>09/15/2022 15:38:28</creation-date>
           <change-date>09/15/2022 15:44:58</change-date>
@@ -151,23 +165,20 @@
           <version>0.0.1</version>
         </meta>
         <abstract-items>
-          <item id="802906c103994cfb8c5117077f30e22a" cid="REL003" type="relationship" name="" style-class="" change-tracking-state="added" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:43:31" from="7546dafc2b0d406bb9cf489c5eeb4aff" to="2626a7fd504946ccaa1eb090b6d27d0d" visibility="package">
+          <item id="802906c103994cfb8c5117077f30e22a" cid="REL003" type="relationship" change-tracking-state="added" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:43:31" from="7546dafc2b0d406bb9cf489c5eeb4aff" to="2626a7fd504946ccaa1eb090b6d27d0d" visibility="package">
             <stereotypes>
               <stereotype name="use" />
             </stereotypes>
             <stereotype-instances>
               <stereotype id="802906c103994cfb8c5117077f30e22a_use_c" type="use" ref="" />
             </stereotype-instances>
-            <owned-items>
-              <owned-item ref="de0957d8d7ac42eab57e579c2cefbf47" />
-              <owned-item ref="49ad3ceea0bb4157b557e21e2eb7c0b9" />
-            </owned-items>
+            <owned-items />
             <relation from="7546dafc2b0d406bb9cf489c5eeb4aff" to="2626a7fd504946ccaa1eb090b6d27d0d" derived="false">
-              <start-role id="umlar-5e20f74f-be89-49e7-a548-7ba068f9c9b2" name="" navigability="" association-type="association" visibility="private" property-ref="de0957d8d7ac42eab57e579c2cefbf47" />
-              <end-role id="umlar-65fbacf4-bd01-40f3-9366-1688396114a9" name="" navigability="yes" association-type="association" visibility="private" property-ref="49ad3ceea0bb4157b557e21e2eb7c0b9" />
+              <start-role id="umlar-514d049c-19c5-4f50-ba0b-3685153babdd" name="" navigability="" association-type="association" visibility="private" property-ref="de0957d8d7ac42eab57e579c2cefbf47" />
+              <end-role id="umlar-7007235f-0293-427f-8765-6c6222d43b2f" name="" navigability="yes" association-type="association" visibility="private" property-ref="49ad3ceea0bb4157b557e21e2eb7c0b9" />
             </relation>
           </item>
-          <item id="2626a7fd504946ccaa1eb090b6d27d0d" cid="CPT001" type="component" name="Base" style-class="" change-tracking-state="added" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:39:10" visibility="undefined">
+          <item id="2626a7fd504946ccaa1eb090b6d27d0d" cid="CPT001" type="component" name="Base" change-tracking-state="added" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:39:10" visibility="undefined">
             <stereotypes>
               <stereotype name="component" />
               <stereotype name="module" />
@@ -185,7 +196,11 @@
                   <styles />
                   <content>
                     <paragraph>
-                      <style />
+                      <style numbering-type="None">
+                        <numbering name="" multi-level="false">
+                          <numbering-level type="None" level="0" format="{0}." />
+                        </numbering>
+                      </style>
                       <p>
                         <t>Provide </t>
                       </p>
@@ -219,7 +234,7 @@
             </stereotype-instances>
             <component />
           </item>
-          <item id="cb92b4b50dc847aebfdbd90ce365a1eb" cid="CPT003" type="component" name="Invoice" style-class="" change-tracking-state="added" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:40:58" visibility="undefined">
+          <item id="cb92b4b50dc847aebfdbd90ce365a1eb" cid="CPT003" type="component" name="Invoice" change-tracking-state="added" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:40:58" visibility="undefined">
             <stereotypes>
               <stereotype name="component" />
               <stereotype name="module" />
@@ -237,7 +252,11 @@
                   <styles />
                   <content>
                     <paragraph>
-                      <style />
+                      <style numbering-type="None">
+                        <numbering name="" multi-level="false">
+                          <numbering-level type="None" level="0" format="{0}." />
+                        </numbering>
+                      </style>
                       <p>
                         <t>Provides </t>
                       </p>
@@ -265,23 +284,20 @@
             </stereotype-instances>
             <component />
           </item>
-          <item id="7268ad1b0bd249218475144e6941ccdf" cid="REL001" type="relationship" name="" style-class="" change-tracking-state="added" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:42:51" from="cb92b4b50dc847aebfdbd90ce365a1eb" to="7546dafc2b0d406bb9cf489c5eeb4aff" visibility="package">
+          <item id="7268ad1b0bd249218475144e6941ccdf" cid="REL001" type="relationship" change-tracking-state="added" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:42:51" from="cb92b4b50dc847aebfdbd90ce365a1eb" to="7546dafc2b0d406bb9cf489c5eeb4aff" visibility="package">
             <stereotypes>
               <stereotype name="use" />
             </stereotypes>
             <stereotype-instances>
               <stereotype id="7268ad1b0bd249218475144e6941ccdf_use_c" type="use" ref="" />
             </stereotype-instances>
-            <owned-items>
-              <owned-item ref="93016f98fae440bb88e27fe09172df66" />
-              <owned-item ref="132ce45236e54d6da05ae53d64712729" />
-            </owned-items>
+            <owned-items />
             <relation from="cb92b4b50dc847aebfdbd90ce365a1eb" to="7546dafc2b0d406bb9cf489c5eeb4aff" derived="false">
-              <start-role id="umlar-81d0d316-5754-4d4f-be3f-54e73c4063cf" name="" navigability="" association-type="association" visibility="private" property-ref="93016f98fae440bb88e27fe09172df66" />
-              <end-role id="umlar-fbca7049-1cdb-46f5-97c4-4cdd7073ce7b" name="" navigability="yes" association-type="association" visibility="private" property-ref="132ce45236e54d6da05ae53d64712729" />
+              <start-role id="umlar-b20fdfea-e1af-43b9-8888-03175954b812" name="" navigability="" association-type="association" visibility="private" property-ref="93016f98fae440bb88e27fe09172df66" />
+              <end-role id="umlar-e6208a74-7fa9-4cd5-9497-0dfaeaba3db1" name="" navigability="yes" association-type="association" visibility="private" property-ref="132ce45236e54d6da05ae53d64712729" />
             </relation>
           </item>
-          <item id="7546dafc2b0d406bb9cf489c5eeb4aff" cid="CPT002" type="component" name="Customer" style-class="" change-tracking-state="added" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:40:04" visibility="undefined">
+          <item id="7546dafc2b0d406bb9cf489c5eeb4aff" cid="CPT002" type="component" name="Customer" change-tracking-state="added" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:40:04" visibility="undefined">
             <stereotypes>
               <stereotype name="component" />
               <stereotype name="module" />
@@ -299,7 +315,11 @@
                   <styles />
                   <content>
                     <paragraph>
-                      <style />
+                      <style numbering-type="None">
+                        <numbering name="" multi-level="false">
+                          <numbering-level type="None" level="0" format="{0}." />
+                        </numbering>
+                      </style>
                       <p>
                         <t>Provides </t>
                       </p>
@@ -336,20 +356,17 @@
             </stereotype-instances>
             <component />
           </item>
-          <item id="2037f7bd032e4fa3a1d8d99f1cd1ea27" cid="REL002" type="relationship" name="" style-class="" change-tracking-state="added" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:43:08" from="cb92b4b50dc847aebfdbd90ce365a1eb" to="2626a7fd504946ccaa1eb090b6d27d0d" visibility="package">
+          <item id="2037f7bd032e4fa3a1d8d99f1cd1ea27" cid="REL002" type="relationship" change-tracking-state="added" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:43:08" from="cb92b4b50dc847aebfdbd90ce365a1eb" to="2626a7fd504946ccaa1eb090b6d27d0d" visibility="package">
             <stereotypes>
               <stereotype name="use" />
             </stereotypes>
             <stereotype-instances>
               <stereotype id="2037f7bd032e4fa3a1d8d99f1cd1ea27_use_c" type="use" ref="" />
             </stereotype-instances>
-            <owned-items>
-              <owned-item ref="002883f71fbc4324bbd1efa19cdbd1a6" />
-              <owned-item ref="b531bae1520645b58761d8077cac7517" />
-            </owned-items>
+            <owned-items />
             <relation from="cb92b4b50dc847aebfdbd90ce365a1eb" to="2626a7fd504946ccaa1eb090b6d27d0d" derived="false">
-              <start-role id="umlar-720967a5-2d82-4cf5-b682-3e3514cf0c6a" name="" navigability="" association-type="association" visibility="private" property-ref="002883f71fbc4324bbd1efa19cdbd1a6" />
-              <end-role id="umlar-3475ea3a-9ec6-41c4-9a04-ef10245d1689" name="" navigability="yes" association-type="association" visibility="private" property-ref="b531bae1520645b58761d8077cac7517" />
+              <start-role id="umlar-bc3f84aa-0b50-4c37-9ef5-cc10f9f0e631" name="" navigability="" association-type="association" visibility="private" property-ref="002883f71fbc4324bbd1efa19cdbd1a6" />
+              <end-role id="umlar-4705a859-41e6-4cbe-a2be-36baaa603479" name="" navigability="yes" association-type="association" visibility="private" property-ref="b531bae1520645b58761d8077cac7517" />
             </relation>
           </item>
         </abstract-items>
@@ -395,7 +412,7 @@
           </item>
         </layer>
       </diagram>
-      <diagram type="requirements" id="pba77ba9fdd314810965c16d702e875d3_966553081" name="General.Requitements" order-index="2" overview-order-index="0" uid="" auto-routed-paths="false" default-line-style="default">
+      <diagram type="requirements" id="pba77ba9fdd314810965c16d702e875d3_966553081" name="General.Requitements" order-index="2" overview-order-index="0" uid="" name-style="" auto-routed-paths="false" default-line-style="default">
         <style>
           <background-color index="1" color="#FFFFFFFF" />
           <background-color index="2" color="#FFFFFFFF" />
@@ -412,7 +429,7 @@
           <version>0.0.1</version>
         </meta>
         <abstract-items>
-          <item id="f57cd7c78a5e483ebb3edb6a59957a97" cid="REQ014" type="requirement" name="RQ_CSTR_DB_CROSS_SCHEMA_1" style-class="" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:09:33">
+          <item id="f57cd7c78a5e483ebb3edb6a59957a97" cid="REQ014" type="requirement" name="RQ_CSTR_DB_CROSS_SCHEMA_1" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:09:33">
             <requirement id="2.1.2.">
               <description>
                 <text>
@@ -437,7 +454,11 @@
                   </definition>
                   <content>
                     <paragraph>
-                      <style />
+                      <style numbering-type="None">
+                        <numbering name="" multi-level="false">
+                          <numbering-level type="None" level="0" format="{0}." />
+                        </numbering>
+                      </style>
                       <p>
                         <t>Data </t>
                       </p>
@@ -466,13 +487,13 @@
               <row-height>0</row-height>
             </requirement>
           </item>
-          <item id="c19c4449f012422dbba1ddec55021b44" cid="REL004" type="relationship" name="" style-class="" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:57:00" from="d3486fe91b1f476e8a3393099f04e99e" to="ba48530a7b5245a7b6efcf3d8e61f067" visibility="package">
+          <item id="c19c4449f012422dbba1ddec55021b44" cid="REL004" type="relationship" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:57:00" from="d3486fe91b1f476e8a3393099f04e99e" to="ba48530a7b5245a7b6efcf3d8e61f067" visibility="package">
             <relation from="d3486fe91b1f476e8a3393099f04e99e" to="ba48530a7b5245a7b6efcf3d8e61f067" derived="false">
-              <start-role id="umlar-1dc44697-399f-4849-9208-4ab535f8cadc" name="" navigability="" association-type="association" visibility="private" />
-              <end-role id="umlar-7e79c854-3eb1-4e5e-aa11-c2b727ff0f49" name="" navigability="" association-type="composition" visibility="private" />
+              <start-role id="umlar-09683eff-8cfe-486c-9425-c2bc6a352f1e" name="" navigability="" association-type="association" visibility="private" />
+              <end-role id="umlar-4be79653-dc74-4acf-a657-8ddfd6a642bd" name="" navigability="" association-type="composition" visibility="private" />
             </relation>
           </item>
-          <item id="c34f0bc111894b608624e52c0815c07a" cid="REQ007" type="requirement" name="RQ_TECH_SPEC_FE_4" style-class="" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:02:23">
+          <item id="c34f0bc111894b608624e52c0815c07a" cid="REQ007" type="requirement" name="RQ_TECH_SPEC_FE_4" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:02:23">
             <requirement id="3.4.">
               <description>
                 <text>
@@ -497,7 +518,11 @@
                   </definition>
                   <content>
                     <paragraph>
-                      <style />
+                      <style numbering-type="None">
+                        <numbering name="" multi-level="false">
+                          <numbering-level type="None" level="0" format="{0}." />
+                        </numbering>
+                      </style>
                       <p>
                         <t>Frontend: </t>
                       </p>
@@ -514,7 +539,7 @@
               <row-height>0</row-height>
             </requirement>
           </item>
-          <item id="0a48454de005413c92e4a5cce0d2982c" cid="REQ010" type="requirement" name="RQ_CONSTRAINTS" style-class="" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:07:00">
+          <item id="0a48454de005413c92e4a5cce0d2982c" cid="REQ010" type="requirement" name="RQ_CONSTRAINTS" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:07:00">
             <requirement id="2.">
               <description>
                 <text>
@@ -539,14 +564,22 @@
                   </definition>
                   <content>
                     <paragraph>
-                      <style />
+                      <style numbering-type="None">
+                        <numbering name="" multi-level="false">
+                          <numbering-level type="None" level="0" format="{0}." />
+                        </numbering>
+                      </style>
                       <p>
                         <t>Constraints
 </t>
                       </p>
                     </paragraph>
                     <paragraph>
-                      <style />
+                      <style numbering-type="None">
+                        <numbering name="" multi-level="false">
+                          <numbering-level type="None" level="0" format="{0}." />
+                        </numbering>
+                      </style>
                       <p>
                         <t>
 </t>
@@ -562,19 +595,19 @@
               <requirement ref="f2c72e50f02843f08f5a7b84d1b0047f" />
             </requirement>
           </item>
-          <item id="ce75414afc48414db34ec56233570770" cid="REL005" type="relationship" name="" style-class="" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:58:04" from="05792695378d4e0fa3cdd3681474e8f6" to="ba48530a7b5245a7b6efcf3d8e61f067" visibility="package">
+          <item id="ce75414afc48414db34ec56233570770" cid="REL005" type="relationship" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:58:04" from="05792695378d4e0fa3cdd3681474e8f6" to="ba48530a7b5245a7b6efcf3d8e61f067" visibility="package">
             <relation from="05792695378d4e0fa3cdd3681474e8f6" to="ba48530a7b5245a7b6efcf3d8e61f067" derived="false">
-              <start-role id="umlar-727a67a7-8c77-4467-9329-3a96c95ae3f1" name="" navigability="" association-type="association" visibility="private" />
-              <end-role id="umlar-2e73ddf5-42ac-4cf2-80a8-270cbc4b1f32" name="" navigability="" association-type="composition" visibility="private" />
+              <start-role id="umlar-2f5c9cc3-19e8-48c8-b0af-6ffb9171ff06" name="" navigability="" association-type="association" visibility="private" />
+              <end-role id="umlar-07568f38-457d-4c3c-bc68-71ca644eaef4" name="" navigability="" association-type="composition" visibility="private" />
             </relation>
           </item>
-          <item id="57b3095ce64f4492bf2b9b93738232bf" cid="REL007" type="relationship" name="" style-class="" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:02:23" from="c34f0bc111894b608624e52c0815c07a" to="ba48530a7b5245a7b6efcf3d8e61f067" visibility="package">
+          <item id="57b3095ce64f4492bf2b9b93738232bf" cid="REL007" type="relationship" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:02:23" from="c34f0bc111894b608624e52c0815c07a" to="ba48530a7b5245a7b6efcf3d8e61f067" visibility="package">
             <relation from="c34f0bc111894b608624e52c0815c07a" to="ba48530a7b5245a7b6efcf3d8e61f067" derived="false">
-              <start-role id="umlar-d827c30b-a69f-420d-a19f-d7273a7cc335" name="" navigability="" association-type="association" visibility="private" />
-              <end-role id="umlar-80f094f2-c23b-4962-822b-34b70aac9fc0" name="" navigability="" association-type="composition" visibility="private" />
+              <start-role id="umlar-1d355ca4-6c96-4f5c-8388-68baa97d652c" name="" navigability="" association-type="association" visibility="private" />
+              <end-role id="umlar-8e571c81-4137-4657-a829-2c1890b7c8c5" name="" navigability="" association-type="composition" visibility="private" />
             </relation>
           </item>
-          <item id="05792695378d4e0fa3cdd3681474e8f6" cid="REQ005" type="requirement" name="RQ_TECH_SPEC_FRAMEWORK_2" style-class="" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:58:04">
+          <item id="05792695378d4e0fa3cdd3681474e8f6" cid="REQ005" type="requirement" name="RQ_TECH_SPEC_FRAMEWORK_2" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:58:04">
             <requirement id="3.2.">
               <description>
                 <text>
@@ -599,7 +632,11 @@
                   </definition>
                   <content>
                     <paragraph>
-                      <style />
+                      <style numbering-type="None">
+                        <numbering name="" multi-level="false">
+                          <numbering-level type="None" level="0" format="{0}." />
+                        </numbering>
+                      </style>
                       <p>
                         <t>.NET </t>
                       </p>
@@ -619,7 +656,7 @@
               <row-height>0</row-height>
             </requirement>
           </item>
-          <item id="c42a187a572a4c2c80d005bf4ea52f65" cid="REQ001" type="requirement" name="RQ_SUP_USER" style-class="" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:53:11">
+          <item id="c42a187a572a4c2c80d005bf4ea52f65" cid="REQ001" type="requirement" name="RQ_SUP_USER" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:53:11">
             <requirement id="1.1.">
               <description>
                 <text>
@@ -644,7 +681,11 @@
                   </definition>
                   <content>
                     <paragraph>
-                      <style />
+                      <style numbering-type="None">
+                        <numbering name="" multi-level="false">
+                          <numbering-level type="None" level="0" format="{0}." />
+                        </numbering>
+                      </style>
                       <p>
                         <t>Supports</t>
                       </p>
@@ -673,13 +714,7 @@
               <row-height>0</row-height>
             </requirement>
           </item>
-          <item id="b92a1d894874430fb846cd4ffebbe4e1" cid="REL014" type="relationship" name="" style-class="" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:09:33" from="f57cd7c78a5e483ebb3edb6a59957a97" to="c54c944000d84837bbb378cebd81a4e2" visibility="package">
-            <relation from="f57cd7c78a5e483ebb3edb6a59957a97" to="c54c944000d84837bbb378cebd81a4e2" derived="false">
-              <start-role id="umlar-08f30ff6-9d84-4212-8ba3-aa94d47cbe32" name="" navigability="" association-type="association" visibility="private" />
-              <end-role id="umlar-15fa448b-bba0-46ac-9bfb-50da88384532" name="" navigability="" association-type="composition" visibility="private" />
-            </relation>
-          </item>
-          <item id="7888a9de9bb14ac0a6fadd2418d0d7a6" cid="REQ013" type="requirement" name="RQ_CSTR_DB_SCHPERMOD_1" style-class="" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:08:33">
+          <item id="7888a9de9bb14ac0a6fadd2418d0d7a6" cid="REQ013" type="requirement" name="RQ_CSTR_DB_SCHPERMOD_1" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:08:33">
             <requirement id="2.1.1.">
               <description>
                 <text>
@@ -704,7 +739,11 @@
                   </definition>
                   <content>
                     <paragraph>
-                      <style />
+                      <style numbering-type="None">
+                        <numbering name="" multi-level="false">
+                          <numbering-level type="None" level="0" format="{0}." />
+                        </numbering>
+                      </style>
                       <p>
                         <t>Schema </t>
                       </p>
@@ -724,25 +763,31 @@
               <row-height>0</row-height>
             </requirement>
           </item>
-          <item id="2ffa044974b44d11a13593ba0173375b" cid="REL010" type="relationship" name="" style-class="" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:05:39" from="b2345a523c6b4b969a3fc4b92c2a427e" to="f3f58833e12d41adbad092d5fa821ae6" visibility="package">
+          <item id="b92a1d894874430fb846cd4ffebbe4e1" cid="REL014" type="relationship" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:09:33" from="f57cd7c78a5e483ebb3edb6a59957a97" to="c54c944000d84837bbb378cebd81a4e2" visibility="package">
+            <relation from="f57cd7c78a5e483ebb3edb6a59957a97" to="c54c944000d84837bbb378cebd81a4e2" derived="false">
+              <start-role id="umlar-ae451a75-fb32-416b-90dc-a3e01f2d0838" name="" navigability="" association-type="association" visibility="private" />
+              <end-role id="umlar-db7f8c07-e73e-4dcb-81cd-ce840195b0d2" name="" navigability="" association-type="composition" visibility="private" />
+            </relation>
+          </item>
+          <item id="2ffa044974b44d11a13593ba0173375b" cid="REL010" type="relationship" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:05:39" from="b2345a523c6b4b969a3fc4b92c2a427e" to="f3f58833e12d41adbad092d5fa821ae6" visibility="package">
             <relation from="b2345a523c6b4b969a3fc4b92c2a427e" to="f3f58833e12d41adbad092d5fa821ae6" derived="false">
-              <start-role id="umlar-4dbbc5fd-cda5-4524-a7f8-13bbfbfc46fc" name="" navigability="" association-type="association" visibility="private" />
-              <end-role id="umlar-bd997402-68dc-46c3-9ffc-2235a83b90c8" name="" navigability="" association-type="composition" visibility="private" />
+              <start-role id="umlar-d1e94e7f-c8d6-45d8-ae91-7f65047cb91a" name="" navigability="" association-type="association" visibility="private" />
+              <end-role id="umlar-95d604e8-26aa-4f4d-a069-43fd76e0081c" name="" navigability="" association-type="composition" visibility="private" />
             </relation>
           </item>
-          <item id="b8f1b1ee8380442a9b9806bcaabd60e1" cid="REL009" type="relationship" name="" style-class="" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:04:56" from="c776555b542842099176f5d00fbd63e4" to="f3f58833e12d41adbad092d5fa821ae6" visibility="package">
+          <item id="b8f1b1ee8380442a9b9806bcaabd60e1" cid="REL009" type="relationship" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:04:56" from="c776555b542842099176f5d00fbd63e4" to="f3f58833e12d41adbad092d5fa821ae6" visibility="package">
             <relation from="c776555b542842099176f5d00fbd63e4" to="f3f58833e12d41adbad092d5fa821ae6" derived="false">
-              <start-role id="umlar-3d42ec01-38ee-4789-b0c1-5c1267195084" name="" navigability="" association-type="association" visibility="private" />
-              <end-role id="umlar-5bbc570d-7675-42b5-ad57-c0a05a84624e" name="" navigability="" association-type="composition" visibility="private" />
+              <start-role id="umlar-f8bb8b64-4d80-4e7a-8c48-c5c6ad085584" name="" navigability="" association-type="association" visibility="private" />
+              <end-role id="umlar-1da7debb-297e-4f8b-9649-75878b6f8960" name="" navigability="" association-type="composition" visibility="private" />
             </relation>
           </item>
-          <item id="d31aa3cec9784517b6f38b38341c1799" cid="REL006" type="relationship" name="" style-class="" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:59:19" from="cc5e96719a7b4470b17001e1bc806b61" to="ba48530a7b5245a7b6efcf3d8e61f067" visibility="package">
+          <item id="d31aa3cec9784517b6f38b38341c1799" cid="REL006" type="relationship" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:59:19" from="cc5e96719a7b4470b17001e1bc806b61" to="ba48530a7b5245a7b6efcf3d8e61f067" visibility="package">
             <relation from="cc5e96719a7b4470b17001e1bc806b61" to="ba48530a7b5245a7b6efcf3d8e61f067" derived="false">
-              <start-role id="umlar-b7ba4eb8-a2de-48f2-8ced-68600b6c2d25" name="" navigability="" association-type="association" visibility="private" />
-              <end-role id="umlar-7cb068e3-1a39-4c17-afbf-13c70cbba19e" name="" navigability="" association-type="composition" visibility="private" />
+              <start-role id="umlar-80e450d6-5529-4bf5-8e57-d4576a4307e9" name="" navigability="" association-type="association" visibility="private" />
+              <end-role id="umlar-7267061c-2215-4b32-a93c-a3296f35e343" name="" navigability="" association-type="composition" visibility="private" />
             </relation>
           </item>
-          <item id="d3486fe91b1f476e8a3393099f04e99e" cid="REQ004" type="requirement" name="RQ_TECH_SPEC_PLATFORM_1" style-class="" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:57:00">
+          <item id="d3486fe91b1f476e8a3393099f04e99e" cid="REQ004" type="requirement" name="RQ_TECH_SPEC_PLATFORM_1" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:57:00">
             <requirement id="3.1.">
               <description>
                 <text>
@@ -767,7 +812,11 @@
                   </definition>
                   <content>
                     <paragraph>
-                      <style />
+                      <style numbering-type="None">
+                        <numbering name="" multi-level="false">
+                          <numbering-level type="None" level="0" format="{0}." />
+                        </numbering>
+                      </style>
                       <p>
                         <t>OS: </t>
                       </p>
@@ -787,7 +836,7 @@
               <row-height>0</row-height>
             </requirement>
           </item>
-          <item id="cc5e96719a7b4470b17001e1bc806b61" cid="REQ006" type="requirement" name="RQ_TECH_SPEC_DB_3" style-class="" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:59:19">
+          <item id="cc5e96719a7b4470b17001e1bc806b61" cid="REQ006" type="requirement" name="RQ_TECH_SPEC_DB_3" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:59:19">
             <requirement id="3.3.">
               <description>
                 <text>
@@ -812,7 +861,11 @@
                   </definition>
                   <content>
                     <paragraph>
-                      <style />
+                      <style numbering-type="None">
+                        <numbering name="" multi-level="false">
+                          <numbering-level type="None" level="0" format="{0}." />
+                        </numbering>
+                      </style>
                       <p>
                         <t>Supports: </t>
                       </p>
@@ -832,13 +885,13 @@
               <row-height>0</row-height>
             </requirement>
           </item>
-          <item id="6236eeabf4f94d1984205fd7fcb75b72" cid="REL008" type="relationship" name="" style-class="" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:04:52" from="c42a187a572a4c2c80d005bf4ea52f65" to="f3f58833e12d41adbad092d5fa821ae6" visibility="package">
+          <item id="6236eeabf4f94d1984205fd7fcb75b72" cid="REL008" type="relationship" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:04:52" from="c42a187a572a4c2c80d005bf4ea52f65" to="f3f58833e12d41adbad092d5fa821ae6" visibility="package">
             <relation from="c42a187a572a4c2c80d005bf4ea52f65" to="f3f58833e12d41adbad092d5fa821ae6" derived="false">
-              <start-role id="umlar-4ea33352-301f-4eb4-af1b-c61850e5a9b5" name="" navigability="" association-type="association" visibility="private" />
-              <end-role id="umlar-e5a7d94a-46fc-4388-8bc4-df8829e7904d" name="" navigability="" association-type="composition" visibility="private" />
+              <start-role id="umlar-066f722a-3023-4684-a53c-7696dd51fa13" name="" navigability="" association-type="association" visibility="private" />
+              <end-role id="umlar-2f89e4ee-529b-4dd6-9dd7-99b910801ca4" name="" navigability="" association-type="composition" visibility="private" />
             </relation>
           </item>
-          <item id="b2345a523c6b4b969a3fc4b92c2a427e" cid="REQ009" type="requirement" name="RQ_SUP_SETTINGS" style-class="" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:05:39">
+          <item id="b2345a523c6b4b969a3fc4b92c2a427e" cid="REQ009" type="requirement" name="RQ_SUP_SETTINGS" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:05:39">
             <requirement id="1.3.">
               <description>
                 <text>
@@ -863,7 +916,11 @@
                   </definition>
                   <content>
                     <paragraph>
-                      <style />
+                      <style numbering-type="None">
+                        <numbering name="" multi-level="false">
+                          <numbering-level type="None" level="0" format="{0}." />
+                        </numbering>
+                      </style>
                       <p>
                         <t>Support </t>
                       </p>
@@ -886,7 +943,7 @@
               <row-height>0</row-height>
             </requirement>
           </item>
-          <item id="ba48530a7b5245a7b6efcf3d8e61f067" cid="REQ003" type="requirement" name="RQ_TECH_SPEC" style-class="" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:56:20">
+          <item id="ba48530a7b5245a7b6efcf3d8e61f067" cid="REQ003" type="requirement" name="RQ_TECH_SPEC" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:56:20">
             <requirement id="3.">
               <description>
                 <text>
@@ -911,7 +968,11 @@
                   </definition>
                   <content>
                     <paragraph>
-                      <style />
+                      <style numbering-type="None">
+                        <numbering name="" multi-level="false">
+                          <numbering-level type="None" level="0" format="{0}." />
+                        </numbering>
+                      </style>
                       <p>
                         <t>Technical </t>
                       </p>
@@ -921,7 +982,11 @@
                       </p>
                     </paragraph>
                     <paragraph>
-                      <style />
+                      <style numbering-type="None">
+                        <numbering name="" multi-level="false">
+                          <numbering-level type="None" level="0" format="{0}." />
+                        </numbering>
+                      </style>
                       <p>
                         <t>
 </t>
@@ -939,19 +1004,19 @@
               <requirement ref="c34f0bc111894b608624e52c0815c07a" />
             </requirement>
           </item>
-          <item id="613bacfba1584c98951c8961e3c0cc5e" cid="REL011" type="relationship" name="" style-class="" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:07:27" from="c54c944000d84837bbb378cebd81a4e2" to="0a48454de005413c92e4a5cce0d2982c" visibility="package">
+          <item id="613bacfba1584c98951c8961e3c0cc5e" cid="REL011" type="relationship" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:07:27" from="c54c944000d84837bbb378cebd81a4e2" to="0a48454de005413c92e4a5cce0d2982c" visibility="package">
             <relation from="c54c944000d84837bbb378cebd81a4e2" to="0a48454de005413c92e4a5cce0d2982c" derived="false">
-              <start-role id="umlar-4aa1066d-c728-4e4a-bd5f-55412f9424ab" name="" navigability="" association-type="association" visibility="private" />
-              <end-role id="umlar-b018b38a-a3e8-4e87-bb33-775044400a11" name="" navigability="" association-type="composition" visibility="private" />
+              <start-role id="umlar-b5191386-5312-412a-9a2a-e5dab0bb1ee0" name="" navigability="" association-type="association" visibility="private" />
+              <end-role id="umlar-0a0ddf63-1b05-4d7a-8c85-b9ae67f171e1" name="" navigability="" association-type="composition" visibility="private" />
             </relation>
           </item>
-          <item id="4db2cc42f34c4caa94683e00c470b9da" cid="REL013" type="relationship" name="" style-class="" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:08:33" from="7888a9de9bb14ac0a6fadd2418d0d7a6" to="c54c944000d84837bbb378cebd81a4e2" visibility="package">
+          <item id="4db2cc42f34c4caa94683e00c470b9da" cid="REL013" type="relationship" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:08:33" from="7888a9de9bb14ac0a6fadd2418d0d7a6" to="c54c944000d84837bbb378cebd81a4e2" visibility="package">
             <relation from="7888a9de9bb14ac0a6fadd2418d0d7a6" to="c54c944000d84837bbb378cebd81a4e2" derived="false">
-              <start-role id="umlar-84ca5f15-e816-4a79-a466-6f481ee922a5" name="" navigability="" association-type="association" visibility="private" />
-              <end-role id="umlar-4dc04d58-8954-470f-8f6e-e710d2b69c76" name="" navigability="" association-type="composition" visibility="private" />
+              <start-role id="umlar-9963dd2e-111f-497b-af92-413f99ddf628" name="" navigability="" association-type="association" visibility="private" />
+              <end-role id="umlar-5c6bfeaa-9f51-417b-9bf6-dff7a873a136" name="" navigability="" association-type="composition" visibility="private" />
             </relation>
           </item>
-          <item id="f2c72e50f02843f08f5a7b84d1b0047f" cid="REQ012" type="requirement" name="RQ_CSTR_APP" style-class="" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:07:51">
+          <item id="f2c72e50f02843f08f5a7b84d1b0047f" cid="REQ012" type="requirement" name="RQ_CSTR_APP" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:07:51">
             <requirement id="2.2.">
               <description>
                 <text>
@@ -976,7 +1041,11 @@
                   </definition>
                   <content>
                     <paragraph>
-                      <style />
+                      <style numbering-type="None">
+                        <numbering name="" multi-level="false">
+                          <numbering-level type="None" level="0" format="{0}." />
+                        </numbering>
+                      </style>
                       <p>
                         <t>Application </t>
                       </p>
@@ -986,7 +1055,11 @@
                       </p>
                     </paragraph>
                     <paragraph>
-                      <style />
+                      <style numbering-type="None">
+                        <numbering name="" multi-level="false">
+                          <numbering-level type="None" level="0" format="{0}." />
+                        </numbering>
+                      </style>
                       <p>
                         <t>
 </t>
@@ -1000,7 +1073,7 @@
               <row-height>0</row-height>
             </requirement>
           </item>
-          <item id="c776555b542842099176f5d00fbd63e4" cid="REQ002" type="requirement" name="RQ_SUP_TENANT" style-class="" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:54:52">
+          <item id="c776555b542842099176f5d00fbd63e4" cid="REQ002" type="requirement" name="RQ_SUP_TENANT" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:54:52">
             <requirement id="1.2.">
               <description>
                 <text>
@@ -1025,7 +1098,11 @@
                   </definition>
                   <content>
                     <paragraph>
-                      <style />
+                      <style numbering-type="None">
+                        <numbering name="" multi-level="false">
+                          <numbering-level type="None" level="0" format="{0}." />
+                        </numbering>
+                      </style>
                       <p>
                         <t>Supports </t>
                       </p>
@@ -1050,7 +1127,11 @@
                       </p>
                     </paragraph>
                     <paragraph>
-                      <style />
+                      <style numbering-type="None">
+                        <numbering name="" multi-level="false">
+                          <numbering-level type="None" level="0" format="{0}." />
+                        </numbering>
+                      </style>
                       <p>
                         <t>
 </t>
@@ -1064,7 +1145,7 @@
               <row-height>0</row-height>
             </requirement>
           </item>
-          <item id="f3f58833e12d41adbad092d5fa821ae6" cid="REQ008" type="requirement" name="RQ_FUNC_SUP" style-class="" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:04:21">
+          <item id="f3f58833e12d41adbad092d5fa821ae6" cid="REQ008" type="requirement" name="RQ_FUNC_SUP" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:04:21">
             <requirement id="1.">
               <description>
                 <text>
@@ -1089,7 +1170,11 @@
                   </definition>
                   <content>
                     <paragraph>
-                      <style />
+                      <style numbering-type="None">
+                        <numbering name="" multi-level="false">
+                          <numbering-level type="None" level="0" format="{0}." />
+                        </numbering>
+                      </style>
                       <p>
                         <t>Functionality
 </t>
@@ -1106,7 +1191,7 @@
               <requirement ref="b2345a523c6b4b969a3fc4b92c2a427e" />
             </requirement>
           </item>
-          <item id="c54c944000d84837bbb378cebd81a4e2" cid="REQ011" type="requirement" name="RQ_CSTR_DB" style-class="" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:07:27">
+          <item id="c54c944000d84837bbb378cebd81a4e2" cid="REQ011" type="requirement" name="RQ_CSTR_DB" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:07:27">
             <requirement id="2.1.">
               <description>
                 <text>
@@ -1131,7 +1216,11 @@
                   </definition>
                   <content>
                     <paragraph>
-                      <style />
+                      <style numbering-type="None">
+                        <numbering name="" multi-level="false">
+                          <numbering-level type="None" level="0" format="{0}." />
+                        </numbering>
+                      </style>
                       <p>
                         <t>Database </t>
                       </p>
@@ -1150,10 +1239,10 @@
               <requirement ref="f57cd7c78a5e483ebb3edb6a59957a97" />
             </requirement>
           </item>
-          <item id="fbc97786a07c4aaa90c643ba77619c6e" cid="REL012" type="relationship" name="" style-class="" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:07:51" from="f2c72e50f02843f08f5a7b84d1b0047f" to="0a48454de005413c92e4a5cce0d2982c" visibility="package">
+          <item id="fbc97786a07c4aaa90c643ba77619c6e" cid="REL012" type="relationship" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:07:51" from="f2c72e50f02843f08f5a7b84d1b0047f" to="0a48454de005413c92e4a5cce0d2982c" visibility="package">
             <relation from="f2c72e50f02843f08f5a7b84d1b0047f" to="0a48454de005413c92e4a5cce0d2982c" derived="false">
-              <start-role id="umlar-8baff623-5297-4e3c-aa5b-7a4c8c03d65d" name="" navigability="" association-type="association" visibility="private" />
-              <end-role id="umlar-16382f6f-1b81-4337-9326-53a8d971c618" name="" navigability="" association-type="composition" visibility="private" />
+              <start-role id="umlar-17f89034-a605-43fa-adfa-d7547b32d4c0" name="" navigability="" association-type="association" visibility="private" />
+              <end-role id="umlar-8e1cc8d6-9b3d-4e2c-b7e0-250ab55f5e2b" name="" navigability="" association-type="composition" visibility="private" />
             </relation>
           </item>
         </abstract-items>
@@ -1302,5 +1391,308 @@
         </layer>
       </diagram>
     </model>
+    <model id="pcb9044279dee459f9eaa1fb8d4fe6bf3_148351808" name="Database" namespace="" order-index="2" default-type-set="MSSQL" expanded="true">
+      <meta>
+        <authors>
+          <author>Dalibor Votruba</author>
+        </authors>
+        <description />
+        <creation-date>11/04/2022 05:56:57</creation-date>
+        <change-date>01/01/0001 00:00:00</change-date>
+        <revision-count>0</revision-count>
+        <version />
+      </meta>
+      <abstract-items />
+      <sub-models>
+        <model id="ped66179a97834e0ca74f024bc91be326_173380611" name="Base" namespace="" order-index="2" expanded="true">
+          <meta>
+            <authors>
+              <author>Dalibor Votruba</author>
+            </authors>
+            <description />
+            <creation-date>11/04/2022 08:34:43</creation-date>
+            <change-date>01/01/0001 00:00:00</change-date>
+            <revision-count>0</revision-count>
+            <version />
+          </meta>
+          <abstract-items />
+          <sub-models />
+          <diagram type="entity-relationship" id="p2d80210b075e4f5d8725460fac0df0c9_518455272" name="Base" order-index="0" uid="" name-style="" auto-routed-paths="false" default-line-style="default" view-location="0,-2">
+            <style>
+              <background-color index="1" color="#FFFFFFFF" />
+              <background-color index="2" color="#FFFFFFFF" />
+              <background-type type="solid" />
+            </style>
+            <meta>
+              <authors>
+                <author>Dalibor Votruba</author>
+              </authors>
+              <description />
+              <creation-date>11/04/2022 05:59:30</creation-date>
+              <change-date>11/04/2022 06:48:42</change-date>
+              <revision-count>0</revision-count>
+              <version />
+            </meta>
+            <abstract-items>
+              <item id="1995ba399cb24729b4df7bbbc0c77b31" cid="TBL_SETTING" type="erd-entity" name="Setting" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/04/2022 06:37:09">
+                <stereotypes>
+                  <stereotype name="table" />
+                </stereotypes>
+                <stereotype-instances>
+                  <stereotype id="1995ba399cb24729b4df7bbbc0c77b31_table_c" type="table" ref="" />
+                </stereotype-instances>
+                <entity pk-constraint-name="PK_SETTING_ID" description="" />
+                <attributes>
+                  <attribute uid="a43f81acbacea4b5eb1ab53c404241e92410" cid="SETTING_ID" name="Id" type="bigint" type-id="MsSql.bigint" type-size="" foreign-key="false" primary-key="true" nullable="false" description="Setting primary key" default-value="" auto-increment="true" creation-date="11/04/2022 08:29:04" />
+                  <attribute uid="a08479372eb77415d9e7fc24b12fd0d42593" cid="SETTING_PARENT_ID" name="ParentId" type="bigint" type-id="MsSql.bigint" type-size="" foreign-key="true" primary-key="false" nullable="true" description="Reference to parent setting" default-value="" auto-increment="false" creation-date="11/04/2022 08:29:45" />
+                  <attribute uid="ac6d5df86cafd42679955a33396a23de5550" cid="SETTING_TENANT_ID" name="TenantId" type="bigint" type-id="MsSql.bigint" type-size="" foreign-key="true" primary-key="false" nullable="false" description="Reference to tenant that setting belongs" default-value="" auto-increment="false" creation-date="11/04/2022 08:29:55" />
+                  <attribute uid="a86d9f9ac361249ab9905468baf25092a181" cid="SETTING_MODULE_CODE" name="ModuleCode" type="nvarchar" type-id="MsSql.nvarchar" type-size="10" foreign-key="false" primary-key="false" nullable="false" description="Module code that setting belongs. Secondary key" default-value="" auto-increment="false" creation-date="11/04/2022 08:30:06" />
+                  <attribute uid="afefa364546f4472f95e4c5942672c099497" cid="SETTING_SEQUENCE_NO" name="SequenceNo" type="int" type-id="MsSql.int" type-size="" foreign-key="false" primary-key="false" nullable="false" description="Order number" default-value="0" auto-increment="false" creation-date="11/04/2022 08:30:16" />
+                  <attribute uid="ae3252c151d6c4eac949dda3b840d19d1410" cid="SETTING_CODE" name="Code" type="nvarchar" type-id="MsSql.nvarchar" type-size="100" foreign-key="false" primary-key="false" nullable="false" description="Setting code. Main key to search." default-value="" auto-increment="false" creation-date="11/04/2022 08:30:23" />
+                  <attribute uid="aee21d6a30c8149ea8b163002e76c4c9a136" cid="SETTING_DESCRIPTION" name="Description" type="nvarchar" type-id="MsSql.nvarchar" type-size="500" foreign-key="false" primary-key="false" nullable="true" description="Setting value description" default-value="" auto-increment="false" creation-date="11/04/2022 08:30:44" />
+                  <attribute uid="a656f4fce42cc4990899868940c2c8a76803" cid="SETTING_VALUE_TYPE" name="ValueTypeQualified" type="nvarchar" type-id="MsSql.nvarchar" type-size="500" foreign-key="false" primary-key="false" nullable="false" description="Qualified name of value type" default-value="" auto-increment="false" creation-date="11/04/2022 08:30:55" />
+                  <attribute uid="a4c27edb789294dbaa5c381ca3f13c54e445" cid="SETTING_VALUE" name="Value" type="nvarchar" type-id="MsSql.nvarchar" type-size="MAX" foreign-key="false" primary-key="false" nullable="true" description="Setting value" default-value="" auto-increment="false" creation-date="11/04/2022 08:41:41" />
+                  <attribute uid="a5a2bcd803ad3407ab6b1db0a815764e4139" cid="SETTING_ENABLED" name="IsEnabled" type="bit" type-id="MsSql.bit" type-size="" foreign-key="false" primary-key="false" nullable="false" description="Flag if setting is enabled" default-value="0" auto-increment="false" creation-date="11/04/2022 08:31:13" />
+                  <attribute uid="ab9bc8ce5599c493795a2dd1394c7d9f9410" cid="SETTING_CREATED" name="Created" type="datetime" type-id="MsSql.datetime" type-size="" foreign-key="false" primary-key="false" nullable="false" description="Record created timestamp" default-value="getdate()" auto-increment="false" creation-date="11/04/2022 08:31:22" />
+                  <attribute uid="a7223fbe8ebb342958c4e513f66a7b6ed410" cid="SETTING_MODIFIED" name="Modified" type="datetime" type-id="MsSql.datetime" type-size="" foreign-key="false" primary-key="false" nullable="true" description="Record modified timestamp" default-value="" auto-increment="false" creation-date="11/04/2022 08:31:31" />
+                  <attribute uid="a45d742fcee4e48199b79cf0888f22a34410" cid="SETTING_MODIFIER" name="Modifier" type="nvarchar" type-id="MsSql.nvarchar" type-size="100" foreign-key="false" primary-key="false" nullable="true" description="Record modifier signature" default-value="" auto-increment="false" creation-date="11/04/2022 08:31:40" />
+                </attributes>
+                <indexes>
+                  <index uid="ix47d475815cf546db98d5f77def2062a053" cid="ERI003" name="IDX_SETTING_TENANT_MCODE_CODE" is-unique="true">
+                    <index-attributes>
+                      <index-attribute ref="ac6d5df86cafd42679955a33396a23de5550" sort="Asc" />
+                      <index-attribute ref="a86d9f9ac361249ab9905468baf25092a181" sort="Asc" />
+                      <index-attribute ref="ae3252c151d6c4eac949dda3b840d19d1410" sort="Asc" />
+                    </index-attributes>
+                  </index>
+                </indexes>
+              </item>
+              <item id="031a668b1d6a45e1907a612d85b43d24" cid="TBL_USER" type="erd-entity" name="User" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/04/2022 06:15:45">
+                <stereotypes>
+                  <stereotype name="table" />
+                </stereotypes>
+                <stereotype-instances>
+                  <stereotype id="031a668b1d6a45e1907a612d85b43d24_table_c" type="table" ref="" />
+                </stereotype-instances>
+                <entity pk-constraint-name="PK_USER_ID" description="" />
+                <attributes>
+                  <attribute uid="a6dda4862ea794595834ccbbeacdb68a8699" cid="USER_ID" name="Id" type="bigint" type-id="MsSql.bigint" type-size="" foreign-key="false" primary-key="true" nullable="false" description="User primary key" default-value="" auto-increment="true" creation-date="11/04/2022 06:20:45" />
+                  <attribute uid="a7561c31027e444b7b5d5c9bc65164f69709" cid="USER_LOGINNAME" name="LoginName" type="nvarchar" type-id="MsSql.nvarchar" type-size="200" foreign-key="false" primary-key="false" nullable="false" description="User login name name. Key search value" default-value="" auto-increment="false" creation-date="11/04/2022 06:20:59" />
+                  <attribute uid="ae5fba9294f7446efa852c3a3acb23d81709" cid="USER_ISLOCKED" name="IsLocked" type="bit" type-id="MsSql.bit" type-size="" foreign-key="false" primary-key="false" nullable="false" description="Flag if user access locked (not accessable)" default-value="0" auto-increment="false" creation-date="11/04/2022 06:21:10" />
+                  <attribute uid="adb8d22041c0b471180808deb4edf6067709" cid="USER_CREATED" name="Created" type="datetime" type-id="MsSql.datetime" type-size="" foreign-key="false" primary-key="false" nullable="false" description="Record created timestamp" default-value="getdate()" auto-increment="false" creation-date="11/04/2022 06:21:21" />
+                  <attribute uid="a2997dfb25d574d0dae75321885c29407709" cid="USER_MODIFIED" name="Modified" type="datetime" type-id="MsSql.datetime" type-size="" foreign-key="false" primary-key="false" nullable="true" description="Record modified timestamp" default-value="" auto-increment="false" creation-date="11/04/2022 06:21:33" />
+                  <attribute uid="acc5094228b2748e2b2511ffe10fd5a01185" cid="USER_MODIFIER" name="Modifier" type="nvarchar" type-id="MsSql.nvarchar" type-size="100" foreign-key="false" primary-key="false" nullable="true" description="Record modifier signature" default-value="" auto-increment="false" creation-date="11/04/2022 06:21:43" />
+                </attributes>
+                <indexes>
+                  <index uid="ix930d9e826b994061b0f09816b8444d28973" cid="ERI004" name="IDX_USER_LOGINNAME" is-unique="true">
+                    <index-attributes>
+                      <index-attribute ref="a7561c31027e444b7b5d5c9bc65164f69709" sort="Asc" />
+                    </index-attributes>
+                  </index>
+                </indexes>
+              </item>
+              <item id="eed22cb50bf14a369a44386ecff2eddf" cid="REL_SETTING_SETTING_ID" type="erd-relationship" name="REL_SETTING_SETTING_ID" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/04/2022 06:46:59" from="1995ba399cb24729b4df7bbbc0c77b31" to="1995ba399cb24729b4df7bbbc0c77b31">
+                <stereotypes>
+                  <stereotype name="relation" />
+                </stereotypes>
+                <stereotype-instances>
+                  <stereotype id="eed22cb50bf14a369a44386ecff2eddf_relation_c" type="relation" ref="" />
+                </stereotype-instances>
+                <erd-relation type="Identifying" multiplicity-from="1" multiplicity-to="0..1">
+                  <attribute-pairs>
+                    <attribute-pair from-attribute="a08479372eb77415d9e7fc24b12fd0d42593" to-attribute="a43f81acbacea4b5eb1ab53c404241e92410" />
+                  </attribute-pairs>
+                </erd-relation>
+              </item>
+              <item id="38364cd5ebf7433c827087a1d94c73ca" cid="REL_TENANTUSER_USER_ID" type="erd-relationship" name="REL_TENANTUSER_USER_ID" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/04/2022 06:28:44" from="f7ba98ff46b54ebd99e6e9d48d4aeee9" to="031a668b1d6a45e1907a612d85b43d24">
+                <stereotypes>
+                  <stereotype name="relation" />
+                </stereotypes>
+                <stereotype-instances>
+                  <stereotype id="38364cd5ebf7433c827087a1d94c73ca_relation_c" type="relation" ref="" />
+                </stereotype-instances>
+                <erd-relation type="Identifying" multiplicity-from="1" multiplicity-to="0..1">
+                  <attribute-pairs>
+                    <attribute-pair from-attribute="a6e7eae435a0345fea29288220aa8aa1d623" to-attribute="a6dda4862ea794595834ccbbeacdb68a8699" />
+                  </attribute-pairs>
+                </erd-relation>
+              </item>
+              <item id="7b432831355f42cfa41af8f2eaa783a3" cid="REL_SETTING_TENANT_ID" type="erd-relationship" name="REL_SETTING_TENANT_ID" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/04/2022 06:48:42" from="1995ba399cb24729b4df7bbbc0c77b31" to="e50f79968a404d3fbb33f4a02fa3b572">
+                <stereotypes>
+                  <stereotype name="relation" />
+                </stereotypes>
+                <stereotype-instances>
+                  <stereotype id="7b432831355f42cfa41af8f2eaa783a3_relation_c" type="relation" ref="" />
+                </stereotype-instances>
+                <erd-relation type="Identifying" multiplicity-from="1" multiplicity-to="0..1">
+                  <attribute-pairs>
+                    <attribute-pair from-attribute="ac6d5df86cafd42679955a33396a23de5550" to-attribute="aeda82a68426646d3a6cfa276db9bd56f255" />
+                  </attribute-pairs>
+                </erd-relation>
+              </item>
+              <item id="06c92dd941704baf86d79ecead01e134" cid="REL_TENANTUSER_TENANT_ID" type="erd-relationship" name="REL_TENANTUSER_TENANT_ID" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/04/2022 06:26:57" from="f7ba98ff46b54ebd99e6e9d48d4aeee9" to="e50f79968a404d3fbb33f4a02fa3b572">
+                <stereotypes>
+                  <stereotype name="relation" />
+                </stereotypes>
+                <stereotype-instances>
+                  <stereotype id="06c92dd941704baf86d79ecead01e134_relation_c" type="relation" ref="" />
+                </stereotype-instances>
+                <erd-relation type="Identifying" multiplicity-from="1" multiplicity-to="0..1">
+                  <attribute-pairs>
+                    <attribute-pair from-attribute="ab59b0b6bdd31441c89af642f0131a84b208" to-attribute="aeda82a68426646d3a6cfa276db9bd56f255" />
+                  </attribute-pairs>
+                </erd-relation>
+              </item>
+              <item id="e50f79968a404d3fbb33f4a02fa3b572" cid="TBL_TENANT" type="erd-entity" name="Tenant" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/04/2022 06:00:06">
+                <stereotypes>
+                  <stereotype name="table" />
+                </stereotypes>
+                <stereotype-instances>
+                  <stereotype id="e50f79968a404d3fbb33f4a02fa3b572_table_c" type="table" ref="" />
+                </stereotype-instances>
+                <entity pk-constraint-name="PK_TENANT_ID" description="" />
+                <attributes>
+                  <attribute uid="aeda82a68426646d3a6cfa276db9bd56f255" cid="TENANT_ID" name="Id" type="bigint" type-id="MsSql.bigint" type-size="" foreign-key="false" primary-key="true" nullable="false" description="Tenant primary key" default-value="" auto-increment="true" creation-date="11/04/2022 06:04:02" />
+                  <attribute uid="a4544d94868494f8aa9d8664a80f65fb9638" cid="TENANT_CODE" name="Code" type="nvarchar" type-id="MsSql.nvarchar" type-size="20" foreign-key="false" primary-key="false" nullable="false" description="Tenant code. Main key to search." default-value="" auto-increment="false" creation-date="11/04/2022 06:07:07" />
+                  <attribute uid="a3634601cc1d747818c62771d239112bb670" cid="TENANT_NAME" name="Name" type="nvarchar" type-id="MsSql.nvarchar" type-size="200" foreign-key="false" primary-key="false" nullable="false" description="Tenant name. Informational value." default-value="" auto-increment="false" creation-date="11/04/2022 06:14:35" />
+                  <attribute uid="a6bb282d0704340c7b6af22c1cc2d0f30125" cid="TENANT_LASTACCESS" name="LastAccess" type="datetime" type-id="MsSql.datetime" type-size="" foreign-key="false" primary-key="false" nullable="true" description="Last access (usage) timestamp." default-value="" auto-increment="false" creation-date="11/04/2022 06:14:46" />
+                  <attribute uid="ab23ea74d521d4e6cbf18464261ad9882510" cid="TENANT_ISLOCKED" name="IsLocked" type="bit" type-id="MsSql.bit" type-size="" foreign-key="false" primary-key="false" nullable="false" description="Flag if tenant locked (not accessable)" default-value="0" auto-increment="false" creation-date="11/04/2022 06:14:56" />
+                  <attribute uid="abb733eee12d74c8a8b695f0c6219970821" cid="TENANT_CREATED" name="Created" type="datetime" type-id="MsSql.datetime" type-size="" foreign-key="false" primary-key="false" nullable="false" description="Record created timestamp" default-value="getdate()" auto-increment="false" creation-date="11/04/2022 06:15:07" />
+                  <attribute uid="a6b6b29e020614f0596738612f8899579636" cid="TENANT_MODIFIED" name="Modified" type="datetime" type-id="MsSql.datetime" type-size="" foreign-key="false" primary-key="false" nullable="true" description="Record modified timestamp" default-value="" auto-increment="false" creation-date="11/04/2022 06:15:17" />
+                  <attribute uid="a608d5119036242479e2559b4d9a8f1ef196" cid="TENANT_MODIFIER" name="Modifier" type="nvarchar" type-id="MsSql.nvarchar" type-size="100" foreign-key="false" primary-key="false" nullable="true" description="Record modifier signature" default-value="" auto-increment="false" creation-date="11/04/2022 06:15:26" />
+                </attributes>
+                <indexes>
+                  <index uid="ix56f43349a41048239189cd74c2596595691" cid="ERI001" name="IDX_TENANT_CODE" is-unique="true">
+                    <index-attributes>
+                      <index-attribute ref="a4544d94868494f8aa9d8664a80f65fb9638" sort="Asc" />
+                    </index-attributes>
+                  </index>
+                </indexes>
+              </item>
+              <item id="f7ba98ff46b54ebd99e6e9d48d4aeee9" cid="TBL_TENANTUSER" type="erd-entity" name="TenantUser" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/04/2022 06:22:55">
+                <stereotypes>
+                  <stereotype name="table" />
+                </stereotypes>
+                <documentations>
+                  <doc id="ef01e97791a84882b22a27717ea80d87">
+                    <text>
+                      <default>
+                        <style font-name="Verdana" font-size="12">
+                          <text>
+                            <solid-brush color="#FFE6E6E6" />
+                          </text>
+                        </style>
+                      </default>
+                      <styles />
+                      <definition>
+                        <sections>
+                          <section name="">
+                            <default-page>
+                              <page size="224,316.8" header-offset="15" footer-offset="15" unit="mm">
+                                <margins left="20" right="20" top="20" bottom="20" />
+                              </page>
+                            </default-page>
+                          </section>
+                        </sections>
+                      </definition>
+                      <content>
+                        <paragraph>
+                          <style numbering-type="None">
+                            <numbering name="" multi-level="false">
+                              <numbering-level type="None" level="0" format="{0}." />
+                            </numbering>
+                          </style>
+                          <p>
+                            <t>Defines </t>
+                          </p>
+                          <p>
+                            <t>User </t>
+                          </p>
+                          <p>
+                            <t>- </t>
+                          </p>
+                          <p>
+                            <t>Tenant </t>
+                          </p>
+                          <p>
+                            <t>assignments
+</t>
+                          </p>
+                        </paragraph>
+                      </content>
+                    </text>
+                  </doc>
+                </documentations>
+                <stereotype-instances>
+                  <stereotype id="f7ba98ff46b54ebd99e6e9d48d4aeee9_table_c" type="table" ref="" />
+                </stereotype-instances>
+                <entity description="" />
+                <attributes>
+                  <attribute uid="ab59b0b6bdd31441c89af642f0131a84b208" cid="EA015" name="TenantId" type="bigint" type-id="MsSql.bigint" type-size="" foreign-key="true" primary-key="false" nullable="true" description="Reference to tenant" default-value="" auto-increment="false" creation-date="11/04/2022 06:24:04" />
+                  <attribute uid="a6e7eae435a0345fea29288220aa8aa1d623" cid="EA016" name="UserId" type="bigint" type-id="MsSql.bigint" type-size="" foreign-key="true" primary-key="false" nullable="true" description="Reference to user" default-value="" auto-increment="false" creation-date="11/04/2022 06:25:02" />
+                </attributes>
+                <indexes />
+              </item>
+            </abstract-items>
+            <layer id="b333b4971a734e6baa084175a3160d2b" name="Default" visible="true" enabled="true" locked="false">
+              <item id="e50f79968a404d3fbb33f4a02fa3b572" iid="650877ac46234db3b6eaebe1730487f3" creation-date="11/04/2022 06:00:07" order-index="1" type="entity">
+                <layout ax="46" ay="196" awidth="303" aheight="249" x="46" y="196" width="289" height="249" rotation-center="-74.5,-15" />
+                <erd-entity show-nullability="true" />
+              </item>
+              <item id="031a668b1d6a45e1907a612d85b43d24" iid="a609608a496e484594e771e9df2378b1" creation-date="11/04/2022 06:15:45" order-index="2" type="entity">
+                <layout ax="715" ay="234" awidth="359" aheight="211" x="715" y="234" width="359" height="211" rotation-center="109.5,25.5" />
+                <erd-entity show-nullability="true" />
+              </item>
+              <item id="f7ba98ff46b54ebd99e6e9d48d4aeee9" iid="2dcf80fa31b04f5d9d8fb156c7bafd9d" creation-date="11/04/2022 06:22:55" order-index="3" type="entity">
+                <layout ax="417" ay="22" awidth="244" aheight="106" x="417" y="22" width="244" height="106" rotation-center="-52,27" />
+                <erd-entity show-nullability="true" />
+              </item>
+              <item id="06c92dd941704baf86d79ecead01e134" iid="f3fbd42c29244163bdf1c415cf9d3bd6" creation-date="11/04/2022 06:26:57" order-index="4" type="relation">
+                <layout start-role-position="25,15" end-role-position="25,-15" line-style="oblique" lock-start-point="true" lock-end-point="true" lock-to-fields="true" auto-path="" x1="417" y1="80" x2="349" y2="254" start-border-pos="0.862028301886792" end-border-pos="0.308734939759036" start-local-pos="58" end-local-pos="58" name-position="0,20">
+                  <points>
+                    <point x="417" y="80" />
+                    <point x="349" y="254" />
+                  </points>
+                </layout>
+                <relation from="f7ba98ff46b54ebd99e6e9d48d4aeee9" from-iid="2dcf80fa31b04f5d9d8fb156c7bafd9d" from-field="ab59b0b6bdd31441c89af642f0131a84b208" to="e50f79968a404d3fbb33f4a02fa3b572" to-iid="650877ac46234db3b6eaebe1730487f3" to-field="aeda82a68426646d3a6cfa276db9bd56f255" />
+              </item>
+              <item id="38364cd5ebf7433c827087a1d94c73ca" iid="1fa21a2a11ad4254bea8013c1ab0a8ab" creation-date="11/04/2022 06:28:44" order-index="5" type="relation">
+                <layout start-role-position="25,15" end-role-position="25,-15" line-style="oblique" lock-to-fields="true" auto-path="" x1="661" y1="100" x2="715" y2="292" start-border-pos="0.432783018867925" end-border-pos="0.930687203791469" start-local-pos="78" end-local-pos="58" name-position="0,20">
+                  <points>
+                    <point x="661" y="100" />
+                    <point x="715" y="292" />
+                  </points>
+                </layout>
+                <relation from="f7ba98ff46b54ebd99e6e9d48d4aeee9" from-iid="2dcf80fa31b04f5d9d8fb156c7bafd9d" from-field="a6e7eae435a0345fea29288220aa8aa1d623" to="031a668b1d6a45e1907a612d85b43d24" to-iid="a609608a496e484594e771e9df2378b1" to-field="a6dda4862ea794595834ccbbeacdb68a8699" />
+              </item>
+              <item id="1995ba399cb24729b4df7bbbc0c77b31" iid="e5447239d5c14feda620a1961c696222" creation-date="11/04/2022 06:37:09" order-index="6" type="entity">
+                <layout ax="485" ay="462" awidth="295" aheight="357" x="485" y="462" width="288" height="354" rotation-center="-74,97" />
+                <erd-entity show-nullability="true" />
+              </item>
+              <item id="eed22cb50bf14a369a44386ecff2eddf" iid="4e5e6f2ee730402aba46c57baef5c4dc" creation-date="11/04/2022 06:46:59" order-index="7" type="relation">
+                <layout start-role-position="25,19" end-role-position="25,-15" line-style="oblique" lock-start-point="true" lock-end-point="true" lock-to-fields="true" auto-path="" x1="485" y1="540" x2="485" y2="520" start-border-pos="0.945728291316527" end-border-pos="0.959033613445378" start-local-pos="78" end-local-pos="58" name-position="0,20">
+                  <points>
+                    <point x="485" y="540" />
+                    <point x="138" y="539" />
+                    <point x="138" y="521" />
+                    <point x="485" y="520" />
+                  </points>
+                </layout>
+                <relation from="1995ba399cb24729b4df7bbbc0c77b31" from-iid="e5447239d5c14feda620a1961c696222" from-field="a08479372eb77415d9e7fc24b12fd0d42593" to="1995ba399cb24729b4df7bbbc0c77b31" to-iid="e5447239d5c14feda620a1961c696222" to-field="a43f81acbacea4b5eb1ab53c404241e92410" />
+              </item>
+              <item id="7b432831355f42cfa41af8f2eaa783a3" iid="381c2c03d0f6492eb465f91a44a7cc72" creation-date="11/04/2022 06:48:42" order-index="8" type="relation">
+                <layout start-role-position="25,15" end-role-position="25,-15" line-style="oblique" lock-start-point="true" lock-to-fields="true" auto-path="" x1="485" y1="558" x2="349" y2="254" start-border-pos="0.932422969187675" end-border-pos="0.308734939759036" start-local-pos="96" end-local-pos="58" name-position="0,20">
+                  <points>
+                    <point x="485" y="558" />
+                    <point x="349" y="254" />
+                  </points>
+                </layout>
+                <relation from="1995ba399cb24729b4df7bbbc0c77b31" from-iid="e5447239d5c14feda620a1961c696222" from-field="ac6d5df86cafd42679955a33396a23de5550" to="e50f79968a404d3fbb33f4a02fa3b572" to-iid="650877ac46234db3b6eaebe1730487f3" to-field="aeda82a68426646d3a6cfa276db9bd56f255" />
+              </item>
+            </layer>
+          </diagram>
+        </model>
+      </sub-models>
+    </model>
   </models>
 </sim-project>

+ 20 - 0
Common/qdr.app.qlbrc.common/Entities/Base/DaoMapper/IdDm.cs

@@ -0,0 +1,20 @@
+using Microsoft.EntityFrameworkCore;
+using Quadarax.Foundation.Core.Data.Entity;
+
+namespace Quadarax.Application.QLiberace.Common.Entities.Base.DaoMapper
+{
+    public class IdDm<TEntity> : AbstractDaoMapper where TEntity : QlbrcEntity
+    {
+       public override void Map(ModelBuilder builder)
+        {
+            if (builder == null) throw new ArgumentNullException(nameof(builder));
+
+            builder.Entity<TEntity>(entity =>
+                {
+                    entity.HasKey(x => x.Id).IsClustered();
+                }
+            );
+
+        }
+    }
+}

+ 34 - 0
Common/qdr.app.qlbrc.common/Entities/Base/DaoMapper/TrackedDm.cs

@@ -0,0 +1,34 @@
+using Microsoft.EntityFrameworkCore;
+
+namespace Quadarax.Application.QLiberace.Common.Entities.Base.DaoMapper
+{
+    public class TrackedDm<TEntity>: IdDm<TEntity> where TEntity : QlbrcEntityTracked
+    {
+        public override void Map(ModelBuilder builder)
+        {
+
+            if (builder == null) throw new ArgumentNullException(nameof(builder));
+
+            base.Map(builder);
+            builder.Entity<TEntity>(entity =>
+                {
+                    entity.Property(e => e.Created).IsRequired()
+                        .HasColumnType("datetime")
+                        .HasDefaultValueSql("(getdate())")
+                        .HasComment("Record created timestamp");     
+                    
+
+                    entity.Property(e => e.Modified)
+                        .HasColumnType("datetime")
+                        .HasComment("Record modified timestamp");
+
+
+                    entity.Property(e => e.Modifier)
+                        .HasMaxLength(100)
+                        .HasComment("Record modifier signature");
+
+                }
+            );
+        }
+    }
+}

+ 4 - 8
Common/qdr.app.qlbrc.common/Entities/Base/QlbrcEntity.cs

@@ -1,13 +1,9 @@
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Quadarax.Foundation.Core.Data.Entity;
+using Quadarax.Foundation.Core.Data.Entity;
 
 
 namespace Quadarax.Application.QLiberace.Common.Entities.Base;
 
-public abstract  class QlbrcEntity : Entity<long>, IIdentifier
+public abstract class QlbrcEntity: Entity<long>
 {
-    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
-    [Key]
-    public override long Id { get; set; }
-}
+    
+}

+ 8 - 0
Common/qdr.app.qlbrc.common/Entities/Base/QlbrcEntityKeyless.cs

@@ -0,0 +1,8 @@
+using Quadarax.Foundation.Core.Data.Entity;
+
+namespace Quadarax.Application.QLiberace.Common.Entities.Base
+{
+    public class QlbrcEntityKeyless : EntityKeyless
+    {
+    }
+}

+ 1 - 0
Common/qdr.app.qlbrc.common/Entities/Base/QlbrcEntityTenant.cs

@@ -1,6 +1,7 @@
 using System.ComponentModel.DataAnnotations.Schema;
 using Quadarax.Application.QLiberace.Base.Entities.Base;
 
+
 namespace Quadarax.Application.QLiberace.Common.Entities.Base
 {
     public abstract class QlbrcEntityTenant : QlbrcEntityTracked, ITenant

+ 3 - 6
Common/qdr.app.qlbrc.common/Entities/Base/QlbrcEntityTracked.cs

@@ -1,6 +1,5 @@
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using System.Runtime.CompilerServices;
+using System.Runtime.CompilerServices;
+using Quadarax.Foundation.Core.Data.Entity;
 
 #if DEBUG
 [assembly: InternalsVisibleTo("qdr.app.qlbrc.base.Tests")]
@@ -11,12 +10,10 @@ namespace Quadarax.Application.QLiberace.Common.Entities.Base
 {
     public abstract class QlbrcEntityTracked : QlbrcEntity, ITracked
     {
-        [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
-        [Required]
         public DateTime Created { get; internal set; }
         public DateTime? Modified { get; internal set;}
-        [MaxLength(100)]
         public string? Modifier { get; internal set;}
 
+
     }
 }

+ 1 - 0
Common/qdr.app.qlbrc.common/Repositories/QlbrcRepository.cs

@@ -1,6 +1,7 @@
 using Quadarax.Application.QLiberace.Common.Domain;
 using Quadarax.Application.QLiberace.Common.Entities.Base;
 using Quadarax.Foundation.Core.Data.Domain;
+using Quadarax.Foundation.Core.Data.Entity;
 using Quadarax.Foundation.Core.Data.Interface.Domain;
 using Quadarax.Foundation.Core.Data.Repository;
 

+ 8 - 0
Common/qdr.app.qlbrc.common/qdr.app.qlbrc.common.csproj

@@ -16,4 +16,12 @@
     <Folder Include="Mapper\" />
   </ItemGroup>
 
+  <ItemGroup>
+    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.10">
+      <PrivateAssets>all</PrivateAssets>
+      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+    </PackageReference>
+    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.10" />
+  </ItemGroup>
+
 </Project>

+ 1 - 1
Common/qdr.fnd.core.business/qdr.fnd.core.business.csproj

@@ -15,7 +15,7 @@
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="NLog" Version="5.0.4" />
+    <PackageReference Include="NLog" Version="5.0.5" />
   </ItemGroup>
 
 </Project>

+ 5 - 1
Common/qdr.fnd.core.data.itfc/Entity/IDao.cs

@@ -2,8 +2,12 @@
 
 namespace Quadarax.Foundation.Core.Data.Interface.Entity
 {
-    public interface IDao<TKey> where TKey : IEquatable<TKey>
+    public interface IDao<TKey> : IDao where TKey : IEquatable<TKey>
     {
         public TKey Id { get; set; }
     }
+
+    public interface IDao
+    {
+    }
 }

+ 12 - 0
Common/qdr.fnd.core.data/Entity/AbstractDaoMapper.cs

@@ -0,0 +1,12 @@
+using Microsoft.EntityFrameworkCore;
+
+namespace Quadarax.Foundation.Core.Data.Entity
+{
+    public abstract class AbstractDaoMapper
+    {
+        public AbstractDaoMapper()
+        {
+        }
+        public abstract void Map(ModelBuilder builder);
+    }
+}

+ 24 - 2
Common/qdr.fnd.core.data/Entity/Entity.cs

@@ -1,5 +1,4 @@
 using System;
-using System.ComponentModel.DataAnnotations;
 using System.Text;
 using Quadarax.Foundation.Core.Data.Interface.Entity;
 
@@ -8,7 +7,6 @@ namespace Quadarax.Foundation.Core.Data.Entity
     public abstract class Entity<TKey> : IDao<TKey> where TKey : IEquatable<TKey>
     {
         #region *** Properties ***
-        [Key]
         public virtual TKey Id { get; set; }
 
         #endregion
@@ -22,6 +20,30 @@ namespace Quadarax.Foundation.Core.Data.Entity
             return sb.ToString();
         }
 
+        #endregion
+
+    }
+
+
+    public abstract class EntityKeyless : IDao
+    {
+        #region *** Properties ***
+        
+        #endregion
+
+        protected EntityKeyless()
+        {
+        }
+
+        #region *** Public Overrides ***
+        public override string ToString()
+        {
+            var sb = new StringBuilder();
+            sb.Append("Entity=").Append(GetType().Name);
+            return sb.ToString();
+        }
+
+        
         #endregion
     }
 

+ 0 - 5
Common/qdr.fnd.core.data/Entity/GuidEntity.cs

@@ -1,14 +1,9 @@
 using System;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
 
 namespace Quadarax.Foundation.Core.Data.Entity
 {
     public abstract class GuidEntity : Entity<Guid>
     {
-        [Key]
-        [Column("Id")]
-        [Required]
         public override Guid Id { get; set; }
     }
 }

+ 2 - 2
Common/qdr.fnd.core.data/qdr.fnd.core.data.csproj

@@ -10,8 +10,8 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.9" />
-    <PackageReference Include="System.Data.SqlClient" Version="4.8.3" />
+    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.10" />
+    <PackageReference Include="System.Data.SqlClient" Version="4.8.4" />
   </ItemGroup>
 
   <ItemGroup>

+ 2 - 2
Common/qdr.fnd.core.nlog/qdr.fnd.core.nlog.csproj

@@ -10,8 +10,8 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="NLog" Version="5.0.4" />
-    <PackageReference Include="NLog.Extensions.Logging" Version="5.0.4" />
+    <PackageReference Include="NLog" Version="5.0.5" />
+    <PackageReference Include="NLog.Extensions.Logging" Version="5.1.0" />
   </ItemGroup>
 
   <ItemGroup>

+ 10 - 4
Common/qdr.fnd.core.test/qdr.fnd.core.test.csproj

@@ -10,11 +10,17 @@
 
   <ItemGroup>
     <PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="6.0.10" />
-    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
+    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.2" />
     <PackageReference Include="NUnit" Version="3.13.3" />
-    <PackageReference Include="NUnit3TestAdapter" Version="4.2.1" />
-    <PackageReference Include="NUnit.Analyzers" Version="3.3.0" />
-    <PackageReference Include="coverlet.collector" Version="3.1.2" />
+    <PackageReference Include="NUnit3TestAdapter" Version="4.3.0" />
+    <PackageReference Include="NUnit.Analyzers" Version="3.5.0">
+      <PrivateAssets>all</PrivateAssets>
+      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+    </PackageReference>
+    <PackageReference Include="coverlet.collector" Version="3.2.0">
+      <PrivateAssets>all</PrivateAssets>
+      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+    </PackageReference>
   </ItemGroup>
 
   <ItemGroup>

+ 1 - 1
Common/qdr.fnd.core.web/qdr.fnd.core.web.csproj

@@ -11,7 +11,7 @@
 
   <ItemGroup>
     <PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.2.5" />
-    <PackageReference Include="NLog" Version="5.0.4" />
+    <PackageReference Include="NLog" Version="5.0.5" />
   </ItemGroup>
 
   <ItemGroup>

+ 1 - 1
Common/qdr.fnd.core/qdr.fnd.core.csproj

@@ -15,7 +15,7 @@
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="System.IO.Abstractions" Version="17.2.1" />
+    <PackageReference Include="System.IO.Abstractions" Version="17.2.3" />
   </ItemGroup>
 
 </Project>

+ 1 - 0
Modules/qdr.app.qlbrc.base/Constants.cs

@@ -17,6 +17,7 @@
                 public const string TblUser = "User";
                 public const string TblSetting = "Setting";
                 public const string TblTenant = "Tenant";
+                public const string TblTenantUser = "TenantUser";
 
             }
         }

+ 75 - 0
Modules/qdr.app.qlbrc.base/Entities/DaoMapper/SettingDm.cs

@@ -0,0 +1,75 @@
+using Microsoft.EntityFrameworkCore;
+using Quadarax.Application.QLiberace.Common.Entities.Base.DaoMapper;
+
+namespace Quadarax.Application.QLiberace.Base.Entities.DaoMapper
+{
+    internal class SettingDm : TrackedDm<Setting>
+    {
+        public override void Map(ModelBuilder builder)
+        {
+
+            if (builder == null) throw new ArgumentNullException(nameof(builder));
+
+            base.Map(builder);
+            builder.Entity<Setting>(entity =>
+                {
+                    
+                    entity.ToTable(Constants.Modules.Base.TblSetting, Constants.Modules.Base.Schema);
+
+                    // indexes
+                    entity.HasIndex(e => new { e.TenantId, e.ModuleCode, e.Code }, "IDX_SETTING_TENANT_MCODE_CODE")
+                    .IsUnique();
+
+                    // foreign keys
+                    entity.Property(e => e.TenantId).IsRequired().HasComment("Reference to tenant that setting belongs");
+                    entity.Property(e => e.ParentId).HasComment("Reference to parent setting");
+                
+                    // columns
+                    entity.Property(e => e.Code).IsRequired()
+                        .HasMaxLength(100)
+                        .HasComment("Setting code. Main key to search.");
+
+                    
+                    entity.Property(e => e.Description)
+                        .HasMaxLength(500)
+                        .HasComment("Setting value description");
+
+                    entity.Property(e => e.IsEnabled).IsRequired()
+                        .HasDefaultValueSql("0").HasComment("Flag if setting is enabled");
+
+                    
+                    entity.Property(e => e.ModuleCode).IsRequired()
+                        .HasMaxLength(10)
+                        .HasComment("Module code that setting belongs. Secondary key");
+
+                    
+                    entity.Property(e => e.SequenceNo).IsRequired()
+                        .HasDefaultValueSql("0")
+                        .HasComment("Order number");
+
+
+                    entity.Property(e => e.Value)
+                        .HasComment("Setting value");
+
+                    entity.Property(e => e.ValueTypeQualified).IsRequired()
+                        .HasMaxLength(500)
+                        .HasComment("Qualified name of value type");
+
+                    /*
+                entity.HasOne(d => d.Parent)
+                    .WithMany(p => p.InverseParent)
+                    .HasForeignKey(d => d.ParentId)
+                    .HasConstraintName("REL_SETTING_SETTING_ID");
+
+                entity.HasOne(d => d.Tenant)
+                    .WithMany(p => p.Settings)
+                    .HasForeignKey(d => d.TenantId)
+                    .OnDelete(DeleteBehavior.ClientSetNull)
+                    .HasConstraintName("REL_SETTING_TENANT_ID");
+                    */
+
+                }
+            );
+        }
+    }
+}

+ 43 - 0
Modules/qdr.app.qlbrc.base/Entities/DaoMapper/TenantDm.cs

@@ -0,0 +1,43 @@
+using Microsoft.EntityFrameworkCore;
+using Quadarax.Application.QLiberace.Common.Entities.Base.DaoMapper;
+
+namespace Quadarax.Application.QLiberace.Base.Entities.DaoMapper
+{
+    public class TenantDm : TrackedDm<Tenant>
+    {
+        public override void Map(ModelBuilder builder)
+        {
+
+            if (builder == null) throw new ArgumentNullException(nameof(builder));
+
+            base.Map(builder);
+            builder.Entity<Tenant>(entity =>
+                {
+                    entity.ToTable(Constants.Modules.Base.TblTenant, Constants.Modules.Base.Schema);
+
+                    // indexes
+                    entity.HasIndex(e => e.Code, "IDX_TENANT_CODE")
+                        .IsUnique();
+
+                    // columns
+                    entity.Property(e => e.Code).IsRequired()
+                        .HasMaxLength(20)
+                        .HasComment("Tenant code. Main key to search.");
+
+                    entity.Property(e => e.Name).IsRequired()
+                        .HasMaxLength(200)
+                        .HasComment("Tenant name. Informational value.");
+                    
+                    entity.Property(e => e.IsLocked).IsRequired()
+                        .HasDefaultValueSql("0")
+                        .HasComment("Flag if tenant locked (not accessible)");
+
+                    entity.Property(e => e.LastAccess)
+                        .HasColumnType("datetime")
+                        .HasComment("Last access (usage) timestamp.");
+
+                }
+            );
+        }
+    }
+}

+ 35 - 0
Modules/qdr.app.qlbrc.base/Entities/DaoMapper/UserDm.cs

@@ -0,0 +1,35 @@
+using Microsoft.EntityFrameworkCore;
+using Quadarax.Application.QLiberace.Common.Entities.Base.DaoMapper;
+
+namespace Quadarax.Application.QLiberace.Base.Entities.DaoMapper
+{
+    public class UserDm : TrackedDm<User>
+    {
+        public override void Map(ModelBuilder builder)
+        {
+
+            if (builder == null) throw new ArgumentNullException(nameof(builder));
+
+            base.Map(builder);
+            builder.Entity<User>(entity =>
+                {
+                    entity.ToTable(Constants.Modules.Base.TblUser, Constants.Modules.Base.Schema);
+
+                    // indexes
+                    entity.HasIndex(e => e.LoginName, "IDX_TENANT_CODE")
+                        .IsUnique();
+
+                    // columns
+                    entity.Property(e => e.IsLocked).IsRequired()
+                        .HasDefaultValueSql("0")
+                        .HasComment("Flag if user access locked (not accessible)");
+
+                    entity.Property(e => e.LoginName).IsRequired()
+                        .HasMaxLength(200)
+                        .HasComment("User login name name. Key search value");
+
+                }
+            );
+        }
+    }
+}

+ 12 - 2
Modules/qdr.app.qlbrc.base/Entities/Tenant.cs

@@ -1,7 +1,7 @@
-using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore;
 using Quadarax.Application.QLiberace.Base.Entities.Interfaces;
 using Quadarax.Application.QLiberace.Common.Entities.Base;
-using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
 
 namespace Quadarax.Application.QLiberace.Base.Entities
@@ -21,5 +21,15 @@ namespace Quadarax.Application.QLiberace.Base.Entities
         public DateTime? LastAccess { get; set; }
         [Required]
         public bool IsLocked { get; set; }
+
+        [NotMapped]
+        public virtual ICollection<TenantUser> Users { get; set; }
+
+
+        public Tenant()
+        {
+            Users = new List<TenantUser>();
+        }
+
     }
 }

+ 25 - 0
Modules/qdr.app.qlbrc.base/Entities/TenantUser.cs

@@ -0,0 +1,25 @@
+using System.ComponentModel.DataAnnotations.Schema;
+using Microsoft.EntityFrameworkCore;
+using Quadarax.Application.QLiberace.Common.Entities.Base;
+
+
+namespace Quadarax.Application.QLiberace.Base.Entities
+{
+    [Table(Constants.Modules.Base.TblTenantUser,Schema = Constants.Modules.Base.Schema)]
+    [Index("UserId", "TenantId", Name="IDX_USER_TENANT_ID", IsUnique = true )]
+    [Keyless]
+    public class TenantUser : QlbrcEntityKeyless
+    {
+        [Column(Order = 1)]
+        public long UserId { get; set; }
+
+        [Column(Order = 2)]
+        public long TenantId { get; set; }
+
+
+        [ForeignKey("UserId")]        
+        public User User { get; set; } = null!;
+        [ForeignKey("TenantId")]        
+        public Tenant Tenant { get; set; } = null!;
+    }
+}

+ 9 - 0
Modules/qdr.app.qlbrc.base/Entities/User.cs

@@ -18,5 +18,14 @@ namespace Quadarax.Application.QLiberace.Base.Entities
         [Required]
         [DefaultValue(false)]
         public bool IsLocked { get; set; }
+
+        [NotMapped]
+        public virtual ICollection<TenantUser> Tenants { get; set; }
+
+        public User()
+        {
+            Tenants = new List<TenantUser>();
+        }
+
     }
 }

+ 17 - 3
Modules/qdr.app.qlbrc.base/QlbrcDbContext.cs

@@ -2,10 +2,10 @@
 using Quadarax.Application.QLiberace.Base.Entities;
 using Quadarax.Application.QLiberace.Common.Attributes;
 using Quadarax.Application.QLiberace.Common.Configuration;
-using Quadarax.Application.QLiberace.Common.Dtos;
-using Quadarax.Application.QLiberace.Common.Entities.Base;
 using Quadarax.Foundation.Core.Data.Domain;
 using Quadarax.Foundation.Core.Reflection;
+using System.Diagnostics;
+using Quadarax.Application.QLiberace.Base.Entities.DaoMapper;
 
 namespace Quadarax.Application.QLiberace.Base
 {
@@ -32,7 +32,7 @@ namespace Quadarax.Application.QLiberace.Base
 
         protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
         {
-            optionsBuilder.UseSqlServer(GetConnectionString());
+            optionsBuilder.UseSqlServer(GetConnectionString()).LogTo(message => Debug.WriteLine("EFSQL>>" + message));;
         }
 
         protected string GetConnectionString()
@@ -44,5 +44,19 @@ namespace Quadarax.Application.QLiberace.Base
             return OlbrcConfiguration.Get(attr.ModuleCode).ConnectionString;
         }
 
+       
+        #region *** Schema ***
+
+        protected override void OnModelCreating(ModelBuilder modelBuilder)
+        {
+            new TenantDm().Map(modelBuilder);
+            new UserDm().Map(modelBuilder);
+            new SettingDm().Map(modelBuilder);
+
+            base.OnModelCreating(modelBuilder);
+        }
+
+        #endregion
+
     }
 }

+ 2 - 2
Modules/qdr.app.qlbrc.base/Repositories/RepoTenant.cs

@@ -1,13 +1,13 @@
 using Quadarax.Application.QLiberace.Base.Entities;
 using Quadarax.Application.QLiberace.Common.Domain;
+using Quadarax.Application.QLiberace.Common.Repositories;
 using Quadarax.Foundation.Core.Data;
-using Quadarax.Foundation.Core.Data.Repository;
 using Quadarax.Foundation.Core.Data.Domain;
 using Quadarax.Foundation.Core.Data.Interface.Domain;
 
 namespace Quadarax.Application.QLiberace.Base.Repositories
 {
-    public class RepoTenant: EntityRepository<long, Tenant>
+    public class RepoTenant: QlbrcTrackedRepository<Tenant>
     {
         public RepoTenant(IUnitOfWork<IDataDomain> unitOfWork, QlbrcContext operationContext) : base(unitOfWork, operationContext)
         {

+ 5 - 5
Modules/qdr.app.qlbrc.base/qdr.app.qlbrc.base.csproj

@@ -25,14 +25,14 @@
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="EFCore.AutomaticMigrations" Version="6.0.4" />
-    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.9" />
-    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.9">
+    <PackageReference Include="EFCore.AutomaticMigrations" Version="6.0.10.1" />
+    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.10" />
+    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.10">
       <PrivateAssets>all</PrivateAssets>
       <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
     </PackageReference>
-    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.9" />
-    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.9">
+    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.10" />
+    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.10">
       <PrivateAssets>all</PrivateAssets>
       <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
     </PackageReference>

+ 10 - 4
Tests/qdr.app.qlbrc.base.Tests/qdr.app.qlbrc.base.Tests.csproj

@@ -12,11 +12,17 @@
 
   <ItemGroup>
     <PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="6.0.10" />
-    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
+    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.2" />
     <PackageReference Include="NUnit" Version="3.13.3" />
-    <PackageReference Include="NUnit3TestAdapter" Version="4.2.1" />
-    <PackageReference Include="NUnit.Analyzers" Version="3.3.0" />
-    <PackageReference Include="coverlet.collector" Version="3.1.2" />
+    <PackageReference Include="NUnit3TestAdapter" Version="4.3.0" />
+    <PackageReference Include="NUnit.Analyzers" Version="3.5.0">
+      <PrivateAssets>all</PrivateAssets>
+      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+    </PackageReference>
+    <PackageReference Include="coverlet.collector" Version="3.2.0">
+      <PrivateAssets>all</PrivateAssets>
+      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+    </PackageReference>
   </ItemGroup>
 
   <ItemGroup>

+ 10 - 4
Tests/qdr.app.qlbrc.common.Tests/qdr.app.qlbrc.common.Tests.csproj

@@ -12,11 +12,17 @@
 
   <ItemGroup>
     <PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="6.0.10" />
-    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.1" />
+    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.2" />
     <PackageReference Include="NUnit" Version="3.13.3" />
-    <PackageReference Include="NUnit3TestAdapter" Version="4.2.1" />
-    <PackageReference Include="NUnit.Analyzers" Version="3.3.0" />
-    <PackageReference Include="coverlet.collector" Version="3.1.2" />
+    <PackageReference Include="NUnit3TestAdapter" Version="4.3.0" />
+    <PackageReference Include="NUnit.Analyzers" Version="3.5.0">
+      <PrivateAssets>all</PrivateAssets>
+      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+    </PackageReference>
+    <PackageReference Include="coverlet.collector" Version="3.2.0">
+      <PrivateAssets>all</PrivateAssets>
+      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+    </PackageReference>
   </ItemGroup>
 
   <ItemGroup>

+ 192 - 0
Workbench/Entity/QLiberaceContext.cs

@@ -0,0 +1,192 @@
+using System;
+using System.Collections.Generic;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Metadata;
+
+namespace Workbench.Entity
+{
+    public partial class QLiberaceContext : DbContext
+    {
+        public QLiberaceContext()
+        {
+        }
+
+        public QLiberaceContext(DbContextOptions<QLiberaceContext> options)
+            : base(options)
+        {
+        }
+
+        public virtual DbSet<Setting> Settings { get; set; } = null!;
+        public virtual DbSet<Tenant> Tenants { get; set; } = null!;
+        public virtual DbSet<TenantUser> TenantUsers { get; set; } = null!;
+        public virtual DbSet<User> Users { get; set; } = null!;
+
+        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
+        {
+            if (!optionsBuilder.IsConfigured)
+            {
+#warning To protect potentially sensitive information in your connection string, you should move it out of source code. You can avoid scaffolding the connection string by using the Name= syntax to read it from configuration - see https://go.microsoft.com/fwlink/?linkid=2131148. For more guidance on storing connection strings, see http://go.microsoft.com/fwlink/?LinkId=723263.
+                optionsBuilder.UseSqlServer("Server=(localdb)\\MSSQLLocalDB;Database=QLiberace;Trusted_Connection=True;");
+            }
+        }
+
+        protected override void OnModelCreating(ModelBuilder modelBuilder)
+        {
+            modelBuilder.Entity<Setting>(entity =>
+            {
+                entity.ToTable("Setting", "base");
+
+                entity.HasIndex(e => new { e.TenantId, e.ModuleCode, e.Code }, "IDX_SETTING_TENANT_MCODE_CODE")
+                    .IsUnique();
+
+                entity.Property(e => e.Id).HasComment("Setting primary key");
+
+                entity.Property(e => e.Code)
+                    .HasMaxLength(100)
+                    .HasComment("Setting code. Main key to search.");
+
+                entity.Property(e => e.Created)
+                    .HasColumnType("datetime")
+                    .HasDefaultValueSql("(getdate())")
+                    .HasComment("Record created timestamp");
+
+                entity.Property(e => e.Description)
+                    .HasMaxLength(500)
+                    .HasComment("Setting value description");
+
+                entity.Property(e => e.IsEnabled).HasComment("Flag if setting is enabled");
+
+                entity.Property(e => e.Modified)
+                    .HasColumnType("datetime")
+                    .HasComment("Record modified timestamp");
+
+                entity.Property(e => e.Modifier)
+                    .HasMaxLength(100)
+                    .HasComment("Record modifier signature");
+
+                entity.Property(e => e.ModuleCode)
+                    .HasMaxLength(10)
+                    .HasComment("Module code that setting belongs. Secondary key");
+
+                entity.Property(e => e.Name)
+                    .HasMaxLength(200)
+                    .HasComment("Setting name. Informational value.");
+
+                entity.Property(e => e.ParentId).HasComment("Reference to parent setting");
+
+                entity.Property(e => e.SequenceNo).HasComment("Order number");
+
+                entity.Property(e => e.TenantId).HasComment("Reference to tenant that setting belongs");
+
+                entity.Property(e => e.Value).HasComment("Setting value");
+
+                entity.Property(e => e.ValueTypeQualified)
+                    .HasMaxLength(500)
+                    .HasComment("Qualified name of value type");
+
+                entity.HasOne(d => d.Parent)
+                    .WithMany(p => p.InverseParent)
+                    .HasForeignKey(d => d.ParentId)
+                    .HasConstraintName("REL_SETTING_SETTING_ID");
+
+                entity.HasOne(d => d.Tenant)
+                    .WithMany(p => p.Settings)
+                    .HasForeignKey(d => d.TenantId)
+                    .OnDelete(DeleteBehavior.ClientSetNull)
+                    .HasConstraintName("REL_SETTING_TENANT_ID");
+            });
+
+            modelBuilder.Entity<Tenant>(entity =>
+            {
+                entity.ToTable("Tenant", "base");
+
+                entity.HasIndex(e => e.Code, "IDX_TENANT_CODE")
+                    .IsUnique();
+
+                entity.HasKey(e => e.Id);
+                entity.Property(e => e.Id).HasComment("Tenant primary key");
+
+                entity.Property(e => e.Code)
+                    .HasMaxLength(20)
+                    .HasComment("Tenant code. Main key to search.");
+
+                entity.Property(e => e.Created)
+                    .HasColumnType("datetime")
+                    .HasDefaultValueSql("(getdate())")
+                    .HasComment("Record created timestamp");
+
+                entity.Property(e => e.IsLocked).HasComment("Flag if tenant locked (not accessable)");
+
+                entity.Property(e => e.LastAccess)
+                    .HasColumnType("datetime")
+                    .HasComment("Last access (usage) timestamp.");
+
+                entity.Property(e => e.Modified)
+                    .HasColumnType("datetime")
+                    .HasComment("Record modified timestamp");
+
+                entity.Property(e => e.Modifier)
+                    .HasMaxLength(100)
+                    .HasComment("Record modifier signature");
+
+                entity.Property(e => e.Name)
+                    .HasMaxLength(200)
+                    .HasComment("Tenant name. Informational value.");
+            });
+
+            modelBuilder.Entity<TenantUser>(entity =>
+            {
+                entity.HasNoKey();
+
+                entity.ToTable("TenantUser", "base");
+
+                entity.Property(e => e.TenantId).HasComment("Reference to tenant");
+
+                entity.Property(e => e.UserId).HasComment("Reference to user");
+
+                entity.HasOne(d => d.Tenant)
+                    .WithMany()
+                    .HasForeignKey(d => d.TenantId)
+                    .HasConstraintName("REL_TENANTUSER_TENANT_ID");
+
+                entity.HasOne(d => d.User)
+                    .WithMany()
+                    .HasForeignKey(d => d.UserId)
+                    .HasConstraintName("REL_TENANTUSER_USER_ID");
+            });
+
+            modelBuilder.Entity<User>(entity =>
+            {
+                entity.ToTable("User", "base");
+
+                entity.HasIndex(e => e.LoginName, "IDX_USER_LOGINNAME")
+                    .IsUnique();
+
+                entity.Property(e => e.Id).HasComment("User primary key");
+
+                entity.Property(e => e.Created)
+                    .HasColumnType("datetime")
+                    .HasDefaultValueSql("(getdate())")
+                    .HasComment("Record created timestamp");
+
+                entity.Property(e => e.IsLocked).HasComment("Flag if user access locked (not accessable)");
+
+                entity.Property(e => e.LoginName)
+                    .HasMaxLength(200)
+                    .HasComment("User login name name. Key search value");
+
+                entity.Property(e => e.Modified)
+                    .HasColumnType("datetime")
+                    .HasComment("Record modified timestamp");
+
+                entity.Property(e => e.Modifier)
+                    .HasMaxLength(100)
+                    .HasComment("Record modifier signature");
+            });
+
+            OnModelCreatingPartial(modelBuilder);
+        }
+
+        partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
+    }
+}

+ 74 - 0
Workbench/Entity/Setting.cs

@@ -0,0 +1,74 @@
+using System;
+using System.Collections.Generic;
+
+namespace Workbench.Entity
+{
+    public partial class Setting
+    {
+        public Setting()
+        {
+            InverseParent = new HashSet<Setting>();
+        }
+
+        /// <summary>
+        /// Setting primary key
+        /// </summary>
+        public long Id { get; set; }
+        /// <summary>
+        /// Reference to parent setting
+        /// </summary>
+        public long? ParentId { get; set; }
+        /// <summary>
+        /// Reference to tenant that setting belongs
+        /// </summary>
+        public long TenantId { get; set; }
+        /// <summary>
+        /// Module code that setting belongs. Secondary key
+        /// </summary>
+        public string ModuleCode { get; set; } = null!;
+        /// <summary>
+        /// Order number
+        /// </summary>
+        public int SequenceNo { get; set; }
+        /// <summary>
+        /// Setting code. Main key to search.
+        /// </summary>
+        public string Code { get; set; } = null!;
+        /// <summary>
+        /// Setting name. Informational value.
+        /// </summary>
+        public string Name { get; set; } = null!;
+        /// <summary>
+        /// Setting value description
+        /// </summary>
+        public string? Description { get; set; }
+        /// <summary>
+        /// Qualified name of value type
+        /// </summary>
+        public string ValueTypeQualified { get; set; } = null!;
+        /// <summary>
+        /// Setting value
+        /// </summary>
+        public string? Value { get; set; }
+        /// <summary>
+        /// Flag if setting is enabled
+        /// </summary>
+        public bool IsEnabled { get; set; }
+        /// <summary>
+        /// Record created timestamp
+        /// </summary>
+        public DateTime Created { get; set; }
+        /// <summary>
+        /// Record modified timestamp
+        /// </summary>
+        public DateTime? Modified { get; set; }
+        /// <summary>
+        /// Record modifier signature
+        /// </summary>
+        public string? Modifier { get; set; }
+
+        public virtual Setting? Parent { get; set; }
+        public virtual Tenant Tenant { get; set; } = null!;
+        public virtual ICollection<Setting> InverseParent { get; set; }
+    }
+}

+ 48 - 0
Workbench/Entity/Tenant.cs

@@ -0,0 +1,48 @@
+using System;
+using System.Collections.Generic;
+
+namespace Workbench.Entity
+{
+    public partial class Tenant
+    {
+        public Tenant()
+        {
+            Settings = new HashSet<Setting>();
+        }
+
+        /// <summary>
+        /// Tenant primary key
+        /// </summary>
+        public long Id { get; set; }
+        /// <summary>
+        /// Tenant code. Main key to search.
+        /// </summary>
+        public string Code { get; set; } = null!;
+        /// <summary>
+        /// Tenant name. Informational value.
+        /// </summary>
+        public string Name { get; set; } = null!;
+        /// <summary>
+        /// Last access (usage) timestamp.
+        /// </summary>
+        public DateTime? LastAccess { get; set; }
+        /// <summary>
+        /// Flag if tenant locked (not accessable)
+        /// </summary>
+        public bool IsLocked { get; set; }
+        /// <summary>
+        /// Record created timestamp
+        /// </summary>
+        public DateTime Created { get; set; }
+        /// <summary>
+        /// Record modified timestamp
+        /// </summary>
+        public DateTime? Modified { get; set; }
+        /// <summary>
+        /// Record modifier signature
+        /// </summary>
+        public string? Modifier { get; set; }
+
+        public virtual ICollection<Setting> Settings { get; set; }
+    }
+}

+ 20 - 0
Workbench/Entity/TenantUser.cs

@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+
+namespace Workbench.Entity
+{
+    public partial class TenantUser
+    {
+        /// <summary>
+        /// Reference to tenant
+        /// </summary>
+        public long? TenantId { get; set; }
+        /// <summary>
+        /// Reference to user
+        /// </summary>
+        public long? UserId { get; set; }
+
+        public virtual Tenant? Tenant { get; set; }
+        public virtual User? User { get; set; }
+    }
+}

+ 33 - 0
Workbench/Entity/User.cs

@@ -0,0 +1,33 @@
+using System;
+using System.Collections.Generic;
+
+namespace Workbench.Entity
+{
+    public partial class User
+    {
+        /// <summary>
+        /// User primary key
+        /// </summary>
+        public long Id { get; set; }
+        /// <summary>
+        /// User login name name. Key search value
+        /// </summary>
+        public string LoginName { get; set; } = null!;
+        /// <summary>
+        /// Flag if user access locked (not accessable)
+        /// </summary>
+        public bool IsLocked { get; set; }
+        /// <summary>
+        /// Record created timestamp
+        /// </summary>
+        public DateTime Created { get; set; }
+        /// <summary>
+        /// Record modified timestamp
+        /// </summary>
+        public DateTime? Modified { get; set; }
+        /// <summary>
+        /// Record modifier signature
+        /// </summary>
+        public string? Modifier { get; set; }
+    }
+}

+ 2 - 0
Workbench/Program.cs

@@ -0,0 +1,2 @@
+// See https://aka.ms/new-console-template for more information
+Console.WriteLine("Hello, World!");

+ 18 - 0
Workbench/Workbench.csproj

@@ -0,0 +1,18 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.10">
+      <PrivateAssets>all</PrivateAssets>
+      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+    </PackageReference>
+    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.10" />
+  </ItemGroup>
+
+</Project>

+ 6 - 0
Workbench/readme.txt

@@ -0,0 +1,6 @@
+To reverse update:
+- Set Workbench project as Startup Project
+- Ensure if solution is buildable - backup Entity folder
+- Open PM (Package Manager Console from View menu)
+- Run following command (in case localdb use (localdb)\\MSSQLLocalDB)
+Scaffold-DbContext "Server=(localdb)\MSSQLLocalDB;Database=QLiberace;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Entity -Force

+ 135 - 0
qdr.app.qlbrc.console/Commands/DbInitCmd.cs

@@ -0,0 +1,135 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Microsoft.Data.SqlClient;
+using Quadarax.Application.QLiberace.Base;
+using Quadarax.Application.QLiberace.Base.Entities;
+using Quadarax.Application.QLiberace.Base.Repositories;
+using Quadarax.Application.QLiberace.Common.Domain;
+using Quadarax.Application.QLiberace.Console.Commands.Base;
+using Quadarax.Foundation.Core.Data.Domain;
+using Quadarax.Foundation.Core.QConsole;
+using Quadarax.Foundation.Core.QConsole.Attributes;
+using Quadarax.Foundation.Core.Value;
+
+namespace Quadarax.Application.QLiberace.Console.Commands
+{
+    [CommandDefinition]
+    internal class DbInitCmd : DbContextCommand
+    {
+
+        #region *** Properties ***
+
+        public override string Name => Constants.Commands.DbInit.Name;
+        public override string Description => Constants.Commands.DbInit.Description;
+
+        #endregion
+
+        #region *** Fields ***
+
+        #endregion
+
+        #region *** Constructor ***
+
+        public DbInitCmd(Engine engine) : base(engine)
+        {
+        }
+
+        #endregion
+
+        #region *** EXECUTE ***
+
+        protected override Result OnExecute(QlbrcDbContext context)
+        {
+            WriteInfo("Initializing database data...");
+            var resultCode = Constants.ReturnCodes.Ok;
+            try
+            {
+                var dbcResolver = new DomainContextResolver<QlbrcDbContext>(context);
+                var uow = new UnitOfWork<QlbrcDbContext>(dbcResolver);
+
+                var rtenant = new RepoTenant(uow.As<IDataDomain>(), new QlbrcContext(null, null, 1));
+
+                var tenant = rtenant.GetByCode("default");
+                if (tenant == null)
+                {
+                    tenant = rtenant.New();
+                    tenant.Code = "default";
+                    tenant.Name = "Default tenant";
+                    tenant.IsLocked = false;
+                    rtenant.Set(tenant);
+                    uow.Commit();
+                    WriteInfo($"Tenant: '{tenant.Code}' created");
+                }
+                else
+                {
+                    WriteCaption($"Tenant: '{tenant.Code}' already exists");
+                }
+
+                tenant = rtenant.GetByCode("test");
+                if (tenant == null)
+                {
+                    tenant = rtenant.New();
+                    tenant.Code = "test";
+                    tenant.Name = "Test tenant";
+                    tenant.IsLocked = false;
+                    uow.Commit();
+                    WriteInfo($"Tenant: '{tenant.Code}' created");
+                }
+                else
+                {
+                    WriteCaption($"Tenant: '{tenant.Code}' already exists");
+                }
+
+
+                var ruser = new RepoUser(uow.As<IDataDomain>());
+
+                var user = ruser.GetByLoginName("testuser");
+                if (user == null)
+                {
+                    user = ruser.New();
+                    user.LoginName = "testuser";
+                    tenant.IsLocked = false;
+                    uow.Commit();
+                    WriteInfo($"User: '{user.LoginName}' created");
+                }
+                else
+                {
+                    WriteCaption($"User: '{user.LoginName}' already exists");
+                }
+
+                WriteInfo($"Assigning user '{user.LoginName}' to tenants..");
+                var tenant1Id = rtenant.GetByCode("default")?.Id;
+                var tenant2Id = rtenant.GetByCode("test")?.Id;
+
+                var assign = new TenantUser();
+                assign.UserId = user.Id;
+                assign.TenantId = tenant1Id.GetValueOrDefault();
+                assign = new TenantUser();
+                assign.UserId = user.Id;
+                assign.TenantId = tenant2Id.GetValueOrDefault();
+                uow.Commit();
+                WriteInfo("Assigned.");
+
+            }
+            catch (SqlException e)
+            {
+                return HandleConnectionException(e);
+            }
+
+            return new Result(resultCode);
+
+
+        }
+        #endregion
+
+        #region *** Private operations ***
+
+        #endregion
+    }
+}
+
+
+

+ 12 - 0
qdr.app.qlbrc.console/Constants.cs

@@ -23,6 +23,18 @@
 
         internal class Commands
         {
+            internal class Test
+            {
+                public const string Name = "test";
+                public const string Description = "Runs unspecific test";
+            }
+
+            internal class DbInit
+            {
+                public const string Name = "db_init";
+                public const string Description = "Initialize existing database with basic data";
+            }
+
             internal class DbInstall
             {
                 public const string Name = "db_install";

+ 8 - 0
qdr.app.qlbrc.console/Properties/launchSettings.json

@@ -15,6 +15,14 @@
     "db_uninstall": {
       "commandName": "Project",
       "commandLineArgs": "db_uninstall"
+    },
+    "test": {
+      "commandName": "Project",
+      "commandLineArgs": "test"
+    },
+    "db_init": {
+      "commandName": "Project",
+      "commandLineArgs": "db_init"
     }
   }
 }

+ 65 - 0
qdr.app.qlbrc.console/TestCmd.cs

@@ -0,0 +1,65 @@
+using Microsoft.Data.SqlClient;
+using Quadarax.Application.QLiberace.Base;
+using Quadarax.Application.QLiberace.Base.Repositories;
+using Quadarax.Application.QLiberace.Common.Domain;
+using Quadarax.Application.QLiberace.Console.Commands.Base;
+using Quadarax.Foundation.Core.Data.Domain;
+using Quadarax.Foundation.Core.QConsole.Argument;
+using Quadarax.Foundation.Core.QConsole.Attributes;
+using Quadarax.Foundation.Core.QConsole;
+using Quadarax.Foundation.Core.Value;
+
+namespace Quadarax.Application.QLiberace.Console
+{
+       [CommandDefinition]
+       internal class TestCmd : DbContextCommand
+    {
+
+        #region *** Properties ***
+
+        public override string Name => Constants.Commands.Test.Name;
+        public override string Description => Constants.Commands.Test.Description;
+        
+        #endregion
+        #region *** Fields ***
+
+        #endregion
+
+        #region *** Constructor ***
+
+        public TestCmd(Engine engine) : base(engine)
+        {
+        }
+        #endregion
+        
+        #region *** EXECUTE ***
+        protected override Result OnExecute(QlbrcDbContext context)
+        {
+            WriteInfo("Running test...");
+            var resultCode = Constants.ReturnCodes.Ok;
+            try
+            {
+                var dbcResolver = new DomainContextResolver<QlbrcDbContext>(context);
+                var uow = new UnitOfWork<QlbrcDbContext>(dbcResolver);
+                var repo = new RepoTenant(uow.As<IDataDomain>(), new QlbrcContext(null, null, 1));
+
+                var tenant = repo.GetByCode("default");
+                WriteInfo(tenant?.ToString());
+            }
+            catch (SqlException e)
+            {
+                return HandleConnectionException(e);
+            }
+
+            return new Result(resultCode);
+        }
+
+        
+        #endregion
+
+        #region *** Private operations ***
+        
+        #endregion
+    }
+}
+

+ 1 - 1
qdr.app.qlbrc.console/qdr.app.qlbrc.console.csproj

@@ -9,7 +9,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.9">
+    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.10">
       <PrivateAssets>all</PrivateAssets>
       <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
     </PackageReference>

+ 6 - 0
qdr.app.qlbrc.sln

@@ -37,6 +37,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "qdr.app.qlbrc.base.Tests",
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "qdr.fnd.core.test", "Common\qdr.fnd.core.test\qdr.fnd.core.test.csproj", "{0D88D15B-DC73-43F2-8661-ECAAF8EEB173}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Workbench", "Workbench\Workbench.csproj", "{26FEFB38-30C1-49A0-8454-4F9622E98920}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -95,6 +97,10 @@ Global
 		{0D88D15B-DC73-43F2-8661-ECAAF8EEB173}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{0D88D15B-DC73-43F2-8661-ECAAF8EEB173}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{0D88D15B-DC73-43F2-8661-ECAAF8EEB173}.Release|Any CPU.Build.0 = Release|Any CPU
+		{26FEFB38-30C1-49A0-8454-4F9622E98920}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{26FEFB38-30C1-49A0-8454-4F9622E98920}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{26FEFB38-30C1-49A0-8454-4F9622E98920}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{26FEFB38-30C1-49A0-8454-4F9622E98920}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE