Florian Eisenmenger há 2 anos
ascendente
cometimento
ad1167c798
12 ficheiros alterados com 586 adições e 550 eliminações
  1. +212
    -6
      httpdocs/public/assets/scss/components/_basic.scss
  2. +114
    -2
      httpdocs/public/assets/scss/styles.css
  3. +1
    -1
      httpdocs/public/assets/scss/styles.css.map
  4. +1
    -1
      httpdocs/src/Controller/AdminController.php
  5. +1
    -1
      httpdocs/src/Controller/UserController.php
  6. +2
    -2
      httpdocs/src/Repository/UserRepository.php
  7. +1
    -1
      httpdocs/templates/pages/risk_analysis.html.twig
  8. +10
    -8
      httpdocs/templates/pages/start.html.twig
  9. +12
    -72
      httpdocs/templates/pages/worksheet.html.twig
  10. +20
    -453
      httpdocs/templates/pdf/pdf.html.twig
  11. +3
    -3
      httpdocs/templates/snippets/listing-form.html.twig
  12. +209
    -0
      httpdocs/templates/snippets/worksheet-result.html.twig

+ 212
- 6
httpdocs/public/assets/scss/components/_basic.scss Ver ficheiro

@@ -40,6 +40,7 @@ textarea:-ms-input-placeholder {
padding: 3rem 0;
min-height: 600px;
}

h1 {
font-size: 2rem;
line-height: 2.5rem;
@@ -48,7 +49,15 @@ textarea:-ms-input-placeholder {
font-size: 1.25rem;
line-height: 1.5rem;
}

span {
font-size: 1rem;
@media (max-width: 767px) {
font-size: 0.875rem;
}
}
}

h2, h3 {
font-size: 1.5rem;
line-height: 2rem;
@@ -58,11 +67,20 @@ textarea:-ms-input-placeholder {
line-height: 1.25rem;
}
}

