Merge branch 'fronkdev' into 'master'

Added Mureck import & borderpoint testing & hausnummer visibility

See merge request fronk/thetool!232
This commit is contained in:
Frank Schubert
2024-02-09 00:52:54 +00:00
11 changed files with 358 additions and 26 deletions

View File

@@ -310,7 +310,20 @@
<?php endif; ?>
</div>
</div>
<hr />
<div class="form-group row">
<label class="col-lg-2 col-form-label" for="visibility">Zugriffsbeschränkung</label>
<div class="col-lg-10">
<select class="form-control" name="visibility" id="visibility">
<option value="public">Sichtbar</option>
<option value="private">Nicht sichtbar</option>
</select>
<small>In Address- und Bestell-API</small>
</div>
</div>
</div>
</div>

View File

@@ -2,6 +2,11 @@
$pagination_baseurl = $this->getUrl($Mod,"Index");
$pagination_baseurl_params = ["filter" => $filter];
$pagination_entity_name = "Adressen";
if(!is_array($filter)) {
$filter = [];
}
?>
<?php include(realpath(dirname(__FILE__)."/../../$mfLayoutPackage")."/header.php"); ?>
@@ -36,16 +41,16 @@
<select name="filter[network_id]" id="filter_network_id" class="form-control">
<option></option>
<?php foreach($my_adb_networks as $fnet): ?>
<option value="<?=$fnet->id?>" <?=($filter['network_id'] == $fnet->id) ? "selected='selected'" : ""?>><?=$fnet->name?></option>
<option value="<?=$fnet->id?>" <?=(array_key_exists("network_id", $filter) && $filter['network_id'] == $fnet->id) ? "selected='selected'" : ""?>><?=$fnet->name?></option>
<?php endforeach; ?>
<?php if($me->isAdmin()):?><option value="null" <?=($filter['network_id'] === "null") ? 'selected="selected"' : ""?>>-- Kein Netzgebiet --</option><?php endif; ?>
<?php if($me->isAdmin()):?><option value="null" <?=(array_key_exists("network_id", $filter) && $filter['network_id'] === "null") ? 'selected="selected"' : ""?>>-- Kein Netzgebiet --</option><?php endif; ?>
</select>
</div>
<div class="col-1">
<label class="form-label" for="filter_zip">PLZ</label>
<input type="text" class="form-control" name="filter[zip]" id="filter_zip" value="<?=$filter['zip']?>" />
<input type="text" class="form-control" name="filter[zip]" id="filter_zip" value="<?=(array_key_exists("zip", $filter)) ? $filter['zip'] : ""?>" />
</div>
<div class="col-2">
@@ -54,13 +59,13 @@
<select name="filter[gemeinde_id]" id="filter_gemeinde_id" class="form-control">
<option></option>
<?php foreach($gemeinden as $gemeinde): ?>
<option value="<?=$gemeinde->id?>" <?=($filter['gemeinde_id'] == $gemeinde->id) ? "selected='selected'" : ""?>><?=$gemeinde->name?></option>
<option value="<?=$gemeinde->id?>" <?=(array_key_exists("gemeinde_id", $filter) && $filter['gemeinde_id'] == $gemeinde->id) ? "selected='selected'" : ""?>><?=$gemeinde->name?></option>
<?php endforeach; ?>
</select>
</div>
<div class="<?=(!array_key_exists("network_id", $filter) || $filter['network_id'] !== "null") ? "hidden" : ""?>" id="filter-gemeinde-text">
<label class="form-label" for="filter_gemeinde">Gemeinde</label>
<input type="text" class="form-control" name="filter[gemeinde]" id="filter_gemeinde" value="<?=$filter['gemeinde']?>" />
<input type="text" class="form-control" name="filter[gemeinde]" id="filter_gemeinde" value="<?=(array_key_exists("gemeinde", $filter)) ? $filter['gemeinde'] : ""?>" />
</div>
</div>
@@ -70,53 +75,53 @@
<select name="filter[ortschaft_id]" id="filter_ortschaft_id" class="form-control">
<option></option>
<?php foreach($ortschaften as $ortschaft): ?>
<option value="<?=$ortschaft->id?>" <?=($filter['ortschaft_id'] == $ortschaft->id) ? "selected='selected'" : ""?>><?=$ortschaft->name?></option>
<option value="<?=$ortschaft->id?>" <?=(array_key_exists("ortschaft_id", $filter) && $filter['ortschaft_id'] == $ortschaft->id) ? "selected='selected'" : ""?>><?=$ortschaft->name?></option>
<?php endforeach; ?>
</select>
</div>
<div class="<?=(!array_key_exists("network_id", $filter) || $filter['network_id'] !== "null") ? "hidden" : ""?>" id="filter-ortschaft-text">
<label class="form-label" for="filter_ortschaft">Ortsteil</label>
<input type="text" class="form-control" name="filter[ortschaft]" id="filter_ortschaft" value="<?=$filter['ortschaft']?>" />
<input type="text" class="form-control" name="filter[ortschaft]" id="filter_ortschaft" value="<?=(array_key_exists("ortschaft", $filter)) ? $filter['ortschaft'] : ""?>" />
</div>
</div>
<div class="col-2">
<label class="form-label" for="filter_street">Strasse</label>
<input type="text" class="form-control" name="filter[street]" id="filter_street" value="<?=$filter['street']?>" />
<input type="text" class="form-control" name="filter[street]" id="filter_street" value="<?=(array_key_exists("street", $filter)) ? $filter['street'] : ""?>" />
</div>
<div class="col-1">
<label class="form-label" for="filter_hausnummer">Hausnummer</label>
<input type="text" class="form-control" name="filter[hausnummer]" id="filter_street" value="<?=$filter['hausnummer']?>" />
<input type="text" class="form-control" name="filter[hausnummer]" id="filter_street" value="<?=(array_key_exists("hausnummer", $filter)) ? $filter['hausnummer'] : ""?>" />
</div>
</div>
<div class="row mt-2">
<div class="col-2">
<label class="form-label" for="filter_oaid">OAID</label>
<input type="text" class="form-control" name="filter[oaid]" id="filter_oaid" value="<?=$filter['oaid']?>" />
<input type="text" class="form-control" name="filter[oaid]" id="filter_oaid" value="<?=(array_key_exists("oaid", $filter)) ? $filter['oaid'] : ""?>" />
</div>
<div class="col-1">
<label class="form-label" for="filter_adrcd">Adrcd (GWR)</label>
<input type="text" class="form-control" name="filter[adrcd]" id="filter_adrcd" value="<?=$filter['adrcd']?>" />
<input type="text" class="form-control" name="filter[adrcd]" id="filter_adrcd" value="<?=(array_key_exists("adrcd", $filter)) ? $filter['adrcd'] : ""?>" />
</div>
<div class="col-2">
<label class="form-label" for="filter_extref">extref</label>
<input type="text" class="form-control" name="filter[extref]" id="filter_extref" value="<?=$filter['extref']?>" />
<input type="text" class="form-control" name="filter[extref]" id="filter_extref" value="<?=(array_key_exists("extref", $filter)) ? $filter['extref'] : ""?>" />
</div>
<div class="col-1">
<label class="form-label" for="filter_rollout">Rollout Jahr</label>
<input type="text" class="form-control" name="filter[rollout]" id="filter_rollout" value="<?=$filter['rollout']?>" />
<input type="text" class="form-control" name="filter[rollout]" id="filter_rollout" value="<?=(array_key_exists("rollout", $filter)) ? $filter['rollout'] : ""?>" />
</div>
<div class="col-2">
<label class="form-label" for="filter_rollout_info">Rollout Info</label>
<input type="text" class="form-control" name="filter[rollout_info]" id="filter_rollout_info" value="<?=$filter['rollout_info']?>" />
<input type="text" class="form-control" name="filter[rollout_info]" id="filter_rollout_info" value="<?=(array_key_exists("rollout_info", $filter)) ? $filter['rollout_info'] : ""?>" />
</div>

