diff --git a/dist/onoffice_defaultview.min.js b/dist/onoffice_defaultview.min.js
index 8182ccdab..df85bfcaa 100644
--- a/dist/onoffice_defaultview.min.js
+++ b/dist/onoffice_defaultview.min.js
@@ -1 +1 @@
-(function($){$((function(){$(document).ready((function(){$("#oo-galleryslide").slick({infinite:true,slidesToShow:1});$("#oo-similarframe").slick({infinite:true,arrows:false,dots:true,autoplay:true,slidesToShow:3,slidesToScroll:1,responsive:[{breakpoint:991,settings:{slidesToShow:2}},{breakpoint:575,settings:{slidesToShow:1}}]});applyGradientToSegments();function applyGradientToSegments(){const segments=$(".oo-details-energy-certificate .energy-certificate-container .segment");if(segments.length===0)return;const colors={start:[0,128,0],middle:[255,185,0],end:[255,0,0]};segments.each((function(index){const positionRatio=index/(segments.length-1);const isInInitialSegment=positionRatio<.5;const normalizedPosition=isInInitialSegment?positionRatio*2:(positionRatio-.5)*2;const color=calculateColor(isInInitialSegment?colors.start:colors.middle,isInInitialSegment?colors.middle:colors.end,normalizedPosition);const nextColor=calculateColor(isInInitialSegment?colors.start:colors.middle,isInInitialSegment?colors.middle:colors.end,normalizedPosition+1/(segments.length-1));$(this).css("background",`linear-gradient(to right, rgb(${color.join(",")}), rgb(${nextColor.join(",")}))`)}))}function calculateColor(start,end,positionRatio){return start.map(((startValue,i)=>Math.round(startValue+positionRatio*(end[i]-startValue))))}}))}))})(jQuery);
\ No newline at end of file
+(function($){$((function(){$(document).ready((function(){$("#oo-galleryslide").slick({infinite:true,slidesToShow:1});$("#oo-similarframe").slick({infinite:true,arrows:false,dots:true,autoplay:true,slidesToShow:3,slidesToScroll:1,responsive:[{breakpoint:991,settings:{slidesToShow:2}},{breakpoint:575,settings:{slidesToShow:1}}]});if($(".oo-costs-overview").length){initializeDonutChart()}function initializeDonutChart(){const colors=["#3F9DE4","#3ac411","#9C27B0","#D81B60","#FEC800"];const data=[];let totalCosts=0;$(".oo-costs-overview > div").each((function(index){const value=$(this).attr("data-value");const totalCostsValue=$(this).attr("total-costs-value");if(!isNaN(value)){data.push({value:value,color:colors[index]});$(this).find(".color-indicator").css("background-color",colors[index])}if(!isNaN(totalCostsValue)){totalCosts=totalCostsValue}}));let start=0;let gradientString="conic-gradient(";data.forEach((item=>{const percentage=item.value/totalCosts*100;const end=start+percentage;gradientString+=`${item.color} ${start.toFixed(2)}% ${end.toFixed(2)}%, `;start=end}));gradientString=gradientString.slice(0,-2)+")";$(".oo-donut-chart").css("background",gradientString)}applyGradientToSegments();function applyGradientToSegments(){const segments=$(".oo-details-energy-certificate .energy-certificate-container .segment");if(segments.length===0)return;const colors={start:[0,128,0],middle:[255,185,0],end:[255,0,0]};segments.each((function(index){const positionRatio=index/(segments.length-1);const isInInitialSegment=positionRatio<.5;const normalizedPosition=isInInitialSegment?positionRatio*2:(positionRatio-.5)*2;const color=calculateColor(isInInitialSegment?colors.start:colors.middle,isInInitialSegment?colors.middle:colors.end,normalizedPosition);const nextColor=calculateColor(isInInitialSegment?colors.start:colors.middle,isInInitialSegment?colors.middle:colors.end,normalizedPosition+1/(segments.length-1));$(this).css("background",`linear-gradient(to right, rgb(${color.join(",")}), rgb(${nextColor.join(",")}))`)}))}function calculateColor(start,end,positionRatio){return start.map(((startValue,i)=>Math.round(startValue+positionRatio*(end[i]-startValue))))}}))}))})(jQuery);
\ No newline at end of file
diff --git a/js/onoffice_defaultview.js b/js/onoffice_defaultview.js
index 1f6c5e689..9eddb4d48 100644
--- a/js/onoffice_defaultview.js
+++ b/js/onoffice_defaultview.js
@@ -25,6 +25,7 @@
}
}]
});
+
applyGradientToSegments();
function applyGradientToSegments() {
diff --git a/plugin/DataView/DataDetailView.php b/plugin/DataView/DataDetailView.php
index e98eab145..ece5e460c 100644
--- a/plugin/DataView/DataDetailView.php
+++ b/plugin/DataView/DataDetailView.php
@@ -66,6 +66,15 @@ class DataDetailView
/** @var int */
const SHOW_MAIN_CONTACT_PERSON = '1';
+ /** */
+ const FIELD_TOTAL_COSTS_CALCULATOR = 'show_total_costs_calculator';
+
+ /** */
+ const NOTARY_FEES = 1.5;
+
+ /** */
+ const LAND_REGISTER_ENTRY = 0.5;
+
/** @var string[] */
private $_fields = [
'objekttitel',
@@ -246,6 +255,9 @@ class DataDetailView
ImageTypes::PASSPORTPHOTO
];
+ /** @var bool */
+ private $_showTotalCostsCalculator = false;
+
/** @var bool */
private $_showEnergyCertificate = false;
@@ -265,6 +277,26 @@ class DataDetailView
'calculatedPrice'
];
+ /** @var string[] */
+ private $_propertyTransferTax = [
+ 'Baden-Württemberg' => 5,
+ 'Bayern' => 3.5,
+ 'Berlin' => 6,
+ 'Brandenburg' => 6.5,
+ 'Bremen' => 5,
+ 'Hamburg' => 5.5,
+ 'Hessen' => 6,
+ 'Mecklenburg-Vorpommern' => 6,
+ 'Niedersachsen' => 5,
+ 'Nordrhein-Westfalen' => 6.5,
+ 'Rheinland-Pfalz' => 5,
+ 'Saarland' => 6.5,
+ 'Sachsen' => 5.5,
+ 'Sachsen-Anhalt' => 5,
+ 'Schleswig-Holstein' => 6.5,
+ 'Thüringen' => 5
+ ];
+
/** @var string */
private $_contactPerson = '0';
@@ -463,7 +495,6 @@ public function getShowEnergyCertificate(): bool
public function setShowEnergyCertificate(bool $showEnergyCertificate)
{ $this->_showEnergyCertificate = $showEnergyCertificate; }
-
/**
* @return array
*/
@@ -472,6 +503,18 @@ public function getListFieldsShowPriceOnRequest(): array
return $this->_priceFields;
}
+ /** @return array */
+ public function getPropertyTransferTax(): array
+ { return $this->_propertyTransferTax; }
+
+ /** @return bool */
+ public function getShowTotalCostsCalculator(): bool
+ { return $this->_showTotalCostsCalculator; }
+
+ /** @param bool $costsCalculator */
+ public function setShowTotalCostsCalculator(bool $costsCalculator)
+ { $this->_showTotalCostsCalculator = $costsCalculator; }
+
/** @return array */
public function getContactImageTypes(): array
{ return $this->_contactImageTypes; }
diff --git a/plugin/DataView/DataDetailViewHandler.php b/plugin/DataView/DataDetailViewHandler.php
index b6744269a..84dea3d91 100644
--- a/plugin/DataView/DataDetailViewHandler.php
+++ b/plugin/DataView/DataDetailViewHandler.php
@@ -146,6 +146,7 @@ public function createDetailViewByValues(array $row): DataDetailView
$pDataDetailView->setShowStatus($row['show_status'] ?? false);
$pDataDetailView->setCustomLabels($row[DataDetailView::FIELD_CUSTOM_LABEL] ?? []);
$pDataDetailView->setShowPriceOnRequest($row[DataDetailView::FIELD_PRICE_ON_REQUEST] ?? false);
+ $pDataDetailView->setShowTotalCostsCalculator($row[DataDetailView::FIELD_TOTAL_COSTS_CALCULATOR] ?? false);
$pDataDetailView->setContactImageTypes($row['contact_image_types'] ?? []);
$pDataDetailView->setShowEnergyCertificate($row['show_energy_certificate'] ?? false);
$pDataDetailView->setContactPerson($row['contact_person'] ?? '0');
diff --git a/plugin/DonutChart.php b/plugin/DonutChart.php
new file mode 100644
index 000000000..e999f76b1
--- /dev/null
+++ b/plugin/DonutChart.php
@@ -0,0 +1,92 @@
+.
+ *
+ */
+
+namespace onOffice\WPlugin;
+
+use onOffice\WPlugin\EstateList;
+/**
+ *
+ * @url http://www.onoffice.de
+ * @copyright 2003-2017, onOffice(R) GmbH
+ *
+ */
+ class DonutChart
+ {
+ private $values;
+ private $valuesTitle;
+ private $colors = ['#3F9DE4', '#3ac411', '#9C27B0', '#D81B60', '#FEC800'];
+
+ public function __construct(array $values, array $valuesTitle)
+ {
+ $this->values = $values;
+ $this->valuesTitle = $valuesTitle;
+ }
+
+ private function toRadians($angle)
+ {
+ return $angle * pi() / 180;
+ }
+
+ private function polarToCartesian($radius, $angle, $subtractGap = false)
+ {
+ $adjustedAngle = $this->toRadians($angle - 90);
+ if ($subtractGap) {
+ $adjustedAngle -= asin(0 / $radius);
+ }
+ $x = 300+ $radius * cos($adjustedAngle);
+ $y = 210 + $radius * sin($adjustedAngle);
+
+ return sprintf('%0.2f,%0.2f', $x, $y);
+ }
+
+ public function generateSVG()
+ {
+ $total = array_sum($this->values);
+ //$total = getTotalCostsData();
+ $anglePerValue = 360 / $total;
+ $angleStart = 0;
+
+ $svgContent = "";
+ return $svgContent;
+ }
+ }
\ No newline at end of file
diff --git a/plugin/EstateList.php b/plugin/EstateList.php
index e33814ff1..5dc75d7a2 100644
--- a/plugin/EstateList.php
+++ b/plugin/EstateList.php
@@ -59,6 +59,7 @@
use onOffice\WPlugin\WP\WPPluginChecker;
use onOffice\WPlugin\Field\Collection\FieldsCollectionBuilderShort;
use onOffice\WPlugin\Field\FieldParkingLot;
+use onOffice\WPlugin\Field\CostsCalculator;
class EstateList
implements EstateListBase
@@ -114,12 +115,16 @@ class EstateList
/** @var Redirector */
private $_redirectIfOldUrl;
+ /** @var array */
+ private $_totalCostsData = [];
+
/** @var FieldsCollection */
private $_pFieldsCollection;
/** @var string */
private $_energyCertificate = '';
+
/**
* @param DataView $pDataView
* @param EstateListEnvironment $pEnvironment
@@ -247,6 +252,11 @@ private function loadRecords(int $currentPage)
$estateParametersRaw['data'] []= 'vermarktungsart';
$estateParametersRaw['data'] []= 'preisAufAnfrage';
+ if ($this->getShowTotalCostsCalculator()) {
+ $fields = ['kaufpreis', 'aussen_courtage', 'bundesland', 'waehrung'];
+ $estateParametersRaw['data'] = array_merge($estateParametersRaw['data'], $fields);
+ }
+
if ($this->getShowEnergyCertificate()) {
$energyCertificateFields = ['energieausweistyp', 'energyClass'];
$estateParametersRaw['data'] = array_merge($estateParametersRaw['data'], $energyCertificateFields);
@@ -681,6 +691,15 @@ public function estateIterator($modifier = EstateViewFieldModifierTypes::MODIFIE
$recordModified['vermarktungsstatus'] = $pEstateStatusLabel->getLabel($recordRaw);
}
+ if ($this->getShowTotalCostsCalculator()) {
+ $externalCommission = $this->getExternalCommission($recordRaw['aussen_courtage'] ?? '');
+ $propertyTransferTax = $this->_pDataView->getPropertyTransferTax();
+ if (!empty((float) $recordRaw['kaufpreis']) && !empty($recordRaw['bundesland']) && $externalCommission !== null) {
+ $costsCalculator = $this->_pEnvironment->getContainer()->get(CostsCalculator::class);
+ $this->_totalCostsData = $costsCalculator->getTotalCosts($recordRaw, $propertyTransferTax, $externalCommission);
+ }
+ }
+
if ($modifier === EstateViewFieldModifierTypes::MODIFIER_TYPE_MAP && $this->_pDataView instanceof DataListView) {
$recordModified['showGoogleMap'] = $this->getShowMapConfig();
}
@@ -717,6 +736,7 @@ public function estateIterator($modifier = EstateViewFieldModifierTypes::MODIFIE
foreach ($priceFields as $priceField) {
$this->displayTextPriceOnRequest($recordModified, $priceField);
}
+ $this->_totalCostsData = [];
}
}
// do not show priceOnRequest as single Field
@@ -725,6 +745,27 @@ public function estateIterator($modifier = EstateViewFieldModifierTypes::MODIFIE
return $recordModified;
}
+ /**
+ * @param string $externalCommission
+ * @return mixed
+ */
+ private function getExternalCommission(string $externalCommission)
+ {
+ if (preg_match('/(\d+[,]?\d*)\s*%/', $externalCommission, $matches)) {
+ return floatval(str_replace(',', '.', $matches[1]));
+ }
+
+ return null;
+ }
+
+ /**
+ * @return array
+ */
+ public function getTotalCostsData(): array
+ {
+ return $this->_totalCostsData;
+ }
+
/**
* @param ArrayContainerEscape $recordModified
* @param string $field
@@ -1348,4 +1389,16 @@ public function getListViewId()
return 'estate_detail';
}
+
+ /**
+ * @return bool
+ */
+ public function getShowTotalCostsCalculator(): bool
+ {
+ if ($this->_pDataView instanceof DataDetailView) {
+ return $this->_pDataView->getShowTotalCostsCalculator();
+ }
+
+ return false;
+ }
}
diff --git a/plugin/Field/CostsCalculator.php b/plugin/Field/CostsCalculator.php
new file mode 100644
index 000000000..7ffe4adf1
--- /dev/null
+++ b/plugin/Field/CostsCalculator.php
@@ -0,0 +1,148 @@
+.
+ */
+
+namespace onOffice\WPlugin\Field;
+
+use onOffice\WPlugin\DataView\DataDetailView;
+use onOffice\SDK\onOfficeSDK;
+use onOffice\WPlugin\API\APIClientActionGeneric;
+use onOffice\WPlugin\SDKWrapper;
+
+class CostsCalculator
+{
+ /** @var SDKWrapper */
+ private $_pSDKWrapper;
+
+ public function __construct(SDKWrapper $_pSDKWrapper)
+ {
+ $this->_pSDKWrapper = $_pSDKWrapper;
+ }
+
+
+ /**
+ * @param array $recordRaw
+ * @param array $propertyTransferTax
+ * @param float $externalCommission
+ * @return array
+ */
+ public function getTotalCosts(array $recordRaw, array $propertyTransferTax, float $externalCommission): array
+ {
+ $totalCostsData = $this->calculateRawCosts($recordRaw, $propertyTransferTax, $externalCommission);
+ $currencySymbol = $this->getCurrencySymbol();
+
+ if (empty($currencySymbol)) {
+ return [];
+ }
+
+ $currency = $currencySymbol[$recordRaw['waehrung']];
+
+ return $this->formatPrice($totalCostsData, $currency);
+ }
+
+ /**
+ * @param array $recordRaw
+ * @param array $propertyTransferTax
+ * @param float $externalCommission
+ * @return array
+ */
+ private function calculateRawCosts(array $recordRaw, array $propertyTransferTax, float $externalCommission): array
+ {
+ $purchasePriceRaw = $recordRaw['kaufpreis'];
+
+ $othersCosts = [
+ 'bundesland' => $propertyTransferTax[$recordRaw['bundesland']],
+ 'aussen_courtage' => $externalCommission,
+ 'notary_fees' => DataDetailView::NOTARY_FEES,
+ 'land_register_entry' => DataDetailView::LAND_REGISTER_ENTRY
+ ];
+
+ $rawAllCosts = ['kaufpreis' => ['raw' => $purchasePriceRaw]];
+ $totals = 0;
+
+ foreach ($othersCosts as $key => $value) {
+ $calculatePrice = $this->calculatePrice($purchasePriceRaw, $value);
+ $rawAllCosts[$key] = ['raw' => $calculatePrice];
+ $totals += $calculatePrice;
+ }
+
+ $rawAllCosts['total_costs'] = ['raw' => $purchasePriceRaw + $totals];
+
+ return $rawAllCosts;
+ }
+
+ /**
+ * @param float $price
+ * @param float $rate
+ * @return float
+ */
+ private function calculatePrice(float $price, float $rate): float
+ {
+ return round($price * $rate / 100);
+ }
+
+ /**
+ * @param array $totalCostsData
+ * @param string $currency
+ * @return array
+ */
+ private function formatPrice(array $totalCostsData, string $currency): array
+ {
+ foreach ($totalCostsData as $key => $value) {
+ $totalCostsData[$key]['default'] = $this->formatCurrency($value['raw'], $currency);
+ }
+
+ return $totalCostsData;
+ }
+
+ /**
+ * @param float $amount
+ * @param string $currency
+ * @return string
+ */
+ private function formatCurrency(float $amount, string $currency): string
+ {
+ $decimalPlaces = floor($amount) == $amount ? 0 : 2;
+
+ return number_format($amount, $decimalPlaces, ',', '.') . ' ' . $currency;
+ }
+
+ /**
+ * @return array
+ */
+
+ private function getCurrencySymbol(): array
+ {
+ $parameters = [
+ 'labels' => true,
+ 'fieldList' => ['waehrung'],
+ 'language' => 'DEU',
+ 'modules' => [onOfficeSDK::MODULE_ESTATE],
+ ];
+
+ $pAPIClientAction = new APIClientActionGeneric
+ ($this->_pSDKWrapper, onOfficeSDK::ACTION_ID_GET, 'fields');
+ $pAPIClientAction->setParameters($parameters);
+ $pAPIClientAction->addRequestToQueue();
+ $this->_pSDKWrapper->sendRequests();
+ $result = $pAPIClientAction->getResultRecords();
+
+ return $result[0]['elements']['waehrung']['permittedvalues'] ?? [];
+ }
+}
\ No newline at end of file
diff --git a/plugin/Gui/AdminPageEstateDetail.php b/plugin/Gui/AdminPageEstateDetail.php
index 70078a9d2..ea055a07a 100644
--- a/plugin/Gui/AdminPageEstateDetail.php
+++ b/plugin/Gui/AdminPageEstateDetail.php
@@ -110,6 +110,9 @@ class AdminPageEstateDetail
/** */
const FORM_VIEW_SEARCH_FIELD_FOR_FIELD_LISTS_CONFIG = 'viewSearchFieldForFieldListsConfig';
+ /** */
+ const FORM_VIEW_TOTAL_COSTS_CALCULATOR = 'viewtotalcostscalculator';
+
/** */
const FORM_VIEW_CONTACT_IMAGE_TYPES = 'viewcontactimagetypes';
@@ -266,6 +269,8 @@ private function generateMetaBoxes()
$pFormDocumentTypes = $this->getFormModelByGroupSlug(self::FORM_VIEW_ADDITIONAL_MEDIA);
$this->createMetaBoxByForm($pFormDocumentTypes, 'side');
+ $pFormTotalCostsCalculator = $this->getFormModelByGroupSlug(self::FORM_VIEW_TOTAL_COSTS_CALCULATOR);
+ $this->createMetaBoxByForm($pFormTotalCostsCalculator, 'normal');
$pFormContactPerson = $this->getFormModelByGroupSlug(self::FORM_VIEW_CONTACT_PERSON);
$this->createMetaBoxByForm($pFormContactPerson, 'side');
@@ -352,6 +357,14 @@ protected function buildForms()
$pFormModelAccessControl->addInputModel( $pInputModelAccessControl );
$this->addFormModel( $pFormModelAccessControl );
+ $pInputModelTotalCostsCalculator = $pFormModelBuilder->createInputModelTotalCostsCalculator();
+ $pFormModelTotalCostsCalculator = new FormModel();
+ $pFormModelTotalCostsCalculator->setPageSlug($this->getPageSlug());
+ $pFormModelTotalCostsCalculator->setGroupSlug(self::FORM_VIEW_TOTAL_COSTS_CALCULATOR);
+ $pFormModelTotalCostsCalculator->setLabel(__('Total costs calculator', 'onoffice-for-wp-websites'));
+ $pFormModelTotalCostsCalculator->addInputModel($pInputModelTotalCostsCalculator);
+ $this->addFormModel($pFormModelTotalCostsCalculator);
+
$pInputModelDocumentTypes = $pFormModelBuilder->createInputModelExpose();
$pInputModelMovieLinks = $pFormModelBuilder->createInputModelMovieLinks();
$pInputModelOguloLinks = $pFormModelBuilder->createInputModelOguloLinks();
diff --git a/plugin/Model/FormModelBuilder/FormModelBuilderEstateDetailSettings.php b/plugin/Model/FormModelBuilder/FormModelBuilderEstateDetailSettings.php
index 00168780f..6f22e0a0a 100644
--- a/plugin/Model/FormModelBuilder/FormModelBuilderEstateDetailSettings.php
+++ b/plugin/Model/FormModelBuilder/FormModelBuilderEstateDetailSettings.php
@@ -633,6 +633,39 @@ public function createInputModelContactPerson(): InputModelOption
return $pInputModelContactPerson;
}
+ /**
+ * @return InputModelOption
+ * @throws ExceptionInputModelMissingField
+ */
+ public function createInputModelTotalCostsCalculator(): InputModelOption
+ {
+ $labelShowTotalCostsCalculator = __('Show total price calculator', 'onoffice-for-wp-websites');
+ $pInputModelShowTotalCostsCalculator = $this->_pInputModelDetailViewFactory->create
+ (InputModelOptionFactoryDetailView::INPUT_SHOW_TOTAL_COSTS_CALCULATOR, $labelShowTotalCostsCalculator);
+ $pInputModelShowTotalCostsCalculator->setHtmlType(InputModelBase::HTML_TYPE_CHECKBOX);
+ $pInputModelShowTotalCostsCalculator->setValue($this->_pDataDetailView->getShowTotalCostsCalculator());
+ $pInputModelShowTotalCostsCalculator->setValuesAvailable(1);
+
+ $fields = ['kaufpreis', 'aussen_courtage', 'bundesland'];
+ $pFieldsCollection = $this->getFieldsCollection();
+ $result = [];
+ foreach ($fields as $field) {
+ if ($pFieldsCollection->containsFieldByModule(onOfficeSDK::MODULE_ESTATE, $field)) {
+ $result[$field] = $pFieldsCollection->getFieldByKeyUnsafe($field)->getLabel();
+ } else {
+ $result[$field] = $field;
+ }
+ }
+
+ $textHint = sprintf(esc_html__(
+ 'The fields %1$s, %2$s and %3$s must be filled in onOffice enterprise so that output is possible. %4$s %4$s A standard value of 1.5%% and 0.5%% respectively is typically used to calculate the notary and land registry entry costs.', 'onoffice-for-wp-websites'),
+ ''.$result['kaufpreis'].'
', ''.$result['aussen_courtage'].'
', ''.$result['bundesland'].'
', '
'
+ );
+ $pInputModelShowTotalCostsCalculator->setHintHtml($textHint);
+
+ return $pInputModelShowTotalCostsCalculator;
+ }
+
/**
*
* @return InputModelOption
diff --git a/plugin/Model/InputModel/InputModelOptionFactoryDetailView.php b/plugin/Model/InputModel/InputModelOptionFactoryDetailView.php
index 21b9f2fc1..71dcab8df 100644
--- a/plugin/Model/InputModel/InputModelOptionFactoryDetailView.php
+++ b/plugin/Model/InputModel/InputModelOptionFactoryDetailView.php
@@ -86,6 +86,9 @@ class InputModelOptionFactoryDetailView
/** */
const INPUT_CONTACT_IMAGE_TYPES = 'contact_image_types';
+ /** @var string */
+ const INPUT_SHOW_TOTAL_COSTS_CALCULATOR = 'show_total_costs_calculator';
+
/** @var string */
const INPUT_SHOW_ENERGY_CERTIFICATE = 'show_energy_certificate';
@@ -140,6 +143,9 @@ class InputModelOptionFactoryDetailView
self::INPUT_CONTACT_PERSON => [
self::KEY_TYPE => InputModelOption::SETTING_TYPE_STRING
],
+ self::INPUT_SHOW_TOTAL_COSTS_CALCULATOR => [
+ self::KEY_TYPE => InputModelOption::SETTING_TYPE_BOOLEAN
+ ],
self::INPUT_SHOW_ENERGY_CERTIFICATE => [
self::KEY_TYPE => InputModelOption::SETTING_TYPE_BOOLEAN
],
diff --git a/templates.dist/estate/default_detail.php b/templates.dist/estate/default_detail.php
index 05d0e2d3b..0e2038358 100644
--- a/templates.dist/estate/default_detail.php
+++ b/templates.dist/estate/default_detail.php
@@ -20,8 +20,8 @@
*/
use onOffice\WPlugin\EstateDetail;
+use onOffice\WPlugin\DonutChart;
use onOffice\WPlugin\ViewFieldModifier\EstateViewFieldModifierTypes;
-
/**
*
* Default template
@@ -85,6 +85,8 @@
padding: 0 10px;
}
+
+