Can now add to AddressDB via Preorder/Form

This commit is contained in:
Frank Schubert
2022-12-21 01:43:42 +01:00
parent 6c1c5a8d06
commit 37a3b1f324
9 changed files with 546 additions and 37 deletions

View File

@@ -47,18 +47,109 @@
<div class="form-group row"> <div class="form-group row">
<label class="col-lg-2 col-form-label" for="price">Adresse *</label> <label class="col-lg-2 col-form-label" for="adb_hausnummer_id">Adresse *</label>
<div class="col-lg-10"> <div class="col-lg-10">
<select class="form-control" name="adb_hausnummer_id" id="adb_hausnummer_id" /> <select class="form-control" name="adb_hausnummer_id" id="adb_hausnummer_id" />
<?php if($preorder->adb_hausnummer_id): ?> <?php if($preorder->adb_hausnummer_id): ?>
<option value="<?=$preorder->adb_hausnummer_id?>" selected="selected"><?=$preorder->adb_hausnummer->plz->plz?> <?=$preorder->adb_hausnummer->strasse->ortschaft->name?>, <?=$preorder->adb_hausnummer->strasse->name?> <?=$preorder->adb_hausnummer->hausnummer?></option> <option value="<?=$preorder->adb_hausnummer_id?>" selected="selected"><?=$preorder->adb_hausnummer->plz->plz?> <?=$preorder->adb_hausnummer->strasse->ortschaft->name?>, <?=$preorder->adb_hausnummer->strasse->name?> <?=$preorder->adb_hausnummer->hausnummer?></option>
<?php endif; ?> <?php endif; ?>
</select> </select>
<div id="new-address-toggle" class="alert alert-info mt-1 mb-1 pb-1 pt-1 hidden">
<h5><i class="icon fas fa-info-circle"></i> Adresse nicht gefunden?</h5>
Vertippt? Richtiges Netzgebiet (<strong><?=$campaign->network->name?></strong>) ?<br /><br /><a href="#" onclick="toggleNewAddress()"><i class="far fa-plus-square"></i> Hier klickem um die Adresse neu anzulegen</a>
<div id="new-address" class="mt-0 mb-4 hidden">
<hr />
<div class="row" id="new-address-form">
<div class="col-7 border">
<div class="mb-3">
<h4>Neue Adresse in Adress-Datenbank eintragen:</h4>
<small class="text-danger">Alle mit * markierten Felder sind Pflichtfelder</small>
</div>
<div class="form-group row">
<label class="col-lg-3 col-form-label" for="street">Straße <span class="text-danger">*</span> / Hausnummer <span class="text-danger">*</span></label>
<div class="col-lg-6">
<input type="text" class="form-control basicAutoComplete" autocomplete="off" data-url="<?=self::getUrl('AddressDB','api')?>?do=findStreets&autocomplete=1" name="new_address_street" id="new_address_street" value="<?=$preorder->new_address_street?>" placeholder="Straße" />
</div>
<div class="col-lg-3">
<input type="text" class="form-control" name="new_address_housenumber" id="new_address_housenumber" value="<?=$preorder->new_address_housenumber?>" placeholder="Hausnummer" />
</div> </div>
</div> </div>
<div class="form-group row"> <div class="form-group row">
<label class="col-lg-2 col-form-label" for="price">Wohneinheit *</label> <label class="col-lg-3 col-form-label" for="zip">PLZ <span class="text-danger">*</span> / Ort <span class="text-danger">*</span></label>
<div class="col-lg-2">
<input type="text" class="form-control basicAutoComplete" autocomplete="off" data-url="<?=self::getUrl('AddressDB','api')?>?do=findZips&campaign_id=<?=$campaign->id?>&autocomplete=1" name="new_address_zip" id="new_address_zip" value="<?=$preorder->new_address_zip?>" placeholder="PLZ" />
</div>
<div class="col-lg-7">
<input type="text" class="form-control basicAutoComplete" autocomplete="off" data-url="<?=self::getUrl('AddressDB','api')?>?do=findCities&campaign_id=<?=$campaign->id?>&autocomplete=1" name="new_address_city" id="new_address_city" value="<?=$preorder->new_address_city?>" placeholder="Ort" />
</div>
</div>
<div class="form-group row">
<label class="col-lg-3 col-form-label" for="zip">Ortsteil <span class="text-danger">*</span></label>
<div class="col-lg-9">
<input type="text" class="form-control basicAutoComplete" autocomplete="off" data-url="<?=self::getUrl('AddressDB','api')?>?do=findDistricts&campaign_id=<?=$campaign->id?>&autocomplete=1" name="new_address_district" id="new_address_district" value="<?=$preorder->new_address_zip?>" placeholder="Ortsteil" />
</div>
</div>
<div class="form-group row">
<label class="col-lg-3 col-form-label" for="">Wohneinheit</label>
<div class="col-lg-4">
<div class="form-group row">
<label class="col-lg-4 col-form-label text-right" for="">Block:</label>
<div class="col-lg-6">
<input type="text" class="form-control" name="new_address_block" id="new_address_block" value="<?=$preorder->block?>" />
</div>
</div>
</div>
<div class="col-lg-4">
<div class="form-group row">
<label class="col-lg-4 col-form-label text-right" for="">Stiege:</label>
<div class="col-lg-6">
<input type="text" class="form-control" name="new_address_stiege" id="new_address_stiege" value="<?=$preorder->stiege?>" />
</div>
</div>
</div>
</div>
<div class="form-group row">
<label class="col-lg-3 col-form-label" for=""></label>
<div class="col-lg-4">
<div class="form-group row">
<label class="col-lg-4 col-form-label text-right" for="">Stock:</label>
<div class="col-lg-6">
<input type="text" class="form-control" name="new_address_stock" id="new_address_stock" value="<?=$preorder->stock?>" />
</div>
</div>
</div>
<div class="col-lg-4">
<div class="form-group row">
<label class="col-lg-4 col-form-label text-right" for="">Tür:</label>
<div class="col-lg-6">
<input type="text" class="form-control" name="new_address_tuer" id="new_address_tuer" value="<?=$preorder->tuer?>" />
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="form-group row" id="wohneinheit_row">
<label class="col-lg-2 col-form-label" for="adb_wohneinheit_id">Wohneinheit *</label>
<div class="col-lg-10"> <div class="col-lg-10">
<select class="form-control" name="adb_wohneinheit_id" id="adb_wohneinheit_id" /> <select class="form-control" name="adb_wohneinheit_id" id="adb_wohneinheit_id" />
<?php if($preorder->adb_wohneinheit_id): ?> <?php if($preorder->adb_wohneinheit_id): ?>
@@ -228,34 +319,34 @@
<div class="form-group row"> <div class="form-group row">
<label class="col-lg-2 col-form-label" for="company">Firma</label> <label class="col-lg-2 col-form-label" for="company">Firma</label>
<div class="col-lg-10"> <div class="col-lg-10">
<input type="text" class="form-control" name="company" id="company" value="<?=$preorder->company?>" /> <input type="text" class="form-control" name="company" id="company" value="<?=$preorder->company?>" placeholder="Firma" />
</div> </div>
</div> </div>
<div class="form-group row"> <div class="form-group row">
<label class="col-lg-2 col-form-label" for="uid">UID</label> <label class="col-lg-2 col-form-label" for="uid">UID</label>
<div class="col-lg-10"> <div class="col-lg-10">
<input type="text" class="form-control" name="uid" id="uid" value="<?=$preorder->uid?>" /> <input type="text" class="form-control" name="uid" id="uid" value="<?=$preorder->uid?>" placeholder="UID" />
</div> </div>
</div> </div>
<div class="form-group row"> <div class="form-group row">
<label class="col-lg-2 col-form-label" for="firstname">Vorname *</label> <label class="col-lg-2 col-form-label" for="firstname">Vorname *</label>
<div class="col-lg-10"> <div class="col-lg-10">
<input type="text" class="form-control" name="firstname" id="firstname" value="<?=$preorder->firstname?>" /> <input type="text" class="form-control" name="firstname" id="firstname" value="<?=$preorder->firstname?>" placeholder="Vorname" />
</div> </div>
</div> </div>
<div class="form-group row"> <div class="form-group row">
<label class="col-lg-2 col-form-label" for="lastname">Nachname *</label> <label class="col-lg-2 col-form-label" for="lastname">Nachname *</label>
<div class="col-lg-10"> <div class="col-lg-10">
<input type="text" class="form-control" name="lastname" id="lastname" value="<?=$preorder->lastname?>" /> <input type="text" class="form-control" name="lastname" id="lastname" value="<?=$preorder->lastname?>" placeholder="Nachname" />
</div> </div>
</div> </div>
<div class="form-group row"> <div class="form-group row">
<label class="col-lg-2 col-form-label" for="street">Straße / Hausnummer *</label> <label class="col-lg-2 col-form-label" for="street">Straße / Hausnummer *</label>
<div class="col-lg-8"> <div class="col-lg-5">
<input type="text" class="form-control" name="street" id="street" value="<?=$preorder->street?>" /> <input type="text" class="form-control" name="street" id="street" value="<?=$preorder->street?>" placeholder="Straße" />
</div> </div>
<div class="col-lg-2"> <div class="col-lg-5">
<input type="text" class="form-control" name="housenumber" id="housenumber" value="<?=$preorder->housenumber?>" /> <input type="text" class="form-control" name="housenumber" id="housenumber" value="<?=$preorder->housenumber?>" placeholder="Hausnummer" />
</div> </div>
</div> </div>
<div class="form-group row"> <div class="form-group row">
@@ -296,22 +387,22 @@
<div class="form-group row"> <div class="form-group row">
<label class="col-lg-2 col-form-label" for="zip">PLZ / Ort *</label> <label class="col-lg-2 col-form-label" for="zip">PLZ / Ort *</label>
<div class="col-lg-3"> <div class="col-lg-3">
<input type="text" class="form-control" name="zip" id="zip" value="<?=$preorder->zip?>" /> <input type="text" class="form-control" name="zip" id="zip" value="<?=$preorder->zip?>" placeholder="PLZ" />
</div> </div>
<div class="col-lg-7"> <div class="col-lg-7">
<input type="text" class="form-control" name="city" id="city" value="<?=$preorder->city?>" /> <input type="text" class="form-control" name="city" id="city" value="<?=$preorder->city?>" placeholder="Ort" />
</div> </div>
</div> </div>
<div class="form-group row"> <div class="form-group row">
<label class="col-lg-2 col-form-label" for="phone">Telefon</label> <label class="col-lg-2 col-form-label" for="phone">Telefon</label>
<div class="col-lg-10"> <div class="col-lg-10">
<input type="text" class="form-control" name="phone" id="phone" value="<?=$preorder->phone?>" /> <input type="text" class="form-control" name="phone" id="phone" value="<?=$preorder->phone?>" placeholder="Telefon" />
</div> </div>
</div> </div>
<div class="form-group row"> <div class="form-group row">
<label class="col-lg-2 col-form-label" for="email">Email</label> <label class="col-lg-2 col-form-label" for="email">Email</label>
<div class="col-lg-10"> <div class="col-lg-10">
<input type="text" class="form-control" name="email" id="email" value="<?=$preorder->email?>" /> <input type="text" class="form-control" name="email" id="email" value="<?=$preorder->email?>" placeholder="Email" />
</div> </div>
</div> </div>
@@ -388,6 +479,24 @@
<?php endif; ?> <?php endif; ?>
} }
$('#new_address_street').autoComplete({minLength: 2}).keydown(preventEnter).change(updateCustomerAddressFromNewAddress).on("autocomplete.select", updateCustomerAddressFromNewAddress);
$('#new_address_zip').autoComplete({minLength: 1}).keydown(preventEnter).change(updateCustomerAddressFromNewAddress).on("autocomplete.select", updateCustomerAddressFromNewAddress);
$('#new_address_city').autoComplete({minLength: 2}).keydown(preventEnter).change(updateCustomerAddressFromNewAddress).on("autocomplete.select", updateCustomerAddressFromNewAddress);
$('#new_address_district').autoComplete({minLength: 2}).keydown(preventEnter);
$('#new_address_housenumber').keydown(preventEnter).change(updateCustomerAddressFromNewAddress).on("autocomplete.select", updateCustomerAddressFromNewAddress);
$('#new_address_block').keydown(preventEnter);
$('#new_address_stiege').keydown(preventEnter);
$('#new_address_stock').keydown(preventEnter);
$('#new_address_tuer').keydown(preventEnter);
function preventEnter() {
if(event.keyCode == 13) {
event.preventDefault();
return false;
}
}
$("#product_id").select2({ $("#product_id").select2({
allowClear: true, allowClear: true,
@@ -421,7 +530,15 @@
dataType: 'json' dataType: 'json'
}, },
minimumInputLength: 3, minimumInputLength: 3,
placeholder: "Suche nach Straße, Hausnummer, Ort" placeholder: "Suche nach Straße, Hausnummer, Ort",
allowClear: true
});
$('#adb_hausnummer_id').on('select2:close', function(e) {
if(!$('#adb_hausnummer_id').val()) {
$('#new-address-toggle').show();
}
}); });
@@ -429,6 +546,28 @@
var hausnummer_id = $('#adb_hausnummer_id').val(); var hausnummer_id = $('#adb_hausnummer_id').val();
if(!hausnummer_id) return; if(!hausnummer_id) return;
$('#new-address-toggle').hide();
$('#new-address').hide();
$.get('<?=self::getUrl("AddressDB", "Api")?>',
{
do: "getAddressByHousenumber",
hausnummer_id: hausnummer_id
},
function(success) {
if(success.status != "OK") {
return;
}
var address = success.result;
console.log(address);
$('#new_address_street').val(address.strasse);
$('#new_address_housenumber').val(address.hausnummer);
$('#new_address_zip').val(address.plz);
$('#new_address_city').val(address.ort);
$('#new_address_district').val(address.ortschaft);
},
'json');
$.get('<?=self::getUrl("AddressDB", "Api")?>', $.get('<?=self::getUrl("AddressDB", "Api")?>',
{ {
@@ -487,6 +626,14 @@
"json"); "json");
}); });
function updateCustomerAddressFromNewAddress() {
$('input[name=street]').val($('#new_address_street').val());
$('input[name=housenumber]').val($('#new_address_housenumber').val());
$('input[name=zip]').val($('#new_address_zip').val());
$('input[name=city]').val($('#new_address_city').val());
}
$('#adb_wohneinheit_id').change(function() { $('#adb_wohneinheit_id').change(function() {
val = $('#adb_wohneinheit_id').val(); val = $('#adb_wohneinheit_id').val();
@@ -611,6 +758,12 @@
'json'); 'json');
} }
function toggleNewAddress() {
$('#new-address').toggle();
$('#wohneinheit_row').toggle();
event.preventDefault();
}
</script> </script>
<?php include(realpath(dirname(__FILE__)."/../../$mfLayoutPackage")."/footer.php"); ?> <?php include(realpath(dirname(__FILE__)."/../../$mfLayoutPackage")."/footer.php"); ?>