View File

@@ -8,6 +8,9 @@
<li class="nav-item"><a class="nav-link active" href="#preorder-detail-<?=$preorder->id?>-detail" data-toggle="tab" aria-expanded="false">Details</a></li>
<li class="nav-item"><a class="nav-link" href="#preorder-detail-<?=$preorder->id?>-address" data-toggle="tab" aria-expanded="false">Adressdetails</a></li>
<li class="nav-item"><a class="nav-link" href="#preorder-detail-<?=$preorder->id?>-rimo" data-toggle="tab" aria-expanded="false">RIMO</a></li>
<?php if($me->is("Admin") && $preorder->adb_hausnummer->borderpoint_lat && $preorder->adb_hausnummer->borderpoint_long): ?>
<li class="nav-item"><a class="nav-link" href="#preorder-detail-<?=$preorder->id?>-map" data-toggle="tab" aria-expanded="false" onclick="loadBorderpointMap(<?=$preorder->id?>)">Übergabepunkt</a></li>
<?php endif; ?>
</ul>
</div>
@@ -424,12 +427,45 @@
</div>
</div>
<?php if($me->is("Admin")): ?>
<div
id="preorder-detail-<?=$preorder->id?>-map"
class="tab-pane"
data-lat="<?=$preorder->adb_hausnummer->borderpoint_lat?>"
data-long="<?=$preorder->adb_hausnummer->borderpoint_long?>"
data-blat="<?=$preorder->adb_hausnummer->gps_lat?>"
data-blong="<?=$preorder->adb_hausnummer->gps_long?>"
data-trench="<?=$preorder->adb_hausnummer->trenches?>"
data-home-trench="<?=$preorder->adb_hausnummer->home_trench?>"
>
<div class="row justify-content-center">
<div class="col-12">
<div class="card">
<div class="card-body">
<div class="card">
<div class="card-body">
<div class="row" id="map-row">
<div id="preorder-map-<?=$preorder->id?>" style="height:50vh; width: 100%"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<?php endif; ?>
</div>
</div>
</div>
<script type="text/javascript">
function togglePortdata(pid) {
@@ -612,4 +648,78 @@
return false;
}
var maps = {};
function loadBorderpointMap(id) {
var lat = $("#preorder-detail-" + id + "-map").data("lat");
var long = $("#preorder-detail-" + id + "-map").data("long");
var blat = $("#preorder-detail-" + id + "-map").data("blat");
var blong = $("#preorder-detail-" + id + "-map").data("blong");
var trenches = $("#preorder-detail-" + id + "-map").data("trench");
var home_trench = $("#preorder-detail-" + id + "-map").data("home-trench");
if(!("map-" + id in maps)) {
var map = L.map('preorder-map-' + id).setView([lat, long], 20);
var tileLayer = L.tileLayer('https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token={accessToken}', {
attribution: 'Map data &copy; <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="https://www.mapbox.com/">Mapbox</a>',
minZoom: 6,
maxZoom: 22,
id: "mapbox/satellite-streets-v12",
accessToken: '<?=TT_MAPBOX_TILE_API_TOKEN?>'
}).addTo(map);
//map.invalidateSize();
//var marker = L.marker([lat, long], {icon: icon}).addTo(preorderMap);
/*L.circleMarker([lat, long], {
color: '#FF9999'
}).addTo(map);
*/
var circle = L.circle([lat,long], {
color: 'orange',
fillColor: 'orange',
fillOpacity: 0.5,
radius: 1
}).bindTooltip(lat + ", " + long).addTo(map);
/*var circle = L.circle([blat,blong], {
color: 'black',
fillColor: 'limegreen',
fillOpacity: 0.5,
radius: 1
}).addTo(map);*/
if(trenches) {
trenches.forEach((trench) => {
//console.log(trench);
var trench_line = L.polyline(trench, {
color: "limegreen"
}).addTo(map);
//trench.forEach((segment) => {
//});
});
}
if(home_trench) {
var home_line = L.polyline(home_trench, {
color: "aqua"
}).addTo(map);
}
maps["map-" + id] = map;
setTimeout((id) => {maps["map-" + id].invalidateSize()}, 50, id);
}
}
function addMarkers(id) {
}
</script>

