{%- macro tableRow(label, value, options = {}) -%}
{%- set class = options.class|default({}) -%}
{%- set prepend = options.prepend|default({}) %}
{% set append = options.append|default({}) -%}
{% apply spaceless %}
{% if label and value %}
[
{# { text: '{{- label -}}', color: '#357792' }, #}
{ text: '{{- label -}}' },
{# { text: '{% if prepend %}{{ prepend }}{% endif %}{{- value -}}{% if append %}{{ append }}{% endif %}', color: '#001118', bold: true }, #}
{ text: '{% if prepend %}{{ prepend }}{% endif %}{{- value -}}{% if append %}{{ append }}{% endif %}', bold: true },
],
{% endif %}
{% endapply %}
{%- endmacro -%}
{# <div id="iFrameContainer"></div> #}
<script src="/bundles/vonrotenbergrealestatelisting/js/pdfmake.js"></script>
<script src="/bundles/vonrotenbergrealestatelisting/js/vfs_fonts.js"></script>
<script>
var docDefinition = {
pageSize: 'A4',
pageOrientation: 'portrait',
pageMargins: [{{ 15|mm2pt }},{{ 35|mm2pt }},{{ 15|mm2pt }},{{ 15|mm2pt }}],
info: {
title: 'riel-expose-nr_{{ item.assetNo }}-{{ "now"|date("Y-m-d") }}',
author: 'vonRotenberg Estate Manager',
creator: 'vonRotenberg Estate Manager',
producer: 'vonRotenberg Estate Manager',
subject: 'Expose für Objekt-Nr. {{ item.assetNo }}'
},
defaultStyle: {
font: 'Roboto',
fontSize: 11,
lineHeight: 1.1
},
styles: {
h3: {
fontSize: 13,
bold: true,
margin: [0, 0, 0,{{ 1.25|mm2pt }}]
},
h4: {
fontSize: 13,
// color: '#1476BB',
margin: [0, 0, 0,{{ 1.25|mm2pt }}]
}
},
header: function (currentPage, pageCount, pageSize) {
if (currentPage === 1)
{
return [
{
stack: [
{
image: '{{ 'bundles/vonrotenbergrealestatelisting/images/pdf_logo.png'|imageDataUrl }}',
width: {{ 35|mm2pt }},
alignment: 'center'
},
],
margin: [{{ 15|mm2pt }},{{ 5|mm2pt }},{{ 15|mm2pt }}, 0]
},
];
}
return [];
},
footer: function (currentPage, pageCount, pageSize) {
if (pageCount > 1)
{
return [
{
stack: [
{
text: 'Seite: ' + currentPage + '/' + pageCount,
alignment: 'right',
margin: [0, 0, 0, 0],
color: '#666'
}
],
margin: [{{ 15|mm2pt }},{{ 5|mm2pt }},{{ 15|mm2pt }}, 0]
},
];
}
return [];
},
content: [
{
columns: [
{
stack: [
{
text: '{{ item.title }}',
fontSize: 20,
margin: [0, 0, 0,{{ 2.5|mm2pt }}],
color: '#1476BB'
},
{% if item.address %}
{
text: '{{ item.address }}',
fontSize: 16,
margin: [0, 0, 0, 0]
},
{% endif %}
{% if item.city and item.postal %}
{
text: '{{ item.postal }} {{ item.city }}',
fontSize: 16,
margin: [0, 0, 0, 0]
},
{% endif %}
{
text: 'Objekt-Nr.: {{ item.assetNo }}',
fontSize: 14,
color: '#1476BB',
margin: [0, {{ 2.5|mm2pt }}, 0,{{ 5|mm2pt }}]
},
{
qr: '{{ item.qrUrl }}',
fit: 80
}
{# {% if item.description %}
{
text: '{{ 'MSC.re_description'|trans({}, 'contao_default') }}',
style: 'h3',
margin: [0, {{ 10|mm2pt }}, 0, 0],
},
{
text: '{{ item.description|raw|striptags }}',
margin: [0, 0, 0,{{ 10|mm2pt }}],
}
{% endif %} #}
],
width: '*'
},
{
stack: [
{
image: '{{ item.teaserFigure.getImage().getFilePath()|imageDataUrl }}',
fit: [{{ 85|mm2pt }},{{ 85|mm2pt }}],
alignment: 'right'
}
],
width: '*'
}
],
margin: [0, 0, 0,{{ 10|mm2pt }}],
columnGap: {{ 5|mm2pt }}
},
{% if item.description %}
{
text: '{{ 'MSC.re_description'|trans({}, 'contao_default') }}',
style: 'h3'
},
{
table: {
widths: ['*'],
body: [
[
{
text: '{{ item.description|raw|striptags|replace({ '\r\n': '\\r\\n', '\n': '\\n', '\r': '\\r' }) }}',
margin: [15, 10, 15, 10],
// color: '#357792'
}
]
]
},
fillColor: '#e6ebf1',
layout: 'noBorders',
margin: [0, 0, 0,{{ 8|mm2pt }}],
},
{% endif %}
{
columns: [
{
stack: [
{
text: '{{ 'MSC.re_properties'|trans({}, 'contao_default') }}',
style: 'h3'
},
{
table: {
widths: ['*'],
body: [
[
{
stack: [
{
table: {
widths: ['40%', '*'],
body: [
{% if item.livingSpace is defined and item.livingSpace is not empty %}{{ _self.tableRow('tl_vr_real_estate_assets.livingSpace.0'|trans({}, 'contao_default'),item.livingSpace|number_format(2, ',', ''),{ append: ' m²'}) }}{% endif %}
{% if item.numberOfRooms is defined and item.numberOfRooms is not empty %}{{ _self.tableRow('tl_vr_real_estate_assets.numberOfRooms.0'|trans({}, 'contao_default'),item.numberOfRooms) }}{% endif %}
{% if item.condition is defined and item.condition is not empty %}{{ _self.tableRow('tl_vr_real_estate_assets.condition.0'|trans({}, 'contao_default'),('REF.re_condition.' ~ item.condition)|trans({}, 'contao_default')) }}{% endif %}
{% if item.constructionYear is defined and item.constructionYear is not empty %}{{ _self.tableRow('tl_vr_real_estate_assets.constructionYear.0'|trans({}, 'contao_default'),item.constructionYear) }}{% endif %}
],
},
layout: 'noBorders',
margin: [15, 10, 15, 5],
},
{% if item.heatingType is not empty and item.energyConsumption is not empty and item.energyPassType is not empty %}
{
table: {
widths: ['40%', '*'],
body: [
{% if item.heatingType is defined and item.heatingType is not empty %}{{ _self.tableRow('tl_vr_real_estate_assets.heatingType.0'|trans({}, 'contao_default'),('REF.re_heatingType.' ~ item.heatingType)|trans({}, 'contao_default')) }}{% endif %}
{% if item.energyConsumption and item.energyPassType %}
{{ _self.tableRow('MSC.re_energyConsumption'|trans({}, 'contao_default')|replace({'­' : '-'}) ~ ' ' ~ ('REF.re_energyPassType.' ~ item.energyPassType)|trans({}, 'contao_default'),item.energyConsumption,{ append: ' kWh/(m²a)'}) }}
{% endif %}
],
},
layout: 'noBorders',
margin: [15, 5, 15, 5],
},
{% endif %}
{
text: '{{ 'MSC.re_rent'|trans({}, 'contao_default') }}',
style: 'h4',
margin: [15, 5, 15, 5],
},
{
table: {
widths: ['40%', '*'],
body: [
{% if item.coldRent > 0 %}{{ _self.tableRow('tl_vr_real_estate_assets.coldRent.0'|trans({}, 'contao_default'),item.coldRent|number_format(2, ',', ''),{ append: ' €'}) }}{% endif %}
{% if item.advanceOperatingCosts > 0 %}{{ _self.tableRow('tl_vr_real_estate_assets.advanceOperatingCosts.0'|trans({}, 'contao_default')|replace({'­' : '-'}),item.advanceOperatingCosts|number_format(2, ',', ''),{ append: ' €'}) }}{% endif %}
{% if item.rent > 0 %}{{ _self.tableRow('tl_vr_real_estate_assets.rent.0'|trans({}, 'contao_default')|replace({'­' : '-'}),item.rent|number_format(2, ',', ''),{ append: ' €'}) }}{% endif %}
],
},
layout: 'noBorders',
margin: [15, 5, 15, 5],
},
{
table: {
widths: ['40%', '*'],
body: [
{{ _self.tableRow('tl_vr_real_estate_assets.deposit.0'|trans({}, 'contao_default')|replace({'­' : '-'}),item.deposit|number_format(2, ',', ''),{ append: ' €'}) }}
{{ _self.tableRow('tl_vr_real_estate_assets.availability.0'|trans({}, 'contao_default'),item.availableFrom) }}
],
},
layout: 'noBorders',
margin: [15, 5, 15, 10],
},
]
}
]
]
},
fillColor: '#e6ebf1',
layout: 'noBorders',
},
],
width: '*',
}{% if item.features is iterable and item.features|length > 0 or item.parking is iterable and item.parking|length > 0 %},
{
stack: [
{% if item.parking is iterable and item.parking|length > 0 %}
{
text: '{{ 'MSC.re_parking'|trans({}, 'contao_default') }}',
style: 'h3'
},
{
table: {
widths: ['*'],
body: [
[
{
stack: [
{
table: {
widths: [10, '*'],
body: [
{% for spot in item.parking %}
{% set parkingTrans = 'REF.re_parking.' ~ spot %}
[
{
canvas: [
{
type: 'ellipse',
x: 5, y: 6,
lineColor: 'black',
lineWidth: 1,
r1: 5, r2: 5
},
{
type: 'polyline',
lineWidth: 1,
closePath: false,
points: [
{x: 3, y: 5},
{x: 5, y: 8},
{x: 10, y: 1}
],
lineColor: '#1476BB'
}
]
},
{
text: '{{ parkingTrans|trans({}, 'contao_default') }}',
// color: '#357792'
}
],
{% endfor %}
],
},
layout: 'noBorders',
margin: [15, 10, 15, 10],
},
]
}
]
]
},
fillColor: '#e6ebf1',
layout: 'noBorders',
margin: [0,0,0,10],
},
{% endif %}
{% if item.features is iterable and item.features|length > 0 %}
{
text: '{{ 'MSC.re_features'|trans({}, 'contao_default') }}',
style: 'h3'
},
{
table: {
widths: ['*'],
body: [
[
{
stack: [
{
table: {
widths: [10, '*'],
body: [
{% for feature in item.features %}
{% set featureTrans = 'REF.re_features.' ~ feature %}
[
{
canvas: [
{
type: 'ellipse',
x: 5, y: 6,
lineColor: 'black',
lineWidth: 1,
r1: 5, r2: 5
},
{
type: 'polyline',
lineWidth: 1,
closePath: false,
points: [
{x: 3, y: 5},
{x: 5, y: 8},
{x: 10, y: 1}
],
lineColor: '#1476BB'
}
]
},
{
text: '{{ featureTrans|trans({}, 'contao_default') }}',
// color: '#357792'
}
],
{% endfor %}
],
},
layout: 'noBorders',
margin: [15, 10, 15, 10],
},
]
}
]
]
},
fillColor: '#e6ebf1',
layout: 'noBorders',
},
{% endif %}
],
width: '*'
}{% endif %}
],
margin: [0, 0, 0,{{ 8|mm2pt }}],
columnGap: {{ 5|mm2pt }},
unbreakable: true
},
{% if item.hasProperty %}
{
text: '{{ 'MSC.re_managed_property_info'|trans({}, 'contao_default') }}',
style: 'h3',
pageBreak: 'before'
},
{
table: {
widths: ['*'],
body: [
[
{
columns: [
{
stack: [
{% if item.property.description %}
{
text: '{{ item.property.description|raw|striptags|replace({ '\r\n': '\\r\\n', '\n': '\\n', '\r': '\\r' }) }}',
margin: [0, 0, 0,0],
}
{% endif %}
],
width: '*'
},
{
stack: [
{
image: '{{ item.teaserFigure.getImage().getFilePath()|imageDataUrl }}',
fit: [{{ 85|mm2pt }},{{ 85|mm2pt }}],
alignment: 'right'
}
],
width: '*'
}
],
margin: [15, 10, 15, 10],
columnGap: {{ 5|mm2pt }}
}
]
]
},
fillColor: '#e6ebf1',
layout: 'noBorders',
margin: [0, 0, 0,{{ 8|mm2pt }}],
},
{% endif %}
{% if item.floorPlansFigures|length > 0 %}
{
text: '{{ 'MSC.re_floorPlan'|trans({}, 'contao_default') }}',
style: 'h3',
pageBreak: 'before'
},
{% for image in item.floorPlansFigures %}
{
image: '{{ image.getImage().getFilePath()|imageDataUrl }}',
fit: [{{ 180|mm2pt }},{{ 180|mm2pt }}],
alignment: 'center'
},
{% endfor %}
{% endif %}
{% if item.galleryFigures|length > 1 %}
{
text: '{{ 'MSC.re_gallery'|trans({}, 'contao_default') }}',
style: 'h3',
pageBreak: 'before'
},
{
columns: [
{% for image in item.galleryFigures[1:] %}
{% if loop.index % 2 > 0 and loop.index > 1 %}
],
columnGap: {{ 5|mm2pt }},
margin: [0, 0, 0,{{ 5|mm2pt }}],
},
{
columns: [
{% endif %}
{
image: '{{ image.getImage().getFilePath()|imageDataUrl }}',
width: {{ 85|mm2pt }},
alignment: 'left'
},
{% endfor %}
],
columnGap: {{ 5|mm2pt }}
}
{% endif %}
],
pageBreakBefore(currentNode, followingNodesOnPage, nodesOnNextPage, previousNodesOnPage) {
return currentNode.pageNumbers.length > 1 && currentNode.unbreakable;
}
};
const pdfDocGenerator = pdfMake.createPdf(docDefinition);
/*pdfDocGenerator.getDataUrl((dataUrl) => {
const targetElement = document.querySelector('#iframeContainer');
const iframe = document.createElement('object');
iframe.data = dataUrl;
iframe.setAttribute('style','width: 100%; height: 80vh;');
iframe.setAttribute('type','application/pdf');
targetElement.appendChild(iframe);
});*/
// pdfDocGenerator.open();
{# pdfDocGenerator.download('expose_{{ item.assetNo }}'); #}
pdfDocGenerator.open({},window);
</script>