h3 {
font-weight: bold;
text-transform: uppercase;
}
h4, h5, h6 {

h4 {
font-size: 1.25rem;
line-height: 1.5rem;
padding: 0 0 0.5rem 0;
font-weight: bold;
}

h5, h6 {
font-size: 1rem;
line-height: 1.25rem;
padding: 0 0 0.5rem 0;
@@ -71,9 +89,11 @@ textarea:-ms-input-placeholder {
line-height: 1rem;
}
}

p, ul, ol, table {
margin: 0 0 1.5rem 0;
}

p {
&.img {
img {
@@ -84,27 +104,34 @@ textarea:-ms-input-placeholder {
}
}
}

.mini-nav {
padding: 0 0 1.5rem 0;

a {
color: $color-bim-100;

&:before {
content: "<< ";
}

&:hover {
text-decoration: none;
}
}
}

.container {
padding: 0 0 1.5rem 0;
}

.logo-bar {
li {
overflow: hidden;
padding: 0 0 10px 0;
display: flex;
align-items: center;

img {
//width: 120px;
float: left;
@@ -115,6 +142,7 @@ textarea:-ms-input-placeholder {
margin-bottom: 20px;
}
}

p {
//margin-left: 150px;
@media (max-width: 767px) {
@@ -137,25 +165,30 @@ textarea:-ms-input-placeholder {
text-decoration: none;
display: inline-block;
@include transition;

&:hover {
background: $color-bim-80;
border-color: $color-bim-80;
color: $color-white;
}

&[disabled] {
opacity: 0.5;
background: $color-black;
border-color: $color-black;
cursor: default;
}

&--inverse {
background: $color-white;
color: $color-bim-100;
}

&--correct {
border-color: $color-bim-green;
background: $color-bim-green;
color: $color-white;

&:hover {
background: $color-white;
border-color: $color-bim-green;
@@ -169,31 +202,37 @@ textarea:-ms-input-placeholder {
display: flex;
justify-content: flex-start;
flex-wrap: wrap;

#header & {
@media (max-width: 500px) {
padding-top: 20px;
}
}

&.form--row-right {
justify-content: flex-end;
margin-right: 5%;
}
}

&--wrapper {
width: 270px;
padding: 0 0 1.5rem 0;
display: flex;
flex-wrap: wrap;
align-items: flex-end;

#header & {
padding-bottom: 0;
width: 200px;

&.fw--no-width {
width: auto;
@media (max-width: 412px) {
margin-top: 10px;
}
}

@media (max-width: 768px) {
width: 120px;
}
@@ -201,11 +240,13 @@ textarea:-ms-input-placeholder {
width: 110px;
}
}

&.mandatory {
label {
font-weight: 700;
}
}

label {
display: block;
padding: 0 0 0.25rem 0;
@@ -213,15 +254,18 @@ textarea:-ms-input-placeholder {
line-height: 1.5rem;
width: 100%;
}

input {
display: block;
font-size: 1rem;
line-height: 1.5rem;
width: 90%;

&[type='checkbox'] {
width: auto;
}
}

textarea {
display: block;
font-size: 1rem;
@@ -237,15 +281,18 @@ textarea:-ms-input-placeholder {
}
}
}

&--legal {
padding: 0 0 1.5rem 0;
.form--wrapper {

.form--wrapper {
width: auto;
max-width: 80%;
@media (max-width: 1048px) {
max-width: none;
}
}

.form-wrapper--container {
display: flex;
flex-wrap: nowrap;
@@ -255,6 +302,7 @@ textarea:-ms-input-placeholder {
display: block;
}
}

.form--checkbox {
input {
float: left;
@@ -262,9 +310,11 @@ textarea:-ms-input-placeholder {
}
}
}

&--catalogue {
border-top: 2px solid $color-black;
padding: 0 0 1.5rem 0;

.form-wrapper--container {
display: flex;
flex-wrap: nowrap;
@@ -274,16 +324,20 @@ textarea:-ms-input-placeholder {
display: block;
}
}

h3 {
text-align: center;
width: 100%;
}

.question-count {
padding: 1.5rem 0;
position: relative;

p {
padding: 0;
}

.progressbar {
position: absolute;
left: 0;
@@ -291,16 +345,18 @@ textarea:-ms-input-placeholder {
height: 12px;
width: 100%;
background: #ddd;

div {
position: absolute;
left: 0;
bottom: 0;
height: 12px;
width: 0;
background: green;
background: green;
}
}
}

.catalogue-nav {
display: flex;
justify-content: space-between;
@@ -317,30 +373,36 @@ textarea:-ms-input-placeholder {
justify-content: center;
display: flex;
flex-wrap: wrap;

&:first-of-type {
order: 2;
}
}
.btn {
.btn {
order: 1;
margin: 10px 10px 0 10px;
}
}
}

.form--wrapper {
width: auto;
justify-content: center;

.btn {
float: right;
}

&.left {
justify-content: flex-start;
}
}

h2 {
font-size: 2rem;
line-height: 3rem;
}

label {
font-size: 1.5rem;
line-height: 2rem;
@@ -349,9 +411,11 @@ textarea:-ms-input-placeholder {
line-height: 1.25rem;
}
}

.form--checkbox {
label {
display: flex;
display: flex;

input {
display: inline;
width: auto;
@@ -363,10 +427,12 @@ textarea:-ms-input-placeholder {
}
}
}

&--question {
border-top: 2px solid $color-black;
padding-top: 1.5rem;
}

.alert {
font-size: 0.75rem;
line-height: 1rem;
@@ -387,12 +453,15 @@ textarea:-ms-input-placeholder {
display: none;
color: $color-white;
font-size: 1.5rem;

&.success {
background: green;
}

&.failure {
background: $color-bim-100;
}

p {
padding: 1.5rem;
}
@@ -404,11 +473,14 @@ textarea:-ms-input-placeholder {
display: flex;
justify-content: space-between;
flex-wrap: wrap;

.col-box {
width: 60%;

&:nth-child(2) {
width: 30%;
}

.col-box {
width: 48%;
}
@@ -418,6 +490,7 @@ textarea:-ms-input-placeholder {
#main {
.form--catalogue {
padding-top: 20px;

h2 {
padding-bottom: 10px;
}
@@ -426,10 +499,12 @@ textarea:-ms-input-placeholder {

.form-fields {
padding: 0 0 30px 0;

label {
display: block;
font-size: 16px;
}

input, select {
display: block;
width: 100%;
@@ -441,49 +516,180 @@ textarea:-ms-input-placeholder {
}

.result-box {
background: rgba(118,127,134,.3);
background: rgba(118, 127, 134, .3);
padding: 30px 20px;

dl {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
padding: 0 0 20px 0;

dt, dd {
padding: 0 0 10px 0;
margin: 0 0 10px 0;
border-bottom: 1px solid #000;

&:last-of-type {
border-bottom: none;
}
}

dt {
flex-basis: 75%;
font-weight: normal;
}

dd {
flex-basis: 25%;
font-weight: bold;
text-align: right;
}
}

h3 {
text-align: left;
}

.btn {
margin: 0 auto;
}

.result-existing {
display: none;
}

.result-not-existing {
display: block;
}

&.result-existing {
.result-existing {
display: block;
}

.result-not-existing {
display: none;
}
}
}

ol.worksheets {
padding-left: 26px;

li {
padding-bottom: 10px;
list-style: decimal-leading-zero;

}

a {
text-decoration: none;

&:hover {
color: #e2003c;
text-decoration: underline;
}
}
}

#main {
table.mini-table {
width: 50%;
margin: 0 0 4rem 0;
border-collapse: collapse;
@media (max-width: 1200px) {
width: 75%;
}
@media (max-width: 768px) {
width: 100%;
}

td {
vertical-align: top;
padding: 10px 0;
border-bottom: 1px solid #000;

&:last-child {
text-align: right;
font-weight: bold;
}
span {
display: block;
padding: 0 10px 0 0;
}
}

&.fifty-fifty {
td {
width: 50%;
}
}
}

.worksheet-table {
overflow: auto;
height: 500px;
margin-bottom: 30px;

table {
width: 100%;
min-width: 1200px;
padding: 0;
margin: 0 0 4rem 0;
border-collapse: collapse;
}

th {
padding: 0 0 20px 0;
background: #d5d8da;
vertical-align: bottom;
font-weight: bold;
height: 200px;
position: sticky;
top: 0;

span {
display: block;
transform: rotate(-90deg);
transform-origin: left center;
position: absolute;
left: 50%;
bottom: 0;
}

&:last-child,
&:nth-child(2),
&:nth-child(3) {
span {
transform: none;
transform-origin: inherit;
position: static;
left: auto;
bottom: auto;
}
}
}

td {
vertical-align: top;
border-bottom: 1px solid rgba(118, 127, 134, .3);
padding: 15px 0;
text-align: center;

&:nth-child(2) {
width: 30%;
}

&:last-child {
width: 20%;
}

&:last-child,
&:nth-child(2),
&:nth-child(3) {
text-align: left;
}
}
}
}

+ 114
- 2
httpdocs/public/assets/scss/styles.css Ver ficheiro

@@ -242,6 +242,14 @@ textarea:-ms-input-placeholder {
line-height: 1.5rem;
}
}
#main h1 span {
font-size: 1rem;
}
@media (max-width: 767px) {
#main h1 span {
font-size: 0.875rem;
}
}
#main h2, #main h3 {
font-size: 1.5rem;
line-height: 2rem;
@@ -257,13 +265,19 @@ textarea:-ms-input-placeholder {
font-weight: bold;
text-transform: uppercase;
}
#main h4, #main h5, #main h6 {
#main h4 {
font-size: 1.25rem;
line-height: 1.5rem;
padding: 0 0 0.5rem 0;
font-weight: bold;
}
#main h5, #main h6 {
font-size: 1rem;
line-height: 1.25rem;
padding: 0 0 0.5rem 0;
}
@media (max-width: 767px) {
#main h4, #main h5, #main h6 {
#main h5, #main h6 {
font-size: 0.875rem;
line-height: 1rem;
}
@@ -687,6 +701,104 @@ textarea:-ms-input-placeholder {
display: none;
}

ol.worksheets {
padding-left: 26px;
}
ol.worksheets li {
padding-bottom: 10px;
list-style: decimal-leading-zero;
}
ol.worksheets a {
text-decoration: none;
}
ol.worksheets a:hover {
color: #e2003c;
text-decoration: underline;
}

#main table.mini-table {
width: 50%;
margin: 0 0 4rem 0;
border-collapse: collapse;
}
@media (max-width: 1200px) {
#main table.mini-table {
width: 75%;
}
}
@media (max-width: 768px) {
#main table.mini-table {
width: 100%;
}
}
#main table.mini-table td {
vertical-align: top;
padding: 10px 0;
border-bottom: 1px solid #000;
}
#main table.mini-table td:last-child {
text-align: right;
font-weight: bold;
}
#main table.mini-table td span {
display: block;
padding: 0 10px 0 0;
}
#main table.mini-table.fifty-fifty td {
width: 50%;
}
#main .worksheet-table {
overflow: auto;
height: 500px;
margin-bottom: 30px;
}
#main .worksheet-table table {
width: 100%;
min-width: 1200px;
padding: 0;
margin: 0 0 4rem 0;
border-collapse: collapse;
}
#main .worksheet-table th {
padding: 0 0 20px 0;
background: #d5d8da;
vertical-align: bottom;
font-weight: bold;
height: 200px;
position: sticky;
top: 0;
}
#main .worksheet-table th span {
display: block;
transform: rotate(-90deg);
transform-origin: left center;
position: absolute;
left: 50%;
bottom: 0;
}
#main .worksheet-table th:last-child span, #main .worksheet-table th:nth-child(2) span, #main .worksheet-table th:nth-child(3) span {
transform: none;
transform-origin: inherit;
position: static;
left: auto;
bottom: auto;
}
#main .worksheet-table td {
vertical-align: top;
border-bottom: 1px solid rgba(118, 127, 134, 0.3);
padding: 15px 0;
text-align: center;
}
#main .worksheet-table td:nth-child(2) {
width: 30%;
}
#main .worksheet-table td:last-child {
width: 20%;
}
#main .worksheet-table td:last-child, #main .worksheet-table td:nth-child(2), #main .worksheet-table td:nth-child(3) {
text-align: left;
}