View File

@@ -19,9 +19,13 @@ class ADBHausnummerModel {
public $unit_count;
public $gps_lat;
public $gps_long;
public $borderpoint_lat;
public $borderpoint_long;
public $trenches;
public $rollout;
public $rollout_info;
public $freigabe;
public $visibility;
public $manual_add;
public $manual_add_by;
public $manual_add_info;
@@ -349,6 +353,16 @@ class ADBHausnummerModel {
}
}
if(array_key_exists("visibility", $filter)) {
$visibility = $filter['visibility'];
if(is_array($visibility)) {
$where .= " AND Hausnummer.visibility IN ('".implode("','", $visibility)."')";
} else {
$visibility = FronkDB::singleton()->escape($visibility);
$where .= " AND Hausnummer.visibility = '$visibility'";
}
}
if(array_key_exists("rollout", $filter)) {
$rollout = FronkDB::singleton()->escape($filter['rollout']);
if($rollout) {

View File

@@ -37,6 +37,7 @@ class AddressDB {
`Hausnummer`.`rollout` AS `rollout`,
`Hausnummer`.`rollout_info` AS `rollout_info`,
`Hausnummer`.`freigabe` AS `freigabe`,
`Hausnummer`.`visibility` AS `visibility`,
`Hausnummer`.`rimo_id` AS `hausnummer_rimo_id`,
`Hausnummer`.`rimo_fcp_name` AS `rimo_fcp_name`,
`Wohneinheit`.`id` AS `wohneinheit_id`,

View File

@@ -48,7 +48,7 @@ class AddressDBController extends mfBaseController {
if($this->me->is("Admin")) {
$my_networks = NetworkModel::getAll();
if($filter['network_id']) {
if(array_key_exists("network_id", $filter) && $filter['network_id']) {
$filter['netzgebiet_id'] = $filter['network_id'];
}
} else {
@@ -77,12 +77,12 @@ class AddressDBController extends mfBaseController {
if(!array_key_exists("netzgebiet_id", $addressdb_filter)) {
$addressdb_filter['netzgebiet_id'] = $netzgebiet_ids;
}
//var_dump($my_adb_networks);exit;
$addressdb_filter["visibility"] = ["public", "private"];
$this->layout()->set("my_networks", ADBNetzgebietModel::getAll());
$this->layout()->set("my_adb_networks", $my_adb_networks);
//var_dump($addressdb_filter);exit;
//var_dump($addressdb_filter);exit;
if($filter['netzgebiet_id'] === "null") {
if(array_key_exists("netzgebiet_id", $filter) && $filter['netzgebiet_id'] === "null") {
$addressdb_filter['netzgebiet_id'] = 0;
$pagination['maxItems'] = ADBHausnummerModel::count($addressdb_filter);
$addresses = ADBHausnummerModel::search($addressdb_filter, $pagination);

View File

@@ -388,6 +388,7 @@ class AddressdbApicontroller extends mfBaseApicontroller {
if(count($this->filter_salescluster_ids)) {
$where .= " AND netzgebiet_id IN (".implode(",", $this->filter_salescluster_ids).")";
}
$where .= " AND Hausnummer.visibility='public'";
$sql = AddressDB::$wohneinheit_query;
$sql .= "\n WHERE $where AND ((".implode(" OR ", $ort_search).") OR (".implode(" OR ", $strasse_search).") OR (".implode(" OR ", $plz_search).") OR (".implode(" OR ", $hausnummer_search).")) ORDER BY strasse, LENGTH(hausnummer), hausnummer, LENGTH(`Wohneinheit`.tuer),`Wohneinheit`.tuer, zusatz, LENGTH(num), num";
@@ -676,6 +677,7 @@ class AddressdbApicontroller extends mfBaseApicontroller {
if($search_cluster_id) {
$where .= " AND Netzgebiet.extref='$search_cluster_id'";
}
$where .= " AND Hausnummer.visibility='public'";
//echo $where;
//var_dump($this->filter_salescluster_ids);exit;

View File

@@ -0,0 +1,32 @@
<?php
declare(strict_types=1);
use Phinx\Migration\AbstractMigration;
final class HausnummerAddVisibility extends AbstractMigration
{
public function up(): void
{
if($this->getEnvironment() == "thetool") {
}
if($this->getEnvironment() == "addressdb") {
$table = $this->table("Hausnummer");
$table->addColumn("visibility", "enum", ["null" => false, "values" => "public,private,none", "default" => "public", "after" => "freigabe"]);
$table->addIndex("visibility");
$table->update();
}
}
public function down(): void
{
if($this->getEnvironment() == "thetool") {
}
if($this->getEnvironment() == "addressdb") {
$this->table("Hausnummer")->removeColumn("visibility")->save();
}
}
}

View File

@@ -0,0 +1,39 @@
<?php
declare(strict_types=1);
use Phinx\Migration\AbstractMigration;
final class HausnummerAddBorderpointLatLong extends AbstractMigration
{
public function up(): void
{
if($this->getEnvironment() == "thetool") {
}
if($this->getEnvironment() == "addressdb") {
$table = $this->table("Hausnummer");
$table->addColumn("borderpoint_lat", "decimal",["null" => true, "default" => null, "precision" => 15, "scale" => 10, "after" => "gps_long"]);
$table->addColumn("borderpoint_long", "decimal", ["null" => true, "default" => null, "precision" => 15, "scale" => 10, "after" => "borderpoint_lat"]);
$table->addColumn("trenches", "json", ["null" => true, "default" => null, "after" => "borderpoint_long"]);
$table->addColumn("home_trench", "json", ["null" => true, "default" => null, "after" => "trenches"]);
$table->save();
}
}
public function down(): void
{
if($this->getEnvironment() == "thetool") {
}
if($this->getEnvironment() == "addressdb") {
$table = $this->table("home_trench");
$table->removeColumn("home_trench");
$table->removeColumn("trenches");
$table->removeColumn("borderpoint_long");
$table->removeColumn("borderpoint_lat");
$table->save();
}
}
}

View File

@@ -0,0 +1,35 @@
<?php
namespace ADBRimoImport\ADBAddressHelper\Network;
/*
* Netzgebiet
* Premstätten Süd
*/
class Network_62383 {
public function checkAddress($data) {
/*
* array keys are a reference their original variables and must be manipulated directly
*/
// dererence input array keys into copies
foreach(["name", "strasse_name", "hausnummer_name", "addresszusatz", "gem_kz", "gem_name", "ort_name", "plz_name"] as $var) {
$$var = $data[$var];
}
if($strasse_name == "Peter-Rosegger-Weg") $strasse_name = "Peter Rosegger-Weg";
if($strasse_name == "Doktor-Franz-Platzer-Straße") $strasse_name = "Dr. Franz Platzer-Straße";
if($strasse_name == "Johann-Joseph-Fux-Gasse") $strasse_name = "Johann Joseph Fux-Gasse";
if($strasse_name == "Adolf- Kolping-Straße") $strasse_name = "Adolph Kolping-Straße";
if($ort_name == "Südoststeiermark") $ort_name = "Mureck";
// put new values back into original pointer
foreach(["name", "strasse_name", "hausnummer_name", "addresszusatz", "gem_kz", "gem_name", "ort_name", "plz_name"] as $var) {
$data[$var] = $$var;
}
return true;
}
}

View File

@@ -38,8 +38,10 @@ if($argc > 1) {
}
}
//$netowners = ["estmk", "rml"];
$netowners = ["estmk"];
foreach(["estmk", "rml"] as $apiOwner) {
foreach($netowners as $apiOwner) {
$apiEdition = "prod";
$apiData = TT_RIMO_API_CREDS[$apiOwner][$apiEdition];
@@ -54,6 +56,7 @@ foreach(["estmk", "rml"] as $apiOwner) {
$epGetBuildings = $apiUrl.RIMO_API_JSON_EP_GET_BUILDINGS;
$epGetWorkorders = $apiUrl.RIMO_API_JSON_EP_QUERY_WORKORDERS;
$epGetService = $apiUrl.RIMO_API_JSON_EP_QUERY_SERVICE;
$epGetGeoJsonForBuilding = $apiUrl.RIMO_API_JSON_EP_GET_JSON_FOR_BUILDING;
$import_count = 0;
@@ -113,10 +116,10 @@ foreach(["estmk", "rml"] as $apiOwner) {
}
/*if($cluster_rimo_id != "SDISalesCluster_126657212929_1678961358") {
// prem sued
if($cluster_rimo_id != "SDISalesCluster_85942336257_1707118316") {
// wettmannstaettten
continue;
}*/
}
$AddressHelper = new ADBAddressHelper\AddressHelper(["log" => $log, "db" => $adb, "netzgebiet" => $adb_netzgebiet]);
@@ -362,7 +365,10 @@ foreach(["estmk", "rml"] as $apiOwner) {
}
// get workorders
/*
* get workorders
*/
$params = $baseParams;
$params["buildingId"] = $rimo_building_id;
$qs = http_build_query($params);
@@ -418,7 +424,82 @@ foreach(["estmk", "rml"] as $apiOwner) {
}
}
}
/*
* Get Geodata
*/
$params = $baseParams;
$params["buildingId"] = $rimo_building_id;
$qs = http_build_query($params);
$req_url = $epGetGeoJsonForBuilding."?".$qs;
$req_ctx = stream_context_create($ctxOptsGet);
//echo $req_url."\n";
$responseText = file_get_contents($req_url, false, $req_ctx);
if($responseText === false) {
//echo "Error fetching Workorders for building $rimo_building_id\n";
continue;
}
$geodataResponse = json_decode($responseText);
//print_r($geodataResponse);exit;
if(is_object($geodataResponse)) {
if(property_exists($geodataResponse, "homeSection")) {
if(property_exists($geodataResponse->homeSection, "features") && is_array($geodataResponse->homeSection->features)) {
foreach($geodataResponse->homeSection->features as $feature) {
$home_trench = [];
foreach($feature->geometry->coordinates as $coords) {
$long = $coords[0];
$lat = $coords[1];
$home_trench[] = [$lat, $long];
}
if($hausnummer->home_trench != $home_trench) {
$hausnummer->home_trench = json_encode($home_trench);
$hausnummer->save();
}
}
}
}
if(property_exists($geodataResponse, "borderPoint")) {
if(property_exists($geodataResponse->borderPoint, "features") && is_array($geodataResponse->borderPoint->features)) {
foreach($geodataResponse->borderPoint->features as $feature) {
$coords = $feature->geometry->coordinates;
//var_dump($coords);exit;
$long = $coords[0];
$lat = $coords[1];
if($hausnummer->borderpoint_lat != $lat || $hausnummer->borderpoint_long != $long) {
$hausnummer->borderpoint_lat = $lat;
$hausnummer->borderpoint_long = $long;
$hausnummer->save();
}
}
}
}
if(property_exists($geodataResponse, "trenches") && $geodataResponse->trenches->features) {
$trenches = [];
foreach($geodataResponse->trenches->features as $feature) {
$feature_coords = [];
//var_dump($feature->geometry->coordinates);exit;
foreach($feature->geometry->coordinates as $coords) {
$long = $coords[0];
$lat = $coords[1];
$feature_coords[] = [$lat, $long];
}
$trenches[] = $feature_coords;
}
if(count($trenches)) {
//var_dump($trenches);exit;
$hausnummer->trenches = json_encode($trenches);
$hausnummer->save();
}
}
}
}
echo "Cluster $cluster_rimo_id ($cluster_name): $hausnummer_count Buildings; $hausnummer_found_count Buildings verarbeitet; $homes_count Homes verarbeitet.\n";
}