diff --git a/httpdocs/import/mpp_import_benchmark.xlsx b/httpdocs/import/mpp_import_benchmark.xlsx index 397d0da..2dc42d9 100644 Binary files a/httpdocs/import/mpp_import_benchmark.xlsx and b/httpdocs/import/mpp_import_benchmark.xlsx differ diff --git a/httpdocs/import/~$mpp_import_benchmark.xlsx b/httpdocs/import/~$mpp_import_benchmark.xlsx deleted file mode 100644 index 4283e76..0000000 Binary files a/httpdocs/import/~$mpp_import_benchmark.xlsx and /dev/null differ diff --git a/httpdocs/import/~$mpp_import_din.xlsx b/httpdocs/import/~$mpp_import_din.xlsx deleted file mode 100644 index 4283e76..0000000 Binary files a/httpdocs/import/~$mpp_import_din.xlsx and /dev/null differ diff --git a/httpdocs/public/assets/js/my-bim-score.js b/httpdocs/public/assets/js/my-bim-score.js index 40f2f44..d5c5421 100644 --- a/httpdocs/public/assets/js/my-bim-score.js +++ b/httpdocs/public/assets/js/my-bim-score.js @@ -3,6 +3,7 @@ $(document).ready(function() { listing(); catalogue(); onChangeDinAsset(); + onFormSubmit(); }); // Message Box for alerts @@ -124,9 +125,9 @@ function onChangeDinAsset() { $("#cycle").attr({ "min" : data.cycleMin, "max" : data.cycleMax - }).val(data.cycleRecommended); + }).val(''); - $('#bandwidth') + $('#benchmark') .find('option') .remove() .end() @@ -134,7 +135,7 @@ function onChangeDinAsset() { for (let i in data.benchmarkValues) { noBenchmarkData = true; - $('#bandwidth').append(''); + $('#benchmark').append(''); } if (Object.keys(data.benchmarkValues).length < 1) { @@ -151,6 +152,24 @@ function onChangeDinAsset() { }); } +function onFormSubmit() { + $("#submit").on("click", function(e) { + console.log($('#form-risk').serializeArray()); + $.ajax({ + url: "/calculate-risk", + method: "post", + data: $('#form-risk').serializeArray(), + success: function (data) { + console.log(data); + }, + error: function (xhr, msg, three) { + messageBox(false, "Fehler bei der Anfrage."); + }, + dataType: "json" + }); + }); +} + let savedCatalogueAnswer, savedCatalogueNote; $(document).ready(function() { diff --git a/httpdocs/src/Command/CmdImportDinAssets.php b/httpdocs/src/Command/CmdImportDinAssets.php index 56f2d2a..69972a6 100755 --- a/httpdocs/src/Command/CmdImportDinAssets.php +++ b/httpdocs/src/Command/CmdImportDinAssets.php @@ -92,7 +92,8 @@ class CmdImportDinAssets extends Command $dinAsset->setName($rowData[1]); $dinAsset->setCycleMonthsMin($rowData[11]); $dinAsset->setCycleMonthsMax($rowData[12]); - $dinAsset->setCycleMonthsRecommended($rowData[13]); + $dinAsset->setCycleMonthsRecInspection($rowData[13]); + $dinAsset->setCycleMonthsRecMaintenance($rowData[14]); $this->em->persist($dinAsset); $this->em->flush(); $dinAssetsByDinAndName[$key] = $dinAsset; diff --git a/httpdocs/src/Controller/UserController.php b/httpdocs/src/Controller/UserController.php index 04fdf50..5579e10 100644 --- a/httpdocs/src/Controller/UserController.php +++ b/httpdocs/src/Controller/UserController.php @@ -96,7 +96,6 @@ class UserController extends AbstractController ); } - /** * @Route("/get-benchmark-data", name="get_benchmark_data") */ @@ -111,13 +110,49 @@ class UserController extends AbstractController } $res = []; - $res['cycleRecommended'] = $dinAsset->getCycleMonthsRecommended(); + $res['cycleRecommended'] = $dinAsset->getCycleMonthsRecInspection(); $res['cycleMin'] = $dinAsset->getCycleMonthsMin(); $res['cycleMax'] = $dinAsset->getCycleMonthsMax(); $res['benchmarkValues'] = $dinAsset->getBenchMarkSelectValues(); return $this->json($res); } + /** + * @Route("/calculate-risk", name="calculate_risk") + */ + public function calculateRisk(Request $request) + { + $params = $request->request->all(); + $benchmark = $this->getDoctrine()->getRepository(DinAssetBenchmark::class)->find($params['benchmark']); + $asset = $benchmark->getDinAsset(); + $userCycle = $params['cycle']; + + $cycleDeviation = 1 - ($userCycle / ($asset->getCycleMonthsRecMaintenance())); + $costsCurrentPerYear = (12 / $userCycle) * $benchmark->getAverageCosts(); + $costsRecPerYear = (12 / $asset->getCycleMonthsRecMaintenance()) * $benchmark->getAverageCosts(); + $costsDiffPerYear = $costsRecPerYear - $costsCurrentPerYear; + $costsDiff5Years = $costsDiffPerYear * 5; + + $pointsFailure = Utils::$riskFailure[$params['failure']][1]; + $pointsCosts = Utils::$riskCosts[$params['costs']][1]; + if ($params['costs'] === Utils::PERSON_DAMAGE_INDEX) { + $pointsCosts = Utils::PERSON_DAMAGE_BASE - $pointsFailure; + } + $riskPoints = $pointsFailure + $pointsCosts; + $riskFactor = Utils::$riskPoints[$riskPoints]['factor']; + $recCycle = (int) ($asset->getCycleMonthsMax() * $riskFactor); + + $costsCurrentPerYear = (12 / $userCycle) * $benchmark->getAverageCosts(); + $costsRecPerYear = (12 / $recCycle) * $benchmark->getAverageCosts(); + + + + $res = []; + $res['cycleRecMaintenance'] = $asset->getCycleMonthsRecMaintenance(); + $res['cycleRecInspection'] = $asset->getCycleMonthsRecInspection(); + return $this->json($res); + } + /** * @Route("/download", name="download") * diff --git a/httpdocs/src/Entity/DinAsset.php b/httpdocs/src/Entity/DinAsset.php index a517cf4..65ab27c 100644 --- a/httpdocs/src/Entity/DinAsset.php +++ b/httpdocs/src/Entity/DinAsset.php @@ -40,7 +40,12 @@ class DinAsset /** * @ORM\Column(type="smallint", nullable=false, options={"unsigned" = true}) */ - protected $cycleMonthsRecommended; + protected $cycleMonthsRecInspection; + + /** + * @ORM\Column(type="smallint", nullable=false, options={"unsigned" = true}) + */ + protected $cycleMonthsRecMaintenance; /** * @ORM\OneToMany(targetEntity="DinAssetTask", mappedBy="dinAsset", cascade={"persist", "remove"}) @@ -135,17 +140,39 @@ class DinAsset /** * @return mixed */ - public function getCycleMonthsRecommended() + public function getCycleMonthsRecInspection() { - return $this->cycleMonthsRecommended; + return $this->cycleMonthsRecInspection; } /** - * @param mixed $cycleMonthsRecommended + * @param mixed $cycleMonthsRecInspection */ - public function setCycleMonthsRecommended($cycleMonthsRecommended): void + public function setCycleMonthsRecInspection($cycleMonthsRecInspection): void { - $this->cycleMonthsRecommended = $cycleMonthsRecommended; + if ($cycleMonthsRecInspection <= 0) { + throw new \Exception('invalid value'); + } + $this->cycleMonthsRecInspection = $cycleMonthsRecInspection; + } + + /** + * @return mixed + */ + public function getCycleMonthsRecMaintenance() + { + return $this->cycleMonthsRecMaintenance; + } + + /** + * @param mixed $cycleMonthsRecMaintenance + */ + public function setCycleMonthsRecMaintenance($cycleMonthsRecMaintenance): void + { + if ($cycleMonthsRecMaintenance <= 0) { + throw new \Exception('invalid value'); + } + $this->cycleMonthsRecMaintenance = $cycleMonthsRecMaintenance; } /** diff --git a/httpdocs/src/Utils/Utils.php b/httpdocs/src/Utils/Utils.php index ed05b37..9cc9e81 100644 --- a/httpdocs/src/Utils/Utils.php +++ b/httpdocs/src/Utils/Utils.php @@ -10,8 +10,10 @@ class Utils const PASSWORD_MIN_LENGTH = 5; const PASSWORD_MAX_LENGTH = 50; + const PERSON_DAMAGE_BASE = 40; + const PERSON_DAMAGE_INDEX = 4; + public static $riskFailure = [ - ['-', 0], ['sehr niedrig', 5], ['niedrig', 10], ['mittel', 15], @@ -19,23 +21,24 @@ class Utils ]; public static $riskCosts = [ - ['-', 0], ['0 - 5.000 €', 5], ['5.001 - 50.000 €', 10], - ['mittel', 15], - ['hoch', 20] + ['50.001 - 250.000 €', 15], + ['> 1 Mio €', 20], + ['Personenschaden', 0] ]; public static $riskPoints = [ - ['factor' => 0, 'cycle' => 6, 'points' => 10], - ['factor' => 0.17, 'cycle' => 6, 'points' => 15], - ['factor' => 0.33, 'cycle' => 6, 'points' => 20], - ['factor' => 0.5, 'cycle' => 6, 'points' => 25], - ['factor' => 0.67, 'cycle' => 6, 'points' => 30], - ['factor' => 0.83, 'cycle' => 6, 'points' => 35], - ['factor' => 1, 'cycle' => 6, 'points' => 40], + 10 => ['factor' => 1, 'cycle' => 6], + 15 => ['factor' => 0.83, 'cycle' => 8], + 20 => ['factor' => 0.67, 'cycle' => 16], + 25 => ['factor' => 0.5, 'cycle' => 24], + 30 => ['factor' => 0.33, 'cycle' => 32], + 35 => ['factor' => 0.17, 'cycle' => 40], + 40 => ['factor' => 0, 'cycle' => 48] ]; + /** * Checks email format * @param $email diff --git a/httpdocs/templates/pages/risk_analysis.html.twig b/httpdocs/templates/pages/risk_analysis.html.twig index b3fbbd3..8a7a1c5 100644 --- a/httpdocs/templates/pages/risk_analysis.html.twig +++ b/httpdocs/templates/pages/risk_analysis.html.twig @@ -5,7 +5,7 @@ {% block body %}
Bitte füllen sie alle Felder aus, um eine Risikoanalyse zu erstellen.
- {% endblock %}