header {
box-shadow: 0 1px 10px -6px rgba(0, 0, 0, 0.42), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 4px 5px -2px rgba(0, 0, 0, 0.1);
position: fixed;


+ 1
- 1
httpdocs/public/assets/scss/styles.css.map Ver ficheiro

@@ -1 +1 @@
{"version":3,"sourceRoot":"","sources":["components/_reset.scss","_variables.scss","components/_basic.scss","_mixins.scss","components/_header.scss","components/_footer.scss","components/_listing.scss"],"names":[],"mappings":"AAAA;AACA;EACE;EACA;EACA;EACA;EACA,mWAKmE;;AAGrE;AACA;EACE;EACA;EACA;EACA;EACA,+UAK+D;;AAIjE;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;EAME;EACA;EACA;EACA;EACA;;;AAGF;AAAA;AAAA;AAAA;EAIE;;;AAIF;AAEA;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;AAEA;AAAA;AAAA;AAAA;EAIE;;;AAGF;EACE;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAyBE;EACA;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;EAME;;;AAGF;AAAA;EAEE;;;AAIA;AAAA;AAAA;AAAA;EAIE;EACA;;;AAIJ;AAAA;EAEE;EACA;;;AAGF;AAAA;EAEE;EACA;;;AAGF;AAAA;EAEE;EACA;;;AAGF;AAAA;EAEE;EACA;;;AAGF;EACE,YCzKY;ED0KZ;EACA;;AACA;EACE;EACA;;;AAIJ;EACE;EACA;;;AAGF;AAAA;EAEE;EACA;;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AE3MF;EACE;;AACA;EAFF;IAGI;;;AAEF;EALF;IAMI;;;;AAIJ;AAAA;EAEE,ODTmB;ECUnB;;;AAGF;AAAA;EAEE,ODfmB;ECgBnB;;;AAGF;AAAA;EAEE,ODrBmB;ECsBnB;;;AAGF;AAAA;EAEE,OD3BmB;EC4BnB;;;AAIA;EACE;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;;AACA;EAJF;IAKI;IACA;;;AAGJ;EACE;EACA;EACA;;AACA;EAJF;IAKI;IACA;;;AAGJ;EACE;EACA;;AAEF;EACE;EACA;EACA;;AACA;EAJF;IAKI;IACA;;;AAGJ;EACE;;AAIE;EACE;EACA;EACA;EACA;;AAIN;EACE;;AACA;EACE,ODrFU;;ACsFV;EACE;;AAEF;EACE;;AAIN;EACE;;AAGA;EACE;EACA;EACA;EACA;;AACA;EAEE;EACA;EACA;;AACA;EALF;IAMI;IACA;;;AAKF;EAFF;IAGI;;;;AAOV;EACE;EACA,YD7Hc;EC8Hd,ODlIY;ECmIZ;EACA;EACA;EACA;EACA;EACA;EACA;ECxIA;;AD0IA;EACE,YDtIW;ECuIX,cDvIW;ECwIX,OD9IU;;ACgJZ;EACE;EACA,YDjJU;ECkJV,cDlJU;ECmJV;;AAEF;EACE,YDvJU;ECwJV,ODpJY;;ACsJd;EACE,cD7Ic;EC8Id,YD9Ic;EC+Id,OD7JU;;AC8JV;EACE,YD/JQ;ECgKR,cDlJY;ECmJZ,ODnJY;;;ACyJhB;EACE;EACA;EACA;;AAEE;EADF;IAEI;;;AAGJ;EACE;EACA;;AAGJ;EACE;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;;AACA;EACE;;AACA;EAFF;IAGI;;;AAGJ;EATF;IAUI;;;AAEF;EAZF;IAaI;;;AAIF;EACE;;AAGJ;EACE;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;;AACA;EACE;;AAGJ;EACE;EACA;EACA;EACA;EACA;EACA;;AACA;EAPF;IAQI;;;AAEF;EAVF;IAWI;;;AAIN;EACE;;AACA;EACE;EACA;;AACA;EAHF;IAII;;;AAGJ;EACE;EACA;EACA;EACA;;AACA;EALF;IAMI;;;AAIF;EACE;EACA;;AAIN;EACE;EACA;;AACA;EACE;EACA;EACA;EACA;;AACA;EALF;IAMI;;;AAGJ;EACE;EACA;;AAEF;EACE;EACA;;AACA;EACE;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;;AAIN;EACE;EACA;EACA;;AACA;EAJF;IAKI;IACA;;EACA;IACE;IACA;;EAEF;IACE;IACA;IACA;IACA;;EACA;IACE;;EAGJ;IACE;IACA;;;AAIN;EACE;EACA;;AACA;EACE;;AAEF;EACE;;AAGJ;EACE;EACA;;AAEF;EACE;EACA;;AACA;EAHF;IAII;IACA;;;AAIF;EACE;;AACA;EACE;EACA;EACA;;AACA;EAJF;IAKI;;;AAMV;EACE;EACA;;AAEF;EACE;EACA;;;AAIJ;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA,ODnYY;ECoYZ;;AACA;EACE;;AAEF;EACE,YDrYY;;ACuYd;EACE;;;AAIJ;AAEA;EACE;EACA;EACA;;AACA;EACE;;AACA;EACE;;AAEF;EACE;;;AAMJ;EACE;;AACA;EACE;;;AAKN;EACE;;AACA;EACE;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EACA;;AACA;EACE;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;;AACA;EACE;;AAGJ;EACE;EACA;;AAEF;EACE;EACA;EACA;;AAGJ;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAGA;EACE;;AAEF;EACE;;;AEreN;EACE;EACA;EACA;EACA;EACA;EACA;EACA,YHPY;;AGQZ;EACE;EACA;EACA;EACA;;AACA;EALF;IAMI;IACA;;;AAEF;EATF;IAUI;IACA;;;AAEF;EAbF;IAcI;;;AAEF;EACE;;AACA;EAFF;IAGI;;;AAEF;EACE;EACA;EACA;EACA;EACA;;AACA;EANF;IAOI;IACA;;;AAEF;EACE;EACA;EACA;;AACA;EAJF;IAKI;IACA;;;AAGJ;EACE;;AAKJ;EADF;IAEI;;;AAIN;EACE;;AACA;EAFF;IAGI;;;AAGJ;EACE;;AClEJ;EACE;EACA,OJFY;;AIGZ;EACE;;AAEF;EACE;EACA;;AAEF;EACE;;AACA;EACE;;AAEF;EACE;;;AChBN;EACE;;;AAOA;EACE,YLIW;EKHX;EACA;;AACA;EACE,YLDS;;AKGX;EACE;;AAGJ;EACE;EACA;EACA;EACA;;AACA;EALF;IAMI;;;AAEF;EACE;;AAEF;EACE;EACA;EACA;EACA;;AACA;EACE;;AACA;EAFF;IAGI;IACA;IACA;;;AAGJ;EACE;;AACA;EAFF;IAGI;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAOZ;EACE;;AAKF;EACE","file":"styles.css"}
{"version":3,"sourceRoot":"","sources":["components/_reset.scss","_variables.scss","components/_basic.scss","_mixins.scss","components/_header.scss","components/_footer.scss","components/_listing.scss"],"names":[],"mappings":"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EACA;;AACA;EAHF;IAII;IACA;;;AAKF;EACE;;AAEA;EACE;EACA;EACA;;AACA;EAJF;IAKI;;;AAOV;EACE;EACA;;AAGF;EACE;EACA;;;AAIJ;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA,ODrcY;ECscZ;;AAEA;EACE;;AAGF;EACE,YDzcY;;AC4cd;EACE;;;AAIJ;AAEA;EACE;EACA;EACA;;AAEA;EACE;;AAEA;EACE;;AAGF;EACE;;;AAMJ;EACE;;AAEA;EACE;;;AAKN;EACE;;AAEA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAIJ;EACE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;;AAIA;EACE;;AAGF;EACE;;;AAKN;EACE;;AAEA;EACE;EACA;;AAIF;EACE;;AAEA;EACE;EACA;;;AAMJ;EACE;EACA;EACA;;AACA;EAJF;IAKI;;;AAEF;EAPF;IAQI;;;AAGF;EACE;EACA;EACA;;AAEA;EACE;EACA;;AAEF;EACE;EACA;;AAKF;EACE;;AAKN;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;AAMA;EACE;EACA;EACA;EACA;EACA;;AAKN;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EAGE;;;AElrBR;EACE;EACA;EACA;EACA;EACA;EACA;EACA,YHPY;;AGQZ;EACE;EACA;EACA;EACA;;AACA;EALF;IAMI;IACA;;;AAEF;EATF;IAUI;IACA;;;AAEF;EAbF;IAcI;;;AAEF;EACE;;AACA;EAFF;IAGI;;;AAEF;EACE;EACA;EACA;EACA;EACA;;AACA;EANF;IAOI;IACA;;;AAEF;EACE;EACA;EACA;;AACA;EAJF;IAKI;IACA;;;AAGJ;EACE;;AAKJ;EADF;IAEI;;;AAIN;EACE;;AACA;EAFF;IAGI;;;AAGJ;EACE;;AClEJ;EACE;EACA,OJFY;;AIGZ;EACE;;AAEF;EACE;EACA;;AAEF;EACE;;AACA;EACE;;AAEF;EACE;;;AChBN;EACE;;;AAOA;EACE,YLIW;EKHX;EACA;;AACA;EACE,YLDS;;AKGX;EACE;;AAGJ;EACE;EACA;EACA;EACA;;AACA;EALF;IAMI;;;AAEF;EACE;;AAEF;EACE;EACA;EACA;EACA;;AACA;EACE;;AACA;EAFF;IAGI;IACA;IACA;;;AAGJ;EACE;;AACA;EAFF;IAGI;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAOZ;EACE;;AAKF;EACE","file":"styles.css"}

+ 1
- 1
httpdocs/src/Controller/AdminController.php Ver ficheiro

@@ -230,7 +230,7 @@ class AdminController extends AbstractController
if ($worksheet === null) {
return $this->json('Katalog exitiert nicht', 409);
}
$dompdf = UserRepository::renderCatalogue($twig, $worksheet);
$dompdf = UserRepository::renderWorksheetPDF($twig, $worksheet);
// Output the generated PDF to Browser (force download)
$fileName = "Arbeitsblatt_".$worksheet->getUser()->getId()."_".$worksheet->getCreationDate()->format('Y-m-d_H-i');
$dompdf->stream($fileName, [


+ 1
- 1
httpdocs/src/Controller/UserController.php Ver ficheiro

@@ -221,7 +221,7 @@ class UserController extends AbstractController
throw new \Exception('not allowed or not exists');
}

$dompdf = UserRepository::renderCatalogue($twig, $worksheet);
$dompdf = UserRepository::renderWorksheetPDF($twig, $worksheet);

// Output the generated PDF to Browser (force download)
$fileName = "Arbeitskarte_".$worksheet->getCreationDate()->format('Y-m-d_H-i');


+ 2
- 2
httpdocs/src/Repository/UserRepository.php Ver ficheiro

@@ -49,7 +49,7 @@ class UserRepository extends ServiceEntityRepository
/**
* Renders user catalogue
*/
public static function renderCatalogue(Environment $twig, UserWorksheet $worksheet)
public static function renderWorksheetPDF(Environment $twig, UserWorksheet $worksheet)
{
// Configure Dompdf according to your needs
$pdfOptions = new Options();
@@ -62,7 +62,7 @@ class UserRepository extends ServiceEntityRepository


// Retrieve the HTML generated in our twig file
$html = $twig->render('pages/worksheet.html.twig',
$html = $twig->render('pdf/pdf.html.twig',
[
'worksheet' => $worksheet,
'isPdf' => true


+ 1
- 1
httpdocs/templates/pages/risk_analysis.html.twig Ver ficheiro

@@ -71,7 +71,7 @@
</div>
</div>
</div>
<h2>Weitere Angaben</h2>
<h2>Zyklus und Bandbreite</h2>
<div class="row-box">
<div class="col-box">
<div class="form-fields">


+ 10
- 8
httpdocs/templates/pages/start.html.twig Ver ficheiro

@@ -20,13 +20,15 @@
</div>
</div>

<h2>Ihre bisher abgeschlossenen Arbeitskarten:</h2>
<ul>
{% for worksheet in worksheets %}
<li>
<a target="blank" href="/worksheet/{{ worksheet.id }}">{{ worksheet.dinNumber }} - {{ worksheet.dinAssetName }} (erstellt am: {{ worksheet.creationDate|date("d.m.Y H:i") }})</a>
</li>
{% endfor %}
</ul>
{% if (worksheets | length > 0) %}
<h2>Ihre bisher abgeschlossenen Arbeitskarten:</h2>
<ol class="worksheets">
{% for worksheet in worksheets %}
<li>
<a href="/worksheet/{{ worksheet.id }}">{{ worksheet.creationDate|date("d.m.Y H:i") }} | {{ worksheet.dinNumber }} - {{ worksheet.dinAssetName }}</a>
</li>
{% endfor %}
</ol>
{% endif %}

{% endblock %}

+ 12
- 72
httpdocs/templates/pages/worksheet.html.twig Ver ficheiro

@@ -3,77 +3,17 @@
{% block title %}MPP-Tool{% endblock %}

{% block body %}
<h1>Arbeitsblatt (erstellt am: {{ worksheet.creationDate|date("d.m.Y H:i") }})</h1>

<dl>
<dt>DIN</dt>
<dd>{{ worksheet.dinNumber }}</dd>
<dt>Anlage</dt>
<dd>{{ worksheet.dinAssetName }}</dd>
</dl>

<h2>Risikoanalyse</h2>
<dl>
<dt>Wie hoch ist die Ausfallwahrscheinlichkeit?</dt>
<dd>{{ worksheet.failureProbability }}</dd>
<dt>Wie hoch ist der Schaden bei Ausfall?</dt>
<dd>{{ worksheet.failureDamage }}</dd>
</dl>

<h2>Optimierungsckeck</h2>
<dl>
<dt>Wird durch die Wartung der Abnutzungsvorrat positiv beeinflusst?</dt>
<dd>{% if worksheet.maintenanceAdvantage == 1 %}Ja{% else %}nein{% endif %}</dd>
<dt>Kann durch eine Inspektion der Zustand der Anlage erkannt werden?</dt>
<dd>{% if worksheet.inspectionAdvantage == 1 %}Ja{% else %}nein{% endif %}</dd>
<dt>Genügt eine einfache Sichtkontrolle im Rahmen des regelmäßigen Rundgangs?</dt>
<dd>{% if worksheet.checkAdvantage == 1 %}Ja{% else %}nein{% endif %}</dd>
</dl>
<dl>
<dt>Aktueller Zyklus (in Monaten)</dt>
<dd>{{ worksheet.userCycleMonths }}</dd>
<dt>Bandbreite Anlage</dt>
<dd>{% if worksheet.bandwidth is not null %}{{ worksheet.bandwidth }}{% else %}-{% endif %}</dd>
</dl>

<h2>Ergebnis</h2>
<dl>
<dt>Empfehlung Wartung (in Monaten)</dt>
<dd>{{ worksheet.recMaintenanceCycleMonths }}</dd>
<dt>Empfehlung Inspektion (in Monaten)</dt>
<dd>{{ worksheet.recInspectionCycleMonths }}</dd>
<dt>Einsparpotential p.a. (%)</dt>
<dd>{{ worksheet.deviationPercentage }}</dd>
<dt>Einsparpotential p.a. (€)</dt>
<dd>{{ worksheet.deviationCosts }}</dd>
</dl>

<h2>Tätigkeiten</h2>
<dl>
{% for task in worksheet.userWorkSheetTasks %}
<dt>Abgrenzung</dt>
<dd>{% if task.delimitation is not null %}{{ task.delimitation }}{% else %}-{% endif %}</dd>
<dt>Tätigkeit</dt>
<dd>{{ task.task }}</dd>
<dt>Inspektion</dt>
<dd>{{ task.inspection }}</dd>
<dt>Wartung</dt>
<dd>{{ task.maintenance }}</dd>
<dt>Instandsetzung</dt>
<dd>{{ task.service }}</dd>
<dt>Sachverständiger</dt>
<dd>{{ task.expert }}</dd>
<dt>Sachkundige</dt>
<dd>{{ task.specialist }}</dd>
<dt>Fachkraft</dt>
<dd>{{ task.skilledPersonnel }}</dd>
<dt>Normative Grundlage</dt>
<dd>{{ task.norm }}</dd>
{% endfor %}
</dl>

{% if isPdf == false %}
<a href="{{ path('download', { uuid: worksheet.id }) }}" class="btn">Arbeitskarte als PDF herunterladen</a>
{% endif %}
<div class="mini-nav">
<a href="{{ path('start') }}">Zurück zur Übersicht</a>
</div>
<h1>Arbeitsblatt <span>(erstellt am: {{ worksheet.creationDate|date("d.m.Y H:i") }})</span></h1>
{% include 'snippets/worksheet-result.html.twig' with {
data: {
'worksheet': worksheet,
'isPdf': isPdf
}
} %}

<a href="{{ path('download', { uuid: worksheet.id }) }}" class="btn">Arbeitskarte als PDF herunterladen</a>

{% endblock %}

+ 20
- 453
httpdocs/templates/pdf/pdf.html.twig Ver ficheiro

@@ -4,44 +4,20 @@
<meta charset="UTF-8" />
<title>MPPTool</title>
<style>
body, table, td, th {text-align: left;font-size: 14px;line-height: 20px;font-weight: normal;font-style:normal;font-family: Arial, Verdana, sans-serif;}
body, table, td, th {text-align: left;font-size: 11px;line-height: 16px;font-weight: normal;font-style:normal;font-family: Arial, Verdana, sans-serif;}
table {margin: 0;}
h1, h2, h3, h4, h5, h6, p, table {padding: 0;margin: 0;}
h1, h2, h3, h4, h5, h6 {font-weight: bold;}
td, th {padding: 0;vertical-align: top;font-weight: normal;}
h1 {font-size: 24px;line-height: 32px;}
h2 {font-size: 20px;line-height: 28px;}
.right {text-align: right;}
.userinfo {font-size: 12px;line-height: 17px;}
.result {font-weight: bold;}
.line {display: block;background: #000000;height: 1px;width: 100%;}
.minitable,
.minitable th,
.minitable td {font-size: 12px;line-height: 17px;}
.minitable td {page-break-inside: avoid;padding-top: 2px;padding-bottom: 2px;}
.mini-all {background: #dddddd;}
.minitable span {display: block;}
.circle-2 {margin: 0 auto;width: 22px;height: 22px;overflow: hidden;position: relative;}
.circle-2 .d1 {width: 20px;position: absolute;left: 1px;bottom: 0;background: #bbbbbb;}
.mini-all .circle-2 .d1 {background: #ffffff;}
.circle-2.green .d1,
.mini-all .circle-2.green .d1 {background: #33cc00;}
.circle-2.green-2 .d1,
.mini-all .circle-2.green-2 .d1 {background: #669900;}
.circle-2.yellow .d1,
.mini-all .circle-2.yellow .d1 {background: #ffcc33;}
.circle-2.red .d1,
.mini-all .circle-2.red .d1 {background: #cc0000;}
.circle-2 .d2 {position: absolute;left: 0;top: 0;width: 20px;height: 20px;border-radius: 50%;border: 1px solid #bbbbbb;}
.mini-all .circle-2 .d2 {border-color: #ffffff;}
.circle-2.green .d2,
.mini-all .circle-2.green .d2 {border-color: #33cc00;}
.circle-2.green-2 .d2,
.mini-all .circle-2.green-2 .d2 {border-color: #669900;}
.circle-2.yellow .d2,
.mini-all .circle-2.yellow .d2 {border-color: #ffcc33;}
.circle-2.red .d2,
.mini-all .circle-2.red .d2 {border-color: #cc0000;}
.circle-2 .d3 {position: absolute;left: -10px;top: -10px;width: 22px;height: 22px;border-radius: 50%;border: 10px solid #fff;}
.mini-all .circle-2 .d3 {border-color: #dddddd;}
h1 {font-size: 24px;line-height: 32px;padding-bottom: 40px;}
h1 span {font-size: 11px;font-weight: normal;}
h2 {font-size: 20px;line-height: 28px;padding-bottom: 30px;}
h3 {font-size: 16px;line-height: 22px;padding-bottom: 15px;}
h4 {font-size: 13px;line-height: 18px;padding-bottom: 5px;}
.mini-table {width: 75%;margin: 0 0 40px 0;border-collapse: collapse;}
.mini-table td {page-break-inside: avoid;vertical-align: top;padding: 10px 0;border-bottom: 1px solid #000;}
.mini-table td:last-child {text-align: right;font-weight: bold;}
.mini-table td span {display: block;padding: 0 10px 0 0;}
</style>
</head>
<body>
@@ -50,424 +26,15 @@
<td colspan="2"><br /></td>
</tr>
<tr>
<td width="70%"><h1>MPPTool<br />
Ergebnis je Handlungsfeld und gesamt</h1></td>
<td width="30%" style="text-align: right;"><img src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/logos/real-fm.png" alt="Canzler GmbH" style="display: block;width: auto;height: 40px;" /></td>
<td width="70%"><h1>MPP Tool - Arbeitsblatt <span>(erstellt am: {{ worksheet.creationDate|date("d.m.Y H:i") }})</span></h1></td>
<td width="30%" style="text-align: right;"><img src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/logos/real-fm.png" alt="RealFM e.V." style="display: block;width: auto;height: 40px;" /></td>
</tr>
<tr>
<td colspan="2"><br /></td>
</tr>
</table>
<table width="100%">
<tr>
<td></td>
<td colspan="2">Dieses Dokument enthält die Bewertung des BIM-Reifegrades Ihrer FM- bzw. CREM-Organisation und erste Handlungsempfehlungen auf Basis des von Ihnen online ausgefüllten Fragenkataloges sowie eine Zusammenfassung der von Ihnen gegebenen Antworten.<br /><br />
Mit dem Ergebnis sollen ggf. fehlende Voraussetzungen identifiziert und damit notwendige Maßnahmen zur Erreichung eines höheren BIM-Reifegrades abgeleitet werden können.<br /><br />
In Anlehnung an die Handlungsfelder der VDI Agenda BIM war der Fragenkatalog in „Rahmenbedingungen“, „Prozesse“, „Menschen“ und „Technologien“ unterteilt.<br />
Die Abstufung bei den Antworten reichte dabei von "nicht erfüllt" bis zu "umfassend erfüllt", soweit die Fragestellung derzeit überhaupt relevant für die zu bewertende Organisation ist.<br /></td>
</tr>
<tr>
<td></td>
<td colspan="2">
<br />
<span class="line"></span>
<br />
</td>
</tr>
<tr>
<td></td>
<td colspan="2">In die Bewertung gingen alle Fragen (bzw. Anforderungen) ein, die der Nutzer des Fragebogens für seine individuelle Organisation als relevant eingestuft hat, das heißt, für die nicht Antwort (A) ausgewählt wurde.<br /><br />
Die einzelnen Fragen wurden für die Ermittlung der Prozentsätze von den an der Entwicklung Beteiligten auf Basis ihrer Expertise gewichtet.<br /><br />
Das Ergebnis der Selbsteinschätzung wird als Prozentsatz des erreichbaren Wertes ausgegeben, und zwar gesamt sowie bezogen auf das jeweilige Handlungsfeld.<br /></td>
</tr>
<tr>
<td></td>
<td colspan="2">
<br />
<span class="line"></span>
<br />
</td>
</tr>
<tr>
<td width="7%"></td>
<td width="50%"><br /></td>
<td width="43%"></td>
</tr>
</table>
{% for cat, res in result %}
<table width="100%">
<tr>
<td></td>
<td colspan="2"><strong>{{ cat }}</strong></td>
</tr>
<tr>
<td width="7%"></td>
<td width="50%">Anzahl relevanter/beantworteter Fragen:</td>
<td width="43%">{{ res.count }}</td>
</tr>
<tr>
<td></td>
<td>Anzahl Fragen Handlungsfeld gesamt:</td>
<td>{{ res.countAll }}</td>
</tr>
<tr>
<td></td>
<td>Maximal erreichbare Punkte:</td>
<td>{{ res.maxPoints }}</td>
</tr>
<tr>
<td></td>
<td>Erreichte Punktzahl:</td>
<td>{{ res.points | round | replace({'.': ','}) }}</td>
</tr>
<tr>
<td></td>
<td>Erreichte Prozentzahl:</td>
<td>{{ res.percentage | round(1) | replace({'.': ','}) }}%</td>
</tr>
<tr>
<td></td>
<td><br /></td>
<td></td>
</tr>
</table>
<table width="100%">
<tr>
<td width="7%"></td>
<td width="50%"><strong>Einstufung:</strong></td>
<td width="43%"></td>
</tr>
<tr>
<td></td>
<td colspan="2">{{ res.txtResult }}</td>
</tr>
<tr>
<td></td>
<td><br /></td>
<td></td>
</tr>
</table>
<table width="100%">
<tr>
<td width="7%"></td>
<td width="50%"><strong>Handlungsempfehlung:</strong></td>
<td width="43%"></td>
</tr>
<tr>
<td></td>
<td colspan="2">{{ res.txtAction }}</td>
</tr>
<tr>
<td></td>
<td colspan="2">
<br />
<span class="line"></span>
<br />
</td>
</tr>
<tr>
<td></td>
<td><br /></td>
<td></td>
</tr>
</table>
{% endfor %}
<table width="100%">
<tr>
<td></td>
<td colspan="2"><strong>Gesamt</strong></td>
</tr>
<tr>
<td width="7%"></td>
<td width="50%">Anzahl relevanter/beantworteter Fragen:</td>
<td width="43%">{{ total.count }}</td>
</tr>
<tr>
<td></td>
<td>Anzahl Fragen Handlungsfeld gesamt:</td>
<td>{{ total.countAll }}</td>
</tr>
<tr>
<td></td>
<td>Maximal erreichbare Punkte:</td>
<td>{{ total.maxPoints }}</td>
</tr>
<tr>
<td></td>
<td>Erreichte Punktzahl:</td>
<td>{{ total.points | round | replace({'.': ','}) }}</td>
</tr>
<tr>
<td></td>
<td>Erreichte Prozentzahl:</td>
<td>{{ total.percentage | round(1) | replace({'.': ','}) }}%</td>
</tr>
<tr>
<td></td>
<td><br /></td>
<td></td>
</tr>
</table>
<table width="100%">
<tr>
<td width="7%"></td>
<td width="50%"><strong>Einstufung:</strong></td>
<td width="43%"></td>
</tr>
<tr>
<td></td>
<td colspan="2">{{ total.txtResult }}</td>
</tr>
<tr>
<td></td>
<td><br /></td>
<td></td>
</tr>
</table>
<table width="100%">
<tr>
<td width="7%"></td>
<td width="50%"><strong>Handlungsempfehlung:</strong></td>
<td width="43%"></td>
</tr>
<tr>
<td></td>
<td colspan="2">{{ total.txtAction }}</td>
</tr>
<tr>
<td></td>
<td><br /><br /></td>
<td></td>
</tr>
</table>
<div style="page-break-inside: avoid;">
<table width="100%">
<tr>
<td><br /></td>
</tr>
<tr>
<td width="100%"><h1>MPPTool<br />
Ergebnisübersicht</h1></td>
</tr>
<tr>
<td><br /></td>
</tr>
</table>
<table width="100%" class="minitable">
<tr>
<td colspan="6"><br /></td>
</tr>
<tr class="mini-all">
<td><span style="padding-left: 5px;vertical-align: middle;">Anforderungskategorie<br />
(Handlungsfelder)</span></td>
<td style="text-align: center;vertical-align: middle;">Anzahl beantworteter / relevanter Fragen</td>
<td style="text-align: center;vertical-align: middle;">Maximal erreichbare Punktzahl</td>
<td style="text-align: center;vertical-align: middle;">Erreichte Punktzahl</td>
<td style="text-align: center;vertical-align: middle;">Erreichte Prozentzahl</td>
{# <td style="text-align: center;vertical-align: middle;">Ergebnis</td>#}
<td style="text-align: center;vertical-align: middle;">Ergebnis</td>
</tr>
{% for cat, res in result %}
<tr>
<td style="font-weight: bold;vertical-align: middle;"><span style="padding-left: 5px;">{{ cat }}</span></td>
<td style="text-align: center;vertical-align: middle;">{{ res.count }}</td>
<td style="text-align: center;vertical-align: middle;">{{ res.maxPoints }}</td>
<td style="text-align: center;vertical-align: middle;">{{ res.points | round | replace({'.': ','}) }}</td>
<td style="text-align: center;vertical-align: middle;">{{ res.percentage | round(1) | replace({'.': ','}) }}%</td>
{# <td style="text-align: center;vertical-align: middle;">#}
{# {% if res.percentage | round(1) > 67 %}#}
{# <img style="width: 22px;height: auto;" src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/elements/512px-Eo_circle_green_white_checkmark.svg.png" alt="" />#}
{# {% elseif res.percentage | round(1) > 50 %}#}
{# <img style="width: 22px;height: auto;" src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/elements/yellow_circle.png" alt="" />#}
{# {% else %}#}
{# <img style="width: 22px;height: auto;" src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/elements/512px-Cross_red_circle.svg.png" alt="" />#}
{# {% endif %}#}
{# </td>#}
<td style="text-align: center;vertical-align: middle;">
<div class="circle-2 {% if res.percentage | round(1) >= 81 %}green{% elseif res.percentage | round(1) >= 67 %}green-2{% elseif res.percentage | round(1) >= 50 %}yellow{% else %}red{% endif %}"><div class="d1" style="height: {{ res.percentage | round(1) }}%;"></div><div class="d2"></div><div class="d3"></div></div>
</td>
</tr>
{% endfor %}
<tr class="mini-all">
<td style="font-weight: bold;vertical-align: middle;"><span style="padding-left: 5px;">Gesamt</span></td>
<td style="text-align: center;vertical-align: middle;">{{ total.count }}</td>
<td style="text-align: center;vertical-align: middle;">{{ total.maxPoints }}</td>
<td style="text-align: center;vertical-align: middle;">{{ total.points | round | replace({'.': ','}) }}</td>
<td style="text-align: center;vertical-align: middle;">{{ total.percentage | round(1) | replace({'.': ','}) }}%</td>
{# <td style="text-align: center;vertical-align: middle;">#}
{# {% if total.percentage | round(1) > 67 %}#}
{# <img style="width: 22px;height: auto;" src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/elements/512px-Eo_circle_green_white_checkmark.svg.png" alt="" />#}
{# {% elseif total.percentage | round(1) > 50 %}#}
{# <img style="width: 22px;height: auto;" src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/elements/yellow_circle.png" alt="" />#}
{# {% else %}#}
{# <img style="width: 22px;height: auto;" src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/elements/512px-Cross_red_circle.svg.png" alt="" />#}
{# {% endif %}#}
{# </td>#}
<td style="text-align: center;vertical-align: middle;">
<div class="circle-2 {% if total.percentage | round(1) >= 81 %}green{% elseif total.percentage | round(1) >= 67 %}green-2{% elseif total.percentage | round(1) >= 50 %}yellow{% else %}red{% endif %}"><div class="d1" style="height: {{ total.percentage | round(1) }}%;"></div><div class="d2"></div><div class="d3"></div></div>
</td>
</tr>
<tr>
<td colspan="6"><br /><br /></td>
</tr>
</table>
</div>
<table width="100%">
<tr>
<td colspan="4" width="100%"><h1>Beteiligte Beratungsunternehmen</h1></td>
</tr>
<tr>
<td colspan="4"><br /></td>
</tr>
<tr>
<td></td>
<td colspan="3">Für weiterführende Erläuterungen/ Interpretationen Ihrer Ergebnisse, detailliertere Analysen, externe Audits, Projektunterstützung, Implementierungs-Beratung oder Unterstützung bei der Verbesserung Ihres BIM-Reifegrades stehen Ihnen folgende Ansprechpartner der beteiligten Beratungsunternehmen zur Verfügung:<br /><br /></td>
</tr>
<tr>
<td width="7%">&nbsp;</td>
<td width="15%" style="vertical-align: middle;"><img src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/logos/logo-drodin.png" alt="Dr. Odin GmbH" style="display: block;width: auto;height: 58px;margin:5px 0;" /></td>
<td width="5%">&nbsp;</td>
<td valign="center" width="73%" style="vertical-align: middle;">Ulrich Pieper // Dr. Odin GmbH (<a href="mailto:ulrich.pieper@dr-odin.de">ulrich.pieper@dr-odin.de</a>), <a href="https://www.dr-odin.de" target="_blank">https://www.dr-odin.de</a></td>
</tr>
<tr>
<td></td>
<td style="vertical-align: middle;"><img src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/logos/logo-tuev.png" alt="TÜV SÜD Advimo GmbH" style="display: block;width: auto;height: 58px;margin:5px 0;" /></td>
<td></td>
<td valign="center" style="vertical-align: middle;">Matthias Mosig // TÜV SÜD Advimo GmbH (<a href="mailto:matthias.mosig@tuvsud.com">matthias.mosig@tuvsud.com</a>), <a href="https://www.tuvsud.com/de-de/branchen/real-estate/immobilien/bauphysik-und-bautechnik/was-ist-bim/bim-beratung" target="_blank">https://www.tuvsud.com/de-de/branchen/real-estate/immobilien/bauphysik-und-bautechnik/was-ist-bim/bim-beratung</a></td>
</tr>
<tr>
<td></td>
<td style="vertical-align: middle;"><img src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/logos/logo-canzler.png" alt="Canzler GmbH" style="display: block;width: auto;height: 58px;margin:5px 0;" /></td>
<td></td>
<td valign="center" style="vertical-align: middle;">Andreas Rausch // Canzler GmbH (<a href="mailto:andreas.rausch@canzler.de">andreas.rausch@canzler.de</a>), <a href="https://www.canzler.de" target="_blank">https://www.canzler.de</a></td>
</tr>
<tr>
<td></td>
<td colspan="3"><br /><br />Verband und Arbeitskreis danken den oben genannten Unternehmen, die nicht nur ihr Know-How in die Entwicklung des Online-Tools „MPPTool“ eingebracht haben, sondern diese auch als Sponsoren unterstützt haben.<br /><br /></td>
</tr>
<tr>
<td></td>
<td colspan="3">
<span class="line"></span>
<br />
</td>
</tr>
<tr>
<td></td>
<td style="vertical-align: middle;"><img src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/logos/real-fm.png" alt="Canzler GmbH" style="display: block;width: auto;height: 58px;" /></td>
<td></td>
<td valign="center" style="vertical-align: middle;">RealFM e.V. | Schiffbauerdamm 40 / Büro 5407 | 10117 Berlin<br />
<strong>T</strong> +49 (0)30 20 65 39 81 | <strong>E</strong> <a href="mailto:office@realfm.de">office@RealFM.de</a> | <strong>W</strong> <a href="https://www.realfm.de">www.RealFM.de</a></td>
</tr>
<tr>
<td></td>
<td></td>
<td><br /><br /></td>
<td></td>
</tr>
</table>
<table width="100%">
<tr>
<td width="50%"><h1>BIM-Selbstbewertung</h1></td>
<td width="50%"></td>
</tr>
<tr>
<td></td>
<td class="right userinfo">{{ user.firstname }} {{ user.lastname }}</td>
</tr>
<tr>
<td></td>
<td class="right userinfo">{{ user.email }}</td>
</tr>
<tr>
<td></td>
<td class="right userinfo">{{ user.company }}</td>
</tr>
</table>
<br />
<br />
<br />
{% set i = 1 %}
{% set qType = "" %}
<table width="100%">
{% for catalogueDetail in catalogue.catalogueDetails %}
{% if i != 1 %}
<tr>
<td></td>
<td></td>
<td>
<span class="line"></span>
<br />
</td>
</tr>
{% endif %}
{% if catalogueDetail.question.questionType.type != qType %}
{% set qType = catalogueDetail.question.questionType.type %}
<tr>
<td width="5%"></td>
<td width="2%"></td>
<td width="95%">
<h2>{{ catalogueDetail.question.questionType.type }}</h2>
</td>
</tr>
<tr>
<td><br /></td>
<td></td>
<td></td>
</tr>
{% endif %}
<tr>
<td class="right">{{ i }}<br /><br /></td>
<td></td>
<td>{{ catalogueDetail.question.questionText }}<br /><br /></td>
</tr>
<tr>
<td></td>
<td></td>
<td class="result">
{% if catalogueDetail.answer == 'fulfilled' %}
(E) Umfassend erfüllt
{% elseif catalogueDetail.answer == 'widely_fulfilled' %}
(D) Weitgehend erfüllt
{% elseif catalogueDetail.answer == 'partly_fulfilled' %}
(C) Teilweise erfüllt
{% elseif catalogueDetail.answer == 'not_fulfilled' %}
(B) Nicht erfüllt
{% else %}
(A) Derzeit für meine Organisation nicht relevant
{% endif %}
<br />
</td>
</tr>
<tr>
<td></td>
<td></td>
<td>
{% if catalogueDetail.answer == 'fulfilled' %}
100% von erreichbaren {{ catalogueDetail.question.weight }} Punkten = <strong>{{ catalogueDetail.question.weight }} Punkte</strong>
{% elseif catalogueDetail.answer == 'widely_fulfilled' %}
66,67% von erreichbaren {{ catalogueDetail.question.weight }} Punkten = <strong>{{ catalogueDetail.question.weight * 0.6667 | round(1) }} Punkte</strong>
{% elseif catalogueDetail.answer == 'partly_fulfilled' %}
33,33% von erreichbaren {{ catalogueDetail.question.weight }} Punkten = <strong>{{ catalogueDetail.question.weight * 0.3333 | round(1) }} Punkte</strong>
{% elseif catalogueDetail.answer == 'not_fulfilled' %}
0% von erreichbaren {{ catalogueDetail.question.weight }} Punkten = <strong>0 Punkte</strong>
{% endif %}
<br /><br />
</td>
</tr>
{% if catalogueDetail.note is not null and catalogueDetail.note != "" %}
<tr>
<td></td>
<td></td>
<td>
Feststellung/Anmerkung:<br />
{{ catalogueDetail.note | raw }}
<br /><br />
</td>
</tr>
{% endif %}
{% set i = i + 1 %}
{% endfor %}
</table>
{% include 'snippets/worksheet-result.html.twig' with {
data: {
'worksheet': worksheet,
'isPdf': isPdf
}
} %}
</body>
</html>

+ 3
- 3
httpdocs/templates/snippets/listing-form.html.twig Ver ficheiro

@@ -7,7 +7,7 @@
firstname: "",
lastname: "",
phoneNo: "",
maxCatalogues: "3",
maxWorksheets: "5",
company: "",
department: "",
occupation: "",
@@ -43,8 +43,8 @@
<input type="text" value="{{ user.phoneNo }}" name="phoneNo" id="inputPhonenumber{{ user.id }}" />
</div>
<div class="form--wrapper mandatory">
<label for="inputMaxCatalogues{{ user.id }}">Max. Anzahl Durchgänge *</label>
<input type="number" step="1" value="{{ user.maxWorksheets }}" name="maxCatalogues" id="inputMaxCatalogues{{ user.id }}" required />
<label for="inputMaxWorksheets{{ user.id }}">Max. Anzahl Durchgänge *</label>
<input type="number" step="1" value="{{ user.maxWorksheets }}" name="maxWorksheets" id="inputMaxWorksheets{{ user.id }}" required />
</div>
<div class="form--wrapper">
<label for="inputValidUntilDate{{ user.id }}">Lizenz gültig bis</label>


+ 209
- 0
httpdocs/templates/snippets/worksheet-result.html.twig Ver ficheiro

@@ -0,0 +1,209 @@
<h2>DIN {{ worksheet.dinNumber }} | {{ worksheet.dinAssetName }}</h2>

<h3>Risikoanalyse</h3>
<table class="mini-table">
<tr>
<td><span>Wie hoch ist die Ausfallwahrscheinlichkeit?</span></td>
<td>{{ worksheet.failureProbability }}</td>
</tr>
<tr>
<td><span>Wie hoch ist der Schaden bei Ausfall?</span></td>
<td>{{ worksheet.failureDamage }}</td>
</tr>
</table>

<h3>Optimierungsckeck</h3>
<table class="mini-table">
<tr>
<td><span>Wird durch die Wartung der Abnutzungsvorrat positiv beeinflusst?</span></td>
<td>{% if worksheet.maintenanceAdvantage == 1 %}Ja{% else %}nein{% endif %}</td>
</tr>
<tr>
<td><span>Kann durch eine Inspektion der Zustand der Anlage erkannt werden?</span></td>
<td>{% if worksheet.inspectionAdvantage == 1 %}Ja{% else %}nein{% endif %}</td>
</tr>
<tr>
<td><span>Genügt eine einfache Sichtkontrolle im Rahmen des regelmäßigen Rundgangs?</span></td>
<td>{% if worksheet.checkAdvantage == 1 %}Ja{% else %}nein{% endif %}</td>
</tr>
</table>

<h3>Zyklus und Bandbreite</h3>
<table class="mini-table">
<tr>
<td><span>Aktueller Zyklus (in Monaten)</span></td>
<td>{{ worksheet.userCycleMonths }}</td>
</tr>
<tr>
<td><span>Bandbreite Anlage</span></td>
<td>{% if worksheet.bandwidth is not null %}{{ worksheet.bandwidth }}{% else %}-{% endif %}</td>
</tr>
</table>

<h3>Ergebnis</h3>
<table class="mini-table">
<tr>
<td><span>Empfehlung Wartung (in Monaten)</span></td>
<td>{{ worksheet.recMaintenanceCycleMonths }}</td>
</tr>
<tr>
<td><span>Empfehlung Inspektion (in Monaten)</span></td>
<td>{{ worksheet.recInspectionCycleMonths }}</td>
</tr>
<tr>
<td><span>Einsparpotential p.a. (%)</span></td>
<td>{{ worksheet.deviationPercentage * 100 }}%</td>
</tr>
<tr>
<td><span>Einsparpotential p.a. (€)</span></td>
<td>{{ worksheet.deviationCosts | replace({'.': ','}) }} €</td>
</tr>
</table>

<h3 style="page-break-before: always;">Tätigkeiten</h3>
{% if isPdf == false %}
<div class="worksheet-table">
<table>
<thead>
<tr>
<th></th>
<th><span>Aufgabe</span></th>
<th><span>Abgrenzung</span></th>
<th><span>Inspektion</span></th>
<th><span>Wartung</span></th>
<th><span>Instandsetzung</span></th>
<th><span>Sachverständiger</span></th>
<th><span>Sachkundige</span></th>
<th><span>Fachkraft</span></th>
<th><span>Normative Grundlage</span></th>
</tr>
</thead>
<tbody>
{% for index, task in worksheet.userWorkSheetTasks %}
<tr>
<td>{{ index + 1 }}. </td>
<td>{{ task.task }}</td>
<td>{% if task.delimitation is not null %}{{ task.delimitation }}{% else %}-{% endif %}</td>
<td>
{% if task.inspection == 1 %}
<img style="width: 22px;height: auto;" src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/elements/512px-Eo_circle_green_white_checkmark.svg.png" alt="" />
{% else %}
<img style="width: 22px;height: auto;" src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/elements/512px-Cross_red_circle.svg.png" alt="" />
{% endif %}
</td>
<td>
{% if task.maintenance == 1 %}
<img style="width: 22px;height: auto;" src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/elements/512px-Eo_circle_green_white_checkmark.svg.png" alt="" />
{% else %}
<img style="width: 22px;height: auto;" src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/elements/512px-Cross_red_circle.svg.png" alt="" />
{% endif %}
</td>
<td>
{% if task.service == 1 %}
<img style="width: 22px;height: auto;" src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/elements/512px-Eo_circle_green_white_checkmark.svg.png" alt="" />
{% else %}
<img style="width: 22px;height: auto;" src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/elements/512px-Cross_red_circle.svg.png" alt="" />
{% endif %}
</td>
<td>
{% if task.expert == 1 %}
<img style="width: 22px;height: auto;" src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/elements/512px-Eo_circle_green_white_checkmark.svg.png" alt="" />
{% else %}
<img style="width: 22px;height: auto;" src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/elements/512px-Cross_red_circle.svg.png" alt="" />
{% endif %}
</td>
<td>
{% if task.specialist == 1 %}
<img style="width: 22px;height: auto;" src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/elements/512px-Eo_circle_green_white_checkmark.svg.png" alt="" />
{% else %}
<img style="width: 22px;height: auto;" src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/elements/512px-Cross_red_circle.svg.png" alt="" />
{% endif %}
</td>
<td>
{% if task.skilledPersonnel == 1 %}
<img style="width: 22px;height: auto;" src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/elements/512px-Eo_circle_green_white_checkmark.svg.png" alt="" />
{% else %}
<img style="width: 22px;height: auto;" src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/elements/512px-Cross_red_circle.svg.png" alt="" />
{% endif %}
</td>
<td>{{ task.norm }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% else %}
{% for index, task in worksheet.userWorkSheetTasks %}
<h4>{{ index + 1 }}. {{ task.task }}</h4>
<table class="mini-table fifty-fifty">
<tr>
<td>Abgrenzung</td>
<td>{% if task.delimitation is not null %}{{ task.delimitation }}{% else %}-{% endif %}</td>
</tr>
<tr>
<td>Inspektion</td>
<td>
{% if task.inspection == 1 %}
<img style="width: 18px;height: auto;" src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/elements/512px-Eo_circle_green_white_checkmark.svg.png" alt="" />
{% else %}
<img style="width: 18px;height: auto;" src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/elements/512px-Cross_red_circle.svg.png" alt="" />
{% endif %}
</td>
</tr>
<tr>
<td>Wartung</td>
<td>
{% if task.maintenance == 1 %}
<img style="width: 18px;height: auto;" src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/elements/512px-Eo_circle_green_white_checkmark.svg.png" alt="" />
{% else %}
<img style="width: 18px;height: auto;" src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/elements/512px-Cross_red_circle.svg.png" alt="" />
{% endif %}
</td>
</tr>
<tr>
<td>Instandsetzung</td>
<td>
{% if task.service == 1 %}
<img style="width: 18px;height: auto;" src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/elements/512px-Eo_circle_green_white_checkmark.svg.png" alt="" />
{% else %}
<img style="width: 18px;height: auto;" src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/elements/512px-Cross_red_circle.svg.png" alt="" />
{% endif %}
</td>
</tr>
<tr>
<td>Sachverständiger</td>
<td>
{% if task.expert == 1 %}
<img style="width: 18px;height: auto;" src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/elements/512px-Eo_circle_green_white_checkmark.svg.png" alt="" />
{% else %}
<img style="width: 18px;height: auto;" src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/elements/512px-Cross_red_circle.svg.png" alt="" />
{% endif %}
</td>
</tr>
<tr>
<td>Sachkundige</td>
<td>
{% if task.specialist == 1 %}
<img style="width: 18px;height: auto;" src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/elements/512px-Eo_circle_green_white_checkmark.svg.png" alt="" />
{% else %}
<img style="width: 18px;height: auto;" src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/elements/512px-Cross_red_circle.svg.png" alt="" />
{% endif %}
</td>
</tr>
<tr>
<td>Fachkraft</td>
<td>
{% if task.skilledPersonnel == 1 %}
<img style="width: 18px;height: auto;" src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/elements/512px-Eo_circle_green_white_checkmark.svg.png" alt="" />
{% else %}
<img style="width: 18px;height: auto;" src="{{ app.request.getSchemeAndHttpHost() }}/assets/images/elements/512px-Cross_red_circle.svg.png" alt="" />
{% endif %}
</td>
</tr>
<tr>
<td>Normative Grundlage</td>
<td>{{ task.norm }}</td>
</tr>
</table>
{% endfor %}
{% endif %}

Carregando…
Cancelar
Guardar