View File

@@ -40,7 +40,16 @@ class ADBGemeindeModel {
$db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
$where = self::getSqlFilter($filter); $where = self::getSqlFilter($filter);
$res = $db->select("Gemeinde", "*", "$where ORDER BY name,code,kennziffer LIMIT 1"); $sql = "SELECT Gemeinde.* FROM Gemeinde
LEFT JOIN Plz ON (Plz.gemeinde_id = Gemeinde.id)
LEFT JOIN GemeindeNetzgebiet ON (GemeindeNetzgebiet.gemeinde_id = Gemeinde.id)
LEFT JOIN Netzgebiet ON (GemeindeNetzgebiet.netzgebiet_id = Netzgebiet.id)
LEFT JOIN Ortschaft ON (Ortschaft.gemeinde_id = Gemeinde.id)
WHERE $where
GROUP BY Gemeinde.id
ORDER BY name,code,kennziffer
LIMIT 1";
$res = $db->query($sql);
if($db->num_rows($res)) { if($db->num_rows($res)) {
$data = $db->fetch_object($res); $data = $db->fetch_object($res);
$item = new ADBGemeinde($data); $item = new ADBGemeinde($data);

View File

@@ -1,6 +1,7 @@
<?php <?php
class ADBHausnummerModel { class ADBHausnummerModel {
public $oaid;
public $adrcd; public $adrcd;
public $netzgebiet_id; public $netzgebiet_id;
public $extref; public $extref;
@@ -9,14 +10,17 @@ class ADBHausnummerModel {
public $strasse_id; public $strasse_id;
public $hausnummer; public $hausnummer;
public $zusatz; public $zusatz;
public $grund_nr;
public $unit_count;
public $gps_lat; public $gps_lat;
public $gps_long; public $gps_long;
public $rollout; public $rollout;
public $rollout_info; public $rollout_info;
public $freigabe; public $freigabe;
public $manual_add;
public $manual_add_by;
public $manual_add_info;
public $create_by = null;
public $edit_by = null;
public $create = null; public $create = null;
public $edit = null; public $edit = null;
@@ -153,6 +157,8 @@ class ADBHausnummerModel {
$where .= " AND Hausnummer.netzgebiet_id=$netzgebiet_id"; $where .= " AND Hausnummer.netzgebiet_id=$netzgebiet_id";
} elseif(is_array($netzgebiet_id) && count($netzgebiet_id)) { } elseif(is_array($netzgebiet_id) && count($netzgebiet_id)) {
$where .= " AND Hausnummer.netzgebiet_id IN (". implode(",", $netzgebiet_id).")"; $where .= " AND Hausnummer.netzgebiet_id IN (". implode(",", $netzgebiet_id).")";
} elseif($netzgebiet_id === null) {
$where .= " AND Hausnummer.netzgebiet_id IS NULL";
} }
} }

View File

@@ -41,7 +41,16 @@ class ADBOrtschaftModel {
$db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
$where = self::getSqlFilter($filter); $where = self::getSqlFilter($filter);
$res = $db->select("Ortschaft", "*", "$where ORDER BY name,kennziffer LIMIT 1"); $sql = "SELECT Ortschaft.* FROM Ortschaft
LEFT JOIN Gemeinde ON (Ortschaft.gemeinde_id = Gemeinde.id)
LEFT JOIN Plz ON (Plz.gemeinde_id = Gemeinde.id)
LEFT JOIN GemeindeNetzgebiet ON (GemeindeNetzgebiet.gemeinde_id = Gemeinde.id)
LEFT JOIN Netzgebiet ON (GemeindeNetzgebiet.netzgebiet_id = Netzgebiet.id)
WHERE $where
ORDER BY gemeinde_id,Ortschaft.name,Ortschaft.kennziffer
LIMIT 1";
$res = $db->query($sql);
if($db->num_rows($res)) { if($db->num_rows($res)) {
$data = $db->fetch_object($res); $data = $db->fetch_object($res);
$item = new ADBOrtschaft($data); $item = new ADBOrtschaft($data);

View File

@@ -40,7 +40,16 @@ class ADBPlzModel {
$db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
$where = self::getSqlFilter($filter); $where = self::getSqlFilter($filter);
$res = $db->select("Plz", "*", "$where ORDER BY plz LIMIT 1"); $sql = "SELECT Plz.* FROM Plz
LEFT JOIN Gemeinde ON (Gemeinde.id = Plz.gemeinde_id)
LEFT JOIN GemeindeNetzgebiet ON (GemeindeNetzgebiet.gemeinde_id = Plz.gemeinde_id)
LEFT JOIN Netzgebiet ON (GemeindeNetzgebiet.netzgebiet_id = Netzgebiet.id)
WHERE $where
GROUP BY Plz.id
ORDER BY plz
LIMIT 1";
mfLoghandler::singleton()->debug($sql);
$res = $db->query($sql);
if($db->num_rows($res)) { if($db->num_rows($res)) {
$data = $db->fetch_object($res); $data = $db->fetch_object($res);
$item = new ADBPlz($data); $item = new ADBPlz($data);

View File

@@ -41,7 +41,17 @@ class ADBStrasseModel {
$db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
$where = self::getSqlFilter($filter); $where = self::getSqlFilter($filter);
$res = $db->select("Strasse", "*", "$where ORDER BY gemeinde_id,kennziffer,name LIMIT 1"); $sql = "SELECT Strasse.* FROM Strasse
LEFT JOIN Hausnummer ON (Hausnummer.strasse_id = Strasse.id)
LEFT JOIN Plz ON (Plz.id = Hausnummer.plz_id)
LEFT JOIN Gemeinde ON (Gemeinde.id = Strasse.gemeinde_id)
LEFT JOIN GemeindeNetzgebiet ON (GemeindeNetzgebiet.gemeinde_id = Strasse.gemeinde_id)
LEFT JOIN Netzgebiet ON (GemeindeNetzgebiet.netzgebiet_id = Netzgebiet.id)
WHERE $where
GROUP BY Strasse.id
ORDER BY gemeinde_id,name,kennziffer
LIMIT 1";
$res = $db->query($sql);
if($db->num_rows($res)) { if($db->num_rows($res)) {
$data = $db->fetch_object($res); $data = $db->fetch_object($res);
$item = new ADBStrasse($data); $item = new ADBStrasse($data);

View File

@@ -28,12 +28,24 @@ class AddressDBController extends mfBaseController {
case "getFilteredBuildings": case "getFilteredBuildings":
$return = $this->getFilteredBuildingsApi(); $return = $this->getFilteredBuildingsApi();
break; break;
case "getAddressByHousenumber":
$return = $this->getAddressByHousenumberApi();
break;
case "getUnits": case "getUnits":
$return = $this->getUnitsApi(); $return = $this->getUnitsApi();
break; break;
case "findStreets":
$return = $this->findStreetsApi();
break;
case "findDistricts":
$return = $this->findDistrictsApi();
break;
case "findCities": case "findCities":
$return = $this->findCitiesApi(); $return = $this->findCitiesApi();
break; break;
case "findZips":
$return = $this->findZipsApi();
break;
case 'findBuildings': case 'findBuildings':
$return = $this->findBuildingsApi(); $return = $this->findBuildingsApi();
break; break;
@@ -189,15 +201,109 @@ class AddressDBController extends mfBaseController {
return ['units' => $results]; return ['units' => $results];
} }
private function findCitiesApi() { private function getAddressByHousenumberApi() {
$cities = []; $zips = [];
$search = $this->request->search; $hausnummer_id = trim($this->request->hausnummer_id);
$ort_ids = []; if(!is_numeric($hausnummer_id) || $hausnummer_id < 1) {
return false;
}
$hausnummer = new ADBHausnummer($hausnummer_id);
$result = [
'hausnummer_id' => $hausnummer->id,
'strasse' => $hausnummer->strasse->name,
'hausnummer' => $hausnummer->hausnummer,
'plz' => $hausnummer->plz->plz,
'ort' => $hausnummer->strasse->gemeinde->name,
'ortschaft' => $hausnummer->ortschaft->name
];
return $result;
}
private function findStreetsApi() {
$streets = [];
$search = trim($this->request->q);
foreach(ADBStrasseModel::search(['name%' => $search]) as $street) {
if(!in_array($street->name, $streets)) {
$streets[] = $street->name;
}
}
$this->returnJson($streets);
}
private function findZipsApi() {
$zips = [];
$search = trim($this->request->q);
$campaign_id = trim($this->request->campaign_id);
$plz_search = [];
if($campaign_id) {
$campaign = new Preordercampaign($campaign_id);
if(!$campaign->id) {
header("Content-Type: application/json");
echo json_encode(["results" => []]);
exit;
}
$scluster_ids = [];
foreach($campaign->salesclusters as $scluster) {
$scluster_ids[] = $scluster->id;
}
$plz_search['netzgebiet_id'] = $scluster_ids;
}
$plz_search['plzstring%'] = $search;
foreach(ADBPlzModel::search($plz_search) as $zip) {
if(!in_array($zip->plz, $zips)) {
$zips[] = $zip->plz;
}
}
$this->returnJson($zips);
}
private function findDistrictsApi() {
$districts = [];
$search = trim($this->request->q);
$autocomplete = $this->request->autocomplete;
$campaign_id = trim($this->request->campaign_id);
$district_search = [];
if($campaign_id) {
$campaign = new Preordercampaign($campaign_id);
if(!$campaign->id) {
header("Content-Type: application/json");
echo json_encode(["results" => []]);
exit;
}
$scluster_ids = [];
foreach($campaign->salesclusters as $scluster) {
$scluster_ids[] = $scluster->id;
}
$district_search['netzgebiet_id'] = $scluster_ids;
}
$district_search['name%'] = "%".$search;
foreach(ADBOrtschaftModel::search($district_search) as $district) {
if(!in_array($district->name, $districts)) {
$districts[] = $district->name;
}
}
/*
if(is_numeric($search)) { if(is_numeric($search)) {
$adb = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); $adb = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
$sql = "SELECT ortschaft_id from view_wohneinheit WHERE plz like '%$search%' GROUP BY ortschaft_id"; $sql = "SELECT ortschaft_id from view_wohneinheit WHERE ortschaft like '%$search%' GROUP BY ortschaft_id";
$res = $adb->query($sql); $res = $adb->query($sql);
if($adb->num_rows($res)) { if($adb->num_rows($res)) {
@@ -215,6 +321,15 @@ class AddressDBController extends mfBaseController {
$results = ADBOrtschaftModel::search(['name%' => $search]); $results = ADBOrtschaftModel::search(['name%' => $search]);
} }
if($autocomplete) {
foreach($results as $city) {
if(!in_array($city->name, $cities)) {
$cities[] = $city->name;
}
}
$this->returnJson($cities);
}
foreach($results as $city) { foreach($results as $city) {
$gemeinde = new ADBGemeinde($city->gemeinde_id); $gemeinde = new ADBGemeinde($city->gemeinde_id);
@@ -226,8 +341,43 @@ class AddressDBController extends mfBaseController {
$data['name'] = $city->name; $data['name'] = $city->name;
$cities[] = $data; $cities[] = $data;
} }
*/
$this->returnJson($districts);
//return ['cities' => $cities];
}
private function findCitiesApi() {
$cities = [];
$search = $this->request->q;
//$autocomplete = $this->request->autocomplete;
$campaign_id = trim($this->request->campaign_id);
$city_search = [];
if($campaign_id) {
$campaign = new Preordercampaign($campaign_id);
if(!$campaign->id) {
header("Content-Type: application/json");
echo json_encode(["results" => []]);
exit;
}
$scluster_ids = [];
foreach($campaign->salesclusters as $scluster) {
$scluster_ids[] = $scluster->id;
}
$city_search['netzgebiet_id'] = $scluster_ids;
}
$city_search['name%'] = "%".$search;
foreach(ADBGemeindeModel::search($city_search) as $city) {
if(!in_array($city->name, $cities)) {
$cities[] = $city->name;
}
}
$this->returnJson($cities);
return ['cities' => $cities];
} }
private function getFilteredBuildingsApi() { private function getFilteredBuildingsApi() {

View File

@@ -182,7 +182,7 @@ class PreorderController extends mfBaseController {
protected function saveAction() { protected function saveAction() {
$r = $this->request; $r = $this->request;
//var_dump($r); //var_dump($r);exit;
/* /*
* add or edit * add or edit
@@ -302,15 +302,172 @@ class PreorderController extends mfBaseController {
$preorder->update($data); $preorder->update($data);
} }
/*
* validation
*/
$campaign = new Preordercampaign($preorder->preordercampaign_id); $campaign = new Preordercampaign($preorder->preordercampaign_id);
if(!$campaign->id) { if(!$campaign->id) {
$this->layout()->setFlash("Keine Kampagne ausgewählt!", "error"); $this->layout()->setFlash("Keine Kampagne ausgewählt!", "error");
$this->redirect("Preordercampaign"); $this->redirect("Preordercampaign");
} }
//var_dump($preorder, $r);exit;
// handle new address creation
if(!$preorder->adb_hausnummer_id) {
// check if new address was submitted
$this->log->debug("check if new address was submitted");
if($r->new_address_street && $r->new_address_housenumber && $r->new_address_zip && $r->new_address_city && $r->new_address_district) {
$city_search = trim($r->new_address_city);
$district_search = trim($r->new_address_district);
$zip_search = trim($r->new_address_zip);
$street_search = trim($r->new_address_street);
$housenumber_search = trim($r->new_address_housenumber);
$block = trim($r->new_address_block);
$stiege = trim($r->new_address_stiege);
$stock = trim($r->new_address_stock);
$tuer = trim($r->new_address_tuer);
$preorder->new_address_city = $city_search;
$preorder->new_address_district = $district_search;
$preorder->new_address_zip = $zip_search;
$preorder->new_address_street = $street_search;
$preorder->new_address_housenumber = $housenumber_search;
$netzgebiet_ids = [];
foreach($campaign->salesclusters as $scluster) {
$netzgebiet_ids[] = $scluster->id;
}
$netzgebiet_id = $netzgebiet_ids[0];
if(!$netzgebiet_id) {
$this->layout()->setFlash("Kann Adresse nicht updaten: Kampagne hat kein Netzgebiet", "error");
$this->layout()->set("preorder", $preorder);
$this->layout()->set("campaign", $campaign);
return $this->addAction();
}
$netzgebiet = new ADBNetzgebiet($netzgebiet_id);
if(!$netzgebiet->id) {
$this->layout()->setFlash("Neztgebiet nicht gefunden", "error");
$this->layout()->set("preorder", $preorder);
$this->layout()->set("campaign", $campaign);
return $this->addAction();
}
$city = ADBGemeindeModel::getFirst(['name' => $city_search, 'netzgebiet_id' => $netzgebiet_id]);
if(!$city) {
$this->layout()->setFlash("Gemeinde nicht Adress-DB gefunden", "error");
$this->layout()->set("preorder", $preorder);
$this->layout()->set("campaign", $campaign);
return $this->addAction();
}
$district = ADBOrtschaftModel::getFirst(['name' => $district_search, 'netzgebiet_id' => $netzgebiet_id]);
if(!$district) {
$this->layout()->setFlash("Ortsteil nicht Adress-DB gefunden", "error");
$this->layout()->set("preorder", $preorder);
$this->layout()->set("campaign", $campaign);
return $this->addAction();
}
$zip = ADBPlzModel::getFirst(['plz' => $zip_search, 'gemeinde_id' => $city->id]);
if(!$zip) {
$this->layout()->setFlash("PLZ nicht Adress-DB gefunden", "error");
$this->layout()->set("preorder", $preorder);
$this->layout()->set("campaign", $campaign);
return $this->addAction();
}
$street = ADBStrasseModel::getFirst(['name' => $street_search, 'ortschaft_id' => $district->id, 'gemeinde_id' => $city->id]);
if(!$street) {
$this->log->debug("create street");
$street = ADBStrasseModel::create([
'ortschaft_id' => $district->id,
'gemeinde_id' => $city->id,
'name' => $street_search
]);
if(!$street->save()) {
$this->layout()->setFlash("Fehler beim Speichern der neuen Straße", "error");
$this->layout()->set("preorder", $preorder);
$this->layout()->set("campaign", $campaign);
return $this->addAction();
}
}
$this->log->debug("search hausnummer");
$hausnummer = ADBHausnummerModel::getFirst(['netzgebiet_id' => $netzgebiet_ids, 'ortschaft_id' => $district_search, 'gemeinde_id' => $city->id, 'plz_id' => $zip->id, 'strasse_id' => $street->id, 'hausnummer' => $housenumber_search]);
if($hausnummer) {
// hausnummer gibts scho!
$this->layout()->setFlash("Adresse war schon vorhanden!", "warn");
$preorder->adb_hausnummer_id = $hausnummer->id;
} else {
// try with empty netzgebiet
$this->log->debug("search hausnummer mit empty netzgebiet");
$hausnummer = ADBHausnummerModel::getFirst(['netzgebiet_id' => null, 'ortschaft_id' => $district_search, 'gemeinde_id' => $city->id, 'plz_id' => $zip->id, 'strasse_id' => $street->id, 'hausnummer' => $housenumber_search]);
if($hausnummer) {
// Hausnummer ohne Netzgebiet gefunden -> update netzgebiet_id
$this->log->debug("hausnummer id: updated netzgebiet from NULL to ".$netzgebiet_ids);
$hausnummer->netzgebiet_id = $netzgebiet_id;
$hausnummer->save();
$preorder->adb_hausnummer_id = $hausnummer->id;
} else {
// try with any netzgebiet
$this->log->debug("search hausnummer with ohne netzgebiet");
$hausnummer = ADBHausnummerModel::getFirst(['ortschaft_id' => $district_search, 'gemeinde_id' => $city->id, 'plz_id' => $zip->id, 'strasse_id' => $street->id, 'hausnummer' => $housenumber_search]);
if($hausnummer) {
$this->log->debug("Hausnummer ".$hausnummer->id." in Netzgebiet (".implode(",", $netzgebiet_ids)." gesucht, aber in ".$hausnummer->netzgebiet_id)." gefunden";
$this->layout()->setFlash("Neue Adresse ist bereits im Netzgebiet ".$hausnummer->netzgebiet->name." vorhanden", "error");
$this->layout()->set("preorder", $preorder);
$this->layout()->set("campaign", $campaign);
return $this->addAction();
} else {
// hausnummer anlegen
$hausnummer = ADBHausnummerModel::create([
'netzgebiet_id' => $netzgebiet_id,
'ortschaft_id' => $district->id,
'plz_id' => $zip->id,
'strasse_id' => $street->id,
'hausnummer' => $housenumber_search,
'freigabe' => $netzgebiet->freigabe,
'manual_add' => date('U'),
'manual_add_by' => $this->me->id,
'manual_add_info' => "thetool user ".$this->me->username
]);
if(!$hausnummer->save()) {
$this->layout()->setFlash("Fehler beim Speichern der neuen Adresse", "error");
$this->layout()->set("preorder", $preorder);
$this->layout()->set("campaign", $campaign);
return $this->addAction();
}
$preorder->adb_hausnummer_id = $hausnummer->id;
$preorder->address_created = date('U');
$preorder->address_created_by = $this->me->id;
$preorder->adb_wohneinheit_id = null;
// create wohneinheit
$wohneinheit = ADBWohneinheitModel::create([
'hausnummer_id' => $hausnummer->id,
'num' => 1,
'block' => ($block) ? $block : null,
'stiege' => ($stiege) ? $stiege : null,
'stock' => ($stock) ? $stock : null,
'tuer' => ($tuer) ? $tuer : null
]);
if($wohneinheit->save()) {
$preorder->adb_wohneinheit_id = $wohneinheit->id;
} else {
$this->layout()->setFlash("Konnte Wohneinheit nicht speichern", "warn");
}
}
}
}
}
}
/*
* validation
*/
if(!array_key_exists($data['type'], $campaign->types)) { if(!array_key_exists($data['type'], $campaign->types)) {
$this->layout()->setFlash("Bitte Vorbestelltyp auswählen!", "error"); $this->layout()->setFlash("Bitte Vorbestelltyp auswählen!", "error");
@@ -362,6 +519,12 @@ class PreorderController extends mfBaseController {
//var_dump($preorder);exit; //var_dump($preorder);exit;
// unset temporary properties
unset($preorder->new_address_city);
unset($preorder->new_address_district);
unset($preorder->new_address_zip);
unset($preorder->new_address_street);
unset($preorder->new_address_housenumber);
/* /*
* generate ucode and save * generate ucode and save
@@ -375,7 +538,7 @@ class PreorderController extends mfBaseController {
} }
$qs = ['filter' => ['campaign_id' => $preorder->preordercampaign_id]]; $qs = ['filter' => ['preordercampaign_id' => $preorder->preordercampaign_id, 'ucode' => $preorder->ucode]];
$qs = http_build_query($qs); $qs = http_build_query($qs);
$this->layout()->setFlash("Vorbestellung erfolgreich gespeichert!", "success"); $this->layout()->setFlash("Vorbestellung erfolgreich gespeichert!", "success");