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
+169 -6
View File
@@ -182,7 +182,7 @@ class PreorderController extends mfBaseController {
protected function saveAction() {
$r = $this->request;
//var_dump($r);
//var_dump($r);exit;
/*
* add or edit
@@ -301,16 +301,173 @@ class PreorderController extends mfBaseController {
} else {
$preorder->update($data);
}
/*
* validation
*/
$campaign = new Preordercampaign($preorder->preordercampaign_id);
if(!$campaign->id) {
$this->layout()->setFlash("Keine Kampagne ausgewählt!", "error");
$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)) {
$this->layout()->setFlash("Bitte Vorbestelltyp auswählen!", "error");
@@ -362,6 +519,12 @@ class PreorderController extends mfBaseController {
//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
@@ -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);
$this->layout()->setFlash("Vorbestellung erfolgreich gespeichert!", "success");